Most of what you will need to know in the form of reference material can be found freely available. As far as learning concepts, you may want to search for free books or online lecture courses. (MIT has several posted, as may khanacademy.)
Google is your friend--always start there and learn to be resourceful on your own first. Many help forums, mailing lists, and even some irc channels get annoyed when asked questions that are "simple" where "simple" is defined as "the first result of any close search on google will have the answer". However, that being said, do search for help forums specific to your tools, and irc channels (freenode.org has many) where people that are experts in those tools hang out and are willing to answer even beginner questions. As for development environment, I suggest any of: Eclipse kdevelop emacs vim For C, I highly recommend getting your own copy of the original language standard book "The C Programming Language" by Kernigan and Ritchie. It's actually quite small and a relatively quick read. You can learn the changes since (such as from the C99 update) from FAQs online (use google). As for other requirements, you basically just need gcc, but may benefit from also learning gdb. There are some decent front ends to gdb such as the stand-alone DDD or the gui IDEs such as eclipse or kdevelop that may make using it at first a bit easier. You may find it useful to spend some time learning make (typical build tool for C-based projects). I suggest reading the man/info pages. I also suggest you google for the article "recursive make considered harmful". That paper has some good pointers on ways to use make more effectively as your projects grow in size. Also, if you intend to get into larger projects, (and it's easier to learn while they are small), I suggest learning an RCS--git is becoming very popular, and subversion is already--probably good to know the basics of both. Git provides some more powerful features--I would recommend learning git first, after which subversion (svn) will be trivial to learn if you encounter it. As for learning to program well in C, simply learning the syntax will not suffice. I recommend getting some books/finding online references/or classes on: - data structures - algorithms - compilers (grammar, parsing, and compilers) These cover the big topics that will enable you to solve the majority of programming problems you may encounter. Coming from php and web development there may be many concepts in the above topics that you may not have encountered yet which are essential to programming efficient solutions in a lower language such as C. BTW, once you've tackled them, you will have a good foundation to learn many other languages besides, such as Perl, C#, .Net, Java, and many others--so it's a great place to start. /* PLUG: http://plug.org, #utah on irc.freenode.net Unsubscribe: http://plug.org/mailman/options/plug Don't fear the penguin. */