Should I switch careers and learn to code?
January 5, 2012 8:10 AM   Subscribe

I'm considering doing a career 180 and learning how to code. Should I do this? Do I have what it takes? What is it like to program for a living? Details within...

Before I get specific, and just so you don't think I'm a lazy-ass, I have searched Metafilter for similar questions and found some very good information.

Where I'm at now:

I'm in my early 40s and I've managed to stumble into a career as a composer/creative director, mostly doing music for TV commercials and short films. For the past couple years I've been freelancing, and though I like the freedom and time with my kids, the income stream has dried up and the financial stress has become too much. I've been trying to figure out what else I can do to make a good living and from what I understand, software developers are in very high demand right now and it can be a very decent paying gig. Over the past couple days, I've started a couple Ruby tutorials on the web:

I'm not very far along, but so far, so good. I'm concerned that as things get harder, my focus will fade.

There's also a free Ruby meet-up group here in Brooklyn that I've contacted. That may help keep me on task.

I also looked into the free MIT courseware offered online, which looks great. I like the idea of following a tested curriculum and having that framework to guide me. Their focus is Python, so I guess I'm at a fork in the road between Ruby and Python. I've looked into the arguments for and against each and it seems to be pretty much a toss-up.

I guess I'm asking a couple things:

1) What is the fastest, easiest way (language, method) to get to the skill level where I can be hired somewhere and make a good living? My hunch is that I'd be better at writing apps, games, and web-based code than more purely functional stuff (servers/databases/etc.) but I could be wrong - I'm just basing that on what seems interesting to me and what I use. I have a very creative mind and I also love taking things apart and fixing them and solving problems. I want to make stuff that ordinary people will find useful or delightful. But abstract math-y stuff doesn't interest me so much and I think that may preclude me from starting with some types of languages. Right or wrong? What are the starting salary ranges for this type of work? I'm in Brooklyn but I'd consider moving if it meant a steady job.

2) Am I cut out for this work? Is there any way to tell ahead of time, without investing hundreds of hours into it? What kind of mind/temperament is needed to be good at coding? I don't think I was born to do this but I think I could do it fairly well. is that enough?

3) What is it like to code for a living? I have this mental image of a bleary-eyed, pasty-faced man at 2am, with twinkie wrappers and star wars action figures strewn throughout his cubicle. How many hours a day can you expect to work? What percentage of that is actually typing into a computer? I'm sure there are massive variables here - just asking about specific experiences you all have had or are aware of.

4) What am I forgetting? What am I missing?

Thanks for indulging me here - I really appreciate whatever insight you have.
posted by lukievan to Computers & Internet (14 answers total) 86 users marked this as a favorite
I only came in to say you might want to check out Code Year, which is a weekly coding lesson that seems like it might be pretty cool. I just signed up this morning.
posted by gauche at 8:20 AM on January 5, 2012 [10 favorites]

1) Very few software developers actually build servers/databases - most solve business problems using tools built by others. To find jobs via "recruiters", you will need at least 2 years of work experience, so for now you will have to apply directly.

2) Do you find that when you get into a problem, you develop "flow-state"? Are you willing to be constantly learning the ever-changing technology mix?

3) Your mental picture depends on who you work for and where. If your skills are not fully developed, then yes you probably will be putting in more late nights than somebody with more experience - until you gain that experience. And... well, it depends on your personal situation - when my kids were younger, I worked less. However, now that I am paid by the hour as a contract consultant for obnoxious rate - I work more, because I want to maximize my revenue ;-)

4) Straight-coding is one of those easily outsourced skills - what you need to also ensure are top-notch are your consultative/communications & troubleshooting skills.
posted by jkaczor at 8:23 AM on January 5, 2012 [3 favorites]

