Tales from the jar side: Electronic archeology, living "in between", and other topics
The "in between" sounds like "the upside down" or even "down under", but it's neither
Welcome to Tales from the jar side, the Kousen IT newsletter, for the week of September 6 - 13, 2020. This week I taught my Managing Your Manager course on the O’Reilly Learning Platform, gave my Functional Modern Java NFJS Virtual Workshop, and gave four talks on the first of three NFJS Virtual Tour events over the next few months. I also gave my Functional Programming in Java, Groovy, and Kotlin talk for the Madrid Groovy & Grails User Group.
The talk at the Madrid GUG was a lot of fun, though I must admit I’m a bit sad I didn’t get to travel there. I’ve never been to Spain*, but I’d love to go some day.
(*Neither have I been to Oklahoma, which is one of only about seven states haven’t visited, but if you now have Three Dog Night playing in your head, I’ll just say you’re old and you’re welcome. I wasn’t born in Oklahoma, either, but I really don’t remember.)
Part of the fun was that a few people I know, like Sergio del Amo, Iván López, and the indefatigable Szymon Stepniak, all managed to join the Zoom call.
I was going to post the link to the video recording, but it’s apparently still private at the moment. I’ll post it in next week’s newsletter if that changes.
Since it was a Groovy user group, I spent more time on Groovy than I normally do. I showed once again the Groovy snippet I included in last week’s newsletter:
Speaking of that service, back in December of 2019 I wrote a blog post that illustrated how to access all the astro services provided by Open Notify. Probably the best result to come out of that is when John O’Reilly created his own Kotlin multi-platform app, called People In Space, based on the same service. This week he pushed out an update to that project:
Honestly, the best thing about writing my original blog post is that it led me to John’s excellent work. I highly recommend you follow him.
Electronic Archeology
As long as I’m referencing other people, here’s a tweet from Trisha Gee:
To continue the conversation, I want to say both “Hi Trisha!” and mention another tweet she sent about her latest blog post:
I agree with her that it’s important to learn how to read other people’s code, because we all spend a lot more time reading code than writing it. In fact, I have a Hot Take(TM) on this that someday I’ll flesh out into a real blog post, but this wasn’t the week for that. The basic idea is about an area I like to call electronic archeology.
Electronic archeology is when you look at code and infer something about the lives of the developers who wrote it. Like real archeologists, you’re peeling away the layers to learn how the developers worked, what they worshiped (memory vs cycles, etc), and other interesting facets of their lives.
I’ll give one simple example here, from my experiences with Java. First, if you’ve ever seen Java code like this:
then you can be pretty sure the developer started their career writing C. In C, an “if” statement can take any value as an argument, not just (as in Java) a boolean. If a programmer meant to write “if (x == 5)” and accidentally dropped an equals sign, the result would be an assignment instead of an equality test. In Java, that wouldn’t compile, but in C it would, and the result value (5) is non-zero, which evaluates to true and the resulting block executes. That’s a tough bug to find, so C programmers learn to protect themselves by writing “5 == x” instead, because if you drop an equals sign in that expression, the code no longer compiles at all and you find the error right away.
I call code like that “Speaking Java with a C accent,” because the C influence is so obvious.
Someday I’ll collect as many of those observations as I can and add them to a blog post, but this was already a busy week so it didn’t happen yet. If you have any suggestions, though, please send them along. :)
Living In The In-Between
I worked hard this week on my Managing Your Manager book, but the experience was very frustrating. To explain why, I have to tell a bit of a story.
When I was an undergraduate (during the late Cretaceous period), I was a double major. I attended MIT, and there you selected a major at the end of your freshman year. The choice wasn’t binding, thank goodness. I think I went through half the departments at the university before I settled on one, and I knew I was never going to go for only one. I planned all along to be a double major.
The cliché I used to say at the time was, “as rare as a sophomore who didn’t plan to double major” vs “as rare as a senior who does”. Everybody I knew considered double majoring, and the double of choice was usually mathematics. I seem to remember that over a third of all math majors were double majors with something else. Math was a particularly easy double in terms of the basic requirements — you just needed eight courses that were essentially different, that spanned a few specified areas, and were beyond basic calculus and differential equations. Once you started picking one from column A and one from column B (like, I could use a statistics course, and linear algebra is really useful, and I might as well find out what analysis is, and there’s a good applied math for engineers course, and so on), you were nearly there. Just overload a semester or two…
… and yeah, the word “just” is doing a lot of work in that sentence, but I was young and even more foolish than I am now.
Part of the reason I double-majored was because I was interested in all those topics. Another part was I’ve always been trying to collect credentials. I figured I was going to take roughly the same number of courses anyway, so I might as well get the extra degree. I also thought it would make my GPA look better, since, again, I didn’t expect to perform any better or worse either way, but from outside it would look like I must have worked harder. I also liked the idea that I was paying half of what all the single-majors were paying for their degrees.
But there was another reason to double-major, and it illustrates how much of my technical career, and even my life, has gone. I was planning to live “in between.”
I was the only person my year whose double combined mechanical engineering and mathematics. That was a very unusual pairing. Physics and math happened all the time, for obvious reasons. Humanities and anything else went together a lot as well, because you didn’t normally enroll at MIT to get an art/music/literature degree unless it was a double major with something technical. A double with economics was pretty common, too, because they still did math and problem sets, and technical people understood how to handle that. The duo of electrical engineering and math was very common, too; probably the most common of the engineering-technical double majors.
So why pick mechanical engineering and math? That was my way of being a physics major without majoring in physics. I wanted to live in between those two and come at physics from both directions.
Why not just major in physics in the first place? My parents really didn’t want me to, because I’d always talked about being an astrophysicist and they were worried about me being unemployed. They pushed hard to get me to pick an engineering field as an undergraduate. They argued I could always go to graduate school in physics. Whether that was true or not I couldn’t say.
The other reason I liked my ME/math double is that I thought I would be unusual on each side, and therefore have a bit of an advantage. Among the ME majors, I was really good at math. Among the math majors, I had a solid grounding in hardware. I wasn’t anywhere near as good at ME and the really talented ME people, and it didn’t take me long to realize I couldn’t compete at all with the star mathematicians. If you’ve seen A Beautiful Mind, you might recall that John Nash went to Princeton undergrad and MIT graduate school — a path I followed in reverse, but still. Those sorts of geniuses weren’t common at MIT, but they weren’t unheard of either, and a lot of the really brilliant people majored in math. All it took was one course in “elementary” analysis to show me how outclassed I was among the “real” math majors. In fact, the lowest grade I ever got on a test was as a first-term junior, on the midterm exam in Abstract Algebra. Out of 57 possible points (weird, but there you are), class average was 19. I got a 7. Ugh.
(By junior year I knew how to handle that. I met with the professor, did a lot of extra work, made sure I did all the problem sets, and somehow eked out a B. But it was ugly, and I was in survival mode the whole time.)
In the end, after several more “adventures” I may discuss here someday, I wound up with my two degrees. Living in the “in between” worked, but it was stressful, because I never truly felt a part of either side.
I continued the process in graduate school. My thesis topic was in — and I loved this name — transonic aeroelasticity. What the heck is that? It meant simulating vibrating wings with shock waves oscillating on them. I borrowed a powerful computational aerodynamics code from one professor and combined with with simple mechanical model from another, and watched the interactions.
As yet another aside, I found it highly amusing that just before I started working on transonic aerodynamics and vibrations, Paul McCartney put out this album:
Featuring Silly Love Songs and Let 'Em In, two of the most critically loathed songs in McCartney’s entire catalog
If you think that wasn’t a slide from my thesis defense, you don’t know me very well.
To make a long story short (yeah, I know, way too late), much of my life has been in the “in between”. For a software developer, I’m a really good tenor. For a singer, I’m a solid writer. For a writer, I’m a very good software instructor.
But — and this, at long last, gets back to this issue this week — for a writer, am I a good enough writer? I’m currently writing a book, called Managing Your Manager, about dealing with management as a working professional. I don’t have software to fall back on, and there’s almost nothing written about the topics I’ve chosen with my particular take on them. How can I write about that with any sense of authority?
This week it felt like everything I wrote was lousy. I made major, structural changes to a few chapters, then deleted them. I tried moving chapters around and smoothing out the transitions, and that only partly worked.
When writing about dealing with managers, I feel as “in between” as ever, but right now that feels like I’m opening up myself to criticism from both sides. Can I convince both the working professionals and their managers that I have something worthwhile to say?
In the end, I’m sure the answer will be, “yeah, probably,” but this week it was hard to get there. All this stuff is coming from my own opinions and experiences, though, and sometimes it’s hard to feel they’re in any sense universal (especially when I have a tendency to write long, involved sentences with embedded parentheticals).
I’ll keep plugging away, though. This week the goal is to have enough of the revisions done so that the book can go out to reviewers for the first time, and then I’ll know much more.
Miscellaneous
Here are some random thoughts I had during the week that don’t fit anywhere else:
My left shoulder was sore again this week, but this time for a good reason: I got my annual flu shot. I went to my local grocery store’s pharmacy for that, which is very convenient. The flu vaccine is also free, which is one of the very few good features of the disastrous health care system in this country.
When the number of COVID-19 cases spikes again in about 12 days, which avoidable event will be more to blame: the start of the NFL season, or the opening of schools that insist on getting students back on campus? And yes, that’s both a rhetorical question. I’m watching the NFL again, partly out of habit and partly with a morbid fascination at the inevitability of new cases. All the interior linemen bang into each other and breathe heavily on every play. What could go wrong?
Obviously the answer to the blame question will be “the schools opening,” but will that mean the NFL gets away with it? Will they be able to argue they had nothing to do with the next spike? I certainly hope not, though I’ll be watching that, too.
I’ll admit I’m interested in seeing how Tom Brady does in Tampa Bay this year. (Spoiler alert: okay, but meh in game 1.) Like most Patriots fans, I think Belichick did the right thing in letting Brady go. He wasn’t worth another major contract. I also believe he’ll do reasonably well this year. But for how long, and how far can he take the Bucs? I guess we’ll see. I’m rooting for him.
Speaking of the NFL, I only watch games through the RedZone channel. I love that channel, with its complete lack of commercials and the way they switch between games to show all the good parts. I must admit, however, they’re charging me money to fix problems they themselves introduced.
I think of TSA PreCheck the exact same way.
I had an online meeting early in the week, and afterwards I warned my wife that I was coming downstairs in “my Zoom outfit”. She understood what that meant right away, and I expect you all do as well. :)
JUnit released version 5.7 today, after I just did a presentation on it Friday. They finally moved parameterized tests to stable, which is awesome. FWIW, I already updated my workshop code to the new version with no problems.
Finally, I have to say that I feel terrible for those people affected by horrible fires on the west coast. I hate it, and I hate even more that this isn’t just the new normal, but likely to get worse every year. Beyond that, September seems have put everybody on edge. More and more people are having trouble concentrating, much less doing anything productive, and I know that’s going to get worse as we approach November.
I’m trying to focus on the few things I can control, like how I treat people. Keep in mind one of the biggest lessons taught to us by Chadwick Boseman: everyone is going through something, but true heroes somehow manage to stay kind, strong, and helpful anyway. I’m right there with you, trying my best.
Last week:
Managing Your Manager on the O’Reilly Learning Platform
Functional Modern Java, an NFJS Virtual Workshop
Presentation at the Madrid Groovy Users Group
NFJS Virtual Tour stop #1. Stops 2 and 3 are in October and November.
This week:
Introduction to Gradle, Tuesday/Wednesday, online from Gradle, Inc., with newly revised materials :)
Reactive Spring and Spring Boot, Thursday, on the O’Reilly Learning Platform
Beyond Managing Your Manager, Friday, an NFJS Virtual Workshop