Up to Newsletter Index

 

June 2021 Newsletter

 

Quotable Quotes

May you do good and not evil. May you find forgiveness for yourself and forgive others. May you share freely, never taking more than you give. –Richard Hipp, in the SQLite source code

Saepe ne utile quidem est scire quid futurum sit [Often it is not even advantageous to know what will be.] –Cicero

One of the great gifts of maturity is learning you really don't have to tolerate someone determined to be an asshole; and also learning that the person determined to be an asshole "to make a point" is usually just making the point that they are an asshole. –John Scalzi, on Twitter

Do not pray for easy lives; pray to be stronger men. –John F. Kennedy

Sometimes you may feel you're not understood, but sometimes it's more important to understand. –John Hicks

Just like there is a richness that comes with trying something new, there is an equal richness that comes with getting deeper and deeper into something familiar. Brad Stulberg, "The Mental Benefits of Being Terrible at Something"

Return to top

 

Software Development Process and Methodology

 

Article: Inefficient Efficiency

In the never-ending quest to improve efficiency, Kent Beck reminds us that we need to remember to check whether we are optimizing for latency or throughput in our development processes. He emphasizes that since development tends to be iterative with the goal to learn from problems and mistakes in previous iterations, we should improve latency (time to complete a single pass) to provide feedback as quickly as possible and adapt. And leave throughput for large-scale industrial processes, based on economy-of-scale.

https://medium.com/@kentbeck_7670/inefficient-efficiency-5b3ab5294791

 

Article: Ditch the Urgency

This author says that, with the exception of early-stage start-ups (do many of us really work in those?!), urgency to delivery new features is a dangerous side-effect of the agile mindset. He helpfully boils the development process down into a 3-step cycle: learn, solve, and deliver. He claims that urgency focuses on delivery aspect, but instead most effort and time should be on learning what the customer wants/needs and coming up with a good solution, which makes delivery simple.

https://kislayverma.com/agile/ditch-the-urgency/

 

Article: 16 Lessons Learned From Five Years As An Enterprise Technologist

Often, I find articles like these too generic to have much value, this one is markedly different. The author hits on many relevant and salient points which are specific to development in large organizations. At the same time, most of his advice applies equally to programmers everywhere. The bottom line of all it is most of the work is not about "technology", but rather communication and relationship-building.

https://medium.com/rocket-mortgage-technology-blog/16-lessons-learned-from-five-years-as-an-enterprise-technologist-part-1-abe2a2734539

https://medium.com/rocket-mortgage-technology-blog/16-lessons-learned-from-five-years-as-an-enterprise-technologist-part-2-37407526da0a

 

Article: “The Surgical Team” in XXI Century

With today’s agile practices, it seems that roles and responsibilities on teams are often blurred which frequently results in some jobs getting missed. One of the less well-known, but perhaps most useful, concepts from Fred Brooks’ The Mythical Man-Month is that of “The Surgical Team”, in which each team member had clear responsibilities. This author proposes an updated model for 21st century software development built around modern practices.

https://www.codeproject.com/Articles/5279276/The-Surgical-Team-in-XXI-Century

 

Article: Developers can't fix bad management

In this broad, yet on-target, article the author discusses how front-line developers want to develop applications that delight customers, but they are often thwarted by bad processes and organizational cultural, which are management problems. He directly references Deming's work with manufacturers, specifically Ford Motor Company, and how he showed that 85% of problems required management intervention and the best source of suggestions for fixing problems (eg., requirements elicitation and refinement in development) are front-line workers.

https://iism.org/article/developers-can-t-fix-bad-management-57

 

Article: The Process is not the Product — The Software Methodology Anti-Manifesto

This author opines that the original Agile Manifesto has been co-opted by training companies and management consultancies whose main objective is making money, rather than helping you improve your development process. Moreover, he notes that primary difficulty (and cause of failure) in agile development implementations (or any process improvement effort, really) is organizational inertia and resistance to change.

https://mkarliner.medium.com/the-process-is-not-the-product-the-new-agile-anti-manifesto-d3e23023b466

Return to top

 

Software Testing & Quality

 

Article: AI Testing 101: Practical Tips for Testing AI Systems

AI and machine learning platforms are systems like any other in the sense that they require testing. However, their complexity and stochastic nature require some specialized techniques. This article presents some of the factors and concepts that are particular to such testing.

https://www.perfecto.io/blog/testing-ai

 

Article: Testing in the Twenties