There's much more to computing than just code - if you want to be a codemonkey, no more, then there are jobs out there, but really if you're into a career in computing, you'll need more. To get a coder job in the UK (not sure how it is in the US but it can't be that different) you'll need either a CS degree, or a shithot portfolio, or you'll need to be going for an entry level grad-type job (where they don't pay you much but they do train you - these are super-competitive).

It looks like the middle option - AKA shithot portfolio - is what you're thinking of. So you want to learn to code, you want to get on github and stackoverflow and get yourself a reputation as someone who knows what they're talking about, you want to create some cool stuff, and you'll really want to work at it.

Are you good at abstraction? Try having a go at the tasks on Project Euler and see where you get; they're a good way to develop your abstract muscles.

Possibly the best route for you would be to look for something that's cognate with your existing skillset - programming for music and musicians maybe? I have no expertise in this though so can't advise.

An excellent, natural, coder is a rare thing; a good software engineer takes some talent and a lot of training.
posted by handee at 8:23 AM on January 5, 2012 [5 favorites]

1) If you want the fastest, easiest way to get an employable skill, just do html/css. Tons of good resources out there on how to do it "the right way" and the rules are really straightforward and easy to understand for most people. "Apps, games, and web-based code" involves a lot of "purely functional stuff". Hate to break it to you, but there is no "simple way in" to making delightful and useful apps without any effort. Making useful apps is a hell of a lot harder than making confusing, patched together ones. I am a firm believer in the 10k hours to mastery thing. If you want to do this fast and easy, you are probably going to be bad at your job.

However, most day to day coding does not involve a lot of math, unless you are working at a very high level for financial institutions, or in research. (There is the caveat of front end development and animation, something really important for games, which does involve math--but it's really basic stuff you probably learned in middle or high school).

Starting salaries in NYC seem to be around 45k unless you went to a top tier school. MS, Apple or Google pays around 140k for the youngins who went to MIT, etc. If you are just starting out, expect to work a lot of (unpaid) overtime.

2) Just try it out, and if you are hating every second of it, you are probably not cut out for it.

3) Everyone I know works 9-10 hour days every day, with some crunch periods of longer. Including people with kids. Around 80-90% of my day is spent typing into a computer. At more senior levels, there are more meetings.

4) If you're just picking this out of a hat because you heard it was easy and really profitable, that is a bad reason to pick a career that is not easy in actuality. Maybe you would be more interested in doing UI development or something (note: don't think this is easy either, just might jive more with your past experience)? This is also in really high demand in NYC, and the best ones know html/css and some javascript, but do mostly design work.

One other thing, most places don't consider ruby/python to be "software development" unless you're at a high level. Try searching "web development" job postings for an idea of the kind of skills you'd be expected to have, and the kind of income you can expect to make.
posted by shownomercy at 8:34 AM on January 5, 2012 [4 favorites]

Man, this is a good question, but I'm not sure how to answer it without either being professorial or ranting. Here's what's on the top of my mind:
1. there are no fast or easy ways to become good at anything; sculpting, cabinetry, directing, programming, etc. You can train for where there's fast-rising demand, but you can be assured that most everyone else will be doing the same. I can throw a rock and hit a hundred low-cost HTML/Javascript guys. If you want a semi-decent-paying but limited job, learn to program for popular technologies. If you want a career, learn to be very good at either a stable long-term technology or an evolutionary technology. It's better to be very good at something you love than it is to be mediocre at something popular. You won't ever be very good doing something you dislike, so find out what you enjoy first.
2. No one here can say. A lot of different types make it in programming. Some traits are more beneficial than others: are you able to hold larger structures of things in your mind while working on a small detail? (Imagine keeping the expanded parts diagram of a piece of furniture in your mind while working on a single leg you're holding in your hand.) Can you imagine very large varieties of cases/inputs? (What are the possible outcomes of any possible input here? Will this do what I designed it to do?) What's your background in mathematics? Etc.
3. Depends a lot on the job and project. Most days it's eight hours in front of a couplefew monitors. Over the course of a typical project here, my time breakdown is probably 20% research, 20% design, 10% documentation, 30% coding, 10% back-end (deploy to factory, maintenance, field bug fixes, etc.), 10% miscellaneous overhead. Of that, I'd consider the research, design, and coding all to be "programming." Note that a non-trivial chunk of my work doesn't involve typing code. I spend large chunks early in a project (when research and design are heavy) in the library, coffee shop, etc. The ends of projects tend to be much more computer-heavy, and sometimes you end up working until midnight so your coworker isn't waiting on you in the morning in order to be able to start his bench testing.
4. Programmers program. Remember that. That's what defines a programmer; no more, no less. Go write code. You don't need a degree or a formal course to get started. You might really want one to progress later, but you need to find out right now if you'll actually enjoy learning and doing this stuff. If you don't enjoy it, you'll make a lousy programmer.
posted by introp at 8:38 AM on January 5, 2012 [3 favorites]

It's difficult answering your question because the market is so broad right now.

If you want basic broad marketability, then learn Java or C#. There are frameworks that layer above those languages, but start there. It is hard to say what time-frame qualifies as 'fastest'. Becoming a good developer is more than just coding or knowing one language. It's about foundations, algorithms, data structures, and soft concepts like communication and realizing end-user (business) value of spending time on features and bug-fixing.

What kind of mind/temperament is needed to be good at coding?

In terms of mindset, it is valuable to be able to admit you are wrong or don't know things. You will often need to know how to find out things in order to start a problem. You will be given a task that you know little to nothing about other than a high-level idea. As such, you will need to translate that idea into lower-level abstractions which eventually lead to code, interfaces, and protocols.

The best developers I have worked with excel at one or more of the following:
* Idea guy - The guy who spends a lot of time coming up with grand, interesting feature ideas.
* Technical guy - Knows way too much about the nuances of languages and frameworks. Way too much where you are glad he or she is on your team.
* Automation guy - Identify areas that are being done in a single or series of manual steps and automates them away.
* Business guy - The guy who can see the value of spending time on features or the value in pushing back against creating features.

What is it like to code for a living?

It depends on the company, product, and your manager if you have one. I have done late nights and weekends in my career. However, most days are standard work hours because I have prioritized that criteria in my job searches.

At my previous job, which was large company/process heavy. I would spend a large portion of my day on meetings and process rather than coding. When coding was required, it was expected I would do it fast and clean. The remainder of the time was supporting automation, testing, and bug fixing.

At my current job, which is small company/process light. I spend a large portion of my day coding rather than meetings. I find I have more time to think about what I am coding, specifically, so I can keep it maintainable.
posted by seppyk at 8:39 AM on January 5, 2012 [4 favorites]

1) What is the fastest, easiest way (language, method) to get to the skill level where I can be hired somewhere and make a good living?
From the time I started programming until I crossed the $100k/year threshold took me about 10 years, including 4 spent in a computer science program at a university, and covered at least a significant amount of C++, Java, Perl, PHP, Javascript, and a bit of some other languages. Could you do it faster? Sure. Maybe in like, 8 years instead of 10.

