Self Taught Computer Science

Having looked around the net for programming resources etc I eventually landed here. This happened more than once and from different directions so thats normally a sign to me that I've found a good resource.

I started studying with the Open University several years ago but their computing type courses are move vocational based so I switched to mathematics. The only way I can see to improve my comp sci education is to self teach myself. So for the last few weeks I've been looking around the net for free on line resources that might aid me. I 'm particular interesting in learning a FPL with a mind to implementing a programming language in one. I'm not expecting to invent anything new or popular I'm more interested in the education.

I'm intending to write up what I do for anyone else on line to use so my main requirements are that the resources are freely available. So far the best source I've found is SICP and I have been working through it. Are there any other resources that I could use. I am also interested in subjects that are not purely PLT specific. Advice, thoughts or pointers most welcome.

NOTE: I am not adverse to purchasing books, I bought SICP because I have a long commute, so if there are any introductory classics in this area please recommend them.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Getting started

Until such time as we get an LtU wiki, the Getting Started thread is the current repository of LtU recommendations. My own recommendations would be SICP, CTM, LiSP and TaPL - but I'm still in the process of working on all of these.

And getting off into a tangent...

For myself, I was an economics major and only took introductory courses in Fortran and ASM while I was an undergraduate - so everything I know about programming languages comes from self-teaching. But my general observation is that education should be designed to teach you how to teach yourself - more at the meta-learning level. A recent slashdot post has Bjarne Stroustrap lamenting the state of compsci education.

Students are taught good practical and essential topics, such as algorithms, data structures, machine architecture, programming languages, and "systems", but only rarely do they "connect the dots" to see how it all fits together in a maintainable program.
My own thought is that such failures can not be addressed by a single "connect the dot course". Rather the whole of the education is required including all the liberal arts.

Computer Science Education

I'm surprised there is no wiki. It might make a good addition to the site. I installed mediawiki a few days ago and have started writing up everything I'm doing for SICP etc. Where I find online materials or things of interest I put them up. It's surprising how much material you can find with a bit of effort.

I've read through the first chapter of SICP and have started on some of the exercises. It gets difficult quite quickly. There are over 350 exercises in SICP so I doubt I'll complete them all.

I cheated on SICP

As documented on a previous story on LtU about Solutions to SICP Exercises. In defense of my cheating, I'm more interested in Translations to other PLs. (For the most part, the first 2 and half chapters have the exercises finished in Oz). Anyhow, we're on the honor system here, so I'll look the other way if you want to take the easy route. :-)

As for the LtU wiki, lack of time on our part has delayed it's rollout - and there was some minor concern that it might make us lose focus on our particular mission.

Its not cheating

Cheers for the link to SICP in different languages. I wouldn't consider doing it in a different language cheating. I'd consider that a more difficult route and a better way to understand the concepts. My intention is to do some the exercises in Haskell en route in order to try and learn Haskell but until I start to get to grips with Scheme that can wait. I think it's going to be a hard slog but I wouldn't be learning much if it was easy.

I've started started answering SICP exercises here. These are attempts more than answers. I don't expect to be doing this full time but as I get time I'll write them up. To quote Bjarne Stroustrup

High schools could teach students to work hard at something (just about anything), to search out information as needed, and learn to express their ideas in writing and orally. Project-based work is good for that. Exactly which programming language is used for software is less important, but the aim should not be to make tasks as simple as possible but to challenge students.

I think writing them up for general perusal forces me to think a bit harder about them.

oh... and do you have a link?

I'm interested in any and all resources on SICP. Thanks.

Appel

wrote "Modern Compiler Implementation in ML", I think this is the book for you. See the table of contents and some pages here

Logic

I agree 100% with the 'learn how to learn' comment above. One problem I had diving into higher level CS books was a lack of foundations. One of which was syntax used in logical expressions. For learning the logic backround I found this book to be outstanding:

http://www.amazon.com/Logic-Computer-Science-Modelling-Reasoning/dp/052154310X/

I also switched to Maths and feel that I am much better off than I was in the CS program. I'm certainly more challenged with my courses. I previously mentioned John Stillwells writing about intro math subjects (algebra, number theory). Very good stuff.

Why Mathematics

I was given a copy of TAOCP several years ago and while some of it made a lot of sense, description of trees etc, I was unable to appreciate the more mathematical parts. This was one of the reasons I decided to do a mathematics degree. I'll never be great at mathematics but I enjoy it and I know it isn't going out of fashion.