Table of Contents

Technologies of web development

In this article I shall categorize languages, frameworks, libraries and software by a criteria of usage such technologies at hired work. Be aware that opinions expressed in the article might be biased and irrational.

I work in the IT field as a web developer for many years, but cannot proudly claim myself as a professional. I don't know many things, I don't like corporate IT culture and I don't particularly like web development. Still I have an experience in the field, and it is much easier to dive into web development to earn money for a living than to devote my time to other professions at my location. I hope this text will be useful for someone who is outside of the field of web development to get a grasp which technologies to learn.

What is tech stack

A tech stack is a the mix of technologies (software, frameworks, libraries) that the projects use to implement a planned set of features.

Knowing everything from your tech stack is not the only key to success. It can sound obvious, but social skills can play a more important role than your programming skills. Programming is a social activity as most of what, everything you are going to use is built by other people. Sometimes things break and you need to contact them. It is also important to communicate well with your company's team to avoid conflicts. And don't be that guy (me!), who hates something and gets verbal about it in such a way. This doesn't help you in any way. It can be seen as a suppression of your ego, but the truth is that hired work is more about collectivism than individualism.

Next, I present the list of technologies you should be comfortable with to work as a web developer. The list is not mandatory and you are not required to learn it on an expert level to get your job offer.

Technologies to learn

Some things you will use in most of your projects, so you are better to familiarize yourself with them anyway. What I've discovered, is that most knowledge of some tech is transferable to other techs. For example, learning one web-framework helps you to learn others.

Text Editor

Not sure if I need to write it, but you need a development environment where you will write code, run tests and compile your project.

Most popular choices

  • Emacs / Vim (I recommend them in the long run)
  • Jetbrains IDE (proprietary)
  • VSCode (proprietary)

Less popular

Proprietary means that source code is not available and probably it costs money, so you, as a user, don't have control over it. You can learn more why it is important on the GNU website. Such an important tool as a text editor should be free as in freedom for everyone.

[Wikipedia: Text editor] | [Wikipedia: Integrated development environment]

SQL

Or it should be called persistence, but mostly you will use something like Postgres or MariaDB/MySQL. Rarely it can be NoSQL like MongoDB.

The database is the main thing around which you will develop your application. I would say that the code is secondary compared to the data you store and get from the database, so it is an extremely good idea to learn SQL well, especially in the long run. For the start, it is okay to know a little and get going along the way because you will probably work with SQL through ORM.

I recommend using Dbeaver as IDE for running SQL-related code. It eases the complexity of writing and running SQL.

[Wikipedia: SQL] | [Wikipedia: Reletational Database]

ORM

Each tech stack provides ORM. ORM allows you to operate your database "objects" as your programming language code without writing or minimizing writing raw SQL. It is quite rare when you need to work with pure SQL or the project doesn't use ORM at all. ORMs might be something from the list:

[Wikipedia: SQL] | [Wikipedia: ORM]

In-memory database

Most databases use hard drives to store data, but some data needs to be stored in RAM for better performance. For that cases you need to learn about Redis or similar technology. Such databases are:

[Wikipedia: In-memory database]

HTTP Server and HTTP protocol

You don't need to know everything from the start, but since you are going to work as a web dev you need to know what you are using. It is essential if you do backend APIs.

The HTTP server is usually Nginx or Apache (it is used rarely now). If you work with Java, HTTP servers can be written in Java such as Jetty and others.

I recommend reading a book called "HTTP: The Definitive Guide: The Definitive Guide".

[Wikipedia: Web server] | [Wikipedia: Hypertext Transfer Protocol]

Fulltext search

You might need searching functionality. It is okay to include google search in basic cases, but it is not an acceptable choice in many cases. To search like google does you will need full-text search engines. You can use your database for that or specific solutions like ElasticSearch for such purposes.

[Wikipedia: Full-text search] | [Wikipedia: Elasticsearch] (proprietary)

Message broker

RabbitMQ, ZeroMQ, Kafka and others. You need those to create queues and other stuff that needs to be delayed. It is used because some languages have limitation to implement such functionality, for example PHP.

Wikipedia: Message Broker

Unix-like OS

You will probably work on Linux, variants of BSD systems, or macs. You need to familiarize with the system you use as different tasks require different degrees of that skill, but knowledge of what you are using every day will be handy.

