Hi, I'm Alex "mcmonkey" Goodwin.
My avatar is an altered version Luke Skywalker from Jedi Knight 2.
I learned programming through game modding when I was a kid, and I never stopped. I have a pretty broad range of experience now.
Most of my work is public on my GitHub / in one of the GitHub orgs I own. I use mcmonkeyprojects as a mini-org just to separate my noteworthy personal projects from the random dump on my profile - FreneticLLC and DenizenScript orgs are also full of projects I made. I have done programming work for-hire that is obviously not public, and of course I've had a variety of personal projects that I've never had reason to publish. Sometimes the small personal projects wind up on my Gist if somebody asks me to share it. I have contributed to a variety of other public projects here on GitHub that you can find if you go back through my account history.
My programming language experience (plus links to public projects where applicable):
- Significant/long term experience: C#      , Java   
- Have worked in: x86_64 Assembly, C , C++, Lua, Bash, Batch, Bohemia Script, .NET CIL, Java Byte Code
- Have dabbled: SQL, PHP, Powershell, HLSL
- Created myself lol: DenizenScript, FreneticScript
If you take a look through any of the above linked project README's or related documentation sites you'll notice I take good documentation very seriously.
Some of the programming-related tools I have developed with (not all, hard to track):
- Hardware interfaces: x86_64, OpenGL, OpenAL, Nvidia CUDA
- Data syntaxes: ini, cfg, JSON, HTML, XML, YAML, FDS (created myself lol)
- Databases: SQL servers, SQLite, MongoDB, Redis, LiteDB
- Communication: Email (automation, account confirmation tools, etc.), IRC (bots), Discord (bots), GitHub (API), xenforo (modifications/extensions), phpbb (modifications/extensions)
- IDEs: Visual Studio (C#, C, C++), Code::Blocks (C, C++), VS Code (variety of langs), NP++, IntelliJ IDEA (Java), Eclipse (past Java), NetBeans (past Java)
- Advanced dev tools: Java Decompiler, Java Bytecode Viewer, ILSpy, HexEdit
- Operating Systems: Windows (XP/7/8/8.1/10/11, Home and Pro), Linux (Debian server/desktop, Raspbian desktop, Ubuntu server/desktop (and derivatives), CentOS)
- CLI tools: Windows Batch, Powershell, Bash via Linux terminal, Bash over SSH, git (obviously lol), live shells for SQL/Mongo/python/etc.
- Games I've modded: Empire at War (C, XML), Jedi Knight 2 (C, C++), Jedi Academy (C, C++), Minecraft (Java), Garry's Mod (Lua), Arma 3 (in-house Bohemia Script)
I primarily use git via GitHub Desktop and think it's wild that more people don't use it. I have the experience with
git CLI to use it when GitHub Desktop is insufficient (eg advanced merging, rebasing, etc).
Topics I have experience in:
- Webdev (multiple sites for various projects, and site generators)
- Game dev (Voxalia)
- Game engine dev (FreneticGameEngine)
- low-level systems (experiments with building Assembly and C-API tools, and OS modifications)
- low-level CPU/GPU code optimization
- algorithm optimization
- scripting language development (DenizenScript/FreneticScript)
- microservices (my repo list is full of em)
- AI/ML technology (Stable Diffusion and LLM tools, including work with Inference and Training, and UI/UX tool development for it, including professional work at Stability.AI) ("AI Art" isn't a thing, "AI Image Generation" is a tool, a human can use it to make art, but that's human art with AI as a tool)
- software security (have worked on projects related to data encryption, account privacy protection, etc.) (Also I heavily research news related to security issues - new vulns, future threats like quantum, new ways to protect users, etc.) (have also worked as red-team for other projects at request of those project's authors)
- user interfaces (UI/GUI)
- User Experience (UX) (I have very strong opinions about good UX. Software tools should maximize user-freedom while minimizing confusion, and we can do that a lot better than many popular software projects currently do)
- databases (Mongo and LiteDB are my favorite, SQL I can handle but in my opinion its overprescribed)
- advanced asynchronous programming and multithreading (most async code in the world is ticking timebombs of missing access locks. I try to be better than most about avoiding that)
- data processing and streaming, including low-level (eg tarfiles, network data streams, ...) and high-level (databases, data management interfaces, etc)
My two main driving goals with many of my projects are:
- 1: Communication. Code is code, but code with thorough documentation, an active support chat, etc. is a project. I believe it's extremely important for creators and leaders to emphasize communication. (I learned this the hard way - I used to be pretty bad at it, and have seen the difference in results as I grew and improved my communication).
- 2: User choice. My biggest problem with many software projects I've used is that you're often stuck doing it the way the author does (or not at all), with maybe a few settings to give a little flex. I believe projects should strive to empower the end-user to make their own choices and do things their own ways. You'll notice many of my public projects are scripting languages, modding tools, etc. - designed to increase user freedom of choice where previously it was lacking.