Ask HN: Starting a career as a programmer in my mid-40s

186 points by 5F7bGnd6fWJ66xN ↗ HN
I'm fascinated by what I read in HN everyday. I want to start my career in IT. I'm now 44 though, and trained as a mechanical engineer in my career and spent the last 20 years in business (finance, strategy and operations).

I'm looking for wisdom and pointers from the community here.

How can I go about it? I have access to Coursera/EdX and around 1.5 years to focus full-time on retraining. Any advice would be appreciated.

152 comments

[ 5.0 ms ] story [ 316 ms ] thread
You might find building a 3d printer or CNC system a natural route into software; tweak the firmware on the open options for those.

If you want to get to throwing fun things around as fast as possible look at game modding or creating your own games with some of the scriptable game engines. gentler intdroduction with quicker rewards.

Just a couple ideas that popped up first. What kind of programming are you looking to do? do you get excited by the possibility of squeezing a few more bits out of noise than current data compression algorithms can? Or do you want to make the perfect digital emulation of a furry dolphin avatar? There's shared knowledge there but further indication of your interests can help.

String manipulation is the gateway drug to programming, as it requires no dependencies and the sky is the limit for arbitrary logical games.

Biggest challenge will be choosing a language and executing the program!

You want to start a career in IT or in software development? Those are two very different tracks (and I can only give you advice on the latter).
Seems going into IT may be more financially rewarding for someone later in career. OP could probably more easily pivot to being an application SME for something fintech or maybe mech-E related than a SWE.

But I am curious myself too. I’m hitting 40 in a few years and will have 10 solid years of IT at that point. Programmings always been something I’ve dabbled in on the side. But I know that market has ageism probably stronger than in IT.

doesn't IT include SWE? like IT is everything tech related?
Not in common usage within the US tech industry (by this I mean technology-first companies, not just companies who happen to have some developers). In those companies at least, if you say you want to get into "IT" people are going to think you mean tech support, system administration (generally for internal systems), etc. I don't know any professional software developer in one of these companies who would say they are "in IT." (Yes, it's a huge industry and I'm sure you can point out exceptions.)
IT doesn't have as much dev as it used to - the amount of business functions that can be handled with affordable SaaS products takes care of a ton of software needs for many businesses. There certainly still are developers in larger IT shops, but anymore you get more "Business Analysts", who configure and maintain SaaS platforms, maybe with some light scripting and coding, instead of a team of devs writing code from scratch.
'Functional Analyst' is the usual term if you're looking for jobs in this space - heaps of jobs in Salesforce/Dynamics/SAP/etc - surprisingly good pay in this area, but not really the start-up life.
In a software is eating everything world, I want to retrain to learn all skills needed in IT/Programming to remain relevant.
My spouse is doing a CS Master's degree from a UK redbrick. Full time it would take a year, and you can do it remote thanks to the virus.

If you're already an engineer you'll probably be able to do it somewhat easily.

As for getting a job, the market is hot right now, we'll see if it still is in a year's time.

(comment deleted)
I'd consider a coding bootcamp, the good ones give you a very minimal brand, but given your business and engineering experience my guess is that it's all you'd need to make the switch fairly seamlessly. You may take a compensation hit.

There are an enormous number of opportunities for software engineers right now, the market is hotter than I've ever seen it. We desperately need people to be retrained, cross-trained, any version of trained.

Which verticals are not saturated yet? Web dev is almost impossible to get in.
Data engineering is full of opportunities.
I think all verticals are really hard for juniors; it's not like everyone is looking for junior C devs...
> You may take a compensation hit.

Does not align with...

> the market is hotter than I've ever seen it. We desperately need people

Pick one.

If the software / web businesses aren't going to compete with other engineering businesses, they're not going to compete. At the end of the day it's pulling recent grads from the same pools (math/eng).

