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.

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.

share
comments disabled on deleted / locked posts

migrated from stackoverflow.com Feb 4 '11 at 15:07

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

locked by Yannis Rizos 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

A Computer Science or CIS/MIS degree does not a programmer make. In my opinion a College Degree doesn't generally teach you things these, but it does or should have taught you how to teach yourself. Your skill grows with experience. I would suggest that sitting down and writing actual code will make you a good programmer.

If you don't know how to do something hopefully your College career has given you the skills to ask the questions or do the research that will give you the answer.

I graduated College with a CIS degree, and the only job I could find at the time was writing device drivers. It was a painful experience, but one that ultimately increased my ability as a programmer. Just stick to it and don't quit, and in that path lies success.

share
add comment

Wow... a lot of interesting comments most are good.

I learned programming all by myself that does not mean you have to. My son is going through college and about to finish. Finding a job is always hard when you first graduate.

When you did the simple programs during class did you like them? If you did at first then you might be in the right place, if not look into doing requirements if you like typing documents.

It sounds like you want to learn more since you did not like the iPhone experience of just gluing things together. That is a good sign not a bad sign.

Next finding a job depends on if you are in a Large city or living out in the country.

Learn HTML by creating your own little site. Pick a web language... (PHP, ColdFusion, DotNet) Build a few simple sites.

Take ANY web development job or programming job that will offer you a job. Do not worry about $$ at first. Your goal is on the job programming. It is hard to program at home on your own project. However at work when you are required to get something done you tend to work much harder and if you find it is not fun pick a different IT carreer. It does happen.

Take ANY job... you will learn... if you like it you will overcome.

I never felt like I knew how to program, that is a very good sign. I hate working with those who feel like they know everything they tend to code very badly and do not document anything they do.

I hope my comments help you with all of these other great comments.

share
add comment

You get to begin your software development career with a foundation in computer science and a degree to show for it?! How awesome!

While you may be concerned about finding a job and not having the requisite skills for software engineering with a CS degree, imagine being in the same place without a CS degree. That's exactly where I was a year ago.

I cut my teeth in programming by creating monolithic macros in Excel and Access using VBA and managed to pick up a little SQL along the way. About a year ago, I decided I wanted to begin a career in software development, but I couldn't imagine how I would find a job without a CS degree (I have a BA in philosophy, of all things) and with zero "professional" development experience. Who in their right mind would hire me?

I decided to focus on getting a job whose focus would be writing business applications, so I decided to hone my skills in .NET and C#. Before 9 months ago, I had never written a single line of .NET code. But I dove in; and I got in over my head; I struggled; I went to as many user groups as I could find; I read blogs about coding; I embarrassed myself (and still do) on Stack Overflow; I listened to tons of podcasts just so I could become familiar with what is out there. Still, I felt behind, but I had finally gotten over my fear that I was unable to do something.

