john patrick amata

The Code Monkey's Last Dance

17 Jul 2024

Tags: [ careers  ]

The window is closing.

Youā€™ve probably heard the buzz, right? AI is coming for peopleā€™s jobs, software engineers wielding these HAL-9000s need less teams anymore, yadda yadda. But hereā€™s the thing ā€“ I think we might be living in the twilight of the golden age of software engineering. And if weā€™re smart, weā€™ll make the most of it while we still can.

Nightmare on Code Street

Letā€™s face it, the writingā€™s on the wall (or should we say, in the console?). These AI coding assistants are getting scary good. I was pair programming with ChatGPT the other day, and I swear that thing is wayyy better than me ā€“ if youā€™re a hiring manager reading this, Iā€™m just kidding, Iā€™m good enough to be hired sir šŸ«”

But jokes aside, this tech is advancing faster than I can learn those new bloaty JavaScript frameworks (and thatā€™s saying something!)

The way I see it, weā€™re in this weird limbo. On one hand, thereā€™s still a huge demand for software engineers. Companies are throwing money and perks at anyone who can solve a leetcode two sum. On the other hand, AI is nipping at our heels, threatening to turn coding into something moreā€¦ accessible.

Every day, those AI models are getting smarter, more capable. Theyā€™re not just writing ā€œHello, World!ā€ anymore ā€“ theyā€™re slowly becoming more able to craft entire systems while weā€™re still trying to remember how to write a for-loop in that language

So hereā€™s my hot take: This might be our last chance to cash in on the relative scarcity of coding skills. Think about it ā€“ right now, knowing how to code is like having a superpower (earning money!). But what happens when AI democratizes that superpower? Suddenly, the playing field gets a lot more crowded.

Donā€™t get me wrong, Iā€™m not saying software engineering is going away. But the days of companies desperately hiring anyone who can cobble together some APIs might be numbered. Weā€™re looking at a future where the bar for entry gets higher, and the competition gets fiercer.

We might be the last generation of programmers who get to experience the wild west of tech. The days of ā€œmove fast and break thingsā€ are numbered. Soon, itā€™ll be ā€œmove fast and let average joe prompt and shovel data to the AI to fix things.ā€

Now obviously Iā€™m going full on FUD here to make a more spicy post. But the AI train is definitely coming, and itā€™s coming fast. But with some grit, some smarts, and a whole lot of caffeine, we might just be able to hop on board instead of getting run the hell over.

The Hunger Games

Now, with interest rates climbing and growth slowing, the partyā€™s over. Companies are sobering up and realizing they donā€™t need hordes of average Joes writing cookie-cutter code. Nope, theyā€™re looking for the cream of the crop ā€“ the kind of engineers who can innovate their way out of needing more engineers.

Enter the era of ā€œefficiency.ā€ (Yeah, Meta, Iā€™m looking at you and your ā€œyear of efficiency.ā€) Layoffs are raining down like confetti at a tech conference afterparty. And letā€™s not forget our new AI overlords, ready to code circles around us mere mortals.

But hereā€™s the real tragedy: most people havenā€™t gotten the memo. Theyā€™re still out there, grinding away on LeetCode, thinking theyā€™re punching their ticket to Silicon Valley stardom. Sorry to burst your bubble, kids, but the gold rush is over.

Now, donā€™t get me wrong. We still need engineers. Hell, the world runs on software these days. But hereā€™s the kicker: we donā€™t need as many as we thought we did. See, it turns out that when you build software that can scale to billions of users, you donā€™t need to keep hiring engineers at the same rate. Itā€™s almost likeā€¦ efficiency is a thing? Whoā€™d have thought it?

So now weā€™re in this weird twilight zone where the industry is sobering up from its growth binge, realizing itā€™s got a software engineer hangover. All these companies that were hiring anyone who could spell ā€œJavaScriptā€ are now looking around and going, ā€œWait, why do we have 47 people working on our login page?ā€

And let me tell you, itā€™s not just the quantity thatā€™s changing - itā€™s the quality. The bar is getting higher, folks. Itā€™s not enough to be able to center a div anymore (although letā€™s be honest, thatā€™s still black magic to half of us). Now you need to be able to do it while juggling five different frameworks, two cloud platforms, and a partridge in a pear tree.

And for those of you just starting out? Hoo boy. Youā€™ve got a tough road ahead. Sure, thereā€™s a wealth of knowledge out there, but so is the ratio of jobs:applicants, the market has flipped from mostly dominated by young talent to now mostly mids and seniors. Youā€™ll be fighting tooth and nail for fewer jobs against increasingly fierce competition.

As the wise and slightly terrifying Charlie Munger once said:

ā€œI think value investors are going to have a harder time now that thereā€™s so many of them competing for a diminished bunch of opportunities.ā€

The cold, hard truth is that future generations of devs are going to have to work harder for less reward. All that ā€œwisdomā€ weā€™ve been accumulating? Itā€™s either going to become the bare minimum or completely obsolete.