Mid 40s Mech E switching to entry-level SWE may very take a comp hit, even if the SWE field is indeed the hottest I’ve ever seen it (including 1999).
Build a tool that you want to use. Could be a TODO or note taking app, alarm clock, a tool that scrapes your favorite site, anything. But find something that you are going to enjoy building and using.

Then understand the technology stack you will need to build it. Then learn about that stack from Coursera/EdX. Finally build that tool and reap your fruits. :)

But what about marketing? It’s ok to build a product but if you want money you’ve got to sell.
The way I understood it, OP just wants to learn programming. I was suggesting "build an app you want" as means to an end.
Given your business background, maybe look at getting into analytics and reporting. Usually these areas have some low code options where you can do a lot with just some SQL knowledge. Knowledge of the business can be helpful here.
Make friends in the industry or working at companies in roles that you want to join. You will have to tap these connections to get interviews and consideration for jobs, once you have some education to put on your resume. The industry is not easy to jump into completely cold unless you are a 20 something coming out of college with a bachelors in CS or similar. It's not impossible to get a job, but it's much more difficult to get that initial foot in the door and past the huge machinery of HR resume keyword and experience scanning.
This is what I am currently experiencing as a non-minority non-white candidate.
>Make friends in the industry or working at companies in roles that you want to join.

Difficult to do when people feel attacked when you MIGHT have more knowledge than these people. I'd say might, because it happened before.

You might consider taking a familiar spreadsheet and converting it into a program in a language like Go. Use the free Essential Go ebook as a guide to how to write the code, and your spreadsheet as motivational context.
Before the how, can you give us some thoughts on the Why ? Why are you interested in doing this at age of 44 ? Money is probably a factor but I am curious. You can of course do anything at any age and 44 is really not that old to start a new career. But the why is critical because you have spent all these years in a trade and now willing to reboot so you have to be willing to give up a lot and start from the bottom which may still be better than where you are currently but we don't know.
Very worried about staying professionally relevant for the next 20 years and earning money to support my family. All along my career so far, I've played it safe to choose paths that I deemed were conventional. Looking back, it feels I didn't choose IT/software even though I was interested in it. In the everything is moving to a software world, I want to retrain asap.
The field is huge, and if you take a wrong turn, you could waste months.

What is your goal? Earn more? If so, then look for jobs in your area and see what is “hot”. The role you call “programmer” is nowadays called “software engineer”. Do a search for that, make a note of requirements from every job you can find (top 50 jobs). Google every common keyword and see if you can figure out which programming language is “hot”. You will also need to decide what you want to do with that language: desktop, web (backend) or web frontend (I’d recommend to stay clear from fullstack and low level).

The road ahead is rough, but I’m sure you can achieve what you want, if you ask the right questions before mindlessly diving in.

>I’d recommend to stay clear from fullstack and low level).

How can steer away from fullstack when you kinda need it? Or maybe I'm to excited to jump on it.

They're referring to full stack as a single developer. As a team, you can each focus on your respective parts of an application. There are benefits to being a "full-stack" developer for smaller projects, such as understanding all the working bits without needing to communicate with others, but full-stack jobs don't seem to pay as well as a job within a specific scope like backend.
Look into web3/blockchain/NFT technology, most of it has been around less than 2 years so experience is less of a hard requirement than in other fields of software engineering.
Could I get more clues? How might someoone hire a 40 year old for NFT/blockchain?
Solidity (language for Ethereum Smart Contracts) is relatively easy to learn. There's also tons of free resources in learning them (https://cryptozombies.io/). I would say this would be one of the hottest languages of 2022.
Yes. This feels like 2007-level of hotness. Thank you.
Yeah Solidity has many resources and is worth learning. Solana is another smart contract platform which uses Rust, and Rust is a fantastic language, though it is tough.

Both ecosystems use Node.js for scripting/tests/frontend so that is going to be advantage to learn.

