Up to Newsletter Index

September 2016 Newsletter


Quotable Quotes


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


Return to top


Software Development Process and Methodology


Article: A Dreyfus model for Agile adoption

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/


Article: The Real Revolution of Serverless is Auth, Not Microservices

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


Article: What Makes a Good User Story?

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


Article: When Will the Last Ever Line of Code Be Written?

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/


Article: Got Technical Debt? Track Technical Debt to Improve Your Development Practices

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”.

https://insights.sei.cmu.edu/sei_blog/2016/06/got-technical-debt-track-technical-debt-to-improve-your-development-practices.html


Article: Spaces or Tabs? 400,000 GitHub repositories, 1 billion files, 14 terabytes of code

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.

https://medium.com/@hoffa/400-000-github-repositories-1-billion-files-14-terabytes-of-code-spaces-or-tabs-7cfe0b5dd7fd


Article: “It's The Future”

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/


Article: Crunching is bad — for you AND your company

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/


Article: Drowning in a Sea of Information

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


Return to top


Software Testing & Quality


Article: Swiss trains must not have axle count of multiple of 256

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


Article: Can you remove a Tester and get better quality?

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/


Article: Three A's of Responding to Bugs

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


Article: Tester Augmentation, Not Test Automation

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


Article: Programming bug costs Citigroup $7m after legit transactions mistaken for test data for 15 years

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


Return to top


Tutorials/References


Tutorial: PostgreSQL Exercises

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.

http://pgexercises.com/

Reference: AWS-API.info

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.

http://aws-api.info/


Tutorial: The Java Synchronisers

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


Tutorial: Designing a fast Hash Table (in C++)

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


Tutorial: Say NO to Venn Diagrams When Explaining SQL JOINs

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/


Reference: NoSQL Databases: A Survey and Decision Guidance

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


Tutorial: Implementing a Debugger

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/


Return to top


Career Development/Miscellaneous


Article: Steps to Turn Off the Nagging Self-Doubt in Your Head

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


Article: The Great Productivity Puzzle

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


Article: What Great Listeners Actually Do

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


Article: 90% of software developers work outside Silicon Valley

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/


Article: 25 Best Paying Cities for Software Engineers

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/


Article: Recalibrate Your Productivity Sensors

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/


Article: Salary Negotiations Study: Data from Tech Employees

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/


Article: Silicon Valley arrogance: “I can tell you which startups will succeed, without even knowing what they do”

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.

https://m.signalvnoise.com/silicon-valley-arrogance-i-can-tell-you-which-startups-will-succeed-without-even-knowing-what-89aa8ea35d23


Return to top


Telecommunications/Networking Industry


Article: The Next Generation of Wireless — “5G” — Is All Hype

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


Return to top


Useful Utilities


Marp (Free – Cross-platform/Electron – 53MB)

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 -->.

https://yhatt.github.io/marp/


LeGit (Free – Cross-platform/Python – 7.2MB)

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 (Free – Cross-platform/Google Chrome extension – 316kB)

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


920 Text Editor (Free – Android – 3.3MB)

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 (Free – Cross-platform/Java – 156MB)

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/


Return to top


Just For Fun


Other Side

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/


Hipku

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/


Return to top