Since I don't have much practical experience and I'm not studiing computer science directly (rather multimedia focused programming) I really would like to know how good (and maybe how old) People are before they are taking their Jobs.

Coming from Germany, it is not unusual to know little to nothing really useful (practically) when done with study. You just prove you're generally capable of leaning things and learn the real stuff after University. Or does that differ in Computer Science?

Or to put it in another Question: Is the average computer-science first time employee capable to program serious things?

This question appears to be off-topic. The users who voted to close gave this specific reason:

"Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – ratchet freak, Robert Harvey, MichaelT, Dan Pichelman, GlenH7

7 Answers
7

In my experience, formal education has little to do with it. There are CS college graduates with barely any real programming experience at all, unable to code their way out of a wet paper bag, and there are those who have already coded several serious real-world projects by the time they graduate. There are even plenty of excellent programmers without any formal education at all, and some of them are better programmers than the average college graduate will ever be.

Consequently, a college education alone is unlikely to land you any of the better programming jobs.

That said, a typical college education does have value - it teaches the theory behind the practice, it introduces appropriate lingo (names of concepts, algorithms, processes, etc.), and it can help build a professional network. But as far as actual programming goes, the only thing that teaches this is doing it.

So what you should be doing right now is get your feet wet: find a good programming internship (one where you do actual programming), learn a few programming languages, do a bunch of personal projects, contribute to open source projects, and read other people's code.

In the US, a college degree provides a legally safe way for a potential employer to determine the general intelligence of an applicant. Other, non-skill/job based evaluations run the risk of a lawsuit. Requiring a degree makes HR's job a lot easier.
–
jfrankcarrDec 26 '11 at 19:36

Thanks for the answer! Do you have criterias for me for a good internship? This comes in about 8-10 month, but I really want to lean something in that half year.
–
SimonDec 27 '11 at 13:41

I think that most people on their first job are not "capable to program serious things", but they are capable of programming some parts of serious applications. Certainly there are exceptional university graduates, but in my opinion most need a little experience before they can be expected to perform at a high level.

Or put another way, if I were to hire someone straight out of school I wouldn't expect them to be particularly good programmers. I would expect them to have programming skills and a desire to learn, but it takes more than just coding skills to become a good programmer. Mostly what you get from school is the skills rather than intuition or experience.

I have a somehow biased experience: I quit school long before graduating, I've never been good at sitting around, listening and taking notes.

So then, I really had to get to know some programming, and hit the real work world.
The good news is, it's absolutely feasible.
The bad news is, it's god damn hard, requires a good amount of passion, and there's a non negligible possibility that you end up realizing you'll never be good at it.

From what you wrote in your question, I take it you're affraid that after spending time learning at school, you'll be useless for a while at work.
To that, I say go on and start just about right now to do a program, oh, and make it big. Make it use lots of areas in programming. It's gonna be hard, it should be.

Focus on "real world" stuff:

use enterprise level tools (visual studio 2010 ultimate, rather than
notepad++ for example)

enterprise level frameworks (WPF/Prism)

make use of dependency injection/inversion of control (they're in
every project i worked on, really)

don't focus on optimization: that'll come with experience (i.e:
forget about fancy sorting algorithms, they're built in or available in libraries anyway)

start by reading every pattern of the GoF. Mark my words, i said
"read". You need to know it's there, you need to partially understand what it's
for. You don't need to understand how it works.
Then whenever you
find yourself faced with an architectural problem (i.e: you write
complex code to handle something you think is simple/you write the
same code over and over again) odds are a pattern can help, go and use it.

That list is .NET oriented, because I am, I just hope you get the point =)

yeah, I already have a smaller project running, which I put more effort into than I had to. And will continue on it. This seems to helped me most to really learn something. GoF Patterns.. Is there a good book about Designs Pattern to reccomend? Thanks for the answer!
–
SimonDec 26 '11 at 18:33

I agree, but I think that any aspiring programmer is more likely to pass the various puzzles posed in interviews if they also read and play around with a little computer science as well.
–
MarcinDec 26 '11 at 18:49

Coming from Germany, it is not unusual to know little to nothing
really useful (practically) when done with study. You just prove
you're generally capable of leaning things and learn the real stuff
after University. Or does that differ in Computer Science?

I hold a medical degree from Russia and I am just about to graduate from a German University in Computer Science and Electrical Engineering. And from my experience I would say that there is no really much difference between the average level of medical graduates and CS graduates in the Universities I studies at.

The average level depends upon many things:

The reputation of the university: some universities have a more tight curriculum and require you to get a higher level to pass successfully through the exams, whereas the others will let you through if you are capable of reproducing the code you have previously seen during in-class exercises.

