Learning C
avinashv: I learned C a while back, and don't regret the time spent doing so at all.  This is how I'd recommend going about it:* Everyone is going to recommend K&R, which is fine.  Find a copy of C Interfaces and Implementations as well--very good implementations with explanations of standard high-level structures.* Read source.  SQLite's source, for example, is very well written and documented, and they actually have a version to download recommended for reading (everything is in one file).* Implement.  You're going to want to try implement standard Unix commands yourself.  Try writing an interpreter/compiler as well.  These things give you a good grip on a wide variety of C basics and will make sure you can work well with memory management and all that.* Assembly.  This is where I would learn assembly (i.e., where I did).  I don't think you need to go too far in depth, but a basic working knowledge will make debugging much, much easier.