Programming Tools Q12020


I decided to document the tools I’m using for development since the various programming subreddits I frequent always have someone asking what tools they should be using.

IDEs/Editors

Linux

As I wrote in September, I’ve moved to using KDevelop for my larger projects.

Its built-in Python parser (working with flake8) has helped me find a lot of issues before getting to the stage of running flake8. The GUI for pushing commits to git has been very helpful in helping remind me what has changed and even (sometimes) noticing something I forgot to add to git. Its project-wide search has been invaluable when refactoring or renaming functions/classes. When it comes to large, complex programs, it’s hard to beat KDevelop when using KDE. That said, it’s only recently that the developers have started focusing away from being only a C++ editor and as you’ll see at the end of this blog post, for my Python workflow, I might be switching away.

I am still using Kate for smaller projects.

It’s nice and light-weight and it has pretty good syntax highlighting. Over the next few development cycles they’ll be implementing more and more LSPs (language parsers) that might give VS Code a run for its money. That said, for how great the debugging capabilities are, I might even move my smaller Python projects to PyCharm.

Windows

On Windows I’ve only been working on Unity games, so the complexity there lends itself to Visual Studio (the KDevelop of Windows):

My favorite feature here (and, as far as I can tell, something not in KDevelop – but IS in PyCharm) is the ability to highlight functions and create stubs or do some auto-refactoring. For example, let’s say for a Unity game I’m trying to think a bit before I code, so I start adding function calls into the Update function. The functions don’t exist yet – I’m just trying to figure out what to code based on what I’d call. I can then highlight each of those and right click and by selecting the right command, create stubs for each of those functions. I’ve yet to use any of the git features of Visual Studio and there’s probably tons I haven’t explored yet since I’m only using it for Unity development.

Git

Git GUIs

Windows

When I first started using Git on Windows, it was from watching GameDev.Tv’s Git for Unity devs course. The recommended using SourceTree:

It worked alright. My biggest gripe was that it wasn’t always as quick on auto-refreshing as it could be. The interface is OK. Not horrible, not amazing.

But for the past few months, I’ve switched to Git Kraken:

If you compare both windows, it’s MOSTLY the same. Git Kraken just has a more modern looking GUI. But I like Git Kraken a bit more as it’s more responsive and it does have a lot of great features when first creating a repo, like importing a .gitignore file based on the type of project you’re working on. It can also integrate with Github from the beginning with a better user interface than SourceTree has. So far I haven’t had any issues with the free version, but if you’re a dev on a huge project, using it for work, or some other thing – you may need to buy in the professional version, which might make it a harder choice. For me, it’s currently the best (and best-looking) git GUI on Windows.

Linux

I’ve been using QGit for a long while now.

As I wrote a few days ago, GitQlient 1.0 was released and I’ve been using that.

GitQlient surfaces all the information I need up front, in a clear manner. It looks nice and clean. And it has some really awesome features related to blame and diff. To be perfectly honest, on Linux (as opposed to Windows) having a git GUI is MUCH MUCH less important. Especially with the visual git features to KDevelop, there are a lot of features I don’t use in GitQlient – like making commits. Mostly I use it to get very quick and visual confirmations of what’s going on with my various branches, tags, etc.

Git Websites

While I love self-hosting because it gives me perfect control over the situation and I don’t have to worry about websites disappearing (looking at you, Google!), I just don’t see the advantage to self-hosting when it comes to a git project for which I’d like to have potential contributors or allow for user bug reports. Who wants to make another account on my personal GitLab or Gitea site? So for nearly all of my projects, I use Github.

That said, I do have a couple projects that I’m self-hosting for various reasons. For those, I use Gitea:

I found Gitea to be infinitely easier to set up for self-hosting than GitLab or Pagure. It has ALMOST all the same features as Github and a great community behind it. *IF* you want to self-host a git repo, I definitely recommend Gitea.

Continuous Integration

I’d played with Jenkins for a bit, but I found it overly complex and it had a really crusty interface. While I use Github CI for my Github projects (why not?). For my Gitea projects I use Drone CI:

It may or may not have everything you need compared to Travis CI or other options, but for my needs it’s perfect. Just create the YAML file and it does every step based on Docker containers.

Misc

Ever since Konsole got the ability to intelligently split the screen, it became a LOT more useful when programming.

Coupled with the ability to open lots of tabs (see the bottom of that screenshot), it’s very useful without having to have tons of windows open. In the screenshot above, I’ve typically got the left side for running the program, the top right for git commands, and the bottom right for compiling the Sphinx docs.

Going Forward

That’s where I’m at right now. Looking forward, I can see a couple potential changes to the programing programs I’m using:

As you saw with yesterday’s post, I’ll be investigating using PyCharm on Linux. It looks like it has a lot of AWESOME features that will help my code improve. That might sound like an exaggeration, but at my current level (more than beginner and less than super-hacker), each bit of new learning I’ve applied to my Python coding has made my code better – unit tests are helping me discover when my refactoring is breaking things, flake8/pydocstyle are helping me make the code easier to read when I come back to it, Sphinx is helping me create documentation that will help contributors as well as make it easy for me to come back to the code. Based on what I saw from using PyCharm for just a few minutes, I think it’s potentially going to help me discover some non-Pythonic things I’m doing that will make my code more efficient and better to read/understand. (That said, I know better than to blindly follow the program’s suggestions)

I might take a look at using Docker/Podman for compiling code or creating AppImage, Flatpak, or RPM packages.