I think a lot of schools don't teach programming all that well. Well, languages and compilers and thing might get covered, but I've always been more or less confused by software architecture design. I don't know how many colleges actually have you complete full real-world projects that have you tie everything together instead of just doing piecemeal learning of programming languages and data structures and things.
This is true to some extend, especially if you do Computer Science.
I think a lot of places emphasize the Science
part, which is why for a lot people actual coding seems to be under represented.
Any good CS program will include, as mentioned, purely theoretical courses like Computational Theory and advanced maths.
It has often been discussed in tech crowds like Hacker News
whether it's even CS's job to teach you basic skills like coding and project management. Some would in fact say that that has more to do with Computer Engineering or the likes.
But that whole discussion aside, simply be aware of this trend and plan accordingly.
If you're already a decent coder then I bet you won't have much trouble picking up the rest as you go along with your CS degree.
If you aren't then you should either prepare for a lot of catching up in the first year or so, or probably even start getting in to coding now. The sooner the better.
Don't expect to learn to code in college. You might, but don't hinge you academic success on it.
Now again with the anecdotes..
When I started my Bach in CS I knew how to code to some degree. I'd started out in Visual Basic ages ago, slowly gotten started with C++ later on and finally fallen in love with Python.
I briefly worked with Java in high school but always hated the thing.
I think the most important thing I learned from working with these things beforehand was not getting too tied down to a single language/environment. This is a skill you'll absolutely need later on.
During your studies you will invariantly have to work with different things you've never worked with before, so having the skill to transfer things you've learned in other languages is absolutely invaluable.
One day you'll be writing a calculator in Java, the next you'll be modifying the scheduler in the Linux kernel using low-level C, then the day after that you'll be writing an interpreter in Scheme's functional programming style.
Once you've got a bit of experience if different languages, syntaxes, environments and paradigms, you'll slowly get a more high-level, abstract understanding of the mechanisms at work.
And the more programming becomes simply a tool, the more you'll be able to focus on what you're using it for. You should be learning how to build awesome calculators not learning Java. You should be learning how schedulers work not learning C. You get the picture..
I know this might sound intimidating, but all I wan't to say is really just that I've always felt incredibly lucky that I knew at least a little programming before starting my Bach.
It meant I could focus on solving the task at hand, while my classmates were struggling with Java.
Now enough of those ramblings..
The last point I'd like to get through is how this again highlights the importance of knowing the schools focus and course catalogue.
I've been incredibly lucky to go to a school that had both the theoretical as well as the more practical courses. I'm really not a very theoretical guy.
The theory is important, but despite knowing programming well enough I enjoyed the Software Architecture course immensely for being a course that included managing a big project. (We did a Civilization clone from scratch)
Before taking it I had no idea how to structure and manage a big project so I learned lots. I even ended up TA'ing the class later on just to be able to "take" it again.
Completing college with good grades shows a certain quality about yourself, which will help landing your first job.
I hear it's slightly different in the states but at least for me grades haven't played that much of a role. And any reasonable intelligent employer will look more at your skills than your grades.
What good are skills in ace'ing exams when there are no exams out there in the real life, only the job at hand?
For measure my "career" so far has been:
- Doing open source in my spare time.
- Part time job as a Web Developer (PHP) the first year and a half on my Bach.
Utilizing my network (fancy wording for asking my friend) I then moved on to:
- Part time Backend Developer (.NET) for a startup which was more up my alley.
Then using the skills and credit I'd built over the years I applied for and got:
- Internship in Japan at that big search company
.. you know which one.
Finally utilizing all of the above I managed to get myself accepted into:
- Master's at a top university plus a government scholarship.
Now bear in mind that my grades really aren't that great. They're rather mediocre if I should say so myself.
Skills on the other hand mean everything when you're doing technical interviews.
Pay attention in the theory courses, hone your practical skills and get your hands dirty with some real world projects be they open source or at a company. And don't mind too much if your grades aren't straight As.
Anyways, if you've got more questions don't hesitate to ask and feel free to PM me if you'd like more anecdotes