Up to Newsletter Index

January 2018 Newsletter


Quotable Quotes


Any sufficiently advanced bug is indistinguishable from a feature. –Rich Kulawiec


In the matter of reforming things, as distinct from deforming them, there is one plain and simple principle; a principle which will probably be called a paradox. There exists in such a case a certain institution or law; let us say, for the sake of simplicity, a fence or gate erected across a road. The more modern type of reformer goes gaily up to it and says, "I don't see the use of this; let us clear it away." To which the more intelligent type of reformer will do well to answer: "If you don't see the use of it, I certainly won't let you clear it away. Go away and think. Then, when you can come back and tell me that you do see the use of it, I may allow you to destroy it. –G. K. Chesterton, The Thing (1929)


The most worth-while thing is to try to put happiness into the lives of others. –Robert Baden-Powell


The whole point of getting things done is knowing what to leave undone. –Oswald Chambers


Kindness is a language which the deaf can hear and the blind can read. –Mark Twain


Whoever can make two ears of corn, or two blades of grass, to grow upon a spot of ground where only one grew before, would deserve better of mankind, and do more essential service to his country, than the whole race of politicians put together. –Jonathan Swift, Gulliver's Travels (1726)


Return to top


Software Development Process and Methodology

Article: We fired our top talent. Best decision we ever made.

This is the cautionary tale of the resident-genius developer who almost destroyed a project (and the project team) through his hubris. In this story, management made the painful decision to get rid of prima donna and the project team came together to deliver a better, more sustainable solution in less time. (And we should point out the obligatory rebuttal, as well.)

https://medium.freecodecamp.org/we-fired-our-top-talent-best-decision-we-ever-made-4c0a99728fde


Article: My 20-Year Experience of Software Development Methodologies

This journeyman programmer and development manager looks back at two decades of methodologies and what has changed (and what hasn’t!). He borrows the concept of “collective fictions” from Yuval Harari’s new book, Sapiens: A Brief History of Humankind, to explain how we fool ourselves about how we have process and methodology, even when don’t. His main point is that, since so many factors affecting application programming are beyond the control of the development team, we should just tell it like it is with regard to schedule, progress, and methodology.

https://zwischenzugs.wordpress.com/2017/10/15/my-20-year-experience-of-software-development-methodologies/


Article: What is a Unit Test? (The Answer Might Surprise You)

We all know what a unit test is, right? Perhaps, not, according to this author. He emphasizes that we often get caught up in how to write unit tests without understanding why. He says that good unit tests should be implemented to test behavior (not implementation!) and, therefore, typically belong at the module level.

https://content.pivotal.io/blog/what-is-a-unit-test-the-answer-might-surprise-you


Article: REST is the new SOAP

By now, most of us know that REST won the web services war. But, as this author explains, adopting REST (and related technologies like JSON, microservices, etc.) without good architectural principles in mind is a recipe for heartache (and, maybe, heartburn). He offers some good ideas about how to effectively plan and maintain your REST services.

https://medium.com/@pakaldebonchamp/rest-is-the-new-soap-97ff6c09896d


Article: Refinement for developers. 3 easy steps to understand a user story.

Frequently, developers need to help tease out the underlying requirements for a user story. This article provides an excellent structure for how to effectively understand the requirements, including some that may not be obvious or clear, from a user story.

https://medium.com/@natalia.kolinska/refinement-for-developers-3-easy-steps-to-understand-a-user-story-eafc9fafcfbb


Article: What are our core values and practices for building software?

Each organization has a culture and part of that culture are the fundamental principles that motivate how and why you do the things you do. This author discusses the process of identifying these standards within his organization and explains how they are applied in practice. I don’t suggest that you adopt the values from this article, but use this to help your organization identify and vet your operating philosophies.

https://www.thoughtworks.com/insights/blog/what-are-our-core-values-and-practices-building-software


Return to top


Software Testing & Quality

Article: The $280M Ethereum’s Parity bug

A bug (although some speculate that it’s a hack instead of defect) in the e-wallet application for Ethereum from Parity has locked out users from almost $280M worth of the crypto-currency. This article gives a non-technical explanation of the problem. And this situation should serve as another reminder about the stakes of software quality, security, and reliability in today’s world.

https://blog.comae.io/the-280m-ethereums-bug-f28e5de43513


Article: The Hard Thing About Testing

Many people have misconceptions about what software testing is about. It’s a very creative, yet technical discipline that is (or should be!) separate and distinct from development. This article does a great job of showing some of the complexity involved in testing, but using the “simple” example of testing a light switch.

