Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm graduating with a Computer Science degree but I see websites like Stack Overflow and search engines like Google and don't know where I'd even begin to write something like that. During one summer I did have the opportunity to work as a iPhone developer, but I felt like I was mostly gluing together libraries that other people had written with little understanding of the mechanics happening beneath the hood.

I'm trying to improve my knowledge by studying algorithms, but it is a long and painful process. I find algorithms difficult and at the rate I am learning a decade will have passed before I will master the material in the book. Given my current situation, I've spent a month looking for work but my skills (C, Python, Objective-C) are relatively shallow and are not so desirable in the local market, where C#, Java, and web development are much higher in demand. That is not to say that C and Python opportunities do not exist but they tend to demand 3+ years of experience I do not have. My GPA is OK (3.0) but it's not high enough to apply to the large companies like IBM or return for graduate studies.

Basically I'm graduating with a Computer Science degree but I don't feel like I've learned how to program. I thought that joining a company and programming full-time would give me a chance to develop my skills and learn from those more experienced than myself, but I'm struggling to find work and am starting to get really frustrated.

I am going to cast my net wider and look beyond the city I've grown up in, but what have other people in similar situation tried to do? I've worked hard but don't have the confidence to go out on my own and write my own app. (That is, become an indie developer in the iPhone app market.) If nothing turns up I will need to consider upgrading and learning more popular skills or try something marginally related like IT, but given all the effort I've put in that feels like copping out.

EDIT: Thank you for all the advice. I think I was premature because of unrealistic expectations but the comments have given me a dose of reality. I will persevere and continue to code. I have a project in mind, although well beyond my current capabilities it will challenge me to hone my craft and prove my worth to myself (and potential employers). Had I known there was a career overflow I would have posted there instead.


migrated from Feb 4 '11 at 15:07

This question came from our site for professional and enthusiast programmers.

locked by Yannis Mar 13 '12 at 19:46

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.

130 Answers 130

Shoot for the moon and you'll land among the stars. Don't hesitate at applying for big companies, you never know what they are looking for, and I do believe that when you just graduate you really don't know much about anything, you will gain most of your experience at the job. Just jump in and in time you will be a great programmer.



Start a personal project. The trouble with school is that the most complicated thing you did there was a project that took 15 weeks to a year and involved a couple other people. The problem domain was well-understood (your professor didn't give you any tasks that didn't fit neatly into your semester.) This is not a luxury the real world affords.

If you have to do something major, start-to-finish, that you can be passionate about, your brain will start to wrap around the process. As long as this is just a career and you don't have a love for it, you'll still feel like you haven't made it yet.

I don't know if I can agree completely with you on that subject. I do know that from my own personal experiences in my software engineering classes that that wasn't the case for us. In those classes, it seeemed that the expectation was that we would teach ourselves whatever we would need to know for our projects while our professors stuck to teaching UML diagrams which we usually ended up throwing away once we actually got to coding.

But, I'm guessing that your school was probably different from mine. I just wanted to point out that school projects aren't always so easy as you might think. It just depends on the professors and their style of teaching.


But, I can see why OP wants to study algorithms. For the recent graduate in computer science, we're not only competing with each other but also those who didn't take computer science but either took programming in college or are self-taught. For us, our strengths wouldn't be how many languages we know or if we even know these languages well. For the computer scientist, his greatest strength would be his general ability to solve problems. You can always look up a certain class or a certain method later if you need to. It really doesn't matter if you remember everything there is to know in a language, because if you don't know how to use it then you're not going to get the job done.

New languages are created and old ones change but the general principles behind programming, that is the principles behind solving a problem in general, remain the same.


I noticed your skills include Objective-C iPhone and iPAD development is all the rage at the moment. Buy a Mac or get a VM image of the Mac OS X and start building. Think of a game or something you'd love to have on the iPhone and take this up as a hobby project. One of the graduate developers where I work built a few iPhone games and got the job here. Now his a valuable member of our .NET, java, PHP, Objective-C development team.

As everyone has said don't give up just keep applying for all jobs.


This is because you went to a university for a bachelor degree in computer science (maybe an emphasis on programming) and not a technical school for a degree/certification in programming.

You are expected to write some bad code and through: reading some books, taking a training class, and getting coworker feedback, fix the problems and limit the same mistake in the future. As you learn about development, you're going to constantly be wondering if you know enough or whether your code is ever good enough. There will be plenty of new techniques, languages and methodology trends to keep you busy for the rest of your career.

Because anyone that spent that much money, gave up 4-5 years employment, and stayed up all those nights, should have learned how to learn. If not, you will be exposed as the fool you really are and get downvoted frequently (I know, I asked for it.).


According to Malcom Gladwell in Outliers, it takes 10,000 hours of practice to become an expert at anything, whether its figure-skating, painting, or programming a computer. Some use the figure of 10 years instead of 10,000 hours. (Do a Google search on 10,000 hours expert for more on this topic.) I got an MSCS almost 35 years ago, and am still learning.


Remember that the science of computing is not the same as developing software and so for most comp-sci degrees I would expect there to be a large discrepancy between what you learn and what you apply (and how) in the real world. But its not that important. You'll learn what you need to on the job, and, if motivated, off the job. One of the things I love most about programming is that I'll never run out of stuff to learn.


It is the same way as with a drivers licence. Mastery takes much much longer....


Biggest thing to keep in mind is, you went to school to get a degree, not just to teach you how to program. In school, they teach you how to think and how to problem solve. Being a great programmer is up to you :) and it takes lots of practice.


First of all, pat yourself on the back because yours is not a singular case. This realization occurs to many CS graduates. However, there are a few points in you that are worthy of appraisal:

  1. you look at sites like Google and think about its implementation
  2. you are honest

Curiousity shall be your driving force and especially in a field that needs continuous learning, curiousity may be considered an asset.

Honesty shall be very helpful. When you are working in a group, honesty is essential for the success of the group.

Coming to learning programming, well don't try to assimilate all details of algorithms at a time. It will seem to be a herculean task. Instead pick a task you like and gradually improve your code.

You are skilled in two nice languages: C and python. You can choose projects involving either, read the code of open source projects and try modifying them to your benefit. Reading API and combining libraries together to get them to work is easy; but try to understand the design principles behind the API.

Recently, when I took up a new project, I started doing background reading on it. I had to save important URLs in a file so that I can refer them to my friends. Then it occurred to me to have a button, in my browser, which when clicked would append the URL of the current tab to a pre-assigned file with an optional comment. Its not a very big task; but it will be useful to me and my friends. I have not done it yet; but I have talked to a friend about it and he shall do it soon.