Help me transition into a career in Programing!
July 1, 2015 4:12 PM   Subscribe

So I'm 25, and I have a wonderful, stable job in a wonderful, stable industry as a mechanical engineer, and I'm slowly realizing that my actual calling is in computer science. Shit. I'm not in desperate circumstances, so help me to plan my career move! I need specific help on: 1) Learning to Code. 2) Preparing for the transition while still working at my current job. 3) Moving from my current job into actually working as a programmer. Any advice from experienced people would be great. Thanks!

So basically, I became a mechanical engineer because I was good at math and science, and I was good at my engineering courses, and it seemed like a stable industry where I could make good money right out of college with a bachelor's. Writing this now, all of those things are true. But it's not my passion.

I took a couple of programming classes in high school, and loved them, did great in them! I took matlab and C++ classes in college for my degree, and loved them, did great in them! In my current job, I occasionally have the opportunity to write Matlab codes to automate my data processing, and it’s by far my favorite part of my job, to the point where I’ve been reprimanded for spending way too much time adding features to my scripts to the point where I neglect my other assignments. These really should have been clues…

So now I’m here, a moderately young adult in a field I’m competent in but honestly feel kind of meh about, personally. Programming seems fun to me not only because I’d have more fun doing the job, but also because it would have more flexibility than my current career. I could live in different cities, there’s the possibility of remote work, and all sorts of other freedoms that engineering at a large firm has locked down pretty solidly for me.

I want to go back to programming and actually make it my career, but I’m a bit stuck, for several reasons, all of which I could use help on. Let’s tackle them individually:
-I’m not that concerned with learning to code. There’s a million free resources, I just need to take advantage of them. That said, if anyone has any specific recommendations, I’m all ears.
-I don’t really know what it’s like to code as a career. Will I be miserable? I know we’re not all going to be working for The Next Facebook, but am I staring down the face of a cubicle farm for the rest of my life?
-I really have no model for how to get a job other than college>career fair>interview>large corporate behemoth. How am I supposed to go about this?
-I’m not horribly miserable at my current job, and I do make decent money, so I’m ok with ideas and suggestions that involve long -term planning while I’m still here.
-I know that no matter how carefully I plan, I’m going to take a pay cut with my career change. If I really decide to do this, I’ll start serious savings now. How else can/should I start preparing?

How should I do this? Have you guys ever made similar shifts in your life? If I’m going to do this, I’d like to do it now, while I’m still in my 20s.
posted by nickhb to Work & Money (14 answers total) 12 users marked this as a favorite
Best answer: "I’m not that concerned with learning to code. There’s a million free resources, I just need to take advantage of them."

Start by doing this. Think up a project you're interested in and build it. Then build another more complicated one. Keep doing this and contribute to an interesting open source project.

At some point, look for a ME position where you'll be able to put those programming skills to use at least part of the time. This'll probably happen at a smaller company/start up where everyone is just expected to contribute. You'll continue to improve your skills and find out if you want to code as a career.

From there, upgrade to a better coding position, or get back into ME if you decide programming isn't for you.
posted by paulcole at 4:40 PM on July 1, 2015

Best answer: I agree with the posters above.

Perhaps you've got aptitude in programming. Great! But you've got specific education and training in ME, and I guarantee that you'd start programming at a lower (seniority) level than you are currently doing engineering. That's not just a pay cut, it's a pay cut for the next n years while you work to raise your new pay level up to the old pay level... plus raises (the phrase is "opportunity cost"). No kidding: you may never actually break even.

Being a programmer is... well, it depends. It's about as varied as being an ME. In bad shops you turn specs into code with little creativity. In good shops you solve interesting problems in novel ways. Basically, it's a crapshoot.

Maintaining a large codebase is its own unique skillset. Architecting is even harder. So, frankly, even if you do avail yourself of all the programming instruction out there, it's hard to tell whether you've got aptitude beyond small one-off projects. I mean, that's not unique to you, for sure. But it's a thing to keep in mind. It's one of the reasons contribution to open-source projects is viewed so incredibly positively by prospective employers: they get to assess your skill on someone else's dime and may get to avoid training you.

Here's what I recommend: get involved in a hobby project that allows you to bring your ME skills to bear. Robotics is the obvious choice, but any kind of project in that vein will help you teach people who don't even know what Young's modulus is how to think about their objectives in a rigorous way. You don't say what your speciality is, but I guarantee there's someone joining it with software. Controls? Automotive tech and robotics. Materials science? 3D printing. Structural dynamics? All of the prior.

