100 days from noob to hired: my mid-career pivot into coding

2 days ago 2

29 May, 2025

The best time to plant a tree was 20 years ago. The second best time is now.
-Ancient Chinese proverb

In the beginner’s mind there are many possibilities, but in the expert’s there are few.
-Shunryu Suzuki, author of Zen Mind, Beginner's Mind

Everybody is now a programmer!
-Jensen Huang, CEO of NVIDIA


The day my ankle gave out during a trail run six months ago turned out to be surprisingly fortuitous. Sidelined from training, and facing a dry patch between consulting projects, I found myself with a rare commodity: a weeks-long stretch of unstructured time. My foot elevated and iced, I spent the first few days sulking on the couch, doom scrolling social media. But self-pity soon gave way to impatience, as everywhere I looked, people were sharing stories about the magic of AI and how they’d built a profitable micro-SaaS business over a weekend. Hyperbole or not, by the third day, FOMO had gotten so bad that I decided the time had finally come, at age 38, to tackle the challenge I'd been circling for over a decade: learning to code.

My first encounter with programming occurred long before AI was on everyone’s lips. I’d recently quit my job as a management consultant at a Big 4 firm to join a bootstrapped tech startup as a poorly paid business development manager. Eager for a crash course in entrepreneurship, I figured that giving my time to a startup would teach me more real world business skills than any MBA, at a fraction of the cost. My flatmate Dan was in a similar position, having grown bored of his PhD thesis and looking for a ticket out of academia. On a whim, we decided to join a hackathon. It seemed like a good way to meet other technology enthusiasts and learn more about Big Data, which everyone believed was the Next Big Thing (it was 2013).

Dan and I got placed into the same team, and after an initial period of enthusiastic brainstorming with other participants, we settled on a product idea that could realistically be built over a weekend. As Dan and the other programmers got busy coding, I was left with little to do but fetch coffee to keep them powering on into the night. Conscious of my limited contribution, I retreated to a corner and started working my way through a crash course on JavaScript. After two days of grinding, our bleary-eyed team eventually clinched first place, and I had learned how to build a web page with a button that changes colour when clicked.

That initial spark of motivation quickly faded, however. Aged 27, I believed it was too late for me to learn programming. The path to even mid-level skills seemed daunting: thousands of hours wrestling with documentation and hoping for someone to respond to my noob posts on Stack Overflow, all while trying to juggle a day job and personal commitments.

Instead, I pursued a career as a product manager, serving as a bridge between the engineers and everyone else. Over the years I learned to communicate effectively with both sides of the technical divide and occasionally tackled programming-adjacent problems, such as pushing data through Zapier flows, or peering under the hood of a Wordpress site to tinker with some functions. However, there was a hard ceiling to what I could accomplish on my own, and I remained dependent on engineers to create anything of substance.

A few years later, I made another attempt at learning to program when I briefly ventured into building an e-reader app. I hit a wall straight away, battling for days to set up my programming environment correctly so that I could start building the actual application. After weeks of painstaking progress, I relented and got a developer friend to knock up a workable version of the application. Yet again I’d been reminded of how steep the technical learning curve could be, and a few months later I abandoned the project entirely.

After multiple aborted attempts, what finally pushed me over the edge was seeing AI transform the very nature of software development. Coding was moving up the abstraction ladder, from brick laying to architecting. For an impatient soul like mine, this was exciting, as it would allow me to focus on big ideas rather than the nitty gritty of implementation. While it is broadly recognised that AI has enabled technical and non-technical people alike to get more done, a still under-appreciated fact is that becoming technical is now far more accessible for anyone so inclined. Something like 10% of a budding developer's time is spent planning and writing code. The other 90% is trying to figure out why the code isn't working. With much of that colossal friction virtually eradicated thanks to AI, the average cycle time to "build it → break it → troubleshoot it → fix it → learn it" has contracted dramatically.

Before embarking on my latest programming odyssey, I'd spent the better part of two years observing the opportunities and pitfalls of introducing AI into the learning process. In early 2023 I launched one of Africa's first LLM tutor chatbots on WhatsApp together with Herman, my buddy and creator of Bear Blog, which hosts the blog you're currently reading. As we launched our tutor bot, students from Sudan to South Africa began chatting away with it day and night. They enjoyed the convenience of friendly 1-on-1 support across a range of school subjects, and we were excited at the prospect of scalable tutoring transforming the future of education in Africa and beyond.

