Welcome to jwillikers.com, where I like to put all of my handy admin and dev guides from my myriad of tinkering. My posts serve not only as convenient references for my future self, but also force me to learn and understand the different technologies I end up touching. Hopefully, the content here will help other tinkerers, technologists, and developers.
Here I take the opportunity to talk a bit about myself, my development experience, and interests.
The reasons I pursue a career in software engineering have continued to grow and evolve over time. Suffice it to say that I enjoy participating as part of a team to solve real and interesting problems. I find it important and fulfilling that these solutions positively impact the lives of others.
As a software engineer, I strive to write the least amount of simple and safe code required to complete a given task. Ideally, this amounts to writing no code at all because I’m able to discover that a perfectly adequate and tenable solution already exists.
In the sections which follow I describe my experience in the field.
Cross-platform Application Development
At my current day job, I wrangle C++ and CMake code to create functional, cross-platform graphical applications. Developing at a small company, my hands are in just about everything from project management and cross-platform application development to systems administration and licensing compliance. My focus here has been to learn how to write good C++ code, to improve the build system, and to implement both standard software engineering practices and agile development models.
It has been challenging to implement better practices and processes while both maintaining a large, legacy code-bas elacking any standards what-so-ever and adding high-quality code for new features. This is has been a phenomenal learning opportunity, in a trial-by-fire way. Such circumstances have bred in me a deep appreciation of the software engineering principles and development practices which foster the production of maintainable code. This endeavor has also lead me to understand how the process of writing good code is impacted by management, project planning, collaboration, communication, and even company culture.
Software Engineering Intern
Previously, I interned at a cyber security company which developed log-analyzing security software. This was my first real introduction to software engineering, where I had the privilege to be a part of the backend developer team. This is where I learned first-hand how the fundamental software engineering practices such as version control, testing, code-reviews, continuous integration, and deployment all fit together. My work their included Java, Python, and Awk development as well as work on the Gradle build-system and integrating deployment to Docker. I even underwent certification as a Scrum master.
Before that, I interned as a data analyst at a healthcare institution. This lead to lots of SQL development and digging through backend databases. I became proficient at writing complex SQL queries, but most importantly, I was forced to think critically. I constantly had to question, "Where is this data coming from?" and, "What does this really mean?" at all times.
I graduated with a bachelor’s degree in Computer Science with a concentration in Information Insurance. Although I prefer the applied, a degree in the more theoretical aspects of Computer Science was quite rewarding, stretching me to understand the underpinning aspects of computing. The experience in cyber security brought with it a cautious and proactive mindset, which influences how I think about and write code today.
I like writing code to make people’s lives easier. Unfortunately, I’ve learned from experience that poor code has a tendency to make the lives of everyone more difficult, especially for developers. This has ingrained in me strong convictions for utilizing standard software engineering practices, high-quality open source software, and the best tooling available to create safe and maintainable code.
There is also nothing like having fun and learning new things while solving a challenging problem. This is why languages which pursue safety and simplicity, such as Rust and Go, are my favorites. They tend allow me to focus on the problem at hand rather than frustrate me with issues and complexities inherent in the language.
If you haven’t figured it out yet, I’m big proponent of open-source software where high-quality solutions to common problems abound. I enjoy collaborating with other developers to improve open-source software for everyone.
As for hobbies outside of tech, I enjoy spending time with my wife, yoga, cooking, socializing, listening to podcasts and books, hiking, and generally getting outside whenever possible.
Below I enumerate the technologies with which I am familiar.
- Operating Systems
- Build Tooling
- Code Quality / Correctness
- Editors and IDEs
- Continuous Integration
- System Utilities
- Version Control
- Currently Learning