Home About The Codist RSS Feed

So You Want To Become A Programmer?
Apr 17, 2007 15:11 perm link Readers: 4109

I get emails from people who want suggestions on how to become a programmer, so it might be a good time to write a few notes on it.

EDIT: Programming as a career, not learning to program by itself. This is all based on the folks I've helped through the years and talking with other programmers on how they got into this as a career. Learning programming itself is a completely different topic.

1. Get An Education

Get a degree in computer science or the equivalent. It doesn't matter whether it's a four year, two year or technical school. The whole point is that no one will hire you without experience unless you have a degree. Don't expect to learn everything you need to know, however. The point of the degree is to get you your first job. Most of what you need to know you will learn later anyway.

In the 80's I had no degree in computer science and got my first job because they were desperate and I had some graduate experience (in Chemistry). Today it's different where getting your first job virtually requires a degree.

My sister got a two year associate CS degree, went to work at IBM and is now a VP (in charge of fostering CS educations no less).

2. Can't Get The Education? Back Door It

Work in QA (Quality Assurance). Assuming you find a good quality QA department (which isn't treated like a third-world stepchild) in a company with a lot of software development, you have a great opportunity to be exposed to software, interact with programmers, and hopefully absorb some education. It may take time, and you might have to switch jobs but eventually opportunities will show up; it's always easier to build programmers from within than hire from outside. Once you have a real programming job then you're no different than the "educated" folks.

3. Pick A Language and Learn It

If you've never programmed before, where do you start? Lots of people will suggest things here (usually their favorite language). So many to choose from, it's hard to pick just one.

Languages come in many flavors, here's a hacked up attempt to categorize them:

  1. Traditional Procedural Languages (C, Fortran, Visual Basic, etc.)
  2. Object-Oriented Procedural Languages (C++, Java, C#, Smalltalk, Ruby, etc.)
  3. Functional Languages (Haskell, Erlang, Clean, Lisp, Scheme, etc.)

Most jobs today fall into category #2. Speaking of jobs:

  1. Microsoft .Net World (C++,C#,Visual Basic)
  2. Java World (Java)
  3. PHP
  4. Everything Else

These are the divisions in the world regarding the platform, which is the programming language, frameworks, tools, environments and philosophy that binds it all together. Most jobs are in the first three.

So what to learn? It might depend on where you live, not every location has enough opportunities to provide prospective jobs. If you live in a high tech area (Boston, New York, Bay Area, etc) you can go with a less popular, but more learnable and advanced platform.

My suggestion here is learn Ruby. Fewer jobs but most are smaller companies more likely to hire less established programmers than Behemoth Inc. Another choice but with more jobs might be PHP, it's easy to learn but in the hands of less experienced programmers you can learn a lot of bad habits. Learning Ruby will make it easier to learn Java or C++ than if you start with PHP.

Another suggestion would be to learn Javascript; combined with learning Web Design (ie. HTML, CSS), there are lots of new opportunities these days doing Ajax in the browser where you can focus on just the client side. It might even help you get into jobs even if you lack other programming skills (see #2).

Of course you could learn something from the functional languages but be advised that the number of jobs is far more limited, and you will not be able (or want to) switch to the more common procedural languages like Java or C++.

The largest companies are more likely to use Microsoft or Java than anything else (although PHP is pretty high up there too). Learning these platforms takes a whole lot more time; it's not just the language but all the associated frameworks, tools, environments and servers that will tax your brain. With Java you have more choices for tools (free!) and frameworks (also free!).

Programming can also be split into areas (along with the more common language choices):

  1. Web Programming (PHP, Perl, Python, C#, Java, Ruby, etc.)
  2. Desktop Application Programming (C++)
  3. Server Programming (C++)
  4. Database (SQL)
  5. Communications and Network Programming (C++, Java, Erlang, Haskell)
  6. Scientific Computing (Fortran, C++, LISP)

4. Write Code

The only real way to learn to program is to program. Period. You can read books and tutorials, attend seminars, even get a degree; but unless you write code you will never be an effective programmer. Lots of code. Broken code (learn to debug). Most programmers start young, have lots of time to code, and learn useful lessons early just by doing. Don't just write little snippets (like many college courses make you) write useful stuff, web applications, calendars, widgets, basically anything that someone (even you) can actually use. I started off writing little apps for a food coop, and a newsletter writing application. Writing a sort routine will not teach you that much. Having someone depend on something you wrote (even minimally) teaches you a whole lot about debugging, and design, and users, and feature requests, all useful things to know.

5. Read

Like I have said before, I read blogs, programming news sites, basically anything I can find to keep up with what's going on, changing or sucks in the world of programming; even stuff I don't use. It opens your mind to other approaches and other ways of solving problems. Don't for a moment ever think you know enough and can stop learning. That's when the technology steamroller runs you over and leaves you behind.

6. Hang Out With Other Programmers

You can learn a lot from other programmers, both good and bad (and good and bad things!). I've always been willing to mentor other beginning programmers or answer questions on how to do something. Not everyone does, but you can tell. Pick their brains.

If after all this, you find you don't enjoy programming, it's too difficult, you want to toss your computer out the window, then find another line of work.

Or like the rest of us, come back tomorrow and try again.

Also read my post All I Need To Know To Be A Better Programmer I Learned In Kindergarten.

My Tags:

  • Zaph0d: Apr 17, 2007 23:30

    I call BS. Intended audience is unmistakably developers. Either this, or this was a very poor introduction article. For such an audience this article is:

    1. useless.

    2. demeaning (come on "Hang Out With Other Programmers"? Treating JavaScript as a first level language? shame on you).

    Most articles here have a much better quality to them.

  • aku: Apr 18, 2007 02:30

    Your articles are always a very good read.

  • Mat Schaffer: Apr 18, 2007 06:22

    I think I agree with Zaph0d on this one. I think #4 would have made a better introduction of sorts. Learning languages is great 'n all, but people usually need more focus than that. Also, although #6 touches on it, finding a mentor is a great way to make rapid progress as a beginner.

    http://rubymentor.rubyforge.org/wiki/wiki.pl?AurSarafAndSamantha is a really good case study.

  • Mike B.: Apr 18, 2007 06:56

    Good Read and I think it could work for beginners with a little tweaking.

  • codist: Apr 18, 2007 07:34

    I failed to title this article or write a proper introduction to differentiate learning to program from how to get started in a career in programming if you are in a different field or have a different education. My bad.

  • codist: Apr 18, 2007 09:12

    More tips from a reader.

  • brian: Apr 18, 2007 14:32

    ZaphOd: You're utterly wrong.

    1. For someone trying to become a programmer, no advice is useless.

    2. Hanging out in with geeks (i.e. users groups) is a great way to not only learn, but also network and find jobs.

    3. I don't know what 'first level language' really means, but Javascript is incredibly important these days. If you don't know it, you're missing out...

  • sanjarUz: Apr 18, 2007 21:59

    I'm not pursuing programming as a career, it is rather a hobby slowly growing into passion. But anyways the article described exactly what I've been intuitively trying to do for the past year or so: I started with HTML, them came CSS and JavaScript. Now I'm trying to bite into PHP.

    Btw, JavaScript IS good for beginners: you don't need much to start with (a decent book and.. a browser?) and it gives good understanding of basic programming concepts like variables, arrays, functions, etc and provides a good foundation for further (self)education.

    Thank you for the article, having read it I'm a little bit more confident that I'm on the right track.

  • joe: Apr 18, 2007 22:03

    i think the whole ruby thing is still up in the air.. but might be a good investment to those who learn now. i would've put python on the list!

  • shevken: Apr 20, 2007 08:57

    I wonder why is python not mentioned. Hmm

  • codist: Apr 20, 2007 09:27

    Ok I added python, brain was rather empty that day.

  • Havery Sugar: Apr 20, 2007 12:16

    I agree with all of your advice but I would add that if you want to be in this for the long haul, learn something about data structures and algorithms. If you're not taking courses, find a couple of good books and implement some of the stuff in your prefered programming language.

    Also, find yourself a niche and stick with it. For example: Web applications, embedded software, networking software, etc.

  • Matt: Apr 20, 2007 17:36

    Why aren't C# and Java listed as desktop and server app languages? It seems like most companies these days, including mine, are moving away from legacy C apps on the desktop and server because .NET and Java offer improved productivity and deliverables that contain fewer bugs.

  • Bob C: Apr 22, 2007 09:48

    I am going to agree with some of the above, but I do have my reservations. I have been reading your posts for some time now and only rarely found things that I would consider crazy, but this one is riding that line. I have seen that you intended this to be a how to get a job as a programmer, but I still think it’s far easier than you make it look. I am agreeing with Zaph0d, on the grounds that I doubt that any of this has the effect that you have provided, to the fresh blood. From my experience with learning to programming it’s not something that a one size fits all approach will help, but more a talent that people either have and embrace or don’t. Admittedly I have a few friends who have taken to programming late in life, but they have little chance to be able to achieve a real programming job because they lack one thing that hasn’t been mentioned and most of us already have – Drive. Mentoring and learning languages and so on is really grand but unless the person is truly driven to pull something off they will probably not achieve.

    I would also suggest another change to your post. At the end of your second point you stated “Once you have a real programming job then you're no different than the "educated" folks.” Years ago when I started getting into the programming world out of school I would have been completely happy to have heard this, but having been here and seen my managers being laid off and sent back to school because they lack their degree, this may become something of disillusionment to the new folks. Being educated in an art is not something to take for granted, and certainly not something to ignore. Schools provide the bridge between functional and experience driven knowledge, and I’ve never been happier to have taken the scholastic approach, than in an interview when a manager who has no clue about my schooling asks me a question about something that is rarely used, like a fork in C/C or another obscure item like function pointers (which don’t exist by the same name) in PHP. In the same boat, I don’t think that JavaScript should be used as a starting block for anyone, but especially in relation to AJAX. The whole interaction model for AJAX is strictly confusing if the person has never built a web application to know what they should be grabbing or why it works that way. AJAX is still shunned at my current place of business, although I’m not sure why, as well as many others that I have been at over the years. I highly suggest the languages like C, PHP and even Java if someone is interested in learning to program.

    Above all else, advice for the new blood coming in should be something that benefits them all the way along, something that we too can benefit from. I suggest new programmers do everything in their power to not become rooted in any camp and keep their minds open to the world. Becoming a Java Programmer is often the worst thing to do to yourself, when the world of programming shifts so quickly and never sticks to a single language. Currently I work in a number of languages, on a daily basis, and as a jack of all trades I find that I am constantly finding openings to cram myself into at work. A very good thing that I have been doing over the years is to learn two languages a year. No need to focus on the idiosyncrasies, just a functional knowledge and lots of book reading to find examples of how to use the languages.

  • Stephen: Apr 23, 2007 16:03

    C isn't dead. Perl isn't dead. The marketplace still requires them. For that matter, COBOL isn't dead (though i you didn't hear it from me).

    When i was a kid, the low-barrier-to-entry language was BASIC. Dykstra ruined it with his "GOTOs are bad" prejudice. Listen up: prejudice is bad - it means "without thinking". But BASIC wasn't perfect, and could easily be improved. I've not been following the state of the art in introductory languages.

    An odd thing about employers is that they generally don't ask their staff what language should be used for any or all projects. It would almost never be the language that gets used. Never. For example, there aren't any tasks for which i would recommend Visual Basic. And since companies seem to be in the habit of using non-programmers for senior IT staff, the decision gets made by an idiot, without the slightest clue. Fortunately, this only costs a factor of two or three in development and support, and rarely is the cause of complete systems failure.

  • Wulfcry : May 11, 2007 15:20

    Hahaha in about ten years programmers wil still talk over this subject of starters knowhow same questions same answers different game.

    The one and only thing satisfied me by finisingh an application that its work and is dun with the language I prefered for simple or powerfull enough reason to do the work and this should be te course for any starting ibbit who whant to learn coding.

    Its all proces related if you want global take the web based development if you want power learn to handle assembly or c/c if you think uhm keep it simple protoype a litle then python is there for you.

  • Anonymous: Jun 22, 2007 04:01

    I came to the conclusion that you guys are all crazy, who would of thought that becoming a computer programmer would ruin your personalities....sit back and look at the big picture and read what you guys just typed, you're all crazy!

  • : Mar 11, 2008 16:19

    I thought you major in computer programming to become a programmer?

  • Add Comment

All I Need To Know To Be A Better Programmer I Learned In Kindergarten
Apr 05, 2007 11:01 perm link Readers: 49952

Programming is complicated stuff, but a lot of what makes a good programmer isn't all that different from the earliest learning we did in school.

The inspiration for this list came from the essay "All I Really Need to Know I Learned in Kindergarten" by Robert Fulghum at http://www.robertfulghum.com/.

1. Share everything.

Use open source where possible, and contribute to it when you are able. The collective wisdom of the entire community is better than the limited vision of a few large companies.

2. Play fair.

Give other technologies, frameworks, methodologies and opinions a chance. Don't think your choices are the only ones that work. The other choices may very well be better than yours; it doesn't hurt to check them out with an open mind.

3. Don't hit people.

Like #2, don't attack people just because they happen to use .Net or Java or PHP (I learned my lesson there!). Sometimes they might be more usable and useful than you think. You can learn a lot more from someone when you are not pounding them to a pulp.

4. Clean up your own mess.

Strive to deliver code that works. Never expect QA to find all of your bugs for you. Test your code often, both narrowly and broadly.

5. Don't take things that aren't yours.

Follow the licenses for stuff you use, don't just steal it and claim innocence later.

6. Say you're sorry when you hurt somebody.

Code reviews are a good but rarely used idea. Mentoring programmers with less experience than you helps the entire team. Just don't criticize people openly. Learning is not belittling people. Sometimes people will listen and sometimes they won't. Sometimes you might learn a lot from people you think are inferior to you.

7. Wash your hands before you eat.

Try to understand things before you set out to write code. Do prototyping, check out examples on the web, talk with other folks who do it, or even just play around. Architecting something you've never done before or worked with is tough cold turkey. The end result will work much better if you start with a clue.

8. Flush.

Don't be afraid to replace, rewrite, refactor or give up on something that is crap. Sometimes "when in doubt throw it out" is the best philosophy. Never fall in love with your code.

9. Warm cookies and cold milk are good for you.

Yes, programmers should be well supported in their work environment. A good chair, a quiet place to work, a decent computer and tools that make coding better and easier are essential. Managers should act as umbrellas to keep the crap from flowing down to the programmers. As a programmer, don't accept a life of lowly servitude. If the employer treats you poorly then find one who treats you better.

10. Live a balanced life - learn some and think some and draw and paint and sing and dance and play and work every day some.

I like Google's deal where 20% of your time is devoted to whatever you think it worth working on. Employers should (discretely) offer nap rooms or game rooms or some kind of chillout environment. Programming is hard mental work; sometimes you really need to give your brain a rest. Refuse to routinely work 80 hour weeks as the quality of your work will wipe out any gains in hours.

11. Take a nap every afternoon.

Working 24 hours a day doesn't make you more productive. Take breaks, go home, take a real nap. Often I have solved nasty problems by going home, and the solution came to me as I was driving away, or the next morning.

12. When you go out in the world, watch out for traffic, hold hands and stick together.

Community is good for the soul; read blogs, learn about new languages or frameworks, participate in discussions and see what other people are doing. Just doing your job isn't going to make you a better programmer. Keeping your head down means you will eventually be obsolete.

13. Be aware of wonder. Remember the little seed in the Styrofoam cup: the roots go down and the plant goes up and nobody really knows how or why, but we are all like that.

Every day something new and wonderful appears in the programming (and technology in general) world. Check it out. Be amazed. Learn something new everyday. It keeps your mind fresh, your options open, and your skills up to date. If you think programming is boring or dead then you may need a new career.

14. Goldfish and hamsters and white mice and even the little seed in the Styrofoam cup - they all die. So do we.

Code goes stale and dies. Sometimes you just have to bury it and do it again. Fight against keeping terrible code bases around just to save money.

15. And then remember the Dick-and-Jane books and the first word you learned - the biggest word of all - LOOK.

You won't learn anything at all if you don't try. Everything I learned in programming came from trying new stuff and generally playing around. Every morning I read a lot of sites to see what is happening in the programming world; I have been doing this since my first job in the early 80's (when it meant reading catalogs and magazines).

See, programming is easy when you look at it through 5-year-old eyes.

My Tags:

  • Hassan Omar: Apr 06, 2007 09:41

    Good article ,,, Specially 7,8.

    Thanks..

  • Shawn the Rock: Apr 06, 2007 11:42

    It's good.I agree with you even Im a newbie programmer.Bible taught us all of you mentioned but we get lost day by day.Dont let us dead inside.

  • Jason: Apr 06, 2007 15:53

    Refreshing post thanks. I wish more people were as positive.

  • Matt Blodgett: Apr 06, 2007 19:09

    Great post. It's nice to see positive stuff like this. Thank you.

  • mirko¸: Apr 06, 2007 22:33

    Fantastic. This is post from experience men.Specially 11 - non stop work killing people.

  • ESN: Apr 06, 2007 22:43

    Good one!

  • hafizan: Apr 06, 2007 23:14

    Yes,Thats true,Just be fun like kids,or like lego but sometimes you need remember

    this.Idea like non programmer like me are no limit vs u programmer too technical detail and spoil.

    If i a boss i do the same things as google.Get a life ma.Problem come with real life and situation.

  • JoeBlow: Apr 06, 2007 23:26

    Hey, I got to number 15, and I thought to myself I should probably be reading more. Can any of you suggest any good sites and blogs for the programming world?

    Thank you!

  • Jack: Apr 07, 2007 00:55

    I worked for 20 years for a company that does everything the wrong way. It employs thousands of programmers and serves some of the largest companies in the world. It makes a lot of money and pays quite well. The code produced there is pure crap and a programmer's life there is hell on earth. That's why everybody wants to get ahead, stop coding, become managers and scare the shit out of coders. There are some people there who think coding can be fun though, and that's because they do open source on their free time.

  • well done and read: Apr 07, 2007 01:57

    well expressed

  • David J. Smith: Apr 07, 2007 02:08

    I like it.

  • pat: Apr 07, 2007 02:35

    Thanks for that, a pick me up at the end of an all nighter.

  • JoshC: Apr 07, 2007 03:23

    Really appreciate all the helpful insights and reminders provided here - I hope to use it as a guide to my starting career as a software programmer. Thanks.

  • erik: Apr 07, 2007 03:54

    nice article and good ideology...

  • Matt Jaynes: Apr 07, 2007 06:40

    Woohoo! Awesome article. You really put together some awesome points here. Kudos.

  • UserError: Apr 07, 2007 08:19

    great list you've got here. can't say i've anything to add ;)

    @JoeBlow, i've found www.thedailywtf.com to be a nice dose of daily programming mojo

  • flavin: Apr 07, 2007 11:56

    Waooo very good article, thanks for tips.

  • Friedbeef: Apr 07, 2007 23:59

    Excellent piece!

  • lucifer_v: Apr 08, 2007 03:49

    good idea, i go to sleep now..

  • Daniel: Apr 09, 2007 11:13

    Very nice job. Every programmer should read these.

  • Anand Muthu: Apr 11, 2007 04:02

    Looks more *Concrete* Stuff. Thanks.

  • mihai: Apr 11, 2007 05:38

    You have some good points there, really simple and important to keep in mind.

    Thank you.

  • Sanket: Apr 12, 2007 04:05

    Really good

    Thanks

  • Nenad Ristic: Apr 12, 2007 05:17

    This is brilliant

  • HT: Apr 13, 2007 14:09

    Super!

  • Invincible: Apr 15, 2007 01:17

    Good article...will help a lot.

  • Gk: Apr 15, 2007 22:58

    A very simple and perfect article

    Will help a lot for .....*Programmers*

  • Manish Bharucha: Apr 15, 2007 23:13

    A very good article. Motivating. Thanks

  • engtech: Apr 16, 2007 12:07

    Yup, that just got me to subscribe to your feed.

  • Joao Inacio: Apr 21, 2007 04:23

    I can see myself in some of these points!

    Brilliant indeed

  • Surendra: Apr 22, 2007 21:48

    Brilliant and inspiring . I like it

  • Vanderleun: Apr 25, 2007 11:01

    I know for a fact that Fulghum really likes this article.

  • Motorcycle Guy: Apr 25, 2007 16:54

    I've seen titles like this alot lately lol. I wonder which one was the original. I remember my gf wrote a piece similarly titled talking about how pluto isn't a planet now. Anyway good article.

  • MVp: May 04, 2007 23:28

    TOO GOOOOOOOOOOOOOOD

    THanks

  • Manish: Oct 21, 2007 22:53

    Really nice article.

    Thanks

  • Steve McGrath: Dec 25, 2007 11:50

    Came from ProBlogger and was worth the read.

    Great post!

  • Steve McGrath: Dec 25, 2007 11:51

    I forgot: Merry Christmas to all!

  • Ben: Dec 25, 2007 15:51

    Great post, I also came over here from Problogger and I am glad I did. In fact your post has inspired me to write one similar to yours and expand on the points a little bit.

    Thanks

  • Add Comment

Name:


Optional URL:


Comment:


Save Cancel

Copyright © 2007 By Andrew Wulf