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.
I then moved to 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.
Now I am at World Wide Technology where I work on a variety of web-based technologies. I am the principal developer behind the ATC Lab Gateway and related technologies. I have open sourced a port of Apache Guacamole's guacamole-client.
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
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?
- Most meetings are a waste and should be resisted at all costs. Exceptions: meetings with clients or meeting with executives that have little to no time
- 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.
- Agile is not for developers, it's for customers and project management.
- Ideas are worthless. Execution is everything.
Why do you use Go so much?
I like to use Go for my personal projects because it's simple to get running and deployment is far and away much easier than any other programming language out there. There definitely are some rough spots in the language such as lack of generics, 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.
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.
Why don't your personal projects have more tests?
Most of them are proof of concepts or “for fun” and since writing tests isn't fun I don't. Code without tests is not production ready so I don't recommend using most of my projects in production.
If ever a project takes off, the first thing I would do is write tests.