Take the 2-minute tour ×






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


130 Answers

Learn How to Program in 10 Years!



show 1 more comment




it is a long and painful process.



What's a guy to do?






Finally, and I've said this before but it bears repeating:
Don't give up!
and more importantly:

show 1 more comment

Practice makes Perfect.

And don't be afraid of making errors.

  • "Maybe, i could just..."

Excessive thinking is counterproductive.

add comment

I remember when I graduated and had my shiny new degree. After the first month with not even a call-back, I became a tad depressed. After six months had gone by, I was discouraged and stopped seriously trying to look. It wasn't until a year after I had graduated that I wound up interviewing for a position that I thought was way outside my skill set. I've been here for almost five years now and I'm very happy with the challenges and experiences it offers.

Life will take you in stranger directions than you can even being to foresee, so don't let discouragement get the best of you. Focus your energy toward your passions, whatever they may be; the rest will follow. Is this your passion?

add comment

Let me join the chorus of people shouting the obvious "Practice". It is definitely the primary way to really learn to program.

But, if you are looking for practical advice in getting that first programming job, let me recommend certifications. There are a lot of people out there that bemoan their flaws, and most of them are right. Certifications are flawed. With that said, many employers look for them. When applying for jobs when I first entered programming I was flat out told that my certifications helped me get the interviews. When I started doing the interviewing, someone with a significant certification always got an interview. A certification will probably not help you get a job, and it should not, but it will help you get the interview, especially when you are first starting out.

Also, do not be afraid, especially in this economy, to take a non-programming job while you continue to sharpen your skills at night. I would recommend trying to get it in something computer related such as in help desk or software QA, but that will help keep you financially stable while you look for a programming job and it will build your resume and hopefully develop contacts.

add comment

Writing games is always a win, assuming you like games. Of course in my day, our idea of "advanced graphics" was Rogue. Nowadays, I don't know how folks make games without a large set of graphic assets. At least games that don't utterly depress you because they look yucky.

Truth be told though, if you're caught up in the coding part, what it looks like is actually rarely important. But it can be discouraging.

Writing a web app gives you real experience working with other services, notably databases, and that can be invaluable. Knowing SQL is really important I think, but it's the most boring thing in the world if you don't have any data. 10 row tables are no fun.

If you want to experience "programming" at its core, write a compiler or an interpreter. These programs have the benefit of pretty much touching on every major aspect of modern computing. If you're really motivated, write it in C or C++, but DON'T use the multitude of libraries out there. Implementing your own symbol table for example. With a recursive descent compiler, you can skip having to use a YACC or LEX program, and do it all yourself.

If you're tired of stitching libraries together, then start coding up your own, within a larger project.

Modern libraries, notably in Java and C#, are very powerful and really enabling. But I find it disturbing that it's the first thing folks look for for even some of the most mundane tasks. Some are very complicated and really powerful. Others? Perhaps not so much.

Writing lots of junk is always helpful. Practice makes perfect.

Writing $foo is always a win, assuming you like $foo (for any value of $foo). :-) –  Ken May 13 '10 at 2:29
"Write a compiler or an interpreter": and design a language you think is cool. It makes you understand why certain choices are made in other languages too, and helps you look very close at a lot of languages and their (possible) implementation. I suggest writing an interpreter first, as compiling (as with every translation process, e.g. translating French into German) requires more knowledge (e.g. you need to know both languages), while interpretation lets you "build on" an existing language, which you can expose as a library :-). –  Pindatjuh May 13 '10 at 3:05
show 1 more comment

Good question. First of all if you are still in school read Joel Spolsky's (Advice for Computer Science College Students. This is a must. http://www.joelonsoftware.com/articles/CollegeAdvice.html Then you can also read this book 'The Passionate Programmer - Creating a remarkable career in software development - Chad Fowler foreword by David Heinemeier Hansson'. Although the author didn't really do computer science he spent alot of time learning to program on his own and really knows what he is talking about.

show 2 more comments







show 1 more comment

A couple of things to note, in addition to the useful comments posted by others:

1) Big picture: Learn how business works, not computers. Most commercial programmers are doing precisely what you said, tying together libraries to solve business problems. The way you learn about business is to step back, and take a big picture view of what happens in a company, and think about how code improves people's work. Inevitably, over time, you learn how the business works, and how to improve it. Programming is just a modern organisational tool.

2) What you learn in academic university is not what people do at work. At uni, there's a much more theoretical focus. At work, you focus on getting things done. This is why you feel you can't program. You're right to feel that way, but it isn't reading more algorithms and O notations that will make you better. It's immersion in a business environment that will.

