I have some savings and would like to become a programmer. Is it still possible to do this if you're entirely self-taught?
May 20, 2007 8:41 AM   Subscribe

1 year to become a self-taught programmer


I'd like some information on how to become a programmer. (I have some savings that I can live off for about a year.) I was wondering if it's still possible to become a programmer without doing a computing degree?

If so, is there a list of topics / books you think I should cover?

Could you please support your answer with links to job adverts, etc.?

Thanks in advance.
posted by Tnuocca to Computers & Internet (25 answers total) 41 users marked this as a favorite
Some of the best programmers I know dont' have a C.S. degree. You can definitely become a programmer. The question is can you get a job.

I'd start with Learn to Program by the Pragmatic Programmers. Unlike most books for beginners, it uses Ruby, which is a modern language.

What is your background? What is it that you want to build as a programmer?
posted by AaRdVarK at 8:46 AM on May 20, 2007 [2 favorites]

Programming is incredibly broad - generally, developers have a set of languages they can draw from. It's much like a toolbox, and you want to find what combination of specialties will prove useful to you in your jobs. There's programming for the web, programming for mobile devices, programming in your microwave, software programming, etc. If you have a specific field (or language) you're interested in, that'll elicit better responses.

Yes, you can get jobs as a programmer without a degree, although it may be more difficult depending on where you're trying to work. Skill, experience, and contacts are more important than a degree.

Thanks for asking the question. I'm interested in hearing the responses, too, as I'll learning compsci next year.
posted by theiconoclast31 at 9:05 AM on May 20, 2007

You can also follow along with many computer science courses online, if this fits your style of learning.

MIT EE&CS courses
UC Berkeley courses
posted by procrastination at 9:08 AM on May 20, 2007

Steps to learn to program:

1) Learn the syntax of a language. This is just learning how to talk to the computer. This is typically the only step covered by the 'LEARN TO PROGRAM IN 2 MINUTES A DAY' type books.

2) Learn meta-programming ideas. These include data structures, design patterns, and how the full stack of computers really work. That last one is handier than you'd think, knowing how the whole thing works lets you diagnose and solve problems that crop up and will confuse other people for a long time.

3) Algorithms. Smarter people than you have dedicated their lives to figuring out the steps to solve problems. The trick isn't typically coming up with a brand new algorithm to solve the problem, but knowing about an existing solution and adapting it to your environment. Luckily, a great majority of programming doesn't even get to algorithm stage, it's just asking for some data, munging it up and displaying it. That's easy.

