June 2009 Newsletter
Choose your corner, pick away at it carefully, intensely, and to the best of your ability and that way you might change the world. –Charles Eames
Don't fight forces; use them. –Buckminster Fuller
A day of worry is more exhausting than a week of work. –John Lubbock
To be prepared is half the victory. –Miguel de Cervantes
Difficulties are meant to rouse, not discourage. The human spirit is to grow strong by conflict. –William Ellery Channing
All of us tend to put off living. We are all dreaming of some magical rose garden over the horizon—instead of enjoying the roses that are blooming outside our windows today. –Dale Carnegie
The 'silly question' is the first intimation of some totally new development. –Alfred North Whitehead
Life is full of obstacle illusions. –Grant Frazier
We need a renaissance of wonder. We need to renew, in our hearts and in our souls, the deathless dream, the eternal poetry, the perennial sense that life is miracle and magic. –E. Merrill Root
In most organizations, project estimation is either a black art or an
afterthought. Here are some simple,
practical tips for improving estimation.
It focuses on the principle of developing a feedback loop cycle for
estimation rather than starting from scratch on every project.
http://blogs.techrepublic.com.com/10things/?p=646
This excellent presentation shows how many organizations have co-opted
the agile label, but they are simply sticking it on the traditional waterfall
process. The key recommendation that the
author makes is that agile should be implemented organically (bottom up),
should be adapted appropriately for the specific organization, and should not
be done all at once.
http://blogs.agilefaqs.com/2009/04/29/agile-as-practiced-today-is-the-new-waterfall/
Despite reports
of the demise of object-oriented programming (OOP), this article, by
well-known and respected computer scientists, Trygve Reenskaug, creator of the MVC pattern, and James O. Coplien, explores how OOP as implemented (i.e., in
practice versus in academia) missed the boat in translating mental models of
business users into objects with respect to system actions and
interactions. And they offer a fix
called DCI: an
architecture based on the object Data, the Collaborations between
objects, and the way that Use Cases scenarios comprise Interactions between role. I predict that this paradigm will be
revolutionary. (Guy L. Steele
made similar observations back in 2002.)
http://www.artima.com/articles/dci_vision.html
The choice of a comfortable monospaced
font for your text editor or IDE is really a matter of personal
preference. So check out this list to
see if you might find something a little better than Courier New for your
needs. And don’t forget to read the
comments for other great recommendations!
http://hivelogic.com/articles/view/top-10-programming-fonts
http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=336185
In this article, the author makes it clear that development estimates are
not (or should not be!) "point" estimates,
but that instead they should be treated as a statistical distribution. Although he doesn't specifically note this,
it should be apparent that this means all estimating techniques should have a
low, medium, and high component (3-point
estimate) with a likelihood weighting for each.
http://www.woodwardweb.com/programming/000439.html
REST is one of the popular architectures for building web services and
SOA applications. (The other is SOAP.) This article discusses some of the good
things about REST and the dark underbelly as well.
http://dobbscodetalk.com/index.php?option=com_myblog&show=REST---Good-Bad-and-Ugly.html&Itemid=29
This brief, succinct list is a great set of principles for programmers to
follow. Take this list and think about
what other things you would add.
http://www.juixe.com/techknow/index.php/2009/05/07/laws-of-source-code-and-software-development/
Some people call them “non-functional
requirements” and other use the term “supplemental specifications”, but
whatever name you use, business customers always have some expectations about
any application that are implied, but still very important. This article explains ten such “fit and
finish” needs that all developers should pay attention to.
http://blogs.techrepublic.com.com/10things/?p=727
Many organizations continue to fail in both their development projects
and their efforts to improve the development process itself, because they have
the "Chuck Norris mindset":
They expect change to happen simply because they want it to. In other words, they don't invest in the work
and effort to make it happen.
http://blogs.zdnet.com/projectfailures/?p=3322
In an interesting twist on the usual IT-business alignment divide,
business users have become advocates of model-driven
development tools and methodologies because they perceive that IT
organizations are too slow in developing tools to meet the business needs. By contrast, programmers have generally
resisted these tools as raising the abstraction level for applications too
high.
http://www.sdtimes.com/link/33445
In tight economic times, everyone is trying to get by on less. This means that the focus is on efficiency. Here are some tips on boosting the efficiency of your test efforts and the test organization itself.
This article gives great introductory explanations about the various types of code coverage testing techniques, such as statement, branch, condition, etc. Likewise, it includes some practical advice about what coverage techniques to apply first and why.
http://www.bullseye.com/coverage.html
Many developers are tempted to do large-scale rewrites of code when they have to do bug fixing. Of course, this is risky from the quality perspective as well as to the project schedule. Refactoring is usually an acceptable alternative. This developer suggests this principle: Make a small “quality fix” for every bug you have to address. He goes on to explain what these small fixes might be.
http://blog.tetrack.com/2009/05/on-code-quality-a-small-quality-fix-with-every-bug-fix/
This article explains the motivation for independent testing from the developer's perspective and addresses the value proposition for testing.
http://www.technewsworld.com/story/67052.html
One of the banes of a software tester's existence is generating test data, especially when you are doing automated testing and you need a large quantity of data. GenerateData.com can help. It is both an online tool and a free (GPL) script that you can run on your own server to generate data. It can create a variety of test data types including names, email addresses, address data, alphanumeric strings, and MUCH more. It can output the data set results in many formats including XML, Excel, HTML, CSV, and SQL.
This free, online textbook teaches data structures using Java. Many of the data structures presented have
interfaces similar to those in Sun's JDK.
http://www.cs.williams.edu/~bailey/JavaStructures/Welcome.html
In Java programming, one of the most frustrating errors is the java.lang.OutOfMemoryError. This can
be caused not only be running out of heap memory, but also by native
memory. This article explores the causes
of these errors and how you can avoid them in your Java (or other JVM-based)
applications.
http://www.ibm.com/developerworks/linux/library/j-nativememory-linux/
Need to test a small snippet of code?
This cool little site allows you enter your BeanShell, Clojure, Groovy, Javascript,
Python, Ruby, Scala,
or Scheme code and execute it
interactively. The source code is even
available, if you want to see how they do it.
It would be rare that a person would say that Windows is fast at booting
and launching applications. SuperFetch
is an update to the Windows pre-fetch technology introduced in Windows Vista,
which aims to predictively load libraries in parallel
for enhanced performance. This article
looks under the covers of SuperFetch and dispels some
of the legends about it.
http://www.osnews.com/story/21471/SuperFetch_How_it_Works_Myths
Does the thought of concurrent or multi-threaded programming make you
nervous? This tutorial gives a gentle
introduction to using the java.util.concurrent package.
http://www.informit.com/articles/article.aspx?p=1339471
Most of us probably aren’t (and won’t be!) involved in writing operating
systems. Nevertheless, application
developers can benefit from understanding how the operating system creates and
manages processes, especially as it relates to application performance.
http://www.ibm.com/developerworks/linux/library/l-linux-process-management/
A new survey shows that people under 30 tend to ignore voice mail and are more likely to respond to e-mail and text messages. Understanding communication styles is very important to successfully interact, especially between generations.
http://www.nytimes.com/2009/04/02/fashion/02voicemail.html?_r=1&partner=rss&emc=rss
Keeping your skills current is the key to long-term success in any career. Here are one pundits suggestion about what programmers will need to be able to have in their basket in the next few years. No big surprises, but a good "check list" to have for your career planning.
http://blogs.techrepublic.com.com/10things/?p=643
Most programmers (and people, in general, of course!) tend to view themselves as competent. In this humorous video, Ron Burk discusses the Dunning-Kruger effect and how it applies to programming. In particular, he emphasizes that overconfidence in our abilities is most often demonstrated in insufficient unit testing.
http://www.youtube.com/watch?v=L_vcy7I0zIM
A new survey by Robert Half shows that IT professionals are on track for 3.7% increase in starting salaries over 2008, which in the current economy is good. This is compared to the 5.3% increase from 2007 to 2008. Likewise, IT unemployment remains comparatively low.
http://itmanagement.earthweb.com/career/article.php/3782086/The+2009+IT+Salary+Guide.htm
Most technology workers are painfully aware that (human) multitasking on complex tasks simply doesn't work. This article discusses the recent cognitive science developments about the Age of Distraction.
http://www.nytimes.com/2009/05/05/science/05tier.html?_r=1
Despite numerous predictions of its imminent demise, IBM has been selling mainframe computers for 50 years. And they expect this to continue indefinitely. Here are some of the milestones along the way.
http://www.eweek.com/c/a/IT-Infrastructure/50-Years-of-IBM-Mainframe-Milestones-136541/
As much as those of us in the IT career might complain about how slowly things seem to improve, here's a reminder of 11 techniques that used to be the foundation of programming that thankfully we don't have to worry about any more.
http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=9132061
Learning isn’t (or shouldn’t be!) something that stops when you finish school. To have a successful career (and life) you need to continue learning. Here are some tips for gathering and retaining new knowledge.
http://blogs.techrepublic.com.com/10things/?p=725
While mostly oriented toward the psychology behind marketing and sales, this article summarizes 50 ways that we are persuaded about something. Many of these are applicable to designing good software applications and user interfaces.
http://www.moskalyuk.com/blog/yes-50-scientifically-proven-ways-to-be-persuasive/1624
Those who survive a layoff (and often multiple rounds of them) are certainly happy to still have a job, but it still takes a toll on them, often in terms of health, morale, and productivity.
Most people simply accept the salary offered by a potential employer. Here are some tips, including very informative videos, about how to politely and successfully negotiate a higher salary or some additional benefits.
http://www.getrichslowly.org/blog/2009/05/06/negotiating-your-salary-how-to-make-1000-a-minute/
Love the Firefox web browser, but find it a little bit slow or hogging too much memory? Here are some hacks to improve performance and flexibility by getting into the guts of the application.
http://blogs.techrepublic.com.com/10things/?p=719
Graphic designer Milton Glaser, the creator of the "I Love New York" logo, explains the things that have made the greatest impact on his life and how to work with others. These points are very insightful and inspirational.
http://www.miltonglaser.com/pages/milton/essays/es3.html
Since most software development work is done as part of a team, learning how to work together is a key skill for personal and organizational success. The author of the acclaimed book Teamwork Is An Individual Skill discusses the importance of personal responsibility when working on a team.
http://www.infoq.com/presentations/teamwork-an-individual-skill
A new survey shows that as wireless LANs become more pervasive, in many organizations 50% - 90% of wired Ethernet ports are unused. Furthermore, they predict that by 2011, 70% of new Ethernet ports will be wireless.
http://www.networkworld.com/news/2009/043009-wireless-ethernet-cable.html
As the telecom industry moves toward an all-IP core, there are concerns that there aren't enough engineers with IP skills and that telecom providers are not doing enough re-training of current employees.
http://telephonyonline.com/wireless/news/telecom-ip-training-0505/
The recent spate of divestures by large carriers of land access lines to "smaller" providers focused on rural and small market customers is actually creating a new series of big providers. What does this mean for the telecom business overall?
http://www.fiercetelecom.com/story/rural-telcos-bigger-and-better/2009-05-13
Risingware Exp+ is an integrated dual-pane file manager and web browser that includes a variety of utilities, as well. The file manager includes built-in compression tool that handles ZIP and RAR archives among others and a file content previewer. In addition, you can define directories as "favorites" just like in a web browser. Some of the utilities include "Fast Start Genie" for launching frequently used applications and ability to set Window transparency.
http://www.risingware.com/en/freeEdition.html
This handy tool allows you to create UML diagrams online and even to edit them from within your blog posts or other online editing tools like Google Docs. Currently, use case and class diagrams, including hierarchy, association, composition, inheritance, cardinality, etc., are supported, but other diagrams are coming soon. Furthermore, you can share your creations with others via a simple URL link.
Nimrod is a new programming language that "combines Lisp's power with Python's readability and C's performance." It is a statically typed, imperative language that supports most of the common programming styles (procedural, OOP, functional, etc.) and has compilers for Windows, Linux, and Mac OS X. Likewise, it provides bindings to a variety of toolkits, including GTK2, PRCE, MySQL, and many more.
If you use the wonderful Greasemonkey user-scripting engine (*see here for information about running Greasemonkey scripts in WebKit/Safari, Internet Explorer, and Opera) and use Google for search, this excellent style sheet will really improve your search experience. It includes display of screen shots of returned results, integration of data from your iGoogle page, support for Google Translate, ability to run your seach on other engines, and much more.
http://userscripts.org/scripts/show/31950
IETester
is an integrated web browser package that allows you to display pages with the
rendering and Javascript engines of IE 5.5, 6, 7, and
8 on both Windows XP and
http://www.my-debugbar.com/wiki/IETester/HomePage
Portable Python is a complete Python development environment that can be installed and run from portable devices like USB thumb drives. It has recently been updated to provide packages for versions 2.5, 2.6, and 3.0 and all of the packages can be run side-by-side on the same system, which is great for porting applications to a new version. Each of the packages includes many popular add-ons, including Django web framework, Stani's Python Editor (SPE), wxPython, and a variety of common libraries.
http://www.portablepython.com/
If you are game developer and you are leaving your job, how do you notify your coworkers? You write a game, of course! You can even play the Flash game yourself!
The UK-based National Museum of Computing recently opened a new exhibit on "vintage" PCs. Take a look at this gallery of some of the original boxes from the PC era.
http://content.techrepublic.com.com/2346-10877_11-300807.html
Technical people seem to have a warped
strange different sense of humor.
Here are 25 comic strips that show the lighter side of the development
world.
http://slashweb.org/programming/25-best-programmer-comics.html
While you're wasting your time (hopefully, not!) reading this newsletter, why not spend a few minutes reading about the greatest time-waster in history: Minesweeper. It's hard to believe that Minesweeper is almost 20 years old already!
http://www.techradar.com/news/gaming/the-most-successful-game-ever-a-history-of-minesweeper-596504
This site just cracks me up. In small micro-blog (think Twitter) posts, they author makes observations about his normal life. And if this isn't enough, you can always read the entire text of Moby Dick from a series of 12,849 (wow!) "tweets".
http://www.mylifeisaverage.com/
Who woulda thunk it?! A poem in the New Yorker that is “a collage-homage to Guy L. Steele and Eric S. Raymond. “ It’s sort of the Jargon File in verse.
http://www.newyorker.com/fiction/poetry/2009/05/11/090511po_poem_mchugh
If you enjoy word games like Scrabble, Spellathon, or Text Twist, you'll simply love DeepLeap. Game play is simple, but addicting. The game drops letter tiles one at a time and you try to make words from the available tiles. You get bonuses for using all of the available tiles and for the length and complexity of the word formed.