Working full time in Java again after more than 10 years is an interesting experience. I've done a lot of Scala, TypeScript and Python in the interim--of which I strongly prefer TypeScript. I'm thinking of blogging/talking/tweeting about the journey.
#Java
Another interesting point from this era: There were people from the community who made extremely valuable contributions to the docs, but never contributed code. Open source is about far more than the codebase.
The reason why I started using
@springframework
in 2004 is because of its manual written by
@springrod
and the team. I was sold right away.
Never underestimate the impact of documentation.
"If I can reproduce it in a unit test, I can fix it." The TDD equivalent of Arnie's classic line in Predator - "If it bleeds, we can kill it." That bug's days are numbered.
get/set - gone!
25 years after I embraced JavaBeans, I'm happy to see records killing JavaBean conventions. They're not needed any more. It's just a matter of time for APIs to evolve.
As things get smaller (monoliths > microservices > lambdas), the ratio of configuration/code -- which had been getting better -- gets worse again. Possibly unavoidable, but creates the need for tools that work at scale across many services
Fascinating. Even I'm surprised at how dominant Spring is--as it deserves to be. Other key points: Most Spring projects are Spring Boot; Spring 5 and Spring Boot 2 uptake is already remarkably high, and Kotlin is growing like crazy.
@springboot
@kotlin
Thrilled to announce that the Atomist Software Delivery Machine API is ready to use in open source, on a laptop near you. . It's time to develop your development/delivery experience in a real programming language, rather than YAML and Bash
@atomist
Interesting talk on Netflix's current use of Java. . "Since about a year or so we have completely standardized on Spring Boot." "It is quite amazing...that that framework has been so stable and so well-evolved."
1/2 Perhaps surprising opinion: Java is a great language for developing
#GenAI
apps. Why? 1. Don't need to use Python, as communicating with big models via HTTP is easy in any language. 2. Useful apps often require a bunch of async/persistence stuff where Java beats Python.
With all due respect to Eclipse, the home of cloud native Java is
@springframework
and
@springboot
, which have enabled Java to lead in microservices. I wish
@JakartaEE
the best, but it's a distant challenger in a mature space
Amazing how good Java testing experience has gotten. DI+AOP made it possible to unit test code without a server. Spring integration testing functionality is awesome.
@testcontainers
adds the last bit of magic. Makes me smile to run a test suite using a real DB in 2 minutes.
This is a big deal. How it plays out will determine the future of open source and customer choice. We risk a future more proprietary than Microsoft or Oracle ever dreamt of.
Controversial thought: Are languages most productive when they are imperfect, yet do not suck? Take Java and modern JavaScript. No one thinks they're ideal, yet they have spawned valuable, practical ecosystems vs academic purity. Is that chance?
And still going strong into the Gen AI era. The core concepts stand up very well today, but the magic has been the amazing--and remarkably stable--team. Supporting and supported by a great community.
The days when it was defensible to look down on JavaScript are long gone. ES6/ES7 are pretty good and
#TypeScript
is great. There are still quirks & it will never be pure, but it's massively useful. Given JS is everywhere and inescapable, that's good news.
Amen! The precursor of Spring was an in-house MVC framework I wrote at FT in 2000 where "injection" was just for simple properties that needed to be parameterized. I generalized it partly because EJB 1.1 was hard to unit test. So Spring *exists* partly to facilitate unit testing
"In a healthy piece of code, entropic decay is staved off by dozens of tiny interventions — bug fixes, test fixes, small refactors, migrating off a deprecated API".
Excellent article:
Some of that work can be automated, making it more likely to get done
While premature optimization is evil, it *is* important to ask the question "could this ever be efficient?" Otherwise it's easy to design interfaces etc that are fundamentally broken and will need to change incompatibly.
Delivery and infrastructure should be programmable using core development skills and practices. They're powerful. The work of Turing, Hopper, Dijkstra and so many other greats led to modern programming languages. Let's not ignore it and type ever more YAML.
Java has changed for the better. Improved case statement; instanceof binding to a variable to avoid casting; records etc. And tooling & libraries are great. The main thing that annoys me is collections. Having to go back and forth to streams is verbose and unreadable. Trying vavr
My talk at Spring One is now online. "Software Delivery Needs a Framework: Lessons from Spring". Creating and delivering Spring Boot apps can be easier than you imagined.
@springboot
@s1p
@atomist
#TypeScript
We'll be showing best practice checks and autofixes where possible, e.g. "don't use setter injection," "do use Spring Test", don't use XML", "don't hardcode properties" and "keep Spring Boot version up to date". What would your favorite best practice be?
@springboot
@spring_io
Looking forward to SpringOne in Austin next week. Talking about the history of Spring, and excited to show some cool stuff we've been doing at
@atomist
for
@springboot
@s1p
When Java finally gets interpolation, it may beat that in other languages. Love this example of creating a non-String type:
PreparedStatement ps = DB."SELECT * FROM Person p WHERE p.last_name = \{name}";
var rs = ps.executeQuery();
Java also benefits from autoformatting. I created an
@atomist
autofix to apply spring-format by
@phillip_webb
to any Java project without needing to change its build file. This is a classic crosscutting concern.
@lewisheadden
Looking forward to SpringOne in Austin next week. Talking about the history of Spring, and excited to show some cool stuff we've been doing at
@atomist
for
@springboot
@s1p
Good API design: Small surface area, layered. Rather than mix levels of abstraction, expose a consistent set of primitives on which a helper layer can build, reducing coupling and encouraging innovation in usage.
The astonishing power of code. Use the
@atomist
API for software to drive
#Kubernetes
delivery for *all* Maven projects in a team in a few lines of
#typescript
. Goodbye all those duplicated YAML/Bash pipelines. Plus it's more flexible and easier to evolve
Ever wanted to program your CI/CD using a concise API and framework instead of hacking YAML and scripts? With an
@atomist
#sdm
you can do exactly that now on your laptop and in the cloud. Example shows
@springboot
to
#Kubernetes
build and deploy. -
@lukaseder
@wattersjames
@pivotalcf
@springboot
@springframework
There was also an obsession with abstracting from the relational database. Stored procedures were thought evil. I remember writing a 200 line PL/SQL proc that replaced 20K lines of entity beans, ran in 2m vs 20m (req was <5m). And it being rejected as "not approved architecture"
Software delivery needs a framework just as much as app dev... As it's hard to find through google, thought I'd tweet the link to my Spring One presentation on Atomist .
@atomist
@springboot
@s1p
Never leave an IDE template to complete methods to return void, null or undefined: Make them throw an exception or error. Will fail fast and explicably and give you free linking to the place you need to fix.
@starbuxman
@rhatr
@chuhnk
@wattersjames
Focus on real problems. Stronger, more complete vision than competitors--an integrated solution. (Initially, the only project willing to defy the J2EE marketing machine. Now vision for cloud.) Good docs. Great team. Respectful, professional culture.Ability to pay core developers.
Spring is bigger than ever, and now plays a key role in an IPO. Just over 15 years of amazing open source work from the Spring team after the initial code drop. Well deserved!
@springframework
@pivotal
@jacek_bilski
@springframework
@INNOQ
Unit tests shouldn't use Spring. Period. Spring's integration testing support is a valuable alternative to a full deployment, but should only be used when you NEED to test real wired services, database interactions etc
While software is eating the world, developers are eating software. We've barely scratched the surface with
#DevOps
--we can do much more to apply our engineering & coding skills to our own discipline.
On NYSE trading floor for
@elastic
IPO with old friends and comrades in arms
@stevenschuurman
and
@nickw249
. Amazing day. Great team, great technology. Looking forward to even greater things!
@kimchy
@brunoborges
@ThePracticalDev
Good question. XML is annoyingly verbose. But it's more robust syntactically and has schema support. In practice, both are/have been greatly overused. Programming badly in YAML is currently out of control.
We think 3 things are key: an event hub vs many pipelines so orgs can express org policy; a rich model spanning code and correlated events around it, like builds and deployments; and a productive API in a full featured programming language, not YAML and Bash
This
@monkchips
chat with
@springrod
and
@jryanday
offers a really helpful perspective on what modern (next gen?) continuous delivery should look like. I really need to play with
@atomist
.
Wow. Just learnt that Harper Lee 'received a gift of a year's wages from friends with a note: "You have one year off from your job to write whatever you please. Merry Christmas"'. The result was "To Kill a Mockingbird". What an amazing and important gift.
#DevOps
tools need to work per org, not per repo. Having one build pipeline per repo doesn't work in today's world of project proliferation. Pipeline duplication is technical debt, and safely making consistent changes across many projects becomes difficult or impossible.
I love this post from
@hans_d
on "Quantifying the Cost of Builds" - . It's always eye opening to look at where time/cost goes in software delivery. We should do more of that as an industry.
#DevOps
Yes. As developers grow more powerful, key decisions move left. Two of many business proof points: Microsoft's recognition of GitHub's importance; Pivotal using Spring to drive Cloud Foundry. The delivery flow is highly strategic, and fertile ground for innovation
Had a great meeting and lunch today with my personal and professional friend
@emileifrem
. Lovely to see him. Huge respect for his leadership at
@neo4j
since we met in 2010. Great product; great culture; great people. The character of a CEO matters.
Great insights from Google experience into how to make static analysis useful, including integration into workflow, making warnings actionable, and an extensible platform (Tricorder). It's how such technology is consumed that makes it useful in practice.