Thursday, September 20, 2007

Tail Chasing

I hope that I am not the only one with this problem, but I often find myself trying too many different things. By "things" I of course mean technologies. Things like Wicket, Grails, jQuery, and Silverlight. So many cool things to learn, and only so many hours in the day. It is enough to make my head spin.

I have been trying to come up with a strategy that will allow me to learn more, but with little success. I toyed with the idea of quitting my job to maximize my learning time, but my wife reminded me that we still need to pay the bills. With that plan scrapped I thought that maybe I could get rid of my wife, thus reducing the bills that need to get paid. That wasn't a great idea either for various reasons, including the fact that I can't take care of myself.

So what's a tech junkie to do?

This has led to some deep thinking about the state of our craft. After some thought I have summarized it as "Tail Chasing". Let me see if I can explain.

Let's say that you are a developer, and you have been spending the past year or so really getting to know a given technology. Now you are being told that the technology you are using is inferior to this "other" technology. You take a look and realize that it might be best to switch. A year later you finally have a good understanding of the tool, and use it with great skill. Then someone tells you about this "other" technology.

How many of us built our own MVC frameworks only to move to Struts, then maybe on to Spring MVC. Sure, there are some improvements made in each technological step, but since you are spending most of your time really getting to know a product you often spend little time getting the most out of it. This is compounded by the fact that you often use several of these products at the same time, adding to what you need to learn.

So what is a dog to do? Although you are moving forward, you never quite catch the tail. Should you just stop moving forward, or run faster or slower?

11 comments:

Anonymous said...

Hi , I don't know whether it is the right place to ask this question or not, i am getting some error while compiling gwt 1.4.60 release from source. Using windows machine.

gwtc:
[mkdir] Created dir: C:\xyz\trunk\build\out\tools\benchmark
-viewer\www
[java] Analyzing source in module 'com.google.gwt.junit.viewer.ReportViewer
'
[java] [ERROR] Errors in 'jar:file:/C:/xyz/trunk/build/
lib/gwt-dev-linux.jar!/com/google/gwt/dev/jjs/intrinsic/com/google/gwt/lang/Arra
y.java'
[java] [ERROR] Line 24: The public type Array must be defined in its
own file
....
....
...
....

[java] Exception in thread "main" java.lang.RuntimeException: com.google.gw
.core.ext.typeinfo.NotFoundException: java.lang.Object
[java] at com.google.gwt.dev.util.Util.invokeInaccessableMethod(Util.ja
a:355)
[java] at com.google.gwt.dev.jdt.TypeOracleBuilder.build(TypeOracleBuil
er.java:556)


Can anyone help please.

Thanks in advance

JK said...

Hi Hanson,

Yes I am also tired of it. It has become a practice of moving from one technology to another. But we got to spend at least a year of experience on a technology to make full use of it. This kind of practice will only affect the productivity. Have you found any standard way or practice to adapt/learn new technologies? It is worth sharing your answer in this million dollar Question :)

Robert Hanson said...

Rennie, I would try asking your question on the dev forum. This problem doesn't sound familiar to me.

http://groups.google.com/group/Google-Web-Toolkit

Robert Hanson said...

JK,

I don't think that I am tired of it because I love learning this stuff, but I do often feel overwhelmed.

As far as standard practice on learning new tech, I don't really have a system. I guess I just take the brute force approach and struggle through it until I understand the basics.

What would make it a lot easier is if there were free or ad supported video-casts on how to use all of these different technologies.

There are very few that I am aware of, and actually the only one that comes to mind is a video podcast on using Photoshop.

Anonymous said...

Interesting questions, Robert. I responded here: http://www.mooreds.com/wordpress/archives/000438

I tried to make a link, but ironically, couldn't be bothered to learn how to create a blogger account.

Anonymous said...

I don't think you are asking the right question. You don't learn technologies just for the sake of it, you learn those whose cost benefit ratio warrants it.