2.5 months ago, I landed my first job as a professional developer (I wrote about how I found the job on my blog, in case you're interested). I'm now coding in VB.NET, VB6, and javascript and continue to learn tons about programming every single day. But if I can find a job without a CS degree, I am confident you can build up your skills and find one as well.

share
add comment

+1. Interest is very important, and coding sometimes need more patience!

share
add comment

Check http://greatmaps.codeplex.com/. In the beginning I had no idea how to do it ;} So you do it simply by doing it.

PS. I have no 'official' degree, time waste.

share
show 1 more comment

I was in exactly the same boat about a decade ago now. I spent the whole summer after I graduated, about 4/5 months looking for a job. Eventually a small firm hired me to do classic ASP work. From university I had acquired C and Perl skills; I've never used them again.

The most important thing is to keep your interests up I find that most people will learn some new skills based on what is required for the job and if you have a fundamental interest in learning how to program that will take you a long way. I've moved from classic ASP to .NET to SharePoint development and now from PHP, MySQL to programming Word 2007. The technology will always vary.

Finally, you say it will take you a decade to learn from that book but some people don't even learn that in a decade. Persevere and eventually I hope you'll find a job that is fullfilling and will confirm that you are a programmer.

Chin up.

share
add comment

Lot of great advise. I would add: Learn SQL. I mean really learn SQL. Learn how to dig data out of a database. You don't have to be a DBA, but you need to know how to make queries, views, and stored procedures. The different types of joins, how to get data from a Many to Many join. Learn Oracle, MS SQL Server, and DB2's idiosyncrasies.

Write someone an application. Any non-profit organizations that need help? But write something. It becomes part of your resume and if you're unemployed for a while you have something to show for your time.

share
add comment

Computer science is also not really that much about programming. Computer science is mostly a subfield of math about the computational power and about the theories of all stuff you need to know in principle. Many people always wonder that you really don't know that much programming skills in computer science. It is a common missunderstanding that computer science is about programming.

Of course, most jobs and work you want to do with such a degree is about programming. Most companies know that when you come from a university with a CS degree you often don't really have that much experience.

The point is, all this knowledge you got in that degree is very useful and in my opinion even very important to become a good programmer. Also you will probably learn much faster about a new programming language, about some new programming paradigm or whatever other new than someone without that knowledge. And this is an important skill (to be able to adapt fast to new things). So even if you lack some experience, your skills are of some value. Companies also know that. Lacking some experience is probably a bad thing for a company who is searching for someone who can just start right away and don't need some time first to get into it.

I am not sure how you plan your future. If you want to get a job right away - just try it. It is not uncommon in your situation to not have that much experience yet.

Otherwise, if you want to get more experience: Like most people said here, just code. And also adopt to some new architectures - you will learn a lot by that. For example write some application / game / whatever and try to port it to all major systems like Mac OS X, Windows, Linux, maybe other Unixes, maybe also iPhone / Android (not that hard actually). Get used to tools like Git or SVN. Also get used to work in a team. If you don't find people to join you on your own project, maybe just join another existing project yourself. Most Open Source projects can really need help and you will be very welcome.

In can also make some advertisement here: The OpenLieroX project can also need some help! :) It's a 2D game, kind of realtime worms shooter. It is written in C++ (kind of big source code base already, about ~300k loc), uses SDL, OpenAL (and other libs) and supports Windows, Linux, Mac OS X and a few other systems. Also has multiplayer, is fully multithreaded, some some artificial intelligence (for the bots) and has a lot of more stuff inside - most of it very usefull knowledge. You would learn basic graphics stuff, multiplayer/network, how to write in a portable way, some AI knowledge, how to manage such a medium big project, how to work with Git, etc. (After all, a game is some really good project to learn about really a lot of different topics all at once.)

share
add comment

Come up with some simple ideas on your own... anything really, e.g., create a digital clock or an image viewer.

At your stage, it doesn't particularly matter which platform you go for; one of the most accessible platforms is Microsoft.NET and Visual Studio Express.

Then I recommend buying something like C# Microsoft Visual C# 2008 Step by Step (I learnt from the equivalent one in 1998).

Go through the lessons, then go back to your original idea and try to develop that. As you go, you can ask very specific questions on Stack Overflow.

Rome wasn't built in a day. It took me 2 years to become any good. Avoid working for as long as you can! (My parents supported me, whilst I pretended to do college work, but really I was doing software development!)

Let your passion guide you.

share
add comment

Keep in mind two things:

  1. You don't learn how to program (applications) in a Computer Science program. Real life applications aren't one week or two week "bite sized" homework problems. It takes a lot of planning and coordination to get a real life application up and running. It's a different mindset than what you're used to, but trust me you'll get there.

  2. Maybe things are different now; but when I went to university only two or three of my professors actually worked as programmers (undergrad AND graduate). So perhaps you feel unprepared for application programming because you were taught be people who never worked on real applications. That's not to say that what you learned is useless... there's a lot more to creating applications than programming. It just means that you still have a lot more to learn. And that's OK, you're entering a field where you never stop learning.

share
show 1 more comment

I'll be in your exact same boat my friend in about a year (graduating roughly 2011/2012). While our school teaches development in Java, I spend a lot of my free time reading up on other languages such as ASP.NET, PHP, Ruby, TDD, MVC, DDD etc... because I just love it. There is something about the ability to take code, and mold it into something that can potentially help millions of users, while making you money. Its like an art if you ask me.

You can only get better with practice. At any given time I have web projects, winform projects, WPF, and more projects going all at once, so I don't get bored. These projects don't even have to be marketed products (but they potentially could be). They are mainly to help me learn different technologies.

Good luck to you!

share
add comment

I'm another one who's going to recommend getting stuck into a personal project or two.