However, we gradually realised that most of our users saw the tutoring service as a way to delegate their homework rather than clear up misconceptions and master the material. Despite our attempts at tweaking the AI’s system prompt to elicit the optimal mix of helpful hinting and Socratic questioning, students typically showed little interest in sustained back-and-forth dialogue with the AI. They just wanted to get the answer as quickly as possible so they could be done with their homework.

Our hopes of an instant AI revolution in education were tempered, but every so often, we'd observe in the chat logs a conversation that bucked the general trend of students seeking to minimise cognitive effort. These unusual learners would pose a lot of why-questions and make a genuine attempt to present their own reasoning, giving the tutor bot enough insight into their thought process for a meaningful exchange of ideas to take place. For some reason, they often addressed the bot more like a human than a machine, staying polite, peppering their messages with emojis and ending conversations with “Thank you”. Humanising the AI interaction seemed to elicit a greater emotional investment from the student, leading to fascinating discussions between student and tutor that helped penetrate the surface and solidify their conceptual understanding.

Inspired by their example, I decided to approach coding with AI not as a shortcut to save myself the trouble of needing to think deeply, but as an opportunity to ask lots of questions and build a solid foundation. Learning best practices from AI may sound dubious to seasoned developers, who often poo-poo AI-authored code as hopelessly over-engineered and bloated. They're correct that AI tends to produce something like twice the number of lines of code than is strictly necessary. However, a simple suggestion like “do we really need X?” is typically sufficient to prompt a refactoring that cuts down on AI slop. For a newbie developer, such code reviews are actually a great opportunity to spot the difference between elegant and ugly code. Indeed, research shows that AI-assisted programming can help novices adhere to best practices and boost their confidence, though there are pitfalls for students who unquestioningly accept all of the AI's suggestions.

Given the promise of an accelerated learning path, I was keen to give programming another try. But I didn’t want to get stuck in tutorial purgatory or pile up meaningless course certificates, as commonly happens with people taking the self-directed road. To counteract such tendencies, I laid down the following guidelines for myself:

  1. Prioritise conceptual understanding over syntax: Although some technical interviews require candidates to write code freehand at the whiteboard, on-the-job programming is now 90%+ AI-assisted. I didn't want to spend hundreds of hours practicing leetcode problems, when interviewer and interviewee alike know that such challenges can be easily solved by AI. I was more interested in recognising and applying paradigms such as object-oriented programming, separation of concerns, and test-driven development. As programming moves up the abstraction ladder, I predict that technical interviews will focus increasingly on the candidate's understanding of these concepts and when to apply them.

  2. Go full immersion: Programming languages are like human languages — you'll only internalise them if you immerse yourself. I committed to a packed course load, intent on moving past the novice stage as quickly as possible so I could get to the fun part of realising my own ideas.

  3. Don’t waste money: Most of my friends are self-taught geeks who learned to code from books and internet forums as teenagers. In recent years, an entire industry of paid courses and bootcamps has sprung up to help mid-career professionals pivot into higher-paying tech jobs. While many such programmes are highly regarded, their curriculum content isn’t significantly different from the many free resources out there. What they’re actually selling is a structured learning path and the all-important stamp of approval that comes with a certificate of completion. But I wanted to prove that lack of funds shouldn’t hold anyone back, as long as they have access to a computer and internet connection. So I constrained myself to using only free tutorials and courses, such as Harvard’s excellent CS50. I figured if the lectures are good enough for the students paying $50,000 a year at Harvard, they’re good enough for me.

  4. Get hired: The ultimate acknowledgement of my abilities would be landing a full-time position as an engineer. Although I still harboured entrepreneurial dreams of launching an AI startup on a Saturday and reaching profitability by Tuesday, I knew the truth: getting a business off the ground is hard work, and I was still mentally recovering from the previous five years of running my last startup. I reasoned that taking a year out to work for someone else would top up the bank account while allowing me to sharpen my coding skills and experiment with business ideas on the side.

