Human Updates Available
I keep a list of short, middle, and long-term reminders on all of my devices that I use regularly1. Although I’m constantly editing the short-term list and the long-term has items that have been on there for years. The middle list seems to always have items that take longer than a couple of days because I’m not getting paid or rewarded for doing them. For instance, there’s one titled ‘Garage Floodlight’ because I needed some extra light in the yard when I was taking our dog outside in the evenings. I bought the wiring, fixtures, and switches to install I just haven’t carved out a weekend to make it happen.
Another item on my middle-term list is upgrading one of my servers to the more recent version of Linux. I have this shuffling technique I’ve been using over the years with servers, software, and programming languages where I like to keep three tiers in running. I always keep one running way out in front on a beta version, one on the current long-term support version, and then there is usually one that needs to be updated usually because it has some legacy feature requiring a rewrite. This is exactly how I handle my servers so that I can shuffle applications between them as needed. I’ve been calculating some time near the beginning of this year to spend on upgrading and it’s got me thinking that I should be applying that same approach to my own knowledge and skillset on occasion too. It’s time to dust out some useless brain cells to try and pack in some new information. Just reformat, pile in some new architecture, and reboot
I’m generally a late adopter2 because I like the comfort of the middle and I joke in my Github bio that I “still haven’t learned Rust”3. Although I kinda enjoy being able to work in a bunch of frameworks as the master of none, during the last several years I’ve found myself using just several stacks to accomplish anything with the vast majority of my code being copied and pasted from project to project. Because I’m focused mostly on smaller-scale projects, I don’t have to dive into machine learning, artificial intelligence, or data science visualizations. I’ve got enough programming chops, cloud and network security experience to bring a project to scale, but it’s rarely needed. I understand and enjoy them, I just don’t have any real motive to acquire and analyze large data sets or scale a project to millions of users.
And when I say motive, I generally mean money. A lot of folks may not realize it, but the underlying motives for many technology decisions are money in the form of security, network, and energy usage. Users generate revenue either through advertising, subscriptions, or purchases. Serving up quadrillions of lines of code hourly to billions of users takes energy in the form of electricity sent to computers for processing power. Optimizing how efficient and secure the code is saves money in the form of maintenance, energy, and network usage. Programming languages are only being used to make calculations and database modifications, databases are being abstracted in APIs to reduce calls, file formats for media have shifted to the most efficient and graphics have moved to being served in line with code. For instance, when a page from say Facebook is loaded into your app or browser they’re generally using JavaScript to query and pull in information that is changing from an API so that it is efficient. Their React library to do so has become one of the most dominant in web development. I’ve built most of my career on JavaScript and I can empathize with those trying to take in all of the frameworks today. Even a very simple website developer has to have a pretty robust understanding to customize the editors in the most common content management systems. It’s pretty difficult to keep up. Recently Shopify acquired Remix4 for React and Vercel announced a new build tool called Turbo5 that is built in Rust6.
Although seemingly large changes have taken place since I started in the early 2000s, the basic underlying browsers have remained the same up until 2020 when WebAssembly7 (WASM) became the fourth officially supported browser language behind HTML, CSS, and JavaScript8. JavaScript is going anywhere and will likely keep its spot on the front end, it’s just that web assembly is much faster and safer allowing lower-level programming languages like C, GoLang, and Rust to work in the browser at near-native efficiency. The reason that Rust is picking up steam against the others is that it’s memory safe. I’d venture to say that the vast majority of the hacking out there starts with memory leaks. I’m going to have to dive into WASM sooner than later. And without any client motivation, I’m just going to have to invent a project or dive into someone else’s so that I can learn to find uses for it. I think I’ll start with the Rust WASM9 and Black Hat Rust10.
So aside from packing that new information in, I think I’ll also add a permanent middle-term reminder that there are human upgrades available. Although there may be various reasons why I’ve been relatively successful in my professional life, I think the core is that I enjoy learning and adapting to changes. It’s an approach that can be applied not only to your profession but also to your personal development. We’re upgradeable in so many other ways than just our professional life… just pile in some new architecture and reboot.
- Slow Thinking – https://davidawindham.com/slow-thinking/
- Late Adopter – https://davidawindham.com/late-adopter/
- GitHub/windhamdavid – https://github.com/windhamdavid
- Remix – https://remix.run/blog/remixing-shopify
- Turbopack – https://vercel.com/blog/turbopack
- Rust Language – https://doc.rust-lang.org/book/
- Web Assembly – https://en.wikipedia.org/wiki/WebAssembly
- WASM W3C – https://www.w3.org/2019/12/pressrelease-wasm-rec.html.en
- Rust & WASM – https://rustwasm.github.io/book/
- Black Hat Rust – https://github.com/skerkour/black-hat-rust