jakecoffman.com

Jake Coffman

Software Developer

Hello, world!

Hi, I'm Jake Coffman and I am a Software Developer in St. Louis Missouri.

I have a Bachelors in Computer Science and have worked professionally in C++, Python, JavaScript, Java, Groovy, Ruby, Go, and C#.

Experience

I started out working on low level security libraries and various security related GUIs at Cerner.

Then I moved on to doing low level network programming on a 3-D distributed simulation of fighter jets at Boeing. I started to pick up web development while I was there, too.

Next I worked at a startup called Appistry where I helped create an ETL system that took HL7 data and transformed it into SQL. I created a search interface for that data and various other "Big Data" web interfaces.

After that, I worked at World Wide Technology for 7 years! I was the principal developer behind the ATC Lab Gateway, and built the backend of the custom CMS that powers wwt.com.

Now I work for GitHub where I work on Dependabot. You can find me doing OSS on dependabot-core!

Interests

I like game development and have been working on games in my free time. Game development is refreshing and completely unlike web development which I have been doing for my day job. Working in 2D and 3D with physics engines is a fun challenge.

I also like web development as a way to expose what I do to potentially billions of people.

Projects

This is a small selection of projects that I have worked on to learn new skills or scratch an itch.

There are many more projects over at my Github: https://github.com/jakecoffman

Tree Game

Tree Game

2-Player web-based game where you try to outgrow your opponent. Play against a bot I wrote for the CodinGame Spring 2021 Challenge.

STL Devs

STL Devs

This is a site for discovering what open source work developers are doing in the Greater St. Louis region by harvesting public information from Github.

Tank Game

Tank Game

A multi-player game created with Unity. Think Wii Tanks but online, and with mouse and keyboard.

Tanklets

Tanklets

Another Tank Game but written from scratch in Go. I used no game engine, had to learn OpenGL and ported Chipmunk2D for this project.

fam

Another OpenGL game I am making to play with the kiddos.

Chipmunk Port

Chipmunk Port

Go port of the excellent Chipmunk2D, originally in C.

Matchtown

Matchtown

Online multi-player set finding card game.

Sudoku

Sudoku

Sudoku accessible for chin mice.

Colors

Colors

Local multi-player color matching game.

Memory

Memory

Local multi-player kid's game.

Spy Game

Spy Game

Multi-player game of intrigue. This is a good game to play over web-chat during a pandemic.

Guessy Word

Guessy Word

Multi-player word guessing game.

Carman

Carman

Local multi-player pacman style game. Plug in 4 controllers! Built with Phaserjs.

Rackbuilder

Rackbuilder

Hackathon project while I was at WWT. Built with Phaserjs.

Spring Challenge

Spring Challenge

Placed 112th out of 5,000 in an AI Pathfinding competition. This was my first time programming AI and my first coding competition.

Trusted Friend

Trusted Friend

Trusted Friend is an Android app no longer in Google Play, but it allowed you to friend people and request their location.

camcontrol

camcontrol

camcontrol is a Qt app with embedded VLC player to open and control multiple Amcrest cameras at once

Arduino Security

Arduino Security

One of my first open source contributions, an Arduino emailed me when my door opened

Gorunner

Gorunner

I used to be obsessed with making a better Jenkins. This was an early attempt using Go, with AngularJS on the frontend.

Video Tutorials

Video Tutorials

A long time ago I made programming video tutorials. It was a little experiment to see if I could make money off of it. Turns out no, but it was fun and I seemed to help a lot of people.

Q & A

What are your general thoughts about programming?

  • Statically typed languages got a bad reputation and now we are paying the price for having large dynamically typed applications that are difficult to refactor.
  • Just as pure OOP is not the answer, pure functional is not either.
  • Don't use Mongo unless you are using it to store documents that have no relationship, nor ever will have relationships.
  • ORMs will break down, be prepared to write queries by hand.
  • Don't rewrite your codebase or re-architect unless it's really a problem. You work for a business, add value.

What are your general thoughts about managing developers?

  • Sometimes meetings are a waste of time. Instead, write an email or message in a chat. Asynchronous communication should be preferred.
  • The reason you are calling so many meetings is probably because you don't write enough down.
  • Project managers aren't above developers, nor the other way around. We are equals and need to decide what gets done next. You manage customer expectations and I'll get things done.
  • Ideas are worthless without execution. Don't hire idea people if they can't bring the idea to reality.

Why do you use Go so much?

I like to use Go for my personal projects because it's simple to start a new project and code is easy, the syntax is simple is much easier than any other programming language out there. There definitely are some rough spots in the language such as lack of enums, but I find the trade-off is worth it.

How do you feel about language X or framework Y?

I think most languages and frameworks have redeeming factors so you won't hear me say I hate any particular one. The most challenging part of software is choosing the right stack for the problem at hand.

I also think it's important to not limit your learning to just a single language or framework. You can learn so much more about your favorite language just by learning a different one.

Favorite OS for developing?

I have used Mac, Windows, and Linux desktops successfully in developing cross platform applications.

I personally prefer Windows due to the low cost of hardware and have found WSL to be quite nice in filling in the gaps.

2022 update - I now prefer Mac with the M1 chip 🙂

Typically my Linux desktops last about 6 months before I do an upgrade that breaks everything and I go back to Windows. Linux on the Desktop is still to immature and tends to be more of a hobby than an OS.

Thoughts on testing?

Code that will go to production should always be tested, but I don't think every function should be tested in isolation. I prefer testing functionality (or behaviors), APIs, exported functions, and testing against a real database. These kinds of tests are much more valuable and won't break when you go to change the implementation, but gives a sense of security that things are still working.

Contact