Though I do not believe that a plant will spring up where no seed has been, I have great faith in a seed... Convince me that you have a seed there, and I am prepared to expect wonders. –Henry David Thoreau
Elegance is not a dispensable luxury but a factor that decides between success and failure. –Edsger Dijkstra
You mustn’t wish for another life. You mustn’t want to be somebody else. What you must do is this: “Rejoice evermore. Pray without ceasing. In everything give thanks.” I am not all the way capable of so much, but those are the right instructions. –Wendell Berry, Hannah Coulter
In my experience, for a software development to focus on reuse is misguided. Instead, focus on a culture of refactoring: not only will this yield simpler software with increasingly higher quality, in the fullness of time reuse will emerge in the form of patterns and frameworks. –Grady Booch
All the effort in the world won’t matter if you’re not inspired. –Chuck Palahniuk, Diary: A Novel
This author recently surveyed more than 100 large technology companies about their development project management methodologies and found that most did not use (or had abandoned) the Scrum approach. Instead, most used a variation on “plan-build/iterate-ship” methodology with someone on the team handling the project management role/duties. Formal project management roles come in larger, more complex projects and on integration efforts that require more coordination. Lots of interesting information to consider from this article.
https://newsletter.pragmaticengineer.com/p/project-management-in-tech
Frequently in programming, we hear about "avoiding complexity" or similar phrases. But what does it mean for our designs or architectures to be "simple"? This article, which references Clojure, a Lisp language that runs on the JVM, explores the philosophy of simplicity and its importance in building robust and extensible applications.
https://blog.jakubholy.net/2021/simplicity/
How often do you hear someone say that you should use a particular technology or methodology simply because it’s a “best practice”? This author reminds us that nearly everything we use our development process is just a tool and no single tool can be one-size-fits-all. We must look at each and decide if it’s applicable to our situation, based on our environment, skills, architecture, and so forth.
https://fev.al/posts/best-practices/
You want to write high-quality, robust code to reduce problems and failures in production, right? Well, certainly that is true. But, as this article notes, another important aspect of quality code is reducing the cognitive load on developers, which leads to improved productivity and programmer satisfaction.
The title of this article is likely self-evident to most of us, especially since we’ve also probably heard the aphorism “Programs must be written for people to read, and only incidentally for machines to execute.” However, the more salient aspect of this article is the importance and value of writing code that is easy to read and understand. Nevertheless, the author emphasizes that much grace is required when assessing readability, since it is so subjective and certainly no one sets out to intentionally create code that is not understandable. In other words, the key element is collaboration and balance in sharing information so that the writer’s intent comes through to the reader.
https://trishagee.com/2020/09/07/reading-code-is-a-skill/
Various definitions of quality surround us both in our work and daily lives. Nevertheless, ultimately it comes down to customer satisfaction. This article explores how systems thinking allows us to adopt a quality mindset in all aspects of the development process.
https://www.ufried.com/blog/systems_thinking_and_quality/
Most organizations have or want to introduce test automation. But what is the right approach? Before you start with your implementation, you must have a strategy for achieving the goals of your automation effort. This guide provides a nice framework for the strategy by asking questions around the who, what, when, how, and where for test automation.
https://medium.com/@ailuj876/guide-to-creating-an-effective-test-automation-strategy-cf5602f13ff8
Having a rigorous and effective software testing process is great. However, it’s even better to prevent defects in the first place, since that saves time, money, and frustration. This article presents a few simple and practical suggestions for heading those defects off before they get into the code.
https://betterprogramming.pub/5-tips-for-reducing-bugs-in-software-development-projects-5bc592c2881a
Sometimes, it’s easy to get caught up in semantics and limit our actions based on the meanings (or our understandings, which can be misguided!) of various terms. This article emphasizes that while “quality engineering” as a discipline (the process aspects of ensuring quality throughout the development life cycle) is important, software testing is key. Furthermore, and more significantly, it goes on to discuss the characteristics of good testing.
https://www.petergwalen.com/blog/software-testing-is-quality-engineering
B-trees are fundamental to the storage engines of several popular RDBMS platforms, including Oracle, PostgreSQL, and MySQL. This tutorial provides a nice explanation with visualizations of this data structure and how they are used in databases to provide good performance, especially in disk-based storage scenarios.
https://medium.com/@amitdavidson234/all-about-b-trees-and-databases-8c0697856189
One of the underrated skills in the technical realm is writing—or, more precisely, writing well. As developers and other technical professionals, most of our writing involves explanatory writing, which is a distinct type. This author provides a great guide for how to do it, including structure and style. Consider it a quite “meta” tutorial!
https://lucasfcosta.com/2021/09/30/explaining-in-writing.html
Often, when debugging a problem in your code, you’ll have an idea of where or when the problem was introduced. This is where the git bisect command comes in very handy in narrowing down precisely which commit is the culprit. This comprehensive tutorial shows you the ropes for using it.
https://remimercier.com/how-to-use-git-bisect/
Whether your job involves AI or machine learning development or not, in today’s environment, it’s important to understand some of the general principles in this domain. This visual, interactive tutorial gently teaches you both the concepts and technologies behind neural networks, which underpin most of the deep learning techniques in use today. The explanation of back-propagation is especially nice.
If you want to understand a programming language, you must get down into the core to see what makes it tick. Fortunately, Python makes that incredibly easy through its builtins module. This walking tour of the module shows you how to use the module to more thoroughly understand how Python works under the covers.
https://sadh.life/post/builtins/
Adm. Rickover was one of the most successful (and controversial) leaders in modern U. S. Navy history (and one of my father’s senior officers!). This speech encapsulates his philosophy of leadership and what separates leaders from managers. He emphasizes the role in agency and accountability in subordinates and that leaders accept responsibility for problems and fix them without hesitation or excuses.
https://govleaders.org/rickover.htm
One of the persistent narratives in software development circles is of the developer who is 10 times more productive than his or her peers. Personally, I find this concept odd, since we don’t hear about this in most other disciplines and it probably stems from “hacker” ethos of the 1960s and 1970s. In this article the author emphasizes the importance of dispelling this idea for the good of individuals and the team and organization at large.
https://www.swarmia.com/blog/busting-the-10x-software-engineer-myth
When you consider doing a job for 20 years, it can seem like either a long time, if you are just starting out, or perhaps like it whizzed by if, like me, you are nearing the end of your working life. And you could read any number of “all the things I learned over my career” articles. So why this one? I choose this one, because the author takes a humble, circumspect, yet upbeat, view of programming as a career and offers some insights that often get missed in those other missives. Lots of little nuggets of wisdom here.
https://www.simplethread.com/20-things-ive-learned-in-my-20-years-as-a-software-engineer/
What separates the great workers from the rest of the pack? I’m not referring to the mythical 10x developer, but rather the employee that almost everyone recognizes as a top performer and who (usually) quietly, confidently goes about his/her work. This author (whom I wholeheartedly agree with!) says that it’s about doing a little extra on each task and project. Not because you want to show off, but because you genuinely want to make things better for everyone. Should we call these folks lagniappe workers?
http://www.bennorthrop.com/Essays/2021/always-do-extra.php
If you could do one thing to improve your work relationships, what would it be? In this new interview with Harvard economist, Arthur Brooks, about his book Love Your Enemies: How Decent People Can Save America from the Culture of Contempt, he says that it’s as simple as showing good old-fashioned love. The important distinction that he makes is that love is not a feeling, but rather an action and an action that translates directly into how much happiness that we experience. I think that this topic is one of the most important for future of our world and urge you to take it to heart.
https://freakonomics.com/podcast/arthur-brooks/
Grain is a new language with a focus on functional programming and introducing concepts from academic research that often fall by the wayside. That said, it is very well-designed and usable. It compiles to Web Assembly (WASM), so it can be run/hosted on most any platform. Pre-compiled binaries of the compiler are available for Windows, Linux, and Mac OS X, so it’s easy to get started, and they even have an extension for VS Code. The syntax will be familiar to anyone with experience with JavaScript and/or Python. And the developers provide excellent documentation for the language and the standard library, which makes starting out easy.
Quickemu is a small shell script front-end to the popular QEMU open-source emulation/virtualization platform that allows you to quickly and easily create and configure highly-optimized desktop instances of Linux (especially Ubuntu), Windows 10/11, and Mac OS X virtual machines (VMs). Just run two simple commands to retrieve the ISO images to install the desired guest OS, configure the VM for your environment, and launch it. No looking up the arcane QEMU command-line options or tweaking the configuration.
https://github.com/wimpysworld/quickemu
When doing exploratory data analysis (or other tasks) with JSON data, it is frequently useful to be able to search the content for values or content. This simple shell-based tool re-formats JSON to make it easier to search via grep. Likewise, it can convert other data formats into well-structured JSON. It’s a great complement to the ubiquitous jq tool. Binaries are available for Windows, Linux, and Mac OS X.
https://github.com/tomnomnom/gron
Rancher Desktop is an Electron-based desktop tool for Windows (via Windows Subsystem for Linux/WSL), Mac OS X, and Linux for Kubernetes and for managing standalone VM containers. You are probably aware that Docker is moving to a paid subscription model for Windows desktop version, so Rancher Desktop may be a viable free, open-source replacement. You can run containers, build container images, and push/pull images to/from registries. Likewise, most common Kubernetes functionality is supported, as well.
https://github.com/rancher-sandbox/rancher-desktop
VisiData is a powerful terminal spreadsheet for exploring and managing most any kind of tabular data. It supports Excel, CSV, JSON, SQLite, and many other data formats natively. With so many features and options, I highly recommend An Introduction to VisiData to get started.
https://github.com/saulpw/visidata
Wow! This one intersects with just so many of my loves: Hemingway, software testing, tongue-in-cheek humor… What more could you ask for? Indeed, this is truly “great news”!
http://www.workpump.com/bugcount/bugcount.html
This is a cool experiment in machine learning using a GAN (generative adversarial network) trained on over 50000 sports shoe images from Internet advertisements to create realistic shoes. It even includes an editor where you can design your own customized version from any of the generated instances.
https://thissneakerdoesnotexist.com/
Our language is vibrant and alive, as demonstrated by the addition of new words all the time. In October, Merriam-Webster added 455 (wow!) new words and phrases to their corpus including small ball, dad bod, and fluffernutter. Check out the other additions!
https://www.merriam-webster.com/words-at-play/new-words-in-the-dictionary
Is the punchline a bit predictable? I don’t know… You’ll have to decide for yourself. Just like you’ll have to decide if the joke’s funny or hits a little too close to home.
https://old.reddit.com/r/Jokes/comments/qbencu/a_software_tester_walks_into_a_bar/