Opinions
Lazy Content
Opinions are the low-hanging fruit for an online presence. To avoid feeling that I haven’t conveyed these ill-considered, probably-shouldn’t-be-expressed thoughts, here are a few opinions and positions.
The content on this page can change at any time. It isn’t deceptive if I prune out a thought or change the wording, even if it wholly changes my position. My positions have changed over time, and I have no compunction adapting to new information or perspectives.
No opinions here are presented as absolutes, but instead these are the laziest expression of a position minus the nuance that every real-world situation and scenario presents. I hold most opinions loosely, and am constantly reassessing based upon new information and situations.
Being a coder — even a great coder — doesn’t make us an expert at all things. We should understand the limits of our knowledge, instead of believing we’re experts on epidemiology, governance, etc. Too often we get caught up in our own hubris and think that we can casually become experts in any domain given an afternoon of Googling.
Coding
-
Language idealism has very little correlation with productivity or effectiveness. Deeply imperfect languages, stacks, libraries, and implementations power most of our world. When finger hits keyboard it is the dedication to a goal and commitment to finding solutions that is the greatest predicate of success. Rust or Haskell or whatever is in favour have incredible advantages, but many winning solutions are built using deeply imperfect languages like C or PHP. You should choose the right tools, of course (I personally despise PHP with a fiery passion, though I have a reminiscent love for C), but we miss the forest for the trees when we assess the path to a successful project.
-
TDD in practice is often evidence of Trivial Development Disease, and is best practiced in the sort of make-work, robotic style implementations that should be pushed out of a template, redundantly replicating library features.
-
We face enough unknowns in most projects that we haven’t the slightest clue how we could test it at the outset, or even what the testable outputs would be. Having tests, ideally with 100% coverage, is ideal and of enormous value, but the TDD model of front-loaded tests is not compatible with novel development. It is a solution in theory that seldom solves anything in the real world.
-
Teams that operate as if all members are fungible cogs, with equal aptitudes, interests, and capabilities, are doomed to sub-perform.
Some people are in their element designing, some documenting, some focused on the small details, some cleaning and refactoring, some maintaining, some pushing the edges and setting directions. Some tasks have been correlated with unfortunate negative connotations — e.g. documentation and maintenance is destructively seen as lesser work, for instance — that make us pretend that it isn’t true, and the end result is usually everyone doing everything poorly.
-
Don’t sweat the up-front design too much because it’s unlikely to survive engagement with the unknown. Your first version will likely be very different from what you have in place a year down the road, and software development has never been a field where you are building an asset pile. More often accumulated solutions become a debt that we hold too close when we need to constantly reassess what parts “bring us joy” and jettison the parts that don’t.
-
When confronted with substantial problems we often focus on the trivial edges (the foundation of procrastination): Changing fonts, repositioning things, some new refactoring to replace some slightly repetitive code, adding code injection to swap out database platforms though you never will and could directly substitute in a fraction of the time, switching from one framework to another to another, changing simple loops to map/reduce patterns, etc. This often bites in big up front design when we spend an eternity refining the easy parts while the novel, high-value portion sits untouched. Eventually we confront the actual difficulty and realize that all that we had done was no longer appropriate or relevant.
-
A significant percentage of coding now is basically wiring (a less generous term would be “duct tape programming”). It’s how you can build a tremendously performant solution in an interpreted language like Python, given that a lot of solutions are just gluing together high performance libraries in the correct sequence and with the correct connections to yield a solution for a given problem. This is true even in cutting edge realms like machine learning, inference, and so on: The language we spend most of our time working in has shockingly little influence on the performance of the end result.
-
Motivation is overvalued. Discipline is undervalued. This post covers it pretty well.
If you want to vanquish procrastination, forget about the futile hunt for motivation, wasting time seeking the perfect emotional state, the perfect background music, the perfect morning routine, the perfect environment and setup and situation that will pull you through obstacles and, the belief goes, make hard work easy. When we pray at the alter of motivation we use any diversion from the ideal as an excuse to waste another hour, day, week, month, year. “I’m just not feeling it right now. I’m going to browse Reddit for a bit, have a nap, go for a drive, etc, and after I’ll be perfect. Until I won’t then I’ll distract myself.” Tomorrow, you promise, will be different, but it won’t.
Instead you need the discipline to simply force through the necessary work on the days when you might not feel into it. The former — believing that you need to focus on finding the right motivations — is the foundation of procrastination, easing you into wasting years while you hope for an idealized mindset to work on your goals. The latter is simply setting demands on yourself, denying yourself Facebook, Reddit, gaming, and all other distractions or rewards until you’ve put in the work.
Don’t feel like it today? Tough shit. Sit down (or stand, roll on a ball, whatever) and get to work.
Some people would call being your own toughest boss the necessary motivation, all of this just a play on words and definitions. Alright. Just don’t get caught in the futile quest for some external fuel when you can only make yourself do things, often against great personal resistance. And when you fail, blame yourself, and learn from it, don’t search for external scapegoats or “if only” explanations.
-
Software development is a great job and career, despite the many with negative prognostications: we often don’t realize what we have, and when we don’t have suffering we invent it or exaggerate minor inconveniences. Few careers offer the comfort and rewards, and potential for excelling individually. I personally don’t enjoy traditional type of roles (e.g. work in an office doing something for years on end, listening to boring HR pitches, etc), and that to me is the greatest career danger of software development: I’ve had stints in my career where years have gone by in a blink, a procession of marginally challenging tasks in meaningless projects for banal employers, that it just felt like a waste of the precious little life that we are granted. If the project isn’t important and rewarding, and the experience isn’t enjoyable, the money had better be fantastic or look for better engagements.
-
I had a whole section here on the presentation tier in web apps, heralding SPAs and client-side rendering. This despite the web framework world reinventing the wheel yearly for decades at this point, with marginally varied, but wholly incompatible, solutions ebbing and flowing. A big reason I was an advocate of such an approach was minimizing data throughput — once scripts and CSS and the rest is cached on the client, only tiny bundles of data needed to be passed between client and server, often fitting in a single TCP packet.
Of course in practice most SPA frameworks yielded the exact opposite, with absolutely enormous amounts of data being shared and an often glitchy and resource hungry client experience. But in theory an SPA could and should be extremely lightweight.
Regardless, while it of course depends upon the specific project, most recently I transitioned to Astro for this blog, building it to a completely static website while still using server-side components and flexibility. I am hugely impressed with this framework, and the fact that it uses Markdown/MDX with front matter for authoring perfectly mirrors the custom solution I planned on building.
-
AI is incredibly disruptive and exciting, and is going to yield tremendous change in many industries. The state of AI is already so far ahead of actual utilization, with many of the extraordinary techniques and capacities barely being leveraged in industry. Having said that, right now there is an enormous amount of snake-oil and smoke and mirrors where people are overselling a bit. LLMs, for instance, are fascinating, but a lot of the narrative around their expertise is built on pretty tenuous foundations, and lacks the knowledge of how they work and were built to understand what parts are, in effect, illusions. That illusion is extraordinarily useful and can be built into amazing solutions, but there are pointy edges and holes in the foundation that need to be carefully considered and built around.
Technology Platforms and Social Media Platforms
-
I’ve been a fan of Android since its first release, but if you’re adopting a smartphone today it’s hard to beat the iPhone. Apple has incorporated the best elements of Android (notifications, widgets, intents, freeze-drying of background processes, multitasking, larger handsets, etc), and largely abandoned many of the restrictive policies that it once plied or openly considered. Android has moved sideways as Google tries to find a way to make iPhone levels of money on the platform.
I went through the HTC Dream, Magic, Nexus One, GS2, GS3, GS4, Nexus 5, Nexus 6p, GS8, GS10, among others, before moving to the iPhone 8 then XR, 11, 12 Pro, 14 then 15 Pro as my daily driver. The iPhone is a faster device, the software is better quality, security and user privacy are much more pervasive, depreciation and continued utility over time is much more reasonable, and you have access to all the same great Google services without your platform being beholden and open to them. Given that the Android market has basically become the Samsung market, you’ll also avoid the split-brain of Samsung trying to foist their duplicates of every Android application and service.
Android is huge and isn’t going anywhere, and is also a great platform (with some advantages and some disadvantages), so choosing one or the other isn’t going to lead to a destructive hegemony and there really isn’t a need to be a platform activist for any industry health reason.
-
The whole Android ecosystem has gone nothing like I expected. Instead of having a vicious fight on the processor side yielding excellence and dominance — with OMAP fighting with Tegra fighting with Snapdragon fighting with Exynos — the field has narrowed down almost exclusively to a less than impressive Snapdragon and a withering Exynos. Outside of that there are a few firms deploying stock ARM cores (e.g. Mediatek - ARM makes great core foundations, but it limits the amount of competitive innovation). It is pretty remarkable when the clear chip innovator continues to be Apple, who arguably has the least need to do so. The most chip innovation in the Android space started recently when the US started embargoing companies like Huawei, leading to their rapid development of pretty formidable technology.
Instead of handset makers doing innovative, novel things, we have a hundred minor variations on an identical theme. Which I guess was inevitable with a maturing market.
-
On the pad side it is more absolute: Don’t waste your time and money on anything other than an iPad for home use. If you’re tempted by the cheap knock off Android thing at the local ShopMart (even from makers like Acer or Asus who are still heaving quickly abandoned junk loaded with crapware over a wall), just save your coffee money for a couple of weeks and upgrade to the iPad. Google essentially abandoned this market, and in every way the iPad is a better choice unless you plan on using emulators or something else the platform doesn’t support.
Even though our smartphones have gotten bigger, pads are still a great nice to have for casual at home use, not least because it avoids premature wear on our precious smartphone batteries. Grab a bluetooth keyboard and it’s a complete computer for what many people do now (e.g. Facebook, websites and web apps, read the news and some books, and as an RDP client to a desktop).
The one major iPadOS deficiency I must note is the complete lack of multiuser support. In an ideal world there would be family pads that each user could authenticate to with their own isolated ecosystem, but this is something still unsupported on Apple iOS/iPadOS.
-
I’m rocking a series 5 Apple Watch1. I’ve fallen pretty deep into that ecosystem, with my day now dominated by a MacBook Pro, Apple Silicon Mac Mini, iPhone 15 Pro, iPad Pro, Apple TV, and now my smartwatch is an Apple Watch — the halo effect at work. The cardio features drew me in when I started dealing with some chronic high blood pressure.
Overall I’m very pleased with the device. It is polished and full-featured and wonderfully integrated with the ecosystem, including unlocking my MBP when I sit at it, though the battery is what I consider the biggest downside of the device. I don’t take it travelling, as it’s yet another battery to manage, with yet another oddball charger, and with an 18 hour battery life it’s just too much babysitting.
The battery life is the single downside I would note for most users, however. For my children I bought some fitness bands and alternative smartwatches, primarily because a number of competitors offer weeks of battery life, yet with largely the same core features. My children, like most, aren’t super awesome at keeping their devices charged, and the single-day battery life of the Apple Watch is just too much of a burden.
Apple keeps talking about lighter and thinner, but the biggest improvement they could make with their Watch is a multi-day battery life. The devices are thin and small enough, guys.
-
Windows remains a fantastic platform for development and is my work platform of choice when not using macOS (which, admittedly, has been taking more and more of my development time). Don’t let anyone grief you about using Windows. For XCode development I primarily lean on an AS Mac Mini, which absolutely blows me away in its effortless performance. I am very much looking forward to what comes next in Apple Silicon. On the go I use an MBP.
My standard desktop work situation right now is a loaded-up M4 Mac Mini as my primary, with a Windows nvidia-equipped tower under my desk. I spend the day Remote Desktop connected to the Windows boxes for Windows-specific work, along with an SSH connection directly to WSL2. And of course I have a variety of cloud instances that I usually have terminal sessions opened to.
-
I used to despise macOS (the artist previously known as OSX): the performance on the old Mac Mini with a 5400RPM magnetic disk was atrocious. Windows made better use of anaemic storage speed making the macOS device feel absolutely glacial in comparison. Using it felt like stepping back in time. With a fast SSD, especially the ridiculously fast storage in the new Macs, and it is an entirely different beast. I’ve actually come to like it quite a bit, and regret harsh words I might have dropped regarding it. I hope it forgives me. Getting accustomed to the common shortcuts made working with the OS much more intuitive.
-
The overweight yet “minimalist” text editors that have become the rage (e.g. VS Code, Atom), are suboptimal. Use a real IDE, even if you have to pay a couple of dollars for it. I’ve become partial to the various JetBrains tools (e.g. IDEA, CLion, GoLand, PyCharm, etc), and am a heavy user and fan of Visual Studio and XCode.
-
Microsoft Edge is a pretty decent browser, and is currently my daily driver across all my devices (Windows, macOS, iPadOS, iOS). To make it usable you have to disable a lot of the scumware nonsense they ply it with, such as “coupon finders” or purchase trackers, but when configured it is a great browser with some fantastic usability benefits over the base Chromium. It also gives you a bit of distance from Google’s all-seeing eye, at least creating silos of privacy invasion instead of one giant pile.
-
I grabbed an nvidia Jetson Nano to control, record, and provide services for a couple of IP security cameras. It works absolutely gloriously. The simplicity of patching together some gstreamer processes, recompressing, running neural networks on the sharpened and cleaned images, etc…just brilliant. I’ve gone through a lot of embedded/development kits before and this is the first one that truly delights me, offering so much headroom and capacity that I’ve yet to hit its limits. I hung a fat magnetic drive off it for persistent storage, and a small SSD for processing storage, and it works marvelously. It has just perfectly, and silently, worked with zero problems.
-
Developers are, as a group, a profoundly cheap bunch. It’s a problem. If you have a legitimate freedom reason for choosing gratis products that’s commendable, but many do it simply because they’re too cheap to pay a penny for development or other tools in our life, tolerating enormous inefficiencies for imaginary savings.
Optimize your own life and productivity and use the best tools, not just the ones that are free (as in beer). My current subscriptions are many, including the entire Jetbrains suite (absolutely fantastic tools), Visual Studio professional, Office, the Adobe suite — it’s surprising how often we have a quick graphical need, even if it’s just to convert a picture to an SVG — and countless small utilities. I’m a paying user of Logic Pro. I’m a member of the Royal Ontario Museum, the Art Gallery of Ontario, the zoo, the Bruce Trail, and my local conservation authority. I subscribe to Anthropic and Google AI. In the grand scheme of things these are all very small expenses, but they add considerably to my productivity, personal state of mind, and creative enterprise. It supports a healthy environment around the tooling and the culture of our lives.
-
I recently setup a LinkedIn account, having deleted my last account probably a decade ago as I found it served no professional value for my situation, at the request of an investor that wanted it as a communications medium. The site is still full of such comical peacocking. In the era of AI, everyone on the site is trying to not only show that they’re with it, but that they’re actually ahead of it, so the site is just endless cycles of “current thing is old and lame, and Next Thing is awesome and I saw the website and ergo ipso sum am therefore an expert”. There isn’t a lot of value in that.
It remains absolutely shocking how much PII people publish on LinkedIn for every rando to consume — the sort of information that only the absolute closest to us used to know — and treat you with suspicion if you refuse to share your entire life history like them.
-
I tried to get into Twitter years ago but found the experience extremely unrewarding. Musk’s mismanagement and childish antics make people reminisce about a Twitter that never was: Twitter was always hyper-toxic, did absolutely nothing to inform or educate, and was algorithmically designed to anger and push people further apart long before Musk took over. 140 characters was perfectly designed to be useless for discourse but excellent at fomenting disagreement and misunderstandings.
Elon Musk is Twitterstein’s Monster. He is the perfect example of Twitter-brain, and it is perfect harmony that he purchased the platform.
Food and Drink
-
Grind arabica coffee beans with a cheap spice grinder and toss your desired quantity — determined through trial and error — into an insulated French press. If it isn’t insulated that’s fine, I just find that uninsulated French presses leave you with lukewarm coffee after even a short seeping session. Add just under boiling water and leave for a couple of minutes. This gets you 96.5% of the way to perfect coffee, and despite seeming artisanal —- e.g. “don’t have time for that” -— takes seconds of effort and is easily incorporated into the busiest schedule. I’ve made my coffee like this for years now.
No filters. No pods. The only daily price is the beans which I then can focus on getting the best (for my tastes). No waste but some wet coffee grinds that go in the compost.
If you are using a spice grinder, occasionally toss in a couple of rough chopped hazelnuts with the beans for a wonderful delight. Probably shouldn’t do that if you’re using a burr grinder though.
-
It’s amazing how easy a great pasta, pulled pork, roasted chicken, or “gourmet” grilled cheese is (mustard and ripe fresh tomatoes on a nice ciabatta bread with old cheddar…just glorious). These incredible little spice-of-life things are so achievable by everyone, but whole generations like mine largely went without even the absolute basics of culinary skills.
Learn the basics because the basics are 95% of great food. It really is amazing what is achievable with ease.
-
Every kitchen needs a good set of knives. I go with the Henckels’ Twin Signature line, and it makes for meditative moments precisely chopping some green peppers, etc. Knife sets are one of those things where people underspend incrementally, buying a bunch of low-quality single purpose junk that clogs up their drawers, and spend more and more buying replacements. Eventually they’ve spent more for less. Just buy a knife set of good quality. The same theme goes for pots and pans…just get good stuff.
-
Subscribe to Michael Pollan’s advice on eating: “Eat food. Not too much. Mostly plants.” Focus on the perimeter of the grocery store and avoid the centre aisles filled with processed food. Eat lots of fibre and avoid simple carbohydrates unless you have a lifestyle that can handle them2. Eat carbs like vegetables and whole grain breads, just not super-processed carbs that become a massive glucose spike.
-
Understand that the “wellness” industry absolutely dwarfs the pharmaceutical industry. YouTubers pitching garbage powders or must have supplements do you absolutely no favours. In most cases they are grifting off of your fears.
Life
-
I’ve had social anxiety for as long as I remember, and moderate general anxiety. Anxiety medication has a profound effect on this: while many medications have debatable efficacy, there is no question regarding the overwhelming effect of anxiety meds. One unexpected effect is that it made me more “liberal”. Irrational fears about remote chances or risks — and overreactions to them — and a tendency to view other people uncharitably (always sure of bad intentions, or overly focused on the possibility of being made the fool or being taken advantage of in some way) have dramatically reduced.
Anxiety is something that we all suffer with, though to dramatically different degrees: the butterflies someone feels giving a presentation to the local user’s group isn’t the same as the overwhelming fear someone else might have calling a pizza order line. For me this anxiety was absolutely debilitating, and made me repeatedly make self-sabotaging choices to avoid anxiety triggering situations, sometimes destroying enormous opportunities if it required as little as a phone call.
-
My fitness band has a target of 10,000 steps a day (as an update, now I use the three bands of the Apple Watch where it motivates you to ensure you regularly get up and about, and in my settings have at least 630 kcal of active movement, and 30 minutes of exercise, which in an average day usually does coincidentally yield about 10000 steps). For many occupations that isn’t a lot but for software developers it’s easy to fall far short and default to an overly sedentary existence. But I always manage to hit the goal, and feel great doing it. Some laps around the yard, impromptu walks down the street, or just pounding out a couple thousand steps on the elliptical. It is great to have a steady goal like that to ensure that days don’t go by with the basics of good health being skipped. It also made me hop up from the computer more often to get little bursts in to ensure that I don’t leave too much for the end of the day.
It’s a low bar to set, and I hit the gym as much as I can, but it does help elevate the worst case days where I’m head down in the code and time just rolls past.
-
After switching to an Apple Watch I set the target to “moderate”, which for me is 30 minutes of exercise a day, 630 active calories, and getting up at least once and for a minute per hour at least 12 times during the day. It’s a really well thought out target, and in the end I’m usually somewhere around 10,000 steps, albeit with a more diverse, broad set of activities to get there.
-
Move on when it’s time to move on. I have few regrets in life, but they are dominated by being in situations that were no longer rewarding, yet continuing because it’s easier to just keep doing the same thing than change. In my case this was specifically jobs where there was no challenge left, no enjoyment in the situation, and no personal fulfillment, but I kept showing up, sometimes for years on end.
-
…But don’t move to the countryside unless you’re sure it’s right for you. We moved to a house maybe twenty minutes outside of the city and it was, in retrospect, not the best lifestyle choice. Suddenly doing anything required lengthy drives. The miles quickly accumulate on vehicles, and with four children everything becomes a giant hassle. Once kids are old enough to have jobs (of the normal kind teens want to engage in), the cost of the commute eats most of their wages and drains their initiative. School is a forty-minute bus ride. Ticks, mosquitoes, mice, and every other countryside delight. Spring is a delight, but there is about a three day period before black flies start swarming, and once the black flies start fading away, mosquitoes and deer flies are out in numbers. A constant Sisyphean cycle of lawn maintenance. Rural roads with zero excess space on the sides, and an endless procession of cars on their miserable commutes driving far too fast…I walked far more when we lived in the city proper. The period we spent in the rural ex-exurbs was time that would have been better spent in a more built-up area, with more amenities nearby. We moved back into a proper suburb and what a glorious improvement. Being able to actually walk to amenities is such an incredible luxury.
As another in the country vs the city difference, our well water in the country was five-stage filtered and UV light treated, but one incredible difference I’ve noticed back in the city is that municipal, chlorinated, fluoridated water means that everything — laundry, dishes, even people — stay cleaner longer.
-
Be charitable. Assume the best of others. Reassess and rebase when you predict negative behavior and instead see positive behavior (it will gradually retrain your propensity to assume the worst), and eventually you won’t be tuned to only pay attention to negative actions. Don’t engage with negative people unless there is significant reason. It likely isn’t worth your attention or focus.
-
Relax. Breathe. Smell the roses. Live the moment. Don’t seek out negative experiences, arguments, or define yourself by your dislikes or negative emotions. Don’t intentionally seek out venues to argue, or worse venues where the group is defined by negativity.
Footnotes
-
This model is now six years old(!), yet it still works superbly. I’ve eagerly awaited every newer variant, but thus far none have offered a compelling story to bother upgrading. If they come out with a variant with a multi-day battery life that isn’t an enormous Ultra, I’ll be first in line ↩
-
If you’re about to go play three hours of high-intensity soccer or some other high-activity sports, carb loading with simple carbs is perfectly fine. If you’re instead eating a bag of chips while watching a movie, that isn’t great. ↩