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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
This interesting analysis shows that roughly 1/3 of the UK workers in IT (which includes telecom) are managers.
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.
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.
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.
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.