apps, games, and web-based code than more purely functional stuff
For the most part, you can't tell the difference while you're writing the code. It's like saying you'd be better at painting Ferraris than minivans because they're cooler.

I have a very creative mind and I also love taking things apart and fixing them and solving problems.
If you can put this and GDB to use solving esoteric race condition and concurrency problems, you're hired.

But abstract math-y stuff doesn't interest me so much
You can't only want to do the fun part. The reason the field pays well is because it requires a lot of experience and understanding of difficult concepts. This is one of the most core concepts you will need to understand to get hired as a programmer. Here's a serious challenge for you. Look up "quick sort". Figure out how it works. Understand *why* it runs in N*Log(N) average case and N^2 worst case time. Understand what choosing a different pivot point means when the input to your quick sort function is already sorted. Then you will have basically done the first week of a data structures and algorithms class on your own. This, IMO, is the single most important class that a CS undergrad takes, and it contains the most key concepts required to work in this field.

What are the starting salary ranges for this type of work?
I started straight out of college in San Francisco at $68k/year about 6 years ago.

2) Am I cut out for this work? Is there any way to tell ahead of time, without investing hundreds of hours into it?
Maybe? How do you know? Try it. If you hate it after 10 hours, don't put in hundreds more. If you love it after 10, keep going.

What kind of mind/temperament is needed to be good at coding? I don't think I was born to do this but I think I could do it fairly well. is that enough?
This is a question that doesn't matter at all. If you're good at it, it will become self evident. If you're not, that will too. Being that you can't objectively classify your own "kind of mind/temperament" it doesn't matter. Oh, but it does require the "kind of mind" that likes to objectively clarify things. If you're going to tell me "I have temperament X" you had better be able to prove it if you want me to care, same as if you tell me your sort algorithm runs in N(log(log(N))). Show me, don't just say "I feel like this is probably the case".

3) What is it like to code for a living?
It's like working in an office. You park, go inside, get a cup of coffee, ask your co-worker how he's doing, read your email, respond to the urgent ones, go to a staff meeting, write some code for a couple hours, see who has time to go to lunch, drink more coffee, code for a couple more hours, complain about how you're supposed to have to store proxy credentials in windows 7, get sidetracked into a conversation about The Wire, go home.