There are many ways to learn it, but I recommend trying to install it on your machine and learning it along the way. I recommend to starting with Debian GNU/Linux distribution. You can read FAQs, manuals about installation and how to use the system. Docs are very useful and they are will be present in your filesystem so you can read them by jumping into /usr/share/docs folder or running info and man commands. I recommend reading it and exploring the Debian website. Also for learning Linux, Arch Linux wiki is a good source of knowledge (Slackware and Gentoo wikis are good as well).

[Wikipedia: Unix] | [Wikipedia: Linux] | [Wikipedia: Linux distribution]

Docker

Your team probably will use docker for deployment or development (or both). You might want to get your project working in a container for better accessibility by your team. The point of docker as a development tool is to let your team quickly get the same environment as you. The point of docker as a deployment tool is to deploy the same environment that you develop in. It is important to have a reproducible production environment because catching bugs in 3 different environments (dev, staging, prod) sucks.

[Wikipedia: Docker]

CI/CD and Deployment

You need to be able to deploy your application to the production server. Good practice is to use a CI/CD pipeline. The CI/CD pipeline runs checks of your project in a docker container and when the tests are successful, the code deploys to production.

There is also an old approach with logging into your server via a small script by ssh and then deploying everything as you just move files manually.

[Wikipedia: CI/CD] | [Wikipedia: Software Deployment]

OOP

You will be probably forced to use OOP techniques in corporate IT culture. It is not something that improves development that much, but it is a very common way to organize codebase and it is kind of great for working with many people. If you ask me, I would say that Closures and Modules are much more game-changing tech improvements that happened in computer science than OOP.

Not everyone will agree with my definition, but patterns are needed to express by your programming language object system, which is impossible to express otherwise, because of some language limitations. It is very true for very static and not expressive languages like PHP or Java and less true for more expressive languages like Lisp and Haskell.

Besides the basic principle of using OOP in your programming language of choice, you are going to need patterns to learn. The benefits of them are questionable, but it is not bad to know and they are being asked in interviews often.

The best way to learn patterns is to use Smalltalk and read the book "Gang of Four". Martin Fowler is a great source of enterprise-level patterns and notes about enterprise development in general. Also, there is a very useful website about design patterns with examples in many mainstream languages: https://refactoring.guru/

[Wikipedia: OOP] | [Wikipedia: Software design pattern]

Debugger

You have a chance to work with others people's code, so you have a chance to get confused by a lot of stuff going on. Also, it is possible that you would make a mistake and will not understand what is going on, or where is an error. In that case, you will need a debugger. The debugger is usually part of your text editor environment and it is included in your programming environment alongside your interpreter / compiler. Some languages don't include a debugger, so you need to download it separately.

The debugger allows you to step through your code and see the values of stack and heap, basically you get access to everything evaluated by your interpreter/compiler. It is very common practice to use such a thing when errors happen and I think that it is a great way to learn how your language of choice works internally.

[Wikipedia: Debugger]

Profiler

A profiler is similar to a debugger, but it helps you to detect which part of your program is running slow, it also helps you detect memory leaks. Sometimes you or others write functions and do everything as intended, but it is running slow. To understand which part of your code is a bottleneck you need to run it in a profiler. Then profiler will show you a diagram with the execution time and memory consumption of your functions, which is helpful even when everything works fine.

[Wikipedia: Profiler]

Frontend

If you are not exclusively backend developer, you will probably need to work with templates. Templates represent the outer view of your website, which represents backend's inner workings. Frontend part can be done using template engine or can be done as Single Page Application with lots of client-side javascript coe.

HTML

HTML is used for representing your website information to your users. It contains only structural data and very basic formatting. If you see something that looks like an old document, that is probably plain HTML used.

[Wikipedia: Web Template System] | [Wikipedia: Single-page Application]

CSS

CSS is being used for creating styling for your HTML pages. The role of CSS is to make your html layouts pretty, to make your buttons beautiful and the grid is clear. CSS frameworks help you to write less css by providing ready to use graphical elements such as buttons, menus, lists, grids, tables and so on. Often you don't need to know CSS so well, it is okay to know just a CSS framework.

CSS Frameworks:

[Wikipedia: CSS]

  • SASS/LESS

    CSS3 added some computing abilities introducing variables, calc and other features. Before that and because it lacked some other features for better css code reuse people have made CSS preprocessors. The point it to write css-like code that compiles to real css, so you write less things twice. SASS is being used in many css libraries such as Twitter bootstrap.

Javascript

