Choosing (a) language(s)/framework(s)
Detailing my thought process behind my choice of languages and frameworks.
Nowadays, for me at least, choosing a language or framework is harder than ever. The truth of the matter is, in general, almost anything will do most of the things you need. There is little in the way of a "wrong" choice. Personally, there are some factors that are still important to me though:
The fewer, the better: I want to use as few languages/frameworks as possible. In doing this, I hope to make it easier to develop and transfer to anyone who wants to continue on my work.
Little boilerplate: throughout my years at Fontys, I have developed a preference for projects that have little need for boilerplate code. This makes it clean, easier to develop, helps me understand my code better and ensures it is easy for others to get an overview of what I have worked on.
Something new and valuable: this is my last chance to expand my skills at Fontys. I want to embrace this opportunity with open arms and expand my portfolio of technologies for future job opportunities.
Relatively easy to learn: that being said, I also do not want to spend more time finding out how to implement something than actually implementing it. Looking things up is fun and comes with the job, but I do not want this to get in the way of the development of the actual product(s).
Multi-platform and easy to set up: in my opinion, there is little excuse to have a framework or language that is not multi-platform (such as Swift, for example). Docker fixes many of these woes, but I would prefer the language runs well on all platforms out-of-the-box.
Good community support: I will be looking stuff up a lot. Making sure the language/framework is widely supported means that I can find the answers I need and integrate with popular technologies such as Docker more easily.
So, what's on the menu?
The aforementioned factors cross off some popular options such as C#, Java, and JavaScript/TypeScript. These are languages I have already used frequently throughout my Fontys career.
My tests so far have been developed in C++. While this is a very valuable language to learn and the prototypes themselves were fun to make, I do not think this will be the best choice for a lot of the project. It is so nitty-gritty as to be somewhat cumbersome to develop in and have a significantly steeper learning curve than a lot of other options. Alongside this, it feels like it is not as well suited to more web-based use cases such as a REST API. I might keep using it for specific scripts or services (such as those I have already made), however.
An alternative to this would be Python, a language I have very briefly used some time ago but have little experience with. This could be used to facilitate analysis scripts and/or interface with OpenFace. It is also the premiere choice when it comes to machine learning. Though they are more of a "dark horse" option, GO and Rust are modern languages and in the case of GO, famed for being easy to learn. They aim to succeed in the same areas as something like the aforementioned C++ or Python. The community around them is not near something like Python but is growing and could be a good choice when looking at the future.
When it comes to web-based use cases, the main options as I see them are Laravel (using PHP), Ruby-on-Rails (using Ruby), Node.js (using JavaScript/TypeScript) and Django (using Python). Of these, Laravel, Ruby-on-Rails and Python are the ones I have no knowledge of whatsoever. They can both be used for both web front-end and API services. My choice will come down to a small test with both frameworks and a thorough overview of them next to the above factors.
To summarise, the plan so far is to try out Laravel, Ruby-on-Rails and Django for my web app and API purposes. Currently, the OpenFace analysis is performed using terminal commands from a C++ script. Depending on the changing nature of the project, I may opt to keep this or swap to Python or GO. The verification of realism based on OpenFace data will be done using the aforementioned Python or GO, though C++ may still turn out to be the way to go (depending on the ease of development).
Last updated
Was this helpful?