With these guidelines in place, the first decision I faced was which programming language to learn. Since I wanted the skills to build whatever I set my mind to, I needed to go full stack. HTML, CSS and JavaScript are the building blocks of front-end web development, and thankfully I already had some previous exposure to these languages from managing sites on Wordpress and Squarespace (enough to copy-paste code and make it work). For the backend, I wanted a versatile language that would be native to AI and full of useful libraries for working with data. Python therefore seemed like the natural choice. Besides, Herman recommended it and I trust his judgment on most tech-related matters.

Over the following week, I blitzed through 15 hours of Harvard lectures on Python programming at double speed and tackled each of the problem sets. I approached the problem sets very much with a concepts-over-syntax mindset. I'd plan out my solution to a problem in pseudocode (mixing Python and plain English), then get ChatGPT to critique it. After incorporating the AI’s feedback, I would type out the code by hand, asking the AI for syntactic assistance only where needed. As the inevitable bugs started to appear, I would present them to the AI, asking it to Socratically tutor me through the process so that I could experience a healthy degree of struggle and therefore internalise the lessons.

By the end of the intro course, I possessed a broad but shallow understanding of Python. Crucially, I'd picked up terminology and ideas that allowed me to have more meaningful conversations with my AI assistants. Although my use of third party AI tools violated the academic honesty pledge that Harvard requires from its students these days, I had gotten everything I needed from the course.

My capstone project was a Python implementation of the popular word-guessing game Wordle, which I called PyWordle (available on Github).


Pywordle screenshot

After polishing off CS50 Introduction to Python, I launched into another Harvard course, this one on web development, which introduced me to the Python Django framework. I also attended a Django workshop organised by the excellent Sheena O’Connell, which I discovered on a public Slack channel for South African techies. Sheena needed guinea pigs to try her new course and I eagerly signed on. Thanks to that workshop I added HTMX, Alpine.js, and TailwindCSS to round out my front-end stack.

Two weeks into my learning journey, and with a solid foundation of courses, tutorials, and workshops already under my belt, I felt ready to strike out on a project of my own. I wanted to build an sophisticated enough to dispel any suspicion that it might have been vibe coded over a weekend.

The idea for my Big Project came to me when my girlfriend Nikki mentioned that she wanted to start meal prepping in order to clean up her diet and spend less money on Uber Eats. Thus was born Make My Meal Plan, a fully-featured web app complete with AI-generated recipes and auto-populated grocery lists to take the hassle out of planning, purchasing and prepping meals. The project took 150 hours to complete and consists of 25,000 lines of code — far beyond what a non-technical person could outsource to AI agents like Lovable without the wheels coming off as the complexity mounts.

The thing about learning to program is it’s not just one thing. Like learning to cook, it’s a combination of hundreds of smaller skills. Over the course of those weeks, I had familiarised myself with Python Django, HTMX, Alpine.js, TailwindCSS, PostgreSQL, authentication flows, API integrations, custom management commands, middleware, static file management, server configuration, containerised deployment, Playwright testing, CI/CD, and a long tail of other programming skills. Putting it all together while crafting an intuitive user experience and maintaining a consistent visual identity is a lot — no wonder people specialise! But I was properly cooking by this point, and although I'd occasionally get stuck on a bug for hours, I maintained full faith that I'd eventually overcome every obstacle in my way. Unlike previous attempts at learning to program, this time I never encountered a series of frustrations that yielded to resignation. I just kept pushing forward, increasingly adept at troubleshooting issues as they arose and tightening the reins on the AI where necessary.

Before long, I'd become totally coding-obsessed, spending all day in solitude glued to my screen, much to the annoyance of my partner (I’m sure other developers can relate). I had decided to keep the nature of my project a secret from Nikki, as she loves surprises. But her patience for my anti-social obsession was wearing thin, so I decided it was time to make a final commit and stage the grand reveal. I sat Nikki down on the couch, hooked my laptop up to the TV monitor, and proceeded to unveil makemymealplan.com. She was initially shocked, then touched, then impressed, and ultimately forgave me for having gone all “Aspie” on her for several weeks.


Make My Meal Plan screenshot

