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
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.
http://ronjeffries.com/articles/015-11/tech-debt/
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.
http://techbeacon.com/scrum-not-enough-how-sell-benefits-scrum-extreme-programming
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.
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.
http://www.richardbagshaw.co.uk/clean-code/
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.
http://spectrum.ieee.org/computing/software/linux-at-25-why-it-flourished-while-others-fizzled
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.
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.
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.
https://www.go.cd/2016/03/24/how-to-avoid-brittle-code.html
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.
http://www.codingepiphany.com/2016/03/16/be-a-shepherd-not-a-cowboy-in-leadership/
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.
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.
http://pebblecode.com/blog/the-importance-of-a-good-bug-report/
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.
http://blog.samstokes.co.uk/blog/2016/02/24/quality-vs-empathy/
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.
https://medium.com/@mbostock/what-makes-software-good-943557f8a488
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.
https://www.azabani.com/labs/floatvis/
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.
http://www.csfieldguide.org.nz/
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.
https://github.com/nickdesaulniers/git-dot
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.
http://nicholasjackson.github.io/microservices/go/building-and-testing-microservices-part1/
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.
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
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
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.
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.
http://blog.triplebyte.com/how-to-pass-a-programming-interview
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.
http://theconversation.com/overworked-good-habits-not-holidays-are-the-answer-17744
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.
https://www.twilio.com/blog/2016/02/patrick-mckenzie-on-salary-negotiation-job-hunting.html
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.
http://www.stringcode.co.uk/on-deep-work/
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.
http://jacquesmattheij.com/ceo
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.
http://www.inc.com/jessica-stillman/complaining-rewires-your-brain-for-negativity-science-says.html
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.
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.
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.
https://github.com/jiahaog/nativefier
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.
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.
https://github.com/santinic/how2
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.
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.
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!
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.
http://www.flexboxdefense.com/
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.
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.
http://www.fizzbuzz.enterprises/