Up to Newsletter Index

February 2015 Newsletter


Quotable Quotes

The creative adult is the child who has survived.  –Ursula K. LeGuin


Smart data structures and dumb code works a lot better than the other way around.  –Eric S. Raymond, The Cathedral and The Bazaar


If you can dream — and not make dreams your master; If you can think — and not make thoughts your aim… –Rudyard Kipling, If


Node is Windows 3.1 cooperative multi-tasking rediscovered by JavaScript programmers that never had the pain of dealing with it.  tonetheman on Reddit


It is a mistake to look too far ahead. Only one link in the chain of destiny can be handled at a time.  –Winston Churchill


Progress isn't made by early risers. It's made by lazy men trying to find easier ways to do something.  –Robert A. Heinlein


In an all too familiar trade-off, the result of striving for ultimate simplicity is intolerable complexity; to eliminate too-long proofs we find ourselves “hopelessly lost” among the too-long definitions.  –Michael Harris, Mathematics without Apologies


Return to top


Software Development Process and Methodology

Article:  Good Enough

This author explores the concept of “good enough” in the context of design and development.  His key insight is that to succeed with your application or system you must have focus on intentional incremental improvement.  And it is vitally important that all three of these elements work together.



Article:  Your Job Is Not to Write Code

While I grant that this essay is a bit condescending in tone, it’s still a very eloquent reminder that, as technical workers, our underlying responsibility is to please our customers and to deliver business value.  The author makes several salient references to things that you might forget about in the “heat of battle”, but that you need to account for.



Article:  Manifesto-Mania – thoughts on the Half-Arsed Agile and the Anti-Agile manifesto

The year 2014 seemed like the nexus for bashing agile development techniques and methodologies, including several “counter-manifestos”.  This pundit offers some perspective on the tide of frustration and emphasizes that agile is not (and never was!) about methodology, but about streamlining process and delivering business value.



Article:  Why We Write Tests

Simon Sinek hit the nail on the head with the title of his book, Start With Why.  The idea is that we always need to understand why we do the things that we do, because some (many?) times, we don’t have a good or valid reason to do so.  This article approaches TDD in the same manner.  The author’s conclusion that writing tests in about reducing cost, particularly the total cost of ownership (TCO) of your code over the long run.



Article:  The Truth About Project Estimations (It’s Your Fault They Are Wrong)

Estimating effort and duration of development projects is probably the single most difficult aspect of software development.  This author emphasizes that the key element of good estimation is to reduce the amount of uncertainty about what is required to achieve your objective.  This led me to the insight that this means that just like development itself is iterative, we must make the estimation process iterative as well.



Article: We can’t measure Programmer Productivity… or can we?

Undoubtedly, one of the touchiest topics in the development world is measuring developer productivity.  We’ve all heard the horror stories about misuse of metrics like lines of code or number of commits to version control.  This author offers some other advice on the topic with the key aspect that managers should be measuring outcomes, such as business value, improved quality, etc. and not output.



Article:  Architecture:  We Are Gonna Need It

You are probably familiar with the phrase “Big upfront design is an anti-pattern”.  Unfortunately, this claim often comes to mean that you shouldn’t do any upfront design and simply let the application evolve organically.  This author makes a very good case for the importance of appropriate architectural design during the initial stages of a project.



Article:  The RedMonk Programming Language Rankings: January 2015

The RedMonk guys present their latest semi-annual analysis of programming language popularity, based on frequency of occurrence on GitHub and Stackoverflow.  Not much has changed at the top of the list, with JavaScript and Java heading the list, but some of the newcomers including (not surprisingly to me, anyway!) Go, Julia, Rust, and Swift, which vaulted from 68 to 22.  Interestingly, the R language for statistics and data science (what you’d probably call a domain-specific language) is holding its own.



Article:  Most Popular Desktop IDEs & Code Editors in 2014

Similar to the programming language popularity ranking above, here’s a report, based on 10000+ responses from users of Code Anywhere platform about their favorite IDEs and text editors.  Which one do you think came out on top:  Eclipse, Vim, IntelliJ IDEA?  Well, surprisingly (at least to me!), the top editor was Notepad++, well ahead of runner up Sublime Text.



Return to top


Software Testing & Quality

