Up to Newsletter Index

April 2016 Newsletter

Quotable Quotes

Our lives improve only when we take chances –and the first and most difficult risk we can take is to be honest with ourselves. –Walter Anderson

And Spring arose on the garden fair,

Like the Spirit of Love felt everywhere;

And each flower and herb on Earth's dark breast

rose from the dreams of its wintry rest.

–Percy Bysshe Shelley

The biggest barriers to strategic renewal are almost always top management's unexamined beliefs. –Gary Hamel

Return to top

Software Development Process and Methodology

Article: Technical Debt – Bad metaphor or worst metaphor?

Ron Jeffries, creator of “Extreme Programming” methodology, says that the term “technical debt” does a disservice by implying that it is something that can be tolerated (“refinanced”?). He suggests that we need to emphasize to business users that it is a code quality problem that should be addressed as soon as possible.


Article: Scrum is not enough: How to sell the benefits of scrum + Extreme Programming

I believe that we are seeing a trend away from “pure” (if there really is such a thing!) Scrum as an agile approach toward other methodologies, including Scrum hybrids. This article presents ideas about combining Scrum with Extreme Programming (XP). The main takeaway is that software quality must take a backseat in favor of speed.


Article: Microservices, the Unix philosophy, and the Richardson Maturity Model

As we have noted in earlier issues, microservices seem to be one of the key architectural paradigms for application development now. This article discusses some of the best practice principles and the underpinnings of this architecture. Some really great information on how to think about and apply microservices effectively.


Article: Clean Code - Why It Matters

We all know that following good practices (TDD, etc.) and core principles (SOLID, DRY, etc.) are important. So why is it that so many of us still write “ugly” code? This article discusses the psychology of “ugly” code and offers some good ideas for how to break bad habits and write clean code.


Article: Linux at 25: Why It Flourished While Others Fizzled

It’s hard to believe that it’s been 25 years since Linus Torvalds posted a modest announcement about his operating system project that blossomed into Linux. But, at the time (and still now), Linux isn’t the only game in town for free OS kernels, so why did it win out? This article looks at the main reasons and it seems that the license model had a lot to do with it.


Article: Container Tidbits: When Should I Break My Application into Multiple Containers?

We hear and read a lot about containers (Docker, LXC, etc.) and how they are the wave of the future for virtualization. However, there seems to be little in the way of why it’s appropriate to “containerize” your application. This article puts forth some good principles for when to use containers to scale up your application.


Article: Why Apple and Google are struggling to design simple software

At one time, including “everything but the kitchen sink” in an application was a badge of honor. Now, customers are demanding simplicity, frequently to reduce the cognitive load of application use, or, as the article says, “People don’t want Star Trek. They want Minority Report." So, if you think design can be left to chance, you probably need to think again.


Article: How to Avoid Brittle Code

Writing good code goes far beyond just developing code that efficiently and effectively meets the requirements. It also encompasses such concepts as good architecture. This article focuses on code that can be changed (or even replaced) without significant effort or impact to the overall application. The author emphasizes unit tests as the appropriate method for building modular code.


Article: Be a shepherd not a cowboy in leadership

Management and leadership in software development differs from other disciplines, primarily because knowledge workers, like developers and testers, are typically intrinsically motivated. This author shares the paradigm of leading from the front, like a shepherd does, as the standard for development guidance.


Return to top

Software Testing & Quality

Article: Apple takes its eye off the ball: Why Apple fans are really coming to hate Apple software

Following up on last month’s article about the decline in the quality of Apple software, here’s another story that curates a variety of the opinions that are floating around. The upshot is that, if you don’t keep focus on customer needs and quality, you may find yourself with significant backlash against your product.


Article: The importance of a good bug report

If you want to improve the chances that a defect that you find actually gets fixed, then you need to ensure that you write a good bug report. Check out this article that gives some pointers about the key traits of the good bug report and some tips for improving your bug report workflow.


Article: Let's stop talking about quality

