Defeat is not the worst of failures. Not to have tried is the true failure. –George Edward Woodberry
Mathematics provides a framework for dealing precisely with notions of “what is.” Computation provides a framework for dealing precisely with notions of “how to.” –Harold Abelson, Structure and Interpretation of Computer Programs
No pessimist ever discovered the secret of the stars, or sailed an uncharted land or opened a new doorway for the human spirit. –Helen Keller
Sometimes when you innovate, you make mistakes. It is best to admit them quickly, and get on with improving your other innovations. –Steve Jobs
Live with total integrity. Be transparent, honest, and authentic. Do not ever waiver from this; white lies and false smiles quickly snowball into a life lived out of alignment. It is better to be yourself and risk having people not like you than to suffer the stress and tension that comes from pretending to be someone you’re not, or professing to like something that you don’t. I promise you: Pretending will rob you of joy. –Christine Carter, Why It Doesn’t Pay to be a People-Pleaser
If you are implementing agile development methodology in your organization, how do you measure progress and maturity of the implementation? This article applies the Dreyfus five-stage model concept to specify the practices at each level along the path from novice to expert.
http://lizkeogh.com/2015/04/22/a-dreyfus-model-for-agile-adoption/
Even before microservices have gotten much play in organizations, early adopters have already moved on to the (so-called) “serverless” architecture, which promises to abstract out your application server layer. This pundit says that the biggest benefit is in streamlining authentication process.
http://www.benrady.com/2016/08/the-real-revolution-of-serverless-is-auth-not-microservices.html
Most readers of this newsletter probably imagine that they have a pretty good handle on writing user stories and how to tell if they are “good” or not. Nevertheless, we all can benefit from other perspectives. This comprehensive, three-part series goes into detail about the characteristics of good user stories, but the best part is the discussion on how to “debug” user stories to ensure that they are the right size.
https://www.promptworks.com/blog/what-makes-a-good-user-story-part-1
https://www.promptworks.com/blog/what-makes-a-good-user-story-part-2
https://www.promptworks.com/blog/what-makes-a-good-user-story-part-3
With a title (and subject) somewhat reminiscent of Asimov’s “The Last Question”, this author explores the changes in programming whether or not we will reach a point where coding (at least in the sense that we think of it) will no longer be necessary. The article emphasizes that this is more than just philosophical musing as exemplified by the changes in development over the past 60 or so years. However, humans are still needed to optimize algorithms and make appropriate value judgements.
http://blog.brightwork.io/when-will-the-last-ever-line-of-code-be-written/
Many times when we discuss technical debt, the discussion is rather abstract. This article takes a very practical approach by recommending that you define metrics for your technical debt as a way to actually measure improvements over time in your development process. So, it’s also useful for those managers who want metrics to determine if things are improving or not. And maybe you can turn this into an opportunity to forge “technical wealth”.
Among the many perennial development debates is the preference for using spaces (ASCII 32) or tab (ASCII 9) for indentation in writing code. This programming looked at the most popular GitHub repositories across the 14 most frequently used programming languages to find out whether developers more frequently used spaces or tabs. And spaces won overwhelming with the only close race among C programmers. So make sure that you’ve set up your favorite editor or IDE to convert tabs to spaces.
In this newsletter, I strive to provide a balance between “up-and-coming” technologies and the old “tried-and-true” ones. However, by nature, most of what you find out on the Internet is focused on the new “bright, shiny object” that distracts us (what I call the “magpie syndrome”, but most people now identify in the context of Dug from Up). This imagined office conversation is mainly for its humor value, but it makes a good point about how all of the latest technologies can easily keep us from actually delivering business value to our customers.
https://circleci.com/blog/its-the-future/
How often does your team face “crunch time” on projects? This author says that, in most instances, crunch time (or “crashing” the schedule) is almost never worth it. He notes that excessive pressure simply leads to errors in the work and bad judgement.
http://adirron.co/crunching-is-bad%E2%80%8A-%E2%80%8Afor-you-and-your-company/
As developer, programmer, or other technology worker, what is your fundamental job? Many folks would respond that it’s to write code and that is somewhat correct. However, a more accurate and precise answer would be to write code to solve a problem. And one of the problems that we need to be cognizant of in our work is the capacity to contribute to information overload. This article looks at the problem and how it came about. Use what you learn from it to lighten the information load of your customers.
https://digitalculturist.com/drowning-in-a-sea-of-information-563a3160efbb
Well, this is interesting… Instead of correcting their train switching software, they just require that trains not have a specific axle count. Seems like it would be easy to violate this rule and cause problems. But the Swiss do have some amazing train tunnels!
https://mobile.twitter.com/mitsuhiko/status/752398314528731137
Certainly, the idea that eliminating a tester on a project (or eliminating the QA function entirely!) would be a positive step toward improving quality is controversial, but this author points out that when a team actually works together toward a common goal, instead of focusing on their specific goal, then they are able to deliver good results. He emphasizes that team cohesion and a focus on business value are two of the key elements to success.
https://mysoftwarequality.wordpress.com/2016/08/18/can-you-remove-a-tester-and-get-better-quality/
This author borrows the concept of acknowledge, apologize, and amend from chef Tom Colicchio of Top Chef fame as a good paradigm for how to address defects in your application. He emphasizes that a little bit of empathy can go a long way towards turning an adversary into a partner.
https://8thlight.com/blog/doug-bradbury/2016/07/06/three-a-s-of-responding-to-bugs.html
Most of the articles that we see about test automation advocate either full automation or, at least, are quite disparaging of non-automated approaches. This article insightfully notes that automation is a tool just like any other and the purpose of any good tool is to improve the productivity or skills of the tester.
https://medium.com/salesforce-engineering/tester-augmentation-not-test-automation-1de28269c9a4
This report seems to indicate 15 years is a common period for significant latent bugs to go undetected. In this case the cost to Citigroup was due to penalties imposed by the SEC for inaccurate reporting during the period in question.
http://www.theregister.co.uk/2016/07/13/coding_error_costs_citigroup_7m
PostgreSQL has really changed the landscape of open-source relational database systems with many great features to simplify data analysis, while retaining the familiarity of SQL. If you are just getting started with PostgreSQL (or want to dip your toes in the water on the advanced features!), there’s no better way than through these exercises. This interactive site allows you to enter your answers to the questions posed and even get hints, if you’re stuck. And the content runs the gamut of basic (beginner) SQL to advanced features.
If you build anything using Amazon Web Services (AWS), such as the S3 storage platform, this site is a must-have for you. It provides simplified documentation for all of the AWS APIs, including brief descriptions of each method. And, of course, it links to the official AWS documentation if you need more details.
In multi-threaded programming, synchronization among threads is one of the most difficult matters to do effectively. This tutorial gives some best practices for thread-synchronization using the built-in Java methods for multi-threaded programming that go beyond the obvious.
https://carlosmchica.github.io/java/2016/08/24/the-java-synchronisers.html
Most of us probably don’t have a need to build our hash table (or other data structure) implementations, but it’s still useful to know how they work and some of the design trade-offs involved. This tutorial gives an architecturally-focused explanation about how to create a C++ hash table with better performance than the built-in std::unordered_set.
http://www.ilikebigbits.com/blog/2016/8/28/designing-a-fast-hash-table
At one time or another (and even in this newsletter!), you’ve probably seen or used Venn diagrams to show how the SQL joins work. This author says that we should instead simply rely on our intuition about sets for understanding. What do you think?
https://blog.jooq.org/2016/07/05/say-no-to-venn-diagrams-when-explaining-joins/
NoSQL databases have gained wide adoption in the short time that they have been around. However, there isn’t much recent information or comparison of platforms/technologies. This comprehensive references covers the four predominant architectures with explanations of the technologies underlying each. Furthermore, they provide good criteria for which architecture/technology makes sense for various applications.
https://medium.com/baqend-blog/nosql-databases-a-survey-and-decision-guidance-ea7823a822d
Perhaps this is really more of a curiosity, since most of us would never have need to build a debugger. Nevertheless, understanding how debuggers do their magic is useful to working with them effectively. In this tutorial, the author explains the principles and then goes on to implement a simple debugger for the Go language.
http://backtrace.io/blog/blog/2016/08/11/debugger-internals/
We’ve mentioned before that technology workers tend to have a higher rate of imposter syndrome. However, just knowing about it, doesn’t necessarily help you correct it. This article gives some specific suggestions for how to turn your thinking around when those self-doubts start sneaking in.
http://www.wsj.com/articles/steps-to-turn-off-the-nagging-self-doubt-in-your-head-1465838679
Certainly, we live in a time of incredible technological change. Or perhaps, according to some economists and historians, the pace of change is faster, but the depth of the change is not. This article looks at how the high-tech revolution of the last 50 years compares to other times of innovation and what it means for productivity. And how it factors into the concerns about robots taking everyone’s job.
http://www.newyorker.com/news/john-cassidy/the-great-productivity-puzzle
What do you think the most important interpersonal skill is? Most people would probably say listening, but most of us simply aren’t very good at it. This article gives a simple six-level hierarchy of listening capability that you can use to improve.
https://hbr.org/2016/07/what-great-listeners-actually-do
If you some of the popular technology career publications, you’d be apt to think that they only place that programming happens is in Silicon Valley. But, of course, that’s very far from the case. This article with some excellent maps shows that programming jobs abound throughout the country, including many that you might not expect, like Huntsville, AL area. And a former Sequoia Capital partner predicts that within 5 years the Midwest will have more startups than Silicon Valley.
http://qz.com/729293/90-of-software-developers-work-outside-silicon-valley/
Seattle tops the list of Glassdoor’s annual survey of cities with best pay for developers. However, you’ll find some (perhaps) surprising places in the list, including Madison, WI and Raleigh, NC which made the top 5. One of the nicest features of the list is that it’s based on salaries adjusted for cost-of-living, so you can make apples-to-apples comparisons.
https://www.glassdoor.com/blog/25-best-paying-cities-software-engineers/
Looking to make the transition from development to management? This article gives some sage advice about the fundamental mindset change that you must make around the definition of “productivity” and how it now must be measured by the achievements of your team. He notes that this is often the most difficult shift for technical workers in moving to management.
http://www.tombartel.de//2016/07/05/recalibrate-your-productivity-sensors/
When accepting a new position, do you negotiate with the hiring organization for better salary or benefits? According a survey of over 5000 tech workers, almost half do and almost 60% of those with 10+ years of experience do. And you always need to know the “rules” for how to negotiate, if you decide to do it.
https://www.comparably.com/blog/whos-negotiating-their-salary-in-tech/
By now, you’ve likely heard all about Marissa Mayer’s statement that working extremely long hours is the measure of success. Certainly, I don’t subscribe to that approach and believe that long hours are an indication of some sort of problem. This author agrees and gives some reality check to this warped definition of success.
Of course, the title of this article is “clickbait” (sort of). Nevertheless, its main point is that while so much attention is paid to wireless technologies, they rely heavily on support of the fiber infrastructure of the telecom backbone. So the bottom line is that cheap, fast, wireless connectivity won’t happen without more fiber.
https://backchannel.com/the-next-generation-of-wireless-5g-is-all-hype-1790239b8ca8
Marp is a simple, yet powerful tool for creating presentations using Markdown. It’s built on the Electron platform, so it supports Windows, Linux, and Mac OS X natively. For support of presentation-specific actions, you just enter them as HTML comments, such as <!-- page_number: true -->.
LeGit calls itself “Git for Humans” and it’s an apt description. It’s a cross-platform Python GUI for Git based on the UI concepts of GitHub for Mac. Essentially, it defines several sensible verbs with aliases for common actions, such as switch instead of git checkout -b.
https://github.com/kennethreitz/legit
Surfingkeys is an open-source extension for the Google Chrome browser that improves productivity by providing familiar keyboard bindings for most actions. While the defaults are oriented toward Vim users, all of the mappings are configurable via JavaScript.
https://github.com/brookhong/Surfingkeys
Have you ever needed to quickly edit a file on your Android phone or tablet, but found that most text editors were too simplistic? The 920 Text Editor is a full-featured, but very usable programmer’s editor for Android. It includes great features such as tabs for keeping multiple files open simultaneously, syntax highlighting for many languages, line numbers, search/replace, auto-indent, selection of font style/size, and much more.
https://github.com/jecelyin/920-text-editor-v2
N4JS is an Eclipse-based IDE for JavaScript development on large-scale Node.JS projects. It is provided as either a plugin for your existing Eclipse installation or as a stand-alone IDE. In addition, it includes a domain-specific language with support for static typing, dependency injection, on-the-fly code validation, and other features familiar to Java developers.
https://numberfour.github.io/n4js/
Remember when you were a kid and you thought that if you dug a whole all the way through the center of the Earth that you’d end up in China? Of course, for those living in the northern hemisphere that was obviously wrong (at least in hindsight). So what is on the other side of the globe from where you are? This simple two-pane map will show you. And if you want to dig to China, then you need to start in Argentina.
https://danmana.github.io/other-side/
With the IPv4 address space, it wasn’t too difficult to keep an IP address in memory (i.e., your brain!) for short period of time. But how can you possibly remember an IPv6 address? Hipku makes it easy by generating a haiku for any IP address (IPv4 or IPv6). When you want to grab the IP address, just enter your haiku and voilà! Or grab the JavaScript source and run it on your machine.
http://gabrielmartin.net/projects/hipku/