While friendship has been by far the chief source of my happiness, acquaintance or general society has always meant little to me, and I cannot quite understand why a man should wish to know more people than he can make real friends of. –C. S. Lewis, Surprised by Joy
Our life is frittered away by detail. Simplify, simplify! –Henry David Thoreau
Thinking doesn't guarantee that we won't make mistakes. But not thinking guarantees that we will. –Leslie Lamport, "Why We Should Build Software Like We Build Houses"
The formation of hypotheses is the most mysterious of all the categories of scientific method. Where they come from, no one knows. A person is sitting somewhere, minding his own business, and suddenly - flash! - he understands something he didn't understand before. Until it's tested the hypothesis isn't truth. For the tests aren't its source. Its source is somewhere else. –Robert Pirsig, Zen and the Art of Motorcycle Maintenance (1974)
The goal of software architecture is to minimize the human resources required to build and maintain the required system. –Robert C. "Uncle Bob" Martin, Clean Architecture: A Craftsman's Guide to Software Structure and Design
One of the open secrets in the development world is the exponential growth of complexity of applications, platforms, and systems. In most cases, it is difficult, if not almost impossible, for programmers to have a strong understanding of their systems' architectures. This article claims that the rise of APIs (cloud, serverless, etc.) has pushed teams toward excessive “accidental” complexity. Likewise, large organizations make communication more challenging. The basic upshot of the article is that providers of services need to have more empathy for their consumers, whether they are internal or external to allow simplification at as many levels as possible.
https://www.infoworld.com/article/3639050/complexity-is-killing-software-developers.html
Today, agile development methods are the norm in most organizations. No one wants to say that their team isn't agile! However, in large organizations, agile (often the “big A” agile sold by many consultancies) efforts fall far short of their goals and frequently end up as “waterfall with stand ups”. This article looks at several of the pitfalls and some concrete suggestions for how to fix these problems. How many of these do you recognize in your own organization or team?
https://medium.com/@gramr/why-agile-rarely-works-in-the-enterprise-816561515549
Why do some teams just seem to perform better than others? This author says that teams that emphasize accomplishing clear, well-defined milestones that provide some specific business value. This allows the team to adapt more easily and for the team to break the project into more manageable "chunks" of work. In turn, both the project team and customers can see measurable progress toward the larger goal.
https://www.rubick.com/milestones-not-projects/
Doubtless, this article is destined to inspire controversy. Nevertheless, the author makes several strong points in favor of introducing microservices later in the lifecycle of your project, after you've stabilized the overall architecture and identified the places where they make sense. To be sure, he is not anti-microservices; instead, he simply advocates taking a balanced approach to how they are used.
https://arnoldgalovics.com/microservices-in-production/
In a very similar vein to the article above, this article shows how the adoption of “enterprise agile”, especially as provided by consultancies, such as McKinsey in this case, have essentially left the whole agile concept often without meaning. The article discusses how McKinsey touts their offering of overarching management of the agile process and organization, which is the antithesis of principles of the Agile Manifesto.
https://terem.tech/agile-is-dead/
You may remember early in your career that you focused on delivering your application above all else. As you gained experience, you started to understand that so much else matters, including maintainability. This author explains that maintainability is primarily the skill of communicating both your intent and any trade-offs or special constraints that you had to take into account.
https://max.engineer/maintainable-code
Many of you have probably heard of the so-called #NoEstimates “movement” in the software development milieu. This article, however, is not against estimates, but rather against having developers spend time trying to do detailed estimation on work that inevitably requires much additional discovery to complete successfully. The author emphasizes that estimates should be based on accurate historical data for similar efforts (size, complexity, technology, team, etc.) and, most importantly, that the overall estimate is not a definitive completion date for the project.
Exploratory testing is, at once, one of the most challenging and simple types of testing. However, many people, especially outside of testing, have the notion that it is unstructured and ad hoc. This article debunks several of the common misunderstandings about this important testing approach.
https://www.ministryoftesting.com/dojo/lessons/common-misconceptions-about-exploratory-testing
In software testing, we typically focus on verification and validation of application functionality and performance. However, it's also important to perform so-called “negative” tests to ensure that the system doesn't do things that we don't intend, as well. This article looks at several aspects of negative testing and provides a nice framework for how to include it in your testing regime.
https://blog.qasource.com/a-complete-guide-to-negative-testing-in-software-testing
Apple has recently faced several high-profile software problems, such as the substantial memory leak in the new macOS Monterey. But many pundits and insiders think that poor quality software has become endemic and is beginning to overshadow the technological improvements the company makes. Perhaps this should be a cautionary tale to all organizations about the value and importance of software quality.
https://www.macworld.com/article/551393/apple-software-problems-regions-memories-bugs.html
When you spend $3 billion on a top-of-the-line warship, you (as a taxpayer) would expect it to have the best navigation software in the world, wouldn't you? Unfortunately, the US Navy Seawolf-class submarines have software far less sophisticated than what you have on your phone. And this led to a recent accident involving the USS Connecticut, in which the submarine attempted to dive below the level of the sea floor due (at least in part) to defective software.
If you do any work with application configuration or in the devops domains, you are probably already familiar JSON and/or YAML. Nevertheless, there's something for everyone in this tutorial, particularly around some of the advantages and disadvantages of each, along with a nice side-by-side comparison.
https://www.imaginarycloud.com/blog/yaml-vs-json-what-is-the-difference/
Even with the entrenchment of GUIs, the command line remains a ubiquitous tool for most developers and, therefore, terminal emulators and related tools are probably second only to text editors when it comes to programmer's passions. But how do they actually work? Perhaps I found this article so intriguing, because my introduction to professional development world was working on the venerable Procomm Plus software. Nevertheless, everyone can benefit from a basic understanding of how they work and this article does a great job, including copious examples of Rust code to demonstrate the concepts.
https://www.poor.dev/blog/terminal-anatomy/
If you want to understand the basic concepts of blockchain, this simple, brief tutorial is excellent. It discusses examples of common uses for blockchains and gives a walk through of Bitcoin transaction to show how the process works in practice.
https://www.velotio.com/engineering-blog/introduction-to-blockchain-and-how-bitcoin-works
You probably use Git on a daily basis. But, do you know how it works behind the scenes, such as what the commit hashes mean? This tutorial takes some of the mystery away and, in the process, gives you a better conceptualization of the Git paradigm to help make you more productive with it.
https://www.freecodecamp.org/news/git-internals-objects-branches-create-repo/
The React framework is the most popular front-end framework available. And there are plenty of great tutorials for it, including the official one. But what is special about this tutorial is that you get to strip back all of the “magic” to see how React does what it does to better understand the architecture and paradigm. Moreover, the author accomplishes this in one single tutorial without skimping on the important details.
https://pomb.us/build-your-own-react/
I've become a passionate user of and advocate for Tmux as a powerful productivity tool. However, my main work environment is Windows and I had struggled to find a clean way to get Tmux working with Git for Windows. Here's a tutorial that gives you the steps to do it. (Disclaimer: This tutorial was written by me.)
https://dev.to/timothydjones/install-tmux-on-git-for-windows-1cf2
How do you optimize for happiness and productivity of technical staff in your organization? And are happiness and productivity correlated well? This research has some interesting insights, but they don't reach much in the way of conclusions about the effect, if any, of developer happiness on productivity.
https://docs.google.com/viewer?url=https://arxiv.org/ftp/arxiv/papers/1904/1904.08239.pdf
Technical interviewing often strikes fear in the heart of job candidates. Recent research shows that whiteboard interviews provide little in the way of assessment of technical skill and job fit and, instead, mostly measures the candidate's anxiety. Moreover, researchers found that interviewers often demonstrated subtle bias in the such was as giving easier problems to preferred candidates.
https://news.ncsu.edu/2020/07/tech-job-interviews-anxiety/
Authenticity is the fundamental value of the millennial generation (or so I'm told). The technology industry is going through the growing pains of transition from one dominated by Baby Boomers and Gen X to Millennials and one of the latest fronts appears to be with respect to disclosure about one's own shortcomings. This article and the others cited in it show how development changes so quickly that even the most skilled have difficulty keeping up and that perhaps everyone needs to extend some mercy and grace to others instead of questioning their motives or, even worse, fundamental abilities. The better choice is to come along side and provide help and support.
https://surfingcomplexity.blog/2021/11/28/i-have-no-idea-what-im-doing/
To little fanfare, in November 1971, Intel introduced the first commercial microprocessor: the 2300-transistor, 4-bit 4004. It was the beginning of a revolution in technology unlike the world has ever seen and became the driver for the generation of most of the world's wealth over the past 50 years.
One of the hallmarks of professional practices is accountability. In this essay, Kent Beck, pioneer of "extreme programming", explains how personal accountability is fundamental to successful development work. In particular, he explores how the day-to-day tools, such as estimates (when used properly!), TDD and unit tests, and continuous integration, that we use are visible ways of demonstrating accountability to our teammates and stakeholders.
https://medium.com/@kentbeck_7670/accountability-in-software-development-375d42932813
We've all been there: We're asked a question that we simply don't want to answer. So what do you do? This author provides ten excellent reasons (she calls them "wins"!) to just sit quietly in the awkward silence. Definitely not easy, but when you see these reasons, you'll understand the power that silence wields.
https://jessicahagy.substack.com/p/the-many-gifts-of-awkward-silence
At the most basic level, most technical jobs are about solving problems. Accordingly, the most important skill is critical thinking: How do you identify the relevant factors among all that exist and synthesize a reasonable solution? This article provides practical guidance on good decision-making with the key insight it takes time and focused effort.
Coconut is a functional programming language that compiles to Python. Any valid Python program is also a valid Coconut program, so it provides a gentle transition to functional programming for the Python developer. Its stated goal is to be simple, elegant, and Pythonic and its syntax is similar to Haskell. Some of the most salient features include more natural lambda functions, pipeline-style programming, (pre-Python 3.10) native pattern matching, function composition, lazy lists, and algebraic data types. You can get a taste for it in the REPL on the language home page or read the tutorial.
https://github.com/evhub/coconut
Certainly, it would be difficult to independently confirm whether or not this is indeed the fastest FizzBuzz program, but admittedly output of 56 GB/s is nothing to sneeze at! This article reviews an assembly language implementation that boasts that level of performance to tease out how it works it magic.
https://tech.marksblogg.com/fastest-fizz-buzz.html
Winpad Layout is a tiny Windows utility that allows you to quickly arrange windows via the numeric keypad. You simply use
https://github.com/nafest/winpad_layout
This handy extension for VS Code allows you to make REST service calls from within the editor and then view the response in a separate pane with syntax highlighting. Some of the other nice features include support for cURL, ability to generate language-specific service calls for Python, JavaScript, etc., and even support for SOAP calls.
https://github.com/Huachao/vscode-restclient/
IfilterShellView is a very useful Windows Explore shell extension that provides expanded flexibility for filtering and searching for files. It supports multiple criteria including one or more of various attributes (dates/times, including ranges, size, file type, file extension, etc.) and file name, including wildcards and regular expressions. In addition, it provides a command palette of the available commands/options and history of most recent searches.
https://github.com/Aeindus/IFilterShellView
PlantText is an online version of the popular PlantUML diagram editor. Accordingly, it has excellent support for many types of UML diagrams, including activity/sequence, class, and component diagrams. In addition, other diagram types, such as mind maps, Gantt charts, and digital timing diagrams, are also supported. Each diagram can be exported as image (SVG or PNG) or saved in it's native text format.
In the 1980s, Amstrad sold a "customized" version of their standard CPC 464 computer, which came with (a whopping!) 64KB of RAM, with an extra 8KB of RAM soldered onto the board. The odd part was that the 8KB RAM chip wasn't connected to anything else and only existed to circumvent a steep Spanish import tariff on computers with 64KB or less of RAM!
https://www.cpcwiki.eu/index.php/472
First of all, I never would have even thought of such a thing. And, even if I had, I'd never have imagined that it was even possible! But this guy designed and built a traditional trebuchet that can launch projectiles at more than 450 m/s! Watch the video and be amazed.
Here's a fun little experiment. The designer shows various emojis in relative scale from a mosquito all the way up to the sun. A nice little lesson in relative size and perspective.
https://javier.xyz/emoji-to-scale/
Another incredible machine learning experiment using the GPT-2 model to generate realistic words, including definitions and example usages. Each word comes with a unique link, so you can share your new favorite with friends.
https://www.thisworddoesnotexist.com/
Okay, I'm a dad, so I'm allowed to include stuff like this in the newsletter. Enjoy this huge list of programming dad jokes. And, yes, most of them are groaners. You have been warned!
https://github.com/wesbos/dad-jokes