@jitterted@sfba.social
@jitterted@sfba.social avatar

jitterted

@jitterted@sfba.social

He/Him. Technical coach. All about Making #Java Code More Testable. #TDD #Refactoring #HexagonalArchitecture #JUnit #AssertJ

This profile is from a federated server and may be incomplete. Browse more on the original instance.

jitterted, to random
@jitterted@sfba.social avatar

Upgrading my main machine, an iMac (2020), to Sonoma. Wish me luck...

jitterted, to random
@jitterted@sfba.social avatar

I continue to find ChatGPT and the like to not be very helpful for writing more than a little bit of code, and even there, it's mostly helpful in areas where it's with APIs that I'm familiar with, but don't use enough to be fluent in. I also find it useful in suggesting alternatives for solutions I already have, but even there it's still pretty limited (e.g., my attempts to get it to write better ArchUnit tests that don't include my test code that didn't include the "obvious" solution).

I find it much more useful in clarifying my understanding (and therefore my explanations) of concepts. For example, I've been thinking a lot about Mental Models vs. Heuristics and where the line is. For example, are "DRY" and "SOLID" mental models or heuristics? How about "OOP"? Or, more specifically: do I model my countdown timer with pause support as a "bag of seconds that get consumed" or as "end time gets postponed by amount of pause time".

jitterted, to random
@jitterted@sfba.social avatar

Another interesting thing that happened when digging into #AssertJ for my talk is that I now have 3 issues to file, along with planned PRs for each of them.

I also have a renewed motivation to write more domain-specific custom asserts: they really make reading tests so much easier.

jitterted, to random
@jitterted@sfba.social avatar

Hi @grimalkina, was reading your "belonging" article https://www.drcathicks.com/post/sense-of-belonging-and-software-teams and was wondering if you've written/researched about how it relates to Psychological Safety? They seem really similar?

jitterted, to languagelearning
@jitterted@sfba.social avatar

This book chapter is very relevant to me as I think about expanding JitterTed's #TDD Game (https://tddga.me)...

"Board Games as Part of Effective Game-Based Learning Strategies"

https://link.springer.com/referenceworkentry/10.1007/978-3-319-17461-7_142

#EducationalGames #Learning

jitterted, to logseq
@jitterted@sfba.social avatar

Ugh. So frustrated with iClouds unreliable syncing across devices. I use @logseq, but it relies on iCloud doing its job. Which it ain't.

Looks like I'll have to move to Dropbox for syncing, which means reinstalling it everywhere since there's no config setting (that I can find) to tell it where to look for its files.

jitterted, to Java
@jitterted@sfba.social avatar

I think one of the biggest shifts over the past year in how I write server-side generated HTML (Thymeleaf + Spring MVC) is trying to completely avoid any decision-making logic (is there any other kind? 😏) in the template, and push all of the logic into the back-end (Controller or DTO).

This may not always be possible, but it does mean that such logic is much easier to test (and therefore test-drive).

