May 2018 Newsletter
Your ability to realise your human limitations will put you head and shoulders above the average programmer today. –John von Neumann
A society grows great when old men plant trees whose shade they know they shall never sit in. –Greek Proverb
Living faith always involves love. –H. Richard Niebuhr, Christ and Culture (1951)
If you pursue evil with pleasure, the pleasure passes away and the evil remains; If you pursue good with labor, the labor passes away but the good remains. –Cicero
It is better to fail in originality than to succeed in imitation. –Herman Melville
Obstacles are what you see when you take your eyes off goals. –William "Bull" Halsey
This is the mark of a perfect character: to pass through each day as though it were the last, without agitation, without torpor, and without pretense. –Marcus Aurelius
When we develop applications, we want to build the best possible one. This article explores four specific factors (or dimensions, if you prefer) that work together to form the characteristic of a good application. One of the interesting aspects of the author’s view is that only 20% of an application serve to fulfill the requirements, with the remainder encompassing these other factors.
http://hangaroundtheweb.com/2018/03/the-four-factors-of-a-good-program/
Microservices aren’t the new kid on the block any longer, but many organizations are still just getting started with them. If you are considering how they might fit in your architecture, this article gives a simple, balanced look at the pros and cons.
https://caylent.com/microservices-good-bad-ugly/
Of course, this article title exaggerates intentionally. However, the author says that more direct business engagement in application development will be the norm as we move to API-based applications. Furthermore, he notes that successful implementation of this approach requires agile organizations (not just agile development practices).
https://www.inc.com/greg-satell/how-no-code-platforms-are-disrupting-software.html
We all have our ideas about what is the key skill in successful programming. This author says that being able to manage and keep track of the interconnections between portions of applications is more important that writing elegant algorithms or data structures.
https://www.johndcook.com/blog/2015/06/18/most-important-skill-in-software/
Undoubtedly, you work on a (or perhaps more than one!) team. The keys to team success in accomplishing projects are communication, collaboration and cooperation. In the spirit of anti-patterns, here are some tips for both leaders and team members on how not to work well with others.
http://nywkap.com/other/miserable-teams.html
You’ve probably heard about the idea of a “10x developer”: someone who (supposedly) can do the work for 10 “average” developers. This author turns the concept on its head and instead says that 10x developers are the ones that make those around them shine, so that the whole team is more productive. She explains 10 things that these people do to bring out the best in others.
https://kateheddleston.com/blog/becoming-a-10x-developer
Every project has various constraints that must be obeyed. At the same time, you want to develop code that is solid and can be maintained. This article provides a four-quadrant model for how to identify the code that you should spend your limited resources in shoring up.
http://marcgg.com/blog/2018/03/18/software-quality-focus/
By now, you have probably heard about the disastrous system migration that has left almost 2 million customers of TSB without access to their accounts for nearly two weeks. Recent information partly blames insufficient testing as one of the underlying causes of the problems and that warning signs of problems were seen more than a year ago.
For many years, we’ve heard about the imminent demise of manual testing. Likewise, while automated testing has become (legitimately so!) mainstream, this author shows why manual testing, particularly exploratory testing, still provides benefits that automated testing can’t do.
https://henrikwarne.com/2018/05/01/is-manual-testing-needed/
Most software testers are familiar with the “test pyramid” for how to allocate resources and effort for testing. But there seems to be very little information about how to apply the concepts in practice. This article digs deep into building the various layers of your test regimen with copious examples.
https://martinfowler.com/articles/practical-test-pyramid.html
Sometimes, anti-patterns work better than simply providing best practices, because the warnings about downsides can spur us to act. This extensive lists clearly explains the benefits and possible problems of ignoring of each of the testing practices described.
http://blog.codepipes.com/testing/software-testing-antipatterns.html
Very rarely will you work on code in isolation, so it’s imperative to work effectively with others. Source code is often the primary point of interaction among team members. This article provides some great principles for writing good commit messages that make working (especially asynchronously!) with other team members successful.
If you use Visual Studio Code editor (and, if you haven’t tried, I highly recommend giving it a go!), this site provides several productivity tips that you may not know, across a variety of domains and languages. The tips are brief, simple and self-contained, with each accompanied by a short screencast.
What if learning algorithms was as simple as assembling a piece of Ikea furniture? Perhaps that is just a pipe-dream, but this site comes very close. It has visual explanations of several common algorithms and the authors are committed to adding more.
https://idea-instructions.com/
All the major browsers have sophisticated developer tools that help you test and troubleshoot web pages. However, to use them effectively, you need to know some of the key features. This article gives you some practical advice on the various features of the Google Chrome Developer Tools.
https://flaviocopes.com/chrome-devtools-tips/
If you have a Java (or perhaps PHP) development background, but are curious about what all the hype about the Go language is, this is an excellent starting place. The tutorial consists of simple, yet relevant, concepts that you are already familiar with to show how idiomatic Go compares to Java.
http://yourbasic.org/golang/go-java-tutorial/
This comprehensive infographic summarizes developer salary statistics from several reputable sources to give you a quick look at where you stand, based on industry sector, geography, experience and more.
https://devskiller.com/infographic-software-engineer-salary/
The Pinterest development manager discusses how they implemented a policy of no meetings for developers (and other individual contributors) Tuesday - Thursday. He explains the impacts, both positive and negative, including the significant improvement in job satisfaction and productivity.
https://medium.com/@Pinterest_Engineering/three-day-no-meeting-schedule-for-engineers-fca9f857a567
Technology jobs, such as developer or program, tend to have higher levels of “impostor syndrome” and associated stress-related problems. This author examines what factors contribute to this and how employers and workers can address them.
http://interactions.acm.org/archive/view/may-june-2018/is-there-a-fix-for-impostor-syndrome
As technologists, we typically think that we are far beyond the primitive days of simple tools. However, as this article demonstrates, we are still fundamentally tool users (or, often, tool makers). The author emphasizes that just as artisans and craftsmen of physical objects, we too need to learn to use our tools (editors, IDEs, build systems, deployment tools, etc.) effectively and efficiently to practice our craft well.
http://muratbuffalo.blogspot.com/2018/03/master-your-tools.html
Let’s face it. Most of us are average programmers and that’s nothing to be ashamed of. Each of us contributes in our way. This article provides some practical advice for those of us below the “rock-star programmer” classification for how to be successful.
https://dev.to/sobolevn/i-am-a-mediocre-developer--30hn
Using icons for visual cues is very helpful in locating what you are looking for. This repository contains 50+ well-designed icons in ICO and PNG formats (and ICNS for Mac OS X users) that you can use to style folders on your system. Icons include those for many different file types, programming languages, and popular frameworks.
https://vigokrumins.github.io/folder-icons/
Everest is a small, self-contained, cross-platform REST client (like Insomnia or Postman) for web service testing. Built on JavaFX, it runs on most any platform and has nice features like multiple tabs, API call history, formatted JSON response data, and more.
https://github.com/RohitAwate/Everest
Git Town is a shell-based enhancement to the regular Git client to improve productivity and workflow for some common Git tasks, such as synchronizing your local branch with others, opening a pull request, and deleting all merged branches (pruning). It fits in cleanly with your current workflow by simply adding the git town sub-set of commands with intuitive parameters. And it works everywhere that Git works, including packages for many Linux distribution package managers.
Sometimes reading the man pages for Linux/Unix commands can be daunting, often due to the number of flags/parameters. Manly summarizes the man pages for a command to include only the specific flags/parameters that you are interested in. Want to know what ls -lrt does? Just run manly ls -lrt to get the details of only those flags.
https://github.com/Zaab1t/manly
Even after 25+ years and dozens of file managers that I’ve tried, the original Windows file manager (a.k.a. Winfile) is still one of my favorites. The MDI layout makes it easy to browse and copy/move files from a single window. Now, Microsoft has released an open-source version compatible with all Windows versions up to Windows 10 for those nostalgic for the old days. (Note: VC140RUNTIME.DLL is required. It can be installed from here.)
https://github.com/Microsoft/winfile
The first time I encountered a Lego Technic set (a gift for my son), it baffled me about how much fun these “non-standard” kits could be. But they kind of grew on me. This site, which is a personal labor of love for the creator, provides an amazing catalog of the history of Lego Technic, including the incredible Super Car (set #8880).
I debated about whether to put this down here or under the “Useful Utilities” section, because it is a real project to provide OpenGL bindings for Bash. You never know when you might need to whip up a little FPS shell script! Read this for the interesting story behind the library.
https://github.com/nrdvana/CmdlineGL
One of the genre-defining science-fiction films, 2001: A Space Odyssey, premiered 50 years ago this month. Here’s a less well-known story told by legendary fantasy/sci-fi writer Michael Moorcock about how 2001 author and screenwriter Arthur C. Clarke was not impressed by Kubrick’s film.
Having trouble coming up with reasons to tell the boss about why your application or platform can’t support IPv6? This site is just for you! Many “excuses” even include links to relevant information if it’s a little over your head.