I personally have no official programming qualifications whatsoever, apart from a couple of undergrad programming courses for non-computer-science students - my area of expertise is actually in mechanical engineering.

The reason I mention this is because I'm actually currently working as a software engineer for a large research organisation, where programming is my one and only responsibility. How? Because I picked up a phenomenal amount of experience simply programming as a hobby. I can't stress enough how much tinkering in my spare time has helped me land my job.

What I'm trying to get across is that what you'll learn doing actual programming is one of the most valuable experiences you can get - and it doesn't matter whether it's part of an official course, or simply messing around in your spare time.

That's also not to say that what you've learned as part of your course isn't important - it does form a valuable framework for you to build your experience upon. I certainly know that I'd be much better off with a formal computer science background - I've lost count of how many times I've been stuck on something simple, or lost track of what my boss is talking about, simply because all that was missing.

I think you'll do just fine in the "real" world. You will gain experience simply by working, and any decent employer knows this and will expect no more from you than your best effort and a commitment to learning from your experience. Many employers (mine included) specifically look after their graduate recruits, using mentors and training programs to enhance that experience. And if you feel that you could use more experience, then I heartily recommend doing some tinkering in your spare time.

I'll finish by pointing out that we never really stop learning. You might be just starting on your career, but you will continue to learn and gain experience through your job, your employer, your mentors and on your own. Don't be afraid that you haven't learnt it all yet - there's plenty of time yet to be picking up experience.

All the best with your future career! Hope to find you swamping SO with job-related questions soon!

share
add comment

First, if you feel like you're not ready to be a professional programmer, that's about the right feeling. That's how I felt when I was about half-way through my CS degree, and had I not worked my way through uni, I'd have crossed the stage unqualified to code my way out of a paper bag.

But you will improve your skills fairly quickly and even a bit predictably as you get that first job and start learning from others how this "software engineering" thing is done. The key to success is to understand that you will learn from others, including others you might disagree with or not get along with so well. At the peak of my CS career (I've since moved on to other things), I lead a team of 12 developers for a major software vendor. All the new hires thought they were really smart. The ones that listened advanced rather well and the ones that kept thinking they were really smart didn't.

But enough of that. Let me share with you my observations after 31 years in the software business.

When I first started, I slung code. And that's pretty normal -- most of your assignments in uni were probably very small and that's what a lot of people do with small coding projects. They sit at their computer and they keep on typing until the problem is solved. There's nothing wrong with that and if you develop some good rapid prototyping skills, the ability to sling code will pay off well in the future.

After about five years I had a fairly large body of work -- some of it had been open sourced (we used to call it "public domain" -- sticking a notice in the source code that says "this software is in the public domain"), some of it was "No commercial use" or "You can do anything but sell it." There was no GPL. But what I learned after about five years is that my code stank because I couldn't make sense of anything I'd done more than a few years ago. And from this you'll learn that comments are your friend -- code I wrote in the late '80s had a nice code-to-commentary ratio. Code from the early '80s -- not so much. But this gives you an idea of the problem -- a four year uni degree isn't enough time to learn what you're doing wrong.

After ten years I started needing to reuse my own code in ways I never imagined. Some of the code worked out, some of it didn't, and over the next few years I got tired of reworking my code and learned how to be a software architect. I have code in the open source world that is now 23 years old and some of the original structure is still in there. That is what a good design and a solid architecture looks like -- old code that has stood the test of time, because computers today are nothing like computers 23 years ago. My phone is more of a computer than the PCs I had 20 years ago. So, you'll start to learn how to actually design software, and that's really not something you can learn in a 14 to 18 week CS class that meets 3 hours a week. Right? When I was an architect I'd take months to design the software that was going to be developed in the next release. So, start to look for patterns -- and that's one of the things about object oriented languages that makes them attractive (if used properly). They make you think more. Every time you write something, think about the future.

From years 15 to 25, I lead a team of developers. Some were new hires, some were experienced, and I had to deal with what I had because I wasn't a manager who could go hire just the people I wanted. Somewhere along the line that's what you're going to have to learn to deal with -- different people on your team are going to have different skills and abilities. I had guys with good networking skills, guys with good multi-threading skills, and guys who were just generic developers. The people who moved forward in their career were the ones who got along with others and were able to learn from them. When you get that first job, find a mentor. Don't go for the brightest or whatever, find someone who is senior enough to you that you can at least understand what you're being taught. But whatever you do, learn from others around you.

In the last few years I tired of being in the software business as a business. I still develop software (my current application is about 100KLOC of Java -- all written by myself), but I'm working mostly outside the software industry. It's a great career field, and 30 years was a nice ride.

share
add comment

Just a short note, something I am missing in the other wise answers you already received. If you do follow the useful advice "do something", I would suggest you make yourself things easy. I like using the joke "walking on water and developing software from a specification are easy if both are frozen"...

So if you decide you are going to "do something",

  • decide what your program is going to do (requirements)
  • which way it is going to behave (functional)
  • how you are going to implement it (technical)

and write it down!

If you change the papers during the play, don't forget to check the cascading consequences.

Have fun and be prepared to be (very) patient.

share
add comment

Just keep on learning and you will gain your confidence :)