https://www.getdonedone.com/the-hard-thing-about-testing/


Articles: Meltdown and Spectre

By now, you’ve heard about (perhaps, already had your fill of!) the so-called Meltdown and Spectre flaws in most Intel processors. This situation, so high profile that on one day almost all of the articles on the front page of the Reddit Programming forum were about it, reminds us that quality and security problems are not limited to software and that the costs to fix such problems can be astronomical, both financially and with respect to reputation. Here are a few articles that help you distill the essence of the issues and the response. (And, for a little bit of related fun, check out this zero-day attack on the Xerox Alto. 😊)

https://arstechnica.com/gadgets/2018/01/whats-behind-the-intel-design-flaw-forcing-numerous-patches/

https://www.techrepublic.com/article/massive-intel-cpu-flaw-understanding-the-technical-details-of-meltdown-and-spectre/

https://googleprojectzero.blogspot.com/2018/01/reading-privileged-memory-with-side.html

https://security.googleblog.com/2018/01/more-details-about-mitigations-for-cpu_4.html

https://www.youtube.com/watch?v=3v5Von-oNUg

https://www.reuters.com/article/us-cyber-intel-researcher/how-a-researcher-hacked-his-own-computer-and-found-worst-chip-flaw-idUSKBN1ET1ZR

https://lwn.net/SubscriberLink/742702/e23889188fce9f7f/


Article: What really causes software failures?

This is the transcript of a talk given by Jason Orendorff, a Mozilla developer and one of the principal developers of the Rust programming language. He discusses the (in)famous Therac-25 accident and the practices that Mozilla uses to prevent such problems and deliver high-quality code.

https://github.com/jorendorff/talks/blob/master/blame/blame.md


Return to top


Tutorials/References

Tutorial: Gophercises

You’ve probably heard about Google’s Go programming language and you may be wondering what all the buzz is about. This site provides a set of comprehensive free video tutorials, each one (more-or-less) self-contained, that teaches you the language while building mini applications.

https://gophercises.com/


Reference: Functional Programming Jargon

Functional programming has become very mainstream, even in languages that are not traditionally functional. This small dictionary covers the basic terms and concepts and features simple examples in JavaScript to further clarify.

https://functional.works-hub.com/blog/Functional-Programming-Jargon


Tutorial: SQL Keys in Depth

If someone asked me for just one piece of advice about building applications (not that anyone has!), my immediate answer would be to define good keys and indexes on your database tables. This article discusses the philosophy behind good primary and foreign keys and offers suggestions about making your database maintainable and extensible.

https://begriffs.com/posts/2018-01-01-sql-keys-in-depth.html


Reference: Quick Tips for Fast Code on the JVM

Java has had an image problem around performance for a long time. While it’s quite undeserved since version 6 (or 1.6, if you prefer), this article contains a variety of suggestions for squeezing every bit of performance out of your applications.

https://gist.github.com/djspiewak/464c11307cabc80171c90397d4ec34ef


Return to top


Career Development/Miscellaneous

Article: Views from the Top: Try to see things from a manager's perspective

As an individual contributor, sometimes you can get frustrated that “management” is out of touch with your project or organization. This veteran technology manager helps explain the apparent disconnect and offers advice on how to adapt and modify your thinking and perspective.

http://queue.acm.org/detail.cfm?id=3156692


Article: As Silicon Valley Gets ‘Crazy,’ Midwest Beckons Tech Investors

With quite a few folks growing tired of Silicon Valley, J.D. Vance, author of Hillbilly Elegy (a must-read book!) about the post-industrial Midwest, and Steve Case, found of AOL, are using their venture capital fund to look for promising startups in “flyover country”. While the article focuses on some recent victories for Columbus, OH, the concept could apply most anywhere.

https://www.nytimes.com/2017/11/19/technology/midwest-tech-startups.html


Article: Don't Be Evil: Fred Turner on Utopias, Frontiers, and Brogrammers

In this broad interview with media studies professor Fred Turner, some of the toxic aspects of the Silicon Valley culture are discussed. In particular, Turner warns us about the unintended societal impacts of technology and the responsibility that technologists have for ensuring that their creations are used properly.

https://logicmag.io/03-dont-be-evil/


Article: The 5 Problem-Solving Skills of Great Software Developers

