PROFESSIONAL EXPERIENCE
I have over a decade of experience as a professional software developer. Though, outside of a professional environment, I've been programming since a young age.
Programming/Data Languages
- Very Comfortable: C, C++, JSON, Markdown, Rust, YAML
- Comfortable: Bash, Go, Python, SQL
- Need a Refresher: Assembly, C#, GLSL, Objective-C
- Only as a Hobby: CSS, JavaScript, HTML, Lua, Verilog
Development Tools
- Very Comfortable: Cargo, CMake, Git, VSCode
- Comfortable: Clang, CLion, GCC, rustc, Sanitizers, Valgrind, Qt Creator
- Need a Refresher: Bazel, GDB, LLDB, Make, Mercurial, Perforce
- Only as a Hobby: Docker, Xilinx Vivado
Libraries & Frameworks
- Very Comfortable: Clippy, Google Test, Serde, syn"e, Protocol Buffers
- Need a Refresher: Check, CUnit, OpenSSH, Qt
- Only as a Hobby: ALSA, OpenCV, Rayon, Tokio, Vulkan, XCB
Domain-Specific
- Very Comfortable: Daemons, Linux, System Programming, Teaching, Training & Leading
- Comfortable: Compilers & Parsers, Data Analytics, Databases (Relational & Non-Relational), Distributed Systems, Game Engine Programming, Security Engineering
- Need a Refresher: Graphics Programming, Pub/Sub Feeds, REST
- Only as a Hobby: Gameplay Programming, OpenAPI
PROGRAMMING PHILOSOPHIES
I believe...
... in prototypes and experimentation.
- You don't always need a prototype, but when you do it's important to be comfortable throwing away what you made. (The point was to learn, not to build.)
- A prototype is admitting to the world "I don't know enough yet" - prototype-to-production is a trap, you should avoid it.
... in solving problems earlier in the software lifecycle.
- Sometimes you can turn a run-time problem into a compile-time problem, and in some cases you can even design away from a problem entirely.
- Though, it's also important to know when not to do this (like when it solves a small issue, but brings in a lot of complexity to do so).
... that good software is thoughtfully-crafted.
- You should not just blindly follow a design - if the code is difficult to work with, it's usually because something isn't designed well.
- Nobody's designs are perfect. You should learn about your problem as you develop it, and change your design if needed.
... that test code is just as important as production code.
- Tests grant us confidence that we haven't regressed systems when making changes. But carelessly authored tests can lead to brittleness and churn.
- There's many things to test (though usually not enough time): unit tests, integration tests, fuzz tests, build times, run times, binary size, sanitization, etc.
... that more documentation != better documentation.
- If everything is documented, but nobody can find anything, that doesn't do anyone any good - there's a user experience to reading documentation.
- The ideal documentation will get the reader to understand more than what is even stated, by clearly defining the specific points it aims to focus on.
... that you should always back-up your assertions with data.
- You'd be surprised how often code flows down the "this should never happen" codepath - the phrase "trust but verify" comes to mind.
- If you don't have an automated way to watch things and prove them to yourself, then you're putting yourself at a huge risk.
PERSONAL INTERESTS
Here's a recent list of things I'm into (these are not complete lists, this is just for fun).
Hobbies
- Often: Anime, Music (Listening), Japanese Language, Walks
- Occasional: Drawing, Manga, Movies, Video Games
- In the Past: Electrical Engineering, Music (Creating)
Anime
- Random Favorites: Azumanga Daioh, Bocchi the Rock, Frieren, Ghost in the Shell, Katanagatari, Makeine, Odd Taxi, Madoka, Nichijou, Tatami Galaxy
- Well-Liked (But Hard to Recommend): Flip Flappers, Mawaru Penguindrum, Neon Genesis Evangelion (not the recent remakes...), Serial Experiments Lain, Takopi's Original Sin
Video Games
- Random Favorites: 13 Sentinels, CrossCode, Deltarune, Fatal Frame, Momodora, Phoenix Wright, Ray Crisis, Resident Evil, Triangle Strategy, Umamusume, Undertale, Xenoblade
- Want to Play: Chrono Cross (yes, I haven't played it), Sea of Stars, Unicorn Overlord, Xenogears, Xenosaga