Article:  Taming a Wild, Testless Code Beast – 4 Steps To Improving Test Coverage

This article is oriented toward test-driven development (TDD) and unit testing, but the principles apply just as well to how to approach any software testing effort.  The author emphasizes that you need to focus on the key areas of the application, such as core functionality and those areas that seem weakest and/or most prone to problems.



Article:  Quality Requires QA

Many organizations have abandoned the notion of a separate/independent quality assurance (QA) organization.  According to this article (from a programmer!), this often has disastrous results.  He uses the example of the poor ratings of the Facebook IOS application.



Article:  The value of manual testing

Even though test automation is increasing in capability, this article shows that manual testing is still an important and valuable tool.  The author explains that nothing can substitute for the skills of a creative and intuitive tester.



Article:  The Basics Of Test Automation For Apps, Games And The Mobile Web

Don’t let the title of this article fool you; it’s a comprehensive, detailed look at both the approach and implementation of test automation for mobile platforms.  Specifically, the author gives a step-by-step tutorial on using the Appnium open-source mobile testing toolkit with both IOS and Android.



Article:  Not Getting Software Wrong

While you may consider that is author is splitting hairs, he makes a good argument for a small philosophical shift in thinking about software quality and security to include testing to validate that not only does it work correctly (meets requirements), but also that it does not do something wrong.  Certainly, the concept may not apply in all cases, but it’s something to consider when planning your tests.



Return to top



Tutorial:  Git Game

This is a simple little game that you play in the terminal/shell to test your skills with Git version control tool.  It’s very interactive and actually kind of fun.  Each step gives you a task to complete using Git to reveal the next task.  (And don’t cheat by looking at the branch names on GitHub! J)



Reference:  Authentication Cheat Sheet

Unless you are an expert in the field, you should use existing patterns and practices for security and authentication in your application, especially libraries and frameworks already provided for your platform.  This excellent reference helps you understand the standard practices to use for permissions and security for most applications.



Tutorial:  Java 8: No more loops

If you’ve made the switch to Java 8, this tutorial will help you adopt one of the fundamental functional programming practices in all of your new code:  elimination of loops.  The best part is that the new Java 8 functionality is fluent and understandable, so it makes the transition much easier.



Reference:  JavaScript Errors and How to Fix Them

JavaScript’s error messages are often cryptic and provide little context for the cause.  This excellent list helps you understand what the error messages mean and provide suggestions for likely causes and fixes.



Reference:  GitHub Cheat Sheet

This jewel is a collection of some well-known and some rather obscure tips to increase your productivity and efficiency when using Git, especially (but not only!) when you work with Github.  Some of the best tips include switching the previous branch and nice styling of your Git log.



Tutorial:  Awk in 20 Minutes

If you do almost any work in the Linux/Unix shell (console, command prompt, terminal, etc.!), inevitably, you will come across a situation where you need process some text files, such as log files.  While most systems have high-level tools, such as Perl and Python, which are up to the task, in many cases, the Unix philosophy provides the best approach and often awk is that option.  This brief, yet comprehensive, tutorial teaches the basics of awk and then provides several real-life examples.  And there’s even a debugger for Awk, if you write some complex scripts.



Return to top


Career Development/Miscellaneous

Article:  The Buffett Formula — How To Get Smarter

Among all of the people in the world, Warren Buffett is one of the most respected for both common sense and shrewdness.  In this article (from my favorite blog, Farnam Street!), Buffett and Berkshire Hathaway vice-chair Charlie Munger share their secret to success.  The bottom line is that it comes down to reading—and reading a lot—and then thinking about what you read.  Perhaps it’s my own bias toward Midwestern sensibilities, but I think that they are absolutely correct!



Article:  The Golden Rule for programmers

Newton famously said, “If I have seen a little further it is by standing on the shoulders of Giants."  But even he borrowed this phrase!  In the same vein, this author makes a great suggestion about sharing knowledge with others when you solve a problem or make a meaningful discovery.  In some small way, I hope that this newsletter fulfills that, as well.



Article:  Cracking The Coding Interview: 12 Things You Need To Know

Writing code is now a standard practice for most technical job interviews.  But if it’s been a while since you’ve interviewed, you probably aren’t familiar with how to prepare.  Check out these dozen of excellent tips for preparing and succeeding when the heat is on.



