Wednesday, December 31, 2008

Useful Online Java Developer Resources

Anthony Shorten's recent blog post Invaluable Technical Resources outlines three key categories of useful resources for developers wishing to solve a particular problem or for developers wanting to increase their knowledge. In this blog post, I'm going to list some of my favorite resources for both types of knowledge (solving a problem and learning something new).

I have found that the most useful tools and resources can often be different for the two different situations. In general, I prefer a powerful search engine like Google for finding the answer to a particular problem followed by the vendor manual if I cannot find the answer with the search engine (often the search engine will point to the manual). On the other hand, for learning new things (especially about things I don't know enough about to even effectively search for), a different set of sites is primarily useful.



Resources for A Particular Problem

When I am less interested in increasing my knowledge for knowledge's sake and just want to solve a current problem, Google is my best friend. This is especially true for strange error messages.


1. Google Search Engine

The Google search engine is so powerful and I have become so used to using it that it is difficult to remember how we used to do things before the Internet and even before Google. I remember being really happy with Infoseek in the early days of search engines, but I never imagined then the power that would be available with Google and other search engines. The Google search engine has been featured multiple times in movies and many people used "Google" as a verb now: "have you googled for that?"

I have become so used to finding at least something useful about a particular issue or problem when using the Google search engine that one of the most disheartening things I run into now is when a Google search returns the dreaded "Your search did not match any documents" message. This is most likely encountered when using something that is very new. In Anthony's post, he states that Google is an "underrated tool." I found this interesting because while most of the people I work with on daily basis seem to understand the power of Google search engine, you see people asking basic questions on forums that could have been more quickly and easily answered with a simple Google search.

It used to be that one had to go to many specific sites to search that site's content because the search engines could not see it. However, it seems today that most of the sites' have their content indexed on popular search engines and so using search engines is always my first step. I was very happy when Oracle Technology Network's content became Google-searchable. This meant that I could find useful resources on OTN even when I was not directly searching at that site.

With the Google search engine being so powerful and so useful, one might ask why we would ever need anything else? There are several reasons that include the fact that sometimes what you're looking for will get buried by other matching pages (too much volume to find a needle in a haystack), some sites still don't have their content readily searchable by the indexes, and sometimes you don't realize the terms use should be using for the search engine match.


2. Non-Google Search Engines

Because each search engine uses a different algorithm, I will sometimes try to use a search engine other than Google's if I have not found what I'm looking for with Google. My favorite alternative search engines are Yahoo!, Cuil, and Dogpile.


3. Related Forums

Many forums are automatically searched and indexed by the popular search engines and so this step may not be necessary. Having said that, there are some forums that don't seem to be searched or do not appear high on a search engine's results. In such cases, it may be worth the effort to directly search the related forum. For example, Sun provides several forums such as the New to Java forum and the Core API forums. Other examples include Spring Framework forums, JavaRanch, Flex Support Forums, Oracle Forums, and JavaWorld forums. Forums are especially useful when a search has not produced anything because one can always simply ask in the forum after search that forum. I'm also going to lump paid support in with this item. I typically don't involve support until I have tried to find the answer myself because it is often easier and quicker to find it via search engine than to make a call, explain a situation, and try to provide example code.


4. Blog-Specific Searches

While the general search engines described in my first two choices (Google and alternative search engines) will often cover blogs as well, there are situations in which a blog-specific search is recommended. This is especially the case when it is difficult to identify terms that specific enough to filter out massive search engine results. It is also the most efficient way to find answers that are most likely to be in a blog posting. While blogs can have the disadvantage of less peer and/or technical review than articles and books, they have the advantages of timeliness and of potential focus on the smallest of details. Because it is often these "smallest of details" that cause me trouble, blog postings often have the answers I am looking for. For blog searches, my first choice is BlogSearch.com.


5. Vendor Sites/Vendor Documentation

Why is vendor documentation fourth on my list of resources to use to find an answer to a question? Am I just unwilling to read the manual? I like to read vendor-supplied references for learning about new subjects, but it is often less efficient for me to use these resources to look up one little detail. More importantly, many of the issues that I am looking for help on are small enough or are corner cases that the documentation is not likely to cover.

Many of the forums listed in the previous item are actually part of the associated vendor's site. Also, there is a difference between a particular product's manual and more general articles or information on a vendor site. For example, Oracle provides both product-specific documentation and more general technical information, including articles on areas such as Java, .NET, and PHP. Another example is IBM, who has both product documentation and more general documentation.





UPDATE (1 January 2008): StackOverflow

This entire section on Stack Overflow has been added since the original post based on feedback comment (see below) from Alex Miller. When I wrote this original blog posting, I covered the sites and resources I personally use most frequently. However, Alex has reminded me of the many colleagues who also choose Stack Overflow as their first choice for solving a particular problem. I hope to make it a habit for me to check earlier in the process from now on.

There is much to like about Stack Overflow. Perhaps most important is that it is a collaborate site similar to Wikipedia but with a focus on software development questions and answers. The StackOverflow About page specifically points out all of the annoying things this site does not do that some other sites do. Also, even without having used it much yet, it seems likely to be useful when two of its primary contributors are the well-known software development bloggers Joel Spolsky and Jeff Atwood. Spolsky's Joel on Software blog and Atwood's Coding Horror blog are ranked #1 and #3 respectively on Jurgen Appelo's Top 100 Blogs for Developers (Q4 2008).






Resources for General Knowledge

I try not to make my only learning be that required to solve a particular problem. I like to supplement the learning that is done while solving a particular problem with learning some new ways of doing things. I especially like to read others' perspectives. It is amazing how many times the things I learn generally actually help me with specific problems and issues. The set of resources that I prefer for general introductory learning are different than those I prefer for researching a particular issue.


1. Technical Aggregation Sites

I like to spend a few minutes each day scanning headlines for interesting topics. If I see a particular topic mentioned repeatedly by different authors over a period of time, then I am more likely to invest some time in reading at least a little about that topic. I also look for articles covering specialized topics related to general topics that I am familiar with. Some of my favorite sites for doing this are DZone.com and Java.net, both of which provide daily updates on most weekdays. While Java.net provides Java-focused resources, DZone provides broad software development coverage and the two complement each other nicely. DZone also encapsulates JavaLobby, which is Java-focused. Another good example is TheServerSide.com.


2. Content Sites

For blogs and sites that don't provide enough content to justify regular visits, sites like DZone and Java.net are particularly useful for exposing their content. Some sites, however, provide enough of their own valuable content to justify direct monitoring of their new articles and blog entries. Examples of these that I watch at least weekly (because they don't update on a daily basis or because the updates are small enough in number to not miss some if I wait a few days) include JavaWorld, Oracle Technology Network, and developerWorks.


