Saturday, July 2, 2011

Software Development Posts of Interest - 2 July 2011

There have been numerous blog posts on software development that I have found to be well worth the time invested in reading them in recent weeks. In this post, I summarize and link to some of these. Topics include Oracle's Java 7 kick-off, Scala, Devops, multiple posts on free software development ebooks and tutorials, a post of best Java books, and ideas on how to improve programming skills.

Introducing Java 7 Webcast: Moving Java Forward

Oracle is hosting a live webcast to celebrate Java 7. The event, also known as Best Party of 2011: Introducing Java 7, is scheduled for Thursday, 7 July 2011, beginning at 9 am Pacific Time. According to the posted agenda, there will be an hour on "Introducing Java 7" followed by 1/2 hour each on Project Coin, on the Fork/Join Framework, and the New File System API. There is a 25-minute section scheduled under the title "A Renaissance VM: One Platform, Many Languages." The conclusion is a little over an hour for the section "Meet the Experts: Q&A and Panel Discussion."

Registration for this live webcast is free. In addition to the webcast, this "global introduction" to Java 7 is also taking place in three physical locations around the globe: Redwood Shores (hosted by Adam Messinger), São Paulo (hosted by Bruno Souza), and London (hosted by Ben Evans). The Twitter conversation will be at #java7.

Oracle is known for its marketing and has doing things like adding "i" to their products' names/versions for "Internet" and later "g" for grid. It is no coincidence, of course, that this Java 7 introduction takes place on 7/7 this year.

Top Five Free Java Ebooks

