Um, what is programming?
September 16, 2019 9:59 AM   Subscribe

BigLifeQuestionFilter: How long does it take to learn to be a decent professional programmer/developer/software engineer/whatever? And if so, do I want to?

Background: I’m a 26 year old woman. I was an economics major in school who also took a lot of coursework in sociology, statistics, and research methods, all of which I really enjoyed. I’m fine-but-not-stellar at math; I don’t mind learning it as a means to an end but I don’t really find beauty in numbers the way some people seem to.

My professional experience thus far is somewhere at the intersection of business-analyst stuff, communications, and, increasingly, focusing on providing subject-matter expertise in one industry-specific topic. I’m doing pretty well professionally (in the sense that I have this amazing combination of a well-paying, interesting, purpose-driven job, working on stuff I care about, where I work with good people, and I’ve been given an increasing amount of responsibility including managing a team for the first time this year) but I do struggle with an disproportionate amount of anxiety related to work that makes the minutae of my job more difficult than I think they should be. I’m doing well on paper, but I rarely hit any sort of “flow” in what I do. That's a big topic for another day, but I think it plays in here to explain my interest in exploring my other career options.

So - I’ve never taken computer science or even really written an actual program, but for a while now, I’ve had a vague interest in trying to become a programmer or a developer or something. Problem is, I’m concerned that it’s “too late” and the chasm of knowledge between where I stand now and where I’d want to be is too great. Thanks to that, I haven’t seriously explored it.

While I don’t really have programming experience, I have done a limited amount of coding: I’m solidly intermediate at R (my best language by far) and I can generally get at what I want with SQL (although not very efficiently). I’ve done about a codeacademy course’s worth of work in Python. I’ve experimented with some more-esoteric coding (mostly in Qlik) for work. I’ve genuinely enjoyed all of them and find that I can easily lose hours to the challenge of learning to do new things, but I’m not consistently developing any of those skills as part of my daily routine right now.

I also don’t fully understand the world of programming/software work and what those jobs truly mean - there are so many languages and environments and tools! So many different definitions of the same roles, it seems! So many types of companies! Some people have a decade of high-level math under their belt while others somehow launch in after a coding bootcamp!

I understand I can always try programming as a hobby - that’s the obvious choice to try here - but I guess I’m trying to build an understanding of whether that's all it is or if it might ever be feasible to reach the level of doing it professionally (and doing it well, at least on par with my current career trajectory) if I start from where I am now. And, if so, what it even really means to be a professional.

I should say - I’ve done some googling and found plenty of it’s-never-too-late platitudes, or a lot of specifics about pursuing programming as a career that immediate focus on specific languages (that, of course, conflict with each other), but it’s hard to know how to truly synthesize that. I know mefi is full of software types; do you have any advice on how to learn/explore more about those skills, or those jobs, or figuring out if I might enjoy it?
posted by mosst to Work & Money (18 answers total) 24 users marked this as a favorite
At 26 it is not too late for anything, regardless of what you've done so far. There's probably a bunch of jobs you're qualified for already in the tech world that are at least programming-adjacent, although actually getting one is always a lot of work.

"Coding bootcamps" vary hugely in quality, but they're basically short vocational colleges that teach you to program and run a job placement service. Places like General Assembly or Coding Dojo or any of the dozens of other places like these (I'm not endorsing either of those, they're just examples). the main downside is they're expensive for the in-person classes. A lot of them offer cheaper or free online courses, you could try one of those and see if you like it. But I'd be cautious of putting too much weight on "liking it" - coding is a job and you only have to like it enough to get out of bed in the morning. I work in tech and I actually like coding a lot but the irony: I do basically zero coding.

The main upside to a bootcamp is the job placement pipeline - they have contacts with corporate recruiters and you'll get a bunch of interview right out of the gate. That's like three-quarters of the work finding a job right there.
posted by GuyZero at 10:22 AM on September 16, 2019 [1 favorite]

