User Guide


Overview

I have a very unusual and eclectic background. There will be times where I’ll have gaps in my knowledge that’ll surprise you and, equally, times where I’ll have some seemingly-out-of-nowhere knowledge of some niche; it’ll be case-by-case. I’m also very direct, sometimes to a fault. But the good news is you never need to worry about being direct with me.

Strengths and weaknesses

Weaknesses

Known weaknesses

Verbosity

I’m very verbose, both in person and in text. (Look at the length of this User Guide, lmao.) This can be good if you want all the details, but it can also be bad, if what you’re looking for actually is the bird’s-eye view / executive summary. Don’t be shy about calling me out on this if what you’re looking for actually is the latter.

Over-reliance on “passion” as a driving force

We all want to be passionate about our work - but trust me, this is not one of those “listing what-is-actually-a-strength under your weaknesses to flatter yourself” things. When you’re very passion-driven, it can be hard to follow top-down priorities, as well as working on stuff that doesn’t get your juices flowing. These drawbacks do of course come with flip-sides that are advantageous (in certain circumstances), but there are definitely also weaknesses involved that are worth flagging. Mitigating them is a continuous work-in-progress. Don’t be afraid to call me out where more of that mitigation is necessary.

Triage

In connection to the above, I sometimes need to be nudged to make sure the right thing is at the top of my stack. NEVER hesitate to do this; err on the side of explicitness.

Relatedly, Slack > email.

Formatting & spelling OCD

I sometimes (who am I kidding: often) feel obsessively compelled to fix formatting and spelling nits that I come across. If it’s on your code or text, you may feel like I’m picking on you; please try to keep in mind that it’s ME, not you. I’m doing this to calm my own strangely-wired nerves down. I would like to blame this on my many years as a professor reading student work (see below), but the truth is I was like this even before that.

Unknown weaknesses

It would be an oxymoron to list anything here, but of course that hardly means this category is empty.

Strengths

Software design, programming languages, communication, teaching, quick learning.

I’m also a pretty diligent giver-of-credit. Do call me out on this if I’ve missed, though.

Neutral(-ish) things

  • I often think-by-talking (see Verbosity, above).
    • Occasionally, this will lead to me saying something that everyone but me already knew (because that was just me thinking through it), or even saying something that was just said by someone else in so many words. Rest assured, I’m not trying to steal anyone’s thunder, it’s just how I reason.
      • Fun fact: there’s actual cognitive psychology research that shows this mode of thinking is a real thing. Ask me about it if you’re interested.
  • I often need to “get my hands dirty” to really think through a problem/issue/question.
    • That means I’ll often ask for a concrete example when someone’s presenting an abstract concept, or want to code a proof-of-concept or toy example in order to wrap my mind around how something should be designed.
    • This doesn’t mean I don’t believe in top-down thinking or design; in fact I’m a strong believer in it. I just need to dirty my hands to start getting that thought process flowing.

Background

a screencap of IBM Cassette BASIC
pictured: IBM Cassette BASIC (source)

I’m a product of the generation where home PCs didn’t have hard-drives yet, couldn’t run very many games, and, when you turned them on without inserting a diskette (lol), they booted into an instance of IBM Cassette BASIC that was built into their ROM. So out of what must have been truly mind-bending levels of boredom, I started teaching myself to program when I was about 8 years old.

I got my first job as a software developer straight out of high school, in 1994, at Intel. I ended up working in the industry for a little over a decade, until around 2005. During that time span, I developed primarily in C, C++, Java, and Python.

In 2005, I left the industry for academia, where I worked as a theoretical linguist. I earned my PhD in 2011, and served as a faculty member from 2012 to 2022, most recently as an Associate Professor (with tenure) at the University of Maryland, from 2017 to 2022.

What’s perhaps less obvious from this is that even during my time as an academic, I continued to hone my programming skills, mostly by concocting an endless stream of software projects for myself to do for fun, and by keeping up with new programming languages & technologies as they emerged. I never really stopped being a programmer. I just acquired a second profession for a while :-)

Since 2022, I have worked as a Software Engineer at Sylabs Inc., as a Senior Software Engineer at ID.me, and as a Staff Software Engineer at GEICO Tech (my current position).

(As far as formal education goes: I have a Bachelors degree from Tel Aviv University, 2004, where I double-majored in Computer Science and in Linguistics; a Masters degree in Linguistics from Tel Aviv University, 2006; and a PhD in Linguistics from the Massachusetts Institute of Technology, 2011.)

A grab-bag of software/computing opinions and preferences

~ ~ ~

I like macOS and Linux in equal amounts, and which one of the two is my absolute fav varies on a day-by-day (sometimes hour-by-hour) basis. I don’t like Windows.

~ ~ ~

My favorite programming language (but see Note below) is Go, aka Golang, and has been for a couple of years now. What I like about Go:

  • Strongly typed language that nevertheless uses duck-typing instead of type-hierarchies 🤩
  • Goroutines 🚀
  • Go’s whole share-by-communicating (rather than communicate-by-sharing) approach to concurrency 📡
    • Really an inheritance (no pun intended) from Erlang, but Erlang lacks many of the other stuff on this list…

[!NOTE] There is really no such thing as “the best” programming language. Programming languages are tools, and tools are good/bad to the extent that they are suited for the task at hand. This means that for different tasks, different programming languages will be “the best.” So really, the list above is a list of reasons I prefer Go when all else is equal - which it never is - which means it’s a statement of aesthetic preferences and not much more.

~ ~ ~

I love functional programming. This might come as a surprise given that I just said Go, a (sort of) object-oriented programming language, is my favorite. I remedy this tension by making liberal use of the fantastic samber/lo package.

~ ~ ~

I like TDD (test-driven development). That doesn’t mean it’s suited to every situation or task, of course (see above, on programming languages). But I’ve generally found it to be a Very Good Thing.

~ ~ ~

Related to the previous: I think unit-tests for X should be part of the PR that introduces X. (Understanding that there may be organizational practices or pressures that militate against that; just stating my philosophy here.)

~ ~ ~

I’m a big believer in highly optimizing my own computing environment. I can talk your ear off about this. Some highlights:

  • I use the fish shell for interactive shells
  • tmux + tmuxinator
  • Shell aliases on top of shell aliases on top of shell aliases
    • Note: this one has the unfortunate downside that, when you ask me to copy-paste a command line from my terminal to yours, there’s a better-than-average chance it’ll rely on aliases that only I have. 😕
  • Clipboard history managers
  • Obsidian (markdown-based notetaker app extraordinaire)
  • If your editor doesn’t support multiple simultaneous cursors (“carets”) then it’s not an editor.
  • File-Over-App 4eva
  • Etc. etc.
    • No, seriously: there’s a LOT of et cetera here.