A good progression might be:

  - Modern JS / Node.js
  - Solidity / Ethers (https://docs.ethers.io/)
  - Rust
  - Solana / Anchor (https://project-serum.github.io/anchor/getting-started/introduction.html)
Gonna hard disagree on this one. Blockchain is a flash in the pan niche tool. There are some legitimate uses for it, but most of it is all style and no substance. It's way too narrow a focus, with far more people playing around than there are jobs. You'd pick up general software skills along the way, but there are better ways to do that with a focus on more useful and practical technologies.
Sure but who would hire a non-minority non-woman 40 year old with no previous experience in the field?
Web3 is like knowing HTML in 1995. Act accordingly.
I don’t see how is that a valid analogy. Html was useful in itself, all this new crypto stuff just convolutes existing solutions.
There were plenty of people in 1995 who did not understand the utility of HTML. That is the nature of revolutionary technology.
You mean some people understood html to be revolutionary even back then.

If you are someone who knows crypto to be revolutionary, would you be able to help me understand why is it so?

I like this perspective: https://twitter.com/cdixon/status/1440026949838069763

For example, predicting Airbnb or Patreon in the early days of HTML/CSS/JS would have taken a lot of foresight and vision.

We also had uncountable useless products made from html/js.

Also the mentioned services make sense. You rent your unused flat to someone, or you ask for money for creating something regularly.

I really tried “getting” the web3 benefits, but all I see is mumbo jumbo / dotcom crash type hype.

(comment deleted)
I did this early 40's

Don't focus to much on certifications or qualifications. Do focus on a portfolio. Find things that scratch your own itch to work on and learn

Can you say a bit more about your experience? My profile has my email too if you prefer non-public communication. Genuinely interested in your journey.
A little but I wouldn't want to dox myself. Essentially I'd been doing some related stuff as a byline in my previous career as well as some enthusiast stuff and private freelancing. I cashed out and did some dedicated study to fill in some gaps and then started jobhunting. Overall transition took 1 1/2 years, plus a further 8 to get into my current specialty and pass income parity with previous career
What do you do when you don't have that itch?
You probably won't be successful. As the landscape currently is, and has been for quite a while, you have to really enjoy doing it to the point where you self educate quite a bit. If you aren't willing to do that you will fall behind your peers.

It's similar to playing the guitar. The people who are good at it don't just take a guitar class and call it a day, they spend hours working to improve their playing, learn a bunch of songs, learn to play them perfectly from beginning to end, and learn to write their own songs. That's what it takes to be a successful guitar player. Coding is similar.

To be honest, if you don't have some external driver meaningful to you then it can be pretty hard to absorb the knowledge
Consider iOS development, if for no other reason than the amazing and freely available CS193p from Stanford. I took that route from 0 to FAANG in my 30s.

As others have said, focus on a portfolio. Start with a course like C193p and then build a few good quality products.

Short path:

- "Learn Python the Hard Way" by Zed Shaw. 52 exercises to teach you just enough Python to be able to continue.

- Next, an excellent course by Reddit's co-founder, Steve Huffman, CS253. It was discontinued from Udacity, but is available on YouTube: https://www.youtube.com/playlist?list=PLAwxTw4SYaPlLXUhUNt1w...

It will take you through the basics of the internet, HTTP, browsers, requests, cookies, databases, caching, hasing, passwords, by having you build a web application. Granted, it's on Google App Engine, but still, most of the router syntax out there is similar (webapp2 from web.py, similar to Flask, Tornado, and others).

You will learn a lot, and you'll see the result right in your browser by having a live web application. You can then take that knowledge and develop tools for yourself and others and put them online for all to access and use.

If you want to do it better and "leap-frog", read Brett Slatkin's "Effective Python: 90 Specific Ways to Write Better Python". This book will make you write code as if you had been coding for years... But, that's only doing it "right", you need something to do right in the first place: you've been in business, strategy, and operations, and you've been trained in mechanical engineering: I think you are in no shortage of ideas and things to code, so have a it.

You're in an excellent position of having been at the intersection of a bunch of cross pollinated fields, and you'll have a new skill to bring them together and do wonders. All the best!

Good advice, but anyone doing this now should be using: "Learn Python 3 the Hard Way." For whatever reason he renamed the book.

edit: The Steve Huffman course is also how I learned. It's absolutely fantastic.

Yes. I was going to correct it, but I wanted to avoid the conversation or the thread going into that direction.
That Steve Huffman course looks very nice for beginners to web development. Also looks like a nice pairing with my blog post, "Build a web app fast: Python, HTML & JavaScript resources".

https://amontalenti.com/2012/06/14/web-app

This is still my #1 blog post by readership, even years later. (200,000+ readers.) It was originally published in 2012, but I did several updates over the years, including a 2018 update for Python 3 and "Modern" JavaScript (SPAs).

I wrote a pretty similar blog post in 2013, based on my experiences learning to code in 2012. It's shocking how little has changed since then. Like probably there isn't a lot of reason to learn Jinja2 at this point, but even jQuery and Bootstrap are just as relevant as ever.

And Angular is actually good again, so my recommendations for 2022 would likely be closer to my recommendations for 2012 than to my recommendations for 2017.

I would like to plug my free interactive courses [1] on fundamentals of computing and Python. It is designed for beginners.

You can check them out without signing up and they are also available as free online books. [2]

[1]:https://app.primerlabs.io

[2]: https://primerlabs.io/books

But why Python? There are many more jobs for JS
Python teaches you how to code. Modern JS teaches you how to "npm install"

But really though Python syntax is simple and readable and I find people that learn it first adapt to other languages very easily.

Python is typically taught in 101 classes because it enforces some good practices, is fairly quick to pick up, and if you have a math/finance background, can more easily lead to some quick and fun projects that can be bootstrapped in a simple GUI in a couple days.

Disclaimer: I prefer Ruby and JS over Python, but the amount of projects and roles I’ve seen lately that recommend or require Python experience seems to be growing. Not sure if that’s just related to the field I’ve pivoted into which has a stronger focus on data analysis/algorithms

JavaScript more or less limits you to front-end web programming (I know there are exceptions but realistically this is what most JS positions are after). Not great if this person’s internet is eg embedded, machine learning or, in keeping with their experience, large enterprise systems.
That’s not true at all. Plenty of jobs for Node dev at any scale.
Citation needed. Python is the language of AI and ML. Those fields are popping off right now.
Granted I'm no JS expert, but I believe that Python would be a better fit for OP due to the larger number of scientific computing libraries and OP's background as a mechanical engineer in addition to what you just mentioned. Someone else advised that OP leverage their ME background to help them learn programming, which IMO Python is very well suited for
I personally found "Python Crash Course" by Eric Matthes to be a much better and effective book.
I heard about udacity on the radio and by chance picked Intro to python and then CS253. I still have a little Twitter app running on GEE. Mind was blown. Great courses, shame CS253 has not been kept and updated.

I particularly remember the story in the course of him having a list of all his users usernames and passwords unhased on his laptop and it was stolen. He said he was embarrassed and emailed them all to let them know. Lesson was to hash passwords. Cant remember if that was for reddit all some other project he did.

I endorse every single word of this. As an EE pivoting to SWEng I completely endorse Zed Shaws book LPTHW and LMPTHW which teaches you to think about composing larger programs. You get a lot of practice on creating common Unix utilities. And once you have some Python under the belt migrate to Effective Python by Brett slatkin. Most importantly you should have an end goal, my initial goal back on 2006 was to get an entry level EE job that payed me a salary to support me and my wife and sponsored H1B. Fast forward to 2021 I am looking to get to work on Web3.0(solidity smart contracts and Decentralized oracles). So I am planning to learn Solodity using Brownie, React for Front end to crate Dapps and Algo/DS to pass the coding interview circus.
These are good suggestions, though I would argue that Magnus Hetland's books are even better for the same type of thing!
> You're in an excellent position of having been at the intersection of a bunch of cross pollinated fields, and you'll have a new skill to bring them together and do wonders. All the best!

That’s it, really, even without the gloss: OP’s background should stay firmly relevant to make him stand out. The new tool he adds to his resume is vertical (aka applied to his own domain expertise) and widens his professional reach… in this perspective, learning Python to perform industrial analytics, predictive maintenance, data-informed financial analyses, etc. seems a smart, openly justifiable move.

If I were you I'd try to combine programming with what you're already doing (finance/business). Like learn Python and how to extract data or something, thats easily added to your current knowledge. Then later you can learn some basic web development and build nice dashboards. There are some jobs out there for finance people who can program - That's what I'd go for if I were you. It's a shame to let all your experience go to waste by learning something like systems programming or android development, don't do that I think. The "How" is really easy, simply google/udemy/coursera/etc etc. But spend some time on figuring out What first.
+1.

Your experience is synergic with programming. Use it to your advantage. Learn a bit of python and begin solving little problems for you. Do it for a while and you will know how to program.

Indeed. I started as a mechanical engineer, writing scripts to solve recurring mechanical stress and thermal calculations. Then i moved on to robotics, then autonomous driving, now I'm making video games. Linear algebra, calculus and code is a nice combo.
Based on personal experience, I can't recommend this enough. My original background is in civil and environmental engineering; I discovered my love of programming after I'd been working as a civil engineer for a little while, automating GIS tasks. After that I fell deep down the rabbit hole and found a job as a full-time software developer at age 30. Now I'm back in the civil / environmental industry, but with several years of real world software engineering experience. It's paying off in a big way. I'm not the best programmer, and I'm not the best civil engineer, but I have more experience in both of those things than anyone else I know. Gives me a big leg up in a pretty niche area.
Sound advice, but where do you find these hybrid jobs? Especially when it comes to programming, companies seem to evaluate you in one specific language/skill, and seem to have zero interest in the rest of your background and experience.
That's not always true. In a job board try playing with keyword combinations like Python + Financial Analyst/investment/trader etc etc. You'll see them. I was once thinking of doing the transition the other way around (from software development to market/financial analysis) so I know the jobs are there. Also - use your network and talk to your colleagues - someone must know someone who works in finance but does some/a lot of programming.

Here are some examples from a quick glance: https://www.linkedin.com/jobs/view/2762895590/?alternateChan...

https://www.linkedin.com/jobs/view/2786689624/?eBP=JOB_SEARC...

Agreed. I found my job by just searching for 'python' on a board for my sector.

The only reason I've been able to move into a coding job is because I have very deep domain knowledge in a pretty niche area and a bunch of other 'added value' that makes up for my relative lack of experience with any particular stack.

One shock of programming at job vs class-based learning is the art of working in an existing codebase with many other coders and stakeholders. You might like programming for fun, but might not find it as fun to do it as a job.

This means things like

- reading and understanding an existing, complex codebase

- solving your problem in a way that doesn’t harm existing functionality

- refactoring old code to solve new problems or to be more reliable

- common workflows using version control

- writing testable code that can evolve over the years

- negotiating technical scope with stakeholders

- navigating technical risk and technical debt

I think this stuff is teachable, but it’s hard to give someone a project where the existing code base must keep working (or else the company goes under) but also here’s 4 features to implement in a given aggressive timeframe. Much of having a job coding is about these kinds of decisions.

I say all this so you can decide whether this is what you want or if you just like coding as a hobby.

For what it's worth, I love coding as a hobby, and I hate all those aspects of coding as a job that you specified. However I still love coding as a job because it lets me do all the fun parts as well. Even if 75% of the time you are fighting with an unstable test suite or trying to budget for time on a dozen competing priorities that still leaves 25% of the time where you are solving interesting problems and doing something actually creative.

Don't let all these scary sounding challenges put you off. If you are smart enough to learn how to code then you are smart enough to learn how to do all the other boring things. And a job where 25% of the time (hopefully it's more than that for most programmers) you are being paid to do something you love is a great job.

Nowadays the IT world is so huge you have to narrow it down a bit. People working in FANG in the Bay Area do very different things to the helpdesk of your local school district. You should narrow down what exactly you mean. Things like the former will be very difficult to achieve, things like the latter should be easy.
Do you have a training/learning curriculum ready?

You'll need to study the following.

* Computer science basics. The fundamental building blocks for computation. The bread and butter of algorithms and data structures. There's no way around this.

* You'll need to learn at least one or two programming languages in order to create actual computer programs and their related tooling.

* You'll need to learn at least one computational platform and its APIs and tools and generally how to build software for it. For example one of Windows, Linux, Android, Mac or web. Choose one.

* You'll need learn how to apply software to solving problems in any particular domain.

* You'll need to learn a ton a about the tools and practices of the trade. Distributed computing, databases, embedded, debugging, tools chains, design patterns, frameworks, APIs, libraries etc. Not all are applicable. What you should focus on depends on what what you want to work with and in which domain.

Preferably instead of MOOCs you’d take a course at a bootcamp that places you at an internship or gives you a real world coding project. In the best case you’re going to be judged against new grads who’ve already had 6-9 months of cumulative internship experiences doing real world coding. In the worst case you’re being judged against other coders with 20 years experience.
I would start with data jobs. Your existing skill set is already extremely valuable and a quick dip into Python and SQL is sufficient to qualify you for analytics engineering jobs. Once you are in, it won't be hard to migrate into data engineering jobs.
In my humble opinion, and also having helped lots of friends both in and out of tech, one of the best ways to learn is to find a couple of really good books on programming and read them cover to cover (got this idea myself from an article on learning programming). One thing is you need to find books that are tutorials and not references (as a mechanical engineer, you probably have seen the difference yourself). A good place to start is Python, and then possibly C programming - the reason is for C requires you to learn a lot of the internals of a computer - Hmm, you probably had to take a programming course back in college (Fortran?) so you maybe able to pick up Python quickly. Although, some people don't like to just book learn and need a course to keep them on track.

... if you want guided instruction (besides just online courses), to do things on the cheap, you can also audit classes at your local college - just find some key courses in Computer Science and ask the professor if its okay to sit in. I did this for two years for a second interest of mine, music-theory.

If someone asked you the best way to become a good mechanical engineer, I bet you’d tell them to start building something.

If they asked you what to build, you’d tell them to build something that’s useful. Better yet, build something you would use.

If they asked what resources to use and learn from, you’d tell them whatever resources necessary for the task at hand. To focus on the practical more than the theoretical, while filling in gaps of time learning theory.

If they asked you what to do when something fails, you’d tell them to build it again until they build it right.

And when they ask you what to do when they’re done, you’d say: “now go and build something else”

> If someone asked you the best way to become a good mechanical engineer, I bet you’d tell them to start building something.

Actually, I would ask them to be more specific.

And the more specific they can describe the goal the more likely they are to achieve it. The field of mechanical engineering is huge and this is the same for programming.

Is the op looking to make web pages, do FEM simulation (since they're an ME), embedded programming for robotics, etc. etc.

Each one of those is going to have a different path.

I started programming at the age of 8, I am now 50.

The first thing to ask yourself is weather you can sit down and consternate for 10-12 hours without talking to anyone.

Second you should practice (not unlike practicing for a marathon) . Start easy and go up.

Third, try to become apprentice to some professional programmer, and learn from him (even for free), try to help him with some tasks.

Programming for 40 years, professionally for more than half that. I don't, as a rule, "concentrate for 10-12 hours without talking to anyone." Nor do I see the best coding from people who do that.

Most programming as I have experienced it is a mix of solitary and social skills, and there is room in the profession for a fairly wide range of weightings of the two of those.

The apprentice idea is interesting. I don't know anyone who has done that formally with just a single teaching individual, but the companies I've worked at definitely value senior developers who can mentor and teach, so maybe the apprenticeship model is actually there already, hiding in plain sight.