Quite often friends and acquaintances with no programming skills come to me and ask for recommendations on “how to do this and that” with a computer. Often, those questions are about workflows, such as batch processing data (audio, pictures, text, web sites), backing up data, or a more general work/leisure tasks.
I realize that many empowering technologies are not so well known to a wider public and could benefit many more people, so I went on to write an article for all of us out there that make a serious use of computers and want to be more proficient, without diving too deep into the arcanes of programming.
Admittedly, some of the techlogies below require a decent level of understanding, so you might have to deal with a little bit of reading.
Be aware that I chose the term non-programmers to refer to users comfortable with a computer, not beginners. Indeed, this article addresses tech-minded users who already have some familiarity with computers. If you’ve ever installed an operating system, run a command line or tried to solve any sort of problems with a computer, you are probably part of the target audience.
I believe that the effort is definitely worth the outcome and that anyone frequently dealing with computers can tremendously benefit from all these technologies, should you be a music composer or a designer.
Disclaimer: None of these technologies require proprietary or closed source software.
Version control: Git
Regardless of what keeps us busy with computers, we almost always have to deal with text at some point.
It’s a common process to edit a pragraph of text and the next day we want to compare it with how it was before the editting. It can be frustrating to not have access to previous versions, for the sake of comparing or even restoring them.
Version control is a workflow for working alone or in a team on text documents (for instance web sites, books or any kind of notes). It gives you a history of all changes, “diff” views between any two changes (think Wikipedia history), and much more.
Git is a popular version control tool. It comes with various graphical interfaces which improve a lot compared to the barren command line interface.
Maybe more importantly, version control brings us to a deeper level of understanding of how we ought to develop and archive all knowledge, in the most general sense.
Filesystems: ZFS or Btrfs
You probably have data you care about, from family pictures to projects. Data must be stored somewhere, and the way we store data changes everything.
As of October 2019, online storage still has to prove itself to be completely satisfactory in terms of cost, privacy and reliability (the biggest corporate cannot guarantee they won’t lose your data).
Hard drives are rather cheap (compared to the full cost of a computer) and with the right technologies, you can get top-notch flexibility for the least amount of effort. Local hard drives are obviously ideal for privacy and leave you in full control of your data.
- They give you history of your data and you can “diff” the changes between the various snapshots.
- Possibility to roll-back to a previous state, say you worked on pictures or an audio track for which you want to access the previous version.
- Efficient backup. It’s good practice to have at least one backup that’s
always in sync. These advanced file systems make it easy and cheap, since a
backup synchronization will only syncronize the changes instead of the whole
For instance, say you renamed a huge
videosfolder. A dumb synchronization program would delete the old folder and the backup drive and retransfer everything. With ZFS or Btrfs, only the renaming is applied on the backup drive, which is done in the matter of a second.
If you are unsure which file system to set up, pick the one that’s the easiest to install for you.
On a tangent topic, if you are going to format your drives, you might want to encrypt them (and you probably should if it’s a laptop). ZFS has an encryption option while for Btrfs you’ll need to encrypt the drive separately.
I wrote more extensively on filesystems and encryption in a seprate article.
Cryptography: SSH, GnuPG, KeepassXC
In this day and age, privacy is under the spotlight. I believe that digital citizens of an increasingly technological world require a decent understanding of basic cryptography to be fully empowered. Knowing how to deal with public and private keys can be crucial.
SSH is a simple protocol for public and private key management. It can be used to safely access systems remotely and to transfer files between two computers you control.
GnuPG is an extensive software suite that deals with the PGP protocol. It can be used for digital signatures, encrypted emails and file encryption among other things. GnuPG can also manage SSH keys.
Passwords are another hot topic: innocent users who use too-weak passwords can easily be compromised with devastating consequences. If you came up with a password yourself, you will have to think again: Your 15-character long password with special characters is probably not safe against a powerful attacker who can dedicate months and a supercomputer to crack your password.
This short video by the Electronic Frontier Foundation provides a good explanation on why you should use a password manager to stay safe online.
Bonus: it’s so much more convenient and you won’t have to remember any password ever again, beyond your “master passphrase.”
Watch out for online or non-open password managers: Can you really trust them? If you can’t answer this question with confidence, you should probably not use them.
KeepassXC is an easy-to-use, free software password manager.
Text editor: Emacs
We all need to write text, so a text editor is always useful.
With the legions of text editors out there, this is a hard one to recommend. But most of them fall short for a couple of reasons:
- Either non-free software.
- Or too specific, e.g. good for web development, but bad for other things.
- Or too weak, e.g. no rectangular selection, no sorting of X fields, etc.
- Or too ephemeral: text editors come and go. But the less geeky among us might not want to spend time getting accustomed to an editor, only to be forced to switch because development stopped.
Emacs may seem a surprising choice considering it targets a rather geeky
audience and that it has a steep learning curve. But this issue can be mostly
alleviated by switching to CUA bindings (
Alt-x cua-mode) and by installing a
few packages like Helm, or more simply by using a pre-customized configuration.
There are many different configuration flavours out there, pick what you like
Regarding the above points, Emacs scores petty well:
- It’s free software.
- It’s very general. There is more or less one “mode” for anything you could ever need, from taking notes to writing books, through professional web development.
- It’s powerful for text editing and batch processing text.
- It’s one of the oldest pieces of software still in use, so it’s probably here to stay.
- It’s one of the best options to edit TeX documents (which users in academia might appreciate).
But more importantly, I recommend Emacs here because it provides nice interfaces to other points in this article. For instance, Emacs has stellar Git integration with Magit.
If you’ve been with dealing with computers for a while, chances are that you’ve come across a command line interface, maybe via “terminals” (or “consoles”).
Indeed, they are many things the command line interface lets you do that can be hard to do otherwise. Stupid examples that come to mind:
Batch processing pictures, PDFs, music files… For instance, with ImageMagick you can resize all files with the
mogrify -resize 50% *.jpg
Downloading web pages recursively (including all subpages, all pictures, etc.):
wget --recursive https://example.org
Downloading subtitles automatically, for multiple files(!) with subdl:
subdl --lang=eng,spa my-video-1 my-video-2 etc.
Possibly one of the reasons why the command line is so infamous is because of the very poor interfaces that we often come across (e.g. the default terminals in most operating systems / desktop environements). I think it’d be wise to bring an end to those archaic interfaces, which is why I don’t want to recommend anything that has to do with terminal emulators.
In my experience, Emacs offers a command line interface that has worked well for
years and that is here to stay. After starting Emacs, you can bring up the
command line interface with
Alt-x shell. Check out the manual for more
details. “Shell” in this context is a technical term for “user interface,” and it is
often associated with “command line user interface.”
In another article I wrote about the benefits of using Emacs as a command line
interface, compared to other terminals. While this article deals with Eshell
(another command line interface in Emacs), most of it applies to
I won’t recommend Eshell here because of its rather exotic syntax and its
shortcomings (such as with piped commands), which are likely to trip
Operating system: Guix
Since I’m only talking free software here, I won’t mention proprietary operating systems. This topic has been subject to intense flame wars for decades, therefore I won’t delve too much into it.
I believe Guix to be possibly the most advanced operating system as of October 2019, in ways that are very practical to all of us:
- It cannot break! You won’t fear upgrading the system or any program ever again.
- It allows for going back in time (think “the Git of operating systems”), so you can roll-back to previous versions of individual programs, or even the whole system.
- It offers high-quality, up-to-date programs.
- It gives you very strong privacy and reliability guarantees. Programs run as expected and can’t really cheat you.
The question: As a rather advanced technology, is it suitable to non-programmers?
I believe it is getting there: since 1.0 it comes with a rather simple installer which makes it relatively easy to set up as long as your hardware is supported (by 100% free software).
If not, installing Guix is still possible but the process is a little more involved. Maybe in the (near?) future Guix will be easier to install on non-free hardware thanks to the Nonguix channel. But obviously a better solution here would be that more hardware becomes more open.
Either way, hardware is not a showstopper since Guix can be installed on top of any other GNU/Linux distribution. So you might just pick any popular flavour, install Guix, then use it to install everything else.
As of October 2019, the system configuration and package management with Guix can be done via a multiple user interfaces:
More graphical, easy-to-use interfaces are expected to be introduced hopefully in the near future.
Desktop environment: GNOME
A desktop environment is the set of programs that make up for the graphical user interface that’s exposed to the users when they log in. For instance the window manipulation, the “taskbar,” the file manager, the configuration panel, the “applets,” all these things, which directly impact the user experience, are part of the desktop environment.
It’s to be distinguished from the operating system, since a same operating system can offer multiple desktop environments.
GNOME might not be the ideal desktop environment I would envision, but it has many perks which make it the most commendable desktop environment in my opinion:
- It’s battery-included, everything works out-of-the-box (bluetooth, USB drives, etc.).
- It offers a great user experience (search everything, global view of everything).
- It’s visually appealing.
- It’s been stable for years and it’s actively maintained.
- While it requires significant storage space, it remains relatively light compared to what 2019 hard drives offer.
- It runs smoothly on most hardware that has been manufactured over the last 10 years at least.
In particular, lighter environments like Xfce might not show a visible performance boost on most current hardware, at the cost of reduced usability (and arguably a less appealing interface).
Anonymous browsing: Tor
Using a web browser to surf the web anonymously is quite a challenge these days. It’s hard to keep track of the myriad of ways that we leave fingerprints while browsing (from fonts to the window dimensions) which incidentally can be used to track us.
The Tor project aims to protect your privacy online by circumventing all the known ways of fingerprinting. Tor is possibly more famous than it is used and it seems to suffer from the misconception that it’s hard to setup. It really is not: the Tor project even ships an all-in-one browser with maximal security settings.
As a side-effect, Tor happens to be a convenient way to circumvent censorship in your country: choose the exit node to the country you like and you’ll get the desired IP.
Private, decentralized communication: Jitsi
A very important concept to understand: we cannot trust non-free, non-open-source software when it comes to privacy.
So if a service promises you “end-to-end encryption,” don’t take for granted that your data is safe. It probably isn’t.
A good communication system is:
- free and open source software;
- decentralized (at least everyone should be able to run their own instance of the service, lest it makes us dependable);
- Zero setup to use, it should not even require the creation of an account.
This last point is important: Because communication can only work between people using the same protocol, it’s hard to get our acquaintances to use something other than what they already use.
The Jitsi software crosses all those check-boxes. In particular:
- Video calls, chat, file sharing and screen sharing.
- It works in a browser, no need to install anything.
- You can invite multiple friends to a private discussion room simply by sharing the URL. No registration required.
Ha! A section on programming for non-programmers, isn’t it ironic? :)
Maybe not. Writing simple programs is a skill that can be tremedously useful in every-day life. Batch processing thousands of items with a few lines of code can save hours.
Basic programming is also a common requirement in research. More often than not researchers use the programming language of their peers, which results in communities getting stuck with aging and cumbersome programming languages. I believe we can do better.
So I’d like to recommend a programming language that is:
- easy to learn,
- with minimal idiosyncracies,
- and zero setup.
The setup part in particular can be a showstopper for many programming languages. Indeed, it often involves installing an interpreter or a compiler, configuring an editor, setting up a dedicated package manager, and possibly more steps.
Racket is one of the few languages that I can think of that fits the bill and that seems very promising in the long term. It comes with a zero-setup and ready-to-use editor, it has support for a wide variety of applications (from web through math to databases), and it’s one of the most advanced programming languages of its kind.
Most importantly, since its inception, the Racket authors have put a lot of emphasis on the educational part of the language. It’s meant both as an introductory language to programming as well as a medium to convey deeper concepts in programming language theory. The documentation is stellar for beginners and many free courses hold the readers by the hand until they become more efficient computer users.
For their feeback, editing and ideas:
- Simard le Barbon