4) DO SOMETHING. Write little projects, no matter how dumb and small. Join and fix bugs on an open source project. Start your own open source project (don't overshoot your abilities though, better to release early and often with something working). You will learn form doing. It will also provide resume filler info for jobs that typically want some sort of experience.


In deciding what in particular to learn, know that the only thing you really need to re-learn when switching languages/technologies is step #1. And even then it shouldn't take you more than a day or two to pick up a new language once you have a good grip on the first one or two. For instance, at my current job, I had never programmed VB.NET, and I was up and programming in it within a day.

One thing you MUST learn to be competetive in the real world job market is database skills. That includes relational design and SQL to query databases. That is standard (mostly) between databases and you'll only need to learn it once, but I haven't been to a job interview that hasn't asked for a demonstration of database skills.
posted by cschneid at 9:20 AM on May 20, 2007 [2 favorites]

This isn't programming specific, but you might want to try to split your year into two parts - maybe 6-9 months getting good at the basics, and the rest of the time spent interning for free or cheap, which will show you the real life applications and give you some good contacts.
posted by fermezporte at 9:28 AM on May 20, 2007

Adding to the list of online resources, this is the most comprehensive list I've found. Also, have fun. Programming is so cool :]
posted by theiconoclast31 at 9:30 AM on May 20, 2007

It would be very difficult to be hired as a programmer with no experience and no degree.

OTOH, it's definitely possible to laterally move into programming without a CS degree. I've seen analysts who have a financial background move into programming. Same thing for QA people. I don't think just anyone can do it, because you need to have the right kind of mind, but it's possible.
posted by smackfu at 9:47 AM on May 20, 2007

It's definitely possible, but if you want to work in the field, I'd recommend you look into professional certifications. Examples:
  • Sun Java Certification
  • Microsoft Professional Certs
  • etc.
    At least then you'll have something to back-up your knowledge, and something you can put on your resume.

    Also, you'll probably want to learn about the processes involved in Software Development. I'd recommend you study UML, Agile Development, n-tier architecture, etc.

    Here are two lists of books that might interest you.

  • posted by blue_beetle at 9:56 AM on May 20, 2007

    You don't need qualifications, but you do need a certain kind of brain. Most people aren't cut out to become decent programmers, no matter how much effort and training they put in. Having said that, there's a lot of work at the 'lighter' end, where you need to be keen, logical and meticulous rather than some kind of super-genius.

    If you do pick it up OK then you need to demonstrate your experience/talent via your own projects initially, and it can take a long time to accumulate enough knowledge to be genuinely useful. If you can, find a mentor who's willing to help you avoid some of the pitfalls in return for doing simple donkeywork etc.

    (I've done OK in 'light' programming without qualifications, but started coding for fun at the age of 12, so I effectively had many years of training. To become fully employable from scratch in a year you'll need to work hard and have a lot of natural talent)
    posted by malevolent at 10:03 AM on May 20, 2007

    My company may not be typical, but we're about to hire a couple of programmers. We want to see some stuff they've done (results) and we want to see a long-ish code sample. We don't care if they have a degree. So yes, it's possible. (I'm a working programmer without a degree in CS.)

    That said, please take cschneid's excellent advise seriously, especially step two. I meet tons of people who know the syntax one or several languages. But they don't know the meta-stuff. Such people are like carpenters who know how to use hammers and saws, but who know nothing about sound construction principles. They can build you a chair, but it will probably collapse in a few weeks. Or they're like writers who have grasped the basics of grammar but know nothing about dramatic structure. They can dash off a letter, but they can't write a good novel.

    The meta stuff is hard to learn. It's not that hard to understand, but you need to know it in your bones. You need to be able to look at a gaol and figure out what design pattern fits it best (a design pattern is an over-arching structure for your code). Getting to this stage takes practice, and it's tough to get that practice because a lot of the meta-stuff applies best to large-scale projects.

    It applies to small projects, too, but you can often get away with sloppy, unorganized coding in small projects. It works, and it's fairly easy to maintian, because if you need to make an edit, there's not that much code to study, even if it's sloppy code.

    Large-scale projects take time to build, so I'm not sure how many you can work on in one year. It's also not enough to just build them. You have to maintain them and see what problems come up when you do so. (Maintaining may mean adding new features or scaling the project so that it can handle new types of data.)

    I got a handle on the meta-stuff by writing a large application (maybe 6000 lines of code) and, over the course of three months or so of constant usage, seeing how it DIDN'T work. I re-wrote it several times, searching for a structure that would make it scalable and maintainable. So it's all about applying theory.

    You may be able to learn programming in one year. Or it may take you five or ten. But if you're diligent, you will be able to do useful work after a year's worth of study. You'll spend many years after that refining your skills.
    posted by grumblebee at 10:03 AM on May 20, 2007 [2 favorites]

    As for learning materials, I HIGHLY recommend that you hit yourself with the same concepts via at least four different sources. For instance,

    1. Take a programming course.
    2. Watch some training videos.
    3. Read some programming books.
    4. Write some code.

    With a topic this complex, the more "voices" entering your head, re-enforcing the same concepts, the better.
    posted by grumblebee at 10:06 AM on May 20, 2007

    I'm going to suggest learning SQL and understanding database design rather than learning "programming." There are plenty of report-writing tools out there that will allow someone who understands database structure to produce useful reports. "Power users" and "data analysts", although far from being true programmers, are useful and employable.

    If programming still interests you, your knowledge of database design will be very useful. Databases are one of those "meta" topics that will helpful everywhere, regardless of what programming language or application platform you use.
    posted by SPrintF at 10:12 AM on May 20, 2007

    You certainly can become a self-taught programmer, and I've known some good ones.I've also known some bad ones. It's definitely a double handicap: firstly it makes it harder to get good at it, and secondly it's much harder to get a job without a qualification.

    Without a qualification or experience, getting your first paying job could be a real bitch.

    If it's at all possible, with a whole year to spare you ought to try doing a proper course. I did a one-year "conversion course" MSc in Computer Science on top of my first degree.

    A proper course is enormously valuable. You learn a lot, in a structured environment. You've got a bunch of peers around you to help and be helped, and to keep your motivation up. And you don't end up with dangerous gaps in your knowledge, which is the biggest hazard of being self-taught.

    If you're determined to go it alone, you'd basically need to cover the major topics
    • A "teach yourself" book concentrating on the basics of programming
    • A book on some particular language. In terms of getting a job, the most popular ones are probably best: Java, C#, C++. I like the 21 days books
    • A book on Sofware Engineering. Sommerville and Pressman
    • were the standard books a few years ago.
    • A database book. Databases are boring but utterly essential: don't skip
    • A book on UI design, like Designing the User Interface
    • A book on XML. Practically everything is stuck together with XML these days
    • Books on the web: HTML and Javascript in particular
    Seriously though, this sounds like a very bad idea unless it's part of a recognized course: you're taking quite a big gamble on being employable at the end of it.

    You might want to try getting a job as a system administrator or even helpdesk instead, and maybe moving sideways into programming if you get the chance.

    It's not actually that great being a programmer. Has a high barrier to entry, most people aren't particularly enjoying it after five years or so. Salaries are good but not great compared with law or accountancy. It can also be quite erratic in terms of employment: when there's a recession practically everyone stops developing software since it's an overhead they can do without, and programmers get turfed into unemployment en masse.
    posted by TheophileEscargot at 10:21 AM on May 20, 2007

    If you try to determine if your goal is reachable by looking at job adverts you're going to be very disappointed. The nature of recruiting is that you list qualifications; no-one's going to advertise a "no experience required" entry-level position because they've already got a lineup ready to fill it comprised of every unemployed acquaintance of all of their current employees.

    So on top of learning to program, you need to get in that lineup, networking with geeks locally and on the Internet so that you're not "some guy with no experience and a bit of programming ability", but rather "Tnuocca, that guy from pub night and the conference, who's starting out programming".
    posted by mendel at 11:02 AM on May 20, 2007

    It is possible.

    Level of computer knowledge?
    Previous employment history?
    posted by mhuckaba at 12:29 PM on May 20, 2007

    You can learn to program something in a year, but it will take years to be a good programmer. It's like sculpting in that it is easy to get started, and takes a while to be good at it.

    You don't need a degree. The education that comes with a degree forces you to learn the vocabulary that we use to describe ideas, so it's useful in that respect, but it's hardly essential if all you want to do is chisel some Easter-Island heads out of tree stumps. If you're aiming for carving David, then having that vocabulary will allow you to learn from others and get there faster.

    My advice is not to focus on a language. As soon as you can, pick up a language that is radically different than the last, and program in it until you stop dreaming about it.

    My usual list of languages that I recommend for people who want to be badass programmers in 5 to 10 years is (in this order):

    - Pascal,
    - Lisp or Scheme,
    - Forth,
    - Python or Java or C++,
    - assembly,
    - BASIC or Perl or PHP last.

    Or, if you don't mind being a mediocre programmer forever but want flashy results right now, go to BASIC, Perl, or PHP first.
    posted by cmiller at 1:01 PM on May 20, 2007 [1 favorite]

    Since nobody has yet mentioned this, If you want to learn a language, look at already written code. Pick up some simple open source programs or games, and change them, slightly at first, maybe putting as much as a "hello world" message in. As you think of things you'll want to do, you can look around at the functions already written, and pick up conventions, style, and syntax. Nothing gives me a better understanding of a new language than a book on the syntax, and a few example programs.
    posted by potch at 1:04 PM on May 20, 2007

    I'm not sure what kind of learner you are, but I'd say it is going to be difficult to just *learn* a language. You have to use it, you have to be motivated to use it, to explore it.

    I didn't know SQL very well before I started my current job, I'd used it maybe 3 times... now I could write queries in my sleep, or with my eyes closed (and have done the latter before when I was hung over and it was bright).

    See if you can find some kind of apprenticeship or internship or something. If you've got a software engineer friend, or a friend who has a website or something, see if they can bring some work home for you to do or something.
    posted by mhuckaba at 3:12 PM on May 20, 2007

    I would say it is entirely possible to learn to self teach yourself programming. I myself learned C through joining my local robotics team. Having a responsibility as a programmer definitely pushes you to go that extra step and learn the material.

    The best advice I can give is that you need to learn to think like a programmer. Look at a problem in its most basic steps, and tackle it from the bottom up. Once you learn to think in "if's" and "else's" you can get the basis of programming.

    I started with C, but you could really start with anything. I would just avoid the most hardcore of the hardcore like Assembly, or crazy languages like Brainfuck. It doesn't really matter, just pick a language, learn the syntax and work with it. When you get comfortable enough in one language, a TON of it will apply to other languages. So once you pick up one language, master it, learning other languages is easy because you can already tackle the problems the way you need to.

    I learned by googling for whatever I needed that day, looking at some examples, understanding it, and then writing it myself. I can't really recommend any books, but I do wish you luck, and I am confident you can get at least proficient in a few languages by the end of the year.
    posted by MaHaGoN at 6:00 PM on May 20, 2007

    Not a snark, why do you want to be a programmer? Working professionally as a programmer appeals to very few people. I really, really enjoy coding, especially the problemsolving aspect, but to be honest, so much of programming is just a huge drag. Some lucky people end up with jobs working on a product they like, but if you don't get that match, even if you get hired, you're not going to enjoy it.

    My advice would be to learn programming on your own time, starting with whatever language is appropriate for the types of things you want to write (Pascal? really? who still uses pascal? Lisp may be fine if you're using emacs day in/day out, or eventually to get a new perspective on lists, but honestly...). Without having any idea of what you want to be able to do, I'd recommend Python as an all-purpose, well-structured language. Its not ideal at number crunching or huge desktop apps, but its pretty damn good.

    The other huge part of it is that, really, anyone can learn the syntax of a language and enough of an idea with it to build a few toy apps. It takes a lot of experience, and likely education, to know enough to use a language effectively and appropriately, though. Without that you'll be flailing around, which is a perfectly fine stage (we've all been there), its just not terribly employable. You aren't going to get past that stage in a year, I absolutely guarantee it.

    Bottom line, I wouldn't plan on being a programmer. I'd explore programming as something you might be interested in, and pursue it as a hobbie until you're in a place where you can either go (back) to school or amass enough personal project/opensource experience to be employable.
    posted by devilsbrigade at 8:00 PM on May 20, 2007

    Don't want to sound too negative here. This is my job too, and I started this line in my mid-twenties.

    BUT. There are a lot of people who start this job with fundamental misconceptions.

    First: writing new code, from scratch, to clear requirements, is fun. Lots of people start playing with code, think "hey this is cool, I wouldn't mind doing this for a living".

    However, that isn't really what an average programmer does all day. Most programming work is maintenance. You're not writing clean new code from scratch: you spend all day poring through old code trying to work out what it does. Expect to spend lots more time reading code than writing it.

    Also, even with new projects, programming is only one aspect of it: there's also requirements gathering, design, testing, and deployment. You spend a lot of time on the phone trying to work out which of the four people telling you contradictory things about what the app is supposed to do is right.

    Finally, some people have the idea that programming is a completely antisocial activity which you do in complete isolation. Some people then think "hey, I'm a completely antisocial misanthrope, this is a great career for me". In fact there's an awful lot of teamwork involved: you need to be able to deal with team leaders, managers, end users, database guys, designers, trainers, sysadmins and of course your co-workers. This job is not the modern-day equivalent of being a lighthouse-keeper.
    posted by TheophileEscargot at 12:34 AM on May 21, 2007 [1 favorite]

    @devilsbrigade: Sure, Pascal and Lisp. If we can learn nothing else about this new technology, it's that making new languages is easy and that age and popularity are orthogonal to goodness.

    Pascal is rigid, strongly and statically typed, and it tends to give good error feedback. It's narrow enough to hold in a newbie's head. IIRC, It has great semantics for pass-by-value versus pass-by-reference. It compiles immediately and doesn't require massive libraries or a virtual machine to be set up correctly.

    With Lisp or Scheme, you learn a new model of programming, using closures and functional design; I mean, if you don't fall out of your seat in shock and glee at some point, then you haven't yet groked Lisp. And call-with-current-continuation -- don't get me started about that.


    And I left C off my list, unintentionally. C is the lingua franca of programming; you must learn this at some point, but not very early. I suggest somewhere around the "assembly" step in my proposed curriculum.
    posted by cmiller at 7:16 AM on May 21, 2007

    Trying not to derail, so I'll try to keep this short. To me, Python has replaced Pascal in terms of simplicity for new programmers, with a good basic type system and clean syntax. I'm not a huge fan of the fact that its ref-counted, but there's plenty of time to learn about memory management. Teaching functional programming with a language like Haskell (or even Erlang, which brings in the distributed aspect) makes more sense to me.

    That said, I fully agree with cmiller in the rough order of things. I started out with PHP, and I still notice scars from it. Learning some functional languages early, and using a very simple, striaght forward language to start on will be immensely helpful.
    posted by devilsbrigade at 8:30 AM on May 21, 2007

    Did you run out of funds sooner than you anticipated? This strikes me as somewhat lame and possibly not genuine. Do some research and then go to a school where you can achieve the qualifications you need to achieve your goals. Proviso: It may take more than a year or how long your kidney fund may last.
    posted by tellurian at 8:49 AM on May 30, 2007

    Response by poster: The kidney thing was genuine. But it's difficult to explain: technically my savings aren't enough for me to live off for a year, under normal circumstances, but my parents are willing to let me live in some property they own. So my living costs are very low.

    (I just needed a quick way to explain why I was able to study programming for a year.)
    posted by Tnuocca at 2:02 AM on June 8, 2007

    « Older Photographic Memory pre Photography   |   How can I help myself not feel depressed? Newer »
    This thread is closed to new comments.