2023 Reading
Links to articles I read in 2023 with a few notes to remind me of the topic.
January
Get your work recognized: write a brag document
- “[These ideas] help me reflect on themes in my work, what’s important to me, what I’m learning, and what I’d like to be doing differently.”
- “The tactic is pretty simple! Instead of trying to remember everything you did with your brain, maintain a “brag document” that lists everything so you can refer to it when you get to performance review season!”
4 steps to transforming developers into security people
- “To reach your developers with the message of security requires a four-phase process of application security connection. Open their eyes, fill their brains, task their hands, and embrace the gathering”
Flaw: Constructor does Real Work
- If it is difficult to test an object, the contructor might be doing too much.
- “Think about one fundamental question when writing or reviewing code: How am I going to test this?”
- “Do not create collaborators in your constructor, but pass them in” (builder, factory, provider, dependency injection, etc.)
February
Habits I’ve Developed for Fast + Efficient Programming
- “The benefits of being fast and efficient at the actual mechanics of programming can have far-reaching benefits besides just the obvious ones of being able to do more work in less time…. All of these things have the goal of freeing up your time and more importantly your mental bandwidth to focus on the algorithms, interactions, abstractions, and business problems instead.”
March
I’m a very slow thinker
- Take your time to think about a question and your answer before responding.
- “People say that your first reaction is the most honest, but I disagree. Your first reaction is usually outdated. Either it’s an answer you came up with long ago and now use instead of thinking, or it’s a knee-jerk emotional response to something in your past.”
Maybe you should do less ‘work’
- “You should try and figure out what expectations your colleagues and managers have of you. And also what you expect of yourself. If you can meet these expectations in fewer hours than you are supposed to work, then you shouldn’t just find more to do. Instead you should do something different.”
Learning at work
- “It’s my job to take time out of my workday to learn things.”
- Observe and learn from what others are doing.
April
There Is No Benefit or Incentive for Developers to Create Quality Code on Software Projects
- “Software projects prioritize fast creation, not quality, and no developers are incentivized to create quality. The goal of software projects is meet the project deadline not create quality code.”
- “Quality is the responsibility of the culture of the team and the senior members of the development team.”
- “Standards ensure quality continues when developers leave and join. This needs to be done because there are no benefits to creating quality code and projects don’t measure quality, they measure creation.”
May
How to find focus
- “Focus isn’t just stubbornly saying ‘I’m going to say no to more things,’ it’s studying all the options you have until you can say with conviction, ‘this is the right one for me.’”
July
Clever vs Insightful Code
- Exploiting language or domain specific knowledge can lead to (clever) code that is difficult to maintain; however, insight about the language and domain may be used to better solve a problem.
August
Is High Quality Software Worth the Cost?
- “The fundamental role of internal quality is that it lowers the cost of future change. But there is some extra effort required to write good software, which does impose some cost in the short term.”
- “When thinking about internal quality, I stress that we should only approach it as an economic argument. High internal quality reduces the cost of future features, meaning that putting the time into writing good code actually reduces cost.”
September
The Grug Brained Developer
- collection of thoughts on software development, presented in a comedic “smol brained” style
October
Overengineering can kill your product
- Overengineering can happen when requirements are uncertain or the developer is bored. It increases development and maintenance costs.
- “It doesn’t matter how perfect your design or implementation is if you never see it working because you go broke before. The worst code on the planet that helps you validate a hypothesis is better than standing still for fear of repeating yourself.”
November
Why SOLID principles are still the foundation for modern software architecture
- While the software industry has evolved with dynamically-typed languages, non-object-oriented paradigms, open-source software, and microservices, the core principles of SOLID, such as code organization, code visibility, and code modifiability, remain important.
December
Career Advice: Be Confidently Uncertain
- Being confidently uncertain means acknowledging uncertainty but also having a plan to overcome it.
- Instead of saying “I don’t know,” confidently explain the uncertainty and provide context.
Why does Cloudflare use lava lamps to help with encryption?
- Cloudflare utilizes lava lamps to generate random data for encryption keys, addressing the inherent limitations of computer-generated randomness.