Now, Iā€™m not saying innovation is dead. There will always be new frontiers, new technologies, new problems to solve. Heck, I can think of a dozen ways we could improve developer productivity right now. But the days of easy pickings are over. It took decades to go from the birth of the internet to the iPhone. Who knows how long itā€™ll be before the next big thing comes along?

So, unless youā€™re the kind of coding savant who makes Linus Torvalds look like a script kiddie, brace yourself. The tech world isnā€™t going to be handing out golden tickets like itā€™s Willy Wonkaā€™s chocolate factory anymore. Welcome to the new normal, folks. Itā€™s time to level up or get left behind.

Carpe Diem (or Carpe Code-iem?)

So whatā€™s a code monkey to do? Well, let me tell you what Iā€™m doing, and you can decide if you want to come along for the ride.

Proper Fundamentals

First off, forget all that theoretical mumbo-jumbo youā€™ve been cramming into your skull. You canā€™t claim to have ā€œproper fundamentalsā€ unless youā€™ve actually built stuff. Real stuff. Messy, broken, frustrating stuff. Theory without practice is like a bicycle without wheels - utterly useless. I just rewatched Oppenheimer and Iā€™ve always loved it whenever he says ā€œTheory can only take you so far.ā€

Want a crash course in how computers actually work? Go do nand2tetris. Itā€™ll make you appreciate every single abstraction weā€™ve built over the years. But thatā€™s really optional, whatā€™s not, in my opinion, is grinding Think Python. Itā€™s a book that in my opinion, everyone should go through to learn how to think about programming. And after learning some python, work through some problems from LeetCode with NeetCode. Sure, neetcode basically tech interview porn, but itā€™ll give you a taste of the algorithmic gymnastics employers expect these days.

And now hereā€™s what youā€™re gonna do: pick a project - any project - and build the damn thing. I donā€™t care if itā€™s been done a million times before. Hell, start with ā€œHello, World!ā€ if you have to, but donā€™t stop there. Keep pushing until you hit that wall where everything falls apart and youā€™re ready to set your computer on fire. That, my friends, is where the real learning begins.

Now, letā€™s talk about becoming a ā€œstrongā€ developer. Buckle up, because this is where it gets messy. Thereā€™s no straightforward answer, no magic bullet. Being a good dev means being decent at a whole bunch of different things. But since youā€™re all looking at me with those puppy dog eyes, hereā€™s my very opinionated take on the top list of dev skills:

Now, I know what youā€™re thinking: ā€œThatā€™s too much! Iā€™ll never learn it all!ā€ Well, man, this field is vast and incomprehensible, and the sooner you accept that, the happier youā€™ll be. Just keep chipping away at it, one day at a time.

Want some benchmarks? Try solving LeetCode 75 problems in 30 minutes each. Sketch out the architecture for YouTube or Twitter without breaking into a cold sweat. Build a simple app in your chosen stack in an hour. If you can do all that, youā€™reā€¦ well, you can impress anyone anywhere.

And for crying out loud, learn how to actually solve problems:

There you have it, folks. The unvarnished, ugly truth about what it takes to be a halfway decent developer. Itā€™s a long, painful road full of late nights, caffeine overdoses, and existential crises. But hey, at least the pay is still good (for now).

System Design

And from there weā€™ll want to dive deep into the guts of systems. Iā€™m talking distributed systems, concurrency, the nitty-gritty of how computers actually work. Because let me tell you, AI might be able to spit out a React component faster than you can google what to npm install, but it still struggles with the really gnarly stuff. You know, the kind of problems that make you question your life choices at 3 AM while youā€™re knee-deep in core dumps.

Sure, GPT and copilot can spit out code faster than you can type it. But understanding the intricate dance of distributed systems, the delicate balance of consistency and availability, the art of designing systems that scale to millions of users? That takes a human touch, my friend.

So hereā€™s my advice: Donā€™t just study this stuff. Live it. Breathe it. Build things. Break things. Then figure out why they broke and build them again, but better. Set up a Kubernetes cluster in your basement. Write your own distributed key-value store. Implement Paxos (and then cry a little, because letā€™s face it, Paxos is a pain).

And most importantly, think about how all of this fits together. Because thatā€™s where the real magic happens. Understanding how to design systems that are scalable, reliable, and efficient? Thatā€™s the kind of expertise thatā€™ll keep you employed long after AI has taken over writing CRUD apps.

Remember, in the world of distributed systems, eventual consistency isnā€™t just a concept - itā€™s a way of life. So keep pushing, keep learning, and always design with failure in mind.

Start small, but think big. Iā€™ll give you some project ideas.

Maybe you begin with a simple load balancer. But donā€™t stop there. Keep adding layers. How does it handle failure? What happens when you introduce caching? How do you ensure data consistency across multiple regions?

And hereā€™s a pro tip: Document everything. Not just your code, but your thought process. Why did you choose this particular architecture? What trade-offs did you make? Because let me tell you, future you will thank past you when youā€™re trying to debug some weird edge case six months down the line.

