Well this question is asked by Scott at Scott Hanselman's blog, but I want to introduce over here.
What were the Three Things You Learned About Software WHILE NOT in University?
Well this question is asked by Scott at Scott Hanselman's blog, but I want to introduce over here.
What were the Three Things You Learned About Software WHILE NOT in University?
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to build bigger and better idiots. So far the universe is winning.
(Rick Cook)
The hardest part of a piece of software is its interaction with the rest of the world.
If you want to judge the cost of a software project, or its likelihood of success or failure, measure the number and complexity of its interactions - with users, administrators, databases, hardware, operating systems, networks, everything.
The more interactions there are, and the more complex and inter-dependent they are, the more complex, expensive and prone to failure the project is.
[ That's one thing I've learned, in three paragrpahs. So vote me down. 8-) ]
School is great for learning the basics about how to program, oo design, database normalization, etc. but once you get out of school you realize that "programming" is only about 50% of what an actual programmer has to deal with.
People skills. Still a work in progress.
University is all small, one-shot programs. Real world is huge, long term programs. Real world and hard knocks has taught me the importance of careful design.
The importance of building skills outside my University CS education (business, EE, manufacturing, etc).
When I came out of school, I thought I was the man, cocky, sure of myself after all I knew my stuff, I could find my way around new languages quickly, I thought I could walk into a company and just write software, right? Oh how I was mistaken. I learned very quickly that school didn't give me much in the way of real world programming skills at all. When it comes to programming, university is much like graduating from primary school - you can speak your native language, read, write do basic arithmetic, you can understand things you are told. University really only gives you basic abilities:
What I'd learned in university was only a foundation upon which to build my real programming skills. I really had very little idea about programming outside of the very basic syntax, structure and algorithms - which was all I thought I needed. I could speak the language and I could use the tools, but in the real world it's akin to a child who can speak, read and write, but really has no idea about life. I think this is very much the same thing...
So things I learned since university:
Sadly, in university, they don't really teach real world skills like version control, system backup and restore, maintenance of inherited code, bug tracking, debugging, scope creep etc. They really should. It would be much more useful to industry if students graduated knowing how to follow business best practices as well as just knowing the basic algorithms and languages.
I leaned that: 1 - College teachs nothing useful! Period. 2 - If you want to lear something, that deppends on you. 3 - I could have bought a lot of useful things with the money spent at the college.
Stress management
By far the most important thing I've learned is figuring out which deadlines to blow (err, reschedule), which to meet.
Logging
What to log, when to do it, and where. Seriously, this was the absolutely hardest thing for me to learn.
Code lifecycles
At uni, you wrote code for a course, had it finished when it ended, and could then throw it away (or save it in your "snippets" folder). Code written in the Real World, however, will either never be used, or it will be used for far longer for far more purposes by far more people than you ever imagined. I wrote a simple monitoring shellscript (a disposable hack, I thought) on my first Real World job. My manager saw it and told me to mail him a copy of it. It is rumored to still be in use, serving a semi-critical role, which means it could quite likely be the only code I wrote still in use there. Mysterious ways.
Judging by some of the responses above, those university CS programs must've been lacking. I'm just finishing my freshman year of CS curriculum, and I've been exposed to almost all of the above.
My first programming job was in the 1970s so:
1) The language you learned in school is not the language you use on the job. 2) The computer you used in school is not the computer you use on the job. 3) The job pays way more than the student aide job you had at college!