Randomly found this:
http://matt.might.net/articles/what-cs-majors-should-know/
Do you people agree with the long, pretty specific list of things? o_O Just wondering, as I have little experience relative to many people here.
For an CS evangelist, probably, for practical programming this list is godawful.
Also some points is ridiculous, like this bit about emacs/vim against IDE. You know, most mundane tasks is tens times faster in IDE than in vim, whatever this ridiculous purist jerks tell you.
Also, what is your point? You can't become high paid evangelist, like Fowler or such from a scratch, so make you career as a fellow coder first.
From my perspective (senior programmer for 8+ years, web) to be a succesfull member of any software team you need, from top to bottom
- Get a communicative skills. This is the most important part - nobody likes to work with a jerk. You can be aspergery but you can't be an ass. I've seen multiple guys laid off that way, and they was very capable coders, amazing, some of them. Team microclimate is the most important thing.
- Get the difference between functional and procedural programming and choose your future area of expertise. It's very distinctive fields and choose what you like more. You know, haskell and scala is used in very different areas than PHP and python.
- Decide what you like more - waterfall model or a agile. Again, that very important what workflow you prefer most. Difference is huge.
- Learn your main language thoroughly. I can't stress that enough, your language is your main tool - you need to know all the quirks and pitfalls of it. You need to know several languages, or atleast being capable to read it with understanding, but you absolutely need to champion your thing - that's the way you earn your senoir title and getting money for it. On my job I write on PHP, perl, python, js(jQuery, coffee, underscore) but I defenitely spend most of my time perfecting PHP, because thats how I earn my paycheck. Nobody needs jacks of all trade, masters of none.
- If you work with databases - learn differences between RDBMS and nosql, learn main dogs in these areas and learn your company database thoroughly, all the way up to optimization and profiling.
- Your job specifics. I can't tell anything about software development, but I can spend hours discussing highload matters, know your tools, everything about caching and replication and sharding and many other words related.