With your background (stats, R, etc) you could easily jump into data science and make lots of money working on interesting problems.
posted by rockindata at 10:31 AM on September 16, 2019 [7 favorites]

It's not too late!! I'm five years older than you, and over the last year I successfully switched from a research/analytics job to a much more coding-intensive data science career, where I'm a lot happier.

In fact, I think you'd be a good candidate for data science: it's usually defined as the intersection of programming, statistics, and subject-matter expertise. And if you already know some R and SQL then you've got a great head start.

I went the bootcamp route, rather than the grad-school route - I think that was the better choice for me, but there are pros and cons to each.

I could talk about this all day, please feel free to PM me if you have any questions.
posted by theodolite at 10:31 AM on September 16, 2019 [4 favorites]

Well, you've discovered the most important part already, there are so many different environments, from tech companies to non-profits with tech needs to higher ed to health care. And each one of these has a very different way of approaching what it takes to break into the space. Platform and tools are like this too. We certainly care if you have the skills we need today, but more importantly the skills to stay up to date. Very little of what I use daily right now was even invented a few years ago, let alone when I started this career.

So my advice, pick something that sounds interesting and learn it well and figure out where you can use that part for now and know that's not a forever choice.
posted by advicepig at 10:32 AM on September 16, 2019

Ive been in software for 20 years, mentoring as a team lead for 6. I studied molecular biology, but really loved computers. I'll take a stab at attempting to answer.
The software industry is very broad and very deep and that's why you see such a range of people in it. Most PHD mathematicians in software are doing something completely different than the boot camp people. Additionally, you can apply software to almost any industry (I've worked for golf magazine, the airforce gps program, biotech, finance, etc...). This means that you need to find out what is attractive to software for you because you can do almost anything with it.

However, with your skillset you would be a good fit for a product owner role which would be a good way to get into the industry without necessarily needing the software proficiency. Product owners are (generally) the subject matter experts for a "slice" of the business. They help understand leadership goals and roadmaps, do research (via database reporting tools that you appear to have experience in), define a 'model' to solve a particular business challenge and then work with the tech team (developers/engineers) to help translate the business model into a software model.

Although there is no direct software developing, you would get a chance to see how the sausage is made because most of the hard part is in the design and requirements communication aspect which the product owner is directly involved in. Some of the best product owners I've worked with have a technical interest and therefore became directly involved in the design aspects of the position and because they understood the solution (albeit at a high level) they were better able to set expectations with leadership, hold conversations with other teams, etc...

If you want to get directly involved in coding, as you have seen there are a variety of tools that can be leveraged for almost any job. Writing macros in XLS is coding (as far as I am concerned). It does take time to get 'good' at software. I would say the ramp up time is 3-5 years to understand the programming language, how to design, how to test properly, the build tools, deploying into production environments, etc... (depending on the types of applications you build) and then another 3-5 years to become *very* good. In my first 3-5, I struggled with imposter syndrome, feeling overwhelmed, etc... and I did a LOT of learning frameworks and writing code outside of work.
posted by kookywon at 10:38 AM on September 16, 2019 [2 favorites]

It sounds like you are in an enviable position already - well paying, etc, and that you are gaining leadership opportunities and being seen as an expert in your field at a really young age. It's not clear to me what software development would get you that you don't already have, unless you just love the coding and puzzling and building parts of your job and are looking to do more of that. I wouldn't expect a coding job to make the anxiety go away.

You could position yourself for a data science career - which is what I do - but I am increasingly concerned that industry is making investments beyond the near-term capability of data science products to deliver, and this in part due to the management layer not being sophisticated enough to incorporate data products into the decision making process. There's not enough skepticism or background knowledge and the nuance and caveats get lost. I fear what will happen next is a lack of ROI based on over-hype, misunderstanding, and poor decision making leading to the data bubble bursting a little bit.

This is where you come in - is it possible to build on where you are now, and position yourself as a capable leader in the space of understanding and deploying data-intensive decision making, positioning yourself to take ownership over, design, lead, and deliver data and tech intensive projects?
posted by everythings_interrelated at 10:45 AM on September 16, 2019 [5 favorites]

