November 2012 Newsletter
The existence of forgetting has never been proved: we only know that some things do not come to our mind when we want them to. –Friedrich Nietzsche
Measuring programming progress by lines of code is like measuring aircraft building progress by weight. –Bill Gates
Nothing is so contagious as an example. We never do great good or evil without inciting more of the same in others. –Francois de La Rochefoucauld
This author argues that most of the emphasis on functional programming
being cleaner misses a key point:
Functional programming can better support the coming revolution in
concurrent/parallel programming, because application state is inherently
eliminated.
http://www.infoworld.com/d/application-development/functional-programming-step-backward-196990
This article collects almost two dozen beliefs about software development
that frequently raise the hackles of others.
You are certain to find some (maybe many) you agree with and others that
you'll grind your teeth over. Nevertheless,
they are useful fodder for developing your own personal philosophy of best
practices so that you can work toward improvement.
http://programmers.blogoverflow.com/2012/08/20-controversial-programming-opinions/
As we've noted before, as agile techniques become mainstream and mature,
some of their warts start to show. This
article provides a summary of some of the lessons learned from agile and offers
some suggestions for the "post-Scrum" world.
http://www.infoq.com/news/2012/09/moving-beyond-scrum
If you want to write better (and simpler!) code (and, hopefully, everyone
does), you would do well to take this article to heart. The author says that code only has two
roles: to do something (the algorithms)
and to coordinate the work of the pieces that do something (the
"glue" code). When you
understand (and apply!) this concept, it is very helpful in properly arranging
and organizing your code.
http://simpleprogrammer.com/2012/10/21/there-are-only-two-roles-of-code/
This article makes the excellent point that the goals of agile (or lean
or whatever!) methodologies aren't to follow the steps, but to improve your
organization. Specifically, the author
says that core concepts are to move organizations from controlling to learning
and emphasize people over process.
http://www.noop.nl/2012/10/i-dont-care-about-agile.html
Most people are aware the mobile is the new target for applications (in
fact, many organizations eschew traditional applications and go for mobile
first). This article discusses how
large tech companies
are struggling making the transition to mobile and how this is an
opportunity for mobile-focused startups.
At their annual symposium, Gartner outlined their anticipated top trends for 2013. Very similar to their predictions for last year and 2011, the main themes
are cloud computing, mobile technology, and "big data".
This article explores the real state of "big data" by business
and tries to separate some of the hype (myths?) from the facts. The basic premise of the article is that
while big data is increasing in value and importance, it still hasn't reached
the point of easily measuring or identifying that value.
http://blogs.hbr.org/cs/2012/10/big_data_hype_and_reality.html
Borrowing from T.S. Eliot's (or was it Pascal?!)
well-known quote "If I had more time, I would have written a shorter
letter," this author emphasizes that taking
your time, especially in designing your implementation (TDD anyone?) makes
your application intrinsically better, not to mention easier to maintain and
scale.
http://www.altdevblogaday.com/2012/07/02/the-less-the-code-the-better/
With the many recent high-profile security breaches, security testing is coming to the forefront of priority. This excellent overview gives you the background along with dozens of actual tests that you should run. The list of tests is also good reading for developers wanting to write secure applications.
http://www.softwaretestinghelp.com/penetration-testing-guide/
Who would ever believe that someone would say that defects are good? This author makes some good points about how bugs are opportunities to better understand our code and applications and improve them.
http://henrikwarne.com/2012/10/21/4-reasons-why-bugs-are-good-for-you/
At one time or another, you will probably be involved in a development project that seems to get “stuck” in testing. Here are some salient questions to determine the underlying reason for problems, which usually aren’t testing issues per se.
http://www.cio.com/article/14310/
If you don't use JavaScript
on a daily basis, it's easy for the syntax to get muddled (for me, at
least!). This brief reference covers
nearly all of the JavaScript concepts and constructs and provides a quick way
to get back on track.
http://css.dzone.com/articles/quick-overview-javascript
Have you ever wanted to write your own compiler? OK, well maybe not. But understanding how compilers work is
useful when trying to optimize your own code written in a high-level
language. This 3-part tutorial takes you
step-by-step through creating a simple compiler based on a subset of the C
language.
http://zserge.com/blog/cucu-part1.html
Linear algebra
is one of the most practical divisions (pun intended!) of math, especially for
programmers, and is key to game programming.
But the typical explanations of the subject are dry and often lack
relevance. This one is different: It's both mathematically sound and
understandable.
http://blog.stata.com/2011/03/03/understanding-matrices-intuitively-part-1/
http://blog.stata.com/2011/03/09/understanding-matrices-intuitively-part-2/
While certainly no list can be "one-size-fits-all" when
assessing programming skill, this chart provides a broad, comprehensive
treatment of the various skills and the level of maturity of each. It includes a 4-level (0-3) structure,
similar to those of organizational Capability
Maturity Model.
http://www.starling-software.com/employment/programmer-competency-matrix.html
Hash tables
are one of the ubiquitous data structures for modern programming. However, sometimes they are derided as
inefficient and poorly performing. This
article challenges some of the common myths about them.
http://hughewilliams.com/2012/10/01/five-myths-about-hash-tables/
The actual job of software architect seems to be diminishing. But it's not because software architecture is
not important, rather because architect is becoming a role for everyone
involved in the development process.
Accordingly, this list of 10 basic architecture principles is a great
reference for all developers.
http://gorban.org/post/32873465932/software-architecture-cheat-sheet
This is one of those on-going debates that you probably believe nothing new or interesting can be added to. Nevertheless, this essay gives some interesting perspectives on striking a balance between theory and practice when it comes to programmer education.
Taking the letters of the word DEVELOPER, this programmer provides a succinct, yet powerful and relevant creed for professionals in the web design and programming domains.
http://mikemainguy.blogspot.ie/2012/09/developers-creed.html
One of the memes currently making the rounds on the Internet is the idea that by the time we've reached a certain age, we should be beyond actually writing code. A lot of the discussion (more here and here) stems from this article by James Hague. Pundit Steven J. Vaugh-Nichols provides a passionate and well-reasoned rebuttal.
http://www.computerworld.com/s/article/9233159/Steven_J._Vaughan_Nichols_Grandpa_the_programmer
When looking for a new job, you are interviewing the potential employer as much as they are you. This succinct article gives some good pointers for how to assess the fit of a potential employer from some of the unspoken indicators in an interview.
http://www.theregister.co.uk/2012/11/05/how_to_do_it_interview/
Just like with real estate, when it comes to developer salaries, only three things matter: location, location, location. However, as this article explains, using the latest IT salary data from Robert Half, salary is not an absolute and when cost of living is factored in, the big cities may not have the brightest lights.
http://blogs.computerworld.com/it-careers/21165/hot-it-jobs-why-location-matters
This chart compares hourly development rates between New York, Los Angeles, Seattle, and San Francisco. Probably the most interesting (and startling!) tidbit is that based on hourly rate alone, the average annual salary is $209K. Presumably, the difference between reality is explained by the fact that freelancers don't work (at least not billable time!) 40 hours a week throughout the entire year.
https://grouptalent.com/blog/how-much-developers-make-per-city
As more and more applications move to a cloud-based (or hosted) model, some IT folks might consider making a jump to one of those providers. This article discusses what to expect if you are considering this option.
http://www.infoworld.com/d/cloud-computing/it-jobs-the-other-side-of-the-cloud-206505
Most of us have read more articles and books about time management than you can shake a stick at. This person offers an obvious, but typically overlooked, aspect of productivity that most improvements have more to do with willpower, self-control and focus than with organizing your time better.
http://www.kadavy.net/blog/posts/mind-management-intro/
This interesting analysis shows that roughly 1/3 of the UK workers in IT (which includes telecom) are managers.
http://cvmountain.com/2012/10/in-the-uk-we-have-1-manager-for-every-2-workers-in-it/
Netscape founder Marc Andreessen uses a counterintuitive productivity principle that he calls the Anti-Todo List. Instead of making a list of things you need to do, he writes down each thing (even the small ones!) that he does. He believes that this provides positive reinforcement for accomplishing things that keeps him going.
http://blog.idonethis.com/post/34170232603/marc-andreessens-productivity-trick-to-feeling
Did you know that one of the linchpins of the Internet, known as peering arrangements between various carriers, is mostly unregulated and handled without contracts?
This simply, but handy browser bookmarklet automatically scrolls the displayed web page at a user-defined rate, so that you easily read without having to click the mouse to scroll.
http://handsfread.herokuapp.com/
If you use Dropbox, Box.net, Skydrive, or really any online storage system, including FTP, Cloudfogger provides simple client-side encryption of your files before they are uploaded to the cloud. Cloudfogger's simplicity is in that it creates a "virtual" drive that acts as a front end (proxy) for your online storage server, which encrypts the file and then uploads it to the storage server.
http://www.cloudfogger.com/en/home/index.aspx
Codestre.am is a free Node.js-based tool that allows you to live stream and/or record a video (i.e., one that can be posted to Youtube or similar) of your Linux/Unix terminal session. It's perfect for demonstrating how to use a shell tool or to give a tutorial on any text-mode application or process.
While all that this site does is increment the natural numbers and show their factorizations, it does so in a remarkably beautiful and minimalistic way. You could easily waste a lot of time on this site. Or learn more about it here.
http://www.datapointed.net/visualizations/math/factorization/animated-diagrams/