April 2013 Newsletter
Sometimes, the elegant implementation is a function. Not a method. Not a class. Not a framework. Just a function. –John Carmack
Ever tried. Ever failed. No matter. Try again. Fail again. Fail better. –Samuel Beckett
Success is doing ordinary things extraordinarily well. –Jim Rohn
We say we waste time, but that is impossible. We waste ourselves. –Alice Bloch
While developers may talk about the importance of tools or methodology
(or any number of other things) as being vitally important, the most important
factor in project success is building what the customer wants. This article discusses effective techniques
for eliciting good information from users.
And remember that it’s important to listen
carefully to the users.
Alan Kay is one of the true visionaries of the technology revolution of
the second half of the 20th century, with broad influence including
programming, networking,
and more. This article gathers some of
his collected wisdom about system design.
This is a must-read for anyone in involved in programming.
http://mythz.servicestack.net/blog/2013/02/27/the-deep-insights-of-alan-kay/
Variable and function naming is one of the most important aspects of
writing understandable code. While most
developers understand the value
of descriptive variable names, this article explains the linguistic concept
of Zipf’s
law and how to apply it to creating good variable and function names.
http://blog.existentialize.com/zipf-your-variable-names.html
This article gives some important examples of where TDD breaks down and
domain knowledge and good analytical skills are important to evaluate your
application. It’s not anti-TDD, but
rather just pointing out that using TDD is not sufficient to prove correctness.
Even though TDD is not a foolproof technique, there is little doubt that
it improves quality and speeds development, when practiced effectively. Here are some excellent tips to help you
write effective, robust, and maintainable unit tests.
http://blog.stevensanderson.com/2009/08/24/writing-great-unit-tests-best-and-worst-practises/
While this essay doesn't purport to provide the silver
bullet for fixing the problems with software development, it does offer
some great fodder for thought and discussion about what separates great
programming practice from the mediocre.
What does excellence mean to you?
http://programmingzen.com/2010/07/04/the-pursuit-of-excellence-in-programming/
Most organizations that try to adopt agile development methodologies run
into some problems. One of the most
common is trying to do agile in the context of a traditional methodology. This is where management must really support
and enforce the agile principles.
http://www.softwareresults.us/2010/06/agile-is-fragile.html
Everyone on development projects seems to be pressed for time to complete work, but testers often get squeezed more than others. This article offers some tips for making the best use of time, your most precious resource, especially around test automation.
This article discusses potential gaps in the middle layer of the testing pyramid where some functionality may not be tested and provides some suggestions for how to shore up that testing.
http://blog.kalistick.com/Agile/harden-testing-pyramid/
This article addresses an interesting question about whether or not you should include deferred defects as part of technical debt. In short, the author’s answer is “no”, but, more importantly, he provides an interesting classification of what he believes should be considered technical debt.
http://swreflections.blogspot.ca/2012/12/are-bugs-part-of-technical-debt.html
One of the key success factors for agile implementations is a good, agreed-upon “definition of done”. This article provides a good example (each team needs to develop their own!) and emphasizes that it needs to be established not only for user stories but also features and sets of features.
http://scaledagileframework.com/guidance/a-scalable-definition-of-done/
Of course, no single reference can cover all of the “best practices” that you’ll want to apply in your development work. Nevertheless, this list pulls in a wide variety of excellent, tried-and-true resources into one place. It’s a great reference to review once in a while to remind yourself about how to do things.
https://github.com/thomasdavis/best-practices
While I personally prefer Firefox, the Chrome Developer Tools are a powerful and useful set of tools for web development. This comprehensive set of tutorials teaches you the ins and outs of the tools, including how work with the DOM, the console, JavaScript debugging, and more. And don’t forget the variety of useful Dev Tools extensions.
http://discover-devtools.codeschool.com/
One of my professors in college said that the main qualifications for an engineer was to know the slang in their niche. The same thing is true in most any technology domain. Here’s a comprehensive glossary of test-driven development (TDD) terminology.
http://net.tutsplus.com/articles/tdd-terminology-simplified/
This is the third (annual?) presentation of some lessons about designing good REST web services based on discussions with hundreds of developers who use these services. Learn how to implement an API that your users (other developers!) will enjoy working with.
http://blog.apigee.com/detail/api_design_third_edition_video_slides
Most articles on work-life balance approach it from a rather generic point of view. This one is different in that the author is a programmer and academic in computer science, so his tips may be more applicable for the situations of our newsletter readers. And even if you go to outer space, you still have work-life balance issues.
http://matt.might.net/articles/work-life-balance/
The great equalizer among all people is that we each have the same amount of time every day. How we spend our time is what separates the great from the also-rans. This is a great list of tips about how to get the most out of your time. And many of these simply remind us not to stress out about things beyond our control.
http://www.slideshare.net/egarbugli/26-time-management-hacks-i-wish-id-known-at-20
This developer blogs his response to some programming students doing a project about what companies can do to attract good programmers (and avoid some of the annoyances). This list is thoughtful and relevant. How does it line up with your personal desires and expectations?
http://henrikwarne.com/2013/03/26/what-do-programmers-want/
This developer opines about the increase of negativity among the technorati. But instead of just making this a rant, he explains what each of us as individuals can do to reverse the tide and how being positive is really a choice that we have to make each day.
http://www.rdegges.com/the-positive-programmer/
Many of you have probably heard of the paradox of choice, which essentially says that more choices about something drive us to be less decisive. This author gives an excellent extension of this into the realm of personal productivity improvement by looking at how to reduce all of the “moving parts”.
http://franzisk.us/2013/02/18/boost-your-productivity-kill-some-variables-in-your-life/
Most of us are aware that getting plenty of sleep is one of the key factors in health and productivity. This comprehensive article explains the importance of sleep and how you can improve the quality of your sleep.
http://www.supermemo.com/articles/sleep.htm
In this newsletter, we frequently refer to the importance of a good night’s sleep in productivity, happiness, and mental and physical health. Here is an overview of some of the current research on insomnia and how to cure it.
http://www.newyorker.com/reporting/2013/03/11/130311fa_fact_kolbert?currentPage=all
At the risk of branding myself as a Luddite, I highly recommend this essay. Using the subtitle “Gadgets are the first thing we touch in the morning and the last thing we stroke at night. Are we their slaves?”, the author explores, from a variety of angles, how technology is changing our society, especially in our interpersonal (intermachine?) relationships.
http://www.aeonmagazine.com/being-human/tom-chatfield-technology-intimacy/
While there are many regular expression (regex) testing tools online, Debuggex is one of the best that I’ve found. One of the neatest features is the ability to “slide” through your regex to see how it matches the target string. To learn more, check out this article.
Recently, we featured a report that says you should work in a coffee shop (sometimes), even if you have an office. One of the premises is that the background noise actually helps creativity. Coffitivity might be the next best thing! Just put on your headphones and listen to the audio loop of coffee house chatter to block out other noises.
Everything is what Windows Search should have been. Everything will index documents and other files on your hard drive (and even external drives, if you want) and provides lightning fast search results. The best part is that Everything’s indexing engine doesn’t drag down the performance of your system.
Most developers no longer have IE6 installed, but many users still have it, often due to IT department requirements. This online tool will render your site in IE6, so that you can see how it will look, with all of the IE6 quirks.
WindowSlider takes a unique approach to the virtual desktop concept in Windows. Essentially, it "extends" your Windows desktop to make it "infinitely" wide, so that you can place each window (or groups of windows) on any of the available desktops. One of the nice features is that you can simply switch to any application using the standard <Alt>+<Tab> shortcut or use the built-in shortcuts for "sliding" the desktop left or right.
http://ficusdev.com/WindowSlider/Description
OK… This seems to take the whole face-detection concept a bit too far. Why in the world would you need to detect cat faces in photographs? Anyway, check it out just for the laughs!
http://harthur.github.com/kittydar/
This is quite humorous... And geeky. In response to a recent XKCD comic, this guy actually implemented a sort that randomly looks for Javascript sort methods on Stack Overflow and applies them until it gets the correct answer. Quite creative!
http://gkoberger.github.com/stacksort/
This is a very interesting game. Developed by an accountant and MBA student, it’s an Excel-based game similar to Rogue. It works in Excel 2007, 2010, and 2013.
http://carywalkin.wordpress.com/2013/03/17/arena-xlsm-released/
This is what happens when you get geeks involved with trying to automate the watering of your garden. Just add Arduino and voila!
http://www.gerrychu.com/fountains/interactivefountain/interactivefountain.html