Sorry, all, that my brain-dump above may have been...difficult to interpret. Thank you all so far, this is so. seriously. helpful. in understanding the universe that is Tech and putting my finger on what it is that I'm thinking about.

To one point:
It's not clear to me what software development would get you that you don't already have, unless you just love the coding and puzzling and building parts of your job and are looking to do more of that.
Yes, basically exactly that. One of the questions that I would want to better understand is whether full-on development actually scratches this itch anything like the way that learning basic coding does, and what sorts of environments/roles are likely to have more of that.
posted by mosst at 11:32 AM on September 16, 2019

what sorts of environments/roles are likely to have more of that.

Take a course at a local university on a part time basis? Take a course online?

The good news about programming is that honestly the bar to entry in terms of equipment is basically zero if you already have a modern computer of some sort.
posted by GuyZero at 11:57 AM on September 16, 2019

Read Paul Ford's (magnificent, long) feature What Is Code? Here's the original Metafilter thread to go with it.
posted by caek at 12:21 PM on September 16, 2019 [3 favorites]

One of the questions that I would want to better understand is whether full-on development actually scratches this itch anything like the way that learning basic coding does

Sometimes! The big difference between learning to code and actually professionally coding, in my experience, is that while you're learning to code, you're generally building things step-by-step from nothing. As a result, you control the whole process, and the only thing standing between you and solving the problem is your own ability to code. Coding professionally, on the other hand, almost always involves dealing with an existing codebase. Often (always), this codebase has been built up over time to respond to lots of individual circumstances that have faded into history, leaving behind something that's at cross-purposes with what you're trying to do.

This is not to say that you won't still have those incredible moments where you finally push through and figure things out - you will! It's just that those moments are less like suddenly discovering something and more like this scene in Apollo 13.
posted by Ragged Richard at 12:31 PM on September 16, 2019 [5 favorites]

You can do this. Learning to code professionally is only a little about the language. Once you learn common idioms and a few design patterns, you're off to the races. JavaScript - a very powerful and flexible language - only has about a hundred keywords.

The unexpectedly complicated parts include learning: the app that the team uses to code (ide), how to test, what are the test tools, any building/compiling tools, how to use third-party modules and frameworks(pre-written reusable code), how to deploy the code so it's operational...

The point is, even if you are all bootcamped or degreed up, a lot of stuff is mostly experiential. The hidden feature/bug is that you'll have to figure this out over and over across your career. You get better at it. Just don't be too surprised when you hit these challenges.

Also you gotta like puzzles. Also, the pressure to do it faster invariably induces a lot of engineering compromise. Perfectionists can struggle.

Aside: There is a well known essay called 'Learn Programming in Ten Years'. It's dated, but the principle holds. I agree with the previous poster's estimate of 6-10 years to get really good.

As with any fresh endeavor, persistence is key.

A more direct answer: see if you can shadow a dev, or a few different ones. Lot's of us work from home. Ask yourself 'what do I want to program *about*? Epidemiology? Battlefield simulations? Big data analysis? Geography? Google that. As for as roles, every shop has different expectations and a different role structure. But you can bet that there's: new guys who fix existing code and work with mids, mids who do the lion's share of feature development, leads who structure the project and process, and high-level overall architecture guys (big picture).

Good Luck!
posted by j_curiouser at 12:53 PM on September 16, 2019 [1 favorite]

Programming is what you're doing when working with R, or even excel macros. Solving a sequence of problems with computers. The range of possible is just incredible from tiny assembly programs on an embedded device that fits under a dime to the vast server farms serving googles distributed queries, one search could easily trigger code on hundreds or thousands of virtual cpu's. Millions of directions, getting a handle on programming is a great wrench in your toolbelt no matter what direction.