Tim Bray wades into the fray on software testing with his 40+ years of development experience to offer some insights about test best practices. While he has some very good specific ideas, most of it comes down to practicality and the fact that testing is usually rather specific to each organizations needs and culture.

https://www.tbray.org/ongoing/When/202x/2021/05/15/Testing-in-2021

Return to top

 

Tutorials/References

 

Tutorial: What is HTTP/3, and Why Does it Matter?

Whether you do systems programming or web development or something in between, you probably use HTTP in some aspect of your job. HTTP/3, also called HTTP over QUIC, is the latest version and it releases HTTP from the limitations of TCP as the underlying protocol. This tutorial gives you a brief overview of the new features and how you can expect them to be used.

https://javascript.plainenglish.io/what-is-http-3-and-why-does-it-matter-cb7d7b4b600f

 

Tutorial: Implement a key-value database in Python

Outside of SQL-based RDBMS, key-value stores are the most common databases, probably owing to their simplicity and utility in a variety of scenarios. But what does it take to actually implement one? This comprehensive, yet brief, tutorial goes into many of the factors that you need to consider in a step-by-step manner using Python for ease of understanding to build a simple, file-based KV store.

https://seanrayment.me/posts/python-key-value-store/

 

Reference: Modern JavaScript: Everything you missed over the last 10 years (ECMAScript 2020)

Most things in the programming realm move at a breakneck pace and, to me, it seems that JavaScript changes even faster than others. Much of what I know (or can remember!) is from the era of simple web design and that is extremely outdated. This comprehensive, yet digestible, reference with plenty of interactive examples shows you the most import elements of what has changed in the several years, along with links to more details in MDN.

https://turriate.com/articles/modern-javascript-everything-you-missed-over-10-years

 

Tutorial: Google Technical Writing Courses

These courses are based on the premise “Every engineer is also a writer.” The courses are broken down into various topics including writing clearly, which all Google developers are required to take, and more advanced offerings specific to the technical writing discipline itself. Everyone can benefit from the clear writing course.

https://developers.google.com/tech-writing

 

Reference: 50 Tips to Improve User Interface

Most of us aren't experts at UI/UX, but that doesn't mean that we can't or shouldn't do our best to learn some of the basics. This list of 50 tips focuses on the "what" and "why" rather than the "how", so you understand the principles of good UI.

https://fifty.user-interface.io/50_ui_tips.pdf

Return to top

 

Career Development/Miscellaneous

 

Article: Work from Home & Productivity: Evidence from Personnel & Analytics Data on IT Professionals

Most technology workers switched to work from home (WFH) during the coronavirus pandemic and now as we slowly return to normal, many wonder how productivity was affected by WFH. This academic research study has some answers. Specifically, they found hours worked increased by about 30%, but average output did not change, and, accordingly, overall productivity fell by about 20%. Likewise, they found that communication and coordination costs increased during the WFH period. Of course, other factors must be considered in deciding whether or not to continue with WFH or returning to in-person work.

https://bfi.uchicago.edu/insight/finding/work-from-home-productivity-evidence-from-personnel-analytics-data-on-it-professionals/

 

Article: Your Team is Not “Them”

This article is primarily about management, but I think that it has a good lesson for everyone who works on a team (which is probably just about all of us these days!). Accountability and responsibility are shared by the whole team and either the whole team wins or the team fails together. Certainly, the team leader has the greater burden in defeat, but everyone must share the load.

https://css-tricks.com/your-team-is-not-them/

 

Article: Popular Elitism In Programming: How your path of learning can affect your judgment towards other people

Each of has our particular cognitive biases that affect how we view the world and interact with others and, so it's important to be aware of them and how strong they are. This article describes the effect that these can have in how we treat others who have less experience in areas that we have some expertise and that this often is to our own detriment, because we often misjudge that individual's skills and competence.

https://itnext.io/popular-elitism-in-programming-d11447bc60dd

 

Article: Always be quitting

Sure, the title of this article sounds like click-bait, but it has some of the most sound and profound career advice I've heard in a while. The author isn't suggesting that you should always be looking for your next job, but instead your day-to-day work practices should be such that you could leave on short notice without disruption to your team. Essentially, his advice comes down to developing good, sustainable communication practices, particularly with respect to documentation.

https://jmmv.dev/2021/04/always-be-quitting.html

Return to top

 

PLOM (Programing Language of the Month)

 

Clio

Clio is a new (not production ready) functional, distributed language for both browser and server programming that compiles to JavaScript. It’s main focus is on scientific applications and, accordingly, it uses parallism (multiple CPUs/cores) by default.

