« Weak versus strong languages, who wins the fight? | Main | Experimenting with a Blog! »

Beyond Java (by Bruce A Tate, O'Reilly)

Notes and [thoughts] as I read this book. Mostly I'll paraphrase the author. I'll note something if it is my thoughts or insight by [enclosing it in brackets].

Common topics include: Java development, frameworks, Spring, Struts, Hibernate, Ruby on Rails, developer productivity, etc.

Here is Chapter 1 "Owls and Ostriches" and Chapter 2 "The Perfect Storm"


Notes and [thoughts] as I read this book. Mostly I'll paraphrase the author. I'll note something if it is my thoughts or insight by [enclosing it in brackets]. Common topics include: Java development, frameworks, Spring, Struts, Hibernate, Ruby on Rails, developer productivity, etc.



Chapter 1 Owls and Ostriches


Subject of the Book

I'll often ignore risks involving minor consequences or low frequencies because dealing with the risk is not wise. Managing the risks properly may take too much effort, money, or time, opening me up to additional risk... [occasionally you make mistakes]...even if I've decided to ignore certain kinds of risks in... [certain environments] and conditions, I've sometimes got to step back and reassess the risk."


Ignorance as a Virtue


Ostrich

I can be surprisingly productive by simply ignoring most problems. With a little luck, the problems often just go away. [But] Such an attitude can work for you or against you.


Owl

If you look closely, you can find some selective, wise application of ignorance...


Tate believes in the dangers of premature optimization, and echo the popular agile principle of YAGNI : "You ain't gonna need it."


When a dominant language or technology is in its prime, there's a blissful ignorance stage, when ignoring alternatives works in your favor. ... Suddenly, your competition has the jump on you, with much better productivity leading to better quality, improved productivity, and more customers. When you enter the transition time, you'd better start paying attention.


Shaken to the Core (by Ruby on Rails, efficiency and productivity gains)


  • Lightweight frameworks
  • Less code is more
  • Customers don't usually care about cool code or mature technology.
  • Keep scouting for rapid changes

Boiling Frogs


Are the waters around us warming? They may not recognize it, but motivations don't matter one little bit. If the water starts to boil, they'll die.

  • You've got to watch for "Danger Signs"

    • He's watching "Java Servlet Programming" the work of Jason Hunter

      • Java is not on top any more
      • The "top" [web technology stack "top"] is where it is at now
      • Watch the "alpha geeks" Querying, Subversion, automation [workflows]


  • It's getting more complex [technology starts simple, solves new problems but then grows and matures and gets complex at some point java becomes the next COBOL.] Rising complexity led to high-level languages, structured programming, and object-oriented programming. My contention is that this higher river of complexity will flood, forcing new abstractions...
  • Rapid Revolution - Most innovation is driven by need. Revolution increases dramatically when complexity hits a certain threshold. ...The implications of the churn are staggering.
  • Unnatural stretching - [We] stretch technologies beyond its intended directions [as complexity and need demand] This is only good to a point and begins the barrier to entry for the new guys. New languages wont come with these overhead.
  • Language evolution - extensions cause the increase in complexity and obscurity
  • What's Good Is GOOD [just because we are talking about new stuff doesn't make the mature stuff "Bad"]

New Horizons


Keep surveying the interesting innovations around new programming languages.

  • Dynamic Languages - [These hold potential because of the productivity and simplification they offer over existing languages. but they must be evaluated on productivity and quality.]
  • Metaprogramming - programming styles that are more transparent, reflective, and dynamic. Think of metaprogramming as building a high-level builder. ... for enterprise application development , the overriding characteristic of a language or environment is productivity . ...each line of code to work harder, and ... to translate into productivity. ... measuring productivity after deployment. If your tiny application is impossible to maintain, you'll lose everything you've gained.
  • Continuation Servers - continuations maintain state

The Premise


... the premise of this book should be taking shape:

  • As languages move away from their base. As harder problems may be easier to solve, but [newly realized] simple [emergent] problems are getting harder to solve. And...
  • A language showing signs of wear, and interesting innovations are beginning to appear outside....
  • It's time to start paying attention again.


Chapter 2 The Perfect Storm


Storm Warning


Frustrations, driven by economics but stemming from inadequacies in programming languages and programming models, rippled through the community in another kind of gathering storm.

  • Economics of Client-Server Computing [Let's just say "doom to fail" - not simple, not scalable - even with cheap PCs]
  • Microsoft - one platform to develop against that was everywhere
  • The Internet - Old languages adapted to this new lightweight network and clients. But quickly fail.
  • Object Orientation - [real abstractions emerge]: encapsulation, inheritance, and polymorphism. ...but it takes some time to build the expertise to recognize patterns and to layer OO software in a way that makes sense. Now we are working on lightweight OOP language features and productivity frameworks.

The C++ Experience


Developers found performance, but discovered another challenge [productivity and approachability].
Thinks that killed it where Pointers, Nested Includes, limited support for managing strings [not enough abstraction], DLL hell, CORBA complexity, multiple inheritance complexity problems, consistency, portability...

Clouds Open


The items above lead to the rise of Java, it solved the problems of the time.

  • New Economics - The Java developed [during the evolution of the Internet and thus] built the API set that would allow developers to code for the Internet...
  • C++ on Prozac - it built on the old technology stack - simplification, abstraction
  • Architecture - improved packaging, portability, extensibility, and deployment

Fury Unleashed


James Duncan Davidson : Why Java Won (inventor of Apache Ant and Tomcat)

Mostly, for what Java was designed for, they got it right. Of course, it's a strongly typed language, which for some purposes is great, and other purposes not. ... Java without the server side wasn't that interesting. It still isn't.


I don't like the massive monolithic approach to "Editions." Most people don't need J2EE. They need a web container. End of story. ... I also don't like the incredible jump to complexity that Java seems to engender in people. No other platform has grown as fast and as elephantine as Java. [He takes the Frederick P. Brooks approach]... I wish that more tools would just remember the lessons of Unix: small pieces loosely joined. There is no one ├╝bersolution, and at the end of the day, if you can take two tools and pipe stuff between them, you have a more powerful and flexible solution than any monolithic beast.


  • Servlets - Servlets gave Java developers a way to write applications that would run in the browser. An application would get a request over HTTP, and build a plain web page, with no Java, that would return to the client. Since the web pages were built server side, they could take dynamic content, like the results of database queries, back down to the client.
  • J2EE - emerged to add a rich set of tools that would let you program distributed, transactional, secure, and persistent applications, without coding those services yourself.
  • Industry Standards - Software is more prone to monopolies than most other industries because software moves fast and obsolescence can devastate a company. For this reason, market share tends to favor the market leader heavily. So it stands to reason that market leaders love to be proprietary. [However] If you can't build dominant share, you can lend your customer safety by creating partnerships and embracing a common standard. In this way, your customers are not nearly as afraid of obsolescence.
  • Open Source - Innovation in the open source community keeps tremendous pressure on software companies to keep up. That's healthy. ... . Open source software raises the bar of what you've got to do to make money. You could even argue that open source software is driving the most important innovation...

Aftermath


[The above pressures are] redefined the way we package and deliver software. To achieve similar success, a new language will need to be portable and encourage a vibrant open source community. It will need broad appeal, across low-level programmers and architects. It will need to embrace compelling standards. Business reasons must drive this move.

Moving Ahead


  • [The factors of the "next thing" will always change]