That's true, even for a "tech junkie"; it's just the gratification a "tech junkie" feels is factored into the benefit side of the equation.

Take, for example, the Dojo versus GWT discussion we had last week. For you, there were a lot of extra benefits in investing the time to become a GWT expert.

I, on the other hand, just wanted an Ajax toolkit that did what I wanted, and had a small learning curve. Dojo was ideal for that. My cost-benefit ratio was different than yours.

New technologies succeed because they add sufficient benefits. It you don't know that technology, however, they also add costs, and, depending on your situation, those costs dominate. The trick, of course, is learning the technologies well enough to figure out the cost benifit ratio for your problem.

For open source technologies, especially, you need to actually work with them for a while to understand that. The reason is, most open source technologies are applications, not products.

The difference between an application and a product is that you don't need the developers help to start using a product.

Open source technologies either have too little documentation, or a poorly written reference manual or user guide hundreds of pages long. You need to become an expert just to do simple things with it.

That is the problem I am trying to correct with my book "Open Source Web Development on Windows" I just started working on at there.thruhere.net.

The information in each chapter will provide you with just enough information to get you "over the hump" with a particular technology, so you can start determining what benefits and cost that technology brings to your goals. (When I finish writing it, that is. It is mostly a collection of notes right now)

I don't know any of those technologies at the level you know, say, GWT. On the other hand, given a problem, I have a pretty good idea of what technologies are out there that can be useful, and a rough idea of their costs and benefits. I can then go and read or experiment more to apply them to whatever problem I am trying to answer.

If I need more expertise than I can reasonably gain in the time involved, I would ask experts, either in a forum, chat room, or say, by emailing you. I expect if you ran into the same problem with, say, JSR-170 or Alfresco, you would email me.(Or perhaps not, I am still waiting for the email from last week)

The thing is, our profession isn't about heroes, its about producing results, which you can do a lot more efficiently by not trying to do everything yourself.

I work a lot with Indian companies and outsourced resources. One thing I hear a lot of, is that "it is too difficult, we won't do it that way. "

Thats not because they are less smart than me, in my experience, they are very sharp.

It is just that they have reasoned that it isn't worth the time and energy for them to learn a new technology to achieve what they need to do. Over the years, I have learned that they have usually been right.

So, in a sense, you ARE "chasing your tail". But thats only because if you haven't a direction for which you are learning a technology, any direction, including your own tail, is as good as any other.

Robert Hanson said...

Randy, looks like your site (there.thruhere.net) is down. I'll have to take a look later. Your book sounds like an interesting project.

Anonymous said...

It is back up again. Don't expect too much yet, I am just starting out. It is going to take a long time, but hopefully, I will have something useful in about a year or so.

I am in the process of updating/writing the chapters to have the open source (in this case, I am using open source to mean free for commercial use, which is not exactly legitimate in a strict sense, but it is what everyone means in the business world) projects to work with Vista Ultimate 64 bit (Vista is about the only thing you can get to work on a new computer these days; Microsoft having bullied all the manufacturers into writing only Vista compatible drivers for their new machines.)


I originally wrote the chapters in Docbook with a libxslt processor using the XMLMind editor. Docbook is this incredibly sophisticated format that turns out to be practically useless in the real world.

On the other hand, Drupal (with the TinyMCE/Ajax plugin and the book module) turns out to be the absolutely perfect environment for writing books. If you need Docbook, you can use Drupal's Docbook export module. If you have to do something that isn't in one of the hundreds of Drupal modules available, the book "Pro Drupal" gives you all the info you need to write your own module. Unfortunately, Docbook doesn't import into Drupal well.

The only problem right now with Drupal is that Drupal is restricted to MySQL as the backend database, though there are some modules that work with Postgres (a really under appreciated database) In the next Version (6) DB2 and Oracle will also be available.

I am trying for a cross between Wikipedia and an O'Reilly "Nutshell" book, something that people can use to get a feel for whats out there and how and when to use it. More importantly, all these are running on my personal machines, so interaction issues are dealt with.

