The future belongs to the integrators. –Ernest Boyer, quoted in “People Who Have “Too Many Interests” Are More Likely To Be Successful According To Research”
Believe me, every man has his secret sorrows, which the world knows not; and oftentimes we call a man cold, when he is only sad. –Henry Wadsworth Longfellow, Hyperion
An approximate answer to the right question is worth a great deal more than a precise answer to the wrong question. –John Tukey
It is not possible to be good in the strict sense without practical wisdom, nor practically wise without moral virtue. –Aristotle, Nicomachean Ethics, Book VI
It is far better to improve the effectiveness of testing first than to improve the efficiency of poor testing. Automating chaos just gives faster chaos. –Mark Fewster
The only real valuable thing is intuition. –Albert Einstein
Delighted with myself and with the birds,
I set them down and give them leave to be.
It is by words and the defeat of words,
Down sudden vistas of the vain attempt,
That for a flying moment one may see
By what cross-purposes the world is dreamt.
–Richard Wilbur, “An Event”
When I was ten, I read fairy tales in secret and would have been ashamed if I had been found doing so. Now that I am fifty, I read them openly. When I became a man I put away childish things, including the fear of childishness and the desire to be very grown up. –C.S. Lewis
Certainly, you remember the three pillars of object-oriented programming (OOP): (data) encapsulation, polymorphism, and inheritance. This author argues that inheritance itself is a flawed concept as typically practiced. He goes on to explain that problems arise when we try to overload inheritance in ways that are not intended.
https://www.sicpers.info/2018/03/why-inheritance-never-made-any-sense/
While I admit that I have a personal bias toward relational/SQL databases (versus NoSQL/NewSQL), this article demonstrates some of the problems, many of them long-standing, with traditional databases that organizations need to address and mitigate.
Many developers, especially those new to the profession, lose sight of the purpose of application development: to solve a business problem or need. This article eloquently explores this idea with an emphasis on the economics of development and how not every feature or defect requires a “code” solution.
Agile development practices and, specifically, the Scrum flavor are de rigueur in most organizations. But many sources now question the effectiveness and sustainability of them, as practiced. In this article, the author explains that the application and process have advocates (the product owner and Scrum master, respectively), but the technical team often gets the short end of the stick.
https://www.lambdacambridge.com/blog/how-scrum-disempowers-developers-and-destroys-agile
This analysis, based on outcomes from 10 years of a typical software development estimation training exercise, exposes a quite counterintuitive result that teams often spend more time estimating and planning tasks, than the tasks themselves take. The author’s upshot is that we need to be more selective about sizing/estimating tasks and how to plan them instead of the common “one-size-fits-all” approach.
https://www.allankellyassociates.co.uk/archives/2238/estimation-planning-teams-and-money-some-data/
Most developers know the Agile Manifesto and those principles are generally good. This author suggests a back-to-basics revision which focuses on a reliable processes that provides predictable incremental business value.
https://tqdev.com/2018-the-boring-software-manifesto
Mocking in unit testing tends to raise hackles in some circles. Nevertheless, if you want to build tests early, it can be a robust and quick method to use. This article discusses both the philosophy behind mocking as well as best practices for implementing it, using examples in Java.
https://blog.codecentric.de/en/2018/03/mock-what-when-how/
While the psychological principle explained in this article is generally helpful to end users, testers need to remain vigilant (not vigilantes!) to avoid becoming blind to certain application behaviors that are defects (or, at least, sub-optimal).
https://blog.regehr.org/archives/861
As testers, we can get lulled into believing that our objective is to find and report defects in the application or system. However, this article explains that the real goal is to identify and, thereby, reduce risk and to improve the economic value for the customer. We must keep this in mind, especially when planning tests to focus on those with the greatest chance of finding problems quickly.
https://cacm.acm.org/blogs/blog-cacm/228226-the-goal-of-software-testing/fulltext
Programming is still a human activity and, therefore, subject to human error. It is important that we fairly and transparently acknowledge the limitations of technology so that non-technical people understand what technology can and cannot do. When life and health are at risk, we must insist on proper testing and process rigor.
It’s easy to fall into the trap that software problems are just an inherent part of development. However, this author makes an eloquent argument for how our own sloppiness causes many of the (often avoidable) deficiencies. This article should drive you to think about how you can improve things in your organization.
https://techblog.bozho.net/bad-software-is-our-fault/
The ES6 release of JavaScript brought true class support to the language. However, if you come from a Java or C++ background, JavaScript’s prototypal inheritance model can give you fits. This tutorial helps you understand exactly how classes work.
https://wanago.io/2018/03/19/prototype-the-big-bro-behind-es6-class/
One of the interesting dichotomies of programming is that we are inundated with information about how to develop, but find very little about debugging, even though in many cases more of our actual “coding” time is spent on debugging. This article gives a sound language-independent philosophical and practical introduction to debugging for developers of any experience level.
https://intentionallogic.com/2018/03/29/debugging-like-a-boss/
Most organizations use “lean” methods when it comes to application architecture. One of the elements of this approach is that architecture is everyone’s job. This excellent article explores 5 key concepts to keep in mind when designing and architecting your application, including the pros and cons of each.
https://blog.ndepend.com/software-architecture-5-patterns-you-need-know/
Graph theory is a rich and important mathematical underpinning for much of the current data science work, such as NLP. The basic idea is that it focuses not just on entities (“objects”, if you like), but on the relationships between them. This excellent, straightforward tutorial teaches you the basics with interactive, hands-on exercises built with the amazing D3.js JavaScript library.
https://mrpandey.github.io/d3graphTheory/index.html
If you haven’t used asynchronous programming in JavaScript yet, chances are that you will in the very near future. This tutorial introduces the concepts without making too many assumptions and explains the typical ways to use async in your JavaScript applications.
https://dev.to/siwalik/async-programming-basics-every-js-developer-should-know-in-2018-a9c
Looking for some support in your desire to work away from the office more? Perhaps these results from a long-term study by Nicholas Bloom of Stanford will give your case the needed boost.
Many times (perhaps each day in a lot of cases), we have tasks which we simply don’t want to do, but need to get done. This article provides some great suggestions for how to “eat that frog”, so that you can move on to the more pleasant work.
https://dcgross.com/accomplish-dread-tasks/
Let’s face it; none of us are getting any younger. Moreover, many of us have probably been doing this tech “thing” for quite a while. This article gives an interesting look at how those of us on the old side can still contribute and navigate the new workplace, such as keeping your skills up to date.
https://www.wired.com/story/surviving-as-an-old-in-the-tech-world/
The idea that some developers are at least an order of magnitude more productive than the “average” programmer has been around for quite a while. This article does a good job of further dispelling this illusion through a variety of concepts with many references. The author especially focuses on how the (perceived) benefits of the “superstar” usually get outweighed by the damage to the rest of the team.
https://thenewstack.io/10x-programmer-just-jerk/
Regardless of how you feel about project or conference codes of conduct, I find it exceedingly sad that we have reached the point where people cannot have a civil, constructive discussion about these matters. We need to stop questioning others motives and listen to their concerns to work toward amicable solutions. That is the fundamental fabric of society.
http://www.businessinsider.com/programmers-debate-requirements-to-behave-respectfully-ccoc-2018-5
While not all challenges that you face in your career are hard problems, some certainly will be. The suggestions in this article focus on educational problem-solving and, therefore, may seem simplistic. Yet, they are equally applicable in tackling tough issues in development.
https://artofproblemsolving.com/articles/hard-problems
For much of my life, I was cynical, negative, and substantially unhappy. Several circumstances converged to change that. If you feel unhappy and ungrateful, perhaps this counterpoint to Covey’s 7 Habits of Highly Effective People will provide impetus to change.
https://www.alternet.org/print/here-are-14-habits-highly-miserable-people
Avail is a cross-platform (built with Java) language that promotes a methodology that they call “articulate programming”. The basic idea is to use (near) natural language to describe the task to accomplish. The creators do not provide binary distributions, but the toolkit, which includes and Eclipse-based workbench, can be built via standard Ant build process.
Mint is a front-end (client-side) language intended to address some of the difficulties and frustrations faced by developers working with the modern front-end stack. The basic premise is to focus on single-page applications (SPAs) at the language level instead of the framework/toolkit level, such as Vue.JS or React, including styling, routing, component reuse, and global and local state management.
https://github.com/mint-lang/mint
Steward adds some incredible productivity tools to the Google Chrome browser. In a nutshell, it’s like the popular Alfred command bar on Mac OS X, but for Google Chrome. It has built-in tools for many popular web tools, like Github, Google Search, Jenkins, and more, as well as a variety of tools for quickly navigating in Google Chrome.
https://github.com/solobat/Steward
This handy database tool allows you to perform database actions at command prompt (shell) on most any platform that Java supports. Just use the appropriate JDBC driver for your database to run commands from a file or to open an interactive shell/REPL. It even supports use of regular expressions for the name of the JDBC driver to use, so you don’t have to memorize the syntax for connecting.
https://sourceforge.net/projects/jdbsee
dnGrep is a small, fast file search utility for Windows (based on .NET 4.0) which supports text searches of plain text files, MS Word documents, PDFs, and archives using text, regular expressions, XPath for XML, and phonetic search syntax. Some of the great features are Windows shell integration (search from right-click menu), full file preview of results including highlighting of results, search-and-replace with undo, and bookmarking your searches.
Fo is an extension to the Go programming language that provides functional programming and generics features to the Go language in a very fluent manner. It includes generic named types, functions, and methods, using syntax very similar to generics in C++.
ueli is keyboard-centric application launcher for Windows and Mac OS X, built with Electron. Beyond the usual capability of searching for applications by typing the first few characters, you can search for folders, launch web sites, do math calculations, and even run command line applications, all from a single, uncluttered interface. Moreover, it allows you to create custom commands with simple JSON syntax.
https://github.com/oliverschwendener/ueli
Today, we don’t often think about the physical representations of technology, but, historically, industrial design played a key role in technology development. This MOMA exhibit features some of the iconic computers from their golden age. I still love the Thinking Machines Corporation Connection Machine series cube-of-cubes design.
https://www.moma.org/calendar/exhibitions/3863?locale=en
What do you get the developer who has everything? Perhaps this npm package for checking if a given input is the number “13”. And don’t forget to read the pull requests and issues for the greatest humor effect.
https://github.com/jezen/is-thirteen