Javascript is being used for creating interactivity with your HTML pages. If you see a dropdown menu, carousel, or slider, there is probably javascript involved. Javascript is a big and complex programming language, so you as a web developer will be required to know only a subset of it except if your main programming language is Javascript.

If you work with SPA Application, you might be interested in learning:

Popular non-SPA library is JQuery and plugins for it.

[Wikipedia: Javascript]

Template engines

Template engines are needed to transfer your backend data to your user. It provides a way to generate HTML with embedding variables and different functions for the developer's ease. The template engine is usually built-in in your framework of choice.

[Wikipedia: Template Processor]

API

There are standard ways to build APIs. If you are going to focus on that part of an application, only backend work, you should learn it.

The framework you use might provide a specific way for declaring APIs. For example, Symfony has API Platform and Django has Django REST Framework.

[Wikipedia: Web API]

Type hierarchy and standard library

Every programming language has a standard library. The standard library is a library that comes together with your language, so you don't need to install any external dependencies to use it. Sometimes it is implicit, so you don't need to import anything, sometimes it is explicit, so you need to declare dependencies you use from the standard library.

To learn more about your standard library, you should see your programming language documentation.

[Wikipedia: Standard Library]

Package Manager

It is hard to build something using only a standard library. Ideally you should try to use the standard library as much as you can, but it is very possible that the standard library will not include everything you would ever need. In such cases, you would use external software to get such software you can use package managers such as npm for nodejs, pip for python, composer for php, maven for java and gem for ruby.

Such package manager can be installed together with your programming language interpreter or can be installed externally. Check package manager documentation about its installation.

It is important to know the basics of how they work in general. The topic of dependency resolution is hard, but for end-users, it should be quite easy to work.

[Wikipedia: Package Manager]

Version Manager

If you don't use docker all the way, sometimes you will need to change your interpreter version depending on the project you use. To change let's say nodejs 18 to nodejs 16, you will need something called version manager, for that particular case you will need NVM (Node Version Manager). Such version managers exist for many languages (RVM, Pyenv, Jenv and so on).

Version Control

You should always use version control system even if you work completely alone. Version control allows you to work with other people and check changes over your codebase over time. This is essential technology to know for development these days, at least if we talk about hired work as web developer.

Version Control Systems:

  • Git
  • Mercurial
  • Darcs
  • Bazaar
  • Subversion
  • RCS
  • CVS
  • and others

Git is popular version control system and you probably will use it or already using it.

To learn what is it all about you can watch a short series of videos about git from computerphile.

Book called "Pro Git" can help you to learn Git in more depth.

[Wikipedia: Version Control]

Framework or(and) set of libraries

Every job sticks to its own stack. Very often it sticks to one specific web framework, that you are required to learn. It can be something like Django, Symfony, Spring, Ruby on Rails, or others.

Frameworks are usually the biggest part of your codebase. The difference between framework and library: Framework runs your code with your classes, but libraries are being used by you explicitly and you execute all the code from them. The concept of reverting control over the code to your framework is called Inversion of Control.

