views:

148

answers:

8

I am student currently attending my fourth year at a Swedish university and will, if all goes well, take my Master's degree in Computer Science in winter of 2011. It is a respectible university, at least here, and am overall satisfied with my choice - both of university and major.

While I've learned much in the courses I've attended, I am a bit concerned if what being taught is sufficient when moving from the safe practice grounds of the university to the volatile battlefields of industry. In truth, I would say more than half of my programming skills and soft- and hardware knowledge have been self-taught on my own spare time - either through projects initiated on my own accord or studying non-mandatory topics of material in conjuction with courses. Indeed, sometimes these "off-topics" have proven more interesting and valuable than the course material itself.

In terms of programming skills, even less have been learnt directly through university courses. To my knowledge, I don't know of a single course at my university which covers how to program efficiently. Sure, there are many courses in how to program in a particular language, several in how to write algorithms for solving a particular problem, as well as one in how to program under pressure, but none in how to think about programming and how to approach problems in an efficient manner. Also, I encounter many students who have never concerned themselves with C or C++: languages heavily used in industry.

Even after having written code in one form or another for 15 years, I still feel I have so much left to learn. In truth, the more I learn, the more ignorant I feel. All this leave me with a concern that, had I relied solely on what I've been taught at university, I would not be adequately equipped for facing the working market; and even with my spare time learning I am not sure my skills are adequate.

Is this a common problem? Are programming skills and knowledge taught at university sufficient for industry? What experience have you employers had with new workers fresh from univeristy in terms of their knowledge and skills? Do you feel that they are adequate, or should the universities improve or revise their teachings?

A: 

I looked into schools for computer programming recently, and have found that many of them can't update their curriculum fast enough or frequently enough to be able to teach a lot of practical programming. That's why a lot of the classes (especially at the masters level) seem to be of theoretical benefit, but not practically useful.

I think the biggest benefit provided by the schools is the ability to understand the concepts and to have the ability to quickly get up to speed when faced with real world problems.

JoelHess
A: 

I find that the programming skills are taught sufficiently to get you started. As long as your basic theory is good and you have learnt a few languages to feel somewhat comfortable in them you will be able to pick up whatever new skills and technologies you need on the way. This is normal, the way I see it. Employees fresh out of school, well it's often expected there will be a bit of a learning curve unless the employer does exactly the same stuff you worked on in school (though this could happen if you interned at that employer and then they hire you after graduation).

Things you won't learn in the university are how to program in a corporate environment. The experience varies widely from one corporation to another so I don't want to dive into the details but: people skills, office politics skills, how to have productive meetings, how to get sensible requriements from your end users, etc... These things are hard to teach in a constrained academic setting.

Another thing is that many corporate projects have lifespans much longer than the average academic term (and sometimes longer than a Master's thesis too), and you often work on teams larger than you would in school.

FrustratedWithFormsDesigner
+2  A: 

When you come out of university you discover it's not the direct course topic that was key, it's the ability to deal with: stress, deadlines, work/life balance, learning, researching what you don't know, simplifying complex topics/ideas into simpler terms. It really isn't only about the direct course/programme topics - which can be learned through other means (just read a book, or take a targeted technical course).

Employers are often looking for the fact you've worked in and survived that experience - even in skilled jobs, you'll occasionally find it's more important that you completed a degree then what the exact area/breakdown of your degree was.

Universities are fairly slow institutions. Software is a very fast moving field, yearly revisions to higher level languages are common. A university may take 2-3 years to vet a new course and bring in a new topic (and consequentially decide what to remove from the curriculum) so they're always playing catchup. This is, unfortunately, just a fact of the field - and perhaps that's why industry has adapted.

Rudu
A: 

The point of university is to give you the ability to apply and learn the skills for yourself- It gives you the tools and understanding needed to achieve this.

I went into my 1st job after 4 years of university and really didnt know too much, but quickly picked up the knowledge I needed.

Byron Cobb
+1  A: 

First and foremost, don't worry about the feeling of having more to learn. I generally joke with people saying, "The more I learn, the less I know". This is not because I am not learning, but rather because I am learning about the details of the industry and learning how vast it is. This is not uncommon, and you should not worry about it.

Second, as for the question, "Is what I am learning sufficient?" I think that beneath this question is the idea that everything you learn in life should be learned in a university. This is not the case. As you climb the "ladder of life", do not expect universities to put you at the top of the ladder. Instead, universities will just let you skip a few rungs by giving you a solid foundation.

You are going to continue learning new things for the duration of your career. Whenever I interview people, I do want to know that they have a solid foundation, but at the end of the day I am more concerned with what they can learn. From the sounds of it, you are a bright individual with plenty of capacity to learn (some of which you might have learned while attending your university :) ).