https://clio-lang.org/

Return to top

 

Useful Utilities

 

kn (Free – Mac OS X/Linux – 1.0MB)

kn is small replacement for the standard Unix/Linux cd command that simplifies directory navigation at the command prompt by allowing you to use abbreviations for directory names. It works its magic without depending on external tools or indexes, so it’s responsive and lightning-fast. For example, to change to the nested directory structure of ~/projects/supersecret/my_little_project/config, you can simply enter kn ~/pr/sup/my/co, as long as the supplied characters are unique at each of the directory levels.

https://github.com/micouy/kn

 

Cerberus Testing (Free – Cross-platform/Java – 100MB)

Cerberus Testing is an actively-developed and maintained open-source test automation tool built on Java. It runs as a web-based Java EE/Jakarta application or can easily be set up using Docker. It supports web, mobile (iOS and Android), and REST API testing in an integrated manner.

https://github.com/cerberustesting/cerberus-source

 

Vandal (Free – Cross-platform/Firefox and Google Chrome Extension – N/A)

Vandal is a handy free extension both Firefox and Google Chrome web browsers that provides an alternative interface to the Internet Archive Wayback Machine without leaving your current browser tab. You can navigate to earlier versions of the current page through both the familiar timeline and monthly graphical representations. Likewise, it keeps its own navigation history and shows differences between the versions that you view. One limitation of the tool is that it uses iframe, but otherwise it’s fully functional.

https://github.com/vegetableman/vandal

 

LANDrop (Free – Cross-platform – Varies)

LANDrop is a small Qt-based, cross-platform (Windows, Mac OS X, Linux, iOS, and Android) LAN file sharing tool, similar to Apple's AirDrop. It's very simple and intuitive to use and requires almost no configuration. Just run it on each machine/device on your LAN and start sharing files.

https://github.com/LANDrop/LANDrop

 

Float Exposed (Free – Cross-platform/Online tool – N/A)

Most developers are familiar with the hazards of floating-point numbers in programming. This well-designed site allows you to interactively explore the internal floating-point representation of numbers to give you a solid understanding of where you might run into trouble.

https://float.exposed/

 

Programming Fonts Test Drive (Free – Cross-platform/Online tool – N/A)

Looking for a new monospaced font to use in your editor or IDE? The awesome Programming Fonts site now features an interactive tool that lets you try out dozens of fonts with a variety of font sizes, character spacings, programming languages, and popular editor/IDE themes. And it features links directly to the site of each font so you can download your new favorite.

http://app.programmingfonts.org/

Return to top

 

Productivity Tips

 

Delete local Git branches that have been removed from remote

After a while, your local Git repos can get cluttered with branches that no longer exist on the remote. Here’s how to keep things clean. To automatically remove local branches when they no longer exist on remote when doing pull or fetch, just run the global setting:

git config --global fetch.prune true

Likewise, to explicitly delete all local branches that have been merged into master (or main or trunk, etc.), run these commands:

git branch --merged master | grep -v "master" | xargs -n 1

git branch -d

 

Reference Git commits using commit messages

Typically, Git commits are referenced by their commit hash. However, Git has a little-known syntax that allows you to reference them by the commit message by simply using :/ followed by part of commit message (or any valid regex). For example, to display any commits containing “hello world”, run git show :/hello world. See the Git documentation for details.

Return to top

 

Just For Fun

 

URL Lengthener

Tired of short, memorable URLs? Then this site is just what you’ve been looking for. Try reading off one of these URLs to your friend over the phone! And if you’re a little leery of using this service, you can check out the source code here.

https://aaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.com/

 

Map of the Internet 2021

In the characteristic style of old maps, this beautiful artistic map visualizes the current state of the World Wide Web. Prominent web sites, colored with the dominant colors from their logos, make up the “countries” along with ISPs/carriers, protocols and other infrastructure, which are further grouped into “continents” and “islands”. A really stunning look at the diversity and complexity of the Internet.

https://www.halcyonmaps.com/map-of-the-internet-2021/

 

Terms and Conditions Game

Most of us have done it, probably more times than we care to admit. We just blithely click through Terms and Conditions (T&C) pop-ups on web sites. But have you stopped to consider what you might be giving up by doing that? This little game sponsored by The Guardian newspaper puts you through 29 challenges to see if you can avoid agreeing to or signing up for anything using all of the common tricks of the trade. Maybe this really shouldn’t be in the “Just For Fun” section after all...

https://termsandconditions.game/

Return to top