Starting late and slow as a self-taught programmer
April 8, 2015 5:04 PM   Subscribe

As someone who's supposedly passionate about programming, I've read a lot of profiles, interviews, and forum threads about people's self-propelled programming careers. I invariably hear one of two stories: 'I started at 12 on an Apple II/Commodore 64' or 'I started learning from nothing two years ago and now I'm a paid junior developer!'. I fit neither of these stories. Do I still have a snowball's chance, or should I give up the ghost?

I don't want to spend thousands on a computer science degree, and traditional school has never been how I learn best.

I'm in my mid-20s, got serious about programming a year and a half ago, and would not even be able to do a proper bug fix for an open-source project in my best-known language. I didn't want to dilute my question with more details that might not be necessary for a response, but if you need more specific information about what I have learned so far, what my goals are, what my holdups have been, and so on, please do ask, and I'll do my best to give you a complete answer.

I'm not just looking for a pep talk here-- I really want to know if I'm pinning my hopes on a pipe dream (mixed metaphor #2!).
posted by dee lee to Education (19 answers total) 43 users marked this as a favorite
"not even be able to do a proper bug fix for an open-source project in my best-known language" is something that almost no one does, it's hard and you have to be deep in a project to really understand what is happening.

There is a third category of programmer, someone who is comfortable and competent and doesn't have a rocket ship attached to them. Those people are called "healthy employed programmers."

If you are passionate, you will be rewarded in a way other than stable and steady, just like anything else.

Write code, talk to people and build something. You can get an entire CS degree's worth of practical knowledge in an online course like CS50. Just do it.
posted by bensherman at 5:11 PM on April 8, 2015 [11 favorites]

As far as can you learn how and do the work?, Sure. Can you get hired into your dream job? Maybe, maybe not.

Are you willing to write programs to create files that get sent to and from insurance companies, or are you only excited by smartphone apps and the Apple watch?
posted by SemiSalt at 5:20 PM on April 8, 2015

Response by poster: Clarifications and answers to questions so far:

I'm actually taking CS50. Six months or more after starting, I'm only about a fifth of the way through it, though, to be fair, it wasn't a priority for all of those months. My worry is actually not about the kind of resources I have access to-- I have free access to excellent resources. I'm worried about whether, at the end of the day, I personally have the capacity to make proper use of them.

I'm not particularly excited by shiny, expensive tech, but I'm also drawn to programming in part because someday I'd like a job where I can work remotely and/or get paid to contribute to something I'm excited about. I guess the succinct answer to your question is something in the middle-- just for example, I wouldn't want to be stuck writing all front-end code when what really gets me going is the back-end stuff.
posted by dee lee at 5:35 PM on April 8, 2015

Are you being delusional about your dream to write software for a living? No.

After not touching code for 4 years, I trained myself back up in ruby, attended a coding bootcamp. I now get paid to write software.

Getting paid to write software is an attainable goal.

Even after that, I've been wracked my similar doubts, and comparing myself to other engineers I perceived as being more capable, or technical. I'm now quitting my current job and jumping to a company I thought was beyond my reach a year ago.

I sympathize with how you're beating yourself up. It's not helpful. Whatever you take away from this question in terms of technical advise, please treat yourself with more kindness.

'I'm actually taking CS50. Six months or more after starting, I'm only about a fifth of the way through it'

Yeah, when I was teaching myself again, I didn't finish CS50 either. That's fine. That doesn't mean anything. Stop beating yourself up.

Me-mail me if you want to talk.
posted by justalisteningman at 5:38 PM on April 8, 2015 [9 favorites]

If you like programming, have halfway decent communication skills, and more often than not you get whatever it is your trying to do working, you will be able to get a job. You may have to interview at 10 places to get an offer, and it may not be your favorite place, but you will find a job. Most of us figure it out as we go, regardless of when we got started. Try to find a place where there are smart people who and learn from them. Switch jobs every few years and you'll move up.
posted by jeffamaphone at 5:39 PM on April 8, 2015 [1 favorite]

Best answer: This stack overflow survey has some interesting findings, especially the linked section.
48% of respondents never received a degree in computer science. 33% of respondents never took a computer science university course. System administrators are most likely to be self-taught (52%).
Assuming you can actually get things done, I think you're fine. I am 40 and just started seriously learning to code a year ago. I feel pretty good about my prospects. A lot of it will depend on your goals and passions, and how you pursue them.

Have you taken a look at the job postings in your area (or at the companies where you want to work)? What are the requirements? How can you work towards meeting those requirements?

I think it might be helpful to people to hear a little more about your specific situation and goals,[edit: missed your update as I was typing this] but based on what I've seen of the market over the past year as I've been learning, I think you'll find something.
posted by natteringnabob at 5:41 PM on April 8, 2015 [4 favorites]

Traditional school doesn't suit me well, either. In fact, even online courses and textbooks have been, when averaged out, a waste of time for me. In addition, I find that technical books only work for me when I use them to fill in gaps on subjects I already know really well (which feels weird when I go to buy a beginner's book just to solidify my intermediate-to-advanced knowledge), and buying a "how to kick $$$ in [new to me language]" book is almost always an exercise in procrastination for me.

