1 | #+TITLE: Technologies of web development
|
---|
2 | #+DATE: <2022-10-11 Tue>
|
---|
3 | #+LANGUAGE: en
|
---|
4 |
|
---|
5 | * Technologies of web development
|
---|
6 | #+BEGIN_abstract
|
---|
7 | In this article I'm going to categorize languages, frameworks, libraries
|
---|
8 | and software by a criteria of usage such technologies at hired work. It
|
---|
9 | might be biased and irrational, be aware.
|
---|
10 | #+END_abstract
|
---|
11 |
|
---|
12 | I work in the IT field as a web developer for many years, but cannot
|
---|
13 | proudly claim myself as a professional. I don't know many things, I
|
---|
14 | don't like to work in general, I don't like corporate IT culture and I
|
---|
15 | don't like web development in particular, but I have an experience in
|
---|
16 | that field, and it is much easier to dive into it to earn money
|
---|
17 | for a living than other IT fields or other professions at my location. I
|
---|
18 | hope this text will be useful for someone who is outside of the field of
|
---|
19 | web development to get a grasp of technologies to learn.
|
---|
20 |
|
---|
21 | * What is tech stack
|
---|
22 | #+BEGIN_abstract
|
---|
23 | The tech stack is the mix of technologies (software, frameworks, libraries)
|
---|
24 | that the project uses to implement a planned set of features.
|
---|
25 | #+END_abstract
|
---|
26 |
|
---|
27 | Knowing everything from your tech stack is not the only key to
|
---|
28 | success. It can sound obvious, but social skills can play a more
|
---|
29 | important role than your programming skills. Programming is a very
|
---|
30 | social activity, everything you are going to use is built by other
|
---|
31 | people, sometimes something breaks and you need to contact people that
|
---|
32 | provide you the software you use, it is also important to communicate
|
---|
33 | with your company's team and not bring yourself into conflicts. And
|
---|
34 | don't be that guy (or me), who hates something technical so much, that
|
---|
35 | people get annoyed by you, it won't help you in any way. It can be seen
|
---|
36 | as a suppression of your ego, but the truth is that hired work is more
|
---|
37 | about collectivism than individualism.
|
---|
38 |
|
---|
39 | Next, I present the list of technologies you should know to work as a
|
---|
40 | web developer. The list is not mandatary and you are not required to
|
---|
41 | learn it on an expert level to get your job offer.
|
---|
42 |
|
---|
43 | * Technologies to learn
|
---|
44 | Some things you will use in most of your projects, so you are better to
|
---|
45 | familiarize yourself with them anyway. What I've discovered, is that
|
---|
46 | most knowledge of some tech is transferable to other techs.
|
---|
47 | ** Text Editor
|
---|
48 | Not sure if I need to write it, but you need a development environment
|
---|
49 | where you will write code, run tests and compile your project.
|
---|
50 |
|
---|
51 | *Most popular choices*
|
---|
52 | - [[https://gnu.org/software/emacs/][Emacs]] / [[https://www.vim.org/][Vim]] (I recommend them for a long run)
|
---|
53 | - Jetbrains IDE (proprietary)
|
---|
54 | - VSCode (proprietary)
|
---|
55 |
|
---|
56 | *Less popular*
|
---|
57 | - Sublime (proprietary)
|
---|
58 | - [[https://www.eclipse.org/][Eclipse]] / [[https://netbeans.apache.org/][Netbeans]] / [[https://www.kdevelop.org/][Kdevelop]]
|
---|
59 | - other editors and IDEs
|
---|
60 |
|
---|
61 | Proprietary means that source code is not available and probably it
|
---|
62 | costs money to use and you as a user don't have control over it. You can
|
---|
63 | learn more why it is important on the [[https://gnu.org/philosophy/][GNU website]]. Such an important
|
---|
64 | tool as a text editor should be free for everyone.
|
---|
65 |
|
---|
66 | [[[https://en.wikipedia.org/wiki/Text_editor][Wikipedia: Text editor]]] |
|
---|
67 | [[[https://en.wikipedia.org/wiki/Integrated_development_environment][Wikipedia: Integrated development environment]]]
|
---|
68 |
|
---|
69 | ** SQL
|
---|
70 | Or it should be called persistence, but mostly you will use something
|
---|
71 | like [[https://www.postgresql.org/][Postgres]] or [[https://mariadb.com/kb/en/][MariaDB]]/[[https://mysql.com/][MySQL]]. Rarely it can be NoSQL like MongoDB.
|
---|
72 |
|
---|
73 | The database is the main thing around which you will develop your
|
---|
74 | application. I would say that the code is secondary compared to the data
|
---|
75 | you store and get from the database, so it is an extremely good idea to
|
---|
76 | learn SQL well, especially in the long run. For the start, it is okay to
|
---|
77 | know a little and get going along the way because you will probably work
|
---|
78 | with SQL through ORM.
|
---|
79 |
|
---|
80 | I recommend using [[https://dbeaver.io/][Dbeaver]] as IDE for running SQL-related code. It eases
|
---|
81 | the complexity of writing and running SQL.
|
---|
82 |
|
---|
83 | [[[https://en.wikipedia.org/wiki/SQL][Wikipedia: SQL]]] |
|
---|
84 | [[[https://en.wikipedia.org/wiki/Relational_database][Wikipedia: Reletational Database]]]
|
---|
85 |
|
---|
86 | *** ORM
|
---|
87 | Each tech stack provides ORM. ORM allows you to operate your database
|
---|
88 | "objects" as your programming language code without writing or
|
---|
89 | minimazing writing raw SQL. It is quite rare, when you need to work with
|
---|
90 | pure SQL or the project doesn't use ORM at all. ORMs might be something
|
---|
91 | from the list:
|
---|
92 | - [[https://hibernate.org/][Hibernate]]
|
---|
93 | - [[https://docs.djangoproject.com/][Django ORM]]
|
---|
94 | - [[https://www.doctrine-project.org/][Doctrine]]
|
---|
95 | - [[https://sqlalchemy.org/][SQLAlchemy]]
|
---|
96 | - [[https://guides.rubyonrails.org/active_record_basics.html][Rails Active Record]]
|
---|
97 | - and many others
|
---|
98 |
|
---|
99 | [[[https://en.wikipedia.org/wiki/SQL][Wikipedia: SQL]]] | [[[https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping][Wikipedia: ORM]]]
|
---|
100 |
|
---|
101 | ** In-memory database
|
---|
102 | Some data needs to be stored in RAM for better performance. For that
|
---|
103 | cases you need to learn about Redis or similar technology. Such databases are:
|
---|
104 | - [[https://en.wikipedia.org/wiki/Redis][Redis]]
|
---|
105 | - [[https://en.wikipedia.org/wiki/Memcached][Memcached]]
|
---|
106 |
|
---|
107 | [[[https://en.wikipedia.org/wiki/In-memory_database][Wikipedia: In-memory database]]]
|
---|
108 |
|
---|
109 | ** HTTP Server and HTTP protocol
|
---|
110 | You don't need to know everything from the start, but since you are
|
---|
111 | going to work as a web dev you need to know what you are using. It is
|
---|
112 | essential if you do backend APIs.
|
---|
113 |
|
---|
114 | The HTTP server is usually [[https://en.wikipedia.org/wiki/Nginx][Nginx]] or [[https://en.wikipedia.org/wiki/Apache_HTTP_Server][Apache]] (it is used rarely now). If you
|
---|
115 | work with Java, HTTP servers can be written in Java such as [[https://en.wikipedia.org/wiki/Jetty_(web_server)][Jetty]] and
|
---|
116 | others.
|
---|
117 |
|
---|
118 | [[[https://en.wikipedia.org/wiki/Web_server][Wikipedia: Web server]]] |
|
---|
119 | [[[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol][Wikipedia: Hypertext Transfer Protocol]]]
|
---|
120 |
|
---|
121 | ** Fulltext search
|
---|
122 | You might need searching functionality. It is okay to include google
|
---|
123 | search in basic cases, but it is not an acceptable choice in many
|
---|
124 | cases. To search like google does you will need full-text search
|
---|
125 | engines. You can use your database for that or specific solutions like
|
---|
126 | ElasticSearch for such purposes.
|
---|
127 |
|
---|
128 | [[[https://en.wikipedia.org/wiki/Full-text_search][Wikipedia: Full-text search]]] |
|
---|
129 | [[[https://en.wikipedia.org/wiki/Elasticsearch][Wikipedia: Elasticsearch]]] (proprietary)
|
---|
130 |
|
---|
131 | ** Message broker
|
---|
132 | RabbitMQ, ZeroMQ, Kafka and others. You need those to create queues and
|
---|
133 | other stuff that needs to be delayed. It is used because some languages
|
---|
134 | have limitation to implement such functionality, for example PHP.
|
---|
135 |
|
---|
136 | [[https://en.wikipedia.org/wiki/Message_broker][Wikipedia: Message Broker]]
|
---|
137 |
|
---|
138 | ** Unix-like OS
|
---|
139 | You will probably work on Linux, variants of BSD systems, or macs. You
|
---|
140 | need to familiarize with the system you use, different tasks require
|
---|
141 | different degree of that skill, but knowledge of what you are using
|
---|
142 | every day will be handy.
|
---|
143 |
|
---|
144 | There are many ways to learn it, but I recommend trying to install it on
|
---|
145 | your machine and learning it along the way. I recommend to starting with
|
---|
146 | [[https://debian.org/][Debian GNU/Linux distribution]]. You can read [[https://www.debian.org/doc/manuals/debian-faq/][FAQs]], manuals about
|
---|
147 | [[https://www.debian.org/releases/stable/amd64/index.en.html][installation]] and [[https://www.debian.org/doc/manuals/debian-reference/][how to use the system]]. Docs are very useful, they are
|
---|
148 | will be present in your filesystem you can read them by jumping into
|
---|
149 | /usr/share/docs folder or running ~info~ and ~man~ commands. I recommend
|
---|
150 | reading it and exploring the Debian website. Also for learning Linux
|
---|
151 | Arch Linux wiki is a good source of knowledge (Slackware and Gentoo
|
---|
152 | wikis are good as well).
|
---|
153 |
|
---|
154 | [[[https://en.wikipedia.org/wiki/Unix][Wikipedia: Unix]]] |
|
---|
155 | [[[https://en.wikipedia.org/wiki/Linux][Wikipedia: Linux]]] |
|
---|
156 | [[[https://en.wikipedia.org/wiki/Linux_distribution][Wikipedia: Linux distribution]]]
|
---|
157 |
|
---|
158 | ** OOP
|
---|
159 | You will be probably forced to use OOP techniques in corporate IT
|
---|
160 | culture. It is not something that improves development that much, but it
|
---|
161 | is a very common way to organize codebase and it is kind of great for
|
---|
162 | working with many people. If you ask me, I would say that [[https://en.wikipedia.org/wiki/Closure_(computer_programming)][Closures]] and
|
---|
163 | [[https://en.wikipedia.org/wiki/Modular_programming][Modules]] are much more game-changing tech improvements that happened in
|
---|
164 | computer science than OOP.
|
---|
165 |
|
---|
166 | Not everyone will degree with my definition, but patterns are needed to
|
---|
167 | express by your programming language object system, which is impossible
|
---|
168 | to express otherwise, because of some language limitations. It is very
|
---|
169 | true for very static and not expressive languages like PHP or Java and
|
---|
170 | less true for more expressive languages like Lisp and Haskell.
|
---|
171 |
|
---|
172 | Besides the basic principle of using OOP in your programming language of
|
---|
173 | choice, you are going to need patterns to learn. The benefits of them
|
---|
174 | are questionable, but it is not bad to know and they are being asked in
|
---|
175 | interviews often.
|
---|
176 |
|
---|
177 | The best way to learn patterns is to use [[https://en.wikipedia.org/wiki/Smalltalk][Smalltalk]] and read the book
|
---|
178 | [[https://en.wikipedia.org/wiki/Design_Patterns]["Gang of Four"]]. [[https://martinfowler.com/][Martin Fowler]] is a great source of enterprise-level
|
---|
179 | patterns and notes about enterprise development in general. Also, there
|
---|
180 | is a very useful website about design patterns with examples in many
|
---|
181 | mainstream languages: https://refactoring.guru/
|
---|
182 |
|
---|
183 | [[[https://en.wikipedia.org/wiki/Object-oriented_programming][Wikipedia: OOP]]] | [[[https://en.wikipedia.org/wiki/Software_design_pattern][Wikipedia: Software design pattern]]]
|
---|
184 |
|
---|
185 | ** Debugger
|
---|
186 | You have a chance to work with others people's code, so you have a
|
---|
187 | chance to get confused by a lot of stuff going on. Also, it is possible
|
---|
188 | that you would make a mistake and will not understand what is going on,
|
---|
189 | or where is an error. In that case, you will need a debugger. The
|
---|
190 | debugger is usually can be part of your text editor environment and it
|
---|
191 | is usually included in your programming environment alongside your
|
---|
192 | interpreter / compiler. Some languages don't include a debugger, so you
|
---|
193 | need to download it separately.
|
---|
194 |
|
---|
195 | The debugger allows you to step through your code and see the values of
|
---|
196 | stack and heap, basically you get access to everything evaluated by your
|
---|
197 | interpreter/compiler. It is very common practice to use such a thing
|
---|
198 | when errors happen and I think, that it is a great way to learn how your
|
---|
199 | language of choice works internally.
|
---|
200 |
|
---|
201 | [[[https://en.wikipedia.org/wiki/Debugger][Wikipedia: Debugger]]]
|
---|
202 |
|
---|
203 | ** Profiler
|
---|
204 | A profiler is similar to a debugger, but it helps you to detect which
|
---|
205 | part of your program is running slow, it also helps you detect memory
|
---|
206 | leaks. Sometimes you or others write functions and do everything as
|
---|
207 | intended, but it is running slow. To understand which part of your code
|
---|
208 | is a bottleneck you need to run it in a profiler. Then profiler will
|
---|
209 | show you a diagram with the execution time and memory consumption of
|
---|
210 | your functions, which is helpful even when everything works fine.
|
---|
211 |
|
---|
212 | [[[https://en.wikipedia.org/wiki/Profiling_(computer_programming)][Wikipedia: Profiler]]]
|
---|
213 |
|
---|
214 | ** Frontend
|
---|
215 | If you are not exclusively backend developer, you will probably need to
|
---|
216 | work with templates. Templates represent the outer view of your website,
|
---|
217 | which represents backend's inner workings. Frontend part can be done
|
---|
218 | using template engine or can be done as [[https://en.wikipedia.org/wiki/Single-page_application][Single Page Application]] with
|
---|
219 | lots of client-side javascript coe.
|
---|
220 |
|
---|
221 | *** HTML
|
---|
222 | HTML is used for representing your website information to your users. It
|
---|
223 | contains only structural data and very basic formatting. If you see
|
---|
224 | something that looks like an old document, that is probably plain HTML
|
---|
225 | used.
|
---|
226 |
|
---|
227 | [[[https://en.wikipedia.org/wiki/Web_template_system][Wikipedia: Web Template System]]] |
|
---|
228 | [[[https://en.wikipedia.org/wiki/Single-page_application][Wikipedia: Single-page Application]]]
|
---|
229 |
|
---|
230 | *** CSS
|
---|
231 | CSS is being used for creating styling for your HTML pages. The role of
|
---|
232 | CSS is to make your html layouts pretty, to make your buttons beautiful
|
---|
233 | and the grid is clear.
|
---|
234 |
|
---|
235 | [[[https://en.wikipedia.org/wiki/CSS][Wikipedia: CSS]]]
|
---|
236 |
|
---|
237 | *** Javascript
|
---|
238 | Javascript is being used for creating interactivity with your HTML
|
---|
239 | pages. If you see a dropdown menu, carousel, or slider, there is
|
---|
240 | probably javascript involved. Javascript is a big and complex
|
---|
241 | programming language, so you as a web developer will be required to know
|
---|
242 | only a subset of it except if your main programming language is
|
---|
243 | Javascript.
|
---|
244 |
|
---|
245 | If you work with SPA Application, you might be interested in learning:
|
---|
246 | - [[https://reactjs.org/][React]]
|
---|
247 | - [[https://vuejs.org/][Vue]]
|
---|
248 | - [[https://angularjs.org/][Angular]]
|
---|
249 | - [[https://emberjs.com/][Ember]]
|
---|
250 | - probably other technologies
|
---|
251 |
|
---|
252 | Popular non-SPA library is [[https://jquery.com/][JQuery]] and plugins for it.
|
---|
253 |
|
---|
254 | [[[https://en.wikipedia.org/wiki/Javascript][Wikipedia: Javascript]]]
|
---|
255 |
|
---|
256 | *** Template engines
|
---|
257 | Template engines are needed to transfer your backend data to your
|
---|
258 | user. It provides a way to generate HTML with embedding variables and
|
---|
259 | different functions for the developer's ease. The template engine is
|
---|
260 | usually built-in in your framework of choice.
|
---|
261 |
|
---|
262 | [[[https://en.wikipedia.org/wiki/Template_processor][Wikipedia: Template Processor]]]
|
---|
263 |
|
---|
264 | ** Docker
|
---|
265 | Your team probably will use docker for deployment or development (or
|
---|
266 | both). You might want to get your project working in a container for
|
---|
267 | better accessibility by your team. The point of docker as a development
|
---|
268 | tool is to let your team quickly get the same environment as you. The
|
---|
269 | point of docker as a deployment tool is to deploy the same environment
|
---|
270 | that you developing in, it is important to have a reproducible
|
---|
271 | production environment because catching bugs in 3 different environments
|
---|
272 | (dev, staging, prod) suck a lot.
|
---|
273 |
|
---|
274 | [[[https://en.wikipedia.org/wiki/Docker_(software)][Wikipedia: Docker]]]
|
---|
275 |
|
---|
276 | ** API
|
---|
277 | There are standard ways to build APIs. If you are going to focus on that
|
---|
278 | part of an application, only backend work, you should learn it.
|
---|
279 | - [[https://en.wikipedia.org/wiki/Representational_state_transfer][RestAPI]]
|
---|
280 | - [[https://jsonapi.org/][JSONAPI]]
|
---|
281 | - [[https://en.wikipedia.org/wiki/GraphQL][GraphQL]]
|
---|
282 | - [[https://en.wikipedia.org/wiki/SOAP][SOAP]]
|
---|
283 | - and others
|
---|
284 |
|
---|
285 | The framework you use might provide a specific way for declaring APIs. For
|
---|
286 | example, Symfony has [[https://api-platform.com/][API Platform]] and Django has [[https://www.django-rest-framework.org/][Django REST Framework]].
|
---|
287 |
|
---|
288 | [[[https://en.wikipedia.org/wiki/Web_API][Wikipedia: Web API]]]
|
---|
289 |
|
---|
290 | ** Type hierarchy and standard library
|
---|
291 | Every programming language has a standard library. The standard library
|
---|
292 | is a library that comes together with your language, so you don't need
|
---|
293 | to install any external dependencies to use it. Sometimes it is
|
---|
294 | implicit, so you don't need to import anything, sometimes it is
|
---|
295 | explicit, so you need to declare dependencies you use from the standard
|
---|
296 | library.
|
---|
297 |
|
---|
298 | To learn more about your standard library, you should see your
|
---|
299 | programming language documentation.
|
---|
300 |
|
---|
301 | [[[https://en.wikipedia.org/wiki/Standard_library][Wikipedia: Standard Library]]]
|
---|
302 |
|
---|
303 | ** Package Manager
|
---|
304 | It is hard to build something using only a standard library. Ideally you
|
---|
305 | should try to use the standard library as much as you can, but it is
|
---|
306 | very possible that the standard library will not include everything you
|
---|
307 | would ever need. In such cases, you would use external software to get
|
---|
308 | such software you can use package managers such as npm for nodejs, pip
|
---|
309 | for python, composer for php, maven for java and gem for ruby.
|
---|
310 |
|
---|
311 | Such package manager can be installed together with your programming
|
---|
312 | language interpreter or can be installed externally. Check package
|
---|
313 | manager documentation about its installation.
|
---|
314 |
|
---|
315 | It is important to know the basics of how they work in general. The
|
---|
316 | topic of dependency resolution is hard, but for end-users, it should be
|
---|
317 | quite easy to work.
|
---|
318 |
|
---|
319 | [[[https://en.wikipedia.org/wiki/Package_manager][Wikipedia: Package Manager]]]
|
---|
320 |
|
---|
321 | ** Version Manager
|
---|
322 | If you don't use docker all the way, sometimes you will need to change
|
---|
323 | your interpreter version depending on the project you use. To change
|
---|
324 | let's say nodejs 18 to nodejs 16, you will need something called version
|
---|
325 | manager, for that particular case you will need NVM (Node Version
|
---|
326 | Manager). Such version managers exist for many languages (RVM, Pyenv,
|
---|
327 | Jenv and so on).
|
---|
328 |
|
---|
329 | ** Version Control
|
---|
330 | You should always use version control system even if you work completely
|
---|
331 | alone. Version control allows you to work with other people and check
|
---|
332 | changes over your codebase over time. This is essential technology
|
---|
333 | to know for development these days, at least if we talk about hired work
|
---|
334 | as web developer.
|
---|
335 |
|
---|
336 | Version Control Systems:
|
---|
337 | - Git
|
---|
338 | - Mercurial
|
---|
339 | - Darcs
|
---|
340 | - Bazaar
|
---|
341 | - Subversion
|
---|
342 | - RCS
|
---|
343 | - CVS
|
---|
344 | - and others
|
---|
345 |
|
---|
346 | Git is popular version control system and you probably will use it or
|
---|
347 | already using it.
|
---|
348 |
|
---|
349 | To learn what is it all about you can watch [[https://www.youtube.com/watch?v=92sycL8ij-U][a short series of videos
|
---|
350 | about git from computerphile]].
|
---|
351 |
|
---|
352 | [[https://git-scm.com/book/en/v2][Book called "Pro Git"]] can help you to learn Git in more depth.
|
---|
353 |
|
---|
354 | [[[https://en.wikipedia.org/wiki/Version_control][Wikipedia: Version Control]]]
|
---|
355 |
|
---|
356 | ** Framework or(and) set of libraries
|
---|
357 | Every job sticks to its own stack. Very often it sticks to one specific
|
---|
358 | web framework, that you are required to learn. It can be something like
|
---|
359 | Django, Symfony, Spring, Ruby on Rails, or others.
|
---|
360 |
|
---|
361 | Frameworks are usually the biggest part of your codebase. The difference
|
---|
362 | between framework and library: Framework runs your code with your
|
---|
363 | classes, but libraries are being used by you explicitly and you execute
|
---|
364 | all the code from them. The concept of reverting control over the code
|
---|
365 | to your framework is called [[https://en.wikipedia.org/wiki/Inversion_of_control][Inversion of Control]].
|
---|
366 |
|
---|
367 | To learn your framework of choice you should read its documentation. If
|
---|
368 | documentation is bad then I would recommend not using it. Sometimes
|
---|
369 | framework developers sell additional courses or books on using their
|
---|
370 | product (IMO it's bad).
|
---|
371 |
|
---|
372 | ** Programming language
|
---|
373 | And the last but very important item on our list is the programming
|
---|
374 | language itself. You should know it, you should know it well. To
|
---|
375 | distinguish that item from the standard library I should point out that
|
---|
376 | programming language consists of its syntax, semantics and in general it
|
---|
377 | is every fundamental language block that is not described in that
|
---|
378 | language itself (an example is the standard library).
|
---|
379 |
|
---|
380 | Mostly it is easy to understand your programming language since most of
|
---|
381 | it is a standard library. Many fundamental concepts of programming
|
---|
382 | languages come from programming in general. So you can read a book or
|
---|
383 | learn different programming languages by documentation and there is a
|
---|
384 | huge chance that concepts from them can be applied to many languages,
|
---|
385 | not just one.
|
---|
386 |
|
---|
387 | It is a good idea to learn programming, complexity with big O notation,
|
---|
388 | data structures, algorithms, compiler/interpreter construction and so
|
---|
389 | on. But it is not so required in actual day-to-day work, especially for
|
---|
390 | web development. You can argue about this, but I would say that this is
|
---|
391 | mostly true for many types of work since many libraries and SQL
|
---|
392 | databases manage complexity on their own, all you need to declare your
|
---|
393 | classes and don't make them leak memory that much.
|
---|
394 |
|
---|
395 | [[[https://en.wikipedia.org/wiki/Computer_programming][Wikipedia: Programming]]] | [[[https://en.wikipedia.org/wiki/Programming_language][Wikipedia: Programming language]]] | [[[https://en.wikipedia.org/wiki/Computer_science][Wikipedia: Computer Science]]]
|
---|
396 |
|
---|
397 | * Most popular programming languages
|
---|
398 | Your choices are quite limited here. More jobs available, more chances
|
---|
399 | to get that job. there will be different results in different areas. I
|
---|
400 | think that in most areas you will have a choices between Java, Python
|
---|
401 | and maybe PHP or Ruby. If you want to end up insane, there is also
|
---|
402 | Javascript, but it is not that mature for backend as other technologies
|
---|
403 | (it is my biased opinion), so I will not include it (there is only "big"
|
---|
404 | framework called NestJS and demend of it is probably low).
|
---|
405 |
|
---|
406 | ** Java / C#
|
---|
407 | Probably the most popular programming languages out there especially
|
---|
408 | when it comes to working at companies. It is statically typed and quite
|
---|
409 | easy to learn languages. They are restricted to OOP moslty, so you
|
---|
410 | prorably will use oop design patterns here more than in other
|
---|
411 | programming language. Type system are not that advanced as in ML
|
---|
412 | dialects and actually it is unsound as in other mainstream languages,
|
---|
413 | but it provides some merits of safety compared to nonsafe C or weak
|
---|
414 | typed languages such PHP and Javascript.
|
---|
415 |
|
---|
416 | Frameworks:
|
---|
417 | - [[https://spring.io/projects/spring-framework][Spring]]
|
---|
418 | - [[https://dotnet.microsoft.com/en-us/][.Net]]
|
---|
419 |
|
---|
420 | ORM:
|
---|
421 | - [[https://hibernate.org/orm/][Hibernate]]
|
---|
422 |
|
---|
423 | [[[https://learn.microsoft.com/en-us/dotnet/csharp/][C# Documentation]]] | [[[https://docs.oracle.com/javase/tutorial/][Java Documentation]]]
|
---|
424 |
|
---|
425 | ** Python
|
---|
426 | Second the most popular programming language. It differs from Java a
|
---|
427 | lot. It is dynamic typed, strongly type, more object oriented than Java
|
---|
428 | (everything is an object), but somehow manages to look like a procedural
|
---|
429 | code, it forces you to indent your code right.
|
---|
430 |
|
---|
431 | Personally I like Python more than other mainstream languages, it does
|
---|
432 | many things right. I like that being fully object-oriented language it
|
---|
433 | doesn't drop to dogmatic believing in OOP patterns. It also has good
|
---|
434 | [[https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop][REPL]] and [[https://en.wikipedia.org/wiki/Reflective_programming][reflection]]/[[https://en.wikipedia.org/wiki/Introspection][introspection]] abilities without writing much code
|
---|
435 | like in Java or PHP.
|
---|
436 |
|
---|
437 | Frameworks:
|
---|
438 | - [[https://djangoproject.com/][Django]]
|
---|
439 | - [[https://palletsprojects.com/p/flask/][Flask]]
|
---|
440 | - [[https://fastapi.tiangolo.com/][FastAPI]]
|
---|
441 | - [[https://trypyramid.com/][Pyramid]]
|
---|
442 |
|
---|
443 | ORM:
|
---|
444 | - Django ORM (Active Record)
|
---|
445 | - [[https://www.sqlalchemy.org/][SQLAlchemy]] (Data Mapper)
|
---|
446 |
|
---|
447 | Learning resources:
|
---|
448 | - [[https://www.python.org/doc/][Python Documentation]]
|
---|
449 | - [[https://realpython.com/][Real Python]]
|
---|
450 | - [[https://www.fullstackpython.com/][Fullstack Python]]
|
---|
451 |
|
---|
452 | ** PHP
|
---|
453 | PHP might be unpopular in some areas, but it is quite popular in
|
---|
454 | Russia. It runs lots of small businesses and it is probably the easiest
|
---|
455 | tech stack to get a job (but not the easiest language to work with). The
|
---|
456 | language has lots of caveats such as weak typing, unorganized standard
|
---|
457 | library, less developed OOP and type checking, lots of procedural php
|
---|
458 | legacy, most functions of the language is defined in C. My personal
|
---|
459 | observation is that PHP has the worst error messages compared to other
|
---|
460 | high level languages.
|
---|
461 |
|
---|
462 | Frameworks:
|
---|
463 | - [[https://symfony.com/][Symfony]]
|
---|
464 | - [[https://laravel.com/][Laravel]]
|
---|
465 |
|
---|
466 | ORM:
|
---|
467 | - [[https://www.doctrine-project.org/][Doctrine]]
|
---|
468 |
|
---|
469 | Learning resources:
|
---|
470 | - [[https://www.php.net/docs.php][PHP documentation]]
|
---|
471 | - [[https://symfonycasts.com/][Symfonycast (paid)]]
|
---|
472 |
|
---|
473 | * Less popular programming language
|
---|
474 | ** Go
|
---|
475 | Is compiled statically typed procedural language made by creators of
|
---|
476 | C. It has garbage collection as interpreted languages. It has rich
|
---|
477 | standard library and as I understand used mostly for devops or
|
---|
478 | microservices and less used for building monolithic application as in
|
---|
479 | other programming languages. It also has strong abilities to do parallel
|
---|
480 | computations. Language doesn't have REPL and strong
|
---|
481 | reflection/introspection abilities.
|
---|
482 |
|
---|
483 | Learning resources:
|
---|
484 | - [[https://go.dev/][GO documentation]]
|
---|
485 |
|
---|
486 | ** Ruby
|
---|
487 | Ruby is mostly used for web development, because of popularity of Ruby
|
---|
488 | on Rails framework. The demand of it might be low in some areas, so
|
---|
489 | investigate your market yourself before learning it. Ruby is strongly
|
---|
490 | type object-oriented in smalltalk sense language. It has mixed lisp,
|
---|
491 | perl and smalltalk roots. It has very powerful REPL,
|
---|
492 | reflection/introspection abilities, probably the best after LISPs and
|
---|
493 | Smalltalk. The biggest downside of the language is lack of good
|
---|
494 | documentation on ruby website.
|
---|
495 |
|
---|
496 | Frameworks:
|
---|
497 | - [[https://rubyonrails.org/][Ruby on Rails]]
|
---|
498 | - [[https://sinatrarb.com/][Sinatra]]
|
---|
499 |
|
---|
500 | ORM:
|
---|
501 | - [[https://guides.rubyonrails.org/active_record_basics.html][Active Record]]
|
---|
502 | - [[https://en.wikipedia.org/wiki/DataMapper][DataMapper]]
|
---|
503 |
|
---|
504 | Learning resources:
|
---|
505 | - [[https://poignant.guide/][why's (poignant) Guide to Ruby]]
|
---|
506 | - [[https://ruby-doc.org/docs/ruby-doc-bundle/ProgrammingRuby/book/language.html][Programming Ruby Book]]
|
---|
507 | - [[https://www.ruby-lang.org/en/][Ruby Website]]
|
---|
508 |
|
---|
509 | * Harder to find a work languages
|
---|
510 | - Scala
|
---|
511 | - Haskell
|
---|
512 | - Erlang
|
---|
513 | - Clojure
|
---|
514 | - Rust
|
---|
515 |
|
---|
516 | - (C/C++) since they are not suitable for web development
|
---|
517 |
|
---|
518 | * Almost impossible to find a work languages
|
---|
519 | - Any LISP
|
---|
520 | - SML
|
---|
521 | - Other powerful functional programming languages such as Agda, COQ and
|
---|
522 | so on
|
---|
523 |
|
---|
524 | * How to get good
|
---|
525 | First of all don't buy any paid course or workshops, most information
|
---|
526 | are available for free for everyone. Just read wikipedia links I
|
---|
527 | provided in artible and follow links there to official documentation of
|
---|
528 | the thing you want to learn.
|
---|
529 |
|
---|
530 | When it comes to programming in general I recommend learning it doing
|
---|
531 | test projects or just playing with the code. For practice you can also
|
---|
532 | use services like Exercism or Codewars to practice pure programming
|
---|
533 | solving problems. Also there is great web resource for complete
|
---|
534 | beginners called [[https://freecodecamp.org/][FreeCodeCamp]], it covers basics of web development and
|
---|
535 | javascript programming.
|
---|
536 |
|
---|
537 | Also I recommend reading old academic books on programming, because many
|
---|
538 | concepts are the same in many programming languages, what you need is
|
---|
539 | the ability think abstractly using data structures and algorithms. I
|
---|
540 | recommend anyone who wants to really grock programming to read:
|
---|
541 | - [[https://en.wikipedia.org/wiki/Structure_and_Interpretation_of_Computer_Programs][SICP]]
|
---|
542 | - [[https://en.wikipedia.org/wiki/How_to_Design_Programs][HTDP]]
|
---|
543 | - [[https://www.cis.upenn.edu/~bcpierce/tapl/][TAPL]]
|
---|
544 | - [[https://en.wikipedia.org/wiki/Essentials_of_Programming_Languages][Essentials Of Programming Languages]]
|
---|
545 | - [[https://download-mirror.savannah.gnu.org/releases/pgubook/ProgrammingGroundUp-1-0-booksize.pdf][Programming from the ground up]]
|
---|
546 | - Also see [[https://www.gnu.org/doc/other-free-books.html][free books from GNU website]]
|
---|
547 |
|
---|
548 | /Basically the rule of thumb is that if the book has wikipedia article,
|
---|
549 | it is probably a good book and you should read it/.
|
---|
550 |
|
---|
551 | There are many free sources to learn you just need to invest your time
|
---|
552 | into it. The downside of learning LISP is that mainstream programming on
|
---|
553 | your job can feel very restrictive and less expressive. Also you will
|
---|
554 | probably learn, that many mainstream languages have lots of quircks or
|
---|
555 | plainly bad design decisions.
|
---|
556 |
|
---|
557 | * Conclusion
|
---|
558 | It is also possible to get a job with less popular stack, but if you are
|
---|
559 | just starting it might be reasonable to focus on popular one first. The
|
---|
560 | list of technologies is quite big, so newbies can be lost in new
|
---|
561 | information. Be patient and learn one thing at the time. I would
|
---|
562 | recommend starting with programming language documentation, then SQL and
|
---|
563 | then going to docs of your web-framework / library.
|
---|
564 |
|
---|
565 | Demand for web developers is huge and in my opinion it is the easiest
|
---|
566 | way to get a job. The web development sucks in general (at least for
|
---|
567 | me), but that topic will be hold for another article.
|
---|