15

I've been programming as a consultant for years, and I adore my work, which involves a lot of object-oriented analysis and design of software systems using managed languages (ie. software engineering). But I'd like to get a doctorate eventually, and it bothers me that I never really "got" Computer Science theory. In university I only did marginally well in those courses because the way they were taught did not work for me. I learn by observing application of concepts, not rote memorisation.

An example of where I've overcome such a barrier before - I had a horrible first year. The professor (who I now know was barely qualified and an incompetent teacher) started with C++, teaching us procedural programming. Technically I'd learned what an object was, but it wasn't until I saw the application of object-oriented analysis and design (with design patterns and other structures such as linked lists) that I really understood what they were for.

How would I go about learning subjects such as compilers, programming language theory, and analysis of algorithms? What would be a good way to get started on those? For example, I'd like to write a compiler eventually (for fun) but I've no idea where to start. Anyone ever been in this situation? Any suggestions for tutorials, free online lecture videos or reference (Something like w3schools would be wonderful)?

(I'd like to add that browsing Stackoverflow has already taught me loads, but I'd like it to be a bit more formal : )

EDIT: Thanks all for the suggestions. I've marked an answer that works for me personally, but keep the answers coming : )

rene
  • 41,474
  • 78
  • 114
  • 152
calico-cat
  • 1,324
  • 6
  • 20
  • 36
  • 3
    Best compiler resource on SO is http://stackoverflow.com/questions/1669/learning-to-write-a-compiler - ignore the dragon book recommendations though. –  Jan 27 '10 at 22:52
  • That's a great resource, thanks. Why is the dragon book no good? Just curious. – calico-cat Jan 27 '10 at 23:18
  • 4
    I rather liked the Dragon book, Neil. Why do you argue against it? – Paul Nathan Jan 27 '10 at 23:28
  • 1
    Even though the dragon book is quite dated, it is a very nice collection of all the algorithms involved in compiler writing. I never once had to open another book/search for some paper. Its all in there. – Christian Klauser Feb 06 '10 at 07:31
  • there are a lot of free CS classes on https://www.coursera.org/ – Clocks Aug 16 '13 at 15:39
  • Does getting an advance degree in theoretical CS lead to any jobs? Or is it usually done for curiosity. – Celeritas Dec 07 '15 at 04:29

9 Answers9

5

I like Sedgewick's "Algorithms" (isbn 0201066734 1988 604p) because it talks one through algorithms in a conversational style, and has good examples. See the reviews under Amazon. (There are many variant editions, multivolume C++ Java etc.)

(Added 2feb:) Althoough algorithms are fundamental and fun, they're rather remote — hiking in high country, not the daily traffic jam.
Bentley's "Programming Pearls" (isbn 0-201-65788-0 2000 239p pearls )
"is full of small case studies, real examples, and interesting exercises for learning about how to program".

For big team software projects, Brooks's "Mythical Man-month" (isbn 0201835959 2ed 1995 322p Amazon ) is a must:
"conceptual integrity of the product is critical". And citing Parnas on p. 221:

instead of teaching people that O-O is a type of design, and giving them design principles, people have taught that O-O is the use of a particular tool. We can write good or bad programs with any tool. Unless we teach people how to design ...

Finally, visualization / GUIs / UIs often have a lot of room for improvement. I don't know of a good introductory book in this area, on a par with the above; anyone else ?

denis
  • 21,378
  • 10
  • 65
  • 88
4

If you plan on getting a Ph.D. someday, why not just go back to school right now? There are tons of courses you need to take as a Ph.D. candidate, and finding research in a more CSish field (algorithms, etc.) will help you with this venture even more.

Robert Greiner
  • 29,049
  • 9
  • 65
  • 85
  • +1 I'd love to, but my partner is halfway through his PhD and somebody needs to bring home a paycheque! :) It would be the perfect suggestion otherwise. – calico-cat Jan 27 '10 at 22:59
  • 2
    ah, so you're looking at a short term solution until you can get back into school? You can actually take classes online at very respectable universities. I got to http://lyle.smu.edu right now and really enjoy it. Then, when you have time to go back to school, you already have some intro classes under your belt. – Robert Greiner Jan 27 '10 at 23:02
  • 2
    I've found the video lectures at MIT: http://ocw.mit.edu/OcwWeb/web/courses/courses/index.htm#ElectricalEngineeringandComputerScience This should give me a good review at my own pace. Thanks for the idea! – calico-cat Jan 29 '10 at 08:21
4

I'm looking for the same kind of content, and people told me it is a good idea to start by taking a look at the Structure and Interpretation of Computer Programs.

It pains me that I still couldn't read it, but I am sure I will as soon as I can.

It's supposed to be a great book, and the lectures given by the authors are avaiable online.

I'm sure you're going to learn a lot more about programming in the first lecture then in your entire first year of the class you mentioned.

Also, if I'm not mistaken, the book implements a scheme compiler, written in scheme.

Flávio Amieiro
  • 41,644
  • 8
  • 32
  • 24
3

Can't go wrong with Introduction to Algorithms by Cormen, Leiserson, and Rivest.

Alex Miller
  • 69,183
  • 25
  • 122
  • 167
2

It might be a little bit random, but Project Euler can be quite a good resource to experiment with the theoretical and mathematical sides of computer science while programming at the same time.

jevon
  • 3,197
  • 3
  • 32
  • 40
2

Typically I've found computer science theory books to not be designed around mass consumption, unlike w3schools.com.

"There is no royal road", as Euclid is reported to have said.

I found the Hopcroft and Ullman book on automata readable; it is heavily theoretical, but I took the high-level concepts from it as a sophmore in college. I've found Sara Baase's book on Algorithms a good(albeit dry) introduction. Cormen has a book on Algorithms that's probably the most complete textbook currently written.

Of course, if you want the classic computer science text, you need to read through Knuth's Art of Computer Programming. Haven't read it through; it's a bit pricey for me.

Paul Nathan
  • 39,638
  • 28
  • 112
  • 212
  • I've been planning to read Knuth's books when I'm a bit more knowledgeable about the basic concepts. They're very... terse. – calico-cat Jan 28 '10 at 01:57
2

Academic Earth and MIT’s OpenCourseware are featured in Bill Gates Blog. Additionally, there are tons of Educational Videos on YouTube EDU and Google Tech Talks (was known as Google engEDU).

And these days there are also Coursera, Udacity, edX.

Afriza N. Arief
  • 7,696
  • 5
  • 47
  • 74
2

:) I am a student who is currently just done with a course in compiler design. There is this book by Aho, Ullman and Sethi which is titled Compiler Design - Principles, techniques and tools. There is a book on programming language theory called The Practice of Programming - simplicity, clarity and generality by Kernighan and Pike which I had just started recently.. it is a proving to be very handy. Coming to videos courses I know some video resources which would be very helpful they are charged though but I believe they might be worth a look at least, just google NPTEL resources, finally, I find Indian author books very easy to understand as I am Indian, since its like you want to start all over again... you can check out this site for useful stuff.. www.kicit.com... Happy learning...:) I am with you on the idea of learning things more practically( with e.g. and may be what more better than personal experience) than theoretically...cya..:)

Tom Zych
  • 13,329
  • 9
  • 36
  • 53
boddhisattva
  • 6,908
  • 11
  • 48
  • 72
1

I have found iTunes U to be very good. They have a wide range of free material from amazing colleges like MIT, Stanford, and Caltech. I haven't watched them in a while so I don't know how they would suit your type of learning but its a good idea IMO to look at something like this before you start school again just so you know what it will possibly be like.

Rowan
  • 57
  • 1
  • 6