add comment


add comment






Good luck!

show 1 more comment

I think that many students have been told fairy tales: get your diploma and you would get a job quickly.

That isn't true any more as IT market is becoming industrialized. With outsourcing it will be all the more true in the future.

So you will have to acquire really good skills to be able to survive in this job or compensate with other skills like management skills.

That is my case, I'm not really a technician, I rather manage projects (but to take some decisions I code sometimes for proof of concept); but management is rarely for beginners so you'll have to get a technical job then later target management.

That is if you are just average technically like me you'd better switch to something less technical otherwise you'll be rather incompetent or not competitive enough.

Problem is there are many more average technical people so it's not so easy to go elsewhere either as it is very crowded :)

show 1 more comment

Target where you want to be and what you want to do in 1 year. Focus on learning those technologies and start and complete a 'cool project' with those. Promise yourself that you'll release the project with X,Y, Z features. Purchase Code Complete by Steve McConnell. Learn mercurial (or git) and use it from day 1 with the cool project. Release the code on bitbucket or github and focus on keeping the project moving.

Some other things I recommend:

  • Learn web development and offer some basic pro bono work for a local non-profit.

  • Pick a technology that is in demand.

  • See if you can find a internship. You might be able to swing one since you just graduated.

  • Get a job - any job - to pay the bills. There's no shame in working some crummy job to pay rent while you look for work and polish your skills.

  • Watch Stackoverflow and learn. It's the accumulated wisdom of thousands of man-years. You're not going to beat it until you're, y'know, Knuth. :-)

add comment

One of the problems with graduating from computer science is that you probably were not trained to be a software developer. While there are some universities that do teach software engineering, most CS courses are not intended to produce people to be industrial software designers. There are zillions of coders out there but the real need is for someone who knows how to design software systems.

Nobody would want a biology grad to take out their appendix or a chemistry grad to design a chemical plant or a physics grad to design a jet airliner.

In the same way, nobody should want a CS grad (who was taught by the science faculty) to design software. That many software developers are CS grads is due to the fact that the alternatives are electronic engineers and people with a masters in Eastern European Folk Dancing (I kid you not). So if you really want to work in software development, learn UML and take a course in Software Configuration Management.

You can do fine in software development without UML. You can not do fine without design skills. Maybe learning UML might cause you to examine design, but you can do the work without the formalisms. –  Warren P May 21 '10 at 16:12
add comment

I would suggest you try learning more about object oriented programming. Get a good book on object oriented programming, and actually code the examples, do not just read the book. I think this will help you understand more about what is going on. Another good technique is to step through the code using a debugger, and set lots of break points. Look at the value of the variables as the code executes, it might help you understand a complicated algotrithm.

Bob, this is not constructive. –  Jim Fell May 14 '10 at 18:07
@Brandon: I seriously don't see the sarcasm. Could you explain it? @Bob did you mean to sound sarcastic? EDIT: just viewed the revision history. @Stephanie I suggest you do to. –  Wallacoloo May 22 '10 at 2:04
@Stephanie Page: calling people "jackasses" for expressing an honest and constructive opinion is EXTREMELY unconstructive. As wallacoloo suggests, please read the revision history, so you know what you're talking about before calling people names. I'll include it here for your convenience. Here's what Bob originally wrote, that a few of us responded to: "I would suggest you try business analysis, that is where most IT people who can't code go. Then there is a clear path to project management. Just smile a lot and say yes to everything!" –  Brandon May 28 '10 at 19:24
@Bob: kudos for editing your answer, by the way. –  Brandon May 28 '10 at 19:25
show 2 more comments
  • Read some books, and pace yourself.
add comment



  • be as object-oriented as you can
  • do something useful, that you will feel satisfied with

Wish you luck

show 1 more comment

You might probably want to build upon what you already know (Python).