4) What am I forgetting? What am I missing?
It literally takes 10 years to be *good* at this, which is why it's in strong demand. There are only so many people who've put in the time, and there are more positions available than there are people with those skills. If you could become employable in three months, then the market would ber saturated. You can probably find some relatively entry level gig at some place where nobody else is programmers with a year's experience, but at a real software company where the people who interview you for the job are other programmers, they're going to ask you questions like: given a "Boggle" board and a dictionary, write an algorithm to find all the words the board contains. What's the runtime complexity of your algorithm? How could you optimize it? And you'll have to do it in 20 minutes on a whiteboard. Oh, and they'll hardly care if you use Ruby or Java or whatever. Choice of language matters only slightly more than choice of pencil would if you were hiring a writer.
posted by tylerkaraszewski at 8:42 AM on January 5, 2012 [20 favorites]

Also, keep in mind that the stuff you hear about online is not representative of most programming work. It's a lot like writing: for every novelist there are dozens if not hundreds of people working on press releases, verbiage for product boxes, internal company newsletters, product descriptions for the company web site, the text for a fundraising email, etc.

The vast majority of computer programming work is in organizations that build and maintain tools for their businesses -- billing systems, utilities to make sure company mailings go out on time, scripts to update the company phone book, etc. If you enjoy the meaty work of writing computer programs and solving problems, there is a lot of this kind of work just as there is a lot of "writing" work. That kind of environment really doesn't breed many cheeto-stained star wars nerds, either, any more than doing copywriting for a company breeds chain-smoking black-beret-wearing beatniks.

If you're imagining jumping into a hot Web 4.0 Company and doing iphone games and glitzy stuff, then you're looking at a much higher pressure environment. Tech startups are infamous for their long hours, constant deadline scrambles, and the high risk of failure.

Programming is a lot of fun, and if you mess with it for a while and decide it's where you'd like to go, you can eventually make a great living. There isn't really a magic shortcut to cashing in on it, though, any more than other vocations.
posted by verb at 8:57 AM on January 5, 2012 [2 favorites]

Teach yourself to program in 10 years.

What's it like? I've been writing code since I was in 8th grade. What really did it for me was the "make the monkey dance" aspect of it. Out of thought I could make a reality that could grow and flourish. The trick was figuring how to get from the thought to its representation in code. Doing this well takes a long time and requires writing a lot of code. Seriously.

On a day to day basis, I come in and deal with email that has stacked up, have a morning status meeting to see where my colleagues are, then I sit down to code on my current project. On a good day, time will go into a weird shift and I'll lose about 3 hours of awareness because of depth of concentration. If I'm doing new code, I'm spending a bunch of time thinking about the overall design and how it fits into our existing code base as well as how it can grow in the future (is it extensible? are the abstractions in the right places? will I regret the nomenclature? how can I eliminate bugs in code through the design? etc.) and also writing unit tests. As an experienced developer/architect, I also work with my colleagues routinely. Sometimes a few choice words can prevent hours wasted.

In addition to writing designing and writing code, I also spend time making my workplace a more awesome place to be. This is done through things as simple as talking to people, questioning corporate BS, trying to remove pain points, making the environment fun, preventing toxic interactions, and so on. I also have to look at our overall processes and make sure that we are engaging in best practices and working with the team to improve the,

Some people will make a big deal about which language you should use. I'm firmly in the other camp, mostly because over my career, I've become a polyglot. From my point of view, pretty much all high level languages are the same. There are proofs of this (that imply more that you can't do anything in one language that can't be done in another), but it comes down to being able take a large process, turn it into smaller sub tasks (hopefully named) and be able to repeat, test/branch, iterate, and perform simulations of arithmetic. For example, I wrote procedural code long before I knew what it was in assembly language. I wrote object-oriented code in C long before I knew what OO was. Each language has a particular flavor to it that makes some things easier than others which in turn might lend itself to certain solution techniques, but it doesn't mean that those can't be used in other languages. For example, I've written a bunch of F# code that heavily leveraged F# partial function application and functions as (more or less) first class objects. I have also written that in Java which doesn't have either of these things in the language, but can be done relatively painlessly in other ways. For a beginner, I'd say that you can make the learning curve more reasonable by looking at languages that are garbage-collected at the least, fairly widely adopted, with strong support libraries, and with plenty of online examples. This would put Java, C#, VB, Python, and Ruby on more or less even footing. Javascript less so.