Feeling confident in my abilities, and with my Big Project out of the way, it was time to tackle the final stage of the experiment: landing a job as an engineer. At this point I must confess that my years of working in the tech industry gave me a leg up, as I was able to take advantage of my existing network to land introductions. It didn't take long for me to get introduced to a boutique strategy consultancy based in London looking to hire a Data Architect. Like most consultancies they still relied on spreadsheets and old-school desktop applications for their data analysis. They wanted someone to build data pipelines, automations, and sleek interfaces to replace legacy tools and save them on subscription costs. It was a good fit for my Python specialisation with a full stack foundation, and they were fine with me working remotely.

I made it through four interview rounds without needing to do any live programming or Leetcode challenges. My portfolio of projects was enough to convince the firm of my credentials, just as I had hoped. We spent the interviews discussing how tools like Deep Research could largely replace the desk research of junior business analysts, and how consultants as well as their clients would need to leverage AI tools to remain relevant. I was transparent with them about my recent pivot into programming, explaining that AI had helped me compress years of learning into a few months. Rather than being put off by this relative inexperience, they commended me for my initiative and hired me on a three-month probation. I received the job offer with a competitive compensation package 100 days after deciding to take the plunge into programming. My total financial investment was about $120 for three months of Claude Pro and Cursor, a cost borne more out of convenience than necessity, as there are free alternatives like ChatGPT and Grok.

I'm now four months into my Data Architect role, having passed my probation period with a positive review and expanded responsibilities. I spend most of my time on the ideal Maker’s Schedule, with one or no meetings on an average workday. Nikki and I recently got back from a few weeks of remote work in Bali, which despite the time difference presented few issues since I’m free to manage my own hours. My coding has continued to evolve as I delve into statistical analysis with libraries like numpy and pandas, and explore geospatial data using tools like ArcGIS. I’m currently building a Django app to explore the distribution of populations and household incomes around the UK, and I’m uncovering insights into companies and industries with the help of Deep Research. Agentic workflows using Claude Code and Cursor have at least doubled my efficiency compared to six months ago, and as the models keep improving, so does my ability to take on more work without breaking a sweat. My boss trusts me, and I (mostly) trust AI.

One unexpected revelation to come out of this process is that after years of managing teams of up to 30 people, I’ve discovered how much I enjoy the creative process of building in solitude, unburdened by “HR problems”. I used to believe that success meant being high up on the org chart with lots of reporting lines feeding into me. But that’s a recipe for running between meetings all day, fighting many fires, and needing to steal hours on the weekend for deep work. I’m actually happier having nobody or just a few people to manage, which allows me to immerse myself in creative projects for hours on end, while coming up for air to consult with peers only as needed. Looking ahead, I can see myself thriving either as an entrepreneur or as an individual contributor, as long as I have the autonomy to explore creative solutions to interesting problems.

I view my mid-career pivot as a microcosm of broader changes in the knowledge economy. Just-in-time learning is replacing bloated just-in-case curricula peddled by academic gatekeepers. Savvy employers are placing emphasis on resourcefulness and initiative over degrees and diplomas. AI models are only getting smarter, and they'll eventually come for your job. If your primary concern is to remain comfortably employed while continuing the same work you've been doing for years, then all this should worry you. But if you live to learn, then the pace of AI progress should excite you. With a virtual sage by your side and an abundance of free resources at your fingertips, you're only limited by your curiosity and ambition.

Figure out what skills would catapult your career, then cobble together your own path towards acquiring them. Take some time off work and go full immersion, rather than dragging things out over years. Don’t waste your money or your time on distractions and credentialism. Set yourself a Big Hairy Goal and a deadline. Make something impressive and show it to people. Ask if they can introduce you to someone who needs this. Confidently state that you don’t know the answer yet, but that you'll figure it out. Most importantly: don’t get stuck in an identity. The hardest thing for anyone who has achieved some modicum of success is having the humility to start over. The best time to plant a tree may have been 20 years ago, but the best time to learn a new skill is surely now. Forget who you were, embrace Beginner’s Mind, and remember to say the occasional “thank you” to your AI along the way.

Enjoyed this article? Subscribe to my blog via email or RSS feed.

Read Entire Article