Give this free book a shot: Python for Software Design - How to Think Like a Computer Scientist, by Allen B. Downey (http://www.greenteapress.com/thinkpython) and broaden your horizon towards something more concrete, e.g. web development with Django (http://www.djangoproject.com).

But, most importantly, find a project of your own and start working on it. The only way to learn from your mistakes is to make them in the first place.

add comment

Ok, I'm just playing devil's advocate for a second here: Do you really have to know how to program to be a good computer scientist?

I'd say no! There are so many fields in computer science where you're not hacking together code from 9 to 5. I admit that these fields are usually also the ones with the highest mathematical influence (primarily data structures, algorithms and graph theory) but also networking, administration, and the whole hardware stuff (CPU architecture, bus systems, SoPC, and so on) are a part of computer science as is the whole design & architecture & project management work.

Perhaps it is because I graduated in Computer Engineering but to me computer science is much more than "just" coding. And just because you think you're a bad coder doesn't necessarily make you a bad computer scientist. I think you just need to find a field that fits you better. Either that or - as others have said - start on improving your coding abilities.

But always remember: without the math nerds designing sorting algorithms that run in O(n log n) instead of O(n²) computer science really wouldn't be where it is today. ;-)

show 6 more comments

I've been in the same boat. I left university not really knowing what I was supposedly prepared to do and lacking confidence in my ability to do it. I worked at a Home Depot for 8 months after graduating and it was one of the best decisions I've ever made. Somehow things started coalescing while I was there. Topics and ideas from school began fitting together; I put the pieces together.

Part of the problem with school is that you get lost in the trees and lose sight of the forest. Take a step back, do something different and relax. You've got the toolbox and some of the tools, don't beat yourself up because you don't know everything about them or feel you are missing tools. The missing pieces will come. University isn't just about learning to do something, it's about understanding how to learn. Keep yourself sharp by reading and thinking about problems. Brainstorm ideas on how they could be solved, maybe even write some code (if you feel like it).

You'll still be green when you enter your first job, but your employer should be expecting it. There are junior positions for a reason and the developers who are more senior are there to help guide you (at least they should be). Provided you're open to teaching and not afraid of a little failure, you'll be fine.

Follow your gut. This worked for me, it won't work for everyone.

show 2 more comments

Read this: Teach yourself programming in 10 years.

Long story short, learning to program is like building a house. A college degree is a foundation. Thinking you know how to program after getting a degree is like thinking you have a house when all you have is a foundation. Therefore, it takes patience and dedication to become a programmer.

The only other advice I have to give is to not limit your curiosity. Avoid thinking in terms of black boxes. Don't say "well, I'll just connect library a library which magically does x to another library that magically does y and that's it!"

You need to understand how they work (at least at a high level). Otherwise, when something breaks, you won't have any clue how to fix it.

+1 for the link. My answer exactly to the "I don't feel like I know how to program." It's all about perspective. –  tylermac May 15 '10 at 18:59
add comment

I felt like you once early in my college career, not at the end. My solution was to re-take some classes even though I had passed and allow it to really sink in. In my case re-taking was a simple choice because I only had 2 classes to retake. In your scenario you would be considering re-taking an entire college worth of classes.

While I find your lack of confidence unfortunate, the only advice I can give you is to: A) Ask questions (this is easier when you're in school as you have someone dedicated to you that by job title must answer your questions).

B) Practice writing programs. So you don't know how to write a website. Do you know how to write a program? If so, think of something interesting (like the previously mentioned video game) buy a book if necessary, but sit down, learn what you need to implement it, and write something. Then when you've written it, re-write it in a new language, perhaps one of the more alluring languages that employers are seeking.

