I was pretty heavy into Java back in the day but I have never heard of JWT, and if I did then I completely ignored it. Swing was and is amazing. Intellij IDEA is built in Swing.
I kept downloading and playing with Netbeans up until 3.5.1. As soon as I tried that version I started building an app with it and never stopped. It was definitely a killer app moment. Nearly twenty years later I'm refreshing the app for a new release. I kept trying to use eclipse over the years but never understood why it was even a thing compared to Netbeans.
Yeah, 3.5.1 was crazy slow to start up. I think this lasted until 5.5, which is where I left off for a while. I recently picked up with the latest version which is nice.
Yeah. The latest versions of NetBeans are quite nice to use. After using IntelliJ for a while, I've gotten really used to having a separate window for each project. It is hard to switch back to the NetBeans model of one window with all of the projects. If I could change that one thing about NetBeans, that would be it.
(I know, it's open source.... I shouldn't complain, I should contribute...)
The desktop is not dead - for serious computing it is sill essential.
Python and Qt provides write-once-run-anywhaer and a tottally native user experiance. If you want to make native binary executables, try C++ and Qt or for completely free, there is Lazarus.
Thanks for sharing about QT. I have long been aware of QT's presence, but never took the dive into it. Probably because it overlapped with Swing's wheel-house to much.
This is a timely comment, as I'm currently working on later articles in this series and am sorting out the use-cases for desktop development in a post-HTML5 world. The main requirement that would cause me to target desktop, as opposed to web, is if my app needs to work with local files in some way. Performance is becoming less of a consideration as time goes on. What are some examples of "serious computing" that you think make desktop development essential?
That's a good point. QT is a lightweight toolkit just like Swing. I think that the term "native" with respect to UIs can mean different things to different people. Some people may just use the term to mean that the UI toolkit is compiled to native, usually from C or C++, implying that it is "fast". QT is "native" in this sense. Personally I think it is more useful to use your definition though, which I assume to be that "native" means that it uses the actual native widgets of the platform. QT is most definitely not "native" in this sense.
Mar 5, 2022·edited Mar 5, 2022Liked by Steve Hannah
I agree that Java did not make much inroad on the desktop, probably because we did not see any killer app. However, I did see and use one that demonstrated Java prowess. It is the flagship desktop trading app from tdAmeritrade (orginally, thinkOrSwim) - No, I have no financial tie with them. I started with the app in ~2008 on a Linux desktop, because that was what I had. Other than using a web browser, most trading houses only offered Windows or Mac versions. In any case, this thing is impressive. If I didn't tell you, no one would think it's a Java app running on Linux. It may not be cruise missile real-time, but I am not sure what else one would want from a trading app. It's got all the charts and prices on multiple panels and screens. And, I just looked. It is running on OpenJDK 11, on all 3 major platforms today. Have a look, if you are a Java fan: https://www.tdameritrade.com/tools-and-platforms/thinkorswim/desktop/download.html
Thanks for sharing. I wasn't into the stock market at all so I never actually saw this app in action. I do like to hear about Java apps in the wild. I'd be interested to know the story behind this app. E.g. Why they chose Java in 2008. A guess is that it relates to the banking industry being big on Java - security being more important than "trendiness".
So, I was doing C/C++ development w/ an OODB when JDK 1.0.0 was released. At the time was using Borland's C++ Builder and Metrowerks' CodeWarrior tools. First JDK on classic MacOS (8 I think) I used was JDK 1.0.2. Eventually Borland released JBuilder and CodeWarrior included Java tools. I remember Borland created something close to their OWL for Java which I think was a precursor to Swing because AWT (also known as Awful Windows Toolkit) was not fun. I think there's a few reasons for the desktop failure:
- Don't do work on the event thread. Doing multithreading back then wasn't easy and most programmers didn't get it. You couldn't do anything that took too much time on the event thread or the app looked frozen.
- The last 15%. Most developers could get their app up and running pretty quick and get the functionality they needed working and have their app at 85% done. It was that last 15% where you had to do platform specific things to make the app look native that most folks just didn't want to do and the apps looked bad. It's possible to get things to look really close to native but it's the last little bit that trips up folks.
- Too much boilerplate code. Look at how event listeners are setup and you see the wasted code that's everywhere in Swing. Plus there was no app framework until way too late and was never released.
At one point I had an Applet using CORBA to talk to a biological database (POET Object Database) that I showed in the UK with the DB back in Virginia. I eventually had a few apps in Java for in-house usage but nothing ever commercial. Eventually I moved to backend development w/ JEE but I still think about trying to spin up a Swing app.
Sounds right to me. The event thread trips a lot of people up (including me in the early days). Lack of an app framework is still a problem. The only ones the come to mind are NetBeans, Eclipse, and IntelliJ platforms, which are pretty heavy and overboard for most apps.
As a "spin-off" of jDeploy, I plan to make a "Wizard" for starting new desktop projects that will make it easier to get to a reasonable starting point.
The first IDE I ever bought was CodeWarrior 6. Still have it. It had some Java support, although I'm not sure I ever used it.
Loved this article. It's very relatable to my own experience around 2006, back when I was in college. I too felt like the Java programs we wrote for schoolwork were somewhat contrived and the non-nativeness bothered me a lot more than it bothered my peers. I mean who ships downloadable apps as .class files? It's not classy. Meanwhile I looked in envy at professional developers who shipped .EXEs that started right up with no delay, no memory hoarding, and no performance loss, and wondered how learning Java in college was really preparing us to write desktop applications in the real world. As you rightly pointed out, many Java-trained engineers went into backend development (so did I *sigh*), but I too still retain a fascination with writing native apps that don't depend on some bloated middleware. Anyway, great article again and thanks for bringing me a smile as I enjoyed my morning coffee.
Lol. I had "installment" first, but the browser insisted it was spelled incorrectly. In fact, it is complaining about the one I just wrote in the comment. Probably it's a British vs American spelling thing.
High school AP Computer Science classes are still teaching Java today. I suppose many of the skills it develops are applicable to other languages, but this still needs to change.
I'm torn. When I see schools changing to Python (which I think I hear my University did), I feel like there is something lost. But perhaps the previous generation felt the same way when they switched from C to Java. Or Assembly to C.
Mar 2, 2022·edited Mar 2, 2022Liked by Steve Hannah
I am just now realizing that I wrote a comment that was quite negative towards Java on a Java-focused blog...
I suppose what I meant to say is that Java is probably not the best language to give to students to begin with. Then again, my first 'real' languages were PHP and JS, so maybe it doesn't really matter what is their first.
Mar 2, 2022·edited Mar 2, 2022Liked by Steve Hannah
Yep, Python is definitely a big step to a higher level, but I personally feel that giving the students a hybrid compiled-interpreted language like Java is not the best way to guide them into implementing code. It has its place, but it basically just slams new programmers with the inherent tradeoffs with both interpreted and compiled languages (the emulation layer and the compilation delays).
So maybe we should all just go back to punching in our code into pieces of paper :)
I suppose a higher level language would allow you to focus on the concepts without the overhead of technical details. That needs to be weighed against the benefit of "starting the race on a horse, and ending it in a Cadillac". E.g. Starting my education with Java, hid all of the complexities of memory management. As such, languages like C that require memory management will always be a "second" language to me. I suspect that if I started with C, memory management would come more naturally. As it is, it feels like extra baggage I don't want to deal with any time I'm coding in C.
Similarly, I worry that static typing and compilation will forever feel foreign to a developer who starts on a dynamic language like Python.
Mar 2, 2022·edited Mar 2, 2022Liked by Steve Hannah
And for when they become 'real' developers, Java is a good middle-of-the-road language that is popular enough to have a lot of pages on Stack Overflow...
Side note: Your article got on the front page of HN.
Good point. Flutter is a phenomenon, in how fast it has spread. I work for Codename One, that is more or less doing the same thing as Flutter (cross-platform native mobile), but using Java/Kotlin instead of Dart. Flutter serves as competitor, inspiration, and proof of concept to us all at the same time.
Very interesting. As a mac user as well, I was use to the very consistent and 'snappy' classic macOS feel/look/function. The performance difference was probably more noticeable to mac users. I would like to know the java experience from a windows users prospective. Windows was more fragmented and less consistent due to more development environments and frameworks. I remember many more windows apps feeling like Kais Photo Goo instead of icons, menus, buttons.
Swing performance on Windows did feel snappier than on Mac, back then. I don't know if this is because processor was faster, or if it was something to do with the implementation.
Definitely Windows users weren't as picky about UI guidelines.
That said, Swing on Mac looked prettier than on Windows thanks to the Cocoa Look and Feel.
Dead is a strong word. I just checked and found that I have 25 programs currently opened on my computer. I might just be old-fashioned. I get your point though. The web is the new desktop.
Hi Steve Hannahn, nice to meet you. I come from China as an editor of CSDN, one the largest IT communities serving Chinese software engineers (https://www.csdn.net).
This article is so great, and your analysis of Java's evolution is amazing. Could you please authorize us to translate it into Chinese? The translation will definitely be free for all people, and we will state clearly your personal introduction and original link in a prominent position.
I was pretty heavy into Java back in the day but I have never heard of JWT, and if I did then I completely ignored it. Swing was and is amazing. Intellij IDEA is built in Swing.
I kept downloading and playing with Netbeans up until 3.5.1. As soon as I tried that version I started building an app with it and never stopped. It was definitely a killer app moment. Nearly twenty years later I'm refreshing the app for a new release. I kept trying to use eclipse over the years but never understood why it was even a thing compared to Netbeans.
NetBeans 7 was the turning point for me. That was the first one that I was completely happy with. No more lag.
These days I'm using IntelliJ mostly. It was a hard transition at first, but at this point it would be a hard transition back, as it is so polished.
Yeah, 3.5.1 was crazy slow to start up. I think this lasted until 5.5, which is where I left off for a while. I recently picked up with the latest version which is nice.
Yeah. The latest versions of NetBeans are quite nice to use. After using IntelliJ for a while, I've gotten really used to having a separate window for each project. It is hard to switch back to the NetBeans model of one window with all of the projects. If I could change that one thing about NetBeans, that would be it.
(I know, it's open source.... I shouldn't complain, I should contribute...)
The desktop is not dead - for serious computing it is sill essential.
Python and Qt provides write-once-run-anywhaer and a tottally native user experiance. If you want to make native binary executables, try C++ and Qt or for completely free, there is Lazarus.
Thanks for sharing about QT. I have long been aware of QT's presence, but never took the dive into it. Probably because it overlapped with Swing's wheel-house to much.
This is a timely comment, as I'm currently working on later articles in this series and am sorting out the use-cases for desktop development in a post-HTML5 world. The main requirement that would cause me to target desktop, as opposed to web, is if my app needs to work with local files in some way. Performance is becoming less of a consideration as time goes on. What are some examples of "serious computing" that you think make desktop development essential?
Calling QT "totally native" is more that a stretch. QT suffers from the same problems as Swing: it looks non-native everywhere.
That's a good point. QT is a lightweight toolkit just like Swing. I think that the term "native" with respect to UIs can mean different things to different people. Some people may just use the term to mean that the UI toolkit is compiled to native, usually from C or C++, implying that it is "fast". QT is "native" in this sense. Personally I think it is more useful to use your definition though, which I assume to be that "native" means that it uses the actual native widgets of the platform. QT is most definitely not "native" in this sense.
I agree that Java did not make much inroad on the desktop, probably because we did not see any killer app. However, I did see and use one that demonstrated Java prowess. It is the flagship desktop trading app from tdAmeritrade (orginally, thinkOrSwim) - No, I have no financial tie with them. I started with the app in ~2008 on a Linux desktop, because that was what I had. Other than using a web browser, most trading houses only offered Windows or Mac versions. In any case, this thing is impressive. If I didn't tell you, no one would think it's a Java app running on Linux. It may not be cruise missile real-time, but I am not sure what else one would want from a trading app. It's got all the charts and prices on multiple panels and screens. And, I just looked. It is running on OpenJDK 11, on all 3 major platforms today. Have a look, if you are a Java fan: https://www.tdameritrade.com/tools-and-platforms/thinkorswim/desktop/download.html
Thanks for sharing. I wasn't into the stock market at all so I never actually saw this app in action. I do like to hear about Java apps in the wild. I'd be interested to know the story behind this app. E.g. Why they chose Java in 2008. A guess is that it relates to the banking industry being big on Java - security being more important than "trendiness".
So, I was doing C/C++ development w/ an OODB when JDK 1.0.0 was released. At the time was using Borland's C++ Builder and Metrowerks' CodeWarrior tools. First JDK on classic MacOS (8 I think) I used was JDK 1.0.2. Eventually Borland released JBuilder and CodeWarrior included Java tools. I remember Borland created something close to their OWL for Java which I think was a precursor to Swing because AWT (also known as Awful Windows Toolkit) was not fun. I think there's a few reasons for the desktop failure:
- Don't do work on the event thread. Doing multithreading back then wasn't easy and most programmers didn't get it. You couldn't do anything that took too much time on the event thread or the app looked frozen.
- The last 15%. Most developers could get their app up and running pretty quick and get the functionality they needed working and have their app at 85% done. It was that last 15% where you had to do platform specific things to make the app look native that most folks just didn't want to do and the apps looked bad. It's possible to get things to look really close to native but it's the last little bit that trips up folks.
- Too much boilerplate code. Look at how event listeners are setup and you see the wasted code that's everywhere in Swing. Plus there was no app framework until way too late and was never released.
At one point I had an Applet using CORBA to talk to a biological database (POET Object Database) that I showed in the UK with the DB back in Virginia. I eventually had a few apps in Java for in-house usage but nothing ever commercial. Eventually I moved to backend development w/ JEE but I still think about trying to spin up a Swing app.
Sounds right to me. The event thread trips a lot of people up (including me in the early days). Lack of an app framework is still a problem. The only ones the come to mind are NetBeans, Eclipse, and IntelliJ platforms, which are pretty heavy and overboard for most apps.
As a "spin-off" of jDeploy, I plan to make a "Wizard" for starting new desktop projects that will make it easier to get to a reasonable starting point.
The first IDE I ever bought was CodeWarrior 6. Still have it. It had some Java support, although I'm not sure I ever used it.
The last frameworks I tried out were jdesktop and Griffon but that was years ago.
Loved this article. It's very relatable to my own experience around 2006, back when I was in college. I too felt like the Java programs we wrote for schoolwork were somewhat contrived and the non-nativeness bothered me a lot more than it bothered my peers. I mean who ships downloadable apps as .class files? It's not classy. Meanwhile I looked in envy at professional developers who shipped .EXEs that started right up with no delay, no memory hoarding, and no performance loss, and wondered how learning Java in college was really preparing us to write desktop applications in the real world. As you rightly pointed out, many Java-trained engineers went into backend development (so did I *sigh*), but I too still retain a fascination with writing native apps that don't depend on some bloated middleware. Anyway, great article again and thanks for bringing me a smile as I enjoyed my morning coffee.
Thanks for the kind words. Nice to know I wasn't the only one who felt this way.
Enjoyed the article, saw a typo in 2nd last para. "instalment"
Lol. I had "installment" first, but the browser insisted it was spelled incorrectly. In fact, it is complaining about the one I just wrote in the comment. Probably it's a British vs American spelling thing.
High school AP Computer Science classes are still teaching Java today. I suppose many of the skills it develops are applicable to other languages, but this still needs to change.
I'm torn. When I see schools changing to Python (which I think I hear my University did), I feel like there is something lost. But perhaps the previous generation felt the same way when they switched from C to Java. Or Assembly to C.
I am just now realizing that I wrote a comment that was quite negative towards Java on a Java-focused blog...
I suppose what I meant to say is that Java is probably not the best language to give to students to begin with. Then again, my first 'real' languages were PHP and JS, so maybe it doesn't really matter what is their first.
I also started with PHP and JS .. well PERL, then PHP, ... But I didn't use them in an academic setting.
There is something to be said for using a language that let's you just get down to coding.
Yep, Python is definitely a big step to a higher level, but I personally feel that giving the students a hybrid compiled-interpreted language like Java is not the best way to guide them into implementing code. It has its place, but it basically just slams new programmers with the inherent tradeoffs with both interpreted and compiled languages (the emulation layer and the compilation delays).
So maybe we should all just go back to punching in our code into pieces of paper :)
I suppose a higher level language would allow you to focus on the concepts without the overhead of technical details. That needs to be weighed against the benefit of "starting the race on a horse, and ending it in a Cadillac". E.g. Starting my education with Java, hid all of the complexities of memory management. As such, languages like C that require memory management will always be a "second" language to me. I suspect that if I started with C, memory management would come more naturally. As it is, it feels like extra baggage I don't want to deal with any time I'm coding in C.
Similarly, I worry that static typing and compilation will forever feel foreign to a developer who starts on a dynamic language like Python.
I don't know.
And for when they become 'real' developers, Java is a good middle-of-the-road language that is popular enough to have a lot of pages on Stack Overflow...
Side note: Your article got on the front page of HN.
Flutter today is doing what Java was trying to do 20 years ago. Maybe it will succeed.
Good point. Flutter is a phenomenon, in how fast it has spread. I work for Codename One, that is more or less doing the same thing as Flutter (cross-platform native mobile), but using Java/Kotlin instead of Dart. Flutter serves as competitor, inspiration, and proof of concept to us all at the same time.
Very interesting. As a mac user as well, I was use to the very consistent and 'snappy' classic macOS feel/look/function. The performance difference was probably more noticeable to mac users. I would like to know the java experience from a windows users prospective. Windows was more fragmented and less consistent due to more development environments and frameworks. I remember many more windows apps feeling like Kais Photo Goo instead of icons, menus, buttons.
Swing performance on Windows did feel snappier than on Mac, back then. I don't know if this is because processor was faster, or if it was something to do with the implementation.
Definitely Windows users weren't as picky about UI guidelines.
That said, Swing on Mac looked prettier than on Windows thanks to the Cocoa Look and Feel.
Apps on the desktop are dead.
Dead is a strong word. I just checked and found that I have 25 programs currently opened on my computer. I might just be old-fashioned. I get your point though. The web is the new desktop.
Hi Steve Hannahn, nice to meet you. I come from China as an editor of CSDN, one the largest IT communities serving Chinese software engineers (https://www.csdn.net).
This article is so great, and your analysis of Java's evolution is amazing. Could you please authorize us to translate it into Chinese? The translation will definitely be free for all people, and we will state clearly your personal introduction and original link in a prominent position.
Sure. Go ahead.
Anyway, now the desktop is dead... war is on web
I'm not quite as ready as you are to declare it dead yet. The web has definitely swallowed a lot of the oxygen though.