Sharing is Caring: Exploring the Benefits of Tool Sharing

Chaim Turkel
Israeli Tech Radar
Published in
6 min readMay 19, 2024

I frequently write blogs about technology and share my experiences with various use cases. Recently, I acquired a new computer for my ongoing project, which required me to reinstall all the necessary software from scratch. This gave me an opportunity to reevaluate my tools and explore alternative options. I’m sharing my findings here in the hope that they might benefit others in a similar situation.

When you have a fresh computer (in my case, a Mac), where do you begin?

I prefer starting with the terminal. As a developer, the ability to execute all commands from the terminal should be a priority, with GUI applications used mainly for convenience.

Terminal

I use the iterm2 instead of the built-in terminal. You can easily split your terminal into multiple sections (horizontal or vertical) for more space economy. There are a lot of features packed in the terminal like Hotkeys, autocomplete, search, and others.

While regular autocomplete is helpful, for a more advanced experience, consider exploring fig. Fig takes autocomplete to the next level, extending beyond basic folder navigation or built-in completion for git, docker, k8s, and more. It goes beyond command suggestions, incorporating dynamic values from your computer, such as the names of running Docker containers. Fig even can install a package on your remote machine, and then the autocomplete works also via ssh.

Another nice tool warp. This terminal brings the search into your terminal without the need to leave your terminal. In addition, it has an AI engine built-in so you can ask questions about how to do things in the terminal and get suggestions that you can act on.

If you’re an experienced programmer who frequently uses SSH, you should check out Mosh. This software resolves many lag and connection issues that are common with standard SSH tools.

ZSH

You can’t fully optimize your terminal experience without installing Zsh, or better yet, Oh My Zsh. It will supercharge your terminal, regardless of which terminal application you’re using.

OhMyZsh allows you to install plugins to its framework. Anything you need is out there. There are a lot of blogs going over the different plugins, like top-popular-zsh-plugins-on-github-2023. Some of my plugins include powerlevel, autojump, and autocomplete.

Browsing

I won’t delve into this much since it’s not a major issue. The standard browsers like Edge, Chrome, Firefox, Safari, and Opera are all available. I personally use Brave for its security features and the ability to sync history and tabs across devices. If you’re flashing chips like the ESP32, you’ll need to use Chrome, as it’s the only browser that can connect to your ports.

IDE

This is a significant decision since you’ll be spending most of your time in this application. Whether you program in Java, Python, Node, or Rust, there are many IDE options available. You’ll need to decide if you want a free IDE or are willing to pay for one. In the past, we primarily had Visual Studio, which is excellent if you’re working within the Microsoft ecosystem, and Eclipse for the open-source stack.

Today the major players are vscode, and jetbrains. VSCode is a modern IDE that operates based on the terminal. Instead of using internal commands, it executes terminal commands, providing a consistent experience both inside and outside the IDE. Thanks to this architecture, VSCode can run on the web and support devcontainers — a predefined Docker environment with all necessary tools preinstalled.

JetBrains offers a robust selection of IDEs for nearly every programming language, including Rust. Their IDEs are top-tier and are often the preferred choice for many experienced developers. They also offer a community edition, so you can use it even if you don’t want to pay. Additionally, university students can get the paid version for free. JetBrains is also entering the competition with VSCode through their new IDE, Fleet. Meanwhile, Google is planning to join the competition with an AI-driven web development browser called Project IDX.

If you’re looking for a very fast single-file editor and prefer not to use a full-blown IDE, there are several options available. Some of the better ones are sublime, atom, notebook++ (only for Windows).

No matter which IDE you choose, make sure to install the GitHub Copilot plugin to boost your productivity (if you don’t want to pay for copilot, start writing open-source code, and you may get a free license).

Drawing

Every programmer needs to create design documents, and a best practice is to start with an overview drawing. While there are many web applications for this, two of them stand out from the rest.

The first to go is draw.io. DrawIO gives you all the basic and advanced features you need to draw any type of sketch.

Another good-to-go tool is Mermaid. Mermaid is a markdown language that supports multiple types of charts: flowchart, sequence diagrams, state diagrams…

For testing you can use their online editor, or plugins for your favorite IDE.

If you’re not looking for a standard UML diagram but just want to sketch out the flow, my go-to tool is excalidraw. Excalidraw is very user-friendly with its own GUI, and it’s backed by text, making it easy to add to your Git repo. Moreover, there are IDE add-ons available so you can work directly within your IDE instead of using the online editor.

Programming

Here, I’ll cover the best way to install and keep your programming language up to date.

Java

Java is difficult to install since there are many versions of the distribution. We are not just talking about versions of the JDK itself, but the actual distribution of the JDK. There I Oracle, OpenJDK, AWS, and many more.

In addition, you need to install maven, maybe groovy. On top of this, there are all the variant languages based on Java: Kotlin, Scala.

So don’t even try to install each one by yourself. You need to install sdkman. This command line will show you all the versions of what you have installed, and with a few simple commands, you can remove install, or upgrade current environments.

Python

Yes, python is currently the first in-line language. You want to always be using the latest version but still have multiple projects in different versions.

Here too you don’t want to install each version by yourself, and manually change versions for each project. For this we have pyenv. This library will help you install and easily change the current version. Then you need to create a new environment with the correct version and, and of-course manage your project using Poetry — the current best version control of dependencies.

Compare Files / Directories

How often do you duplicate your directory as a backup before making significant changes in Git? How do you compare the two folders afterward? Additionally, how do you compare different versions of the same file over time?

How do you scan two directories to identify new or changed files, allowing you to back up only those specific files?

There are many software options available for this task. The one that stands out to me, and that I’ve been using for the past 10 years, is Beyond Compare.

Note-taking

Last but not least, note-taking is crucial. We need to write notes to summarize meetings and organize a lot of data that we use daily.

I used to work with Evernote, and it was a great app for its time, but now there is a new boy on the block. I have moved to notion, and don’t plan on looking back.

Notion offers wiki features, database capabilities, templates, and more. I’ve migrated all my personal data and note-keeping to Notion, and I’m very satisfied with it.

Summary

I’ve covered a wide range of essential tools that every programmer needs. I’ve mentioned a few here that you might not have heard of and might want to try out.

If there are other tools that I have not mentioned and you feel they are important, please add them in the comments section below.

--

--