Up to Newsletter Index

May 2017 Newsletter

Quotable Quotes

We are blessed with technology that would be indescribable to our forefathers. We have the wherewithal, the know-it-all, to feed everybody, clothe everybody, and give every human on Earth a chance. We know now what we could never have known before-that we now have the option for all humanity to make it successfully on this planet in this lifetime. Whether it is to be Utopia or Oblivion will be a touch-and-go relay race right up to the final moment. –R. Buckminster Fuller, Critical Path (1982)

To me programming is more than an important practical art. It is also a gigantic undertaking in the foundations of knowledge. –Grace Hopper

Temper [is] a weapon that we hold by the blade. –J.M. Barrie, The Little Minister

A closure is a poor man’s object; an object is a poor man’s closure. –Guy Steele

Return to top

Software Development Process and Methodology

Article: Choices and Absolutes: Enabling choice for agile delivery scrum teams

Does your organization allow development teams to choose their languages, tools, and operating practices? Or are they mandated and standardized? This developer makes some strong arguments for the value of choice, especially in terms of motivation and ownership by the development team.


Article: The myth of software time estimations

Estimation on development projects are among the most contentious of topics in the programming world. This author describes development as akin to exploring uncharted territory in the dark and, accordingly, any kind of time estimations are just wild guesses. He advocates returning to original intention of “story points” as relative measures of difficulty without any time dimension whatsoever.


Article: The Problem with Today’s Software Thought Leaders

This article puts forward an almost certainly controversial thesis. The author points out that much of the “agile” and “Scrum” practices so popular in development today don’t have much (or any!) independent empirical evidence to support them (i.e., the cargo cult mentality). Moreover, he notes that many of the well-known “thought leaders” are also consultants in these practices. While I don’t think that these short-comings invalidate agile, it is a strong indication of the immaturity of these practices and the discipline.


Presentation: Our Concurrent Past; Our Distributed Future

