Posts Tagged ‘java’
Things I learned about myself this week
- I have grown so unhappy programming Java that I’m willing to turn away opportunities to advance my career from interested employers at amazing companies who want me to continue programming in Java.
- I dislike JavaScript more than Java, but find that because I’m using JavaScript to directly enhance the user’s experience, it’s a smidgen more palatable.
- I find that watching my baby girl identify goals (“I want that toy over there”), identify the hurdles in achieving those goals (“that’s too far away”), and address those hurdles (“pulling on the baby blanket moves the toy closer”) is far more rewarding than anything I’ve done in my professional life.
- I can lose weight without being miserable.
Java’s Infatuation with Abstraction
Steve Yegge wrote a long and somewhat rambling—but painfully insightful—article entitled Portrait of a N00b. It starts by discussing the phases of a software developer’s professional development, from toddler to teenager through to adulthood. Steve puts forward that a developer’s relationship to metadata (comments, static typing, modeling) changes over time from an over dependence on metadata to a distaste for it. He then goes on to discuss consequences of this insight.
The article really hits its stride in the section “Creeping bureacracy”. If you’re short on time, jump down to that header. I found myself laughing and nodding at these pearls of wisdom:
I think that by far the biggest reason that C++ and Java are the predominant industry languages today, as opposed to dynamic languages like Perl/Python/Ruby or academic languages like Modula-3/SML/Haskell, is that C++ and Java cater to both secure and insecure programmers.
and
Perl, Python and Ruby fail to attract many Java and C++ programmers because, well, they force you to get stuff done. It’s not very easy to drag your heels and dicker with class modeling in dynamic languages, although I suppose some people still manage. By and large these languages (like C) force you to face the computation head-on. That makes them really unpopular with metadata-addicted n00bs.
While the whole article sent my neurons firing off in dozens of different directions worthy of blog entries, I’m going to concentrate on this bit:
Java has been overrun by metadata-addicted n00bs. You can’t go to a bookstore or visit a forum or (at some companies) even go to the bathroom without hearing from them. You can’t actually model everything; it’s formally impossible and pragmatically a dead-end. But they try. And they tell their peers (just like our metadata-addicted logical data modelers) that you have to model everything or you’re a Bad Citizen.
Hello, my name is David and used to be a metadata-addicted n00b. Joking aside, Steve is absolutely right.
I think Java became the garden of frameworks due to its early positioning as an enterprise software platform. Enterprises are strange beasts. Internally developed enterprise software has a tendency to live a long, long time. A decade, often more. Take a moment and pause to think about what you were doing 10 years ago today, and then think about how much technology has changed in that time, too.
One of the problems faced by enterprise software that isn’t typically encountered outside of enterprises is that the systems, protocols, and interfaces that an application was originally written to run on or collaborate with will have been replaced. Vendors are replaced, authorization systems change (database to directory to single sign-on), databases are upgraded, CORBA loses favor to EJB and then to SOAP, and so on. Consequently, the fathers of Java emphasized abstraction—don’t get too close to your touch points, because they may be changed tomorrow. Let’s call this “abstraction at the edge”.
I think that a lot of Java developers—myself included—took abstraction too far. Instead of abstracting at the edge, we started abstracting everything. Rather than creating opinionated software, the Java development community promoted and embraced frameworks that competed to be the most general and all-encompassing. Rather than solving problems, the Java community invested its energy in building problem-solving engines.
This is important because as Java developers have started jumping into new communities—I’m thinking of .NET, Flex, and Ruby on Rails—they have brought their framework addictions with them. NHibernate and Spring.NET are gaining momentum within .NET communities and you can’t look sideways at Flex without tripping over a new Flex MVC framework1. The Rails community has been very successful at resisting the inventions of “metadata addicted n00bs” because the big names in the community have taken a strong positions against abstraction.
I might be growing up faster than Steve’s timetable for growth, but I’m tired of frameworks that try to do everything. I just want to get things done.
1 Here’s nine for you: Cairngorm, PureMVC, ARP, MVCS, Flest, Model-Glue: Flex, ServerBox Foundry, Guasax, and Slide. List compiled from here and here.
Programming Languages and Development Stacks
Comments like this drive me nuts. There are several misconceptions that should be addressed, but I’d like to concentrate on this bit:
Don’t get me wrong; I think the switch to Java was a leap forward for the industry; I just wish people would have jumped to a better language.
Who cares about programming languages? Languages are a tiny part of the overall development stack. The PERL language is showing its age, but CPAN continues to make PERL a great choice for many UNIX applications. Ruby is interesting, but it’s Rails that attracted the industry’s attention. Objective-C would be nothing without Apple’s fine compliment of frameworks. Microsoft recognized the value of stacks over languages when it designed .NET’s CLR to support many languages. And finally, Java’s decade-long success as a server-side development platform wasn’t due to any stand-out features of the Java language — or even Sun’s marketing1. Its success was due to being a compelling development solution for server applications:
- Develop on your favorite system (Windows, Solaris, or Linux)
- Deploy on your business’ favorite system (Windows, Solaris, or Linux)
- Roll-out with confidence due to standardized server deployment artifacts and environments (JavaEE)
- Enjoy the easy stuff being easy with built-in support for internationalization, threading, and asynchronous processing
Development stacks don’t “win” based on their language — they win based on the ecosystem of developers, frameworks, and libraries that surround the language.
1 I find the idea that Sun’s marketing significantly impacted Java’s adoption to be laughable. During those early years, while Sun was the tech media’s darling child, Sun was also actively antagonizing its developer community, whose members were building open source alternatives to the expensive enterprise solutions being pushed by Sun and its industry partners.