April 2012 Newsletter
When a brave man takes a stand, the spines of others are stiffened. –Billy Graham
Experience does not err. Only your judgments err by expecting from her what is not in her power. –Leonardo Da Vinci
There's a world of difference between truth and facts. Facts can obscure the truth. –Maya Angelou
We would worry less if we praised more. Thanksgiving is the enemy of discontent and dissatisfaction. –Harry Ironside
So much complexity in software comes from trying to make one thing do two things. –Ryan Singer
If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all. –Michelangelo
If you're like me, on each project team that you are a member of, the value of the daily standup meeting seems to diminish over time. This article looks at some of the common causes for this problem along with some tips for how to put the meeting back on track to its purpose.
This thoughtful and well-reasoned article will help you explain to a business customer why their "simple" request really requires more time than they expect or desire. The author uses the analogy between a simple table that you might build and one built by a craftsman.
This author notes that the reason that normal estimation techniques, such as used in construction, don't work in software development is because each development project is inventing (creating from scratch) and, accordingly, we don't have a good basis of comparison to prior work. This results in projects almost always being late. What ideas do you have for improving development estimations?
This post notes that agile development is oriented toward building things (think "Working software over comprehensive documentation"). However, it notes that in projects where discovery and finding new and better ways to do things, it may be useful to include the validated learning concept from the lean startup movement to shift the mindset from delivery to discovery.
While the basic premise of this article is around getting started with agile in small organizations and/or with limited budget, the concepts are just as valid for any size implementation. The author says that successful agile adoption is built around three main concepts: creating awareness, creating desire (to change/improve), and transferring applied knowledge. One of the most important ideas behind low-budget implementation is that the tool is not the process and that you need to determine how to do things before investing in a tool.
"Uncle Bob" Martin's latest book, The Clean Coder, is one of the best, most-practical books about programming that I've read in quite some time. This blogger discusses some of the key points about what professional (mature?) programmers do from the book.
There is much chatter on the Internet these days that we are in the so-called "post-PC era". An IDC analyst claims that this is really the "PC-plus era", where the regular computer is still relevant, but needs to be considered in the context of interoperability with smartphones, tablets, and the like.
Scott Hanselman, who is well-known for his comprehensive annually-revised developer tools list, emphasizes that developers and managers need to focus on the basics of good practice, before trying to move on to the nice-to-have things.
From reviewing some recent government IT projects, the Government Accountability Office (GAO) found some common traits among the projects that were hallmarks of success, including senior management support and good engagement with stakeholders. There really isn't much surprising in this list, but it never hurts to have a little more information to back up case for improving processes in your organization.
As SasS (software-as-a-service) becomes more commonplace (does anyone remember the application service provider wave of the 1990s?), this technology presents some unique challenges for testing, especially around configuration, security, and the frequent "uncontrolled" roll-out of new platform features.
In this free excerpt from Beautiful Testing, John Cook explains how to go about testing a random number generator. It gives you some good ideas for how to test randomness in an application and to think outside the box for other types of test planning.
A new program aims to provide 1000 internships for non-technical workers by training them in software testing/QA. The idea originated with a dinner conversation between Jon Bon Jovi and GroupMe co-founder Steve Martocci.
All new technologies spawn their share of unexpected side effects and software is no exception. This list of well-known software failures can be used as inspiration for how to be a more effective tester and more cautious developer.
Hacker News readers respond to this question and offer some insightful feedback/comments about the practices of testing, including TDD, unit testing, functional testing, and system testing.
In this excerpt from his new book, James Whittaker presents the core principles followed by Google in testing. He does a great job of articulating some key aspects, such as, how testers and developers work closely together and the fact that quality and testing are not the same thing.
Coding standards are popular for most programming languages. But did you ever think about applying those concepts to your other development assets, such as CSS? This author provides some good suggestions for making your CSS both readable and functional.
Once you understand how web browsers work, one of the best ways to improve application performance is with caching. This comprehensive tutorial explains the various options, both client and server side, and the pro and cons of each.
One of the key elements of the UNIX philosophy is "Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface." Thus, text-wrangling is one of the things that UNIX/Linux does very well and we should avoid re-inventing the wheel, when possible. This comprehensive tutorial introduces to you the standard UNIX text processing tools, such as sed, awk, grep, and many others.
Python is a great programming language with expressive syntax and great built-in capabilities. However, if you are coming from another language, it can sometimes be difficult to grasp some of the Python idioms. This excellent web-based tool allows you to show the code execution step-by-step with annotation of what Python is actually doing.
This site probably won't make you a better developer or tester, but, hopefully, it will make you a better investor. It documents the principles that Warren Buffett uses based on Q&A sessions with the "Wizard of Omaha".
When getting started with Git (or really any distributed version control system), one of the more difficult concepts is that data "resides" in more than just your local work area and the central repository. This article includes two excellent diagrams that make this concept much easier to understand.
While the news about the decline in off-shoring hasn't quite reached the fever pitch of off-shoring trends of the past 10-15 years, this article gives a good overview and explanation of the factors that are causing companies to look at their options more closely.
Everyone wants to be great employee, but what sets apart the cream of the crop from the rest of the pack? In this article, the author indicates that high performers show characteristics that boil down to being passionate and idiosyncratic.
This pundit says that top (meaning executive in this context) employees leave companies for the same fundamental reason that workers at all levels do: Top talent leave an organization when they’re badly managed and the organization is confusing and uninspiring.
By now, most people know that multitasking is stressful and ultimately leads to lower productivity overall. This article identifies three organizational/cultural changes and three personal behaviors that can reduce this problem.
One of the core principles of Scrum methodology is self-organizing teams. This article explores whether or not organizations take the "no managers" notion too far.
Are you a smart person? Most of us like to think of ourselves as above average. In any case, technical people tend to pursue perfection and, according to this author, this has the negative side effect of hurting productivity, because we can become easily distracted by other "interesting" things.
As I get older ("over the hill", if you like!), I'm starting to experience some memory loss. So this article was quite interesting in learning about how our brain creates memory and how those memory then get "lost". And maybe I need to get a little more vitamin B12, since it is apparently a vital nutrient for memory, or perhaps chewing gum makes more sense.
You may be tempted to skip this article, because it's quite long ("TL;DR"). However, I strongly encourage you to read it. It is an amazing manifesto for why we need to include teaching basic programming skills to all kids, just like we do with the 3 Rs. The author emphasizes how programming helps develop skills like logical thinking and reasoning/critical thinking, as well as, learning how to automate boring, repetitive work. And, if you are interested in this, check out CoderDojo, which is an organization of local programming clubs for kids.
Most of you who read this newsletter are probably not self-employed or entrepreneurs. However, this article provides some very important concepts about motivation in your work and your personal work style, whether you are working for the man or are the man yourself.
Researchers have devised an algorithm that predicts where a person fits within the organizational hierarchy based on linguistic patterns. The algorithm is based on the same principles that search engines use for measuring relevance of results.
Last month, we had an article about how simply saying "thank you" is a good motivator. On the heals of that, this article emphasizes that managers need to be very specific when giving praise. In particular, they need to tie their praise to specific actions by the employee and explain the value of the action.
In this interview, former Mozilla CEO John Lilly talks about how he made the transition from technical contributor to manager. As with most good leaders, he gives a lot of credit to how others helped him grow. His story goes a long way in dispelling some of the common myths about introverts.
I'm a big fan of productivity tips and use a couple of the popular ones myself (Pomodoroand using "to do" lists, for example), but this article points out what is hopefully obvious, but probably overlooked: There is no silver bullet for productivity improvement, because it's personal and depends on your own style, organizational environment, etc. So, look for advice and adapt it (think agile!) to your particular situation.
We all know the old adage that a picture speaks a thousand words. So here are some pictures that show how much traffic and activity goes over the Internet in a single 24-hour period.
Just days after Deutsche Telekom demonstrated 512Gbps transfer on a single fiber, Chinese carrier ZTE showed an 8 x 216.4Gbps system that provides speeds up to 1.7Tbps over 1000 miles. Not to be outdone, Huawei has prototype platform that has total capacity up to 20Tbps.
Even if you're not a malicious hacker, a decompiler is a useful tool for understanding how your application works, to look at the internals of a third-party library, or just to look at the dependencies of an assembly. JustDecompile is a brand new and completely free .NET decompiler. It supports version 1.1, 2.0, 3.x, and 4.0 of the .NET platform, as well as Silverlight and the .NET Compact edition.
QuickRDP is a simple manager for RDP (Windows Terminal Server), Telnet, and SSH connections. It uses native Windows functions for RDP connections and allows you to specify an external application, such as PuTTY (or one of its many variants), to use for Telnet and SSH. You can store user IDs and passwords and it will attempt to automatically log you on to the host upon connection. It can even be extended via Perl scripts.
REST Console is an add-on for Google Chrome web browser that will allow you to construct HTTP headers (per RFC2616) in the browser to send to REST APIs for API testing and validation. It includes syntax highlighting, support for both PUT and POST, and auto-complete among many other features.
Connecting to remote servers via SFTP is often difficult and inconvenient. (Linux makes it much easier with curlftpfs!) WinSCP is a good option, but if you prefer to have a persistent connection to the remote server, SFTP Net Drive can help. It allows you to map any SFTP host as a regular drive in Windows, so you can have an always-available connection and just drag and drop files your local system and the SFTP host. (Presumably, you could even use your SFTP host as a Git repository similar to this.)
In this amazing HTML5 application, the UC Berkeley scientists take you through 14 billion years of time and space. Instead of looking at the history of the universe in dry text, it lets you interactively browse what was happening during certain periods. Read more about the background of the tool here.
Well, maybe this doesn't actually fit into the "fun" category, but it's kind of weird and interesting at the same time. These guys researched whether or not the distribution of letters in a word between the left and right side of the keyboard had any impact on language usage.
Most younger folks probably find it odd that the hjkl keys are used as the "arrow" keys in vi and vim. But the reason for this is actually quite straightforward: One of the first widely used terminals, which Bill Joy used to create vi, actually had arrows on the keys. I remember fondly when my dad brought home an ADM-3A terminal and we hooked it up to his work mainframe using a screaming 300-baud acoustic coupler modem.