views:

204

answers:

7

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 : )

+3  A: 

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
+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
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
I've found the video lectures at MIT: http://ocw.mit.edu/OcwWeb/web/courses/courses/index.htm#ElectricalEngineeringandComputerScienceThis should give me a good review at my own pace. Thanks for the idea!
calico-cat
great idea. good luck.
Robert Greiner
+3  A: 

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
+1  A: 

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
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
+3  A: 
Denis
+1 Thank you so much. I'll check those out.
calico-cat
+1  A: 

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)

afriza
+1  A: 

Hi..:) 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 Kernigham 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 atleast, 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..:)

mgj
+2  A: 

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

Alex Miller