Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Possible Duplicate:
I've graduated with a Computer Science degree but I don't feel like I'm even close to being an expert programmer

I recently graduated from university, and I have since then joined a development team where I am by far the least experienced developer with maybe with a couple work terms under my belt. Meanwhile, the rest of the team is rocking 5-10 years experience.

I was a very good student and a pretty good programmer when it came to bottled assignments and tests. I have worked on some projects with success, but now I'm working with a much bigger code-base, and the learning curve is much higher.

I was wondering how many other developers started out their careers in teams and left like they sucked. When does this change? How can I speed up the process? My seniors are helping me but I want to be great and show my value now.

share

locked by World Engineer Feb 28 at 21:45

This question exists because it has historical significance, but it is not considered a good, on-topic question for this site, so please do not use it as evidence that you can ask similar questions here. This question and its answers are frozen and cannot be changed. More info: help center.

2  
@garbagecollector, just wait, a year from now you'll be re-asking my question... –  Pops Oct 3 '10 at 20:36
comments disabled on deleted / locked posts

16 Answers

up vote 50 down vote accepted

The interesting thing about software development is that it doesn't matter how good you are -- there is always someone better or at least different enough to still teach you something. It's also not uncommon to look at code written a few months ago and think it sucks, regardless of your level of experience.

For me, once I realized the gap between my skills and the skills of my coworkers, I started learning like I've never learned before -- reading other people's code, blog posts, books, paying attention to how my coworkers accomplished things, etc. University prepared me for computer science, but not really for software development. It's almost 4 years later, and I'm a much stronger software developer than I used to be. So, just hang in there and learn as much as you can from the people around you. It'll get better.

share
27  
+1 University prepared me for computer science, but not really for software development. –  George Marian Oct 3 '10 at 18:38
1  
I hope I have the same experience when I finish uni and get my first (oh wait, second) job in the programming business. –  gablin Oct 3 '10 at 21:00
4  
@George: What's worse is that a lot of software development in the real world falls under the "IT" umbrella, which usually boils down to slapping ugly user interfaces onto database tables. :( Not exactly something university could ever prepare you for. –  Adam Paynter Oct 3 '10 at 22:42
show 2 more comments

No. I learned a lot more about programming/software engineering in the first 6 months of working after leaving university than I had in the years preceding. However, that doesn't mean university was a waste of time, it prepared my mind and provided the background knowledge to build on.

Then again, looking back now, I still didn't really know what I was doing 6 months in.

share
4  
Well said, my professors always said "There is a big disparity between industry and academia." Hard to believe until you get out into the real world and realize there in fact is! –  Chris Oct 3 '10 at 20:23
show 1 more comment

Education gives you a foundation to build on, but it won't prepare you for software development in the real life. That comes with experience. I definitely was in the same situation as you when I first started programming for a job. As long as you keep learning, reading books, blog posts, and applying what you learn in your job, you're going to improve. The key is applying what you learn. Just reading won't help, you have to actively apply new knowledge.

share
show 1 more comment

I definitely thought I was, but I wasn't.

Trust me, at some point in your career you are going to go back and work on some code that you wrote, but haven't touched for years and desperately want that no other professional developer ever see that code or know you wrote it. That means you are growing.

share
add comment

In some ways, picking up a programming language is a lot like picking up a natural language. You can learn a fair amount of theory in school. You learn the grammar and the basic elements of the vocabulary, and you think you're pretty good, right up until you find yourself in a real conversation with a native speaker, and then you're completely lost.

The way you really learn the language, to the point where you're able to hold your own in a conversation with native speakers, is by actually speaking the language, every hour of every day. This usually means going to live somewhere where it's spoken. And that's when an interesting thing happens. Although what you learned in school is worthless, in and of itself, on the streets of a foreign country, it gives you a good, solid theoretical foundation that makes the actual language-learning a lot easier. (That was my experience with Spanish, at least.)

Programming is the same way. What you learn at school doesn't prepare you for the work you'll need to do as a real programmer, but (assuming you're at a competent school that doesn't dumb everything down in the interests of popularity) it helps prepare your mind so that when it comes time to actually learn to be a good coder, the fundamental concepts you need are already in place. (That was my experience with programming, at least.) :-)

share
2  
Good answer, but I wouldn't go as far as to say that "what [I've] learned in school is worthless". I know however what you're aiming at. –  gablin Oct 3 '10 at 21:01
add comment

A lot of good programmers come out of university computer science degrees, mostly the same ones that went into them.

The thing about computer science is that it is, as people have discussed above, not the same as programming. A lot of stuff I studied at university I basically wasn't ready for- there was a lot of stuff that seemed like pie-in-the-sky academic nonsense when I was hearing lectures about it, but a few years later I wished I had paid more attention to it as I ended up learning a bunch of stuff again that I had filed away as useless. I actually think that one could use doing a few years of programming in a commercial environment before starting a degree in computer science if that is what you want to do.