For some reason, I learn fastest when I tell someone, "I can probably do that for you" and give myself a deadline and a budget. So I just wanted to throw that out there--if you are on a learning path that doesn't fit your style, programming--or just about anything else--can feel extremely stressful to pick up.
posted by circular at 5:43 PM on April 8, 2015 [7 favorites]

Certainly. Getting that first job can be tricky, after that it's 99% the last job. Do learn some theory, a grasp of algorithm performance is useful. Learn more than one language and as much familiarity with current trends (the good, bad and absurd :-) as possible. Get a github account and have some clean code available for review. Go for it.
posted by sammyo at 6:06 PM on April 8, 2015 [1 favorite]

I don't want to spend thousands on a computer science degree, and traditional school has never been how I learn best.

I'm actually taking CS50. Six months or more after starting, I'm only about a fifth of the way through it...

You should try to find a project to work on.

I homeschooled my sons. One of the things that people run into when they pursue self study is that they never feel like they have accomplished enough. They have no clear metric for when they have learned "enough" of something.

One of the advantages of taking a structured course is they dictate when you are "done." When my sons were in public school, they routinely did not finish the book for a particular subject. But, when the school year was over, since their grades were passing grades, they were "done" and they got promoted to the next grade.

So people pursue self study and they start a book or whatever and they don't finish it and then they beat themselves up emotionally for never doing enough. If you have a project of some sort, when you get something working adequately, you have done "enough." There may still be lots of room for improvement on it, but you have some metric for measuring what "enough" means.