Obviously, this article’s title is provocative, but the author has a good point. He says that discussions about “quality” (an abstract notion itself) are too polarizing. He suggests that we need to instead focus on communication about what the stakeholders want and balance the needs of all involved to get the best possible result.


Article: What Makes Software Good?

Notwithstanding the article above, even if we don’t need to argue about the definition of “quality”, we still need to consider what factors make an application good, from the perspective of the customer. In this excellent article, Mike Bostock, the creator of the amazing D3.js toolkit, provides great insight, particularly as it applies to those who develop tools for others to build on top of.


Return to top


Tutorial/Reference: floatvis

If you’ve been programming for any appreciable amount of time, you are likely familiar with “What Every Computer Scientist Should Know About Floating-Point Arithmetic”, which is a classic paper in the world of computer science. To help you visual many of the concepts about how floating-point numbers are stored and how FP precision is managed and what happens when you run into precision problems, this site provides a nice visualization of how digits are stored and used.


Reference: Computer Science Field Guide

Need a refresher on a CS topic or perhaps you are a self-taught developer and want to learn some of the underpinning concepts? Look no further than this comprehensive, yet understandable, guide to all-things computer science. While it is targeted at high school students, this guide offers practical, solid tutorials on almost any CS topic that are suitable for those at any stage of their careers.


Reference: Undoing commits in Git

Everyone has need to undo a commit (with or without push) to a Git repository at one time or another. This single workflow graph shows the Git commands to reverse your actions.


Tutorial: 0 to Microservice in 5 minutes with Go, go-microservice-template and Minke

Google’s Go language continues to gain ground in the systems programming arena and now it’s moving further in web development, as well. This detailed tutorial shows how to use Go and several other open-source tools to quickly build microservices using the Bauhaus approach.


Tutorial: The Heart & Soul of Prototypal OO: Concatenative Inheritance

Using copious relevant examples, this author explains why understanding concatenative inheritance (that’s a mouthful!) is key to success in programming JavaScript, or any other prototypal inheritance-based language. In fact, the most popular JavaScript libraries, like jQuery and Underscore.JS, are all based on this principle.


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.


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.


Return to top

Career Development/Miscellaneous

Article: Friction Between Programming Professionals and Beginners

Everyone has to start somewhere and we are all beginners at things at various times. This article offers some great perspective on bridging the gaps between experienced developers, who often think that certain things should be obvious, even to novices, and those who are just getting started. There’s good advice for those on both sides of the discussion.


Article: How to pass a programming interview

While you may not be looking for a new job right now, it’s always useful to keep your skills sharp. Development job interviews tend to be different from other kinds of interviews, particularly the mock coding portion, although some dismiss the value of coding exercises. This article covers all of the bases of the entire interview process, including the coding activity. While oriented toward startups, the advice applies mostly across the board. One of the more interesting tips that I found was that it’s OK to use “dynamic” languages, such as Python, JavaScript, or Ruby, for the coding portion, but make sure to reference your experience with low-level languages like C, C++, Go, or Rust.


Article: Overworked? Good habits, not holidays, are the answer

Feeling burned out at work and think you need a few days off? Research shows that the beneficial effects of vacation usually only last two to four weeks, so, instead, you need to develop some daily routines to build resilience. This article suggests such things as making sure that you mentally leave work at work and taking periodic breaks.


Article: Patrick McKenzie on What Developers Should Know About Job Searching and Negotiation

Technical folks normally focus on technical aspects of their work, but certainly one of the main objectives is to make enough money to fulfill your other goals. This article provides some good advice on negotiation of salary and benefits when looking for a new job.


Article: Deep Work: Rules for Focused Success in a Distracted World

This brief summary for Cal Newport’s new book, Deep Work: Rules for Focused Success in a Distracted World (excerpt here), gives some great insights and tips on how to be more productive in the modern workplace, which is filled with distractions, both internal and external. The reviewer discusses his experience with applying the concepts and notes that he significantly increased the number of code commits by removing distractions.


Article: CEO

Ever wonder what the CEO does (or is supposed to do)? This extensive essay explains many of the roles and responsibilities of a CEO, especially in the context of startups and/or businesses that may be in financial straits. Very interesting reading and perspective on the importance of ethical behavior.


