D. Ben Knoble

Leveling up as a developer - the journey is important too!

Learn a variety of programming paradigms:

Write an application in a prototype-based language

I co-wrote limchess with a friend of mine for UNC Chapel Hill’s Comp 580 (Enabling Technology). The project is mostly JavaScript and leans heavily on jQuery to bring chess to the accessible world of limited-input devices.

I’ve since written other JavaScript, mostly in small chunks (for example, the Frosthaven Manager has a web server. I’m hitting some web UI at work with Vue, though.

Write an application in an object-oriented language

For AP Computer Science (high school), I implemented a game called “Baffles” in Java. One shoots lasers into a grid and guesses where in the grid are located “mirrors” that deflect the laser.

I also wrote a compiler for a subset of Java in Java. So much Java…

There’s more: check out prolog-java.

My current team at work operates mostly Java SpringBoot services.

Write an application in a logic programming language

Write an application in a functional language

During my time in a pilot for Principles of Programming, I built a Git terminal and web client in Clojure. The previous year, I wrote a simulator for a type of computer called “Intcode” in Standard ML (in addition to a bunch of other small programs).

I also built loner, an LL(1) checker and context-free-grammar library, in Scala.

I started on an incomplete formal-languages library and application in Clojure, and I have a few more ideas for which SML or Haskell might be well-suited.

I wrote smlnj-parser-style, a small static-analysis library for UNC’s Comp 524 (Programming Language Concepts).

The Frosthaven Manager is a large functional program thanks to GUI Easy.

Write an application in Forth

Write a program in assembly language

I wrote many MIPS programs for Comp 411 at UNC Chapel Hill (Computer Organization).

I recently wrote a MIPS interpreter in MIPS for Comp 541 (Digital Logic). More information on mips2 on GitHub.

Write an application using the Actor model

Experience the ins and outs of programming for different platforms:

Write a nontrivial web app

Write a realtime system

Write a nontrivial mobile app

Write an embedded app

Write a nontrivial desktop app

I proudly present the Frosthaven Manager, a cross-platform desktop application for managing scenarios during the legacy game Frosthaven. While it is functional (we’ve played over a year’s worth of Frosthaven games using my application), there are many more feature to build!

Enhance your understanding of the building blocks that we use as developers:

Wrap an existing library to provide a better (more pleasant) user experience

Write a testing framework

Write an application or framework that provides a plugin model

Write a networking client (e.g., HTTP, FTP)

Write a programming language

While at CapitalOne, I wrote a small language to generate necessary documents for database migrations my team performed. I wrote a larger language that combined general-purpose programming with a specific (HTTP/S) API to make controlling Kafka clusters easier.

I wrote a Lisp interpreter in Java for UNC Chapel Hill’s Comp 524 (Programming Language Concepts). Previously, I wrote a compiler for a subset of Java (also in Java) for Comp 520 (Compilers).

The Frosthaven Manager includes some restricted programming languages for game data.

I have grander plans, though.

Write a device driver

Write a B-tree database

Enlighten yourself with koans, katas, and the wisdom of ages:

Read SICP and complete all the exercises

Attend a code retreat

Complete the programming koans for a language that you want to learn

Complete five code katas

Program in the open:

Perform a Refactotum of an open source project

Publish an open source project

Where do I start? I’ll leave my projects for reference, and call loner one of my earliest “good” ones. Loner deals with the LL(1) computation on context-free grammars.

Have a patch accepted

While my contributions to Roslyn probably count here too (they were a patch), I figured I would highlight another small contribution that resulted in a new feature: I added a new prompt placeholder to gitsh.

Contribute to an open source project

There it is, my first “real” open-source contribution. I had been lurking in the Roslyn team’s commits and issues for a while—at the time, I was very interested in the new C# compiler—and I discovered and fixed an issue with the use of shell variables. Veterans will likely recognize the quoting issue being resolved.

Earn commit rights on a significant open-source project

I became a maintainer of dracula/vim, which I consider to be a significant open-source project. That doesn’t mean there won’t be others though :).

Learn by teaching others:

Present at a local user group

I presented becoming a git wizard to the Pearl Hacks 2020 Hackathon. It was my attempt to bring git to a beginner-friendly environment and explore the core concepts (immutable trees of information, collaboration, etc.) in a practical way.

I also gave my FUNARCH 2023 talk on GUI Easy to Amperity’s Clojure meetup.

Publish a tutorial

Publish a constructive code review of an open source project

Present a lightning talk

I presented a lightning talk on Vim to other Capital One TDPs.

I also presented a lightning talk on the importance of Git commit messages; specifically, I advocated for details about why changes are being made.

Deliver a training course

I run weekly Git training at work involving 30-minute guided office hour-style sessions and recorded shorts (5 minutes or less). I cover how to use various Git tools, why they are important, how they are built. I also include social content on open source stewardship, the importance of commit hygiene and best practices, and PR reviews.

Present at a conference

Write a programming book