To learn your framework of choice you should read its documentation. If documentation is bad then I would recommend not using it. Sometimes framework developers sell additional courses or books on using their product (IMO it's bad).

Programming language

And the last but very important item on our list is the programming language itself. You should know it, you should know it well. To distinguish that item from the standard library I should point out that programming language consists of its syntax, semantics and in general it is every fundamental language block that is not described in that language itself (an example is the standard library).

Mostly it is easy to understand your programming language since most of it is a standard library. Many fundamental concepts of programming languages come from programming in general. So you can read a book or learn different programming languages by documentation and there is a huge chance that concepts from them can be applied to many languages, not just one.

It is a good idea to learn programming, complexity with big O notation, data structures, algorithms, compiler/interpreter construction and so on. But it is not so required in actual day-to-day work, especially for web development. You can argue about this, but I would say that this is mostly true for many types of work since many libraries and SQL databases manage complexity on their own, all you need to declare your classes and don't make them leak memory that much.

[Wikipedia: Programming] | [Wikipedia: Programming language] | [Wikipedia: Computer Science]

Most popular programming languages

Your choices are quite limited here. More jobs available, more chances to get that job. There will be different results in different areas. I think that in most areas you will have a choice between Java, Python, and maybe PHP or Ruby. If you want to end up insane, there is also Javascript, but it is not as mature for the backend as other technologies (it is my biased opinion), so I will not include it (there is only a "big" framework called NestJS and the demand for it is probably low).

Java / C#

Probably the most popular programming languages out there especially when it comes to working at companies. It is statically typed and quite easy to learn languages. They are restricted to OOP the most, so you probably will use oop design patterns here more than in other programming languages. The type system is not as advanced as in ML dialects and actually, it is unsound as in other mainstream languages, but it provides some merits of safety compared to nonsafe C or weak typed languages such as PHP and Javascript.

Frameworks:

ORM:

[C# Documentation] | [Java Documentation]

Python

Second the most popular programming language. It differs from Java a lot. It is dynamically typed, strongly typed and more object oriented than Java (everything is an object), but somehow manages to look like a procedural code, it forces you to indent your code right.

I like Python more than other mainstream languages, it does many things right. I like that Python while being a fully object-oriented language doesn't drop to dogmatic believing in OOP patterns. It also has good REPL and reflection/introspection abilities without writing much code like in Java or PHP.

Frameworks:

ORM:

  • Django ORM (Active Record)
  • SQLAlchemy (Data Mapper)

Learning resources:

PHP

PHP might be unpopular in some areas, but it is quite popular in Russia. It runs lots of small businesses and it is probably the easiest tech stack to get a job (but not the easiest language to work with). The language has lots of caveats such as weak typing, unorganized standard library, less developed OOP and types checking, lots of procedural PHP legacy, and most built-in functions of the language are defined in C. My observation is that PHP has the worst error messages compared to other high-level languages. Despite this PHP is overall not so bad with newer versions and it tries to remove legacy that has made the reputation of PHP extremely bad in programming circles.

Frameworks:

ORM:

Learning resources:

Less popular programming language

Go

Go is compiled statically typed procedural language made by creators of C. It has garbage collection as interpreted languages. It has a rich standard library and as I understand used mostly for DevOps or microservices and less used for building monolithic applications as in other programming languages. It also has strong abilities to do parallel computations. Language doesn't have REPL and strong reflection/introspection abilities.

Learning resources:

Ruby

Ruby is mostly used for web development, because of the popularity of the Ruby on Rails framework. The demand for it might be low in some areas, so investigate your market yourself before learning it. Ruby is strongly typed object-oriented in Smalltalk sense language. It has mixed Lisp, Perl and Smalltalk roots. It has very powerful REPL, reflection/introspection abilities, probably the best after LISPs and Smalltalk. The biggest downside of the language is the lack of good documentation on Ruby website.

Frameworks:

ORM:

Learning resources:

Harder to find a work languages

  • Scala
  • Haskell
  • Erlang
  • Clojure
  • Rust
  • (C/C++) since they are not suitable for web development

Almost impossible to find a work languages

  • Any LISP
  • SML
  • Other powerful functional programming languages such as Agda, COQ and so on

How to get good

First of all, restrict yourself and don't buy any paid courses or workshops, most information is available for free for everyone. Just read the Wikipedia links I provided in the article and follow the links there to the official documentation of the thing you want to learn.

When it comes to programming in general I recommend learning it by doing test projects or just playing with the code. You can also use services like Exercism or Codewars to practice pure programming solving problems. Also, there is a great web resource for complete beginners called FreeCodeCamp, which covers the basics of web development and Javascript programming.

Also, I recommend reading old academic books on programming, because many concepts are the same in many programming languages, what you need is the ability to think abstractly using data structures and algorithms. I recommend anyone who wants to grok programming to read:

The rule of thumb is that if the book has a Wikipedia article, it is probably a good book and you should read it/. There are tons of free for everyone materials about programming on the Internet, so of course, you should not be limited to the list above.

There are many free sources to learn you just need to invest your time into them. The downside of learning LISP (or let's say SML and Haskell or other nonpopular in the industry mostly academic languages) is that mainstream programming on your job can feel very restrictive and less expressive. Also, you will probably learn that many mainstream languages have lots of quirks or bad design decisions.

Conclusion

It is also possible to get a job with a less popular stack, but if you are just starting it might be reasonable to focus on the popular one first. The list of technologies is quite big, so newbies can be lost in new information. Be patient and learn one thing at a time. I would recommend starting with programming language documentation, then SQL, and then going to the docs of your web framework/library.

Demand for web developers is huge and in my opinion, it is the easiest way to get a job if you are just starting even tho it has a lot of downsides too, but that's a topic for another article.

Errata

  • <2022-10-14 Fri> Typos are fixed, sentences have been rephrased. Thanks to Andre Gomes for proof-reading and editing.

w96k Ⓐ 2019-2022

2022-10-16 Sun 19:30