Results: 71
-
Microblog
2022-08-27 00:00
This page serves as a simple index of all my microblog posts. This list should be roughly equivalent to searching for the #microblog tag.
If you're looking for my longer #blog posts see 201610270000 Tech — Work — Ramblings.
- 202412191631 Bluesky
- 202412181227 Bartosz Ciechanowski and the promise of the web
- 202411192241 Two cool tools
- 202410220101 The Final Edition of Embedded Muse
- 202410201110 Engineering Multi-classing
- 202408250920 1BRC in rust in depth
- 202408220939 Go is not worth it
- 202405051458 Mobile Content Width
- 202405051251 Timeout Killer
- 202405021450 Ideating
- 202404232122 Masonry Layout CSS
- 202404232120 Hell yeah NASA
- 202208270311 Up too late
-
CodeMash 2020 - Review
A More Formal Report on a Conference
2020-04-01 00:00
A review of the sessions I attended, what I learned, and how I liked the overall experience of CodeMash 2020.
-
Making a Fitbit Sense Watch Face
Time for a Better Watch
2022-05-01 00:00
There are a lot of good first- and third-party watch faces out there for the Fitbit Sense, but none of them are exactly what I want.
-
The value of a great tech stack
Non-technical reasons to have a great tech stack
2022-08-13 09:54
I’ve been doing some thinking lately about how much value to place on a great tech stack. There are two lenses in particular that I’m looking at this through: value to a product organization and value to the individual engineer as a measure of the desirability and enjoyment of working there.
-
Tech — Work — Ramblings
2016-10-27 00:00
#blog #work #ramblings #tech #microblog #structure
This page serves as a simple index of all my blog posts. This list should be roughly equivalent to searching for the #blog tag.
If you're looking for my shorter #microblog posts, see 202208270000 Microblog.
- 202411302359 Advent of Code 2024
- 202208010000 Making a Rust Roguelike
- 202206171206 Delivery Performance vs Value Delivery
- 202205150000 Learning Rust
- 202205010000 Making a Fitbit Sense Watch Face
- 202109150000 Idea Gardening
- 202109010000 Prototype Expand Consolidate
- 202108010000 Designing for Big Screens
- 202107150000 Working in Public
- 202107010000 Unifying My Domain
- 202106010000 Rewrites Are (Almost) Never the Answer
- 202105010000 The Silent Majority of Engineering
- 202009010000 The Only Correct Way to Organize Code
- 202007010000 2019 Work Reads
- 202006150000 Gestalt Principles of Design
- 202006010000 Revamping My Blog
- 202004010000 CodeMash 2020 - Review
- 202001080000 CodeMash 2020 - Live
- 201911150000 What React and Kubernetes Teach Us About Resilient Code
- 201810010000 Development Estimates
- 201809010000 Piping Code With GitLab CI
- 201808010000 Cloud Native Computing
-
The Silent Majority of Engineering
A Bit of Perspective
2021-05-01 00:00
Most engineers aren't using all the new shiny tools. Most are quietly coming to work every day, writing code in tried and true ways, and getting things done.
-
Idea Gardening
An Organic Process for Developing Thought
2021-09-15 00:00
Idea gardening is the practice of sitting on ideas so that they can germinate on the back burner of your mind.
-
Revamping My Blog
A New Coat of Paint
2020-06-01 00:00
You may have noticed that the blog got a new look and feel recently. The changes weren't purely cosmetic though. Let's take a look at how I migrated from a Bootstrap and PHP based blog to React, Next.js, and Styled Components.
-
My Brand New Blog
An Exercise in Futility?
2016-10-28 00:00
Maybe it's the infinite hubris of a millennial or maybe its just that I doubt anyone will actually read this, but I found a few reasons to convince myself to do it anyway.
-
Advent of Code 2024
A season of code
2024-11-30 23:59
#structure #blog #tech #project
We're back for another year or saving Christmas through the power of programming.
-
Making a Rust Roguelike
Making a Game Out of Learning
2022-08-01 00:00
In the process of learning Rust, I'm following a great tutorial for building a roguelike game.
-
Have fun and be terrified
2024-08-22 20:21
Have fun and be terrified. I can do that.1
On quitting your job and striking out on your own, or more broadly, daring to do something and put your skin in the game #wip
-
Suresh, N. (2024, August 21). Quitting My Job For The Way Of Pain [Blog]. Ludicity. https://ludic.mataroa.blog/blog/quitting-my-job-for-the-way-of-pain/ ↩
-
-
Working in Public
A Way To Be More Open
2021-07-15 00:00
Finished things don't spring up out of the ground in their final state — people have to work hard on them. This is my way of pulling back the curtain on how I work.
-
Advent of Code 2024 Day 03
Mull It Over
2024-12-03 00:00
Today we're visiting the toboggan rental shop from 2020 day 2 and need to help the elves with corrupted data in their computers.
-
Prototype Expand Consolidate
A Method for Building Maintainable Systems
2021-09-01 00:00
Today we look at an efficient, sustainable engineering loop — prototype, expand, consolidate.
-
Cleaning Out the Skeletons
An Effort to Put My Best Foot Forward
2016-12-01 00:00
Growing up at the start of social media has its downsides. Today I talk about cleaning up my online presence.
-
Advent of Code 2024 Day 05
Print Queue
2024-12-05 00:00
Today we found the printer from 2017 day 1 and need to help sort it out.
-
Advent of Code 2024 Day 10
Hoof It
2024-12-10 00:00
Today we're back at the Lava Production Facility from 2023 day 15 helping reindeer find the best hiking routes around their floating island.
-
Piping Code With GitLab CI
A Simple Way to Make Your Life Easier
2018-09-01 00:00
I finally got around to adding continuous integration pipelines to my personal projects.
-
Advent of Code 2024 Day 08
Resonant Collinearity
2024-12-08 00:00
Today we're visiting the roof of a top-secret Easter Bunny installation and need to put a stop to their plot to get people to buy Easter Bunny brand Imitation Mediocre Chocolate as a Christmas gift.
-
Advent of Code 2024 Day 04
Ceres Search
2024-12-04 00:00
Today were visiting the Ceres monitoring station from 2019 day 10 and helping the station chief solve her word searches.
-
Advent of Code 2024 Day 02
Red-Nosed Report
2024-12-02 00:00
We've made it to our first location in our search for the chief elf historian, the reindeer reactor from 2015 day 19. The reindeer need some help finding out which series of readings from their reactor are safe.
-
Designing for Big Screens
An Experiment in Adding More
2021-08-01 00:00
I've always wanted to see what was possible on the web when we use all the space we're given. Today we look at my take on how to add more for those who have the extra real estate.
-
Advent of Code 2024 Day 09
Disk Fragmenter
2024-12-09 00:00
Today we're back under the sea with our amphipod friends from 2021 day 23 and need to help one of them defragment their hard drive.
-
Willful ignorance of reality in organizations
2024-08-22 08:51
In organizations, there's a tendency for people at higher levels or in roles further removed from the "doing" of a project to be vague to the point of harm. Some (bad) managers want something done and want other people to deal with how that gets done or indeed whether or not it's even possible to do it.
[I]t boils down to a psychological distance from the fact that true reality exists, and that someone lower status has to handle it.[^suresh2024pain]
I see this frequently in the interactions between (bad) product managers and engineers. The PM has an idea or a requirement to build something that they don't inspect closely or take the time to understand the reality of that idea. They don't understand what it would take to build it, what it would feel like to use, or whether it's a good idea once faced with all the edge cases involved. The idea of doing all that work is either too challenging or demeaning to these bad actors and it ends up falling on the individual contributor who actually produces the work output to solve these problems.
I've alternatively called this "compression of reality" and "where the rubber meets the road" to show that engineers don't have the luxury to hand wave or be vague when writing code. They have to specify — in exacting detail! — how it all works.
-
The abyss gazes back
2024-08-23 23:59
He who fights with monsters might take care lest he thereby become a monster. And if you gaze for long into an abyss, the abyss gazes also into you.[^nietzsche1886]
Firstly, we must not fall into the mindset or actions of the things we’re examining when studying evil, immorality, or even lesser undesirable things.
More abstractly, there’s a danger of being absorbed into the thing that you “gaze at.” This can apply to academia and learning for learning’s sake, where we lose sight of reality, purpose, or reason.
It also works to illustrate that merely observing something is not a totally detached process. It’s not possible to completely detach from the observed phenomenon. The mere act can change you and affect you in unintended or undesirable ways.
Lastly, it speaks to the dangers of romanticizing things that should not be: depression, abnegation, loneliness, and more. If I allow my mind to spend time gazing into depression for instance, I’ll be swallowed by it. 202408221304 Desolation tries to colonize you.
We can call the depression void-gazing. Everyone does it sometimes, but step two has to be wrenching your gaze away from the void and doing something. There's nothing in the void but more void and the curse[^suresh2024angry]
-
Optimal line length for readability
2022-07-06 16:26
The optimal line length for readability on a screen is 50-75 characters.1
-
Scott, E. (2022, May 10). Readability: The Optimal Line Length – Articles. Baymard Institute. https://baymard.com/blog/line-length-readability ↩
-
-
Advent of Code 2024 Day 01
Historian Hysteria
2024-12-01 00:00
This year finds us helping elf historians track down their chief historian who has gone missing and needs to be back for the sleigh launch on Christmas. Today we're comparing lists of numbers for historians.
-
Rewrites Are (Almost) Never the Answer
A Difference Between Desire and Reality
2021-06-01 00:00
Rewrites are tricky to get right. Despite how often we're drawn to them, they're almost never the right solution.
-
Advent of Code 2024 Day 07
Bridge Repair
2024-12-07 00:00
Today we're visiting the rope bridge from 2022 day 9 and need to help the elves repair it by sorting out there test calculations.
-
Advent of Code 2024 Day 06
Guard Gallivant
2024-12-06 00:00
Today we visit the suit manufacturing plant from 2018 day 5 and need to avoid creating time paradoxes by hiding from the guard.
-
Shades of Self
A Look at Who We Are
2018-05-01 00:00
A rambling, philosophical look at how we exist as distinctly separate individuals in different situations.
-
First Reactions to React
A Review of Building My First React App
2018-06-01 00:00
We're moving our corporate site in house and I thought it would be the perfect time to try out a new javascript framework.
-
Architecting a More Modern System
A Look at Microservices
2018-07-01 00:00
Making the move from one monolithic service to many microservices can be a complicated process. Here are some reasons why we decided to make the move anyway.
-
2019 Work Reads
A Slew of Short Book Reviews
2020-07-01 00:00
My professional reads from last year, rated and reviewed.
-
Advent of Code 2024 Day 11
Plutonian Pebbles
2024-12-11 00:00
Today we're visiting the ancient civilization on Pluto from 2019 day 20 and find some interesting physics-defying stones.
-
Think week
2021-10-23 14:33
Popularized by Bill Gates, a think week is a week spent in solitude, focused on thinking.1
The purpose of a think week is to remove distractions and stimuli that will detract from our ability to think deeply on topics and ideas for an extended period of time. A think week can include books or other information sources but shouldn’t include distractions like social media, TV, and the like.
Seclusion, solitude, peace, quiet, light exercise, simple healthy food, and simple living arrangements focused on the environment are all conducive to effective think weeks.
Similar to, but more deliberate and less frequent that 202304112203 Ten percent time.
-
Runaway Suitcase. (2019, June 18). How to do a Think Week Like Bill Gates. Runaway Suitcase. https://www.reservations.com/blog/resources/think-weeks/ ↩
-
-
Delivery Performance vs Value Delivery
2022-06-17 12:06
An alternate title for this essay is The "How" Matters.
I want to talk more about performance — the act of executing, building, delivering, how our team works together and with other teams, and how these stack up against our potential.
I don't want to stop talking about product value — the product, its value, our direction, how we choose what to build, or if what we built was valuable or not.
I just want to additionally talk more about performance.
Here's the way we typically talk about the product, its value, and our performance.
At an individual level you know if you’re doing a good job based on how effectively you’re contributing.
At a team level you see if the things the team built were valuable over a longer period of time.
Directors and executives plan for years out and it can take a long time to get feedback about the value of their decisions.
Therefore, we can’t know as easily or quickly if leaders (or groups of people as a whole) are doing a good job over these long, ambiguous timelines
See 202104291527 Live in the ambiguity and 202104291528 Leaders have to accept a slower feedback loop for more support of this position.
-
Gestalt Principles of Design
A Crash Course on the Whole
2020-06-15 00:00
Today we're looking at 'die Gestalt', the result of early 20th century studies in psychology that described how humans perceive the world, and how it can help us make outstanding user interfaces.
-
Types are not a substitute for tests
2022-08-11 22:28
Type systems cannot and should not be viewed as a replacement for testing. Types cannot ensure that the code you wrote produces the actual outcome that you want it to. Tests on the other hand, can be used to verify and maintain that correctness.
Tests can never provide an unbroken chain of checks, from the database all the way to the frontend React props, guaranteeing that all of the data has the right shape [emphasis mine]. Types can't (usually) tell us when we accidentally put a "!" in front of a conditional. Focusing on one or the other means sacrificing quality, work efficiency, or both.1
Conversely 202208112226 Tests are not a substitute for types.
-
Bernhardt, G. (2020, April 13). Execute Program. https://www.executeprogram.com/blog/are-tests-necessary-in-typescript ↩
-
-
CodeMash 2020 - Live
An Informal Report on a Conference
2020-01-08 00:00
Live blogging from CodeMash 2020
-
Freedom and Responsibility
2024-07-01 09:52
People must have the freedom to act and the responsibility to act wisely. Without the freedom to act, responsibility is pointless; the system decides what actions can be taken and the responsibility or lack thereof for those actions is vested in the system, not the individual. Without the responsibility to act wisely, the freedom to act is risky and unfair; consequences for those free actions have to be upheld, both positive and negative; accountability for outcomes and whether the act was taken with proper consideration lie on the free person.
Note that this doesn't mean that we all have to be risk-averse. Just because you are responsible for your actions, doesn't mean we have to exact painful consequences. We can create a culture that gives freedom, demands responsibility in return, and then is benevolent with punishment for bad outcomes. If the action was taken in good faith — responsibly — and didn't work out, we can accept that as one of the tradeoffs for the other benefits we gain from FNR. If someone makes an honest mistake, they don't need to be shamed, hurt, or expelled. In fact, this honesty and transparency about outcomes combined with the lenient forgiveness of failure is what drives true freedom to do, build, create, innovate, and achieve.
-
Lightning Talks
A Great Way to Teach and Learn
2018-05-15 00:00
Lightning talks are a great way to share knowledge in your organization. Here's how to get started and get everyone to love them.
-
The great stagnation
2021-10-22 09:05
The 202110220859 Utilization adjusted total factor productivity of the US from 1947 through 1972 was 2.1%. Since then it decreased until the dotcom boom in the late 1990s and early 2000s. In 2005 though, the rate plummeted and has been a paltry 0.17% despite a rapid rise in the rate of scientific and theoretical technological progress.1
One lesson to take from this is that science alone isn't enough to end the stagnation. We need science to be applied to goods and services that affect the general public before we'll see a new period of sustained growth.1
One way to understand the forces at play here is to study 202110220853 Second-order thinking and make predictions about what technologies are capable of making an impact on the general public in the next 10 years or so.
-
Dourado, E. (2020, December 31). Notes on technology in the 2020s. Eli Dourado. https://elidourado.com/blog/notes-on-technology-2020s/ ↩ ↩2
-
-
PARA Method
2021-09-07 16:20
A universal system for organizing digital information.[^forte2017]
Projects
Series of tasks linked to a goal, with a deadline
- Complete app mockup, develop project plan, execute business development campaign, write blog post, finalize product specs, attend conference, etc.
- Goal has to be achieved (completely checked off at some point) and has a deadline
Areas
Spheres of activity with a standard to be maintained over time
- Health, finances, professional development, travel, hobbies, friends, apartment, car, productivity, direct reports, product development, writing, etc.
- Standard to be maintained with an indefinite end date
- Areas for me are hierarchical. All projects must belong to an area and all tasks may belong to a project, but must belong to an area.
Resources
Topics and themes of ongoing interest
- Habit formation, project management, transhumanism, coffee, music, gardening, online marketing, SEO, interior design, architecture, note-taking.
- I use resources as my reference manager. For this reason, transient items like projects, areas, and tasks should reference resources and update them with relevant information that comes out of the doing of the item.
-
Development Estimates
A Different Take on a Contentious Practice
2018-10-01 00:00
How to get value from development estimates and why I've learned to love them.
-
Tests are not a substitute for types
2022-08-11 22:26
Tests cannot and should not be viewed as a replacement for a type system. Imagine needing to test all function arguments against all permutations of possible variable types in a dynamic language. It's certainly possible, but it's not done in practice and would bloat your test suite immensely. Instead tests should be used to verify the code under test is logically correct and produces the intended outcome.
Tests can never provide an unbroken chain of checks, from the database all the way to the frontend React props, guaranteeing that all of the data has the right shape. Types can't (usually) tell us when we accidentally put a "!" in front of a conditional [emphasis mine]. Focusing on one or the other means sacrificing quality, work efficiency, or both.1
The constraints, invariants, and information encoded in type systems also serve more purposes than just ensuring things like correct usage. They also serve as documentation and communication mechanisms about intent.
Conversely 202208112228 Types are not a substitute for tests. These two systems need to be used together to achieve the best outcome.
-
Bernhardt, G. (2020, April 13). Execute Program. https://www.executeprogram.com/blog/are-tests-necessary-in-typescript ↩
-
-
Timeout Killer
2024-05-05 12:51
Timeouts and Cancellations for Humans
Nice article on the difficulties of actually doing timeouts correctly. And an idea for a malicious endpoint that returns 1 byte every second or so for the same request to keep poorly coded timeouts from triggering.
-
Cloud Native Computing
A New Way to Build
2018-08-01 00:00
First Salesforce revolutionized IT with SaaS, then other service platforms extended those ideas for the full stack. Cloud Native Development is here to stay.
-
Second-order thinking
2021-10-22 08:53
Second-order thinking is the process of going beyond the immediate impact of a decision or event.
For example, if the USA shifts to renewable energy and electric cars in the 2020s, we'll have no need to be allied with Saudi Arabia anymore. This is a first-order consequence. Going further, we can see that things like a Saudi-Iranian war or general instability in the middle east could come from the dissolution of that alliance. Take it another step — if China and other East Asian cultures aren't able to modernize to renewable energy and electric transport in a similar time-span and the middle east's oil production is destabilized, then their economies could be disrupted. The possibilities in that event are vast and wide-ranging.[^dourado2020]
Here’s the thing about electric cars: they are better than regular cars. They have lower fuel costs. They have fewer moving parts and thus lower maintenance costs. They have higher low-end torque and faster acceleration. If you mainly drive to and from work and have a charger at home, you never have to stop for gas. Electric cars will win because they are better, and the shift will happen suddenly.
A list of specific 202211020929 Second-order thoughts about the 2020s.
-
What React and Kubernetes Teach Us About Resilient Code
A Similarity Among Widely Different Tech
2019-11-15 00:00
A brief intro to control theory and declarative programming
-
Masonry Layout CSS
2024-04-23 21:22
Help us invent masonry layouts for css grid level 3
I remember getting this working in ~2013 with flexbox columns, but I had to do a complicated interleaving operation to make the sequence correct from left to right then top to bottom. Cool to see this happening finally.
-
Abstractions and future-coding are actively harmful
2022-04-03 10:33
Abstractions and future coding are the single greatest cause of convoluted, complex, unintelligible, inflexible, and unusable code.
“Saving typing” is the most inane excuse for any piece of code to exist. It’s completely divorced from any measure of why that code is good or bad.
Future coding is gambling and dictated by random chance.1
-
Sylvan, S. (2013, August 16). The Perils of Future-Coding [Blog]. A Random Walk Through Geek-Space. https://www.sebastiansylvan.com/post/the-perils-of-future-coding/ ↩
-
-
Bartosz Ciechanowski and the promise of the web
2024-12-18 12:27
Bartosz Ciechanowski's blog is one of the best blogs or even websites at all on the internet. His explanations of interesting things from first principles is a master class on teaching and learning. The amazing visualizations are simple, no-dependency javascript files utilizing WebGL and other modern web tech. The markup is clean, and despite each article being lengthy with interactive visualizations, runs on my phone without breaking a sweat.
This is what the web should be. This is how technology can enhance education.
-
Architecture Decision Records
2022-04-02 12:18
An Architecture Decision Record (ADR) is a document that captures a decision, including the context of how the decision was made and the consequences of adopting the decision.[^blake2020]
While the name implies that these would be used for mainly architecture level decisions, many people advocate for using them for nearly any decision, no matter how mundane.[^blake2020][^perkins2020] The purpose of recording as much as possible is to facilitate the 202110231449 Externalization of knowledge for software projects and product organizations. (202110231440 Knowledge is the backbone of a product organization)
ADRs are beneficial because they enable persistence and transfer of knowledge. They’re a great example of the 202110231445 The SECI model of organizational knowledge in action. They take 202110231457 Tacit knowledge and transform it into 202110231459 Explicit knowledge
ADRs can be used proactively to propose changes, or retroactively to record decisions that were already made.
My experience with ADRs has been split across two levels of use.
- Organization-wide — Valuable to an extent, but can be used poorly to push things that shouldn’t be approved under the guise of seeking wide consensus. The important thing for these to work are having good, competent coworkers and/or to have people who are not afraid to actively dissent in a widely public forum. They can be an invitation for people to engage in costly bike-shedding or an indispensable log of the collective mind of a group. Which side of this your group falls on is hard to tell and requires some radical candor to identify.
-
Project structure notes should answer a question
2021-07-29 23:12
Ask a question to start a knowledge project. This could be as simple as focusing your interest to an area worth reading, exploring, and adding to the Zettelkasten. Or this could be something as final as the thesis for an article, essay, paper, blog post etc.
Once you have your question to focus your project, answer it with the standard workflow while making sure to do your thinking inside of the structure note for that project.
Conversely, there are good structure notes that are organizational in nature. They implicitly ask the question "what do we know about this topic?" but they are not "project structure notes" as described here. They aren't about a specific project to learn research, learn, or develop ideas.
-
Teams exist for a reason
2021-08-19 10:25
Teams only exist because something needs to be done by that specific team. It's clear from this perspective that 202104291524 Execution is the priority of team management because without execution, we could never be addressing or fulfilling the reason that the team exists.
We could always have a new VP tomorrow - and that the VP's first order of business could be asking, "why do you have so many people here and how do I know they are doing the right thing?"1
It's not sufficient to simply 202106221152 Define success for a team though. It's also important to 202108191029 Measure what you do to ensure that your purpose is truly being fulfilled. It's possible for the team to perform excellently while working on the wrong things.
Another reason that teams exist at all is because 202202011405 Teams abstract individuals over time. Our purpose — our raison d'être — isn't important enough if we don't want to safeguard against its failure through personnel changes.
-
Zalewski, M. (2018, February 24). Getting product security engineering right. Lcamtuf’s Blog. https://lcamtuf.blogspot.com/2018/02/getting-product-security-engineering.html ↩
-
-
Staff-plus engineer
2022-06-11 22:33
Staff engineering is a complex topic. As nebulous as it can be to get promoted to a 202206112236 Senior engineer role, it’s considerably harder to move into staff-plus roles. Whereas the definition varies a bit from company to company for senior engineering, the definition or even existence of staff-plus roles is completely irregular across the industry. Will Larson wrote an excellent book, Staff Engineer: Leadership Beyond the Management Track[^larson2021staff] on what it means to be a staff-plus engineer. This structure note and its children mostly come from that resource, but also other citations where noted. That book is also (mostly) publicly available at staffeng.com.
[!important] Being a staff engineer is not just a role. It’s the intersection of the role, your behaviors, your impact, and the organization’s recognition of all those things.
The value of the title
- Bypass informal gauges of seniority (especially useful for underrepresented groups)
- Facilitating access to “the room”
- Increase current and career earnings
- Access to interesting work
- Different rather than better
Archetypes
-
Go is not worth it
2024-08-22 09:39
I had to spend a lot of time recently — yet again — debugging weird edge case Go code in production. The person who wrote it had no idea how far off they were from writing something that behaved reliably and correctly. But they're also one of the people who I constantly hear proclaiming how easy it is to use Go, how simple it is, and how productive they are with it. To be fair, they're very productive at churning out bugs. But I'm tired of being on call for it.
This experience triggered me so hard, I almost wrote a whole blog post about how bad Go is. It constantly papers over real world complexity, has a whole arsenal of guns to shoot yourself with, and the people who don't realize that are the ones who love it and make my on-call shifts hell.
I hear the same arguments over and over about "simplicity" in the language that just don't hold up. I really don't understand if I'm just an absolute idiot or if there are loads of developers who don't realize that they're writing half-assed, buggy Go code while thinking it's "so easy and simple".
But honestly, I just couldn’t be bothered to write it all out. I'll never get through to those people. They'll have to learn it for themselves.
-
Sturgeon's Law
2023-12-20 14:32
Ninety percent of everything is crap.[^wikipedia2023sturgeon]
Coined by Theodore Sturgeon in a 1957 edition of Venture Science Fiction, the quote was used in the context of critique. Sturgeon argued that science fiction — which at the time was derided for its low quality — was no different than other genres. He argued that all genres were mostly poor and therefore valid criticism against a genre (or anything really) should be leveled against the best examples of that genre rather than the 90% that's crap.
This is one of the most common problems that I have with modern writing, argumentation, and criticism. Many books, articles, blog posts, etc. level arguments in bad faith against a poor example of how something works in order to advocate for some other thing.
There is a small counterpoint, or perhaps more accurately, footnote to this idea though. It can be valuable for criticism to be leveled against the whole of an idea. For instance, if you focus your criticism against the best 10% of the idea and feel you've come to a conclusion or alternate idea, it can still be valuable to talk about the other 90% as an example of the scope of the downsides. If the worst 90% of my position result in better outcomes than the worst 90% of another position, that's a valuable data point.
-
Prefer duplication over the wrong abstraction
2022-04-26 20:54
Notes from Dan Abramov's talk The Wet Codebase[^abramov2019]
Start with two modules
flowchart BT a((a)) b((b))
Abstract
flowchart BT a((a)) b((b)) c((c)) a-->c b-->c
Awesome, we’re reusing it and everything. But then something comes along and there’s a slight difference.
flowchart BT a((a)) b((b)) c((c+)) d((d)) a-->c b-->c d-->c
but then there’s bug in
c+
that requires a special case forb
’s use-case.flowchart BT a((a)) b((b)) c((c+*)) d((d)) a-->c b-->c d-->c
And then another slightly different one from
a
flowchart BT a((a)) b((b)) c((c+**)) d((d)) a-->c b-->c d-->c
So we pull those cases out and parameterize the call sites in
a
,b
, andd
.flowchart BT a_((a_)) a*((a*)) b_((b_)) b*((b*)) c((c+__)) d_((d_)) d*((d*)) a_-->a* a*-->c b_-->b* b*-->c d_-->d* d*-->c
Later, after small fixes over time, logging, minor changes, you end up somewhere like this.
flowchart BT a_((a_)) [Continue reading](/notes/202204262054)
-
Second-order thoughts about the 2020s
2022-11-02 09:29
Much of these excellent thoughts are from Eli Dourado's great post on the subject.[^dourado2020]
- Bring science to market in order to end 202110220905 The great stagnation.
- mRNA vaccines are amazing. They can be developed quickly and cheaply. There is an HIV/AIDS vaccine in trials and it could be eradicated this decade. There are also "miraculous" treatments for cancer in this vein that aren't true vaccines, but could improve outcomes drastically.
- There are a number of anti-aging techniques coming out that are backed by more credible science than before (therapeutic plasma exchange, aging clocks, other senolytic drugs). Expect people to live longer and healthier by the end of the decade.
- Solar and wind costs were drastically cut in the 2010s and in the 2020s deployment will accelerate. We need a storage price of $20/kWh for a grid powered completely by today's tech. The closest we come is a $542/kWh battery based solution from Tesla.
- Instead of solar and wind we need scalable zero-carbon baseload energy — nuclear or geothermal. Current tech for nuclear targets around 6.5¢/kWh but is delayed until at least 2030. More likely is geothermal which looks to crack 3.5¢/kWh. Not only this but geothermal's drilling advancements mean that even Lockheed Martin's promising compact fusion reactor might not be able to compete if it comes to market this decade. This is because digging the wells this decade means we just have to replace the heat exchange pieces but not re-dig the wells, effectively halving the cost of new wells for the following 15 years, meaning 1¢/kWh energy by the 2050s. Fusion will kill in space though.
-
Stock and flow
2022-05-02 12:52
The fundamental observation of systems thinking is that the links between events are often more subtle than they appear.[^larson2018systems]
Big changes appear to happen in the moment but there is usually a slow accumulation of small changes that lead to that moment.
Static values or accumulations are called stocks. They are how changes are stored over time. Stocks are the elements of the system that you can see, feel, count, or measure at a given time.[^meadows2011]
Changes to the stocks are called flows.[^meadows2011] These are rates of change. They can be inflows or outflows.
System dynamics are the relationships between different stocks and flows. For example, the rate of water pouring into a tub can be less than, equal to, or greater than the rate of water draining from the tub. This system dynamic can result in different long term outcomes like overflowing, equilibrium, or emptying.[^meadows2011]
Keep in mind that stocks take time to change because flows (as units over time) require time to flow. As such stocks often act as delays or buffers in systems. They also produce lag in indication. Additionally, they allow the inflow and outflow rates to be different and temporarily out of balance. This creates feedback processes by which we monitor the inflows and outflows to keep a stock at some acceptable value.[^meadows2011]
-
Knowledge is constructed
2021-09-06 08:35
Constructivism and also Constructionism are theories of knowledge that requires there to be a learner for knowledge to exist. Until someone learns information, connects it to things they already know, and internalizes the information in a personal context, knowledge cannot exist.
Supporting arguments
- Having a text or reference at hand does nothing to increase knowledge, we have to create something, do the work, wrestle with the ideas, and engage effortfully to create our own knowledge.
- Research works better one thing at a time. Find a source, process it to completion, then use your newfound knowledge to find another source. If we don't, we run the risk of picking sources that are useless by the time we get around to reading them. Processing to completion includes writing about what you've read. This is where these notes come in. We take transient notes as we're reading and then write our thoughts here or in drafts of actual writing. (Iterative accumulative approach to writing #thread and writing is important #thread)
- Consider that data patterns and descriptions mean nothing on their own. For instance, strongly correlated but spurious patterns may be obviously meaningless.[^vigen2013] Instead, we require a pattern or description (what), an interpretation of that pattern (why), and — critically — to synthesize multiple interpretations, hypotheses, theories, or models into a bigger picture and create something useful or interesting (why why or higher level why). Patterns and interpretations are the main work of our knowledge management system here. Synthesis happens when we write about (or just read and string together all the knowledge we accumulate in the system).
-
The Art of using a Zettelkasten
2021-07-27 22:42
Using a Zettelkasten is more of an art than a science. It's a personal relationship with an extension of your knowledge. Above all, it's important to just consistently work and think in this system to get the most out of it.
Personal preferences
- 202109091129 Evergreen notes
- 202107272238 When to write a new Zettel
- 202107292312 Project structure notes should answer a question
- 202107292136 The context of a link should give you a reason to follow it
- 202109091133 Notes should associate organically
- 202109091131 Notes should surprise us
- Use a reference manager. The references in the manager should only be ones that have been read and processed, ready to be cited in Zettel as I write them as the last step to processing a source. Don't clutter the reference manager with things I would like to read some day.
- Use a plain text editor and files. This makes everything much more cross-compatible and future proof.
Workflow
There are categories of things that I do regularly, and my Zettelkasten has a specific single place in a broader workflow. It's important to understand how we think and how the processes we use to do that thinking and synthesizing affect your ultimate knowledge (202109080847 As We May Think).
-
Career checkup template
2022-06-12 20:47
Sourced from Will Larson's blog Irrational Exuberance[^larson2022checkup]
This is a simple template for checking in on your career. Here’s how to use it:
- Look through the sections. If there are any sections that don’t resonate with you at all (as opposed to just feeling hard to fill in), then remove or edit them.
- Fill in the sections. Feel free to jump around to answer the parts that you have the most energy for.
- Revisit a few days later: anything you want to change after sleeping on it?
- If possible, find peers or friends to share and discuss each others checkups together.
- Store it away somewhere to review a year from now.
Summary
Write this section last! How would you summarize everything else you wrote below? Try to keep it to max of two paragraphs.
<start writing here!>
How are you feeling about your career right now?
Write a few paragraphs about how you’re feeling about your career right now. Don’t worry about writing this for consumption, focus on finding words that resonate with you!
<start writing here!>
What did you expect / what happened in the last 5 years?
When you think back to five years ago, what did you expect to happen over the following five years? What has happened? How do you feel about the difference between those two?
-
Computer Science
2022-06-19 13:00
The nitty-gritty of computation and technology. Contrasted with 202109061338 Software Engineering which is more about the practice of writing software and careers or organizations in that field.
Curriculum
- 202208101944 Zero to engineer
- 202206282018 Curriculum design for software engineering
- Maybe start here?: MIT OpenCourseWare for Computer Science
- Maybe I should make this yet another structure note that lays out the whole process and what order and how things are connected? Probably just start doing that in this note and maybe split it out later.
Programming Languages
- 202107272307 Data-first pipe design
- 202107272306 Data-last pipe design
- Go kind of sucks?
- 202405170938 Pratt parsing
Asynchronous computing
- 202111091028 Task scheduling is a fuzzy process
- How does asynchronous stuff really work in JS? Promises, async/await, under the hood etc. #thread answer: JS spec requires implementations of JS to implement an event queue which JS processes fifo. Could be fun to implement a JavaScript runtime in Rust or something. (Might already exist from Mozilla, V8 is written in C++)
-
Software Engineering
2021-09-06 13:38
Maybe this should be a structure note of structure notes only since this is a huge topic that I'd like to really dive deep on. There is also the 202206191300 Computer Science structure note that I’ve split out to dig in to the more technical, theoretical stuff in order to keep this one focused more on the practice of writing software and careers or organizations in this field.
Topics
Documentation
- Co-locate tech docs with the code
- C4 Modeling
Abstraction
- You aren't gonna need it (YAGNI)
- 202204031033 Abstractions and future-coding are actively harmful
- 202406282245 Locality of Behavior
- 202204262054 Prefer duplication over the wrong abstraction
- On the spectrum of abstraction[^lou2016]
- Open for extension closed for modification O in SOLID. Means you can add new behavior without modifying any existing code. Always green, always confident in lack of side effects.[^metz2013]
Measurement
- 202304231046 List of SDLC metrics
- 202204272219 The fastest code is no code
- 202109251100 Verify behaviors and assert properties
- Thought experiment. Coding as function, what do the derivative and integral represent? Related to 202107291950 Optimizing requirements and implementations and 202110111901 Run to change ratio of a program.