How can you not know Java?
I must be from outer space. In addition to all of the other ways I fail to connect with people (little interest in politics an no party association, no interest in sports, don’t play video games, no mechanical skills, no homes-n-gardens hobbies) I have managed to even isolate myself from all the programmers I work with. Not only do I not know my way around Windows all that well, but … and I’m half-afraid to admit it… I never learned Java.
Really. I don’t know a Java Bean from a JNI from a J2EE from a hole in the ground. I couldn’t sit down and write a functional Java program off the top of my head. I don’t know any standard libraries, and can’t tell you right now how to format a comma-separated list to a file. I don’t know the first thing about Ant, and barely remember using Make. I don’t know how to install a java program and I couldn’t set up my classpaths at gunpoint.
Oh, now, I put more emphasis on “know” than a lot of people do. I’ve used NetBeans development environment for a few months of an aborted Java programming misapplication. I’ve installed and played with a little of IntelliJ (Object Mentor License) and I did a few ‘hello world’ examples. I’ve read a little bit. I could write “Hello World” and could figure out how to do string processing and basic IO, and could probably make little changes in existing programs. I can read Java. That would be sufficient for a lot of people to put it on their resume as “mastery”, but not this old dad.
I have a few basic tests for “knowing” a language:
1) I understand articles written about the language.
2) I can sit down and write programs from scratch (without having to copy from an example), then compile it, and run it.
3) I know what the error messages mean 80% of the time.
4) I know enough of the standard libraries that I will spend less than 20% of my programming time looking in the documentation.
5) I can converse with people who know the language well.
6) I can think in the language.
C#: I’m getting a little closer now, but the .NET library is still largely new to me. I don’t “think in C#” yet.
Python: Unless I’m reading the effbot or tim-ly-yours postings, I feel that I know python in my bones. I think in python.
C++: I used to be right on all points in C and C++. I think I’m still pretty close in C. Maybe in C++ I’ve lost quite a bit.
Java: None of these. I do not know Java.
It turns out that the guys I work with are all experienced Java developers. You’ve no idea how much the Java experience has polluted their ability to speak about software design. It’s all beans and EJBs and RMI and IOC/DI and Swings and AWTs and JFC and JAINS and JDK J2SE and Jini and JNDI and JNI and JMI. Frankly, I have no idea what they’re talking about 80% of the time. I make them translate. I’ve found myself looking up terminology in Java, and then googling for a ruby article on the same subject. If it’s ruby I can finally understand the examples and the explanation (even though I have less than 3 days experience in Ruby — it’s that much more obvious). In java articles, I have to stick to the code (which is never complete enough) because the textual exposition is invariably written with the expectation that the reader is a dyed-in-the-wool Java pinhead.
My minimal experience with Java to date has taught me only one lasting lesson: it’s not worth your time. I might care more if it were an open source language — open standards, open participation, open licensing. As is, it’s less open than C# .NET, and that’s just sad. Not only is it unpleasant, it’s managed unpleasantly.
Now maybe I have found the one thing that Java is good for: giving programmers a common language and shared memory of pain. Sort of “one ring to bind them all” (pardon the slaughtered quotation). A shared history which I, of course, do not share.
I wish the shared experience had been smalltalk, or C++, or ruby, or python. Now I’m going to have to learn all this (unwanted) Java stuff just so we can carry on conversations. It’s kind of like a tee-totaller memorizing articles about wine-tasting so that they won’t feel left out at fancy parties. I don’t really desire the experience, but I need the vocab. Ah, well. Of such is life.



Oh Tim, I hear your pain. I don’t know Java but for different reasons. I’ve said this before but maybe we could get interested through back door to Java… G-R-O-O-V-Y. My origins are from basic web development tagging.
My understanding of conversational java is probably a little more, but talking without doing frustrates my colleagues even more. Since it is not my job description, I’m off the hook career wise. I’m different than you in that I want to learn Java but am often swept away into diddly web stuff thanks to my job description. It seems to me java is just a bigger mental map to retain and requires a narrowing of priorities in order to get over that initial learning curve. Let’s keep learning together…and I’ll try to keep your attitude out of the dumps. Deal?
Comment by George — 2005-December-30 @ 04:03
Hey!
Groovy really does look groovy! I think it’s going to be well worth learning! I just went through part of a pdf presentation on groovy, and I’m amazed at how much it is a part of the python/ruby world.
I can enjoy this. I don’t think I’ll mind doing many crazy java things this way.
Nice on you, George, for being persistant!
Comment by Tim — 2005-December-31 @ 07:01
Heh, you can tell I don’t know java. I spent a chunk of time setting up JAVA_HOME (ie. do you point at the lib dir? At the exe? At the directory above it? Where the heck is my java installed anyway) in order to launch groovysh.
Man. We need some kind of installer for java that doesn’t leave you guessing what environment variables you need. Whose brilliant idea is it to base your computer language’s basic operation on a bunch of environment variables?
Oh, for my project coworkers — I will be checking to see if groovy has basic language features.
Comment by Tim — 2006-January-1 @ 04:49
I found beansh. Nice. I think that a lot of my concerns are laid to rest. It works and I can use it to poke around in the Java language. What a nice thing to have. It’s not as nice as python/ruby, but it’s nice.
Comment by Tim — 2006-February-10 @ 03:02
Remedies are coming. I had two events affect my life recently. One is that I’ve discovered the rail system, so I have time to read almost every day. The other is that I went to a Java users group meeting and won a book.
Add these to the discovery of bsh (beansh) and my joining a company where everyone knows Java, and where a lot of work is done there. Add to these that said company is the originator of Fitnesse (the open-source wiki taking the world by storm). Said product being developed in …. JAVA.
Now I’m clearly on my way to a more complete experience of TDD/BDD/Agile, and Java is seeping into my pores now. I hope to soon be completing the items listed above, so that I can say that i KNOW java.
Actually, I suspect that a lot of people who “know” java don’t “KNOW” java in the fullness of my 6-item list above. But I will.
Comment by Tim — 2006-February-15 @ 11:44
Well, now I’ve spent some time pairing with people who know Java, and even on Java projects. Mind you, I don’t know much about the libraries or enterprise whatsits, I’ve never written a complete program, and I don’t know any GUI or web frameworks. But I have been elbow deep in basic Java programming. That’s better, though I still don’t “Know Java” by the above standards.
Comment by Tim — 2006-October-16 @ 11:06