There is no programming language—no matter how structured—that will prevent programmers from making bad programs. –Larry Flon
If the day and the night are such that you greet them with joy, and life emits a fragrance like flowers and sweet-scented herbs, is more elastic, more starry, more immortal,—that is your success. –Henry David Thoreau
You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time. –Bertrand Meyer
Beauty might bring happiness, but happiness always brings beauty. –Kevyn Aucoin
Common sense is the knack of seeing things as they are, and doing things as they ought to be done. –Harriet Beecher Stowe
A computer lets you make more mistakes faster than any other invention with the possible exceptions of handguns and Tequila. –Mitch Ratcliffe
Starting with a brief review of the seminal work, Metaphors We Live By, this author extends the ideas to show how important metaphors are in development, particularly in explaining what we do to others. He also emphasizes that just as with natural language, metaphors are a two-edged sword with both benefits and downsides.
http://alvaro-videla.com/2017/01/metaphors-we-code-by.html
Want to venture a guess about what this developer thinks is the biggest change in the past 40 years or so? While he specifically opines about the days of “rugged individualism”, my take is that real fundamental difference is around how the “paradox of choice” (so many tools and languages, so little time!) has made us less productive and has itself spawned so much “overhead” in the process (think of the dreaded “billable hour”!). All actions have consequences and we must think carefully about them, including envisioning some of the unintended ones, to simply our work.
As we often note that software testing involves a different skill set compared to development, a similar principle applies with respect to debugging, as well. This article looks at the psychology of learning, which the author says underpins debugging capability. One key insight is that debugging can be taught, but it requires identifying an “expert” to teach others.
http://queue.acm.org/detail.cfm?id=3068754
We’ve had the microservice concept for just a couple of years. In this article, the author goes the route of “everything old is new again” and recommends that to avoid the orchestration complexity of microservices, we should return to the basics of modular design. Perhaps this signals a “back to basics” trend (think “monoliths”) in application architecture.
https://www.oreilly.com/ideas/modules-vs-microservices
By now, you’ve probably concluded that continue in a development career, you must know at least the basics of the JavaScript language (probably including the functional approach). However, as this author eloquently demonstrates, the ecosystem that has grown up around JavaScript is unsustainable. By comparing to the practices of the Python community around simplicity and cohesion, the article shows some great patterns for how JavaScript can improve.
http://blog.bolinfest.com/2017/03/javascript-vs-python-in-2017.html
When planning your work, such as backlog prioritization, how do you decide what to do first? This article recommends starting with the areas with the most unknowns (or the least well understood). The basic concept is to clarify those areas before you spend time on things that would require significant rework later.
https://www.ussherpress.com/blog/?p=1323
We’ve all been there. You diligently write unit tests even though it’s not clear what they demonstrate and/or they are brittle or tightly-coupled resulting in problems when you make changes. This author advocates for applying more intelligence to tests by emphasizing better understanding of the units in your code and writing tests accordingly.
By now, you’ve probably had your fill of discussion on the Wikileak’s disclosure of CIA documents, particularly those about development “best practices.” Nevertheless, this excellent distillation of its concepts from Bruce Schneier (my favorite “hacker”) is definitely worth your time, especially with regard to factors to consider when writing secure code.
https://www.schneier.com/blog/archives/2017/03/the_cias_develo.html
Have you ever heard a developer say (or maybe even said it yourself!), “I just don’t know what to test?” This author explains that this is simply the conceptual different between the way developers approach the application and the “tester’s mindset”. Ultimately, this fact emphasizes the importance of and value brought by independent, specialized testing to the success of a project and the associated quality of the final product.
So everyone knew this was going to happen sooner or later, with the proliferation of “Internet of Things” connected devices. Here we have a dishwasher with built in web server that allows unhindered access to most any directory in the file system.
https://www.theregister.co.uk/2017/03/26/miele_joins_internetofst_hall_of_shame/
While I generally fall in the “against automation” camp for software testing, I recognize that automation has value when done correctly in appropriate situations. This article discusses the importance of effectively maintaining your test data set when running automated tests. Lots of food for thought about defining a good philosophy around test automation, too.
http://www.ontestautomation.com/managing-test-data-in-end-to-end-test-automation/
When starting out with Node.JS, one of the most important things to learn and understand is what the package.json is and how it’s used by applications and Node.JS itself. This tutorial from the Node.JS folks themselves gives a detailed, yet practical introduction that will help you get up to speed quickly.
https://nodesource.com/blog/the-basics-of-package-json-in-node-js-and-npm
No doubt that you’ve heard or seen “serverless” all over the place, perhaps mostly in marketing collateral. But what does the concept entail and what do developers need to know? This excellent entry with many equally superb links provides a great introduction and cuts through a lot of the marketing doublespeak. (Bonus: Here’s another good one on “Infrastructure as Code”.)
http://devops.stackexchange.com/questions/61/what-is-serverless
Even though Nicola Mendelsohn of Facebook predicts the end of textual content on the Internet within a decade, it seems likely that it will continue to be the main form of content for quite a long time. After all, the protocol that underlies the web is called Hypertext Transfer Protocol (HTTP). Accordingly, it is beneficial for developers and designers alike to pay attention to the importance of typography in interface design.
https://viljamis.com/2016/typography-for-user-interfaces/
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.
http://lumiverse.io/series/neural-networks-demystified
Regardless of how amazing your new application is, it won’t succeed unless you know how to practically deploy it. This comprehensive, yet eminently understandable guide will help you determine just how to architect the platform for a successful implementation. Plus, it includes tips on likely devops interview questions.
https://github.com/donnemartin/system-design-primer
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.
http://www.instanceofjava.com/2015/07/java-versions-features-and-history.html
The React.js JavaScript framework from Facebook has very quickly gained a lot of traction among developers. However, the paradigm that the platform uses can seem quite foreign to many. This free, comprehensive total helps you learn the basic concepts and apply them in developing an application using the framework.
http://courses.reactjsprogram.com/courses/reactjsfundamentals
While you might not be looking for a new job right now, you should always pay attention to the changes in the employment landscape. Doubtless that this article is not hyperbolic when it discusses the disruptive change to banking and law that the blockchain (think “Bitcoin”) will have in the next few years. Regardless of your current industry, pay attention to how these shifts could affect you and plan accordingly.
https://hbr.org/2017/03/the-blockchain-will-do-to-banks-and-law-firms-what-the-internet-did-to-media
Certainly, you remember that (not-so-) old adage: Work smarter, not harder. This gives some excellent impetus behind it. When you get stuck on a coding problem, it’s best to put it aside for a few hours or even overnight and look at fresh after some rest and exercise.
IBM was one of the first large organizations to allow remote work and nearly half of their US employees works from home. However, they have decided that across many divisions, most employees must work from one of six office locations in the US. IBM management says that direct collaboration is the reason for the change.
https://qz.com/924167/ibm-remote-work-pioneer-is-calling-thousands-of-employees-back-to-the-office/
In my view, the most important skill you can develop is the ability to learn new things throughout your life. With the pace of change in technology, you will likely need to renew your skills every 5-10 years (or more often!). But our brains aren’t necessarily wired to learn across the lifespan. This broad interview with Ulrich Boser, the author of the new book Learn Better, explores how new developments in neuroscience and psychology can help you be more successful at learning.
One of my favorite articles of all time on technology careers is the classic “Bored People Quit”. Moreover, intuition tells us that happier people are more productive. This article provides a slightly different angle on the fact that technical expertise is often more important than salary for developers, so organizations need to invest accordingly, such as in training, conferences, and the like.
With over 182000 new tech jobs in 2016, technology workers now represent 8% (or $1.3 trillion) of the workforce, per a new survey. Moreover, tech workers’ salaries average twice the national average and more than 2/3 of states saw increases in tech worker employment.
If you have been developing for long, doubtless you’ve experienced the confusion (and frustration) about the subtle syntax differences between the various popular SQL databases. Usql has as its mission the goal of standardizing the interface across several popular DB platforms (PostgreSQL, MySQL, Oracle, SQLite, and Microsoft SQL Server) along the lines of the PostgreSQL psql tool to make you more productive working in various DB environments.
For beginners (and even some grizzled veterans) and casual users, Git can be daunting. This simple shell tool aims to reduce the cognitive load imposed by Git in a couple of significant ways: removing the need to remember all the command line switches by prompting you for appropriate input and using simple (mostly!) two-character commands for many operations.
https://github.com/fisherman/g2
Bash-it is small Bash shell enhancement that makes the command prompt both easier and more fun. Bash-it includes an excellent command prompt with support for Git along with many excellent command aliases to simply working in the shell. Moreover, Bash-it is essentially a framework, so you can use it to customize and further enhance your Bash experience. And Bash-it works great with the Bash shell from Git for Windows.
https://github.com/Bash-it/bash-it
Most of probably don’t do a rebase in Git very often and, therefore, the incantation (i.e., the command-line parameters) is quite confusing. This simple shell script makes doing a rebase a relatively pain-free experience by making it interactive. It prompts you for the appropriate actions and parameters to help avoid mistakes. And it works great in Linux and Git Bash on Windows (MSYS2).
https://github.com/sjurba/rebase-editor
Depli is a simple, self-contained Java JVM monitor that uses JMX technology. Simply run the application and log into the browser-based interface to add/configure JVM instances to monitor. Depli displays a simple, clean dashboard interface and you can drill down for more details. Built with Spring Boot, most Java developers should feel right at home with Depli.
Skrifa (Icelandic meaning to write!) is a full-featured word processor/editor built entirely with JavaScript. It includes support for markdown, code editing, math symbols, and even interactive data tables. It can import/export both markdown and Microsoft Word documents, as well as export notes to PDF. And all documents can be encrypted via PGP for security.
Here’s some ultra-geeky fun for you! Everyone knows computers have gotten incredibly fast in the past 50 years, but do you know how fast? Check out these code snippets (mostly in C, Python, and shell code) and take a guess at how many iterations can run in one second.
http://computers-are-fast.github.io/
This must rank high on the “geek cred” scale! This animated GIF displays the value of the MD5 hash of the file itself. Strange, but uniquely fun too.
https://shells.aachen.ccc.de/~spq/md5.gif
The Harvard Mark I was one of the first real computers put into use. And along with it, some of the familiar terminology about computing and programming that we still use today was born.
http://sites.harvard.edu/~chsi/markone/language.html
In the US, a few weeks ago, we switched over to Daylight Saving Time (always forget that “Saving” is officially singular/non-possessive!). Have you ever considered the difference between the solar time (actual position of the sun) and your local time? This article gives a fascinating look into how that works and how to create a map using free spatial data sets to visualize it.
http://blog.poormansmath.net/the-time-it-takes-to-change-the-time/