This started as a page for my website, but gradually grew in scope to the point where I think this deserves a blog post dedicated to it. I may also make a page for it on my site, but much more condensed with the true explanations here.
Here is a list of programs I use on a daily basis. I mostly am providing this because I have been asked before questions like “What browser is the best?” or “What IDE would you recommend for X language”, so lets compile it all into a list, shall we.
Before we begin, when it comes to software, I have changed what I look for over the years. Back in 2016, I used to be a software minimalist. Going so far as to use almost every application from the terminal if possible. Over time I found that this wasn’t sustainable for me (or really anyone who gets work done) and have gradually moved to more and more normal looking applications. Now, I generally try to use FOSS software, however I even have been slipping on that. Generally I like software that is native to my platform of choice, so I will be splitting this up by platform. I also look for software that is light weight, or at least isn’t extremely bloated for what it is, and also for software that does the job I need it to do.
Operating System
Generally my advice to other people here is to use whatever feels best to you, but here is what I use and recommend if you can’t make up your mind. Do note that I come from a perspective of someone who programs for a living, and not just that, but works on the lowest level of an operating system, so my opinions on systems will be very much biased towards features that most users probably won’t care about.
For Linux distributions, I generally recommend Debian and Ubuntu, they are both remarkably stable and I have used them for years, having started on Ubuntu in 2011 and moved to Debian for my first full-time foray into Linux in around 2015. Both have served me well for the time that I have used them. As for Linux in general, I highly recommend it for everyone, regardless of computer skill. I think Linux has become easy enough to use for the layperson, and offers a much better alternative to Microsoft Windows.
As for the OS I am currently using, I have been using MacOS for almost a year now. Since the M1 Macs have bad support for Linux as of writing this, I have been stuck on MacOS, and to be completely honest, its kinda nice. MacOS is definitely UNIX like, and pretty faithful at that being based on BSD. I have found absolutely no issue porting my workflow over to MacOS other than the issue with some packages not being available for ARM64. I’m looking at you Valgrind. To be completely honest though, I see MacOS get a lot of hate from people in the programming community and I struggle to see why. MacOS is basically just a Linux (or BSD more like, but still) distro from a corporation at the end of the day. It works fine for what I need and does the job swiftly.
I generally don’t advise using Windows since I personally have grown to hate their Win32 API, as well as their developer tools. In my opinion, Windows is a product of a bygone era, one which still clings to life thanks to business and enterprise. In my opinion as well, there has never been a ‘good’ release of windows, maybe bar the first few which were impressive for their times. While I have used Windows for a majority of my life, and do have to admit I have nostalgia for it, I can’t recommend it for use in programming. I eventually will write a blog post about how bad the Win32 API is, and especially how bad the Windows POSIX layer is.
Web Browser
Lets move from Operating System to Operating System (but this time for the web).
Now adays we have very little choice in the web browser market, basically just three engines: Blink, WebKit, and Gecko. I do actively use all three of these browser engines however, mostly just to see how different they all are, but even still I do have a few favorites (and a few ones you should avoid at all costs).
For the browser I use daily, Firefox. I have used Firefox pretty much daily since around 2015, if not earlier. I have always liked Firefox since for a while, it was the only browser that Linux could truly call its own. While Chromium did exist on the platform, dubious open source violations, as well as a confusing relation with the system theming caused it to look completely out of place among the other free software on the system. Firefox has and will probably always be the FOSS browser of choice, despite having its own FOSS violations. Apart from that, despite taking a hit with the XULpocalypse, Firefox addons continue to be more powerful than Chrome extensions in my experience, and Firefox seems to have a much better, albeit smaller community.
As for Blink based browsers, I have to give the recommendation to Chromium and/or Brave. I barely use Blink based browsers, other than to load pages which Firefox cannot, or to log into Google apps. Chromium, being the open source version of Chrome (I generally recommend Chromium with the Ungoogled Chromium patch set applied, however stock Chromium is still pretty good), it does the job wonderfully for browsing the web. Brave is a little weird. While I want to like it, I can’t actually push myself to use it. It is simply a Chromium reskin, with a lot of Crypto integration sprinkled on top. I do not trade in crypto, nor do I use it in any capacity, so most of what makes Brave unique is completely lost on me. Likewise, Brave is a little annoying with how bloated it is becoming, with the integration of many extensions into the browser core itself. Every time I boot up Brave, which is generally not often, I am barraged with popups asking me if I want to enable or disable this new feature, along with sometimes multiple new icons appearing on the toolbar. However despite all of this, Brave is an amazing browser in terms of speed and privacy. I highly recommend it as probably one of the better Chromium based browsers if you don’t want to use Firefox. And it is the browser I use and recommend for iOS as well.
As for WebKit, there aren’t many options, and in general I don’t recommend them at all other than for testing. While Safari is cool, many modern websites won’t work with it, and likewise it is completely proprietary, although the web engine that powers it is not. Epiphany (gnome-web) is also nice, but suffers from a horrible rendering pipeline which causes the simple act of scrolling to be incredibly laggy, despite the browser actually loading and rendering pages extremely fast compared to other browsers. If you absolutely have to use WebKit, just use which ever browser is most compatible on your system. Oh, and do NOT use QtWebKit, it has been abandoned for years.
As an honorable mention, Pale Moon, which is based on a fork of Gecko called Goanna. Pale Moon is an awesome browser for if you need light-weight and powerful. Pale Moon was forked from Firefox before the XULpocalypse, so it retains the classic XUL extensions and platform, giving much more freedom to the user. However sadly Pale Moon has struggled to keep up with the ever changing web landscape, meaning many sites are completely broken in it. Despite this, development continues on, and just recently, full support for Google WebComponents was added, making it much more compatible with the web as a whole. I’d say check it out, but you probably won’t do much with it.
Text Editor / IDE
Emacs. Done.
Well seriously, I mostly only use Emacs for its Lisp interpreter, but it is still fun to say that’s all I use.
As for the Text Editor / IDE debate, I generally say use an IDE where it makes things more convenient, for example when working with Java or C, but a text editor when nothing really matters, for example with HTML or JavaScript.
For IDEs, I have to recommend XCode if you use MacOS. XCode is really light weight and fast in my experience. It works well too with llvm. That’s about all I can say however. I haven’t used it for much more than compiler development.
For text editors, I recommend Geany on Linux. Geany is amazing if you use Gnome or a GTK desktop. Geany works with many languages, and even integrates nicely with GNU Make. Geany however is terrible on MacOS and Windows just because GTK is not great on other platforms, and better alternatives exist.
For Windows, I recommend Notepad++. While I haven’t written code in Notepad++ is well over 5 years, I remember it being nice.
Otherwise for cross platform, use VSCodium. Its a fork of VSCode that removes some telemetry and other proprietary components. Its pretty good all things considered.
Compilers and Programming Languages
For C, gcc or clang are fairly similar, I use them interchangably. They are both amazing.
For Java, OpenJDK.
For Lisp, Scheme, particularly Guile. Racket is nice too.
Generally I program mostly in C, but for scripts and other small projects, I’m known to work in Ruby and Lisp. Most of my web apps are written in JavaScript as well, although I haven’t written one of those in a while.
Instant Messengers / Chat
For IRC, Limechat on MacOS, HexChat on Windows and Linux.
For Telegram, just use the official client.
For XMPP, Dino.
Generally I recommend IRC and XMPP for people, but I have found myself unable to leave Telegram just because of history with the platform. Telegram is horrible and people should not use it. Signal is also a nice alternative, although a bit more limited.
Media Player
VLC or MPV, depends on the type of media.
Games
I don’t really play games anymore. Just put this here to say avoid steam like the plague. Use GOG.com wherever you can.
To be continued…
If you can’t tell by how short these paragraphs are becoming, I really don’t have much to say about much other software besides the ones I talked about so far. Expect this list to be updated when I find other software I need to talk about, or maybe another blog post made about it.