The idea behind the book is that, given a new computer, running nothing but Windows Vista Ultimate 64 bit, you will have a guide to setting up a complete enterprise development/production environment, and enough "quick starts" to get productive fast. All without paying a cent for software.

You see, for most Open source projects, there are two major problems, documentation, and Windows based instructions. I am hoping to fill that gap.

The idea is not to cover everything (I couldn't) but just highlight the ones I think are worth knowing about. I don't discuss alternatives or even all the different options, people will read the book to get productive, not knowledgeable.

Right now, the following is the environment I have currently running on my machines, and that I am trying to explain how to set up and work with.

OS is Vista Ultimate, 64 bit (Yeah, its Windows, but thats what enterprises like. I prefer Centos 5 Linux myself). I am just using the Vista Firewall (I will use Comodo 3 when it is released) and NOD32 for the antivirus, etc.)

For Java, I have Sun 6 (32 and 64 bit), IBM J9, and BEA JRockit. Bea's and IBM's products are actually superior to Suns in some ways, but few people use them.

I also have the full set of Microsoft Visual Studio "Orca" Express languages (C#/C++, Basic, and Web) Microsoft is making a credible effort at it's version of Open Source, and I need to include them, their Visual Studio C++ compiler is used by many open source projects and you can do an amazing amount of work with them, somewhat surprising for a "free version of their Visual Studio base.

I also cover PHP and Ruby/Rails. Ruby/Rails is not as impressive as the hype makes it out to be, and PHP is far more impressive than it seems.

At the database layer, I have IBM's DB2 Express, Oracle's 10g express, SQLServer 2005 Express, Postgres and MySQL. I just cover the basic tasks (including some graph stuff) with Cross referencing how to do those tasks in each DBMS).

Everything is done in an Eclipse environment using free plugins. And yes, I have MyEclipse. )

For application servers, I am covering JBoss (Portal), Liferay, Geronimo, Glassfish, Tomcat, Mongrel, and, Apache httpd. (plus addons like Drupal and Alfresco)

The Web 2.0 frameworks covered are GWT, Dojo, JQuery, and Jester. THe only MVC framework I cover are the "Faces" (MyFaces, IceFaces, RichFaces and JavaServer Faces).

And, yes, I know of the others, Like Struts/Struts 2/Tapestry, etc. If you have to pick one MVC framework to discusss, Faces is probably the best choice.

I cover using Subversion for the SCM, and Trac and Redmine for the issue trackers/project management tools. The only build tools I cover are Ant and Maven.

For architecture, I cover the Papyrus UML eclipse plugin and the Eclipse Process Framework.

I am also covering the "big" frameworks, like Spring, OSGI and Hibernate and smaller ones, like ImageMagick and libxslt for windows.

Anonymous said...

Hi Robert,
I just want you to know you are not alone with the "tail chasing" problem. I'm all over the map myself trying to keep up with the latest advances.

It's impossible to find enough time to keep up with everything. One poster here said we need to focus.

I do have the focus of my day job ( C, Javascript, Perl), but outside of that I want to know all about the java plaform (Java, JVM, Jruby, Groovy, Scala, Netbeans, Eclipse, Android, Dalvik) and I even try to keep an eye on what is going on in the .Net camp.

It just goes with the territory, and so I dabble a lot. And I'm keeping my wife. :-)

- Greg Strockbine

Robert Hanson said...

Greg,

> I do have the focus of my day job ( ...Perl)

JAPH! I don't do too much Perl anymore, but at one time I was one of the devout faithful. I can still remember when I used to scoff at Java :)

> and so I dabble a lot

Ahh yes, me too, and I enjoy doing it. I have a lot of the same tech items on my dabble list. Lately though I have been focusing a bit more on architecture, design patters, and such.

> It just goes with the territory

Yup. I can't really complain though, I enjoy it most of the time.

Anonymous said...
This comment has been removed by a blog administrator.