Learn the core algorithms, a data structures class would be really worthwhile, a good grasp of big O analysis will be useful for perspective on big problems, the network is almost invisible these day but learning about TCP/IP protocols will put a bunch of things in perspective. Learn a compiled language, Go would be a good choice (C++ is too wacky these days unless you want to go certain intense directions).

Remember it's all just "read some data--change it--output new data", every program from an R macro to a giant BigData weather analysis is input,churn,write.

There is huge niche prejudice, an "enterprise" java spring dev can barely communicate with a javascript angular kubernetes 'expert' even though the web pages both build are equally annoying ;-)

There seems to be some movement from R towards python, incredible tools in both. There's huge excitement in with big data, and a whole lot of in-crowd jargon for stats and linear algebra but amazing results and even more amazing (cough..imaginary) claims.

Solving a coding problem is different than a lot of world/people projects, when it works, the code runs, very satisfying. Getting there can be fun even if it's really really hard, but it is usually tied up in all the world/people ambiguities and can also be "sit in the stairwell for 20min" frustrating in surprisingly new and repetitive ways.

Good luck and code up a storm!
posted by sammyo at 1:05 PM on September 16, 2019

Hello! I was in a not-dissimilar place to you five years ago. (FWIW I was 30 at the time) I was an internal promotion into a company's data team, doing ETL/DBA process stuff, but when it came time to leave and find a position that paid me like someone who was good at the job, rather than someone they had trained, I realized that the things I liked about the work were the things I like about the two coding courses I'd taken in college, but I'd liked coding more. So I did a coding boot camp which ended with a one-month internship, and five years later am in a split individual contributor/manager role for a small team at the same company. A few thoughts on my process and what yours could be (a caveat here is that I have not done contract work, and can't speak to that world):

- To become a professional programmer, there are two overlapping but distinct skillsets: how to write code for programs, and how to write, test, deploy, and maintain production-quality code in the context of a larger engineering team. The first is what you learn to get into the industry; the second can't really be learned except on the job.

- It is certainly possible to teach yourself to code without any external structure like a boot camp or other such program. It sounds like you're doing this already; if that's your goal I'd encourage thinking about how to help out with open source repos, or some other way to interact with other people and their code rather than only working on your own solo projects.

- If your goal is beyond programming as a hobby (and it sounds like this is the part you are figuring out) I'm not sure there is a great way to dip a toe in. It sounds like you are well-positioned to consider being a data scientist rather than a coder, if that's a thing that interests you, but whether you want to try that or want to become a developer full stop, I'm not sure there is a great way to experiment other than having a go at a career change.

More broadly, I'd like to say that it is definitely not too late to make the career jump, if you decide it's one you'd like to make. As others have pointed out, there are a number of ways to write code professionally, and non-overlapping programming skillsets. The through-line is the baseline programming knowledge and ability to work in a professional coding environment; everything beyond that is knowledge of a specific language/library/framework/etc.

If you choose to pursue coding, I would emphasize figuring out what your plan is to get a foot in the door of the industry in addition to learning the raw skills. The one-month internship I did as part of my coding bootcamp turned into a paid gig that launched my career; my brother (who is every bit as smart, capable, and agreeable as I am) did a different bootcamp at about the same time (that was if anything better regarded than the one I did) and struggled for his first year or so as a professional programmer because he had trouble getting in the door without any relationships in the industry.

That is some scattered thoughts that are hopefully helpful, but I'm happy to talk more about my experience via memail if that'd be helpful.
posted by lhputtgrass at 3:18 PM on September 16, 2019 [1 favorite]

While I don’t really have programming experience, I have done a limited amount of coding: I’m solidly intermediate at R (my best language by far) and I can generally get at what I want with SQL (although not very efficiently). I’ve done about a codeacademy course’s worth of work in Python. I’ve experimented with some more-esoteric coding (mostly in Qlik) for work. I’ve genuinely enjoyed all of them and find that I can easily lose hours to the challenge of learning to do new things, but I’m not consistently developing any of those skills as part of my daily routine right now.