C) If you can get one, get a job. When you get there and you're new, don't be afraid to be real with your experience from the get go. Tell people if you don't know what you're doing when asking for help (even if you feel stupid doing so) and do it early on.(This does not mean run around telling everyone you're an idiot - it means be honest with your skillset when you ask for help, it will allow the developer to give the amount of detail necessary to teach you the concept). For one, you'll be a new hire and most questions will be ok when you're new (. If you hide the fact you don't really know what you're doing for a year or two and then you crack and start asking questions, people are going to wonder wtf your deal is. Furthermore when they explain something make SURE you understand it - DON'T just say ahhh ok and let them walk away. If you tell that developer you understand and then he's back helping you on something else and realizes you don't actually still don't know what you're doing on something he already "taught you" - it will not look good for you and it will also discourage that developer from wanting to teach you in the future.

Best of luck to you, the best advice I can offer is be passionate about your studies. This is a very in depth career and a very rewarding one. The more you learn the more you're rewarded and ironically, the more you know, the more you realize you know so little.

add comment

Feel confident about yourself. Don't give up.

I'm sure you're smart and capable to learn how to program.

add comment

I'm 6 months into my first job after graduating from an IT degree, and what I've learnt in this time feels like it nearly tops what I learnt from 3 years at university.

What worked for me:

  • Find a good recruiting agency and preferably a recruiter who specialises in IT. They are very good at targeting the skills you have towards positions. They also have personal relationships, access to employers that can help give you a foot in the door and local knowledge about the industry in your area.
  • Be prepared to be thown in the deep end and work extremely hard - harder than you ever had to work at university. I'm still doing work at night after working 8-9 hrs because I want to get ahead and prove that I belong here.
  • As others have said, believe in yourself!
show 2 more comments

Well, in essence you are right - you don't get to be a programmer (surely not a good one :-) ) when you graduate with Computer Science. As the title of the degree says, it's a Science and not a practical skill. Computer Science is actually a branch of the mathematics division and most of it is theoretical.

What this degree does give you are tools - efficiently create good algorithms, know how to analyze them, approach advanced fields (graphics, OS, networks...), basics of other areas (object oriented development, functional program, UNIX...) and so on and so forth.

I personally enjoyed my studies. Did it give me anything professionally? Well, not directly. There were times I implemented stuff I learned but my current pay grade and practical knowledge are thanks to my experience and not my degree (which haven't quite yet completed :))

Good Luck!

add comment


I'm getting in on this discussion late. OP, what you have is what a lot of us do not: a degree in CS. That will get your foot in the door. Take a look through careerbuilder--what all the postings list is 'CS DEGREE.' The disadvantage is they're not serious about it, they'll take experience. But if you have the degree, they'll look at you.

That degree gives you two things: you show that you can do the work, that you can do what's required of you for 4-6 years and get the qualification. Second, you have a stronger theoretical background than the clowns you're competing with. I know--I've interviewed them. People are overselling themselves badly. They're sending in resumes saying they've got CS degrees, MCP certifications, and they can't answer basic questions about the language.

Do what the previous posters have recommended and don't despair! You know more than you think you do.

show 1 more comment
Try and try and you will succeed.

I remember a saying, "no human being on earth is a master but every one is a learner".

For the instant a person says he/she has attained anything that is when a stagnation sets in. Remember a stagnant pool of water is stinky but a running water in a river is always fresh.

So keep on striving for mastery.

Have you been watching too much Karate Kid? –  Codesleuth Jun 7 '10 at 9:03
In C, there is no try, there is only do, or do while –  maxwellb Jun 25 '10 at 12:26
add comment

Great question, Wendy, and SO is a great place to ask it. I wonder how many thousands of CS grads feel just as you do but are too embarrassed to admit it? Everybody on this group has felt the exact same way.

Many have said that the way to learn programming is to program. But how to find and solve a real-world problem? When others are counting on you? When you're facing deadlines and functional specs and meetings and code reviews? You know how hard it is, in your living room, to invent an interesting problem and then write a program to solve it. It's a boring waste.

I was astoundingly lucky to start out at DEC when it was DEC. Nobody was thrown merely into the pool but right over Niagara Falls. It was wonderful in those days: one had to learn and had to deliver. That kind of environment, if I hear you right, is just what you're looking for. I don't know where to find another 1967-type DEC, though. So what's the next-best thing?

The need for developers is heating up again. Projects are starting again. Managers are beginning to panic. There's an actual market again! How to exploit it?

I propose that you get in touch with any of the hundreds of software recruiters that are in the business of contract assignments. I wouldn't worry about a full-time job -- that ain't gonna' happen very soon, as you know. But all kinds of companies will take a chance on a contract programmer, where they don't have to worry about benefits or how you'll work out over the next decade. Instead, they're worried about tasks they have to complete in six months, say, and need somebody -- rather, some body -- to begin yesterday.

Google "contract software development recruiter" and you'll find tons of these guys. Call them up or email a resume. You'll get a call back and an interview. You might end up with a software testing assignment. Or you might get a junior development position. But so what? It's only a few months and you'll finally have some actual experience that you can sell. And you're not stuck in some huge bullpen at Wal-Mart or Prudential Insurance or something, writing COBOL for the next ten years.

I have used Oxford International for years and I like them. There are many other good ones.

-- Pete

add comment



Best of luck!

add comment

I was recently in your situation - I graduated with a degree in computer science, and relatively low confidence in my programming.

Getting the first job is going to require good interview skills - and write a good cover letter. Also make yourself a decent portfolio and hand that in with your application.

To get confidence - build your own software, from design to creating the installer and beta testing it. Following the development cycle here will prepare you for the workplace.

Once you start working - the confidence will come in quickly enough.

Don't worry about learning algorithms, you will learn them as you need them. You also need to consider your employer will most likely allow you to use the internet as a resource - learn from tutorials for specific problems.

If you want to increase your odds of getting a job - familiarize yourself with the .NET framework, with C# or Java. Object-oriented languages are in high demand and employers like using them because of their high productivity potential.

Until you get a job your job should be building your portfolio. Just keep adding to it, building different solutions and testing them.

Don't worry about getting a job either - you will get one, the industry is still growing rapidly and we need all the developers we can get.

add comment