https://pixabay.com/photos/laptop-code-programming-computer-2557468/

My Coding Setup

For Each One Teach One I mentor young adults who work on various apps. The default setup  they are taught to use is Visual Studio Code and Github. Anything else seems crazy to them. And then they watch me code or bring up my dev environment. I often get similar reactions at work where Sublime Text is the favorite.

Editor

I use Kate as my editor. I like it for all the reasons others dislike it. It's offline first. It doesn't complete your code lines. It doesn't come with all of these plugins enabled and forcing you to login and create accounts. It has sane defaults like spaces for indentation (yes, I went there) and auto-detects most languages correctly. It just works for me. It's open source and freely available. If I could pay for it, I would.

Alternatively, if I just need to jump in and fix something quick, I use vim. It takes time to learn vim, but once you do, it is very powerful. My vimrc is fairly simple.

Code Repository

For local development, I like fossil. I use gitlab because git rules the world right now, and I have to share with others. I used darcs for a long time because it is offline first. Both darcs and fossil work better when offline than in central repositories. It drives me crazy to think git and darcs and other code repositories are built for offline, decentralized first, but everyone loves centralization. Yes, we've massively centralized these decentralized systems. 

Offline First

You may have noticed the theme of offline first. I download the language manuals and refer to them before searching for answers. My goal is to learn a language, not learn to search for answers. It's slower, more difficult, but ultimately I find I internalize the language and can code far faster and with less bugs with more time spent. I also read others code in whichever language I'm using. The goal is to learn other ideas to solve problems. When working with others on the same project, this happens naturally. 

If I want to jumpstart my learning, I'll take a course on the language. Udemy is pretty helpful. I also use the language for everything. The language may not be good at certain use cases, but the point is to learn the language and solve the problems. This is sort of "all I have is a hammer, so everything is a nail", but also very much full immersion.

I'm the first person to criticize my own code. It is never elegant, efficient, nor performant enough for what I want to do. I improve over many iterations of rethinking functions and measuring code performance. I've learned the hard way to make the code simple and readable. As I come back to my own code months or years later, I often don't understand it. I look at some of my code from a decade or two ago and wish I spent more time commenting and less time optimizing for tight code. With current compiler technology, much code is easier to optimize at compile time than spending hours writing super compact, advanced structures. There are times you have to eek out every last bit of performance. By all means do so, but comment the life out of it so future you and others can understand it.

Operating System

This is really personal preference. I typically use KDE on Ubuntu or Xfce on Arch. I grew up using various unixes and it is what I know best. Arch linux can be a bear to install, so use Manjaro. It's a slick operating system based on Arch. My next machine will run Manjaro, because it makes everything much easier than raw Arch. I have a fondness for FreeBSD and OpenBSD, but I find they work far better on servers than workstations.

Hardware

I'm a fan of open hardware. I look forward to RISC-V and PowerPC processors becoming more mainstream. Until then, I prefer AMD processors, primarily because they open source all of their drivers. While AMD graphics may not be as fast as current Nvidia, at least everything is open and "just works". Intel and Nvidia ship binary blobs integrated into various linux kernels. which is vastly different than AMD. Some of my best coding is done on a Raspberry Pi 4B+ in vim, so hardware is fairly flexible here.

And last but not least, I prefer trackballs over a mouse. Lately, I really like the Perixx keyboard and trackballs, aka thumballs. They just work and have great ergonomics for long stretches of coding.

Now imagine a group of teenagers getting exposure to something besides Windows or Mac and Visual Studio Code and Github. It's a great eye opener for many of them. That's where the learning starts.