You're probably at least solidly at the same level of understanding of this stuff as most junior developers and some mid-levels based on just this kind of thing and a couple months of relatively focused learning on actual practical development in some area or another, whether it's through a boot camp or otherwise.

I'd normally suggest trying this on your own, first. The boot camp was mostly useful in giving me a silly credential to wave in front of non-technical people and introducing me to the guy who knew where a job was that would be a good fit for me.

The thing is that everything has some of the challenge of learning new things and working out the puzzles, so I found it more helpful to think in terms of what kind of stuff you want to build. What kind of stuff do you look at in your life and think, god, that's cool, I wish I could be a part of that. Games? Systems with complex algorithms and machine learning to solve big problems? Ways to manage huge amounts of information? Mobile or web apps--and what kind? Some of these are more friendly to nontraditional education than others, but all of them are much more doable if you are genuinely into what you're doing.

It's definitely not too late, and it's so far from too late that if nothing really calls out to you as an area you want to work, I'd keep it as a hobby but wait a few more years to see if the inclination gels into something more solid.
posted by Sequence at 4:14 PM on September 16, 2019

One of the questions that I would want to better understand is whether full-on development actually scratches this itch anything like the way that learning basic coding does, and what sorts of environments/roles are likely to have more of that.

Like the other commenters here, I am totally confident that you're capable of making this career jump, but I'm not sure it'll give you what you want. In my experience, the vast, vast majority of programming work does not consist of solving interesting problems, and especially does not consist of solving interesting programming problems. I think part of why professional tech workers are stereotypically obsessed with the domain of their work, even in their off-time, and controlling for the perverse expectations of the industry in the first place, is due to the fact that their day-to-day work doesn't challenge them in the ways that they expected going into the industry. What are the types of things that scratch your itch for problem solving? Being genuinely into the work goes maybe a little farther on its own in the tech industry than in other fields, but fields like (for example) data science are rife with credentialism, and I can't earnestly claim that enthusiasm and demonstrated ability make for a guarantee of a job or interesting work in the face of that. I am definitely not looking to sour your view of the prospects prematurely or to diminish your enthusiasm, but I think there's a good chance of your having to endure a sort of drudgery for a significant duration before you get to a place that gives you the opportunity to work on things that interest you that will sap your enjoyment of programming in the meantime.

Now, since my experience is just my own and shouldn't be taken as some sort of authoritative perspective on the industry in general, I definitely second j_curiouser's recommendation to shadow someone in the industry, or at least have a coffee with them to get a sense of what their day-to-day is like. If you don't have any first-hand connections with people in that position, you should feel free to find people in your area (via relevant meetups, LinkedIn, or other venues) and ask them if they'd be willing to talk to you over coffee about what they do and how they feel about it. I know on a first-hand basis that that sounds incredibly daunting, but a lot of people who do this work are happy to share their experiences and knowledge with other people interested in the domain, because it becomes clear to most of us after enough time that hearing other people's perspectives on the things that we're working on is incredibly useful, whatever their expertise, so long as they're interested in and have spent time thinking about programming problems.

The other thing I'll say is that, if your current subject matter expertise could in any way benefit from a tie-in with programming and if it's something you'd be interested in retaining a focus on, programmers who lack a domain of focus that they know a lot about are a dime a dozen. Someone who has both the programming chops and the domain knowledge relevant to a given problem are highly valued, and if your current area of expertise combined with a computational focus can sustain your interests, you've already got a leg up by advertising that about yourself.
posted by invitapriore at 7:09 PM on September 16, 2019 [3 favorites]

In your shoes I'd probably try to add programming to my current work rather than change to become a pure programmer. You've got an extra skill that'd be silly to throw away.

But can you do that? Yes, absolutely, and you'll come out at least as marketable as you are now.

I will warn you, though, that previous answers right about professional programming being a different experience than hobbyist programming. It's a bit like turning any hobby into a business: it forces you to deal with the parts that aren't fun.

Every professional programmer has a story about this one time he thought really about a problem and figured out how to model it as finding Hamiltonian paths for each strongly connected component in a DAG where the vertices are symbols and the edges are actions.

