A lot has happened in software engineering since my last post. I've had a draft post called "LLMs are crazy good" for a while now, but suffice to say that LLMs have gotten even better at coding since then, to the degree that they are now essentially my preferred way to edit the text files that we call code. Also, it feels silly to have to write this, but every word on this blog has been and…
I saw a "stop learning to code, vibe coding is here now" post and I had to write a response: While it's true that AI has commoditized the act of stringing characters together into code, it hasn't commoditized software engineering. In fact, it's made software engineering more important and more accessible. The difference between coding and software engineering is that software…
Random thing that I got excited about this morning because I wanted to add really nice search to my personal journal: vector embeddings. Imagine a 3D Cartesian space, and in it there are words at various (x, y, z) points. Similar words are placed in similar locations. In this space, "king" and "queen" would be close to each other, whereas "beggar" would be far away. This is essentially what a…
The first thing I do when I encounter a strange code base is run the test suite. I do this because I can get an idea of: the exact use cases that the developers envisioned the actual usability of the APIs the overall health (read: test coverage) of the project and get an idea of how development is done I've heard a lot about the benefits of test suites, even in the context of articles that…
I survived David Beazley's weeklong course on the Raft consensus algorithm that powers technologies like Kubernetes, MongoDB, and Neo4j. Image from https://raft.github.io/ The Raft Consensus Algorithm is a way for a gaggle of computers to agree on a sequence of events, or a "log" of events. Raft is useful for things like databases - once your data spans multiple computers, you…
Staff Engineer by Will Larson talks about what happens in your career should you decide to progress past Senior Engineer. For context, software engineers typically progress through a series of well known levels: junior, mid (or just "engineer"), and senior. All of these levels are characterized by increasing autonomy and impact: Title Autonomy Impact Junior Engineer Needs direction Needs…
I thought I'd jot down some notes about using Rust that wouldn't have made it as their own blog posts: You can't use anonymous functions for control flow The build times Traits, traits, traits, and more traits Keeping up with Rust news You can't use anonymous functions for control flow In Ruby, you can return from almost anywhere in a function: def find_even arr arr . each {| i…
I realized that one of my favorite Rust features doesn't have a blog post highlighting it [ 0 ], so I thought I'd talk a bit about documentation comments and doc tests in Rust. I'll give you a quick example. Let's say you have some code: [![``` // src/lib.rs /// Guaranteed to be a very cute puppy pub struct Puppy { pub name: String, }…
Actually, that really understates the problem - we feel that living in the USA is a bad deal for families in general, but for now I'll focus specifically on public school and daycare. My wife and I were taking a stroll around the neighborhood with our three kids during the week when I realized - there's no one else out here. As in, there are no other families enjoying the (at the time)…
Hi! 👋 I did end up landing that Rust job I was looking for , and I've been wrestling with the Rust programming language now for a good couple of months - not quite 3, if I'm to be honest, but who's counting. To be honest, I'm a little bit ambivalent. I think it's a great language for a few reasons, but I will be honest in that I am not nearly as productive as I would be…
I cobbled this together from a few comments I'd made on Facebook - please forgive the lack of coherency. Is it moral to ask AI art program to create something "in the style of" a living artist? Is it moral to ask an AI art program to create something in between styles of two artists? What about three artists? Four? Stable Diffusion and other AI art bots take this to the nth degree. Just…
This'll be a short blog post, but Gleam (v0.25.0) is an Erlang OTP language, akin to Elixir (in fact, recently added full compatibility with Elixir packages). It's been fun so far . I think the error messages are great and the functional style language is a lot of fun to wrap my brain around. I have had some clerical issues trying to find resources for things as simple as opening files…
Many people (millennials, at least) have been trained to kiss ass when we're interviewing, to basically "fake it til you make it." This can take several forms: People pleasing Professional ambition Sacrificing personal boundaries Many of these behaviors actually hurt candidates during interviews, especially marginalized candidates and young people early in their careers. These are behaviors…
When I graduated from college with a degree in East Asian Languages and Culture from the University of Illinois at Urbana-Champaign in 2011 (one year late), I had no idea what I was going to do. To compare with my fellow EALC majors, one had started a restaurant, one got into horseback riding, and another was a brand ambassador. So basically, I was at square one. A few things from my background…
I've been looking for a job doing Rust development and one of the places I applied to was Vector, a DataDog acquisition in the observability space. Observability is one of those terms I had yet to encounter seriously before starting this search, so for the uninitiated: ...observability is the ability to measure a system’s current state based on the data it generates, such as logs, metrics,…
This might be an idiosyncrasy of mine, but I tend to use hashes a lot in Ruby. For instance, recently I was working on a code challenge involving ordering food. There were different categories of courses (breakfast, lunch, and dinner) and different categories of foods (main dish, side dish, etc.), and you need both in order to resolve the final dish name (e.g. lunch + side dish = "banchan" ). In…
At Hologram, I loved getting to sign into work Slack and share knowledge with fellow software engineers of all experience levels. There were about 40 engineers in a company closing in on 200 employees. Meanwhile, the biggest change in my career as a software engineer recently has been learning Rust, which I've been calling a "compiler-guided tour to systems programming." For me, it has been…
So most recently I was employed at Hologram and was therefore too busy to write. Not anymore - I was one of the employees laid off from Hologram recently. While at Hologram, I worked mostly in PHP, which was something I actually dreaded coming into the job, but ended up not minding as much as I thought I would. PHP, for all of its terrible reputation, functions mostly like how you'd expect a…
"Are you teaching your kids Chinese?" and "how are you teaching your kids Chinese?" are two questions we get a lot from Chinese American parents. One question I wish more parents asked us is "why?" When I was picking a major course of study in college, I consistently gravitated towards East Asian Languages and Culture (EALC) with a focus on Chinese for two reasons that I suspect are similar for…
🇺🇦 I'm joining the Ruby community in calling for an end to Russia's unjust and illegal war in Ukraine! Please donate to Ukrainian efforts here and learn more here . 🇺🇦 Ruby has economy-class functions, not first-class functions. And that's okay! It's a great language anyway. Let's talk about what first-class functions look like. Per the Wikipedia entry, a programming…
Note: anytime you see 🙋♂️ RFC_, that's a "Request For Comments" about a topic I didn't understand or take the time to look into. Please feel free to add what you know!_ This is a followup to the last post. Instead of using the template rust_ruby_example gem, we'll make one from scratch. Make sure to go back over the "Using a rubygems fork" section because we'll be using it…
Note: anytime you see 🙋♂️ RFC_, that's a "Request For Comments" about a topic I didn't understand or take the time to look into. Please feel free to add what you know!_ If this post tickles your fancy, check out the follow-up post: Writing a Rust gem from scratch In December 2021, Ian Ker-Seymer ( @ianks ) submitted a pull request to enable native extensions in Rust! I was so excited,…
TLDR - the three most upvoted crates that were never recognized as Crate of the Week in This Week in Rust are glutin , rust-cuda , and redshirt . The Crate of the Week is a Rust (programming language, not game) segment in the This Week in Rust newsletter that highlights a single Rust library in a given week. This helps Rust community members discover and promote crates. You can submit a crate…
The CEDICT format is a simple, creative commons-licensed file format for Chinese/English dictionaries. While Mandarin-only CEDICT parsers abound, there is basically no support for Cantonese jyutping in the English-speaking programming world. As someone who would have liked to use Cantonese pronunciations in my programs, at first I was stuck. I considered adding jyutping support to an existing…
Yesterday, I eked out a bit of time to contribute to Artichoke in Rust, in no small part due to the maintainer @lopopolo : [![Brian Kung (he/him/his): Hi there! I'm a rubyist learning Rust lopopolo: Welcome to the party Brian Kung: I'd like to contribute if possible someday 😊 lopopolo: Yay lopopolo: If you're thinking someday might be today (🤩), how does this ticket…
Pipes are a delightful feature in Elixir that you can use to pass the evaluation of an expression into a function. For example, the code below will output "Hello, world!" to the terminal: "Hello, world!" |> IO . inspect # "Hello, world!" You can use this to chain together different operations: "Hello, world!" |> String . reverse |> IO . inspect # "!dlrow ,olleH" And Elixir specifically substitutes…
Elixir , other than being an alchemical cure-all, does double duty as a programming language that's good for fast, resilient, parallel computing. It has all the syntactical charm of Ruby, with the power of an alien (actually Swedish, but close enough) technology. But why am I learning Elixir now, after so many years of Ruby? To understand why Elixir is particularly compelling to learn right…
Elixir is similar enough to Ruby to be familiar, but different enough to get tripped up by! Image by OpenIcons from Pixabay I've been working through Dave Thomas's fantastic book Programming Elixir 1.6 in hopes of using Phoenix LiveView, and it has been really interesting, coming from Ruby. A lot of syntax is familiar enough to be alluring, but unfamiliar enough to trip me up. For…
My homepage looks so lonely without a post that I thought I'd write something really quickly. It's been a long time since I wrote in a blog. I hope to jot down thoughts about a few of the things I've been working on lately here, including, but not limited to: Rust Elixir / Phoenix OS development ( https://os.phil-opp.com/ ) Ruby as I discover new, weird corners…