Your education has been a stepping stone, but your ability to learn will take you further than your degree ever can.

Overall, I think you are in good shape. As long as you never lose the desire to learn, you will always find a good home in the computer industry :).

Stargazer712
+6  A: 

A lot of people in industry have not figured out how little they know, they are too busy creating monstrosities. Don't feel inadequate, if you have gotten a sense of how vast the opportunities for learning are then you're ahead of the pack.

Nathan Hughes
+1. Love the first line.
Rushyo
+1. I know people like that. Good one-liner.
Stargazer712
A: 

To me the reality is that absolutely nothing taught at school is sufficient.

Was the calculus I was taught sufficient? No. World history? No. Programming? Hell no. English? Most certainly not.

The only way it has worked for me is to learn by myself. Ironically, I now guide spacecraft even though I never took a class on Spacecraft Guidance. I use Python extensively and I never took a Python class. I worked as a business consultant for McKinsey, a top-flight management consulting firm, and never studied business.

I still love Universities, though - I think the provide the best environment for you to learn by yourself or learn from your peers.

So, in concrete: no, your university will not teach you what you need to know, but it may very well provide you with an atmosphere (and a library) where you can learn by yourself and your peers all you need to know - it is up to you, not your university.

In the concrete world of software programming (warning: I'm not a programmer) they may teach you Design Patterns, Algorithms, Compiler Architecture, Data Structures, and the like. But when you are off to work you will be given a bunch of broken code to maintain and improve - that code will not be based on the clean Design Patterns and Algorithms you learned. Also, you will likely be pushed to finish in a short period of time. How will you do this if school does not teach you to be resourceful? You teach yourself to be resourceful, that is how.

Finally, even if (and that is a big if) your university had a perfect curriculum exactly aligned with industry needs, then how on Earth would you compete for a position? If 20 graduated from the same class and there are 3 jobs, how will you distinguish yourself from your peers? (even if you are top 5). Answer: only by going beyond university education.

Arrieta
Hmmm...not sure I like the **absolutely nothing** part. I have turned people down for jobs based solely on the fact that they were unable to obtain a degree. This didn't mean that they didn't know how to program, but it did mean that they were unable or unwilling to learn and cope with a stressful envirionment.
Stargazer712
@Stargazer712: notice I did not say universities are not useful - I said that *absolutely nothing is sufficient*. As for education, I think it depends on the person. I have a PhD and am proud of it, but know many people who have a high-school degree and do not ask absolutely anything from my 15-year education, and know many post-docs who make me wonder how on Earth did they finish Kinder Garden. It all depends on the person. Don't judge (for better or worse) based on academic degree.
Arrieta
+1  A: 

On my degree I felt I got a pretty good, broad mix of knowledge. Given initiative, these skills could be branched out in later learning. In three years I wasn't going to learn everything and complete the coursework. But the degree exposed me to all areas relevant to developing video games, allowing me to have a holistic view of any problems I encountered in future.

To elaborate: A programmer who never looks at design patterns in OOP isn't going to know about design patterns. A student who is taught it, whilst he might not be any good at it, will at least attempt to integrate it where relevant into his work because he knows it is there and what it is used for. Thus, he improves. The programmer with five years under his belt who has 'never had any need for those overcomplicated thingymazigs' simply won't understand why you'd use them. If he does try to use them, the first time it's likely to be a horrible, horrible mess without mentoring.

That said, specialist programming degrees seem to have a higher bar. At our university there was an elitism amongst the games students. We took for granted knowledge that Computer Science students spent months working on. For the computer science students their knowledge, say a module on sockets, was an end. For us, we were never taught sockets. It was just a requirement to get to where we needed to be. So we were forced to use our initiative to work it out - which was fine because it was a means to an end.

Where the computer science students were just asked to learn, we were forced to comprehend. I think that made alot of difference. Our knowledge was more concrete, more practical. It was put to the test - and we had to solve it outside the scope of the lectures we had been taught. This challenged us and made us become better programmers.

Not only that but because we were actually faced with problems to reach a goal that weren't necessarily our final objective, we learnt to develop other skills. Logic, statistics, trigonometry.. and indeed the skill of learning itself. Forcing yourself to read and implement the gist of 1000 pages in the quickest time possible is an acquired skill - and not one you're going to pick up if you can simply read the lecturer's slides for the answer!

Rushyo