Also I think often at university you don't necessarily know how to learn. A lot of things I have learned by mistake or by learning from other developers are surely things my lecturers and grad students knew at university but I had no idea it would be useful to understand them. Asking people about problems you're having while you're learning to do something ( and this applies to anything really ) makes the learning process smoother and less painful. Most things you can learn for yourself or from other people - given that many of the lessons I've learned for myself have been learned from my painful mistakes, I'd choose to learn from other people when I can...

share
add comment

I would quote Brian Hurt's post

Computer science and programming are separate things

who also refers to Joel Spolsky's Undergraduate programming and brilliant article titled Who Killed the Software Engineer

All these discussions describe the reality fairly well and, in my opinion, answer your question as "No", because university is not going to make you a good programmer. You need to make yourself a good programmer on your own.

I don't hold degree in CS, but I've been professionally programming and developing software for 8 years now. All programming skills I have, I've learned myself.

share
add comment

No at all, I was pretending to be a programmer and learnt it the hard way. I got my first customer as freelancer and fought very badly with C/C++, and eventually won. I remember it took some hours to understand that doing malloc on a struct was not enough to allocate also memory for the pointers in the struct.

share
show 2 more comments

I was a fairly good programmer when I graduated my university. I also had a snazzy job offer months before I even graduated (which I was able to turn down for an even snazzier one).

The key was that I had done a lot of work as a hobbyist, with a web development job during the school year, and doing quality summer internships with IBM ("ExtremeBlue speed-teams" and the ExtremeBlue program proper). Good preprofessional experience will let you skip a little bit of the entry-level stuff after you graduate.

(That said, I still got much better at programming in my first six months or so at a Real Job (tm). Not that I was done afterward, but that's when it was really showing a lot.)

share
add comment

I can give you a reverse answer, as I got straight from high school to work. I started working as a self-thought programmer, and I was almost immediately productive on the project my employers give me. I had some coworkers that had a fresh computer science degree, and they wasn't productive at all.

Over time, some graduated coworkers improved they skills greatly, while others don't, and that was unrelated to their GPA.

share
add comment

I was a better programmer than my teachers in university.

Then I learned great programming practices when I started to work.

share
add comment

University does not teach you to become a real-world programmer. I'm guessing this is similar with a lot of jobs compared to their degree programs. I wouldn't say that I got nothing out of my degree, but it was far less useful than spending 4 years actually on the job.

But it's okay. Every job I've started I was probably under-qualified for. If you are confident in your abilities and dedicated to learning then you can step up and do the job.

share
add comment

I don't think I've learned any facts about programming in general that I wasn't at least exposed to in college. Sure, I've picked up new programming languages here and there, learned new APIs, new code bases, and new tools, but the general concepts were all present right out of school.

What you do pick up with experience is a sort of instinct that speeds up how you narrow in on a reported bug, or leads you straight to the most robust way to write new code. When you are new, you can still fix that same bug, or implement the same feature, but it takes longer and you're more likely to have to go back and fix it for an unforeseen issue.

That's why it's important to get more experienced colleagues to mentor you. Go to them and say, "This is how I think this should be handled. Can you think of a better way?" That gives you the benefit both of the experience of figuring it out for yourself, and of learning from the experience of others.

share
add comment

A good programmer is always learning... learning a different way to do this or a better way to do that. Whatever your fellow programmers have to teach you, I would listen.

share
add comment

One of the things no one has mentioned is that the problems you are given to solve in school are deliberately dumbed down to make it easy to see how to use as specific technique you are being taught. You usually know what technique that you are supposed to use for that particular problem because it is the one you just covered in class. Whole semester projects are a little bette,r but still limited in scope and complexity compared to the real world.

Real life projects are messy and evolve over years (our software is over ten years old and has been changing continuously for that time) and are touched by many different people with many different skill levels. You may still be touching a 10-year old database version and cannot use any newer SQL techniques at all. You may be using a tool that was great 8 years ago, but that you didn't learn in school becasue it's been superceded by something else. But the company doesn't want to pay for months of development effort to totally replace it.

You are stuck in a world where time to develop is severly constrained by what the client will pay for and what the, sometimes (OK usuaully) artifical, deadlines are.

You may be constrained to use tools that the client specifically asked for. You may have vague requirements or ones that make little sense. You may be dealing with a very complex business domain that you know nothing about and thus can't even judge if the requirements make sense.

The real world problems are in no way comparable to the nice clean problems they give you in school. If you aren't confused and feeling out of place for most of the first year, I'd worry about you.

share
add comment

It's worse than that... after a few years in this job, you'll be feeling pretty good about what you've learned. But then you'll change jobs, and your new company (or maybe even new group within the same company) will do things differently, and you'll feel like you're right back at square one. There will be different code, different coding standards, different tools, and different processes, and after two days of that you'll wonder if you really learned anything at all at your last job. You'll get over that fish-out-of-water feeling more quickly this time, but it'll still take longer than you'd like.

There's an adaptation period every time you switch jobs. It gets shorter as you gain experience, but it's always there.

share
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.