Up to Newsletter Index

April 2017 Newsletter

Quotable Quotes

There is no programming language—no matter how structured—that will prevent programmers from making bad programs. –Larry Flon

If the day and the night are such that you greet them with joy, and life emits a fragrance like flowers and sweet-scented herbs, is more elastic, more starry, more immortal,—that is your success. –Henry David Thoreau

You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time. –Bertrand Meyer

Beauty might bring happiness, but happiness always brings beauty. –Kevyn Aucoin

Common sense is the knack of seeing things as they are, and doing things as they ought to be done. –Harriet Beecher Stowe

A computer lets you make more mistakes faster than any other invention with the possible exceptions of handguns and Tequila. –Mitch Ratcliffe

Return to top

Software Development Process and Methodology

Article: Metaphors We Compute By

Starting with a brief review of the seminal work, Metaphors We Live By, this author extends the ideas to show how important metaphors are in development, particularly in explaining what we do to others. He also emphasizes that just as with natural language, metaphors are a two-edged sword with both benefits and downsides.


Article: The Biggest Difference Between Coding Today and When I Started in the 80’s

Want to venture a guess about what this developer thinks is the biggest change in the past 40 years or so? While he specifically opines about the days of “rugged individualism”, my take is that real fundamental difference is around how the “paradox of choice” (so many tools and languages, so little time!) has made us less productive and has itself spawned so much “overhead” in the process (think of the dreaded “billable hour”!). All actions have consequences and we must think carefully about them, including envisioning some of the unintended ones, to simply our work.


Article: The Debugging Mindset

As we often note that software testing involves a different skill set compared to development, a similar principle applies with respect to debugging, as well. This article looks at the psychology of learning, which the author says underpins debugging capability. One key insight is that debugging can be taught, but it requires identifying an “expert” to teach others.


Article: Modules vs. microservices

We’ve had the microservice concept for just a couple of years. In this article, the author goes the route of “everything old is new again” and recommends that to avoid the orchestration complexity of microservices, we should return to the basics of modular design. Perhaps this signals a “back to basics” trend (think “monoliths”) in application architecture.


Article: JavaScript vs. Python in 2017

By now, you’ve probably concluded that continue in a development career, you must know at least the basics of the JavaScript language (probably including the functional approach). However, as this author eloquently demonstrates, the ecosystem that has grown up around JavaScript is unsustainable. By comparing to the practices of the Python community around simplicity and cohesion, the article shows some great patterns for how JavaScript can improve.


Article: How to prioritize your work

When planning your work, such as backlog prioritization, how do you decide what to do first? This article recommends starting with the areas with the most unknowns (or the least well understood). The basic concept is to clarify those areas before you spend time on things that would require significant rework later.


Article: Stop writing bad tests. Write only the tests that you can do great.

We’ve all been there. You diligently write unit tests even though it’s not clear what they demonstrate and/or they are brittle or tightly-coupled resulting in problems when you make changes. This author advocates for applying more intelligence to tests by emphasizing better understanding of the units in your code and writing tests accordingly.


Article: The CIA's "Development Tradecraft DOs and DON'Ts"

By now, you’ve probably had your fill of discussion on the Wikileak’s disclosure of CIA documents, particularly those about development “best practices.” Nevertheless, this excellent distillation of its concepts from Bruce Schneier (my favorite “hacker”) is definitely worth your time, especially with regard to factors to consider when writing secure code.


Return to top

Software Testing & Quality

Article: Testing is a separate skill and that’s why you are frustrated

Have you ever heard a developer say (or maybe even said it yourself!), “I just don’t know what to test?” This author explains that this is simply the conceptual different between the way developers approach the application and the “tester’s mindset”. Ultimately, this fact emphasizes the importance of and value brought by independent, specialized testing to the success of a project and the associated quality of the final product.


Article: Dishwasher has directory traversal bug

So everyone knew this was going to happen sooner or later, with the proliferation of “Internet of Things” connected devices. Here we have a dishwasher with built in web server that allows unhindered access to most any directory in the file system.