If you are female, I have read that women often like to do tandem programming. It is more social. I have had people suggest I get involved in open source. (I am older than you, I took an interest in programming a few years ago and haven't really gotten anywhere. I still want to learn programming, but life has seriously gotten in the way for a long time. I am not overly stressed about it. I think it will eventually happen.)

So you need to come up with a project, preferably something that excites you so you are motivated to problem solve. And consider making social connections that support your interest.
posted by Michele in California at 6:21 PM on April 8, 2015 [5 favorites]

This is a bit of a tangent, but I have contributed to an open-source project! The process was about 45% figuring out how to deal with other humans, about 50% figuring out where to put things, and about 5% programming. I am sure you could do this, too. The hard part is not the programming; it's finding a project with congenial people, who are patient enough to help you find stuff.
posted by yarntheory at 6:29 PM on April 8, 2015 [2 favorites]

If you put in the time, you can most likely do it. It really is very much a matter of getting in your 10,000 hours. Many people find bootcamps helpful because they force you to put in the time. You say you're only a small bit of the way through CS50 after a year and a half -- are you practicing programming in other ways, or is CS50 your primary means of learning? If the latter, you just need to devote more time to learning to code. I personally loved CS50, but if there's a project that you are passionate about and more incentivizes you to be willing to put in that time, do that instead.
posted by phoenixy at 6:48 PM on April 8, 2015

I work with a married gentleman in his (I'm guessing) early 30s who arrived to the programming party very late, with a degree in Fine Arts, and struggling to make ends meet as a sculptor. He put himself through a Ruby boot camp three years ago on the same hopes and dreams that you're expressing, found a junior programming position afterward, and is now happily employed 40 hours a week as a developer, coding his heart out. And this isn't just him, I've heard similar stories from others in the past few months, so I'm thirding or whatever the whole "get thee to a boot camp!" thing.

I found it hard to believe at first, but some companies are happy to scoop up fresh recruits right out of programs like CodeFellows. If you're in a major city, look into boot camps for the language(s) you've been learning. It might not be ideal -- and there's plenty to criticize -- but it's an option that helps accomplish what you're looking for. A lot of these places advertise how many of their graduates get hired immediately.
posted by Snacks at 7:41 PM on April 8, 2015 [5 favorites]

I am married to someone in his late 30s with a fine arts degree who taught himself SQL and now has an official IT job. It is possible! I thought you were going to say you were way older than you are. Mid twenties is not too late to do anything.
posted by something something at 7:49 PM on April 8, 2015 [7 favorites]

I'm in a Canadian bootcamp, learning iOS development.

I'm 46. I'm a bit slower to twig to things than the majority of students, and it's taken me longer as a whole. My history? I was a politics graduate, I worked in advertising for years with a couple of detours into solar power and other fields. None of my previous jobs were especially technical.

I did have some experience with Python and have administered Linux systems, but aside from that, nothing like this.

But I'm excited about the future and my employment prospects. Strange as it sounds, there are apparently a number of graduates from this place who've been around the same age as me, and it boasts currently a 100% placement rate for successful jobseekers graduating from either the web or iOS cohorts.

Don't give up. You've got passion, and best of all, you have **plenty** of time. You really do.
posted by northtwilight at 8:13 PM on April 8, 2015 [4 favorites]

I'm an engineering manager at [large software company] and fairly heavily involved in hiring.

It's not too late by any means, and we hire people from "non-traditional" backgrounds (meaning didn't do high school, BS in CS, MS/PhD in CS, then apply for a job). The problem you'll likely run into at large companies is hiring processes that are extraordinarily optimized for new grads from traditional backgrounds. Interviews are often full of data structure/algorithms questions, problems that might be found in ACM ICPC problem sets and random coding on whiteboards. With a lot of hard work you can learn enough to get through the interviews, but trying to enter the industry this way is probably not an effective use of your time. I also want to stress that it is a lot of work.

Instead I'd suggest keep working on what interests you and learning as much as you can. Those people who started with a C64 at 12? There was a time when none of them knew what they were doing and they ended up figuring things out by trial and error. Curiosity is an amazing force.

When you feel comfortable, I'd suggest starting with somewhere smaller where hiring is not a finely tuned process to (mostly) find cookie cutter candidates.

I can't really offer you constructive advice on the how best to learn (I actually am one of those kids who started with a C64, though at 6 in my case), but I have seen people succeed from where you are. However, it takes hard work and determination. Not everyone is cut out to be a systems programmer, but then there's plenty of programming work that isn't of that nature.

One final thing worth noting is that you have skills new grads don't. You've got experience in a different problem domain, practice teaching yourself new things (which is both rare and incredibly valuable), and likely more experience resolving conflict and communicating with others. Being a successful engineer is more than just raw coding horsepower.
posted by blender at 9:48 PM on April 8, 2015 [4 favorites]

Best answer: To follow up on comments from northtwilight &c and make what's probably an obvious point but may bear saying anyway:
| best of all, you have **plenty** of time. You really do.
This is 100% true. You absolutely, absolutely, have plenty of time. But this will not always be the case. Time has a nasty habit of ticking onward when you're not paying attention.

I'm nomially a member of that first group you're describing -- I literally started programming around 12 years old, though I had a Timex Sinclair 1000 for a year or two before I graduated to a Commodore 64. I learned 6502 assembly language before I finished high school. I always enjoyed programming and I figured I'd do something like it professionally. But then life happened, and I ended up not spending much time in college, and I got on a career track heading in a different direction. I've continued to play around with programming in my spare time, but I'm now in my early 40s without much more skill or experience than I had in my 20s. I still have time to correct that, certainly, but not nearly as much, and my opportunities now are objectively not as broad as they might have been if I had put in the work to move to the next level many years ago.

I understand that you're not looking for a pep talk here. All I'm saying is this: don't wait. Pick a project that you're interested in, nothing too ambitious, just something that you'd like to build or contribute to, and start doing it. Learn as you go. Ask for help on StackExchange/GitHub/Codecademy/Reddit/wherever. Finish it, even if it's small, at least to the point where you can show it to someone and they get it. And then move on to something else. In the development scene in 2015, particularly the startup scene, having decent code up on GitHub (and ideally a few contributions to open source projects) is worth many, many times more than a CS degree. As long as you can program competently and you know how to contribute as part of a team, your age doesn't matter, your degree doesn't matter, and your resume is only of nominal interest.

So yes, you can absolutely do this, it's not too late and this is an entirely achievable goal. It's just a matter of putting in the time and sticking with it. But if you're serious about it: don't wait.
posted by Two unicycles and some duct tape at 10:23 PM on April 8, 2015 [4 favorites]

I'm in the "12 year old with a 6502" camp, but I'm trying to think of some of the other stories I've heard. They fall into two groups - there's a group of people on non-compsci degrees (English, Physics), who did some programming courses and pivoted onto that track (I think you already identified them - 2 years of teaching and they're often depressingly good, from the PoV of someone who spent 10 years playing around with BASIC), and a second group (often accountants, weirdly) who had a problem they needed to solve, picked up the tools, and the programming job kinda overtook their original career.

I think you're probably closer to the second group, and the thing they all had in common was that they started with a problem, then learnt the tool to solve the problem.

The one guy that couldn't make the transition... incredibly hard worker, really eager, but just couldn't think clearly. If you have an understanding in continuous and discrete mathematics I think you'll be fine.

In the UK I'd look for a small, privately-owned company with 5-10 employees on the margins of London (just inside the M25). Those guys can't afford to pay what code-slingers can get in Zone 1, but they're crying out for bodies. If you're cheap they'll probably hire you.
posted by Leon at 2:16 AM on April 9, 2015

Most of programming is problem-solving. (The rest is bullshitting.)

Find a problem. Solve it. If you can do that, you're good enough.

(I'm a sysadmin with a CS degree who used to be a programmer until I decided it was boring and administration was my calling. Practically nothing I learned during my degree has been applicable in my career. My problem solving skills are what's been useful, and the glory of it is that every time you have a new problem to solve, you gain experience you can call on when it comes to solving the next problem.)
posted by corvine at 5:00 AM on April 9, 2015 [1 favorite]

Best answer: I started at 11 with an 1802 (machine language, not even an assembler), but this only showed my level of interest and to some extent my ability. The "10,000 hours" idea is a quantity, not quality measure. I was not learning efficiently until I was 14-ish, then still not great until college.

Your ability to learn and commitment to work through harder problems combined with amazing resources available today (question/answer forums, other peoples' code, great tools) will make you a good coder much faster than me.

Go deep rather than wide. Do something complicated that requires knowing a language or framework really well instead of dabbling in a lot of stuff. You'll face hard problems this way and if you can solve them, you'll learn a lot. Tenacity is my most valuable skill. When I can't fix an intractable bug for days and find myself on Metafilter more & more, it's pomodoro technique to the rescue.
posted by morganw at 1:20 PM on April 9, 2015 [2 favorites]

« Older Solar installer info for Bay Area, CA   |   Examples & name for this category of puzzle? Newer »
This thread is closed to new comments.