September 2014 Newsletter
A friend is one who sees through you and still enjoys the view. –Wilma Askinas
Rules without relationship leads to rebellion. –Andy Stanley
We shape our tools and then our tools shape us. –John M. Culkin
We have these brief lives, and our only real choice is how we will fill them. Your attention is precious. Don’t squander it. Don’t throw it away. Don’t let companies and products steal it from you. Don’t let advertisers trick you into lusting after things you don’t need. Don’t let the media convince you to covet the lives of celebrities. Own your attention — it’s all you really have. –Jonathan Harris
Uncertainty is where things happen. It is where the opportunities—for success, for happiness, for really living—are waiting. –Oliver Burkeman, The Antidote
There is little success where there is little laughter. –Andrew Carnegie
The scientist does not study nature because it is useful to do so. He studies it because he takes pleasure in it, and he takes pleasure in it because it is beautiful. If nature were not beautiful it would not be worth knowing, and life would not be worth living. –Henri Poincaré
OOP does model the real world! Things at the top of the hierarchy seemingly do nothing but tell those at the bottom what to do. –Michael Fogus
People will do almost anything before they will shift their paradigm. –Eli Goldratt
We who cut mere stones must always be envisioning cathedrals. –Stonecutter's creed
If you think your organization has struggled with adopting agile development practices, then take a look at this excellent article about the long journey Microsoft took to get there. Interestingly, it was the pressure from competitors that ultimately drove them to streamline their development processes.
Many organizations are looking beyond Scrum and the “traditional” agile methodologies for other techniques to improve software development. This article provides an overview of how the Kanban methodology, originally used in manufacturing, can be applied to development.
This article emphasizes the point that users don’t often know what they want and our job as analysts and developers is to tease out the underlying requirements. The article uses a nice variation on the “5 Whys” approach for driving to the underlying customer need.
I refer to this paradigm as “magpie syndrome”: Always getting distracted by the latest and greatest technology or tool to come along. This article makes the key point that our main responsibility as developers is to deliver business value to our customers and the larger organization. Moreover, the author says that we would do well to look closely at what has been successful in the past and learn from it.
This author says that using data-driven metrics to improve development is a valuable tool. In particular, he claims that one of the most valuable uses of metrics is as an “early warning system” for emergent problems. However, he cautions strongly against using metrics to evaluate developer performance.
In this presentation about the future of Java and the JVM, the top Oracle architects emphasize that the future is not really about the Java language itself, but more focused on how the JVM can be a platform to host other languages. Upcoming optimizations are squarely aimed at reducing “impedance mismatch” between those languages and the JVM.
The model-view-controller (MVC) pattern is ubiquitous in software development and web design. But, this article points out that MVC means many different things to different people and you must understand the context for any given project or framework to use it correctly.
Software development is as much a craft as anything else. Most of us have had mentors (masters of the craft) who helped us along the way (thanks, Andy!). So what advice would you give to those just starting out? This is a pretty good list in my estimation, especially with respect to managing expectations as a person moves from learning programming (school) to practicing it (“real world”).
Most articles about test-driven development (TDD) focus on how the practice applies to programmers. This is an excellent article about how TDD is a complementary activity to software testing that helps testers concentrate on the “big picture” of application testing.
This article looks at various perspectives on how agile practices, especially “sustainable pace”, inherently allow teams to improve the quality of their software. The bottom line is individuals (and, therefore, the teams that they are part of) perform better when they are well rested and fresh and, accordingly, make fewer mistakes.
Most developers understand the principles behind test-driven development (TDD). Nevertheless, with the pressures of project schedules and administrative tasks, it’s easy to give unit tests the heave-ho. This author outlines some personal and pragmatic reasons to make TDD a priority.
Organizational change is difficult (and sometimes downright painful). One of the most difficult areas to change is attitudes about testing, both developer testing (unit testing, etc.) and independent testing. This article presents ideas about how to sell your organization on the value of automated testing.
In this tutorial series, the author discusses each of the concepts in the SOLID pattern for object-oriented development. Each segment includes a comprehensive example in C# (which should be understandable to those with experience in another OOP language) by working from a naive design toward a good design that uses the principle under consideration.
Regardless of how good of a programming you are, debugging code is one of the most important skills you can have. This comprehensive, language-independent tutorial gives an excellent heuristic for investigating and solving a problem in code, including some practical tips about how to narrow down the scope of the problem.
In most development situations, when you start on a project, you’ll have some sort of code base already in place. This excellent tutorial gives some practical ideas for how you can rapidly familiarize yourself with that code.
The Java JDK has a treasure trove of tools that can help you debug and fix various problems with your program, such as OutOfMemory errors. However, most Java developers haven’t even heard of these. This author gives a basic overview of a half-dozen of the most useful ones.
Java 8 offers many enhancements, especially for functional programming paradigms. While the lambda expressions functionality has garnered the most attention, the new Stream API is just as important. If you don’t have a strong background in functional programming, the utility of the Stream functionality can seem confusing. This tutorial gives a gentle introduction with many relevant examples.
At some point in your career, you will likely come to a cross-roads where you must choose to continue as a technical employee or to move into the management track. But how do you decide whether the management road is right for you? While certainly this one article won’t answer all of your questions, it provides some good suggestions on criteria for deciding and factors to consider.
Before you take that leap from programmer to manager, you should read this sage advice about how you must make a clean break from the development work and focus on your management responsibilities. Moreover, it’s vitally important that IT and business management understand that your role is strictly management, too.
Technology professionals are notorious for not taking vacation (or for working during vacations). This author makes the important point that one of the larger benefits of requiring vacation is that it forces organizations to ensure maintainability of code and to have other people who understand the code.
Perhaps not surprisingly to most developers, mobile application development is the hottest market today, especially for Android platform. Here are some tips to improve your chances of getting that job if you are looking to move to mobile development.
New electronic communication technologies come and go (remember Google Wave?) and we often hear about how this or that tool is on the wane. But how long has it been since someone (other than those who are introducing the next “e-mail killer” application!) claimed that e-mail’s demise was imminent. This story explains how e-mail’s de-centralization keeps it as the key application in most people’s day-to-day workflow. And there’s an active community of developers, such as Rainloop, Unroll.me, looking to streamline e-mail, so certainly they believe that it will continue to be an important tool.
One of the recent hot topics in the software development blogosphere is whether coding in interviews is useful. Of course, there are those on both sides of the issue. Nevertheless, this author makes a very good case for why they are a waste of time for both the interviewers and the job candidate.
While more oriented toward startups, this article is a good reminder to everyone that improving organizational culture isn’t only the job of senior management, but of all members of the organization. The author boils it down to: To build a better culture, become a better person.
Critical thinking is one of the most important skills for any knowledge worker, such as developers and testers. This article discusses some of the habits that anyone can adopt to improve their ability to think critically.
Winston Churchill said, “Attitude is a little thing that makes a big difference.” In that same vein, this author discusses the characteristics that differentiate good developers from the bad. Most of the concepts simply come down to the attitude of the individual toward their work and those they work with.
If you spend much time thinking about the superstars of the development world (John Resig, Notch, et. al.), it’s easy to get down about your own skills and to even think that maybe you just don’t have what it takes. Of course, not everyone struggles with this! This article gives you some good perspective on the fact that even the greatest developers are usually leveraging the work of those who came before.
This article is an interesting analysis of bandwidth costs for carriers and other “large” consumers of telecommunications, which takes into account peering costs. Interestingly, their conclusion is that bandwidth is cheapest in Europe with North America a close second.
NuHelp is a Windows HTML Help authoring tool that works directly in MS Word (also requires free HTML Help Workshop). You simply use your existing Word document’s headers to define help topic levels in the generated file. It has support for internal and external hyperlinks, index topics (by surrounding with curly brackets) and meta tags for internationalization. A simple way to create help files using the tools that you already use on a day-to-day basis.
In additional to fixing/converting CSV files (see above), sometimes you’ll have XML data that you want to convert into a spreadsheet for ease of viewing/editing. XML2CSV is a comprehensive tool to convert XML-formatted data of almost any complexity and DTD into flat spreadsheet. The author provides excellent documentation of the tool, as well as the API, if you want to integrate it for your own customer application, and samples to help understand how it works.
Cron jobs are a fact of life in the development world. But, if you don’t use cron on a regular basis, it can be difficult to remember the syntax. Or you might come across a crontab file and want to know what schedule the scripts reference run on. CronChecker is a simple online “decoder” for cron syntax that explains the schedule in plain English.
Sysmon is the newest member of the fantastic Sysinternals family of Windows utilities. Sysmon provides comprehensive functionality for logging system events, such process creation (application startup), network connections, and file changes into the standard Windows Event Log. All events are logged to a specific event log to avoid cluttering the standard Windows event log.
One thing that you want to avoid, especially if you use public code repositories like Github or BitBucket, is including sensitive files that are part of your source code, such as configuration files with user IDs and passwords. GitIgnore.io has nearly 200 different platform configurations for which it can generate a boilerplate .gitignore file to keep those files as local only.
If you do any kind of text editing (and who doesn’t these days?!), you won’t want to miss this conference. Some of the exciting sessions you’ll get to attend include “Ten Ways Exiting Notepad is Better Than Exiting Vim” and “Advanced Pasting Techniques”. Probably a great conference for programmers on the ZISC platform.
No, not “catty” in the sense of being subtly insulting (passive-aggressive)… This gallery shows what several of your programming coworker types would look like if they were cats.