An Incomplete Introduction to Web Development
Some forms of web development can be intimidating or at least appear cumbersome at first. The following entry looks to guide absolute laymen to the appropriate tools to fulfill their needs without hours of choice paralysis and Google searches. Caveat: this entry is heavily coloured by my personal experiences with learning some web development and will ignore commercial services like Squarespace, Wix, etc.
Goal: Static versus Dynamic
Static Page Tools
There are many static site generators that can make a webpage look sleek and competent. These are very quick to get deployed without having to fiddle with details. Some exaples include: Jekyll which is what this blog uses, MkDocs which powers familiar sites such as keras.io (uses Python). Other popular tools provides an extensive list of static page generation tools where you can find the style that suits a particular case.
Dynamic Page Tools
For the client side of a dynamic web application, there are numerous libraries and frameworks that offer different syntax and ways of handling data within an application. It is important to note that you may not need to use a full framework but instead a set of libraries. The tools listed below can also be used to generate static pages.
Angularjs is a full framework for client side code provided from Google. Angular uses the Model-View-Controller (MVC) software design pattern for client side code. It is a popular framework (though is loosing ground) and forms the A in the MEAN (see below) development stack.
Django operates as a MVC platform. As the whole development process is done in Python, the ‘model’ can essentially serve directly as the machine learning algorithms provider and the ‘controller’ can be used to train the models. Due to the high complexity of the full stack frameworks, Django has a steeper learning curve. However once a developer has adapted, it provides much more flexibility and is easily expandable to production scale software. It supports variety of popular databases out of the box - SQLite (simplest to use, applicable to very small project), MySQL (developed with web design in mind, good for blogs and home pages), PostgreSQL (more optimised for storing large amount of data, used to be very popular in ML community before MongoDB). Switching between them can be done transparently as the project grows. MongoDB (a non-relational counterpart to other DBs, slower, but allowing for storage of objects of arbitrary structure) can be deployed through an extended version of Django.
DB setup is essential to Django, and while it may cause some trouble to the layman initially, once it’s set up, Django provides a very easy to use object oriented programming interface to access databases. The queries are run transparently. The framework was originally designed to support storing information from submitted forms. However, it also allows for the saving of any kind of data the same way, which might appear very useful for storing the current state of the user’s work, independently of views, and passing the information between them completely on the server side.
Django has its own template language, which enables it to be used with any static page tools mentioned before, and provides full flexibility on HTML / JS/ CSS side.
PHP is an older but very popular solution for server side code.
Django also has its own simple development server, so that it is possible (and encouraged) to start one’s development without installing any external software nor frameworks.
Client - Server Communication
Full Stack Solutions
A full development stack aims to provide tools and frameworks for the entire web development pipeline, i.e. the “stack”. Full stack solutions will provide databases, libraries, frameworks and other tools that cover client and server side code. Some notable examples include the MEAN stack, which is made up of MongoDB, Express, Angularjs and Nodejs. The Django stack is another option that allows full stack development in python, (see above section).
Tutorials and Misc. Sites
Hot Frameworks lists frameworks and their popularity.