tags:

views:

187

answers:

7

I've been a LAMP developer for 5+ years. I have learned quite a bit on my own, but I feel like my "context" as a software developer is limited (ie. I can only create scripts & web applications). Ultimately I'd like to be able to create a range of applications from daemons to desktop apps. Additionally I'd like to learn more about the "internals" of programming (ie. PHP is a wrapper for c, perhaps I should learn more c?)

I'd like to know what resources & methods that have helped people further their knowledge of computer science / software creation. Unfortunately I don't think I'll be able to go back to school and get another degree :-P

+3  A: 

If you want to jump in with both feet, there's MIT's Open Courseware. For example, here's the online version of the famous course "6.001 Structure and Interpretation of Computer Programs".

To take smaller steps, I'd suggest learning other programming languages that are complementary to PHP, like Python or Ruby. Maybe eventually Java. The more languages you learn, the easier it becomes to learn even more languages, or to deepen the knowledge you have of the languages you already know.

Rafe
I love these MIT Open Courseware. A great addition to my studies.
Burkhard
+1  A: 

I don't recommend that you directly move to the MIT course ware and SICP. Start from some basics. Read the "C Programming Language" by Brian Kernighan and Dennis Ritchie. Write some C extensions to PHP. After you are comfortable with C move on to C++ (Read "The C++ Programming Language" by Bjarne Stroustrup) or Java (tons of documentation and tutorial are available at http://java.sun.com/). Note that the books you choose are important. While learning a new language, a book written by it's creator should be preferred, as it will show you the right idioms, which is very important. Then move on to learn about new paradigms, like functional programming. At this point I think SICP will be a good choice. Learn one or more functional languages - Lisp/Scheme, Clojure, Haskell etc.

Make it a point that you never stop learning!

Vijay Mathew
More or less agree. But the "start with C, then move on to C++" thing is silly. Treat them as separate languages that can and should be learned independently. Knowing C does little more for your C++ skills than prime you to do everything in the worst possible way in C++
jalf
I agree that C and C++ and two different languages. But don't forget that, C is a subset of C++ (or to quote Stroustrup himself - "C++ is a better C). So I don't think starting with C and moving on to C++ is silly. Learning to program in C, especially using the book I mentioned, is essential for all programmers who like to do serious work using the C family of languages (C++, Java, C# etc etc).
Vijay Mathew
The problem is that people bring all sort of crazy stuff like char** over to C++ when they first learn C.
lhahne
Read slides 34 to 38 of http://www.stroustrup.com/Programming/27_C.ppt before deciding that learning C will help you learn C++.
Max Lybbert
A: 

When i started to learn PHP i found this really good site http://tizag.com

It kept all the stuff i needed to learn basic.. When any complex programming was required i looked else where, However without tizag being my cheat sheet for web bassed languages i would have been lost;

My cheat sheet for C++ was http://cplusplus.com/doc/tutorial/

Its basic stuff, with very clear explination. However i do recomand you try coding the examples rather than just read over it.

Practice Makes Perfect (Speaking of Which gota beat Suzuka in GT5 Proluge in under 1:33:487)

Shahmir Javaid
+2  A: 

I would really recommend Stroustrup's excellent book to learn modern C++ :)

AraK
Not being a brat... But whats the birds on the front cover to do with the book. Like every programming book has something dumb over it. A nude pic would be better, It has nothing to do with programming but Hey :D
Shahmir Javaid
+1  A: 

Pick a language, then seek out resources for learning it.

The one thing I'd suggest is to treat C, C++ and Java as sibling languages. Don't think "If I start with C, I can proceed to C++ and then to Java" or similar. Each of them can and should be learned independently of the others.

Java is often said to be inspired by C++, which any C++ programmer can see is clear nonsense. It is inspired by the earliest versions of C++, the ones that had more in common with C. And likewise, C and C++ have little in common as well. Good C code is almost guaranteed to be horrible C++ code.

All three languages are worth learning, and all of them will probably teach you a lot about programming. So pick one, and buy a good book on it.

jalf
+1  A: 

Have a look over at Stanford's online courses it is a great place to start programming in more complex languages. the site has both java and c++ courses online and much more.

Leon
A: 

Get a job as a starting C++ developer. A bit of fiddling around at home isn't going to do much good, except for getting your foot in the door at an interview. To get to that level, anything is good - Accelerated C++ being a good book, or The C++ Programming Language (quite hard to learn the basics from, but if you're proficient in other languages its doable).

Roel