3. Wikipedia

Some of my colleagues prefer Wikipedia as their first-stop for learning something new. If you want a single location that typically has reasonably accurate and concise introductory information to a new topic, this is hard to beat. The links to additional resources and references from a Wikipedia entry can be as useful as the textual content of the entry itself.


4. Newsletters/Blog Feeds

A nice way to be exposed to topics and headlines you might not otherwise see is to subscribe to a favorite blog's feed and/or subscribe to a related newsletter. I have learned some things I did not know from previous subscriptions to things like Java Tech Tips and JavaRanch Journal.


5. Open Source Code

Another way to learn how to look at problems from different perspectives is to look at source code for open source projects. The JExamples site can be useful for finding specific code examples you might be interested in. Other similarly useful sites include Java Examples and Java Source Code Examples.



Conclusion

While there is a common, understandable complaint about things changing rapidly in the Java community and the software development community in general, we do have better tools and better access to resources than ever before. In fact, at least part of the increasing rate of change is probably due to our having such ready access to so much information. To increase our efficiency and effectiveness in development and to allow ourselves more time to do what we enjoy, selecting the best resources and using them appropriately is important, especially with so much data to wade through. In this blog posting, I have attempted to outline some of the steps that I have taken to try and improve the efficiency of my searches for answers and my search for new knowledge.


Additional Resource on Online Java Resources

Sun provides a listing of Online Resources for Java Programmers that may be of interest.

Tuesday, December 30, 2008

Best of 2008: A Software Development-Oriented Collection

The "Best of 2008" articles and blog postings are coming out every day now. With tomorrow being the final day of 2008, it seems like a good time to begin collecting some of these "Best of 2008" articles and blog entries here. Because more relevant articles or blog entries with "Best of 2008" are sure to come out today and tomorrow and possibly even early in 2009, I plan to update this posting at least a few times with new entries. Please feel free to add any that I have missed via feedback comment (must have a Google account).

I have already cited two of the "Best of" postings in my previous blog posting 2008: Year of the Java Persistence API because both Oracle Technology Network and JavaLobby featured an article focusing on the Java Persistence API (JPA) in their top ten. For completeness, I will include those the links to those two collections here again.

It is also worth pointing out that five of these lists are associated with five DZone zones: JavaLobby, EclipseZone, Architect Zone, Web Builder Zone, .NET Zone. For those of us who use NetBeans and feel somewhat left out in the just-mentioned list, there is also a NetBeans Zone and their is an article about the single (not top ten) most popular article on NetBeanZone in 2008.


JavaLobby's Top Ten Articles of 2008
Link: http://java.dzone.com/articles/javalobbys-top-10-articles-200
Summary: Articles cover topics such as Java Persistence API, Hibernate, Java tools and the effect of open source on tools, migration from Tomcat to GlassFish, and several more.

Best Article on NetBeans Zone in 2008
Link: http://netbeans.dzone.com/news/best-article-netbeans-zone-200
Summary: The most popular NetBeans Zone article of 2008 is From Pain to Gain: Swing and the Netbeans Platform in the Real World.

EclipseZone's Top 10 Articles of 2008
Link: http://netbeans.dzone.com/news/from-pain-gain-swing-and-netbe
Summary: These articles are obviously all Eclipse-focused and cover topics such as EclipseLink (another JPA-related article makes a top ten list!), Spring Framework and Spring IDE, release of Eclipse 3.4 (Ganymede), Mylyn, and several other topics.

Best of 2008: The Most Popular Tech Articles and How-Tos Published by OTN This Year
Link: http://blogs.oracle.com/otn/2008/12/best_of_2008_the_most_popular.html
Summary: This list includes several articles on specific Oracle product topics such as Oracle Database 11g, but also includes several articles that cover general topics that relate to Oracle and non-Oracle products. These latter topics include my article on Basic Java Persistence API Best Practices, Linux commands, using SQL with Linux and Ruby, and .NET.