He has ten times as many stories about spending literal months begging a vendor to tell him the meaning of some undocumented field in a bizarre homebrew protocol.

Eventually they schedule him for a conference call with three sales reps, an account manager, a QA lead, and one of their programmers. He asks his question again, the familiar words slipping off his tongue with the ease of much practice.

The vendor's programmer says, "Oh, that field? It's been deprecated longer than I've been here. Whatever you're seeing in there is just uninitialized memory. It might look meaningful because we happened to re-use some buffer..."
posted by meaty shoe puppet at 10:17 PM on September 16, 2019 [3 favorites]

First you need to pick a daily-driver interpreted scriptable glue type language. This would probably be Python (or my favorite Perl heh). That coding itch is Laziness, Impatience, and Hubris. R and SQL just aren't general purpose enough to cover a wide range of tasks.

I'd recommend taking a look at say: Statistics/Basic - Rosetta Code and Explore the Tasks and Languages. The goal here is to pick some Tasks that you think you know about and to see just how various languages tackle that task. And gain the understanding that all of the answers are doing about the same thing.

Another good place for this tour-of-languages is: /r/dailyprogrammer - For learning, refreshing, or just for fun!. About once a week there's an Easy, Medium, and Hard problem and you can scope out how different languages and programmers tackle the same problem.

I sorta agree that the easiest path is along the lines of automating yourself out of a job by automating it away. Or job security because you're the one that can make those problems go away with a bit of code.

Pick a simple daily-driver glue language. Play your puzzle seeking learning just enough of many languages to keep yourself amused. Try out some of the "Learn you an X" type tutorials, or "Learn X the hard way". There's always the not knowing every function in the standard library, or not being the greatest at that language, but at least trying many, many languages for fun eventually makes you better at the one you chose to be your daily-driver.

Some of the more esoteric or special purpose or "just not extremely widely used" languages have neat things. Assembly for knowing the machine. FORTH for stack based RPN. Prolog for declarative programming. LISP/Scheme for the "code is data". Haskell for the functional. Erlang for the distributed fault tolerance. APL for the notational brevity. Javascript for the prototype. Smalltalk for the OO. Knowing just enough about different languages and applying that knowledge to your daily-driver will cut that 10 years down a good bit.

Whether you want to be a professional programmer on large projects with teams and meetings and assignments and deadlines... Or you just want to program for the fun and because you're Lazy, Impatient, and full of Hubris... is just something you'll have to figure out yourself.
posted by zengargoyle at 2:24 AM on September 17, 2019 [2 favorites]

It might be helpful to think more about what your problems are with your current job. Are the anxieties garden-variety imposter syndrome (I'm the lead developer on a team of 8, been in the industry for 15 years, and I still get it sometimes), or is it something specific to the job (e.g. there's a lot of public speaking and you have debilitating stage fright). The former's not going to go away regardless of what you do for a living.

Almost any software development job is going to mean working with other people, and with other people's code. That's a whole different beast than developing on your own. I'd find an open source project you're interested in and start trying to contribute. Maybe start with fixing a bug in the existing code base so you know what it feels like to read someone else's code.

As others have said, a software engineering career is all the fun parts but also the crappy parts. If you're 80% happy where you are, I'm not sure a career change would get you to 90 or 100%. There may be parts that make you happy that you don't get now, but there will also be parts that make you unhappy that you don't have to deal with where you are. And, honestly, the majority of happy and unhappy things probably overlap anyway. However, taking it on as a hobby may give you that extra 10% boost, because you can commit at the level you want to. That being said, you absolutely CAN do it if you want to -- despite what some people say, software development isn't magic or art, it's a skill that can be learned just like anything else.
posted by natabat at 12:48 PM on September 17, 2019 [1 favorite]

« Older How to transport a steak dinner?   |   YANMD: Cold sore, zit, canker sore, angular... Newer »
This thread is closed to new comments.