Tales from the jar side: Android challenges, Personality typing, and Anakin/Padme memes
I left out the Batman/Catwoman meme that happened this week because this is a family(ish) newsletter. Feel free to Google it if you're curious, but be warned, it's NSFW (and pretty funny)
Welcome, jarheads, to Tales from the jar side, the Kousen IT newsletter, for the week of June 13 - 20, 2021. This week I taught a Basic Android course on the O’Reilly Learning Platform and moved my new book Help Your Boss Help You along in the production process.
It’s Father’s Day today, so I thought I would include this picture of me with my father, Morton Kousen, taken back in April, 2013.
He passed away in August of 2015 after a long battle with cancer. I still think about him a lot, but the memories are pleasant. Like most fathers and sons, our relationship was complicated, but we worked everything out eventually. If you’re interested in the details, see this blog post I wrote at the time.
If you’re not one already, please consider becoming a jarhead by subscribing to Tales from the jar side using this link:
Android, Yet Again
Each time I teach an Android training course, I write about it here, because the challenges are so big and ever changing. As a reminder, when teaching the fundamentals of Android, I have to explain:
Activities and the activity lifecycle
Fragments
Layouts, including ConstraintLayout, LinearLayout, FrameLayout, and possibly others
Intents, both explicit and implicit
Menus and the AppBar
Jetpack components and the guide to application architecture
ViewModel and the MVVM architecture
The Navigation component
View binding and data binding
LiveData and the Observer design pattern
Persistence with Room
Accessing remote services using Retrofit
The Gradle build files used by Android
And oh yeah, the whole freakin’ Kotlin programming language, including data classes, top-level functions, companion objects, collections, coroutines, and lots more
It may not be obvious, but I say this as an professional instructor with decades of experience: that’s a lot. Worse, I only have about eight hours to cover everything. Worse, Google keeps changing everything, and while they clearly try to update the main Android website, lots of the examples and codelabs are either out of date or are superseded by new recommendations.
There are also multiple, somewhat conflicting online courses describing everything. This page lists the codelab-based “New! Android Basics in Kotlin”, and the worst part about it is that they imply it’s easy or simple. It’s neither. In fact, the goal of my training course is to prepare the students to actually go through these codelabs at the students’ own pace.
There are four units in that course, with the promise that more units are coming soon. I have no idea when soon will be, but it’s been months and I haven’t seen any changes. In that course, the most interesting unit is number 3, which covers the Navigation component, ViewModel, and LiveData. During this week’s training course I decided to try to incorporate the basic Navigation codelab as part of my course.
It worked and it didn’t. The code was fine, and we spent our time walking through the solutions rather than coding everything, but as with all Android examples the code was way more complicated than it appeared at first. Despite my best efforts I still got too bogged down on it, which cost too much time. Everything worked out (I think — you’d really have to ask the students), but if I’m going to do that again I have to find a way to streamline it even more. To make lemonade out of those lemons, at least it’s a realistic demonstration that even the simplest possible Android app gets complicated quickly.
Best (?) of all, next month the Jetpack Compose component goes to 1.0, which will drastically change the user interface layer and impact almost everything. The Google course doesn’t say anything about that yet, and boy are the students in for a surprise when that happens.
On the plus side, it appears that inside Jetpack Compose you can use something called LazyColumn instead of RecyclerView. Since my attitude toward RecyclerView is we need to kill it by fire, that in itself will be enough reason for me to upgrade.
The people I really feel sorry for are the book authors. Michael Fazio just published Kotlin and Android Development on the Pragmatic Bookshelf, and Dawn and Dave Griffiths are hard at work on the third edition of Head First Android Development (if either of the Griffiths are reading this — sorry, I know I owe you a review of more chapters; that’s coming soon), and neither book will have more than a simple chapter on Compose. Brutal. The only person who has any chance of keeping up is the indefatigable Mark Murphy of commonsware.com, whose Warescription allows him to update all his books every four to eight weeks. That by itself is worth the $20 every six months, and the books are well-written and helpful, too.
Just so I have a code example this week, here’s my AstroService.kt file inside my HelloKotlinAndroid GitHub repository, which shows how I use Retrofit to access the restful web service at Open Notify to see how many astronauts are in space at the moment.
The example combines a constant field with an interface that contains a suspend function (so you access the service off the UI thread), a builder, and a singleton object instantiated using the lazy property delegate. This is about the simplest way I’ve been been able to use Retrofit to access a service, and it actually is simple once you get used to it, but there’s still clearly a learning curve involved.
Help Your Boss Help You Copy Edit
Speaking of books, I got the results back from the copy editor for Help Your Boss Help You. Fortunately the number of questions was quite manageable and I answered them all. The only one we didn’t necessarily agree on was that at the beginning of the chapter on Communicating More Effectively, where I included a quote by George Box:
All models are wrong, but some are useful.
The quote is famous and appropriate, and the copyeditor didn’t object to it itself. The only question she had is that no other chapter in the book started with an offset quote like that. She suggested moving it into the text of the chapter. I actually prefer it this way, as that chapter gets into personality typing systems as a way of structuring your arguments, which is at best a controversial notion.
In the chapter I discuss both the dreaded Myers-Briggs Type Indicator (which I’ve used, but don’t actually recommend) and the Keirsey Temperament Sorter (which really has helped me in my career). Either way, the results are intended to be used only in figuring out how to make your arguments in a way most likely to be heard and understood.
As the quote says, all models are wrong, but some are useful. To see how they can be misused, see the documentary on HBO Max called Persona: The Dark Truth Behind Personality Tests. I watched it with some trepidation. I knew in order to be worthy of a documentary the writers were going to have to say something controversial, and they did. They spent a lot of time talking about how some companies are using personality typing systems (MBTI and others) as an automated interview screen for prospective new hires.
I can’t imagine a worse idea. People who didn’t get through the screen have every right to be angry. Let me be clear on this point:
People are highly complex personalities who can and do adapt to changing circumstances.
Any type can do anything.
Sure, we all have preferences, and it can be helpful to know them. We’re all different at work from how we are at home, and we’re different with our friends than with family. The only application I’m recommending is to figure out how to be heard and understood. Heck, if the result of my whole chapter is your recognize an SJ Guardian with a checklist (you can never argue your way out of a checklist — you just have to give the person some reason to check you off), then my job is done.
Anyway, assuming my comments are accepted, we move to layout, and then to print. I’m still hoping the book will be available by the end of July, but we’ll see.
Tweets and Other Silliness
This week a meme went viral featuring Anakin and Padme from the Star Wars prequels, which seems odd given that the Attack of the Clones movie came out in 2002.
Here is a sample, based on the current Loki series on Disney+:
You can see how this can generalize:
I really liked this one:
That’s based on this Washington Post article called Scientists are teaching drones to hunt down human screams, which is supposedly about making it easier to find people trapped in a natural disaster. But yikes, there are entire movie franchises made about how that can go wrong.
Yeah, about that:
There were two other tweet threads I want to mention that went viral this week. I’ll just link to the first tweet in each, and you can follow them if you like.
One is about a poor fantasy football player who came in last in his league, and his punishment was to sit in a Waffle House for 24 hours. Every waffle he ate removed an hour from his sentence. He, of course, documented the experience:
Best quote: “Full of waffles but devoid of life.” Somehow I don’t think Waffle House will be adding that to their marketing campaigns.
The other was this absolutely charming thread about an elderly couple, where the wife asks her husband to go to the store and pick up some pound cake for dessert.
Follow that to the end. It’s a very pleasant experience.
In honor of Father’s Day, here’s my favorite dad joke of the week:
Although this one also rocked:
It helps to know that my brother’s name is Steve.
Finally, I have to finish with this, which was just too perfect:
After all, that’s why you’re here, right? If you enjoy it please feel free to share this (free!) weekly newsletter with your friends, family, or even any SJ Guardians you know with checklists.
As a reminder, you can see all my upcoming training courses on the O’Reilly Learning Platform here and all the upcoming NFJS Virtual Workshops here.
Last week:
Basic Android Development, on the O’Reilly Learning Platform
This week:
Reactive Spring, on the O’Reilly Learning Platform
Deep Dive Into Spring, an NFJS Virtual Workshop
Spring MVC, ditto