Article: Managing test data in end-to-end test automation

While I generally fall in the “against automation” camp for software testing, I recognize that automation has value when done correctly in appropriate situations. This article discusses the importance of effectively maintaining your test data set when running automated tests. Lots of food for thought about defining a good philosophy around test automation, too.


Return to top


Tutorial: The Basics of Package.json in Node.js and npm

When starting out with Node.JS, one of the most important things to learn and understand is what the package.json is and how it’s used by applications and Node.JS itself. This tutorial from the Node.JS folks themselves gives a detailed, yet practical introduction that will help you get up to speed quickly.


Tutorial: What Is Serverless?

No doubt that you’ve heard or seen “serverless” all over the place, perhaps mostly in marketing collateral. But what does the concept entail and what do developers need to know? This excellent entry with many equally superb links provides a great introduction and cuts through a lot of the marketing doublespeak. (Bonus: Here’s another good one on “Infrastructure as Code”.)


Tutorial: Typography for User Interfaces

Even though Nicola Mendelsohn of Facebook predicts the end of textual content on the Internet within a decade, it seems likely that it will continue to be the main form of content for quite a long time. After all, the protocol that underlies the web is called Hypertext Transfer Protocol (HTTP). Accordingly, it is beneficial for developers and designers alike to pay attention to the importance of typography in interface design.


Tutorial: Neural Networks Demystified

With interest in machine learning spiking, you may be wondering what this is all about. This video tutorial series will give you the background of one type of machine learning strategy known as a neural network, which is approach used by AlphaGo AI engine that recently beat the world Go champion 4-1. It provides a good starting point for understanding some of the basic concepts of this domain.


Tutorial/Reference: The System Design Primer

Regardless of how amazing your new application is, it won’t succeed unless you know how to practically deploy it. This comprehensive, yet eminently understandable guide will help you determine just how to architect the platform for a successful implementation. Plus, it includes tips on likely devops interview questions.


Reference: Java Versions, Features and History

This handy article lists each of the major Java releases from 1.0 through 1.8 with the date of release and a simple list of the main features/enhancements for each release. Useful for when you can’t remember which release introduced a particular feature.


Tutorial: React.js Fundamentals

The React.js JavaScript framework from Facebook has very quickly gained a lot of traction among developers. However, the paradigm that the platform uses can seem quite foreign to many. This free, comprehensive total helps you learn the basic concepts and apply them in developing an application using the framework.


Return to top

Career Development/Miscellaneous

Article: The Blockchain Will Do to Banks and Law Firms What the Internet Did to Media

While you might not be looking for a new job right now, you should always pay attention to the changes in the employment landscape. Doubtless that this article is not hyperbolic when it discusses the disruptive change to banking and law that the blockchain (think “Bitcoin”) will have in the next few years. Regardless of your current industry, pay attention to how these shifts could affect you and plan accordingly.


Article: Can’t crack that programming problem? Go to sleep (or take a walk)

Certainly, you remember that (not-so-) old adage: Work smarter, not harder. This gives some excellent impetus behind it. When you get stuck on a coding problem, it’s best to put it aside for a few hours or even overnight and look at fresh after some rest and exercise.


Article: IBM, remote-work pioneer, is calling thousands of employees back to the office

IBM was one of the first large organizations to allow remote work and nearly half of their US employees works from home. However, they have decided that across many divisions, most employees must work from one of six office locations in the US. IBM management says that direct collaboration is the reason for the change.


Article: How to Learn New Things as an Adult

In my view, the most important skill you can develop is the ability to learn new things throughout your life. With the pace of change in technology, you will likely need to renew your skills every 5-10 years (or more often!). But our brains aren’t necessarily wired to learn across the lifespan. This broad interview with Ulrich Boser, the author of the new book Learn Better, explores how new developments in neuroscience and psychology can help you be more successful at learning.