Although I was already aware of the availability of the five Java ebooks recommended in the post Top 5 Free Java Ebooks, it provides a nice collection of them with nice images and concise descriptions. The covered books are (in my order rather than the author's) The Java Tutorials, Thinking in Java (Third Edition), The Java Language Specification, Introduction to Programming Using Java (Sixth Edition), and Core Servlets and Java Server Pages (Second Edition). I happen to really like the last-listed book, but it is less generally applicable than the others. However, for someone writing servlets and JSPs, it is a valuable resource as is the Java EE 6 Tutorial.

There are other interesting "best of" posts on this blog. These include Top 8 Java People You Should Know (I wasn't one of them!), Top 20 Java Web Sites You Must Visit (I use several of the recommended sites regularly and admired the fact that itself was listed as the twentieth "must visit" site), and 10 Java Regular Expression Patterns You Should Know.

Fifteen Free E-books Every Web Developer Should Have

My only complaint about hammad's post 15 Free E-Books Every Developer Should Have is that its title should reference "Web Developer" rather than just "Developer" because all fifteen listed resources are oriented specifically at web development. The 15 listed free ebooks cover a wide variety of web development topics such as HTML5, beginning JavaScript, web site best practices, Ajax, PHP, and JQuery. This post seems to build upon the post Ten Free Ebooks Every Web Developer Should Have that I previously highlighted.

Scala in 5 Years

Nikita Ivanov's blog post Scala in 5 Years - My Prediction is one of the best blog posts of its type that I've ever read (its sustained high rating on DZone/JavaLobby confirms that I'm not the only one who thinks it is excellent). By "best ... of its type," I mean that this post was one of the best posts I have read of the type that predict a trendy language's framework. It is excellent because it is written by someone who knows the trendy language well, but at the same time understands the "bigger picture" of the business world and the environment in which that language is competing for attention.

I have no idea if Ivanov's numbers are correct (and he's probably only using them to illustrate the point with a rough idea than prescribing any exactness to them), but I think his overall prediction is reasonable and perhaps even probable. The reason I am so quick to agree with his assessment is that his explanations match my own experience. In fact, I'm probably best classified as one of those who has been mildly curious about Scala, but who has never really invested time or energy into it because Java and Groovy together satisfy my most urgent development needs and leave me with little that I think I need to remedy with a new language.

I don't care much for blog posts that are 100% positive on something and dismiss everything else (a subset of Ruby on Rails and even Scala posts have been notorious for this). I similarly don't care for the 100% negative posts that simply say something sucks without evidence or that stretch some really unimportant negative issues past how bad they really are. This Scala in 5 Years post is so impressive because it is written by someone who does love and know Scala, but is able to remain impartial enough to give a realistic assessment of that language's future given the environment in which it competes. As is the case with most of the best posts, there is significant value to be gained from reading some of the feedback comments on the post itself as well as on its DZone link.

The funny thing is that although the post about Scala in 5 Years might be thought to have the effect of discouraging one from learning Scala, especially if he or she already knows Java and Groovy, the effect has almost been the opposite for me. The remarkably refreshing nature of a post like this makes Scala's benefits and advantages seem less mythical and more realistic and that may be something worth looking at more closely.

Should C++ Be Your Next Language?

I previously wrote that PHP is my next language because of several advantages it offers in today's web development world. Mike James has written a post Why your next language better be C++. C++ won't be my "next language" because I did use it professionally for five years and so don't consider it a "new" language for me. That being stated, I also realize that I'd be a bit rusty to return to C++ after not using it all for nearly five years now.

What particularly interested me about James's post is persuasiveness of his arguments for why C++ is a valuable language to learn for the future. Although he did not convince me that C++ will necessarily be the "language of my choice" in the future, I do think he has compelling arguments for why C++ will be a highly prevalent language for years to come. I'm not convinced that C++ has "won the war" against C# just yet. I'm also not convinced that the future is quite as clear as James states, but it is a provocative statement:
So the future is clear: there will be JavaScript in the browser and C++ will rule the rest.

I try to not let disagreement with a post be confused in my own mind with not appreciating the substance and quality of that post. In the case of this post, I have mixed feelings about James's arguments (some agreements and some disagreements), but I found it to be an interesting post that made me think about programming languages differently than I have in recent months. If nothing else, it reaffirms to me that C++ is here to stay.


I've been struggling with the term "devops" recently. It's not that I don't understand its basic essence. As is the case with many "movements" in the software development industry, I see many observations that the "devops" movement cites as valid observations that are issues software development projects regularly face. Likewise, as is also the case with many "movements" in our industry, I can see how some of the recommendations and tactics collected as part of the movement do seem to make some sense. However, what I struggle with is what I have always struggled with in relation to other software development movements: it is difficult for me to get my mind or hands around a tangible approach that embodies the movement. The agile movement has taken years to attempt to develop this and even today suffers from contradictory opinions and folks who have stretched it too thin to where it means just about anything one wants it to mean.

Ted Dziuba's post Devops is a Poorly Executed Scam and Gareth Rushgrove's Devops Isn't A Methodology are two interesting reads for someone trying to get a handle on the devops movement. Both are well-written with the former being a little more strongly worded and the latter being more restrained. Both authors may be correct even though the latter post is in response to the former post and comes at it with a different view.

I must admit to some of the same misgivings about devops that Ted Dziuba outlines in his post. Gareth Rushgrove's post did not clear up some of my concerns and questions regarding where this movement can go and what it can do in terms of tangible steps to improve the developer/operations impedance mismatch, but it did validate that many of the "common sense" approaches that predate "devops" are still valid answers. For instance, Dziuba proposes that an obvious tactic to reduce the issue is to deploy on the same machines and operating systems one develops on. Rushgrove agrees with this in his post (as do I).

As long as the "devops" movement is about collecting and articulating these "common sense" ideas, there is hope for it. Just as agile has collected and articulated many "common sense" ideas most of us saw in action before it was a movement, "devops" can do the same thing. For me, much of agile's value and much of devops's potential value are parallel to the rise of design patterns. Patterns of design existed long before the seminal Design Patterns book, but what that book and the concept of "design patterns" did was to collect, organize, and articulate these best design practices.

I like significant portions of agile that are based on proven experience with software development. I am much less fond of the money side of it. It will be interesting to see if the devops movement moves that way. For now, I still have not made my mind up about devops. There is no better evidence of this than the fact that I have not yet created a Devops tag for my blog posts and have not yet devoted a post exclusively to the subject.

Ten Ways to Improve Your Programming Skills

Anders Ahlström's blog post might at first glance seem like just another blog post reiterating things that developers can do to improve their programming skills. In many ways, it does repeat the same advice as is contained on numerous other sites, but there are some interesting twists. Besides the fact that the author is apparently 15 years old, I really liked his tenth recommendation: "Don’t rush to StackOverflow. Think!" He also recommends "writing about coding on a blog, even if it is just for yourself" (something I definitely agree with).

I generally agree with all ten recommendations. However, I also found some of the comments on this post to be equally informative and thought-provoking. There are useful comments on this post both on the post itself (78 comments currently) as well as the Reddit reference (225 comments currently) to it. One of the comments makes a valid point that customers and employers don't pay developers specifically to learn new things and that there are times when a developer should go to or other forum to get an answer quickly for the customer or employer. Another comment points out that sometimes StackOverflow provides a more sophisticated solution more quickly than can be hacked together. This is a good point and, if used properly, can lead to learning as well. I believe the trick is to balance the two: don't neglect any thought altogether, but also don't waste time reinventing the wheel.

The comments on this post (both the original post and the Reddit reference) provided terms and definitions of terms that are interesting in the general software development world. These include Parkinson's Law of Triviality (AKA bike shedding or bicycle shedding), Wadler's Law (we spend our time disproportionately on what's arguably least important in software development), and rubber ducking (stating problems to oneself or to an inanimate object to make the solution clearer).

Because the post 10 Ways to Improve Your Programming Skills listed one of the ten ways for improvement as "Hang out at programming sites and read blogs," it is not too surprising that respondent comments asked (and answered) what blogs are recommended. Although I was hugely disappointed to not see my blog listed, listed blogs included some new to me such as Existential Type, Inside 1712B, Neopythonic, A Neighborhood of Infinity, Reginald Braithwaite's homoiconic, ScottGu's Blog, and The Daily WTF.

Periodic Table of the HTML5 Elements

Josh Duck's Periodic Table of the Elements is an aesthetically pleasing presentation of proposed HTML5 elements in a fashion that appeals to the typical geeky side of many developers.

Java Developer Most Useful Books

The post Java Developer Most Useful Books lists several well-known books for Java developers. Besides the sizable list of good books in the post itself, readers have left comments with other good books on Java development.

Fifteen Best Resources to Learn PHP

The post 15 Best Resources to Learn PHP lists several resources I have found useful as I have begun investigating PHP plus many others that look useful.


The posts cited here either reference other sources of information useful for developers or are thought-provoking in their own right.

1 comment:

Mike Bosch said...

Very informative post.