share
add comment

A fantastic question. To some level your question made me think how I was thinking when I was graduating from college.

Since you said you know C and Python, my suggestion will be to start participating in any open source project that uses these languages. Goto sourceforge.net or code.google.com and search for projects that use C or Python. Some projects will have mentors too. The beauty of open source projects is that you can start contributing in whichever part you feel comfortable and grow from there. As you become more comfortable with the code, you can take up more tasks.

Good luck with your ventures. I am sure you will find some nice projects that might need your help. The best part is you get your experience and you can show it as evidence in your job hunt.

share
add comment

Programming is a tool. Most CS degrees just teach you how to program. It's like learning how to use a hammer without learning how to build anything. If you have little knowledge about a problem's domain you will have a hard time writing a program to solve it. The true value you will provide will be in solving problems, not being a programmer.

After I got a job out of college, I bought many books related to the problem space the company worked in. Now I'm considered an "expert" in an area mostly unrelated to my computer science degree.

share
show 1 more comment

I think that you should continue to put your effort. Every successful people have gone through this process, i mean what u are feeling rightnow but persistent efforts definitely brings the beauty of mind. Be focussed on a particular problem at a time, search the solution with planning to efficiently utilize your time.

share
add comment

I agree with timothyawiseman. Get certified!

I recommend [link text][1]. Internet skills are absolutely necessary, and their Foundations exam tests you on the fundamentals. The Javascript and Perl exams will then get you their Professional cert.

Also, download Microsoft's free web developer and sql server express editions, and build web sites. Practice and practice, then get MS textbooks for, and take, their exams 70-536 and 70-562 to get the MCTS (MS Certified Technical Specialist) cert.

Good luck.

[1]: http://ciwcertified.com/certifications/program.asp CIW

share
add comment

First, I think we all feel like that when graduating college or job hunting. Experience doesn't happen overnight.

But what can help you gain experience quickly is to be naturally curious and be a willing self-starter. You'll learn very quickly when you take the time to learn on your own and find personal hobbies that sharpen your skills. Always be willing to learn and you'll come a long way.

If you're currently job hunting, I'd recommend creating a personal website with a portfolio. Upload projects you've made based on what you've learned. Make it really cool looking. I'd also recommend Indeed.com in your search.

share
add comment

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.

Your skills may be more valuable than you think. Look into the web framework Django. It is a framework for web development that is built around CPython. It is fairly easy to use and is extraordinarily powerful and is used by many big name companies for quick development.

share
add comment

If you want to develop logic and thinking for programming learn programming using languages such as C.

Read and understand the examples in the C book by Kernighan & Ritchie. Search google, you will find the ebook.

when you are comfortable to think solutions to problems (small programming problems), then you may try to learn different tools, frameworks, or whatever.

You can also try to prepare for SCJP exam and read all the topics. Try out all small programs that you encounter and experiment with them. If you read sun site on SCJP resources you will find many small programs, try to understand them, try to write similar on your own. Then when you are comfortable move to swing, JSP, Servlet, Struts, or Spring or whatever. You need a very good foundation first.

You may consult ACM programming contest related programming problems and try to solve them. if you cannot, checkout the solutions by others. That way you will build strong logic and thinking.

When you are comfortable then you can try to memorize library and practice on that.

http://justetc.net/knowledge/index.php?table=Articles&categoryID=32&category=Java

Try to build an application. Think about a small personal or business problem and try to write a complete application for that.

May be you could invest in a better CS program

share
add comment

