I have a problem. I want to write a small application. It should be a commandline application, but maybe I want to extend it later with a GUI or even a web interface. But I don’t know what language to write it in.
This article could also be named “Which is the right tool for the job?”
The idea is simple: I want to write a journal-application, where one can take notes, tag them, query the journal for entries, optionally provide filters before printing them to print only some of them and so on.
I want to be able to encrypt them with gpg and I want to write posts to the journal with vim. I want to be able to configure these steps, of course, so I can use a certain key for encrypting the journal or maybe another editor (for these emacs lovers out there).
It should be designed to be extensible, so I can add a GUI or web interface later on. Or maybe a tex output, so I can compile a PDF out of it or something. Posts should be written in standard markdown, so this wouldn’t be a big deal.
But I don’t know what language to write it in. The languages which I can or would choose from are:
- Java (not really…)
- Scala (not really either, it’s still JVM)
- Python (by extending jrnl)
- Bash (I really don’t want to write it in bash, but it’s still a possibility)
As you can see, the first four languages are compiled languages, then Java and Scala are (lets call it) Semi-Compiled languages and the others are scripting languages. All of these languages have certain advantages over others.
The compiled languages
… have the advantages that they are fast. Haskell and Rust also have the advantages that if the compiler does not fail compiling the sources, the program just works (tm).
Also, learning C++, Haskell or Rust would be a really great experience and may be beneficial later in a job or something.
The semi-compiled languages are also (kind of) fast, but they are JVM-languages, so I won’t look into them here…
The scripting languages
Writing the application in a scripting language would have some other advantages: They would be much more flexible and I’d be faster writing the application (compared to Rust or Haskell, which I would need to learn with the application). I don’t need to learn Ruby, I know a fair bit of Racket and I guess I can get productive with Python or Lua really fast.
Bash is another option and I’m actually an bash script for an almost similar job right now. I could simply extend this script, that would be an option, of course.
So which is the right tool for the job?
Can you tell me? I don’t know which tool is the right tool for the job. After all, I don’t think I should write such an application from scratch. So, for me, there are two options left: Extending jrnl, which is an Python script, or extending diary (I do not even find a link for this anymore), which is a bash script. Extending the bash script would be an easy job, I guess. But it wouldn’t be as flexible as the Python tool is already.