At worst, you have a rewarding hobby and a solid job. At best, you prove your aptitude and can make the leap with little opportunity cost. In either case, right now: get your hands dirty!
posted by TheNewWazoo at 5:16 PM on July 1, 2015 [2 favorites]

In regard to cubicle farms, I don't think that's necessarily the fate of all programmers.

So far in my career, I've worked mostly at small businesses, which has had the nice benefit that I'm not jammed in with dozens of other people as a faceless cog in a machine. (It can have the downside of leaving you with too much responsibility, though.) A lot of the places I've interviewed at have been pretty small as well.

I've gotten my jobs mostly by sending out applications to job ads I see online. There are certainly other ways, but my experience has been that demand often outstrips supply, and not having a lot of networking connections hasn't stopped me from getting my last couple jobs. Knowing people is certainly useful, but I don't think it's essential.
posted by mister pointy at 6:25 PM on July 1, 2015

Best answer: I graduated with a Comp Sci degree in 1976, working as a programmer since 1975. When I started it was a bit more narrow: "big iron" mainframes made by IBM, no real PCs, no real Internet, a few main career paths (application programmer, systems programmer, management, auditing, etc.) These days being a programmer is like saying you work in transportation (or at least it seems that way).

I've spent almost all my career programming in COBOL (invented in 1959), though now the systems are "front-ended" by Java WebSphere applications and Web services.

But I can't predict where your IT career might take you. Keep in mind that the same feature of IT that lets some people work at home (though it's not as common as you may think) also makes competition for jobs international, and hurts job security. Hint: Google for "pink slips orlando".

Will you be coding for server based systems, doing Web design, administering relational databases, developing video games, writing Android or Mac apps, maintaining "legacy" systems (read "old" and sometimes poorly coded), doing data analytics, embedded systems, contract programming, Linux scripting or systems programming, Windows .Net development, etc.?

And you probably realize it is not possible to try and become a skilled professional in more than a couple of those. The term often used for learning IT is "taking a drink from the fire hose". As an experiment, just try to learn relational database (e.g., MySQL) design, access (SQL) and performance optimization. Or pick another field's fire hose.

I am not trying to discourage you. It's like when I try to decide which route I am taking to work each morning based on the traffic report. I can only take one route and by the time I know the reality I'm pretty much committed. But that's true of a lot of professions, I just want to make sure you know that IT has that in common with others.
posted by forthright at 7:02 PM on July 1, 2015 [2 favorites]

Best answer: Hi, I am also a mechanical engineer with an interest in programming. Here is what I did; I did a 1 years masters in computational fluid dynamics (CFD) and then a PhD but I would recommend just the masters and then work. If you want to go back for a PhD do it latter. Just doing "school" will give you a weird feeling of not progressing even though you are (at least that's what I feel). I think its the small paycheck, lack of time, stress, and seeing everybody else you know get industry experience.

If you decide to go to a masters program, I would recommend to get 2 letters from faculty that you worked for in your undergrad (or as a collaborator with your company, or on your spare time volunteer in a lab after work ), and 1 from industry (but of cores the better recommendation always wins over the faculty/position name so make sure to ask explicitly if they could write you a "strong" letter of recommendation). You should also look up fellowships that would support your masters. I know the NSF funds a small amount of masters students.

You could also do finite element FE type of research in materials or structures. I am sure there are combustion, thermal, turbulence and of cores controls research that require numerical methods and computational modeling.Just look into it. There are a ton of research things that will allow you to combine your mechanical engineering degree with programming so that you don't just start over but build skills in a discipline.

P.S. sorry for all the random sentence structures. Writing in a rush. No time to reread. I actually just created an account to answer your question and in a week ask my own but you definitely helped me make that decision.

Best of luck !!!!!
posted by human_readable at 8:24 PM on July 1, 2015

It is very likely that there are niches for MEs who mostly want to write code. I'd also guess some of them are quite lucrative. Generally speaking, already-valuable-skill + writing code is a nice place to be.

You should look into this angle further. One obvious place is companies writing software used by mechanical engineers. You probably don't have to get that specialized though. Try reaching out to other people in your industry and talk to them about when they need coders. (Part of your question is how to do this, and I'm not much help there, but Linkedin is one place to start.)

Is there any wise old head you could talk to in your own company about this?

There are pharmacists who make a living writing code. I am sure there are MEs that do it too. Don't hurry to turn your back on territory where you already have an edge.

(Oh, and hardly anybody gets to just write code. No matter where you end up, there will be meetings, writing documentation, operations type stuff, etc. Be prepared for that.)
posted by mattu at 9:31 PM on July 1, 2015 [1 favorite]

