Software Defined Redneck

Reskilling

Planning an Escape

I’ve come to the conclusion that I’ve hit a dead end in my career.

My current job is the thankless task of maintaining my previous boss’s pet projets. I’m having a horrible time. I can’t move up the chain because I’m not in a real position - just a weird attachment to the department where I don’t belong. My formal education is in Material Science, where all the jobs are in rural/suburban areas, but I can’t live in those places. I’m stuck.

I do have knowledge and passion for software/infrastructure/automation, but no formal experience to put on a reusme, and my current position does not offer opportunities for growth in this area, aside from some simple data processing automation.

So, I think it’s time to go back to school. Maybe not formally (I like getting a paycheck and benefits), but I definitely need to learn something new. This post details my potential plans for this advancement.

The DevOps/Data Science Plan

Start with DevOps

I’m going to learn data science and DevOps. I like automating pipelines, I like operations, and I like being close to data. It makes enough sense.

However, I do not want to go back to school for that. Not only is school expensive, but I think I can learn it myself. Here’s the plan.

Everything needs to run somewhere, and somebody needs to manage the process of making that happen. Maybe it’s a simple web form, maybe it’s a whole ML model. It needs to be deployed, and so I’ll start with DevOps.

I was looking into buying some mini PCs to setup a small homelab cluster for learning kubernetes and other orchestration tooling, but those cost money (and space) Instead, I plan to use the Oracle Cloud Ampere VMs (you get 4 ARM cores free to split however you want). This is enough to setup a 4-node cluster (not quite enough for proper k8s, but good enough for k3s) and cost nothing.

Additionally, since it’s running on a cloud provider, it will let me learn more about the process of quickly spinning up new nodes at cloud scale. I can setup a cluster, nuke one of the VMs, and recreate it using Ansible, Puppet, etc to “heal” the pool.

With this cluster setup, I plan to learn about CI/CD pipelines (Jenkins is the name I see most often) to deploy some code from a git repo. I’d probably try this out with my resume to pdf generator, since it’s stateless and could easily incorporate testing (Make sure the name is written in Title Case, all the sections are included, etc).

Not every application can be stateless, so I’d also investigate the various platforms for shared storage in a kubernetes cluster.

Then move to Data Science

Now that I’ve developed a process for creating and deploying applications on servers, it’s time to learn about Data Science platforms. Lots of job listings have mentiond Apache Spark, Databricks, and Snowflake, so I’d like to learn how to host and use them. I should also learn actual data science/statical methods, so I’ll probably take Google’s free course to get a certificate.

Finally, it seems that the industry is moving rapidly towards machine learning models for data processing, so I’ll need to learn the fundamental techniques of training/testing/deploying a model. I doubt I could run a ML model on a single ARM core, but I can at least learn the theory and try it out. Maybe my knowledge of job scheduling with Slurm will be useful here, since ML models need to run on servers with beefier GPUs.

The (Embedded) Developer Plan

I’ve tinkered around with many an arduino in my years, both for personal interest and for work (automating reactors in undergrad). My keyboard is running the open source QMK firmware on an STM32, which I’ve had to tweak and recompile many times. I’ve always found it impressive how much functionality people can squeeze into embedded devices with such limited CPU/RAM/ROM. Never enough to write the libraries or truly test the limits myself (I studied Materials Science, remeber?) but always had some passive interest.

Then one day, at the suggestion of my brother’s friends, I looked at Lutron’s positions in Philadelphia. They wanted embedded engineers. I was, of course, unqualified. I applied anyway because I’m willing to learn on the job, but naturally got rejected. Fair enough. However, the allure of working on real proucts in an actual office in the City of Brotherly Love stayed nagging in the back of my brain.

As I looked at more jobs, both in-person and (sigh) fully remote, I noticed that quite a lot of jobs were looking for people with C/C++ experience. And I kept getting youtube videos recommended to me about how awesom this new Rust language is for embedded. So I thought, why not learn?

The irony of learning systems programming while getting paid to do drag-and-drop low code is not lost on me.

Start with Fundamentals

I was going to go right in to Rust, because it handles a lot of the messy parts for you. However, while many things are moving to Rust (even the Windows Kernel!), plenty of systems still use C-based languages which doesn’t have these nice guardrails. Therefore I’ll need to learn the fundamentals of memory safety/management and testing. But where? C is over 50 years old, so there’s no end to the guides (paid, free, print, digital).

I’ve got several friends who did the Electrical Engineering/Computer Engineering/Computer Science route, so I asked for advice. They suggested - no, swore by - Angrave’s System Programming. This should teach me about object oriented programming (in more depth than Python, anyway), Functional Programming, Memory Management, and scheduling.

Since I’d much rather read using a kindle, and this book is avaialble as an ePub, I’ll be reading this like a proper textbook on my kindle. Not exactly light reading, but if I can read it on a dedicated device I’m much less likely to get distracted and mentally wander off.

I’ve never been great at self studying with no clear use case/projects. Academic studying in the abstract is tricky, even with a professor - and I went to every lecture in school. Time for a rigid routine. I’ll commit an hour or so to this every day and by the end of it have a decent understanding of systems programming.

Then Do Projects

I don’t think writing “I read through this guide online” is enough to get hired for a developer job. Knowledge and experience can come across in an interview, but if the resume isn’t promising, you’ll never get that chance. To bridge this gap between theoretical knowledge and professional experiece, I’ll need to create, complete, and present some projects.

For future reference (to myself), here’s some potential ideas.

What happens Next

I’m not sure how far along I’ll get with this, but hopefully it should be interesting enough to keep me engaged beyond “I want a new job”. This process still won’t result in any significant boosts to my resume (since it’s not an academic or professional setting), but at least I’ll know what I’m talking about in interviews (should I get that far)

Update October 2024

Still no jobs, even when recruiters have contacted me, I ultimately never make it to the first interview (beyond the initial call with the recruiter)

And now I’m pretty certain I’m getting laid off soon. My boss has done all but say it explicitly. Currently stuck in a stalemate, they’re trying to make me leave voluntarily by finding another job (which is what I’ve been trying this whole time). That way they don’t have to pay severance. I’m not going to let them off the hook (also I can’t get another job) so until they explicitly tell me that it’s time to go (with severance) I’ll keep working.

However, in the mean time I’ve done some thinking. I’m going to go full-time into grad school. I had considered part time, but I know I’d learn better in a full-time, on campus environment and didn’t want to keep working at the job I hate. It’ll be a fall start, so I need to get all my ducks in a line (application essays, letters of rec, etc starting soon). Wish me luck