[Architect Zone] The 2008 Top Ten - Looking Ahead to 2009
Link: http://architects.dzone.com/news/the-2008-top-ten-looking-ahead
Summary: Common themes and topics for the top ten Architect Zone articles included REST (REST != HTTP in addition to four other articles on web services.

A Year in Retrospect - Web Builder Zone's Top Ten for 2008
Link: http://css.dzone.com/news/a-year-in-retrospect-web-build
Summary: Topics in this top ten included jQuery, more on (Eclipse) Ganymede, Cascading Style Sheets (CSS), and PHP.

.NET Zone's Top 10 Articles of 2008
Link: http://dotnet.dzone.com/articles/net-zones-top-10-articles-2008
Summary: These articles are related to .NET, of course, but include specific focus on topics such as ASP.NET (multiple), jQuery again, LINQ, C#, and Visual Studio.

The 10 Most Popular Sanity Check Columns of 2008
Link: http://blogs.techrepublic.com.com/hiner/?p=902&tag=nl.e101
Summary: This list is in many ways more varied than those covered previously and covers topics such as Five Things that Suck about Working in IT, Ten Trends that Will Transform IT Over the Next Five Years, and Seven Hot Acronyms IT Pros are Talking About.

[Linux Magazine] Top Ten Software Development Articles of 2008
Link: http://www.linux-mag.com/id/7190
Summary: There's a lot of Linux coverage in the Linux Magazine top ten articles, of course, but other topics covered in relation to Linux include command-line literacy, new features of PostgreSQL 8.3, OpenSolaris, several articles on Ubuntu, and more.

Significant Software Development Developments of 2008
Link: http://marxsoftware.blogspot.com/2008/12/significant-software-development.html
Summary: My blog post of the top ten software development happenings from my perspective in 2008.

Pushing Pixels: The Best of 2008
Link: http://www.pushing-pixels.org/?p=1024
Summary: Kirill Grouchnikov outlines his top ten blog postings in terms of reader hits as well as his own personal top ten. Many of these posts are heavily focused on building user interfaces with Java including the well-read entry Sun Setting Down on the Core Swing (which has interesting feedback in addition to the interest post itself).

[InformationWorld] Top 10 Open Source Stories of 2008
Link: http://www.informationweek.com/news/software/open_source/showArticle.jhtml?articleID=212300206
Summary: Includes several stories related to big-name open source products and their vendors/sponsors such as Google Chrome and Google Android as well as articles on legally related topics such as SCO court decision and the enforcement of copyrights on open source software.

Top 10 Web Platforms of 2008
Link: http://www.readwriteweb.com/archives/top_10_web_platforms_of_2008.php
Summary: Adobe AIR comes in at #3 on this list that also includes iPhone SDK, Twitter API, Facebook Platform, and . The Top 100 Products of 2008 list includes this list as well as other top ten for 2008 lists at this site.

Not Your Typical Top Ten of 2008 Post
Link: http://haacked.com/archive/2008/12/30/not-your-typical-top-ten-of-2008-post.aspx
Summary: Phil Haack's listing of his own blog's most popular blog posts as well as his favorite blog posts by other bloggers. Some of the favorite topics highlighted here include CSS, jQuery, and the importance of routines.

Top on Agile Software Development (.com) in 2008
Link: http://agilesoftwaredevelopment.com/blog/artem/top-agile-software-development-com-2008
Summary: Features blog postings such as Can Unit Testing be a Waste?, A Story About the Definition of Done, and Seven Tips for Improving the Daily Standup Meeting.

My (Dustin's) Top Ten Blog Postings of 2008
I had thought about posting this as a separate blog posting, but decided to simply include it here with this collection of "Top Ten" blogs and articles. According to Google Analytics, here are the ten most popular blog postings from my blog for 2008 (only blog postings published with a 2008 date included in this list):

1. From JConsole to VisualVM (28 August 2008)
2. Flex 3 Versus Flex 2 (26 April 2008)
3. Flex Charts with Google Charts and Eastwood Charts (25 August 2008)
4. NetBeans 6.1: A JavaScript IDE (20 March 2008)
5. Barebones BlazeDS HTTP Service Example (9 May 2008)
6. Apache Commons ToStringBuilder (1 November 2008)
7. Flex and OpenLaszlo in NetBeans 6.1 Beta (17 April 2008)
8. Comparing Unix/Linux, PowerShell, and DOS Commands (22 March 2008)
9. Simple Remote JMX with GlassFish (19 May 2008)
10. The Java SE 6 Deque (6 October 2008)

There are multiple observations and conclusions that can be made from what appears in the top ten and from the other 174 postings I published in 2008 that did not make the list, but I'll focus on two here. An observation that I found to be interesting is that two 2007 blog postings (albeit posted late in the year) would have been in the top ten for 2008 hits had I allowed them to be counted: Placing Flex Error/Fault Information on the Clipboard (29 November 2007; would have been #5) and ASDoc: Javadoc for ActionScript (11 December 2007; would have been #8). The other obvious observation is that my most popular blog entries tended to be those with focus on details related to using Flex and to using general Java.



Conclusion

There are some take-aways from these top ten lists. Topics that were in multiple top ten lists included the Java Persistence API, Eclipse 3.4, Java tools (see also JavaWorld article Year in Review: The Java Tools Roundup), Linux, and open source in general.

While 2008 may have been the Year of the Rat, the International Year of the Potato, International Year of Languages, International Year of Sanitation, International Year of Planet Earth, International Year of Human Rights Learning, Year of the Frog, International Year of the Reef, and so forth, we in the software development community might also see it as the Year of the Java Persistence API, Year of Linux on the Desktop, and Year of several other obviously popular software development topics in 2008.




"Best of" and "Top Ten" Collections Added Since Original Post

UPDATE (31 December 2008):
* [CodeClimber/.NET] Best of 2008: 5 Most Popular Posts
* Top 75 Best Design Resources of 2008
* 2008 Most Popular Design Posts, Tutorials and Resources

UPDATE (1 January 2009):
* JavaWorld has added their top ten articles of 2008 based on page views. The top ten are displayed in the screen snapshot shown next and include two articles with heavy JPA focus. The top ten articles also include topics that were largely new to me in 2008 such as OSGi and COMET.

Monday, December 29, 2008

Passion: An Important Software Development Trait

I have blogged previously on the importance of confidence as a characteristic of a successful software developer. Another important characteristic that I have found to be indicative of a good software developer is passion. One could argue that anyone in any field does a better job when he or she is passionate about what he or she does. I don't argue with that and, in fact, agree with that. However, in talking with associates, friends, and family members in various careers, it seems to me that engineers in general and software engineers/programmers/developers specifically tend to be more passionate about what they do than many folks in other industries.

There are some other areas that have this similar high-level of passion across the industry: education comes to mind. However, it is difficult to think of any industry that is more prone than ours to have people go home for the day and continue doing at home on their own time the same general type of things they have just finished doing during the day. I'm not saying that we all love our day jobs; those can certainly be boring to us if we are not allowed to code or not allowed to do things we'd like to do. What I am saying is that many of us do work at a day job to make a living whether we really enjoy the job or not, but then many of us go home and work on at least remotely similar stuff for the fun of it. This is what I think generally distinguishes our industry from many (but not all) others.

Of course, not every software developer/engineer has the same high level of passion for what they do. While our industry has what I think is an above-average level of participants who do have such a passion for what they do that they spend inordinate amounts of time on those areas, I have known many good developers who really do treat their job as a 9-to-5 thing. Many of them do good work and are solid team members; very few of them, however, are ever considered the "best" or indispensable or are sought after regularly for their expertise.


Jeff Atwood on Programming Passion

Jeff Atwood's post Programming: Love it Or Leave It articulates many of my observations and thoughts on this subject. Atwood references a Joel Spolsky comment in a forum thread Thinking Of Leaving the Industry and adds his own statement:

"Joel implied that good programmers love programming so much they'd do it for no pay at all. I won't go quite that far, but I will note that the best programmers I've known have all had a lifelong passion for what they do. There's no way a minor economic blip would ever convince them they should do anything else. No way. No how." (Jeff Atwood, referencing Joel Spolsky).

I couldn't agree more with the above statement. I agree with both Atwood and Spolsky regarding the sentiment that "good programmers love programming so much they'd do it for no pay at all." I agree with Atwood that most of us probably wouldn't do our day job without monetary compensation. After all, most of us have to do something that earns monetary compensation to pay the mortgage, to purchase food and clothing, and even to splurge a little on some tech toy. Also, if we weren't being compensated for our day job, we'd be more likely to spend that same time working on our own programming project.

I also agree with Spolsky in the sense that many of us do program for no monetary compensation on our own time. This is the distinction between our industry and many others; many of us do want to do the same general type of work (programming) on our own time that we do on the boss's time. Unlike the aspiring actor or actress with a typical day job (such as being a waiter/waitress) that is far removed from what they really want do do, for most of us the day job is much, much closer to our dream job. At times, they can even be the same thing given the correct project, correct customer, correct management, and correct team.

So with all that stated, what about the developers who are not as passionate? Many can still be valuable contributors, but it is less likely that they'll distinguish themselves from their colleagues. Soon Hui's blog posting Programming is All About Passion does a nice job of articulating the natural advantages the highly passionate programmer has over those who just do it for a job.


Manifestations of Software Development Passion

Before going on, I wish to point out that, despite what I write next in this posting, software development passion can be manifest in several different ways. Going home and feverishly programming more, often in a different language or with a different framework, is only one manifestation of this developer passion. I have several colleagues who demonstrate their passion when they say to me things like, "As I was driving home last night, I realized that we need to do this ..." or "While I was in the shower today, I figured out how to solve this problem we've been fighting."

There are many other examples of the passionate software developer. I have worked with many good developers who may not show any obvious passion to outsiders, but it becomes evident as soon as one tries to get them to take on a management role or do a non-development task. They have an obvious passion and preference for developing software as opposed to "any other ordinary job." On the other hand, I have known a relatively small number of developers who could take it or leave it when it comes to software development. All else being equal, it is difficult for the latter person to be as effective at development as the other developers who strongly prefer development.


The Passionate Software Developer: First Example

I will use a friend of mine as an example of a highly passionate and not surprisingly highly successful software developer. Michael Martin is a well-respected software developer that almost instantly becomes one of the first choices for fellow developers to go when seeking answers to questions. He and I have collaborated on several projects, including on the Oracle Technology Network (OTN) article Visualize Your Oracle Database Data with JFreeChart. I use Michael as an example because he is one of the better developers I have worked with AND because the evidence of his passion is easily demonstrated. To see an example of Michael's passion, visit the December 2008 blog posts for Michael as well as his November and October postings. For fun and with little or no direct benefit to his day job, Michael has played with OpenSolaris and different flavors of Linux and recorded his observations. He did this and continues to do this for fun and over his holiday break!

There are many passionate software developers out there who never write a blog entry, never write an article, never write a book, and never speak at a conference, but spend as much time or more time as any of these authors or presenters learning and playing with technology. In any job, the person with passion for the work will have an advantage over the person who lacks passion for the work. I see this even in my own career; I believe that I do a better job at the things I enjoy than at the things I don't enjoy as much. The problem with lacking passion about the work in our industry is that so many of our colleagues do have this passion.


Additional Examples of the Passion in Software Development Industry

For additional evidence of the high degree of passion among many software developers, I'll cite a few anecdotal pieces of evidence:

* I have had more than one manager in my career who could not understand why I turned down a possible managerial position or position of greater responsibility. I don't normally admit this in technical forums where it is likely to lead to various catcalls and innuendos, but I did earn an MBA several years ago. I did learn several interesting and useful principles in that program, but I also realized that I prefer software development.

* I am not aware of an industry that has as many silly holy wars as ours. I think this is evidence both of our collective arrogance confidence and of the high degree of passion we possess. If one removes oneself from most of these software-oriented holy wars and tries to look at them with a little objectivity, it often becomes clear that they are really not a big deal. The long list of software development-oriented holy wars includes vi versus emacs, PC versus Mac, NetBeans versus Eclipse versus JDeveloper versus IntelliJ IDEA, static versus dynamic, Java versus Ruby versus Python versus PHP versus Scala versus Erlang versus Groovy versus JRuby, Flex versus OpenLaszlo versus Google Web Toolkit versus Struts versus JavaServer Faces versus Tapestry, Ant versus Maven, Java versus .NET, a plethora of issues surrounding coding standards and conventions such as curly brace placement or no curly brackets at all, Spring versus EJB3, Spring versus Guice, XML versus JSON, XML versus annotations, and the list goes on and one and on. We fight these (often silly) battles for several reasons including confidence issues, but also because we truly believe that our favorite is the best and we want to "help" others see that.

* The Open Source movement is another piece of evidence that I put forth to support my position that software developers have an unusually high degree of passion for their work on a per-person basis. The amount of open source software that has been started and even maintained by individuals who do not make a dime doing so is staggering. Even many of the open source projects in which developers do earn compensation, it is often less compensation than they'd get for the same work effort and accomplishment in other venues. I think the reasons for developers giving so much are wide and varied, but certainly the confidence I discussed previously (I can do this better than anything that already exists out there) and the passion I cover in this posting (I want to try this out to see if I can and to learn something) are key components.


Why Confidence + Passion is Desirable

While I have found that every highly successful software developer I have encountered is extremely confident, confidence itself does not always imply a great developer. This is partly due to the Dunning-Kruger Effect (also see here and here). This effect is documented in the article Unskilled and Unaware of It: How Difficulties in Recognizing One's Own Incompetence Lead to Inflated Self-Assessments. This article displays some insightful graphs comparing study participants' self-assessments against actual measured results in areas such as humor, logical reasoning, and grammar. There are many interesting observations from these studies cited in this article, but I have always found it particularly interesting that the least competent often overrated their own skill, the average performers estimated about right, and the top performers underrated their own skill.

It is obvious from these study results that confidence alone is not a sure indicator of the competencies of individuals. As I stated earlier, it has been proven to me repeatedly that confidence is a common characteristic of the most successful developers I have worked with. Unfortunately, I have worked with a few individuals who had as much hubris about their skills as anyone I know, but did not really have the skills to back up their arrogance.


I have observed that the most successful software developers I know possess passion for software development as well as confidence. This is not surprising because passion will lead to developers spending more time learning, more time thinking about what they're working on, and so forth. We're often better at doing the things we enjoy or, conversely, we do things more often because we're good at them. Like confidence, passion in a software developer can not only lead that software developer to put in extra time and/or effort, but it can also be an indicator that the software developer is a successful one. He or she particularly enjoys software development because he or she is good at it.


Why Shouldn't We Be Passionate About What We Do?

As Joel Spolsky pointed out in Thinking of Leaving the Industry, we really do have it pretty good in the software development industry. While the most highly compensated individuals with four-year degrees in some industries may be more highly compensated than the most highly compensated individuals in our industry, it seems to me that the "average" person in our industry starts at a higher salary than average counterparts with four-year degrees in other industries. Similarly, software development and IT is often cited as one of the best careers requiring only a bachelors degree. What tops it all off for me, however, is that I get to do what I love (or something related to what I love) AND be paid for it. The next time you hear someone complaining about a professional athlete being paid too much just to play a game they (or we) would play anyway, consider that the same might be said of us.

We might not get paid anywhere in the same league as these players and others outside of our industry might not be interested in doing what we're doing, but it is certainly true for most us that we are paid to do what we love. That is certainly not true of many industries where the only motivator is the compensation. I can only think of a handful of industries where many of its practitioners go home and willingly and freely continue the same types of tasks for their own satisfaction. For many software developers, this occupation allows us to get both monetary compensation and to do what we truly love at the same time. From my observations, this combination is more common among the engineering disciplines than in most other disciplines.


Conclusion

Because so many in our industry are passionate about what they do, a software developer has a better chance of being highly effective when he or she shares this passion. Perhaps even more importantly, we should all do what we love because we end up doing it for such large portions of our life. I am grateful that I am doing what I love to do and that I even get paid for some of it.


Related Blog Postings

There are several good blog postings that demonstrate the importance of passion in software development, the prevalence of passion in software development, and the advantages of being passionate about software development. These include Programming: Love It or Leave It (previously referenced), Programming is All About Passion (focuses on competitive advantages of being passionate about software development), Passion for Software Development: To Have or Have Not? (divides developers into three categories related to level of passion about software development), Passion - Do You Have It? And for What? (nice treatment of how "passion" can be misused or misapplied), and When Passion Becomes Dogma Is It Elitism? (looks at bad side effects of passion turning into dogma, but also considers some positive advancements due to dogmatic insistence).

UPDATE (31 December 2008): Another related resource that has since appeared is Are Programmer's Spoiled? The author's last couple of emphasized sentences summarize thoughts fairly similar to those proposed in this blog posting.

Saturday, December 27, 2008

Proposed New Java Language Features in ActionScript

In a recent blog post, I postulated that many individuals who are most vehemently in support of specific new features for the Java programming language probably owe at least a portion of this opinion to their experience with that feature in a different programming language. In this blog posting, I am going to look at some of the proposed new features and syntax for the Java programming language that are currently available in ActionScript 3.

I will not be looking at proposed features for Java SE 7 that are really beyond the language syntax itself, such as JMX 2 because these are often not as comparable between languages as is the syntax and language features.


The Proposed Java Language Features

There are several sources for identifying and learning more about the various proposed new features for Java SE 7. Alex Miller's comprehensive Java SE 7 coverage is not only a good place to start, but is also a good place to find details about the proposed features. He provides streamed Java 7 news via RSS at http://java7.tumblr.com/.

Other good sites for finding out about proposed Java SE 7 new language features include the Java.net poll results for the poll question about the most-missed features to be excluded from Java SE 7, results of whiteboard polling at Devoxx, Danny Coward's weblog, and Mark Reinhold's Blog.

From these sources, we can glean that some of the proposed new language features for future versions of Java (some have already been punted from SE 7) include:

* Closures
* JavaBean Property Support (AKA "first-class properties)
* Reified Generics
* Operator Overloading
* BigDecimal Operator
* Beans Binding (JSR 295)
* Switch Statement Support of Strings
* Enum Comparison Support
* Multiple Exception Capture
* Multi-line String Literals


ActionScript 3 and Java

It turns out that ActionScript 3 is significantly different than its ActionScript 2 predecessor. Besides gaining general Java-like concepts such as support for class-based objects, single-root object hierarchy, and static typing (ActionScript 2 was dynamically typed only), ActionScript 3 syntax appears to be largely based on Java syntax as well. This similarity can be easily seen in the article Comparing the Syntax of Java 5 and ActionScript 3. However, ActionScript has roots in ECMAScript and so has some similarities to JavaScript as well. We'll see how that ECMAScript heritage plays a role in providing some language features in ActionScript that are not in Java.

I will now look at some of the proposed changes to the Java programming language and compare those proposals to the current state of ActionScript.


Multi-line String Literals

Java currently does not support a single literal string overlapping multiple lines. A lengthy literal String in Java must either require a very long line or must be constructed with String concatenation or being built up through append calls on the StringBuilder or StringBuffer. ActionScript's String class supports similar operators and concatenation methods as the Java String class. However, ActionScript 3 also features a seemingly little-known approach for multi-line literal Strings. This is succinctly described in the blog posting Multi-line Strings in ActionScript 3. Note that the blog author (Doug McCune) associates this ActionScript feature with other ECMAScript implementations. An MXML example of a multi-line String is also shown in that blog posting, but I'm focusing on ActionScript features here (and the MXML case is more obvious anyway considering that MXML is an XML grammar).


/** Lengthy String that overlaps multiple lines. */
private const lengthyString:String = (
<![CDATA[
Here is a very long string that is so long that it cannot easily
be fit onto the same line in the source code. This example
demonstrates the ability to have a single String
overlap multiple lines in the source code. Note how even the white
space is retained.
]]> ).toString();


Just as some Java developers would like to see multi-line literal String support in a future version of Java, some ActionScript developers would like to see full-fledged multi-line literal String support in a future version of ActionScript as well. This is one of those features that would occasionally be convenient (especially for preparing logging messages), but which is not as big of a deal for me as it used to be as I have gotten used to acquiring large strings from external sources such as XML or the database.

Sven Efftinge demonstrates a hack in Java for supporting multi-line String literals. It is also worth noting that both Scala (since 2.1.7) and Groovy support multi-line String literals with three double quotes (Groovy also supports three single quotes for multi-line Strings with no GString expansion) and this is what has been proposed for ECMAScript 4 before the Harmony Effect.


Multiple Exception Capture

There are many times when the same exception handling should be done for two types of captured exceptions from the same try block, but that common exception handling is not appropriate for catching with a single high-level exception. In such cases, it would be nice to use some type of OR syntax to say handle an exception in a particular way for this exception type or for this exception type. It could look something like this (or could be comma-separated or even something totally different, but the concept is the same):


try
{
// some exceptional circumstance occurs
}
catch (FirstTypeException firstEx | SecondTypeException secondEx)
{
// handle these two exceptions in the same way
}


Neither Java nor ActionScript currently supports the multicatch concept. For additional details on ActionScript error handling, see Flex Error Handling: A Simple Example and Using try...catch...finally Statements.


Enum Comparison Support

Like Java before J2SE 5, ActionScript does not have an enum. Therefore, ActionScript obviously cannot have any type of enum comparison support. There have been several different recommendations for faux enums in ActionScript such as using ActionScript static initializers and using a static constructor, but I would like to see ActionScript get an enum as powerful as Java's. This is an example of where Java has something that I really, really like and would like to have in another language (ActionScript). Using the ActionScript fake enums reminds me of employing similar tactics (read hacks) in Java before J2SE 5.


Switch on Strings

This is popular in the Java development community and I admit that there are some times (especially with legacy code) in which it would be really nice to have. I generally don't need it as much as I used to thanks to the powerful Java enum just described, but I do find cases where it would be useful now and then. ActionScript switch statements do support switching on Strings as discussed in my previous blog entry Java and ActionScript: switch-case and Switching on Strings.


Beans Binding

Just as I miss Java's powerful enum in ActionScript, I similarly deeply miss ActionScript's data (beans) binding in Java. In fact, this was the feature that I was most disappointed to hear would not be in Java SE 7. There are alternatives (including the reference implementation for JSR 295) for Java provided by third-party products, but I really was hoping to see it as a standard part of the language. Data binding in Flex/ActionScript is extremely powerful and easy to use. It may be the most addicting feature of Flex and I know others familiar with Java and Flex have missed it in Java as well.


BigDecimal Operator and Operator Overloading

I must admit to missing the ability to overload operators in Java. When I was primarily a C++ developer, I did not use this feature often, but it occasionally was extremely helpful. I will admit to a certain guilty pleasure from wielding its power and can see how such power in the wrong hands can be dangerous. While several languages other than C++ support operator overloading, ActionScript is not one of them.

ActionScript does not have a BigDecimal equivalent, so the obviously useful BigDecimal-specific operator support is not something that can be found in ActionScript.


Reified Generics

Like enums, generics are another feature with Java since J2SE 5 that is not available in ActionScript. I would really like to see runtime generics support added to Java.


Property Support

ActionScript does support properties as a fundamental part of the language. The primary advantage of ActionScript's implementation of properties is that consumers of these can then reference them directly on the class reference as if they are data members of the class rather than as methods of the class. For example, code calling a property could like like this


outputTextArea.text = propertiesExample.someString;


instead of the more Java-like


outputTextArea.text = propertiesExample.getSomeString();


This is implemented in the class being called like this:

/** Variable must be defined with different name than set and get. */
private var _someString:String = "ActionScript properties!";

/**
* "get" method for readable portion of someString property.
*
* @return My String contents.
*/
public function get someString():String
{
return _someString;
}


This is very similar to just having normal Java-like get and set methods except that the calling code can be a little more concise and treat the property like its directly acting on an attribute/property rather than on a method. It feels like it is calling a public variable, but it is actually calling methods. The advantage is that the data member is still encapsulated and logic can be done as part of the get or set method invocation.

For additional details on proposals for Java to have similar support for properties, see Java Properties and Events, Property Support in Java, the Java Way, and Java 7 - Update on Properties. As other languages have proven, there are multiple ways to implement properties. The real question in the Java community seems to be whether properties should be added at all.


Closures

In the recent Java.net poll cited earlier regarding the feature already dropped from Java SE 7 that was most missed, the closures feature was the dominant first choice (nearly half of all votes). However, that is not the end of the story. Indeed, the Devoxx white board survey on closures showed an even split (41 votes in favor and 41 votes against) on whether closures are wanted or not. It seems that closures are by far the favorite feature of those wanting them, but that a significant portion of the Java community does not want them at all.

ActionScript 3 does have and uses closures and their benefits and downsides are recognized among ActionScript developers. The "Method Closures" section of the ActionScript 3 Overview demonstrates the code readability improvement from using closures.


Conclusion

It seems almost inevitable that if a developer uses more than one programming language, he or she will find facets of each language that he or she wishes was in the other language. That is certainly true of me when I was using C++ and Java at the same time, when I have used Java and Ruby at the same time, when I have used Java and ActionScript at the same time, and so forth. This observation also strengthens the argument for learning multiple programming languages.

Friday, December 26, 2008

Significant Software Development Developments of 2008

At about this time last year, I posted my personal perspective on the top ten software development happenings of 2007. This blog post will be a similar effort for the year 2008. I make no effort to highlight the overall most important happenings of 2008 in the software development world, but instead highlight the software development happenings of 2008 that have been most significant for me so far. In some cases, I will be stretching the concept of an individual occurrence by grouping together highly related events under a single category for my top ten.


10. Release of JavaFX 1.0 SDK (4 December 2008)

After being rather disappointed (I wasn't the only one) when first trying to generate a JavaFX Hello, World type example shortly after the 2007 JavaOne announcement and after not particularly liking the idea of the new syntax associated with JavaFX Script, I have not put significant effort into learning JavaFX since then. The 2008 JavaOne conference re-emphasized JavaFX, but it is the actual release of the JavaFX 1.0 SDK (early December 2008) that is the JavaFX event of the year.

This particular event is a little different from the others in this blog post because it is one that I have not directly been associated with. However, the majority of my work is in Java-based development and with the primary steward of Java (Sun) betting the farm on JavaFX, it certainly has potential to impact me in the future. That being said, I am not confident enough in its future to bet my house on it or even my career on it. I felt a little burned by the too-early release at 2007 JavaOne and will be more cautious in spending additional time on it. On the other hand, there are some good things being said about it and Sun has put considerable resources into it, so I am not ruling it out in the future either.

It is almost certain that 2009 JavaOne will be JavaFX-heavy as were the two previous editions of JavaOne. The more interesting editions of JavaOne will be in 2010 and 2011. By the time those events are held (especially 2011 JavaOne), we should all have a pretty good idea if JavaFX was worth the gamble or if JavaFX was too little too late and should never have had so much investment.

For now, though, the long-awaited release of JavaFX 1.0 SDK makes my top ten events of 2008 because of its potential and because of the impacts (both good and bad) it has on the rest of Java (especially Swing).


9. Second Edition of Effective Java (May 2008)

The second edition of this Java classic is updated to cover J2SE 5 and Java SE 6 concepts and even has some older items refreshed to reflect current state-of-the-art thinking in Java programming. The release of this second edition came seven years after the first edition and was released at 2008 JavaOne.


8. Consolidation and the Clash of the Titans (16 January 2008)

You don't need to wait until 2010 to see the remake of the 1981 movie The Clash of the Titans because we have our own real-world clash of the titans going on already. Oracle's long-rumored acquisition of BEA was somewhat obscured by the same-day Sun announcement of its acquisition of MySQL. It doesn't take an MBA degree to see that Sun's acquisition of a high-profile database product enables it to better challenge Oracle or that Oracle's acquisition of BEA and its application server and ESB products helps Oracle compete more successfully with Sun and others (IBM) in the enterprise Java world.

Other examples of consolidation include SpringSource's acquisition of G2One.


7. General Java SE 7 News (mid-December 2008)

It would have been a higher-ranking event in 2008 had Java SE 7 itself been released, but even getting new and more definitive information on what is expected to be in and not be included in Java SE 7 has been significant enough to justify making this list. We have still not seen the Java Specification Request (JSR) for the overarching Java SE 7 (though many JSRs exist for likely constituents that will make up the Java SE 7 advancements). The overall JSR is expected in early 2009 and Java SE 7 itself is expected to be released in early 2010. Although the release of Java SE 7 is still over a year away, the announcements of what won't be included in it (especially closures) has already been controversial.


6. Improvements for Flex Developers (December 2008)

2008 saw several improvements for Flex developers. One improvement, the availability of Flash Player 10 for 64-bit Linux (16 December 2008), is a benefit for OpenLaszlo as well (when the target runtime is Flash). Another significant improvement, the announcement and release of 1.0.0 Milestone 1 of the Spring BlazeDS Integration project (8 December 2008), also demonstrated the significance of Flex in the Java development world. It is not surprising that this was a big deal for me because the announcement and release of BlazeDS itself was #8 in my count-down last year.

I mentioned Flash Player 10 for 64-bit Linux above. In fact, the release of the Flash Player 10 itself for Windows, Linux, and Macintosh is a major event for Flex developers because Flash 10 has many new and exciting features for Flex developers to exploit.


5. JMX 2.0 News and Real Code (last half of 2008)

While Java SE 7 as a whole struggled a bit in 2008 (see item #7 above), the likely-to-be-included-in-Java-SE-7 JMX 2 (JSR 255) work was the subject of many positive announcements in 2008. Eamonn McManus's blog post Playing with the JMX 2.0 API (6 August 2008) was just one of several he posted on new ready-to-be-evaluated features of JMX 2. Other interesting entries related to JMX 2 posted by Eamonn included JMX Namespaces Now Available in Java SE 7 and a blog posting on the Event Service. Like the overall Java SE 7 itself, some features had to be dropped from the JMX 2.0 API as well. I also posted some blog entries regarding JMX 2: Querying in JMX 2.0 and Playing with JMX 2.0 Annotations.

Besides JSR 255, another significant JMX-related JSR likely to be included with Java SE 7 is the JMX Web Services Connector (JSR 262). I posted three blog entries on using the JMX Web Services Connector: A First Look at the JMX Web Services Connector, A Second Look at the JMX Web Services Connector, and A Third Look at the JMX Web Services Connector.


4. Developments in OpenLaszlo Runtimes Support (30 June 2008 and 20 December 2008)

One of the most attractive features of OpenLaszlo its ability to have source code compiled into varying target runtime formats. In 2008, OpenLaszlo 4.1 was announced and released. This was significant because this was the first release in which the DHTML runtime support was out of beta. OpenLaszlo 4.2 was just released a few days ago in time for the end of the year and in time to help earn this spot in my top ten. This version of OpenLaszlo is noteworthy for its support of the Flash 9 (SWF9) runtime. OpenLaszlo now supports SWF7, SWF8, SWF9 and DHTML. It was announced in 2008 that OpenLaszlo has been downloaded over one-half million times.


3. ECMAScript Harmony (August 2008)

Many of us who looked forward to a dramatically improved ECMAScript 4 were disappointed to here that the two major sides of the disagreement could not come to agreement on how to get to that point. Rather than having this impasse prevent further progress on ECMAScript, the two sides agreed to what has been coined ECMAScript Harmony. The positive news here is that some progress can be made for future implementations of ECMAScript (JavaScript, JScript, ActionScript, etc.) to come together. The disappointing part is that ECMAScript could have been so much more (witness ActionScript 3).

Either way, this is major news for the web development community. The major browsers have slowly been converging to support standard JavaScript/ECMAScript and DOM across browers and this may be one more step in that direction.


2. Flex 3, AIR 1.0 and Open Sourcing of Flex and AIR (25 February 2008 and )

In last year's assessment of the top ten most significant software development events of 2008 (again admittedly only applicable to my own perspective), the top event that I appreciated in 2007 was Adobe's announcing the open sourcing of Flex. In 2008, Flex 3 was released under an open source license at the same time that Adobe Integrated Runtime (AIR) 1.0 (25 February 2008) was released. An updated release of AIR, AIR 1.5 (Cosmo), was released this year as well (17 November 2008).

If the releases of Flex 3 and AIR 1.0 as open source products had not been enough to justify this high ranking, another factor to consider is that Adobe also announced the OpenScreen Project (1 May 2008). This project relaxes the previous constraints associated with the Flash Player such as removing license fees for future Flash Players and AIR runtimes on devices and opening many of the standards upon which the Flash Player is based.


1. Significant Updates to Java SE 6

While we did not get Java SE 7 in 2008 (not even an umbrella JSR), there were some really nice advances made in the Sun Java 6 SDK and JRE. These significant improvements made the minor releases associated with them more significant than what we usually associate with minor releases.

Of specific interest to me were Update 7 (VisualVM), Update 10 (Next Generation Plugin/Applet, Nimbus LNF, better deployment and performance, and more), and Update 11 (JavaFX released simultaneously).

VisualVM is a tool that I believe is underused by many Java developers who are using the Sun JVM. The other advancements mentioned above are long overdue in the Java client side.




Honorable Mention

The remainder of the developments listed here did not make my top ten for 2008, but carry enough significance to be worth a mention.


Silverlight 2.0 Released (October 2008)

At this point, JavaFX is trying to catch up with Flash and Silverlight, so it seems only fair that the release of Silverlight 2.0 at least earn honorable mention. Frankly, this would likely be in the top ten for the year if I used Silverlight at all. However, I focus on Flex and Java and so cannot rank Silverlight 2.0's release in my top ten.


Google Web Toolkit 1.5 Released (28 August 2008)

The release of Google Web Toolkit (GWT) 1.5 was significant because it addressed hundreds of bugs and requests and added J2SE 5 support.


Google Chrome (2 September 2008)

Google's release of its own web browser, Chrome, created quite a stir in the blogosphere. The long-term impact of this is yet to be determined, but I have been concerned since the announcement about potential detrimental effects on my favorite web browser, Firefox 3. Chrome could contribute to the declining market share of the still-dominant Microsoft Internet Explorer or could mostly siphon support from the non-IE browsers. While the announcement of Chrome was exciting and I have found it to be a useful browser with some desirable characteristics, there are still some questions about its long-term impact.


Microsoft Office Open XML (OOXML) Standardized (1 April 2008)

In last year's countdown, the rejection of OOXML was listed in the honorable mention section as a major event of 2007. With this in mind, it is only fitting that its subsequent acceptance as an ISO standard in 2008 would make this year's honorable mention.


⇒ Continually Improving Java IDEs

The year of 2008 saw significant improvements to the major Java IDEs. NetBeans 6.1 (28 April 2008), NetBeans 6.5 (19 November 2008), JDeveloper 11g (7 October 2008), Eclipse 3.4/Ganymede (25 June 2008), and IntelliJ IDEA 8.0 (November 2008) were all released in 2008 and all provide significant new functionality and support, making Java and related development easier than ever.


⇒ Dynamic Languages on the JVM

The acquisition of G2One by SpringSource mentioned earlier is evidence of the rising popularity of dynamic languages (such as Groovy) on the Java Virtual Machine. JRuby 1.1 was released on 5 April 2008 followed by several point releases later in the year: 1.1.1 (28 April 2008), 1.1.2 (27 May 2008), 1.1.3 (19 July 2008), 1.1.4 (28 August 2008), 1.1.5 (3 November 2008), 1.1.6 (17 December 2008).

Other common dynamic languages used on the JVM include Jython and Rhino. The JavaWorld article Year in Review: Java in 2008 - What Just Happened? looks at this in more detail.


⇒ Scala

Scala seems to be one of the big winners in 2008. It is particularly difficult to put a single event or date on Scala's popularity rising, but it seems one can hardly go a day without seeing multiple feedback comments on various blogs stating that Scala would handle whatever issue or problem was being discussed on that blog post with ease. There are also many IDEs and other tools adopting Scala and Scala has some well-known software developers in its camp. Scala will need a couple more good years like 2008 to move into the league of Java, C++, C#, and the other major league programming languages (in terms of users), but it certainly seems to have the momentum to do so right now.


⇒ Merger of Ruby Frameworks Merb and Ruby on Rails (23 December 2008)

UPDATE (19 January 2009): This item, the merger of Ruby-based web frameworks Ruby on Rails and Merb, has been added since the original post.

The announced merger of the two most significant Ruby-based web frameworks, Merb and Ruby on Rails, is certainly noteworthy, especially in the Ruby community. This merger in many ways is to the Ruby community what the Struts/WebWork merger was to the Java community, but arguably has an even larger impact on Ruby-based web development than that decision had on Java-based web development.


Conclusion

It is likely a rare event for two software developers to come up with the same list of most significant events in a given year. I don't expect anyone else's list to match mine, but I hope that this blog post will be a reminder of how much happens in one year and how much happened in particular in 2008.

This list also clearly shows my biases towards things affecting Rich Internet Applications in conjunction with Enterprise development using Java EE. Someone more familiar with the .NET technologies or with mobile/devices would likely have lists closely reflecting those areas of development.