Studying Computer Science at Home?
Jack asks: "My fianceé would like to study computer science at home, with a view to becoming a software engineer. She is disabled, so it is hard for her to attend a course at an actual college or university. She completed high school, getting good qualifications in maths, but has no formal training in computer science, as yet. Can anyone recommend good home study courses for her? (We are in the UK)."
Check out MIT's OpenCourseWare. Many of MIT's classes materials all available freely online. If you are looking to learn computer science, it's hard to find a better curriculum.
Your fiancee can get a Comp Sci degree through the Open University, and she can mix and match courses to suit her particular interests and strengths.
My experience is with their maths courses and a Digital Communications course. The materials are very good as is their study support. It can be hard work though as you have to discipline yourself to study, you can't just go with the flow like I did at school and "scrape" good grades by virtue of having sat in the classroom and paid some attention.
My only gripe is with their Windows-centrism. For maths courses you have to use MathCAD which I have found does not run under WINE very easily or well, and a lot of their multimedia courseware in the digital comms course was Windows based (though IIRC WINE handled it quite well).
Yours Sincerely, Michael.
You're missing all of the mathematical background that makes up Computer Science. What you've proposed is Computer Programming.
http://mitpress.mit.edu/sicp/full-text/book/book.h tml
assert(expired(knowledge));
There's a big difference between just learning programming and learning computer science.
If computer science is what she's really after then here's a rather typical computer science ciriculum along with some poplular books that I can think of:
calculus
discrete math
linear algebra
numerical methods (optional)
programming intro (C/C++, Java, Scheme, Ocaml)
assembly language (x86, mips)
data structures
althorithms (rivest book)
theory of computation
digital electronics
computer architecture (patterson book)
embedded systems (optional)
theory of programming languages (python, perl, ocaml, prolog, lisp)
compiler design
operating systems (tannenbaum book)
artificial intelligence (optional)
software engineering (optional)
system administration (optional)
computer graphics (optional)
And I maybe left out a few more of the optional type of classes you can find at various universities. Anyway, just search the web for each of the above subjects and you'll find loads of information. When I was working on my degree, I found actual course websites to be particularly useful a lot of the time, as they'd have lectures, homeworks, exams, and projects, all with solutions a lot of the times.
Now software engineering is sort of a branch of computer science unto itself. So if that's the ultimate goal I'd suggest learning all of the above rather thoroughly and then moving on to specialize in software engineering.
Anyway, that's my two cents, for whatever it's worth. Wish your fiance good luck for me.
Free will is just an illusion