Tons of free programming classes you can take from MOOCs
posted by kschang at 9:32 PM on July 1, 2015

I don’t really know what it’s like to code as a career. Will I be miserable?

Possibly. It's not like getting to dream up features and build out your own scripts for projects at your current gig over which you have at least some degree of autonomy. You can end up spending huge chunks of your professional life building toiletware -- awful, bloaty, useless features for truly fucking stupid products. You can also end up in jobs where you have to work with existing horrible code from other people.

I don't the aspects of your current job that you love dictate that you should career-switch and be a software engineer. I think you should build the coding skills most relevant to mechanical engineering and make a lateral move to an organisation where that is much more of the job than your current role.
posted by DarlingBri at 11:58 PM on July 1, 2015

Best answer: There are two disciplines relevant to doing what you're describing: computer science and software engineering. (You can moan about whether or not SEs are "real" engineers, but it doesn't matter for this discussion.)

Computer science is really a subset of discrete mathematics concepts with special terminology. These are the theoretical underpinnings. This is the stuff you learn in a CS program, on top of whatever math you would also be taking – numerical analysis, etc. You probably have some good foundations to start learning CS fundamentals now, so go do that.

Then there is software engineering. Most CS programs somewhat ignore this because it isn't really CS so much as it is the sum of practices that the software industry has developed over the past few decades to build software in a sane, testable, measurable way that avoids big problems down the road. Since most CS professors have been in academia for the last few decades, well, it isn't usually a priority. (Nor should it be, IMO. Software engineering skills take lots of practical experience to understand and apply and nobody in their undergrad has the context for this stuff.)

Real-life programming is a combination of these two disciplines. It isn't quite as idyllic as your childhood memories. In real life, software involves a lot of sitting and staring at code that someone else wrote and thinking "WHY DOES THIS EVEN RUN AT ALL?" That and arguing about what to name a class and hunting down obscure bugs. You don't often get to code whatever you want or work on your own pet projects. We have deadlines. We have bosses. It's not all fun and games, though it can be a lot of fun if you find the right company.

To get started, I would recommend you get some experience with a general-purpose programming language. Matlab is fine but it has no purpose outside scientific computing, and if you list it prominently on a resume, it will seem like you have no experience. Learn Python or Java or C++. Build something non-trivial in one of those languages and put it out into the world. Doing something like that says way more about your ability and interests than a CS undergrad.
posted by deathpanels at 5:54 AM on July 2, 2015

Learn Python or Java or C++.

Or buy yourself a BeagleBone Black and learn Javascript, node.js, Linux and ARM assembly language. Get yourself to the point of being comfortable working with smallish embedded computers, then job-hop sideways from mech eng to embedded systems programming via robotics.

As for finding jobs: who you know is always going to be at least as important as what you know, especially if you know people who know what you know. So working on hobby projects with other people is a good career move.
posted by flabdablet at 6:23 AM on July 2, 2015

I changed careers to be a software developer, and I like it a lot, but I agree with the people who say you ought to look for ME jobs that require more coding. I'm sure there are plenty of mechanical engineers that write more code than some software developers.

I don't think you need much more *training*, I think you just need to get out there and see if you can find some jobs you would like.
posted by mskyle at 6:50 AM on July 2, 2015

Learning what not to do is at least as valuable as learning what to.
posted by flabdablet at 7:22 AM on July 2, 2015

nthing that being an ME is a competitive advantage that you don't want to squander.

I'd wander over to your nearest university with a decent Computer Science or Artificial Intelligence department (or similar) and speak to members of the faculty.
posted by SemiSalt at 5:27 PM on July 2, 2015

Hopping in late here to add that with your math background you might be an ideal candidate for the emerging, vaguely defined field of "data science" which a lot of companies are looking to hire people for. It tends to be more based on statistical analysis using things like python-notebook and less based on classical software engineering where you're ultimately building a product of some kind (be it an app, a web site, or custom device drivers), so in that sense not having tons of experience as a programmer might not be as much of a hindrance as it would be if you were looking to join the Microsoft Word team or whatnot.

I definitely agree with the advice not to ditch your ME degree, but rather to use it to find a niche where you can do more fun and interesting programming. Also the advice to think up a project and build it, or help someone else with their project. There are a lot of different types of careers in software development and a lot of different work environments, but having written code that you can talk about during a job interview will give you a huge leg up at any of them, especially if it's something you're enthusiastic about.
posted by whir at 10:34 PM on August 15, 2015

« Older How do I subtly let people looking at my apartment...   |   Text to speech software -- what do you recommend? Newer »
This thread is closed to new comments.