Just because you graduate with a degree in computer science does not mean you must program for the rest of your career. Did you ever take any classes in systems analysis and design?

share
show 1 more comment

When I've interviewed junior programmers (i.e., recent college graduates), I always ask them what projects they've worked on, especially class projects involving multi-person teams. After all, that's the kind of work they'll typically do in a real job.

If a person has never worked with other programmers on a project, that could require a steep learning curve.

The way to learn how to program is the way to learn just about anything: practice doing it. A lot.

share
add comment

Remember that, a thousand mile starts from the first step. Everything starts from beginning your college degree is just only a bridge which brings you to the first step of life. So you are just started, put all actions in every plan you got, one day you will be at the place you wanna be. Good luck my friend.

share
add comment

Hey!
Your question is very good, and it is the real life scenario for many just examined students. I also just graduated and during my entire time of the education, I felt the school gave me to little valuable knowledge, and to much pointless information.

The thing with college is that it does not have time to give you a very deep knowledge. In most of the courses, you only have time to focus on the foundations of one specific area inside the are of the area (yes, it's that fluffy). The approach is either that, or just try to give the students an overall knowledge about the area (this is of course different depending on the degree of difficulty for the course).

Myself had the luck to get a development job just after graduation. Many felt this was unfair, because I'm not an incredible programmer. I know the basics, and I know some area a bit deeper. What I generally think I'm good at and that people should be is HOW to get the knowledge. According to me, this is the most important knowledge school gave me. Like many says, you can't know everything. What matters is that you in the end do know what you are suppose to know. Therefor, knowing how to achieve the required knowledge is much more important, than in fact knowing it from the beginning.

One thing that shouldn't be underestimated is the value of social skills. You can be a really good programmer, but socially handicapped. You do not know how to promote yourself, or work together with people. Specifically the last thing, work together with people. In a project, you are (most of the time) forced to work with people. If you have big problems with this and actually got the job, you will probably have a hard time staying there.

Very interesting subject!

share
show 1 more comment

I had the same feeling when I graduated in computer science but I kept reading books (hs, started from Visual Basic 6) and then Oracle and Java. The more you read the more you get to know to try. After four months of reading and practising, I solved those alogrithms with which I was so poor in graduation.

share
add comment

You have just expressed what I feel for my own. I'm almost graduating in Computer Science and as many of us I've just learned theoretical algoritms and developed very few interesting projects. But as Keith Nicholas said

I find the people who tend to do better are the ones who early in their careers put the effort in to develop their skills in their own time. Usually because they are genuinely passionate about software development.

I missed this important point and I've just done what they've asked to me to do at the University. It will be the first step I'll move into.

For the moment when I try to do something more I feel again as well as you said:

I felt like I was mostly gluing together libraries that other people had written with little understanding of the mechanics.

I'm grateful for your post and for many answered, advice and links they wrote to "us".

share
add comment

I don't know if this will actually get read, but I feel the need to sill put it out there.

College did not teach me a whole lot. Some basic programming and data structures. Nothing mind-blowing. However it did show me how I learn best. I learn by doing which is in line with a lot of the posts here. I also learned that I like to create stuff via code much like a wood worker likes to create stuff out of wood. So between those two things, I took the time to do something to learn it.

An employer knows what they are getting from a college graduate. They know that the graduate does not know a whole lot. However some employers love that because then they get to mold the new person to their culture and mind set. They will teach you the ropes to get you rolling. Just be ready to learn. This has its ups and downs.

Don't sweat it. The IT industry was one of the least affected by the recent downturn. There are jobs. The company I work for just hired a bunch of new graduates. The trick is finding them.

Good Luck.

share
add comment

The best answer I can offer is a reference back to Stack Overflow's own CodingHorror's blog. Just start writing code and it doesn't matter who it's for. Do some pro bono work for a charity. Work on Open Source Software projects. Develop your own site or application, especially for mobile these days. As someone that has interviewed and hired developers of all skill levels, I'll tell you that all of those things count.

When hiring, I'm looking for passionate developers that can work well within a team. If you're going to be writing enterprise software, your softskills matter as much as your coding ability. Don't give up and don't worry if your first (or first 3) job isn't your dream job. This is an industry that understands the value of experience.

Above all, be aware that career security is the only way to stay ahead of the game. Job security means nothing in the end. Always be learning, the rest of us are certainly doing that.

share
add comment