James Ward Profile Banner
James Ward Profile
James Ward

@_JamesWard

17,382
Followers
2,898
Following
338
Media
8,791
Statuses

Mutability was the "trillion-dollar mistake" and more hot-takes on my podcast: @HappyPathProg Disclaimer: I work for @AWSCloud & my opinions are my own.

Crested Butte, CO, USA
Joined February 2007
Don't wanna be here? Send us removal request.
Pinned Tweet
@_JamesWard
James Ward
3 years
Goetz’s Law: Every declarative language slowly slides towards being a terrible general purpose language. cc @BrianGoetz
10
23
171
@_JamesWard
James Ward
5 years
- Enterprise Edition 2.0 - App Server -> Kubernetes EAR/WAR -> Docker Container EJB -> Istio JNDI -> Kubernetes Services JMS -> Kafka JAAS -> IAM / JWT RMI -> gRPC JAXP -> Cloud Events Servlets / JSP -> NodeJS JDBC -> So many data access things JTA -> (nothing, because reasons)
63
950
2K
@_JamesWard
James Ward
4 years
If SQL were built on YAML SELECT: - num - name FROM: - customers WHERE EXISTS: SELECT: - name FROM: - orders WHERE: AND: - EQUALS: - customers.num - orders.customer_num - LT: - price - 50
112
462
2K
@_JamesWard
James Ward
3 years
My builds are 100% reproducible as long as nothing on the internet changes.
20
180
1K
@_JamesWard
James Ward
2 years
After 3 years at Google Cloud, I'm moving from one dream job to another. Starting today I'm a Product Manager for Kotlin (still at Google), helping make Kotlin even more awesome. Really looking forward to this new adventure - let me know if there is anything I can do for you.
89
36
1K
@_JamesWard
James Ward
4 years
Programming, no matter what level, is mostly trial & error. So before anything else, optimize for the shortest feedback loop possible.
27
302
1K
@_JamesWard
James Ward
9 years
Discovered this sign at the W3C headquarters... http://t.co/M9XJ2nW6rW
Tweet media one
35
2K
907
@_JamesWard
James Ward
7 years
Based on CPU usage I'm pretty sure the Slack Mac App is mining bitcoin in the background.
18
269
805
@_JamesWard
James Ward
1 year
Upgraded another service to JDK 17 and holy crap these out-of-the-box improvements in GC are 🤯
Tweet media one
21
108
693
@_JamesWard
James Ward
5 years
Best way to kill developer productivity: use docker containers in the local dev cycle.
54
144
587
@_JamesWard
James Ward
3 years
Once you go immutable, you can’t go back.
25
58
576
@_JamesWard
James Ward
5 years
Most underrated thing about Open Source is skill portability. When teams use proprietary frameworks there is a huge cost to on-boarding. Also developers don't want to invest time learning something that has zero transfer to their next job.
23
187
485
@_JamesWard
James Ward
4 years
Code reviews that include code style feedback are a total waste of time. Just add an auto-styler / formatter to the code submission process. If styling can't be automated, it's not worth caring about.
19
106
447
@_JamesWard
James Ward
3 years
Solving hard problems is not necessarily the same as solving important problems.
7
94
436
@_JamesWard
James Ward
5 years
Serverless with Cloud Run is awesome sauce! And you know what makes it better?? Commandless! Add a deploy button to your README so users can deploy a repo in two clicks:
9
157
428
@_JamesWard
James Ward
5 years
Thrilled to now be a Developer Advocate on the @GCPcloud team!
Tweet media one
66
16
400
@_JamesWard
James Ward
1 year
Take a guess as to when I upgraded from JDK 1.8 to 17:
Tweet media one
16
44
381
@_JamesWard
James Ward
2 years
Make val not var.
17
37
375
@_JamesWard
James Ward
4 years
A single, relevant, working code example is worth 1000 pages of reference docs.
17
91
371
@_JamesWard
James Ward
3 years
If your developers need to run Kubernetes, you are doing it all wrong. Burn it all to the ground and start over.
17
51
324
@_JamesWard
James Ward
3 years
Writing some actual Java for the first time in a long time.
9
16
298
@_JamesWard
James Ward
1 year
Just replaced 101 Kotlin lines with 1 Bash line.
23
16
276
@_JamesWard
James Ward
5 years
With Scala I've learned many programming language idioms that are now essential for me, including: ADTs, expression-orientedness, parametric polymorphism, parametricity, bifunctor IO, referential transparency, immutable data, type inference, pattern matching, do notation.
12
66
263
@_JamesWard
James Ward
3 years
Woah! What an incredible and unexpected honor! So thankful for all of the amazing people who've been part of my programming journey - now 25 years of working with the Java platform. Looking forward to another 25!
@Java_Champions
Java Champions
3 years
Congratulations to new #Java Champion @_JamesWard !
Tweet media one
54
32
435
32
8
265
@_JamesWard
James Ward
2 years
Apparently people are debating Gradle vs Maven. But let’s be honest, we just want a world where we don’t have to think about build tools. I’ve spent years of my life fighting with Ant, Maven, and Gradle. And despite the challenges, Gradle with the Kotlin DSL is my tool of choice.
36
19
264
@_JamesWard
James Ward
5 years
Thankful for Scala exposing me to many programming concepts being adopted by other languages: - Functions - Pattern Matching - Algebraic Data Types - Expressions (vs Statements) - Type Inference I may not be using Scala in 10 years but I'll likely be using these concepts.
7
41
255
@_JamesWard
James Ward
4 years
JetBrains Mono is everything I've ever wanted in life.
8
81
252
@_JamesWard
James Ward
4 years
If nullability was a billion dollar mistake, mutability is a trillion dollar mistake.
9
72
252
@_JamesWard
James Ward
1 month
Apr 1 is a tricky day to announce big news, but here goes... Today is my first day as a Developer Advocate at Amazon! Having been an AWS user for 15 years, I'm thrilled to join this exceptional team and contribute to improving the service while helping you get the most out of it.
50
5
253
@_JamesWard
James Ward
2 years
I’m annoyed by Twitter threads that should instead be blog posts. Here are all the reasons why… 🧵
21
28
246
@_JamesWard
James Ward
2 months
YAML finally fulfills Goetz’s Law
Tweet media one
@_JamesWard
James Ward
3 years
Goetz’s Law: Every declarative language slowly slides towards being a terrible general purpose language. cc @BrianGoetz
10
23
171
10
50
245
@_JamesWard
James Ward
1 year
Built my first Kotlin/Wasm app tonight 🤯 Hard not to get super excited about a future without JavaScript!
21
11
234
@_JamesWard
James Ward
4 years
Remember the time we tried to convert UML to runnable programs?? Remember the time when we used UML??
41
21
231
@_JamesWard
James Ward
5 years
Things I'm excited about right now: - GraalVM - ZIO - Scala 3 - Knative & Tekton - Spring Cloud Gateway
6
26
231
@_JamesWard
James Ward
8 months
One of the best things about the Kotlin community is the lack of drama.
21
23
226
@_JamesWard
James Ward
5 years
My Google search rates when working with different programming technologies: Java = 1/hour Scala = 5/hour JavaScript = 20/hour RegEx = 1/minute Bash = Too many to count
9
39
217
@_JamesWard
James Ward
5 years
Everything that’s wrong with our industry in one photo:
Tweet media one
18
30
210
@_JamesWard
James Ward
3 years
I know very few people who have really used Kotlin or Scala and been happy going back to Java. Not saying people shouldn’t stick with Java, but to say Kotlin and Scala are going away because Java got records isn’t representative of those who have made the switch.
28
16
210
@_JamesWard
James Ward
3 years
Many years ago I switched from Eclipse to IntelliJ IDEA but have never paid for it (thanks @jetbrains ) - until today - because I wanted to express my gratitude for the huge productivity boost it has provided me.
20
7
208
@_JamesWard
James Ward
3 years
I have bad news for y’all… by the time you finish your infra / app modernization, it’s no longer modern.
11
38
204
@_JamesWard
James Ward
3 years
"Dockerfiles are easy" they said. Then I had to handle proper caching, proper security, proper reproducibility, proper config management, proper portability, and proper reusability. Turned out to not be so easy.
16
36
203
@_JamesWard
James Ward
5 years
Buggy software is predominantly caused by “happy path programming” where languages / frameworks make it too easy to ignore the error conditions that can never happen.
8
48
203
@_JamesWard
James Ward
5 years
I've been learning Kubernetes and started with "the hard way" (to learn) using @kelseyhightower 's guide: Now that I've done it the hard way, I wrote down "the easy way" with @GCPcloud :
5
58
195
@_JamesWard
James Ward
4 years
Almost 5 years ago, amid numerous claims that Java was dying, I wrote about 10 ways we could use it better to avoid the downfall: Well, Java is not dead and the mainstream has embraced pretty much everything I wrote about. Let's see how...
7
67
188
@_JamesWard
James Ward
1 year
2023 is the year of Desktop Linux! Because after 29 years of trying, I finally got audio working!
16
10
185
@_JamesWard
James Ward
5 years
Service Oriented Architecture -> Service Mesh Web Service -> Micro Service XML -> JSON WSDL -> Swagger SOAP -> Protobuf WS-* -> OpenAPI Service Registry / UDDI -> Open Service Broker API Direct Binding -> Sidecars Messages -> Cloud Events ESB -> Data Pipelines / Stream Processing
9
52
177
@_JamesWard
James Ward
3 years
I don't know who needs to hear this, but it is an anti-pattern to deploy to prod from: an IDE, a command line, or a web UI. Sure, if you are kicking the tires on something / learning, go for it. But for real stuff, setup a CI/CD pipeline.
9
26
180
@_JamesWard
James Ward
3 years
One of the best things about @graalvm is how it's gonna force us all to not use reflection.
10
12
178
@_JamesWard
James Ward
5 years
Goodbye dynamically typed languages. I'm glad we are nearing the end of the programming dark ages.
13
19
157
@_JamesWard
James Ward
5 years
American dev conferences are so boring. Here in India they do impromptu singing competitions!
8
32
158
@_JamesWard
James Ward
2 years
Think Java starts too slow for Serverless? Well, I gave the new Spring Native 0.11 release a try and in ~5 minutes I went from to a Serverless Java app running on Cloud Run with sub-second startup times. Check it out:
6
23
153
@_JamesWard
James Ward
3 years
I really believe that in 10 years the terms “immutability, referential transparency, ADTs, monads, and effects” will be as common as “inheritance, for loops, and exceptions“ are today.
12
22
154
@_JamesWard
James Ward
6 years
Mutable programming creates a multi-dimensional graph of possible states. I've finally realized that I can't grok the number of possible states in most programs. This is why I prefer immutable programming where state is a more comprehensible tree.
3
61
150
@_JamesWard
James Ward
5 years
Maybe we should rename Scala 3 to Python 4. Seems like a win-win for both communities: Python gets a sound type system. Scala doesn’t have to deal with the backlash to major language changes.
7
30
148
@_JamesWard
James Ward
8 months
Been spending time in the JavaScript / Node pain cave lately to remind myself how good I have it in the JVM ecosystem.
17
13
145
@_JamesWard
James Ward
4 years
The Stateless Motto: Make state someone else’s problem.
10
47
144
@_JamesWard
James Ward
5 years
Serverless users: I don’t want to think about servers and I want scale to zero. Also Serverless users: OMG these cold starts!! Can I get some server instances to avoid this??
9
34
137
@_JamesWard
James Ward
9 years
Just published: Java Doesn't Suck - You're Just Using it Wrong http://t.co/EvbezvpWcT
13
160
138
@_JamesWard
James Ward
2 years
Serverside Kotlin is on🔥! Enterprises don't often talk about the tech they use so it is cool to see two Reddit threads where many finserv and other enterprises share about their modernization with Kotlin & Spring Boot:
8
29
138
@_JamesWard
James Ward
3 years
Servlets & WAR files = the original Serverless
10
14
136
@_JamesWard
James Ward
8 years
Josie Grace Ward says "hello, world" - Born on 11/11.
Tweet media one
74
2
135
@_JamesWard
James Ward
4 years
Ward’s Law: Web programming complexity doubles every 18 months.
9
26
131
@_JamesWard
James Ward
7 years
There is CamelCase, snake_case, and XMLHttpRequest aka WTfCase.
6
50
133
@_JamesWard
James Ward
2 years
What is the most 🤯 programming paradigm you’ve experienced in the past decade? For me it was the Elm architecture.
42
18
133
@_JamesWard
James Ward
4 years
Lost a dear friend yesterday. My heart aches and can’t comprehend this. So sad for his family and many other friends. Carl was a gift to so many.
@javaposse
The Java Posse
4 years
Rest In Peace Carl Quinn. COVID-19. Not an April fools joke. :-(
Tweet media one
196
302
857
16
18
130
@_JamesWard
James Ward
4 years
So far this week I've programmed in Scala, Kotlin, Java, Groovy, Python, JavaScript, Go, and Bash. Realized that my enjoyment of a language is based on: 1) how algebraic / lawful it is 2) how good the tooling is (build system & IDE) 3) how quickly I can get to validated bug-free
12
5
127
@_JamesWard
James Ward
1 year
Q: "Why Kotlin isn't becoming mainstream on server side" A: Well actually, it is:
11
15
128
@_JamesWard
James Ward
3 years
By far the most useful thing to come from the world of docker containers is @testcontainers .
3
19
127
@_JamesWard
James Ward
4 years
Every.builder(should).just(be).a(constructor).build() // in languages with named params & default values // // Goals: prefer immutability & make illegal states unrepresentable
11
17
125
@_JamesWard
James Ward
7 months
The best way to update to JDK 21:
Tweet media one
10
12
123
@_JamesWard
James Ward
2 years
PSA: If you open source something and then someone asks you for something more, it is totally within your rights to say no. If someone has a problem with that, it is their problem.
11
13
124
@_JamesWard
James Ward
2 years
Me: What is Infrastructure as Code? Them: It's like code but your infrastructure. Me: Oh cool! So I can test my CI & prod setups just like I test my application code? Them: Well...
8
18
125
@_JamesWard
James Ward
4 years
Just blogged "Comparing containerization methods: Buildpacks, Jib, and Dockerfile" with some GraalVM thrown in because who doesn't like 11MB container images for Java apps?
2
24
123
@_JamesWard
James Ward
2 years
I'm sorry Gradle for all the bad things I've said about you. <- Me after 3 days trying to do trivial things with xcodebuild
4
3
120
@_JamesWard
James Ward
5 years
Irony: Claiming to be a "blockchain expert" without proof of work.
3
37
120
@_JamesWard
James Ward
23 days
Woah, now that I'm using it... the new Full Line Code Completion in IntelliJ IDEA 2024.1 is nearly everything I've wanted from an LLM! I might now be a 1.0x developer. (up from a 0.63x developer cause I'm very picky about my code) Thank you @jetbrains !
10
12
120
@_JamesWard
James Ward
9 years
The paradox of Microservices is that you don't know what should be a Microservice until you've built a monolith.
5
94
116
@_JamesWard
James Ward
4 years
Play Framework went off the rails when it switched to dependency injection. I feel bad for being part of that. My hope lies in ZIO to fix this.
21
17
116
@_JamesWard
James Ward
3 years
Ah the joys of being on the HN front page.
Tweet media one
14
6
116
@_JamesWard
James Ward
9 months
If you want developers to LIKE your library/framework/language/service, have good docs. But if you want developers to LOVE your stuff, have good / directive error messages. This is probably the biggest reason why so many developers love Rust.
3
17
113
@_JamesWard
James Ward
1 year
Hear me out… A GitHub Social Network. I think most of the reason I’m here would evaporate immediately.
14
4
114
@_JamesWard
James Ward
1 year
With your language & library of choice, how hard is it to race two concurrent http requests with loser cancellation, resource management (pool acquire & release), async/non-blocking IO, explicit timeouts, typed error handling, and comprehensive unit tests?
20
12
107
@_JamesWard
James Ward
1 year
Finally migrated from Scala 2 + http4s to Scala 3 + ZIO 2 with ZIO Direct & ZIO HTTP. GraalVM Native Image static binary = 14MB container. Running on Google Cloud Run, globally load balanced across 37 regions.
6
15
110
@_JamesWard
James Ward
8 months
In under an hour I went from "I need a little sample data server" to "up-and-running on the cloud with instant startup" using Ktor, Kotlin/Native, GitHub Actions, and Cloud Run. 1. Created the app 2. Added SIGTERM handling with suspendapp-ktor 3. Containerized with Jib 4. Setup…
6
11
111
@_JamesWard
James Ward
3 years
Just blogged about my journey to a globally distributed, scale-on-demand, edge-cached, webapp; bringing together: GraalVM Native Image, Scala, Buildpacks, GitHub Actions, Cloud Run, and a bunch of other stuff.
2
14
108
@_JamesWard
James Ward
11 years
Fantastic article about building Reactive apps with Play Framework, Akka, Scala, and AngularJS. http://t.co/UIbilnirDL
1
58
110
@_JamesWard
James Ward
2 years
Sometimes “over engineering” is really just “better engineering” that makes people feel ignorant.
14
6
111
@_JamesWard
James Ward
4 years
So excited about this: "Announcing Google Cloud buildpacks—container images made easy"
4
23
110
@_JamesWard
James Ward
4 years
Slowly realizing that most developers don’t really care about delivering software with fewer bugs.
29
12
109
@_JamesWard
James Ward
2 months
Yeah, using Linux on the Desktop has some challenges but I’m sure glad Java has never been broken with an OS update. And I’ve been using these two together for 27 years.
5
6
105
@_JamesWard
James Ward
3 years
So to modernize all I gotta do is rub some Kubernetes and Istio on it?
22
11
104
@_JamesWard
James Ward
2 years
Everyone is like “you gotta try Rust” and I was almost convinced… Until I read: I’m sticking with Kotlin Coroutines and Scala + ZIO. Both are monumentally better programming models for async. Or maybe now there’s an effect system for Rust?
20
23
104
@_JamesWard
James Ward
2 years
Quarkus has been driving some pretty amazing innovation in developer experience. Their dev mode console and Testcontainer support is next level. The Kotlin support has also improved quite a bit. Kudos to the team!
@QuarkusIO
QuarkusIO
2 years
Quarkus is here with an interactive terminal for dev mode, an Oracle Reactive SQL Client extension, SmallRye Stork 1.0.0 and a ton of other things.
2
61
145
3
19
105
@_JamesWard
James Ward
1 year
Holy crap! I just made a Kotlin/Native Linux binary that is only 226k (74k compressed)! Yeah, that is still "large" in the native realm but: a) there hasn't been much effort for Kotlin/Native to reduce sizes b) this is a modern, app-level language that works on many platforms
8
2
103
@_JamesWard
James Ward
2 years
I don't really need Copilot to write code for me, I need it to maintain my code. Dependabot upgrades should come with the code changes. Security & performance issues should have automated patches.
9
7
103
@_JamesWard
James Ward
5 years
Things that should not appear in Java code in 2019: - Anonymous Inner Classes - Getters & Setters - Mutating loops that can be lambda-based collection operations (map, reduce, filter, etc)
13
19
97
@_JamesWard
James Ward
4 years
99% of mobile app updates being bug fixes provides strong evidence that our mainstream programming models are fundamentally broken.
12
17
98
@_JamesWard
James Ward
2 years
It continues to amaze me how much more productive I am when I separate data transformations from fetching / updating data. And I get more reliable, composable, and testable pieces.
6
6
98