In 2002 I decided to learn Java in my spare time, and I have found the Java world to be huge and overwhelming. This page is my collection of notes of my learning process.
Intro Books
A co-worker suggested [Thinking in Java] as a good intro book. I took a class from the Boston IEEE, which used [Java in a Nutshell] which was pretty dense, but worked in tandem with the lecture.
I got a copy of [Java Garage] for my teenage step-son, who is interested in animation, graphics and such (though I don't think he ever opened it).
Editorial
After several years of fiddling around with Java, I have found the language very hard to learn and I have come to the conclusion that I don't like it much. I remember Larry Wall saying that the usefulness of a computer language is inversely proportional to the number of theoretical points being made, and I think that represents a lot of what is wrong with Java.
The language itself is very low-level, like a simplified version of C with a couple of OO constructs. But in ataining this intellectual purity, programmer efficiency and concision has been lost. In order to accomplish anything a huge range of objects and classes have to be used. And these have to be slowly mashed together into extremely complicated, cumbersome constructs. In short a programmer has to jump through all kinds of hoops to express some simple action.
Now after over a decade of programming in Perl, a language which always aimed at programmer efficiency (though it may have gone too far), I have switched to learning JavaScript which is much easier to program once you get past a bunch of basics.
Swing
http://www.swingwiki.org/
http://today.java.net/pub/a/today/2003/10/24/swing.html
Logging
Back in the day, I used
[Fred Fish's DBUG library]. So, how do you do things like that in Java?
Some other articles on loggers, often comparing/critiquing some of the above: http://www.ingrid.org/jajakarta/log4j/jakarta-log4j-1.1.3/docs/critique.html http://builder.com.com/5100-22-1046694.html https://www.qos.ch/ac2001/F11-200.html http://www.qos.ch/logging/thinkAgain.jsp
Getopt
OK, what's the deal? I know Java isn't usually called from the command line, but I am shocked that a good command line parser is not standard. There's
[Jakarta Commons CLI] or
http://jargs.sourceforge.net/ or
http://www.urbanophile.com/arenn/hacking/download.html
Games
I know I am not unique in having a teenage fantasy about writing games. It never came to pass (Configuration Management is a long way from gaming), but, since I have no present uses for Java at work, I need something to work on to build up my skills. Why not write a game? Anyway, my step-son may find me slightly less uncool if I am writing a game.
I started reading [Developing Games in Java] but was not quite able to get into it. I recently discovered [Killer Game Programming in Java], which I am liking much more.
One of my favorite games in my Apple ][ days was
SunDog. I discovered that one of the original authors (
[Bruce Webster]) was starting a project to rewrite
SunDog in Java:
[SunDog Resurrection]. Sadly, Bruce has been nowhere to be seen...
Puzzles and Problems
Any time you're learning a new language, you frequently bump into situations where you don't know how to do
X.
- How do I draw PNG images with a transparent background? I have some images, which have transparent backgrounds on a web page, but when I draw them onto a Graphics2d object, they end up sitting in a pink square. GIFs work, but I don't want to use that format. Solution: the PNGs were subtly mangled. If I load the into Gimp and save them, they work right. I''m not quite sure what Gimp did, the only differences in "identify -verbose" output was the background color was changed from white to #000000 and a Gamma setting was added.
Other things
http://freemind.sourceforge.net/wiki/index.php/Main_Page