Article: Why the modern world is bad for your brain

Do you feel overwhelmed by the pace and trappings of our technology-saturated society?  This neuroscientist says that you’re not alone in suffering the side-effects of so-called info-mania.



Article:  Screw motivation, what you need is discipline

We often feature articles related to productivity improvement for technology workers.  And those articles are valuable (or I hope that they are!).  However, this article elegantly emphasizes that any tool or technique intended to help you improve are only as good as your ability to dedicate focus and effort.  The article discusses how self-discipline is the linchpin of success in your work.



Return to top


Telecommunications/Networking Industry

Report:  Decoding the net neutrality debate

The Knight Foundation, the non-profit charitable foundation originating from the Knight-Ridder newspaper empire, looks at the public debate over net neutrality from the perspectives of media, public comment, and open-Internet advocacy groups.  Their conclusion is that public sentiment is strongly in favor of net neutrality, but their voices are significantly drowned out by lobbying efforts by telecom providers.



Article:  Obama calls for cities to build government-run high-speed internet

With a showdown over net neutrality looming, President Obama goes on the offensive to promote legalization of municipal broadband systems. 



Return to top


Useful Utilities

Splat (Free – Windows XP/Vista/7/8.x/10 – 550kB)

Splat is an abbreviation for Simple Program Launching and Termination.  It’s a simple application launcher that includes a few nice twists.  Instead of just launching a single application, Splat allows you to create launch “profiles” which can launch applications, files, folders, etc., stop/start other applications, and/or stop/start system services.  You can even include delays or CPU usage thresholds.  And each launch “profile” can have its own hotkey.



monoOne (Free – Cross-platform Windows/Linux/Mac OS X – 675kB)

Most developers are always on the lookout for a good monospaced font to use with their favorite text editor.  I won’t claim monoOne is the best, but it’s certainly worth checking out.  It’s an OpenType format font, so it works on almost all platforms and some of the nice features include great readability for symbols and a modern, but not strange styling.



QuickJava (Free – Cross-platform extension for Firefox browser – 24kB)

Inevitably, while browsing on the Web, you’re bound to come across sites with great information, but so much “eye candy” that it makes your head hurt.  QuickJava adds buttons to your Firefox add-on bar or status bar to quickly enable/disable various page features, such as Java, JavaScript, Flash Player, Silverlight Player, animated images, images, CSS stylesheets and much more.



GitForce (Free – Windows XP/Vista/7/8.x/10 and Linux with Mono – 1.5MB)

There are plenty of GUI front-end tools for Git version control out there, but what makes GitForce different is that it’s small and the same binary runs on both Windows and Linux (via Mono).  Likewise, GitForce doesn’t try to abstract away all of the Git command line features, but simply makes some of the more esoteric features easier and provides an “at-a-glance” view of your files with respect to their repository status.



rdbms-subsetter (Free – Platform-independent with Python – 13kB)

Database testing is hard, because you need to get a consistent sub-set of the available data without copying the entire database.  This tool is a simple, yet elegant SQLAlchemy script that will automatically pull out a consistent set of data from any database.  You can even specify how many child records to pull.



Return to top


Just For Fun


Everyone knows about the Internet time-sink called BuzzFeed, but have you heard about FuzzBeed?  It’s an algorithmically-generated parody (or is it satire?) of BuzzFeed.  Very creative and many of “stories” are quite funny.



The C Programming Language by Brian W Kernighan & Dennis M Ritchie & HP Lovecraft

What if BWK and DMR had H.P. Lovecraft help them write their classic tome on the C language?  Well, this site might give you a little taste.



Twitter Sort

We hear a lot about outsourcing these days, but this is an ingenious application of the concept.  Need a list of numbers sorted?  Why bother having the computer do it, when you can post the list to Twitter (140-character limit enforced, of course!) and ask one of your followers to help you out?



Govt bans StackOverflow.com; Developer takes 6 hours to swap 2 variables

While this is certainly satire, it may not be too far from the truth is some cases.



An Efficiency Comparison of Text Editors Used in Academic Research and Development

Will the Vim versus Emacs debate ever end?  Probably not…  But that doesn’t mean that we can’t have a little fun along the way.



Return to top