Mike Rizzi and I have been live coding a small app where today, we did exactly that. You can see the whole playlist (we're up to 5 episodes) here: https://www.youtube.com/playlist?list=PLBHctPrH7Z2-nyaHBETfklyqddmEZUp95

Join my Discord community to talk about these episodes, #Java coding, design, architecture, #TDD, #DDD, and more: https://ted.dev/discord

jitterted, to random
@jitterted@sfba.social avatar

I love having GPT generate code. Not. It stops just before finishing everything, then when you ask it to finish, it does. But now that code is incompatible with the code it just wrote. Back and forth, back and forth.

But it is really good at creating mediocre code that is chock full of opportunities to refactor!

jitterted, to Java
@jitterted@sfba.social avatar

So much hate for the new Java String Templates (which looks to be final in #Java #JDK 22!).

Ignore the hate, get on with upgrading to the latest JDK. 😁

jitterted, to random
@jitterted@sfba.social avatar

Some day I hope to write a book called "Useful Design Patterns that aren't from the Gang of Four".

So tired of retreads over the same ground (and, TBH, often not very good ones).

jitterted, to random
@jitterted@sfba.social avatar

Health insurance really doesn't have to be this hard. Spent 15 minutes in chat to finally get: "fill out this PDF".

Them: fill out an attestation form

Me: what's an attestation form?

Them: It's like an affidavit

(rolls eyes) Me: what's an affidavit?

Them: It's a form we have on our web site.

Me: I don't see it. Can you give me a direct link?

Them: https://coveredca.com

Me (ending up at the forms page): What form, there are dozens?

Them: It is almost at the bottom of the page.

(sighing) Me: which one? can you give me the title?

Them: Attestation of Medicare Eligibility and Enrollment Status

(smh) Me: You mean https://www.coveredca.com/pdfs/Medicare_Attestation_Form.pdf ?

-- end chat --

Like WTH? Why not just give me that direct link in the first place??? Sheesh.

jitterted, to random
@jitterted@sfba.social avatar

I never understood the request for "empirical studies" to prove this or that in software development, e.g.:

"Show me an unbiased experiment with measurable outcomes that proves that TDD makes a dev team more productive. Until then, I'll continue doing what I do now."

Let's flip that around:

"Show me an unbiased experiment with measurable outcomes that proves doing [whatever your current process is] makes a dev team more productive than doing TDD."

Unless you can do those experiments (which are extremely difficult to do), you can't use the claim that since there is no "TDD works better" study, that means that it must be worse than what you're currently doing. That's what philosophers call an "appeal to ignorance".

TDD might be worse; you might have a great process! (In which case, I'd love to try it out!) On the other hand, TDD might be better, and you're missing out on improving. Without the (possibly impossible) empirical evidence, you have to try it and see.

#Experience #TDD

jitterted, to random
@jitterted@sfba.social avatar

Quick summary of Cognitive Load from the Learning Scientists: https://www.learningscientists.org/blog/2023/7/6

Pay attention to the "element interactivity" part of cognitive load. We're not good at keeping track of and paying attention to too many things at the same time.

This is where learning your editor's shortcut keys and practicing them until they're automatic (don't require thought) can help: you can keep your (scarce) attention on the higher-level problem/solution and not on "where is that Extract Method option?"

jitterted, to random
@jitterted@sfba.social avatar

Using #htmx in my apps has let me turn the "no logic in HTML templates" all the way up to 11.

I am now very aware (and suspicious) of any logic being evaluated, or even things like string concatenation, being done in HTML templates.

I may have to write a tool to warn me (or fail a test!) if I start using th:if, th:unless, or anything that looks like a method call in my Thymeleaf templates.

jitterted, to random
@jitterted@sfba.social avatar

In teaching concepts, you can almost never have too many examples.

I'm often frustrated with books, videos, courses, etc., that use either no examples, or examples that have no meaning (those that name things "foo", "bar", or "a", "b", and "c").

The point of examples is to build up the concept by providing concrete things that the learner can relate to. So, also, examples need to relate to the knowledge the learner already has. Learners outside the USA will likely have a hard time understanding your Baseball example. (And I'd have a hard time understanding your Cricket-based example.)

jitterted, to random
@jitterted@sfba.social avatar

Took me almost 2 hours to finally wrangle some HTML into what I wanted. It's frustrating only because I don't do CSS from scratch very often and there's so many tiny little things one has to know separately and how they work together.

Luckily the browser tools have gotten good enough to provide quick feedback along with help for grid and flex layouts. Juggling align-content and justify-content and so on is so much easier with immediate feedback.

jitterted, to random
@jitterted@sfba.social avatar

If you're at the Kansas City Developer Conference (kcdc.info) next week, I'm bringing a couple of copies of this with me. Find me, and let's play!

jitterted, to random
@jitterted@sfba.social avatar

Suffering from yet another power outage 😡

What’s PG&E’s excuse this time, weather is too nice??

jitterted, to Java
@jitterted@sfba.social avatar

On today's Solo stream, I'll be working on the and WebSocket portion of my Ensemble Rotation Timer.

Join me in about 25 minutes (11:30am PST | 7:30pm UTC) on Twitch: https://jitterted.stream

jitterted, to running
@jitterted@sfba.social avatar

Finished my Half-Marathon race today in a better-than-expected time of about 2h25m. Was able to keep a pretty consistent pace, until the last mile where I ran the fastest mile of the whole event!

(Mile 12 was slow because I had to stop and fix the cushioning in my shoe.)

#Running #HalfMarathon

jitterted, to random
@jitterted@sfba.social avatar

As someone who produces a 100s of hours of screencasts (pre-recorded and live), a tool that could do this for me would be incredible. https://neverworkintheory.org/2023/05/07/workflow-extraction-from-screencasts.html (via @gvwilson)

jitterted, to Java
@jitterted@sfba.social avatar

🚨 #LiveCoding Alert 🚨

Working solo on some final Ensemble Timer features using #Java #SpringBoot and a bit of #htmx.

Join me now on Twitch at https://jitterted.stream

jitterted, to random
@jitterted@sfba.social avatar

Friends don't let friends create forms with separate boxes for First and Last names.

#StopTheFormIndustrialComplex

jitterted, to random
@jitterted@sfba.social avatar

I've been reflecting on LLM tools in IDES, like Sourcegraph's Cody and JetBrains's AI Assistant, and I think that they (and other LLMs targeted for code generation) suffer from the same problem:

The inability to FORGET.

Unless you have complete control over the data used to train the LLMs, you're going to get old solutions for problems that may not exist anymore, because languages, libraries, and frameworks eventually deprecate and remove code, come up with better (or worse, but different) ways to do things, etc.

It's a bit frustrating to get a solution that works, but is the "old" way of doing things (indexed for loop instead of a for-each, or instead of a stream). It's even worse when the solution worked 3 years ago, but no longer does, or worse is a mixture of modern and obsolete code, making it difficult to separate the two (LLMs are entirely based on "mixing", so this happens frequently).

I'm pretty sure the solution for these kinds of tools is to be trained on better (or at least more recent) data.

jitterted, to random
@jitterted@sfba.social avatar

These days I'm trying to differentiate between tests where dependencies (used by the Code Under Test) can't (and shouldn't) be replaced by Test Doubles—inside the Domain layer¹—and those that are replaceable (Use Case/Application layer), where the concrete version of the dependency accesses hardware or I/O.

¹ These are almost always part of an Aggregate (graph of objects).

  • All
  • Subscribed
  • Moderated
  • Favorites
  • JUstTest
  • ngwrru68w68
  • everett
  • InstantRegret
  • magazineikmin
  • thenastyranch
  • rosin
  • GTA5RPClips
  • Durango
  • Youngstown
  • slotface
  • khanakhh
  • kavyap
  • DreamBathrooms
  • provamag3
  • ethstaker
  • osvaldo12
  • tester
  • cubers
  • cisconetworking
  • mdbf
  • tacticalgear
  • modclub
  • Leos
  • anitta
  • normalnudes
  • megavids
  • lostlight
  • All magazines