Problem-solving is a key skill for developers, but it’s important to remember that problem-solving comes in many different flavors. This article uses the concept of making coffee for you and your co-workers to explain five types of skills and how they apply to programming.

https://www.coderhood.com/5-problem-solving-skills-great-software-developers/


Article: Report: Programmers and developers more important to companies than IT managers

If you’re thinking of moving into a technical managerial role, you may want to look at this first. IT staffing company TEKSystems says that front-line IT workers typically deliver more business value than their managers. Moreover, their report shows that IT is now called on more to maintain existing platforms than for developing new solutions, perhaps due to the rise of “shadow IT” in line of business functions.

https://www.techrepublic.com/article/report-programmers-and-developers-more-important-to-companies-than-it-managers/


Return to top



PLOM (Programing Language of the Month)

Carp

Carp is an interesting little programming language experiment. It is a dialect of venerable Lisp implemented in Haskell that compiles to C, allowing you to use LLVM or any standard C compiler, such as GCC, to generate native code for most any platform. Get all that? Moreover, it has type inference and a borrow checker like that of Rust, which makes it a fully functional language and still fast, and a very flexible REPL. Likewise, it does not include a garbage collector, but programmers still don’t need to manually allocate memory. For a thorough introduction to Carp, check out this tutorial from one of the language’s main contributors.

https://github.com/carp-lang/carp


Return to top



Useful Utilities

QuickAdmin (Free – Windows 7/8.x/10 and .NET 2.0 – 85.5kB)

Do you get annoyed when running applications as Administrator on locked-down Windows environments that prompt you for confirmation (UAC)? QuickAdmin fixes this problem and more. It replaces the “Run As Administrator” context menu item with “Run As QuickAdmin” which prevents the UAC prompt. You can even convert a shortcut to always run as QuickAdmin.

http://raymai97.github.io/QuickAdmin/


Clang In Browser (Free – Cross-platform/C++/JavaScript – N/A)

Clang In Browser (CIB) is a simple, online IDE/REPL that allows you to write C++ code interactively and have it immediately compiled to WebAssembly and run in the browser’s JavaScript engine. You can adapt the toolkit itself for your own uses for transpiling C++ to JavaScript. And, if this idea piques your interest, check out this WebAssembly NES emulator built with Rust.

https://tbfleming.github.io/cib/


Tables Generator (Free – Cross-platform/online tool – N/A)

Creating tabular layouts for various platforms can be difficult, time-consuming, and frustrating. Tables Generator is a clean online tool that allows you to interactively and visually build a table and have the output generated for you in a variety of formats, including HTML, LaTeX, Markdown, and MediaWiki. It includes several handy features, such as setting background color for table/cells and enabling/disabling borders.

https://www.tablesgenerator.com/


Lightmod (Free – Cross-platform/Java – 34.7MB)

Clojure is an amazing and well-designed programming language, but it can be somewhat difficult to get started for beginners. Lightmod is both an editor/IDE and a framework for Clojure that smooths the path when you are getting up to speed. It allows you to build full-stack Clojure/ClojureScript applications with tight integration between the front and back ends.

https://sekao.net/lightmod/


fac (Free – Cross-platform/Go – 2MB)

Many of the tools for fixing merge conflicts in Git are needlessly complex or cumbersome. fac, short for “Fix All Conflicts”, aims to provide a simple, comfortable shell-based GUI for displaying and correcting conflicts. Using standard keyboard bindings you can quickly view and resolve conflicts between versions showing the complete context of the versions in question. (Pre-built binaries are available for Mac OS X and Linux in the releases section.)

https://github.com/mkchoi212/fac


Return to top



Just For Fun

NBA Go

NBA Go is a JavaScript/Node.JS command-line tool that allows you to “watch” any NBA game, including game previews, play-by-play, player information and more. All data used by the tool comes from the official NBA statistics site.

https://github.com/xxhomey19/nba-go


The Remarkable “Curvature Blindness” Illusion

I admit that I simply love optical illusions and find them fascinating. But it’s not often that you find a new one. Here’s one that was just discovered that may completely blow your mind.

http://blogs.discovermagazine.com/neuroskeptic/2017/12/08/curvature-blindness-illusion/


How Do You Like Your Burger Emoji?

File this one under “irrelevant first-world problems”… It seems that someone has called out Google, because their Android hamburger emoji has the slice of cheese under (gasp!) the meat patty. Not sure that this is really the most pressing problem in our world!

https://blog.emojipedia.org/how-do-you-like-your-burger-emoji/


Return to top