The head of the language (C++, C#, VB, and F#) development team at Microsoft says that the main influence on programming over the past 15 years has been concurrency. He uses this as the springboard to predict how paradigms will change over the next 15 years with a focus on the transition to distributed systems.


Article: Micro-monolith anti-pattern

Last month, we had an article advocating against microservices and for services-enabled monoliths. Of course, every architecture has its trade-offs. This author warns against what he terms “micro-monoliths”, which he characterizes as situations where changes have a cascading effect among multiple microservices.


Article: Inheriting Code: Why You Should Keep Code Teardowns to Yourself

Using his own account of trying to find who was responsible for some bad code and learning it was actually himself, this author emphasizes that playing the blame game about “bad code” is counter-productive and that a team’s efforts are better spent on the “Boy Scout principle” of leaving a code base better than you found it.


Return to top

Software Testing & Quality

Article: How to manage the computer-security threat

In this wide-ranging survey of software security, researchers from the Economist claim that software providers do not have sufficient market incentives to ensure application security. They specifically emphasize the increasing importance of quality and security in software as it moves into new areas like self-driving vehicles and the “Internet of Things” where life and limb are at risk.


Article: Auditing code for crypto flaws: the first 30 minutes

Checking applications for security defects is now part and parcel of the software testing regime, especially since cryptography code tends to be an area quite prone to error. But what if you are new to the process? This article gives you some great tips for how one security expert goes about the initial checks for flaws in crypto implementation.


Article: Testing the Windows Subsystem for Linux

In my view, one of the best ways of improving as a tester is to learn about the experiences of others, even if their situation seems rather oblique to your own. This article discusses the basic approach that Microsoft test team takes to testing Windows Subsystem for Linux (WSL) and their philosophy about quality.


Article: The guilt of not testing everything

Most testers that I’ve worked with are very good at their jobs (indispensable I’d say). Yet, one of the struggles that testers face is whether the tests were sufficient. In my view, this is the single biggest factor contributing to impostor syndrome among testers. This article provides some good perspective on this matter.


Return to top


Tutorial: LearnQuery

So most of us know that JavaScript is the lingua franca of the web (and more and more of the backend, as well!). But how do you learn the real “guts” of JavaScript? This tutorial takes you through a 7-module course where you implement various core features of the jQuery library to learn the inner workings of JavaScript. Modules include CSS and DOM manipulation, AJAX requests, event handling and more.


Tutorial: Hidden in Plain Sight - Public Key Crypto

At first sight, public key cryptography seems like magic or that it would be impossible for it to work. And explaining the concept to others is exceedingly difficult. This excellent tutorial with a nice video and code examples in JavaScript will help you really understand the concepts.


Tutorial/Reference: Pythonic Data Structures and Algorithms

Perhaps one of the best ways to learn (or refresh your memory on) a programming language is by seeing common data structures and algorithms, which you probably already know in the languages you already use. This comprehensive repository includes not only the data structures and algorithms in a straightforward, minimalist manner, but also includes simple examples of common uses to help you understand the pattern.


Tutorial: Containers are Linux

One of the concepts that is a bit difficult to grasp when getting started with Docker (or LXC or any other virtualization platform) is what constitutes a container. This article does an excellent job of explaining the container concept, including its components, and the relationship of containers to Docker itself.


Reference: Sideways Dictionary

This handy online reference of oft-confused technology, development, security, and networking terms uses clever analogies to explain the concepts, rather than other arcane and esoteric terms. It’s not only educational, but fun, to read.


Tutorial: Revealing the Inner Workings of JavaScript’s “this” Keyword

As we’ve discussed, previously, JavaScript is an object-oriented language that uses prototypal inheritance, rather than the (perhaps) more common class-based inheritance. Thus, the ‘this’ keyword in JavaScript can be a bit more difficult to grasp at first. This excellent tutorial explains the concept clearly using clear, relevant examples.


Tutorial: SimpleCPU.com

If you want to learn about the fundamental underlying structure of computers and how they take the code that we write and do useful things, then check out this simple, brief tutorial. The author starts with binary arithmetic and then discusses logic gates and finally how those work together with code in the CPU.


Return to top

Career Development/Miscellaneous

Article: 10 skills you need to become a great project manager

One good transition for developers who want to move onto the management career path is into project management. If you are considering this track, you might wonder what the key skills are for project managers. This article presents ten important traits and skills, including how each is used.


Article: All the evidence-based advice we found on how to be successful in any job

Whether you are just starting out in your career or job or have been at it for decades, you’re sure to find something of interest and use in this article to improve your productivity and impact. The most important aspect of this article that makes it different from many is that each item is backed up by solid research.


Article: The psychological importance of wasting time

Call it “wasting time”, “daydreaming”, “unstructured time”, or whatever makes the most sense to you, but researchers know that constant work is not only impossible, but unhealthy. Moreover, they emphasize that this time away needs to be really away, not sitting at your desk browsing cat videos on the Internet, such as perhaps taking a walk to clear your mind and gain a different perspective or a few exercises to counteract a sedentary lifestyle.


Article: You’re Too Busy. You Need a ‘Shultz Hour.’

When George Shultz was U.S. Secretary of State, he would take one uninterrupted hour per week to think strategically about his job and write down ideas for how to accomplish those items. Most of us have mostly tactical work, but we should also consider the strategic aspects of our jobs and career. Perhaps you need to also set aside some time each week to do just that.


Article: Software Developers After 40, 50 and 60 Who Are Still Coding

Citing the fact that while the median age of American workers is 42, but less than 13% of developers are over 40, this article interviews several common developers (i.e., not the famous ones, although we have plenty of them who were late bloomers!) who have intentionally stayed in the role past age 40. One of the common themes among them is the satisfaction of mentoring those new to the field. However, I felt a bit uncomfortable that all of those interviewed were white males, since sustainability of the profession depends on diversity.


Article: Stack Overflow's Annual Developer Survey

Stack Overflow has released their 2017 developer survey based on feedback from over 64000 respondents. Among the results are the most popular programming languages: JavaScript, SQL, and Java. Check out the article for additional insights.


Article: Banks scramble to fix old systems as IT 'cowboys' ride into sunset

With many legacy applications, banks (as well as plenty of other businesses!) are struggling to find COBOL programmers to help fix and integrate their applications. One programmer parlayed this problem into a consulting business. Perhaps it’s time to brush up on COBOL.


Article: A New, More Rigorous Study Confirms: The More You Use Facebook, the Worse You Feel

New research based on three data dimensions of over 5000 adults, indicates that excessive social media use correlates strongly to depressed mood and other psychological disorders. It also confirms that real, personal social interaction promotes better mental health.


Return to top

Telecommunications/Networking Industry

Article: Designing 100G optical connections

A Facebook engineer discusses the development and implementation of an open-source 100G single-mode optical transceiver that they developed for interconnecting data centers. The main driver for the design was ability to upgrade the transceivers for faster speeds without rebuilding the fiber infrastructure.


Article: Espresso makes Google cloud faster, more available and cost effective by extending SDN to the public internet

Top-level Google network technologist discuss how they are using their SDN (software-defined networking) technology to improve performance of the peering/edge network.


Return to top

PLOM (Programing Language of the Month)


Rooby is Ruby-like (syntax compatible) object-oriented language implemented completely in the Go language. Thus, it allows you to develop applications in familiar Ruby and compile them to small, native binaries that run anywhere that Go does without dependencies or virtual machine. The author’s focus for the language is microservice development, but most Ruby language features are available, so it can be used for most any development effort.


Return to top

Useful Utilities

GiG [GitIgnore Generator] (Free – Cross-platform/Bash – 55kB)

GiG is a simple, yet powerful shell script that generates .gitignore files a variety of languages and frameworks. It has templates for 100 languages/frameworks! And you can easily add your own templates for specialized situations. GiG is a real timesaver if you start with plain vanilla configurations frequently.


Git Standup (Free – Cross-platform/Node.JS – 6kB)

Trying to remember what you worked on yesterday? Or maybe you envy your hyper-productive coworker? Git Standup is a simple JavaScript utility that summarizes your Git commits for any time period (the last day, by default). It works with either the current repository or all repositories under your current directory, so it’s great even if you are working on many projects.


Easy Window Switcher (Free – Windows XP/7/8.x/10 – 133kB)

You probably use <Alt>+<Tab> to switch between windows dozens of times each day. Easy Window Switcher takes this shortcut one step further by allow you to use <Alt>+` (back tick) to switch between/cycle through all windows of the same application. Very handy when working with multiple spreadsheets or copying/moving files in separate Windows Explorer windows.


bfs (Free – Linux/Unix/Cygwin – 94kB)

bfs stands for “breadth-first find” and it is a drop-in replacement (supports same command-line parameters) for the venerable Unix find command. The difference is that it searches breadth-first in the file system instead of depth-first, which tends to find the file you are looking for more quickly.


Stack (Free – Windows XP/7/8.x/10 – 792kB)

Undoubtedly, this application won’t appeal to all readers, but tiling window managers are very popular on Linux among developers. Now, Windows users have this option, as well, with Stacks. It features multi-monitor support, defining custom layouts, moving windows with keyboard or middle mouse button, and more.


Return to top

Just For Fun

This is what happens when you use neural networks to generate pickup lines

Artificial intelligence (AI) is taking over the world, especially in the form of neural networks. Some even fear that it will take away everyone’s jobs. But it looks like we still have a ways to go before AI masters the pickup line.


Mystery of why shoelaces come undone unravelled by science

Now this is news you can use! Researchers at none other than Cal Berkeley have figured out why, despite your best efforts and intentions, shoelaces still come untied. It all comes down to the forces exerted on them by the swinging of your leg and your feet striking the ground while walking.


Species in Pieces

This site features a very creative approach to building awareness. It shows 30 endangered species, all rendered entirely with CSS3. Beautiful and informative!



So you probably know the joke about how you can’t (or actually used to be unable to) ship a software program that uses pi to certain countries because it likely (not definitely!) contains every finite sequence of digits. This flips that idea around to use sequences of digits from pi to “compress” data. The author’s tests show it took ~3 minutes to “compress” a 50kB image and makes the resulting file 3-5 times larger.


Return to top