Remember, in this game, thereā€™s no such thing as a perfect system. Itā€™s all about trade-offs. CAP theorem isnā€™t just some academic concept - itā€™s the harsh reality we live with every day. So get comfortable with making those hard choices. Should you optimize for consistency or availability? How much complexity are you willing to introduce for that extra bit of performance?

Build your own distributed key-value store. Start simple with a single-node in-memory store, then add persistence. Now the fun begins - shard it across multiple nodes. How will you handle consistency? Implement vector clocks. Now make it fault-tolerant. Congratulations, youā€™ve just built a mini-Cassandra!

Implement your own consensus algorithm. Start with Raft - itā€™s like Paxos but actually comprehensible by mere mortals. Build a cluster of nodes that can elect a leader and replicate a log. Then throw in some network partitions and see how it handles them.

Build a distributed file system. Start with a basic client-server model, then shard your files across multiple nodes. Implement replication for fault tolerance. How will you handle concurrent writes? Can you implement something like HDFSā€™s write-once, read-many semantics?

Build a toy search engine. Crawl a subset of the web, index it, and implement distributed search. How will you parallelize the crawling? How about distributed indexing? Can you implement something like PageRank? How will you deploy it?

Building these systems from scratch will give you insights that no amount of textbook reading or system design blog post/youtube video would ever could. Youā€™ll understand viscerally why certain design decisions were made in real-world systems, and from the trials of implementing them, can see the failure scenarios that you might not have thought of.

Plus, imagine walking into your next job interview bragging about that scalable distributed search engine you built. Youā€™ll be speaking the same language as the senior engineers, because youā€™ve wrestled with the same problems they have: building and deploying multiple nodes to AWS, processing large scale data sets in the cloud, implementing graph processing practically, probably utilize something like kafka for data pipelines, optimizing throughput as you work on parallelizing your crawling, and more

Hereā€™s a further list of projects that are on my todo

Data Infra

Distributed Systems

Learn to Code with AI

Iā€™m also getting cozy with our new AI overlords. Not in a ā€œplease donā€™t replace meā€ way, but in a ā€œletā€™s tangoā€ kind of way. Iā€™m learning how to whisper sweet nothings into GPTā€™s ear to make it do my bidding. Prompt engineering isnā€™t just for the ML crowd anymore, my friends. Itā€™s a survival skill.

Imma Niche

And letā€™s talk about specialization. Remember when being a ā€œfull-stack developerā€ was all the rage? Well, now itā€™s time to pick your niche and dig in like your career depends on it (because it does). Maybe itā€™s security, or high-performance computing, or wrangling ancient COBOL systems that run our financial infrastructure. Find something that AI canā€™t easily replicate and become the go-to human for it.

I wanna niche myself in the intersection of infra and AI. Iā€™ve already explained some systems/infra project earlier so now Iā€™ll give you some of my project ideas concerning AI.

Letā€™s code our own GPT. Yeah, thatā€™s right. I want you to create a baby version of those fancy language models everyoneā€™s yakking about. Start small, maybe just predicting the next character in a string. Then work your way up to finishing sentences, paragraphs, and eventually, writing your own stand-up comedy routine. Bonus points if itā€™s actually funny.

Or how about a snarky code reviewer? Create an AI that reviews code like that one colleague we all have. You know, the one who makes you question your life choices with every pull request. Make it sassy, make it smart, and of course, make it catch those off-by-one errors.

Hereā€™s a few more

Learn How to Rizz šŸ˜ˆšŸŗ

And lastly, the real secret sauce - and I canā€™t believe Iā€™m sharing this, but weā€™re all friends here, right? Learn how to talk. Rizz baby. Be a rizzler. I know, I know, itā€™s scary. Weā€™d all rather nest our for-loops than go to a meeting with actual people. But trust me, the ability to translate geek-speak into something the suits upstairs can understand? Thatā€™s gold, baby. Pure gold.

So fire up those IDEs, crack open a fresh energy drink, and letā€™s make some magic happen. Learn the deep stuff, dance with AI, find your niche, and for the love of all that is holy, learn to communicate with non-programmers

The Final Commit

Look, Iā€™m not trying to be all doom and gloom here (although I admitted that Iā€™m FUDing cause Iā€™m a lame writer), but I find that such is the kind of perpsective to give you a kick in the nuts thatā€™ll make you stand up and fight back. The future of software engineering is likely going to be awesome in ways we canā€™t even imagine. But if youā€™re like me, still learning the ropes, then we need to act fast.

This is our moment, our last dance in the era where ā€œI know how to codeā€ is enough to open doors. So letā€™s make it count. Learn, build, connect, and position ourselves to ride this wave of change instead of being swept away by it.

Who knows? Maybe in a few years, weā€™ll be the grizzled veterans, regaling newbies with tales of the wild west days of software engineering. ā€œBack in my day, we had to write our own for-loops, uphill both ways!ā€

So fellow code monkeys, shall we dance?

« Parsers, briefly.
Study the Classics »

If you like this post, you can say thanks by following me on š• @0xj0hn so I can look legit enough to slide my DMs into @taylorswift13

Tweet