Article: Complaining Rewires Your Brain for Negativity, Science Says

For many of us, complaining feels good and (apparently) helps relieve stress. However, new brain research indicates that it also does significant damage both to mental and physical health. Most interestingly (to me, at least!) is that the Biblical admonition that “Bad friends will ruin good habits” is backed up by the science when it comes to complaining.


Return to top

Telecommunications/Networking Industry

Article: Google Fiber makes phone service official, starts at $10 a month

If you didn’t believe that Google’s fiber service was just the first step in becoming a full-fledged telecom provider, this announcement should make it clear. In markets served by Google Fiber, they now offer landline service for $10 per month, which includes auto-forwarding to your mobile phone and voice mail transcription.


Article: The Dragonslayer: An Interview With FCC Chairman Tom Wheeler

When President Obama appointed Tom Wheeler to chair the FCC, liberals decried the decision to put a former telecom industry lobbyist (that’s even what Wikipedia search calls him!) in the job and the telecom industry cheered having one of their own. Now, 2-1/2 years later, almost everyone is surprised by his various turns. This broad interview, on the eve of a major net neutrality decision, discusses how he has shown a strong independent streak during his tenure.


Return to top

Useful Utilities

Nativefier (Free – Linux/Mac OS X/Windows – 105kB)

Nativefier is a neat little Node.js utility that allows you to make any web application, internal or third-party, into a native application that runs on Linux, Mac OS X, or Windows. It has many configuration options, but most applications can be packaged with a single simple command. Essentially, Nativefier is a helpful wrapper around the Electron Packager application.


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

Most of us aren’t experts in SSH and network security and we usually don’t have time to learn all that we should know. This simple site will help you check the SSH configuration on your hosts/servers to ensure that they are set up properly and secure.


how2 (Free – Cross-platform/Node.JS – 2.2MB)

How many times a day do you consult Stack Overflow for a development question? If it’s more than a couple of times a day, you know how you lose time and concentration by firing up the browser to use it. With how2, you can query Stack Overflow from the command line! It automatically displays the first result, but you can interactively browse the results to find just what you are looking for.


Keypirinha (Free – Windows – 8.5MB)

Keypirinha is a small, responsive semantic launcher for Windows users who prefer keyboard interaction. Conceptually, it’s similar to Alfred on Mac OS X or Albert on Linux. One of the coolest features is its support for plugins (several are included!) written in Python 3, which allow you to do things like launching a PuTTY session directly. Moreover, it stores all of the configuration settings locally, so it’s completely portable.


Return to top

Productivity Tips

Quickly open (or switch to) applications pinned to Windows task bar

If you use Windows 7 or later, you probably enjoy the capability to pin your most-used applications to the task bar for easy access. Here’s a tip to make you even more productive with them: To open one of the first ten applications pinned to the task bar just press <Windows key> + # where # is 0 – 9 (0 opens the tenth pinned application). If the pinned application is already open, Windows will bring it to the foreground instead of opening it. And just press <Windows key> + # again to send that application to the background again.

Return to top

Just For Fun

The band you can book via GitHub pull request

Looking for a band to play at your next event, but don’t want to go through a booking agent? Well, here’s a band that schedules gigs via pull requests on Github. Of course, it’s a gimmick, but a pretty creative one!


Flexbox Defense

Do you enjoy tower defense style games? If so (or even if you don’t know what tower defense is!), check out this game that teaches you CSS flexbox by using flexbox properties to position your towers. Weird, but strangely interesting too.


Cyclops Programming Language

Is programming too easy for you these days? Maybe you need a bigger challenge. And Cyclops provides it. Instead of using typical Roman characters, it uses Linear A, an undeciphered script for the island of Minos in ancient Greece.


FizzBuzz Enterprise Edition

Any self-respecting developer wants to make sure that they follow development best practices, especially if you work in a large enterprise. If this describes you, check out this example project for implementing the now-classic fizz-buzz sample application, using Spring and J2EE.


Return to top