We believe, that it is important for us to be focused on our tasks. That’s why we wanted to decide on technology stack to use, finding minimum number of languages that will support all our development needs. Because we came with different, yet similar curriculum of languages, we decided to do research and decide on what to use. We based our search on language features (different for each phase of development) and popularity (based on various programming language rankings and number of jobs for them). Instead of traditional “stack”, we ended up with “circular queue”.
Design and prototype: Python
Design and prototype phase is a very important one. We needed language that is dynamic, has large number of libraries and good support for many different fields, from simple shell scripting related tasks, through data analysis for our internal purposes, to advanced multimedia libraries. Python turned out to be natural choice here.
Main implementation phase is key to obtaining good software. This is when we create “the software”, based on our research made during prototype phase. We wanted language with static type checking and strong generics features (like type constructor polymorphism). Ability to create cross-platform code, for both PC and mobile, is another thing we looked for. Scala met all our requirements. It turns out, that sometimes it is also practical to prototype in Scala, and results do not require optimization.
C++ is de facto standard for writing optimized code. It’s strong point is raw power, without sacrificing too much features. Whenever we find some part of our code needs optimization, we will turn to C++ for help.
Scripting is useful, it extends application life by allowing users to add custom functionality trough plug-ins or extensions without requiring them to be programmers or exposing to them too much internals. Language needs to be lightweight to be embedded in another application without much overhead, and easy to learn by most people. Lua fits this picture perfectly.
When we target advanced users, like writing application for other developers, and speed or lightness of solution isn’t of particular importance, small scripting language might not be enough. Users will miss features from big standard libraries of their favourite language. To make both, ours and our clients life easier, in such specific cases, we come back to where we started – to Python.