Writing code has had interesting side-effects on me. For example, I used to giggle a little bit whenever a cashier asked me "cash or credit?" because my inside voice would answer "yes" or "true." Another example is that recently, I woke up at 3:30 (after a whopping 4 hours of sleep) and stared at the ceiling and designed a way to hack code for the sound board of Robotron/Joust/Stargate video games to play multi-voice music with (possibly) programmable wave tables. For no other reason than I thought it was interesting, I spent a few hours running a thought exercise for hardware that has been obsolete for several decades that uses a processor for which I can read the code of but have never written a line. And then a day later on the walk from my office to my car in the parking lot, I was designing the toolchain I would need to write that code to run it on MAME. This kind of thing happens all the time to me. It isn't always so esoteric - I was driving home from a family thanksgiving (a three hour drive) and I completely redesigned our company's memory management strategy as well as a rough schedule for implement those changes that would end up taking three years of small steps before being fully realized, but would minimize impact on our existing customer base (and in reality, we have had precisely 0 support cases on the single breaking change I had to make to the public API).

I've found it to be an utterly fascinating career and I like where I work and look forward to coming in far more days than not. Not a small part of that has come from my ability to effect positive change.
posted by plinth at 8:58 AM on January 5, 2012 [13 favorites]

I've been working as a software engineer for a bit under a decade, doing mostly Web stuff in Java and Ruby. These are tough questions to answer concisely, but on preview, I think the collective wisdom in the answers is pretty's my two cents.

1) If you want to be a Web development generalist, Ruby is a good place to start. Python has a strong presence in academic and GIS circles and is a fine language for Web stuff, but the Ruby ecosystem is (IMO) a bit more mature.

JavaScript is also getting pretty big as of late and might be worth actually learning to do properly, if you want to get into Web stuff.

2) As for deciding if you like the work or not, I'd recommend working through Agile Web development With Rails because it not only introduces you to coding in Ruby/Rails, but also stuff like version control, testing, deployment, and agile processes. People make careers out of just one of those things, but you'll need to know a little about each of them no matter which direction you go.

3) I work a pretty standard 9-6 and very occasional OT (e.g. nighttime deployments). It's mostly coding and a couple hours of meetings a week. But I also spend a lot of time having conversations with product people, testers, other develpers, our database guy, etc. to figure out what it is our customers are really asking for and what we need to do as a team to make it happen. Quite the opposite of the programmer stereotypes, I think software is a very social endeavor and good developers have strong communication skills.

I will say that the Web development ecosystems change quickly and it will definitely take some time outside of work to stay current, learn the occasional new framework or language, etc. But it doesn't have to be all-consuming.

4) Finding someone to give you a shot with no experience could be tricky, but the NYC market has enough going on that someone would probably take a flyer on you if you were sufficiently tenacious. Alternatively, getting involved in open-source projects is easier than ever thanks to tools like GitHub and BitBucket; the book I recommended above will also introduce you to that world, which is a great way to build your skills and connections.

Best of luck!
posted by substars at 9:36 AM on January 5, 2012 [2 favorites]

Ageism is a real concern in this field. It's not a complete deal breaker, but you should at least be aware of that when deciding whether to pursue software development as a second (or third, or fourth...) career.
posted by ceribus peribus at 10:41 AM on January 5, 2012 [4 favorites]

Response by poster: Thanks for the responses so far - very thoughtful (and honest) with lots of information for me to process. I get the impression that the community of coders/developers is a warm and supportive bunch, bucking that dated stereotype of the misanthropic nerd.
posted by lukievan at 11:08 AM on January 5, 2012

What is it like to code for a living?

You feel confident that any technical problem can be solved, given enough time and information, but you simultaneously always feel like you are making it up as you go. You have no magical thinking about how computers work and it annoys you when you rub against people who do.

This is an interesting and deep question all to itself that it would be fun to develop out further.
posted by dgran at 11:11 AM on January 5, 2012 [4 favorites]

A suggestion out of the blue: think about editing. You clearly have a handle on language, and in my considerable experience in publishing, people with musical backgrounds make outstanding editors. Something about organizing thoughts, phrasing, etc. Coding honestly plays on the same strengths, but if you're just looking for a new direction, it isn't the only one.
posted by kostia at 1:00 PM on January 8, 2012 [2 favorites]

« Older Absinthe fountain or soap dispenser?   |   Suggested replacement for my home NAS? Newer »
This thread is closed to new comments.