Article: 76% of high-performance employees say trade mastery, not money, most important in career decisions

One of my favorite articles of all time on technology careers is the classic “Bored People Quit”. Moreover, intuition tells us that happier people are more productive. This article provides a slightly different angle on the fact that technical expertise is often more important than salary for developers, so organizations need to invest accordingly, such as in training, conferences, and the like.


Article: Report: US tech jobs hit nearly 7 million workers, up 3% from year before

With over 182000 new tech jobs in 2016, technology workers now represent 8% (or $1.3 trillion) of the workforce, per a new survey. Moreover, tech workers’ salaries average twice the national average and more than 2/3 of states saw increases in tech worker employment.


Return to top

Useful Utilities

Usql (Free – Cross-platform/Go – 7kB)

If you have been developing for long, doubtless you’ve experienced the confusion (and frustration) about the subtle syntax differences between the various popular SQL databases. Usql has as its mission the goal of standardizing the interface across several popular DB platforms (PostgreSQL, MySQL, Oracle, SQLite, and Microsoft SQL Server) along the lines of the PostgreSQL psql tool to make you more productive working in various DB environments.


g2: The friendly Git command line client (Free – Cross-platform/Bash – 23kB)

For beginners (and even some grizzled veterans) and casual users, Git can be daunting. This simple shell tool aims to reduce the cognitive load imposed by Git in a couple of significant ways: removing the need to remember all the command line switches by prompting you for appropriate input and using simple (mostly!) two-character commands for many operations.


bash-it (Free – Cross-platform/Bash – 300kB)

Bash-it is small Bash shell enhancement that makes the command prompt both easier and more fun. Bash-it includes an excellent command prompt with support for Git along with many excellent command aliases to simply working in the shell. Moreover, Bash-it is essentially a framework, so you can use it to customize and further enhance your Bash experience. And Bash-it works great with the Bash shell from Git for Windows.


Rebase-editor (Free – Cross-platform/Bash – 772kB)

Most of probably don’t do a rebase in Git very often and, therefore, the incantation (i.e., the command-line parameters) is quite confusing. This simple shell script makes doing a rebase a relatively pain-free experience by making it interactive. It prompts you for the appropriate actions and parameters to help avoid mistakes. And it works great in Linux and Git Bash on Windows (MSYS2).


Depli (Free – Cross-platform/Java – 33MB)

Depli is a simple, self-contained Java JVM monitor that uses JMX technology. Simply run the application and log into the browser-based interface to add/configure JVM instances to monitor. Depli displays a simple, clean dashboard interface and you can drill down for more details. Built with Spring Boot, most Java developers should feel right at home with Depli.


Skrifa (Free – Cross-platform/Electron – 62MB)

Skrifa (Icelandic meaning to write!) is a full-featured word processor/editor built entirely with JavaScript. It includes support for markdown, code editing, math symbols, and even interactive data tables. It can import/export both markdown and Microsoft Word documents, as well as export notes to PDF. And all documents can be encrypted via PGP for security.


Return to top

Just For Fun

Do you know how much your computer can do in a second?

Here’s some ultra-geeky fun for you! Everyone knows computers have gotten incredibly fast in the past 50 years, but do you know how fast? Check out these code snippets (mostly in C, Python, and shell code) and take a guess at how many iterations can run in one second.


An animated GIF that shows its own MD5 hash

This must rank high on the “geek cred” scale! This animated GIF displays the value of the MD5 hash of the file itself. Strange, but uniquely fun too.


New Terminology Arising from the Mark I Computer at Harvard

The Harvard Mark I was one of the first real computers put into use. And along with it, some of the familiar terminology about computing and programming that we still use today was born.


The time it takes to change the time

In the US, a few weeks ago, we switched over to Daylight Saving Time (always forget that “Saving” is officially singular/non-possessive!). Have you ever considered the difference between the solar time (actual position of the sun) and your local time? This article gives a fascinating look into how that works and how to create a map using free spatial data sets to visualize it.


Return to top