Programming is a few brief moments of sublime elegance embedded in months of niggling, exacting, precise trivialities. –Alan Cooper, creator of Visual Basic
All are lunatics, but he who can analyze his delusions is called a philosopher. –Ambrose Bierce, Epigrams
If you had to identify, in one word, the reason why the human race has not achieved, and never will achieve, its full potential, that word would be ‘meetings’. –Dave Barry
Habitable software is better than perfect software, both for its users and its developers. –Richard Gabriel, Patterns of Software: Tales from the Software Community (1996)
Be truly clever; write boring code. You'll have fewer bugs, and the maintenance programmers will love you for it. –Steve Maguire, Writing Solid Code
By now, you are probably keenly aware that technologies like big data analysis, artificial intelligence and machine learning are powerful and useful. While many small organizations (think startups!) have adopted them, enterprises have been noticeably slow on the uptake. This author looks at how you can help your company make the transition successfully.
https://readwrite.com/2017/06/15/incorporating-machine-learning-enterprises/
Somewhere along the road to agile, we seem to have adopted the idea that “agile” means “no documentation”. This article explains how Lyft prepares the appropriate level of technical specifications for their platforms without getting bogged down in irrelevant minutiae.
https://eng.lyft.com/awesome-tech-specs-86eea8e45bb9
Sure, the title of this article contains some clickbait, but the author does a good job of explaining why the “centralized” architecture of the cloud today can’t last, mostly due to intractable security limitations. He goes on to discuss some of the ideas around a new architecture, including distributed approaches such as IPFS and BitTorrent.
https://venturebeat.com/2017/11/04/the-end-of-the-cloud-is-coming/
So, you want to improve the quality of your code, but where should you start? This article takes a compact (“Tweet-sized”) statement and builds a strong test-driven development (TDD) methodology from it. The author emphasizes that focusing strictly on unit tests (the typical approach for TDD) often results in missing the forest for the trees and instead says that integration tests (i.e., between modules and classes) are where tests are most valuable.
https://blog.kentcdodds.com/write-tests-not-too-many-mostly-integration-5e8c7fff591c
If you’ve been working in technology for a few years, doubtless that you’ve seen your share of “over-engineered” applications or systems. This developer discusses how we fall into the trap of over-engineering using some relevant examples and also explores how organization culture contributes to the problem. He goes on to gives some ideas for how to avoid this common pitfall.
https://c0de517e.blogspot.fr/2016/10/over-engineering-root-of-all-evil.html
Type theory and developers’ preferences about whether strongly-typed languages deliver better quality is a slippery slope to go down. Nevertheless, this article provides substantial evidence that typed versions of JavaScript (TypeScript, Flow, etc.) directly reduce defects in the range of 10% - 15% (all else being equal). And for an interesting alternative view, check out this article.
Do you ever wonder if it’s worthwhile to create defect reports with lots of details and steps to reproduce? This article shows how they can help your deliver better quality applications faster. While the report probably took the tester a good bit of time, that time was more than made up for by making it easier for the developer to find and fix.
https://mikekaganski.wordpress.com/2017/11/06/big-consequences-of-a-good-bug-report/
Again focusing on the principle of finding defects as early in the process as possible, this article examines the concept from the perspective of test-driven design (TDD) and how developers can use good practices to isolate problems as soon as possible in the programming/implementation process.
http://samwho.co.uk/blog/2017/09/06/move-your-bugs-to-the-left/
If you don’t think that the quality of the user interface of your application is important, perhaps this article will change your mind. The Navy’s investigation into the collision of the USS McCain concluded that UI confusion was at least partially responsible for the accident. UIs should at least minimize ambiguity about options.
Most readers of this newsletter aren’t graphic designers or artists, but most still want to build elegant, effective UIs for applications. Likewise, typography is often a more powerful tool for usable interfaces than any other factor. This brief guide underlines the key principles to using type in web design and application GUIs effectively by using simple, practical examples.
http://pierrickcalvez.com/journal/a-five-minutes-guide-to-better-typography
One of the best ways to learn a new programming language is to use the basic principles to build something that you already (conceptually) understand. In this tutorial, the author takes a step-by-step approach at building a simple hash table in JavaScript, by starting with a naïve implementation and building up to an efficient algorithm.
http://www.mattzeunert.com/2017/02/01/implementing-a-hash-table-in-javascript.html
Often, one of the big hurdles in learning a new language or development platform is finding the best way to debug your code. This article gives many simple, yet very useful suggestions for improving efficiency with debugging JavaScript in the browser.
https://raygun.com/javascript-debugging-tips
Sometimes, learning about a new technology is hampered by jargon and terminology that is foreign to you. If you are getting started with blockchain or cryptocurrency technology, this is a handy reference to the common terms used.
https://www.theblockchainnewsletter.com/glossary.html
This author tackles the counterintuitive observation that noise in open-plan offices tends to distract us, while noise at the local coffee shop helps us to focus. The conclusion that he draws is that it’s not the noise that is the problem (in fact, some noise is helpful!), but the interruptions in the office that lower productivity.
https://hbr.org/2017/10/why-you-can-focus-in-a-coffee-shop-but-not-in-your-open-office
Diversity is a hot topic in the technology industries and one of the newer topics is so-called “ageism”. A new survey from Indeed of over 1000 tech workers says that 40% are concerned about losing their job due to age with nearly 20% very worried. The survey shows very few tech workers aged 40 and over. Recently, agile pundit Kent Beck wrote about ageism and it’s been discussed on InfoQ, as well..
Perhaps you haven’t reached the age yet where your memory starts to fail. (I have!) This article gives some non-intrusive, easy-to-learn tips for how to remember important things. The most important suggestion is that you need focus and concentration to learn and remember.
https://www.nytimes.com/2017/10/19/smarter-living/simple-ways-to-be-better-at-remembering.html
fd is a minimal, fast replacement for the venerable Unix/Linux find command. It features simplified syntax, such as case-insensitivity and ignoring hidden files/directories by default, and full support for searching for files with regular expressions. It’s cross-platform, built with Rust, and binaries are available for Windows and Linux.
Even for those with a good bit of experience creating new virtual disks with the Virtual Box createrawvmdk internal command is notoriously difficult. Nevertheless, creating raw disks is a common task for Virtual Box. VBox Raw Disk GUI is a Java-based utility that provides a simple GUI for the various parameters needed by createrawvmdk.
https://sourceforge.net/projects/vboxrawdiskgui/
If you are a Vim user who needs to work with CSV (or other delimited) files, with rainbow_csv you no longer need to switch to another tool for simple viewing, editing, or summarizing. It automatically highlights data from each column in a different color and allows you to use a simple SQL-like language for SELECT and UPDATE queries. You can even use JavaScript or Python expressions in your queries. And it supports non-delimited files, as long as the data format is consistent.
https://github.com/mechatroner/rainbow_csv
One of the best new features for developers in Windows 10 is the Windows Subsystem for Linux (WSL), which gives you a full-featured Linux system inside of Windows. But getting to WSL can be tricky. Enter wsltty, which allows you to use the excellent mintty terminal as a front end to WSL. Moreover, you can create Start Menu shortcuts to launch different WSL terminals directly.
https://github.com/mintty/wsltty
There are many open-source tools for building a REST API from a database, but you probably won’t find a simpler one than xmysql. It combines the power of Express.JS framework with Node.JS to dynamically build a full-featured REST API from any MySQL database. It has full CRUD support, as well as support for pagination, sorting, relationships between tables and more.
https://github.com/o1lab/xmysql
Most readers are a familiar with the old saw “Necessity is the mother of invention”. I don’t know if this fits quite into that paradigm, but certainly boredom gives rise to its share of quirky creations. Want to know when someone checks in profanity on Github? Head over to this bot Twitter account.
https://thenextweb.com/apps/2017/10/09/twitter-microsoft-bot-swear-github/
To celebrate the 500th anniversary of Martin Luther delivering his 95 Theses to the Archbishop of Mainz (contrary to popular myth, he never actually nailed them to the door of the Castle Church), you can use this site to provide you with an insult from all of Luther’s plethora of writings. Here’s a salient example: You ass, abecedarian, and bacchanal.
http://ergofabulous.org/luther/