Up to Newsletter Index

February 2022 Newsletter

Quotable Quotes

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


Software Development Process and Methodology


Article: Complexity is killing software developers

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


Article: Why Agile rarely works in the Enterprise

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


Article: Great engineering teams focus on milestones instead of projects

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/


Article: Don't start with microservices – monoliths are your friend

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/


Article: Agile is Dead, McKinsey Just Killed It

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/


Article: Writing Maintainable Code Is a Communication Skill

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


Article: Tasking developers with creating detailed estimates is a waste of time/money

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.

https://iism.org/article/is-tasking-developers-with-creating-detailed-estimates-a-waste-of-company-money-42


Software Testing & Quality


Article: Common Misconceptions About Exploratory Testing

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


Article: A Complete Guide to Negative Testing in Software 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


Article: If Apple keeps letting its software slip, the next big thing won’t matter

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


Article: A Submarine's Weakness: Its Software?

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.

https://fixvms.com/


Tutorials/References


Tutorial/Reference: YAML vs. JSON: What is the difference?

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/


Tutorial: Anatomy of a Terminal Emulator

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/


Tutorial: Blockchain 101: The Simplest Guide You Will Ever Read

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


Tutorial: A Visual Guide to Git Internals — Objects, Branches, and How to Create a Repo From Scratch

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/


Tutorial: Build your own React

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/


Tutorial: Install Tmux on Git for Windows

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


Career Development/Miscellaneous


Article: Happiness and the productivity of software engineers

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


Article: Tech Sector Job Interviews Assess Anxiety, Not Software Skills

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/


Article: I have no idea what I'm doing

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/


Article: The Chip That Changed the World

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.

https://www.wsj.com/articles/the-chip-that-changed-the-world-microprocessor-computing-transistor-breakthrough-intel-11636903999


Article: Accountability in Software Development

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


Article: The many gifts of awkward silence

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


Article: How to Think: The Skill You've Never Been Taught

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.

https://fs.blog/how-to-think/


PLOM (Programming Language of the Month)


Article: Coconut

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


FBOM (FizzBuzz of the Month)


Article: The Fastest FizzBuzz Implementation

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


Useful Utilities


Winpad Layout (Free — Windows XP/7/8.x/10 — 14kB)

Winpad Layout is a tiny Windows utility that allows you to quickly arrange windows via the numeric keypad. You simply use and then tap two numbers on the keypad to move and resize the current focus window across a virtual 3x3 grid of the desktop.

https://github.com/nafest/winpad_layout


VS Code REST Client (Free — Cross-platform/Typescript — N/A)

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 (Free — Windows 10/11 — 2.12MB)

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 (Free — Online Tool — N/A)

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.

https://www.planttext.com/


Just for Fun


CPC 472: The Computer with Non-Functional RAM

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


The Supersonic Trebuchet

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.

https://hackaday.com/2021/12/01/supersonic-projectile-exceeds-engineers-dreams-the-supersonic-trebuchet/


Emoji to Scale

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/


This Word Does Not Exist

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/


Programming Dad Jokes

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