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 ™.
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.