At the end of 2010, I decided it was time to buy a new laptop, specifically an Ubuntu laptop, to improve my Unix skills. I picked out a Pangolin laptop from System 76 with Ubuntu 10.10 “Maverick Meekrat” on it.
Moving from the Mac OS X and Windows XP paradigms to the Ubuntu paradigm is a bit jarring so far. My first annoyance has been installing the software I need on my new laptop. Ubuntu provides two GUIs for this, the Ubuntu Software Center and the Synaptic Package Manager. Synaptic is a developer-level GUI slapped onto the apt-get command line tool, and Ubuntu Software Center is clearly the snazzy way Canonical wants you to load new software.
But the stuff in their repositories is old! Sun Java is at 1.6.0_22 (latest is 23), Scala is at 2.7.7 (latest is 2.8.1), Eclipse is at 3.5.2 (latest is 3.6.1), git is at 1.7.1 (latest is 184.108.40.206). This bothers me. I want the latest stuff!
After a lot of searching, I discovered that some projects have accounts on launchpad.net. By adding the correct PPA URLs to the Other Repositories section of Software Sources, you could use both Synaptic and the Ubuntu Software Center to install the latest versions. Success!
Here are the PPA URLs I’ve found useful so far:
- Subversion http://ppa.launchpad.net/svn/ppa/ubuntu maverick main
- Git http://ppa.launchpad.net/git-core/ppa/ubuntu maverick main
- Mercurial http://ppa.launchpad.net/mercurial-ppa/releases/ubuntu maverick main
- OpenJDK http://ppa.launchpad.net/openjdk/ppa/ubuntu maverick main
I don’t know why Scala, Eclipse, Netbeans and Sun Java don’t have Launchpad.net accounts to enable the easy package installation and updating features of Synaptic and USC.
My other bugaboo also applies to the USC. It’s clearly going for the same sort of functionality you find in Apple’s Mac App Store and iOS Store. But what I’m really missing is user feedback. For example, I did a search on GMail Notifiers and found multiple choices. Which one do I want? And I look at the Games section and there are A TON of games that sound cool, but which ones are essential? I don’t want to waste time installing and trying out game after game searching for the ones that are top notch. This should be integrated!
The Passionate Programmer is actually a second edition book; the first edition was entitled My Job Went To India (And All I Got Was This Lousy Book): 52 Ways To Save Your Job. Big improvement already!
The Passionate Programmer’s subtitle is Creating A Remarkable Career in Software Development. Through 53 short chapters, Chad Fowler inspires readers to do better and go further in our careers. Chad was a jazz saxophonist before making a change to software and his book illustrates many connections between the two fields. One point that stuck with me is practicing. Musicians obviously have to practice a lot before they get on stage and perform. Chad says developers should practice as well, before getting on the “stage” of delivering for a customer. He recommends doing your own studying, such as learning regular expressions or APIs that you are unfamiliar with, to increase your chops. Open source project work is an excellent way to gain experience implementing features, studying the code of other contributors of the project, and getting feedback by having your contribution reviewed.
The book is divided into five parts: Choosing Your Market; Investing In Your Product; Executing; Marketing… Not Just For Suits; and Maintaining Your Edge. Choosing Your Market focuses on planning your career by taking a high level view of the landscape and positioning yourself for maximum benefit. Investing In Your Product gives advice on how to improve your skills. Executing talks about the daily grind and how to make work more productive and enjoyable. Marketing is pretty self explanatory, giving some great advice on communicating how great you are to others. Maintaining Your Edge tells you how to avoid becoming a one hit wonder.
One topic that resonated with me was Chapter 36: Being Present. Chad talked about his time as CTO of a software development center in Bangalore, India and his troubles being so far removed geographically from the rest of the management team. His performance review mentioned a lack of “presence”, which is pretty obvious problem when you have such a hard time communicating with your managers. He relates this to coders’ sometimes antisocial tendencies to hole up in the cubicle and get into “the zone” of programming. This is an issue for us at Blackstone sometimes, because of the distributed nature of the projects and client sites. Maintaining that presence in the community of Blackstone is difficult but very important for both management perceptions and being able to leverage teamwork to achieve great things.
A few points in this book tied in tightly with the direction I feel Blackstone’s Company Contribution evaluation has been heading. Chapter 38: Change The World advises “Have a mission. Make sure people know it.” Chapter 42: Remarkability talks about doing things significantly different than those around you to be remarkable, such as releasing open source software, writing books and articles, and speaking at conferences. It’s not enough in this field to show up to work on time, write code on schedule and fix bugs quickly. Keeping up with the technology wave is important, but the ultimate goal should be to get out in front of it and show everyone a new way to go.
In the acknowledgments, Chad Fowler admits a huge debt to Dave Thomas and Andy Hunt’s great 1999 book The Pragmatic Programmer, which kicked off their entire book line. Both books contain a lot of great tips wrapped in short chapters that I will come back to frequently. I consider both to be essential and valuable, providing quick inspiration to improve both software and my career.
Things on my project have quieted down a bit, so I’m trying to get done some of the nice touches that I don’t usually have time to do. Because my module is brand new, it’s completely doable to make the inline documentation really spiffy. I want to do all the stuff to make the Javadoc look just right.
One of those things is to do package javadoc. You used to do that with a package.html file, but as of Java 5 they want you to create a package-info.java file instead. You can read all about it at http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html
Because I use Eclipse, I figured there’d be some buried menu command to generate this stuff, but surprisingly there wasn’t. I did, however, find an Eclipse plugin called JAutodoc to do this for me.
Great! Except the plugin installation failed. The installation exception message mentioned a missing module, org.eclipse.team.cvs.ssh. Eclipse 3.6 Helios comes with the org.eclipse.team.cvs.ssh2 plugin, but for some reason they did not include org.eclipse.team.cvs.ssh.
I couldn’t find a site to download just that (54k) plugin jar file, but I did discover that Eclipse 3.5 Galileo did include it. So I moved that jar from my Galileo Eclipse installation to the Helios installation, retried the JAutodoc install, and everything works.
So if you want to be fussy about your Javadocs in Eclipse, check out JAutodoc, and if you have trouble installing it, this could be your solution!