The exact university cirriculum. Whereas the most fundamental subjects are taught everywhere, there are often some custom subjects, like "algorithmic cryptography", "algorithmic graph theory", "GPU Programming", "Cloud computing" that are offered only by certain professors and the students passing these classes can acquire a higher average level.

There are some peculiarities that concern only German educational system:

The Universities of Applied sciences (former "Fachhochschulen") generally provide their alumni with better programming skills just by having much more time spent on programming, whereas general Universities provide a broader overview of the complete Computer Science.

Much depends upon the topic of your diploma or master thesis -- the final work, crowning your university years. My diploma thesis is devoted to implementation of a .Net compiler from scratch, whereas that of my friend was devoted to optimisation of GIS-queries. This is no surprise that I will be much more proficient in general-purpose programming whereas my friend has to acquire expert skills in database development, but on average we still are in the same boat: we both started with same knowledge in these two areas.

Or to put it in another Question: Is the average computer-science first time employee capable to program serious things?

Not only this is not true -- this is not what is expected from a junior developer, this is how one would name the "Berufseinsteiger" (German for beginning employee) in Computer Science. The expectations from Junior Developers are to have some fundamental knowledge in the area of your work (the university curriculum with some referenced university projects would normally already do here) and readiness to learn. That is all. And that is more or less universal among all jobs targetting the fresh graduates.

No matter what kind of study one takes, be it a diploma or a full featured engineering graduation, nothing succeeds the real-live experience of working on a project. Education basically tells you the tool and their characteristics. What usage you make out of them is totally your concern.

The Scenarios and problems are totally alien to education so no one can grab them by studying. From my very personal experience, I have done computer engineering, but i have leaned whole lot working. Education just lead the ground work, the professional arena is altogether different and you can't prepare yourself just with studies. You learn by each project and each mistake. Every problem you face gives you opportunity to learn something

Programming is a core activity in Computer Science but not just limited to it. IT professionals are also into programming and are equally or in certain scenarios more desirable than Computer Science graduates. It is a very vague question : "Is the average computer-science first time employee capable to program serious things?". What is really serious according to you??? Decide yourself.

If you talk just about programming then you do not necessarily have to do a a bachelor's degree in Computer Science to be an expert in programming. All you have to do is to identify in what area(like Systems, Databases, Graphics, Games, AI, etc.) you like to work in and acquire the necessary skills for that area. Typically you should study the following subjects to become a good programmer:

Procedural Programming

Object Oriented Programming (UML is a great thing to learn)

Data Structures

Analysis of Algorithms (recommended but not a prerequisite)

Software Engineering (If you are strong in above subjects then SW will be a breeze for you)

Until and unless you are heading for a research, I would not recommend you to take up a degree in Computer Science. In the commercial world where you have to work from 9 to 5 or do overtime (which is not good for a healthy programmer), you have budget constraints and deadlines to meet. This is where Information Technology comes into play. And if that is where you like yourself to land into, then I would advise you to take up certification track in Java or Microsoft .Net. You will be focused, and much more productive at your workplace.

@Baboon UML is the need of the hour to this date and for many years to come for huge and complex systems. There are a number of diagrams in UML that makes you understand how a complex system behaves and helps programmers write their classes in an effective manner. FYI:en.wikipedia.org/wiki/Unified_Modeling_Language
–
MaxoodDec 26 '11 at 17:55

@Baboon: huh? so what do you use to design your models?
–
SRKXDec 26 '11 at 17:57

@Baboon, you may be moving in the wrong circles, for one thing. Moreover, there are plenty of "outdated" things in the world of programming which are still immensely useful - for those who appreciate their value - even if they aren't at the top of the latest fad list. Programming is about solving problems, not about being trendy :-)
–
Péter TörökDec 26 '11 at 18:20

I've seen gigantic applications, in development for 10 years, that have never been laid on UML. In fact, that would be close to impossible to maintain. And if it doesn't match reality, it's useless, i think we can all agree on that? Besides, tools like vs2010 can make diagrams that look like UML, and is understandable. Who the hell does UML by hand? It's madness.
–
BaboonDec 26 '11 at 19:14

The answer to this depends very much on the traditions of your local educational system, and its effectiveness. For example, in the UK, pretty much every computer science programme promises to turn out people who can programme, but it turns out that many fail in that goal.

If you actually want to get a job as a programmer, it is a fair bet that you will be expected to be able to programme already, moderately well.

Fortunately, there are a lot of tutorials that will teach you the basics of programming (better than many university courses), and it is feasible to educate yourself in your spare time, by taking on projects, and reading about programming, then practicing what you have learned.

The level expected of developers in my experience, is that they can write a small application (whatever that means in the recruiter's domain) which is basically kind of OK, be able to understand the various puzzles posed, corresponding to a slight understanding of fundamental computer science (at the very least), and be able to learn.