Programming paradigms research
In order to build the application it is necessary to think about what coding paradigm to use and which of these will be the most beneficial in order to accomplish the build, in regards to maintainability and scalability of the program.
Object Oriented Programming
Object oriented programming is the most standardized way of coding now a days as it focuses on modularity, independent code and reusability. This is done through the compartmentalization of code through the creation of objects and building the functionality of the program by adding properties and methods to these objects. It is also very readable and easy to debug and test.
By focusing in objects, the structure of the program follows the idea that program components should be isolated within components which means that the coding structure is set through the idea that data should be generated by these components, and in a certain way if gives a big focus on the importance of the data. This seems interesting when wanting to work with MVCs where there is an interest in building objects related to the data model.
Functional programming
Functional programming focuses on building very atomic functions (making functions very specific and serve just one purpose) and making the code very abstract in order to reuse the code as much as possible. By doing this, code length can be reduced significantly and is extremely strong when working on big projects with a lot of different functionality. This is done by sacrificing readability in order to make the program more efficient. This means that while it's good to think about functional programming when building large scale applications it is normally preferred to use object oriented programming as it's more comfortable to code in.
When looking at real world scenarios we see that most projects are built in an OOP fashion. Facebook or the majority of videogames are built using object oriented programming. However, there are some languages used in massive applications that are functional. Twitter uses Scala and Whatsapp uses Erlang. Interestingly enough, both these applications focus on the concept of sending information very little structure. When compared to FaceBook which is a network of information it seems like objects are the way to go in order to better manage this information, while when we are looking at massive bulks of information without an importance within their content (in regards to the application) it is functional languages that are used.
Being a text editor, the application that I am going to build doesn't have a big scope, in the sense of having to handle big amounts of data at any given time, which means that performance is not something to be concerned of, as long as the code has a good quality. On the other hand the nature of the app has a big similarity with whatsapp and twitter in the way the data model would be structured. While it would be interesting to work with functional programming in order to learn other types of coding paradigms, it makes more sense from an coding efficiency point of view to build the program using OOP, as it will lead to better maintained code and more robust product in a smaller amount of time.
Languages research
While the main programming language that I use in order to code is JavaScript, it's a language that has been predominantly used in order to write web applications and browser interfaces. It is true that in recent years JavaScript has become much more powerful out of the browser by having very strong engines (more on that later), but other languages should also be considered as these other languages are normally used for standalone applications, which fits with the project. It is important to understand that learning a new language could take a few weeks in order to start being efficient with it and that using a language that's not JavaScript would be considered if the advantages were significantly greater.
Python
Python is renown for how friendly it is for beginners in the sense that the way it is written is very semantic and it has a very good debugging system. It has interpreters for Windows, Linux and OSX which means that it is a good language to build native applications for any operative system. The fact that its interpreter is designed to work on desktop applications means it is also very simple to create new files and modify them with python, as it has a very easy system that allows to add already existing libraries that will allow to very easily expand core functionality for the language without having to write it myself.
From a GUI perspective Python lacks a strong interpreter that will allow for good GUI customization. While GUI customization can be expanded, this needs to be coded using python, instead of having a templating language to do so like HTML or XML. Being a big USP of the application the actual interface and the uniqueness of it, it is almost more important the UI development than the actual functionality. Because of this, I don't believe that Python will be a suitable option given the time and resources allowed for the project.
Ruby
Ruby is a very strong language, normally used for back end web application development and building APIs to then connect to an HTML template. Even then, Ruby works on an interpreter which makes it easy to find standalone application engines the same way python can. While Ruby is less semantic than Python, it has something that improves over Python. As it is very commonly used to work with web application there are standalone engines that will allow to write the interface using HTML, CSS and JavaScript, which means that I can stand on the soldiers of giants and will make the process of writing the application much easier. It may take some more time to learn how to use Ruby than Python, but this effort is then balanced by the fact that web fron end languages can be used.
JavaScript
JavaScript is the language that I already know which gives it a very big advantage over the other two. Apart from that there are several very powerful engines that work as standalone programs meaning that JavaScript could actually be run as a standalone program, outside of the browser. These engines, are quite new compared to the other two languages which makes me doubt their strength when producing standalone apps, as everything famous related to JavaScript is based on browser and the actual engines are used to serve as servers for web applications. Even then, there are some JavaScript based platforms that will allow to create a distributable file that will work as a a standalone program and run by JavaScript. Because of this I will develop the application using JavaScript as well as HTML and CSS for the interface.