I'd recommend getting started in the following order:
1) Familiarity with Unix & shell scripting
2) A scripting language (Python/Ruby/Perl)
3) C
If you have more time, learn C++/Java, and a functional language. From a motivation standpoint, it might be helpful to learn a language with a specific task/project in mind (ie, I want to learn Python to make a webapp that does XYZ).
Hm, I personally found shell scripting very frustrating.
Out of the 2), I'd pick Ruby. Feels the most newbie-friendly.
C? Hm, yes, maybe. But I doubt you can manage C in 8 months if you never coded before. And for a "startup engineer", it might not be that relevant anyway.
I don't understand the mystique surrounding C. If you forget about pointers and structs for a minute and keep everything to one .c file and one .h file, there's nothing that would keep a beginner from learning the rest. Even though you can do complicated things with it, it's not that complicated of a language. Once a beginner learns to deal with "array index out of bounds" etc. they'll have a much easier time writing well-formed code in the future. C's role as an ancestor of (almost) all modern languages means that once you're familiar with it, new languages will be easier to pick up. Plus, the language has a great book: I'd tell a beginner to pick up Kernighan and Ritchie and read that.
You can learn CS 101-type C pretty quickly by eliminating pointers/structs/etc., but you won't be able to read/alter any real-world open source C. If you learn Python or Ruby, for example, you can jump into github and see what people are doing right now.
If you're looking for an ancestor language, you'd be just as well off learning Smalltalk, which you can do real things with immediately (e.g. learn it in the browser with Seaside), and then apply those lessons to modern languages like Obj-C and Ruby.
It's dated, but it is still one of the best expositions that I, in my limited experience, have seen.
I'm not certain about it as an introductory text to someone entirely new to programming. But it concisely and deeply explains a "philosophy" that is essential to good UNIX work and, I think, to programming in general.
Be careful in your resource selection. There is so much out there. A small fraction of those resources are the real gems. They convey the heart of the matter, and often in fewer pages than other resources that "beat around the bushes", becoming muddled or focusing on detail more than concepts.
Accumulating knowledge through reading and study can provide some sense of the lay of the land. When you encounter a topic, you may recognize it as fitting in "roughly over there". But it is practical work that is really going to motivate and solidify your knowledge. Find some things that interest you, and dig in. Rather than costing you time, they will turn concepts into the experience that brings real comprehension.
That is a good recipe. Gee, wish I had that 10 years ago, ha!
I would suggest PHP for "scripting language" since syntax-wise it is similar to C, so if one is learning that, then PHP goes with it nicely. w3c.org has good tutorials on all kinds of web related stuff, HTML, XSL, etc., including a tutorial on PHP. Recommend K&R's "The C Programming Language". That is like my holy book of programming, or would be, were I religious, lol. Plenty of books on shell scripting at the local barnes and noble, but I would focus on general syntax, not specific operating systems, since those come and go.
Comments
I'd recommend getting started in the following order:
If you have more time, learn C++/Java, and a functional language. From a motivation standpoint, it might be helpful to learn a language with a specific task/project in mind (ie, I want to learn Python to make a webapp that does XYZ).Also, check out http://norvig.com/21-days.html
Hm, I personally found shell scripting very frustrating.
Out of the 2), I'd pick Ruby. Feels the most newbie-friendly.
C? Hm, yes, maybe. But I doubt you can manage C in 8 months if you never coded before. And for a "startup engineer", it might not be that relevant anyway.
I don't understand the mystique surrounding C. If you forget about pointers and structs for a minute and keep everything to one .c file and one .h file, there's nothing that would keep a beginner from learning the rest. Even though you can do complicated things with it, it's not that complicated of a language. Once a beginner learns to deal with "array index out of bounds" etc. they'll have a much easier time writing well-formed code in the future. C's role as an ancestor of (almost) all modern languages means that once you're familiar with it, new languages will be easier to pick up. Plus, the language has a great book: I'd tell a beginner to pick up Kernighan and Ritchie and read that.
You can learn CS 101-type C pretty quickly by eliminating pointers/structs/etc., but you won't be able to read/alter any real-world open source C. If you learn Python or Ruby, for example, you can jump into github and see what people are doing right now.
If you're looking for an ancestor language, you'd be just as well off learning Smalltalk, which you can do real things with immediately (e.g. learn it in the browser with Seaside), and then apply those lessons to modern languages like Obj-C and Ruby.
Array index out of bounds? isn't it more like just getting weird data or a segfault or whatever else will make a newbie freak out? :)
C might not be mysterious for you (or me), but we possibly had a little more than 8 months.
Regarding 1), I'd recommend "The Unix Programming Environment".
http://en.wikipedia.org/wiki/The_Unix_Programming_Environmen...
It's dated, but it is still one of the best expositions that I, in my limited experience, have seen.
I'm not certain about it as an introductory text to someone entirely new to programming. But it concisely and deeply explains a "philosophy" that is essential to good UNIX work and, I think, to programming in general.
Be careful in your resource selection. There is so much out there. A small fraction of those resources are the real gems. They convey the heart of the matter, and often in fewer pages than other resources that "beat around the bushes", becoming muddled or focusing on detail more than concepts.
Accumulating knowledge through reading and study can provide some sense of the lay of the land. When you encounter a topic, you may recognize it as fitting in "roughly over there". But it is practical work that is really going to motivate and solidify your knowledge. Find some things that interest you, and dig in. Rather than costing you time, they will turn concepts into the experience that brings real comprehension.
That is a good recipe. Gee, wish I had that 10 years ago, ha!
I would suggest PHP for "scripting language" since syntax-wise it is similar to C, so if one is learning that, then PHP goes with it nicely. w3c.org has good tutorials on all kinds of web related stuff, HTML, XSL, etc., including a tutorial on PHP. Recommend K&R's "The C Programming Language". That is like my holy book of programming, or would be, were I religious, lol. Plenty of books on shell scripting at the local barnes and noble, but I would focus on general syntax, not specific operating systems, since those come and go.
PHP is the new BASIC.