Jake CoffmanSoftware Developer
Hi, I'm Jake Coffman and I am a Software Developer in St. Louis Missouri.
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!
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.
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
2-Player web-based game where you try to outgrow your opponent. Play against a bot I wrote for the CodinGame Spring 2021 Challenge.
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.
A multi-player game created with Unity. Think Wii Tanks but online, and with mouse and keyboard.
Another Tank Game but written from scratch in Go. I used no game engine, had to learn OpenGL and ported Chipmunk2D for this project.
Multi-player game of intrigue. This is a good game to play over web-chat during a pandemic.
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 is an Android app no longer in Google Play, but it allowed you to friend people and request their location.
camcontrol is a Qt app with embedded VLC player to open and control multiple Amcrest cameras at once
One of my first open source contributions, an Arduino emailed me when my door opened
I used to be obsessed with making a better Jenkins. This was an early attempt using Go, with AngularJS on the frontend.
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.