source: content/en/posts/web-stacks.org@ 4c9c7af

Last change on this file since 4c9c7af was 4c9c7af, checked in by Mikhail Kirillov <w96k@…>, on Sep 3, 2022 at 1:41:27 AM

Add unfinished article

  • Property mode set to 100644
File size: 17.6 KB
Line 
1#+TITLE: Tech stacks for earning money as web developer
2#+DATE: <2022-07-27 Ср>
3#+LANGUAGE: en
4
5* Tech stacks for earning money as web developer
6#+BEGIN_abstract
7In this article I'm going to categorize languages, frameworks, libraries
8and software by a criteria of ease of starting to earn money. It is
9biased and irrational, be aware.
10#+END_abstract
11I work in IT field as web developer for many years, but cannot claim
12myself as professional. I don't like to work in general, I don't like
13corporate IT culture and I don't like web development in particular, but
14I has an experience in that field and it is much easier to dive in in
15order to earn money for a living than other IT fields. I hope this text
16will be useful for someone who is outside of field of web development
17and wish to start earning money in that field.
18
19* What is tech stack
20#+BEGIN_abstract
21Tech stack is the mix of technologies (software, frameworks, libraries)
22that project uses at your current or future company.
23#+END_abstract
24
25Knowing everything from your techstack is not the only key for
26success. It can sound obvious, but social skills can play more important
27role than your programming skills. Programming is very social activity,
28everything you are going to use is built by other people, sometimes
29something breaks and you need to contact with people that provide you
30software you use, it is also important to communicate with your
31company's team and not bring yourself into conflicts.
32
33Next I present the list of technologies you should know to work as web
34developer. The list is not mandotary and you are not required to learn
35it on expert level to get your job offer.
36
37* Fundamental technologies
38Some things you will use in most of your projects, so you are better to
39familarize with them anyway. What I've discovered, that most knowledge
40of some tech is transfarable to other techs.
41** Text Editor
42Not sure if I need to write it, but you need development environment
43where you will write code, run tests and compile your project.
44
45*Most popular choices*
46- [[https://gnu.org/software/emacs/][Emacs]] / [[https://www.vim.org/][Vim]] (I recommend them for a long run)
47- Jetbrains IDE (proprietary)
48- VSCode (proprietary)
49
50*Less popular*
51- Sublime (proprietary)
52- [[https://www.eclipse.org/][Eclipse]] / [[https://netbeans.apache.org/][Netbeans]] / [[https://www.kdevelop.org/][Kdevelop]]
53- other editors and IDEs
54
55Proprietary means that source code is not available and probably it
56costs money to use and you as a user don't have control over it. You can
57learn more why it is important on [[https://gnu.org/philosophy/][GNU website]]. Such important tool as
58text editor should be free for everyone.
59
60[[[https://en.wikipedia.org/wiki/Text_editor][Wikipedia: Text editor]]] |
61[[[https://en.wikipedia.org/wiki/Integrated_development_environment][Wikipedia: Integrated development environment]]]
62
63** SQL
64Or it should be called persistance, but mostly you will use something
65like [[https://www.postgresql.org/][Postgres]] or [[https://mariadb.com/kb/en/][MariaDB]]/[[https://mysql.com/][MySQL]]. Rarely it can be nosql like
66mongodb.
67
68The database is the main thing aroud which you will develop your
69application. I would say that the code is secondary compared to the data
70you store and get from the database, so it is extremely good idea to
71learn SQL well especially for a long run. For the start it is okay to
72know a little and get going along the way, because you will probably
73work with SQL through ORM.
74
75I recommend to use [[https://dbeaver.io/][Dbeaver]] as IDE for running SQL related code. It eases
76the complexity of writing and running SQL.
77
78[[[https://en.wikipedia.org/wiki/SQL][Wikipedia: SQL]]] |
79[[[https://en.wikipedia.org/wiki/Relational_database][Wikipedia: Reletational Database]]]
80
81*** ORM
82Each tech stack provides ORM. It is quite rare, where you need to work
83with pure SQL or the project doesn't use ORM at all. ORMs might be
84something from the list:
85- [[https://hibernate.org/][Hibernate]]
86- [[https://docs.djangoproject.com/][Django ORM]]
87- [[https://www.doctrine-project.org/][Doctrine]]
88- [[https://sqlalchemy.org/][SQLAlchemy]]
89- [[https://guides.rubyonrails.org/active_record_basics.html][Rails Active Record]]
90- and many others
91
92[[[https://en.wikipedia.org/wiki/SQL][Wikipedia: SQL]]] | [[[https://en.wikipedia.org/wiki/Object%E2%80%93relational_mapping][Wikipedia: ORM]]]
93
94** In-memory database
95Some data needs to be stored in RAM for better performance. For that
96cases you need to learn about Redis or similar technology.
97
98[[[https://en.wikipedia.org/wiki/In-memory_database][Wikipedia: In-memory database]]]
99
100** HTTP Server and HTTP protocol
101You don't actually need to know everything from the start, but since you
102are going to work as web dev you need to know what you are using. It is
103essential if you do backend APIs.
104
105HTTP 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
106work with Java, http servers can be written in Java such as [[https://en.wikipedia.org/wiki/Jetty_(web_server)][Jetty]] and
107others.
108
109[[[https://en.wikipedia.org/wiki/Web_server][Wikipedia: Web server]]] |
110[[[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol][Wikipedia: Hypertext Transfer Protocol]]]
111
112** Fulltext search
113You might need searching functionality. In basic cases it is okay to
114include google search, but in many cases it is not acceptable choice. To
115do a search like google does you will need fulltext search engines. You
116can use your database for that or specific solutins like ElasticSearch
117for such purpose.
118
119[[[https://en.wikipedia.org/wiki/Full-text_search][Wikipedia: Full-text search]]] |
120[[[https://en.wikipedia.org/wiki/Elasticsearch][Wikipedia: Elasticsearch]]] (proprietary)
121
122** Message broker
123RabbitMQ, ZeroMQ, Kafka and others. You need those to create queues and
124other stuff that needs to be delayed.
125
126[[https://en.wikipedia.org/wiki/Message_broker][Wikipedia: Message Broker]]
127
128** Unix-like OS
129You will probably work on Linux, variants of BSD system or macs. You
130need to familiarize with the system you use, different tasks require
131different degree of that skill, but knowledge of what you are using
132every day will be handy.
133
134There are many ways to learn it, but I recommend try to install it on
135your machine and learn it along the way. I recommend to start with
136[[https://debian.org/][Debian GNU/Linux distribution]]. You can read [[https://www.debian.org/doc/manuals/debian-faq/][FAQ]], manuals about
137[[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
138will be present in your filesystem you can read it by jumping into
139/usr/share/docs folder or running ~info~ and ~man~ commands. I recommend to
140read it and explore Debian website. Also for learning linux Arch Linux
141wiki is good source of knowledge (Slackware and Gentoo wikis are good as
142well).
143
144[[[https://en.wikipedia.org/wiki/Unix][Wikipedia: Unix]]] |
145[[[https://en.wikipedia.org/wiki/Linux][Wikipedia: Linux]]] |
146[[[https://en.wikipedia.org/wiki/Linux_distribution][Wikipedia: Linux distribution]]]
147
148** OOP
149In corporate IT culture you will probably forced to use OOP
150techniques. It is not something that really improves development that
151much, but it is very common way to orginize codebase and it is kind of
152great for working with many people.
153
154Not everyone will degree with my definition, but patterns are needed to
155express by your programming language object system, which is impossible
156to express otherwise, because of different language limits. It is very
157true for very static and not expressive language like PHP or Java and
158less true for more expressive languages like Lisp and Haskell.
159
160Besides basic principle of using OOP in your programming language of
161choice you are going to need patterns to learn. The benefits of them are
162questinable, but it is not bad to know and they are being asked on
163interviews very often.
164
165The best way to learn patterns are to use [[https://en.wikipedia.org/wiki/Smalltalk][Smalltalk]] and read the book
166[[https://en.wikipedia.org/wiki/Design_Patterns]["Gang of Four"]]. Also there is very useful website about design patterns
167with examples in many mainstream languages: https://refactoring.guru/
168
169[[[https://en.wikipedia.org/wiki/Object-oriented_programming][Wikipedia: OOP]]]
170
171** Debugger
172You have a chance to work with others people code, so you have a chance
173to get confused by a lot of stuff going on. Also it is possible that you
174would make a mistake and will not understand what is going on, where is
175an error. In that case you will need a debugger. Debugger is usually can
176be the part of your text editor environment and it is usually included
177in your programming environment alongside your interpreter /
178compiler. Some languages don't include a debugger, so you need to
179download it seperately.
180
181Debugger allows you to step through your code and see the values of
182stack and heap, basically you get an access to everything evaluated by
183your interpreter/compiler. It is very common practice to use such a
184thing when errors happen and I personally think, that it is great way to
185learn how your language of choice works internally.
186
187[[[https://en.wikipedia.org/wiki/Debugger][Wikipedia: Debugger]]]
188
189** Profiler
190Profiler is similar to debugger, but it helps you to detect which part
191of your programm is running slow, it also helps you detect memory
192leaks. Sometimes you or others write functions and does everything as
193intended, but it is running slow. To understand which part of your code
194is a bottleneck you need to run it in a profiler. Then profiler will
195show you an diagram with execution time and memory consumption of your
196functions, which is helpful even when everything works fine.
197
198[[[https://en.wikipedia.org/wiki/Profiling_(computer_programming)][Wikipedia: Profiler]]]
199
200** Frontend
201If you are not exclusively backend developer, you will probably need to
202work with templates. Templates represent the outer view of your website,
203which represents backend's inner workings. Frontend part can be done
204using template engine or can be done as Single Page Application with
205lots of client-side javascript coe.
206
207
208*** HTML
209HTML is being used for representing your website information to your
210users. It contains only structural data and very basic formatting. If
211you see something that looks like old document, that is probably plain
212html used.
213
214[[[https://en.wikipedia.org/wiki/Web_template_system][Wikipedia: Web Template System]]] |
215[[[https://en.wikipedia.org/wiki/Single-page_application][Wikipedia: Single-page Application]]]
216
217*** CSS
218CSS is being used for creating styling for your html pages. The role of
219CSS is to make your html layouts pretty, to make your buttons beatiful
220and grid is clear.
221
222[[[https://en.wikipedia.org/wiki/CSS][Wikipedia: CSS]]]
223
224*** Javascript
225Javascript is being used for creating interectivity with your HTML
226pages. If you see dropdown menu, carousel or a slider, there is probably
227javascript involved. Javascript is big and complex programming language,
228so you as web developer will be required to know only subset of it
229except if your main programming language is Javascript.
230
231[[[https://en.wikipedia.org/wiki/Javascript][Wikipedia: Javascript]]]
232
233*** Template engines
234Template engines are needed to transfer your backend data to your
235user. It provides the way to generate HTML with embedding variables and
236different function for developer's ease. Template engine is usually
237built-in in your framework of choice.
238
239[[[https://en.wikipedia.org/wiki/Template_processor][Wikipedia: Template Processor]]]
240
241** Docker
242Your team probably will use docker for deployment or development (or
243both). Anyway you might want to get your project working in a container
244for better accessability by your team. The point of docker as
245development tool is to let your team quickly to get the same environment
246as you. The point of docker as deployment tool to deploy the same
247environment that you developing in, its important to have reproducible
248production environment, because catching bugs in 3 different
249environments (dev, staging, prod) suck a lot.
250** API
251There are standard ways to build APIs. If you are going to focus on that
252part of application, only backend work, you should learn it.
253- RestAPI
254- JSONAPI
255-
256** Type hierarchy and standard library
257
258** Framework or(and) set of libraries
259Every job sticks on their own stack. Very often it sticks to one
260specific web framework, that you are required to learn. It can be
261something like Django, Symfony, Spring, Ruby on Rails or others.
262
263Frameworks are usually the biggest part of your codebase. The difference
264between framework and library: Framework runs your code with your
265classes, but libraries are being used by you explicitly and you execute
266all the code from them. The concept of reverting the control over the
267code to your framework is called [[https://en.wikipedia.org/wiki/Inversion_of_control][Inversion of Control]].
268** Programming language
269
270You will need to
271* Most popular programming languages
272Basically your choices are quite limited here. More jobs available, more
273chances to get that job. there will be different results in different
274areas. I think that in most areas you will have a choices between Java,
275Python and maybe PHP or Ruby. If you want to end up insane, there is
276also Javascript, but it is not that mature for backend as other
277technologies, so I will not include it (there is only "big" framework
278called NestJS, its demand should be low).
279
280** Java / C#
281Probably the most popular programming languages out there especially
282when it comes to working at companies. It is statically typed and quite
283easy to learn languages. They are restricted to OOP only, so you
284prorably will use oop design patterns here the most. Type system are not
285that advanced as in ML dialects and actually it is unsound, but it
286provides some merits of safety compared to nonsafe C.
287
288Frameworks:
289- Spring
290- .Net
291
292ORM:
293- Hibernate
294
295** Python
296Second the most popular programming language. It differs from Java a
297lot. It is dynamic typed, more object oriented (everything is an
298object), it forces you to indent your code right.
299
300Frameworks:
301- Django
302- Flask
303- FastAPI
304
305ORM:
306- Django ORM
307- SQLAlchemy
308
309** PHP
310PHP might be unpopular in some areas, but it is quite popular in
311Russia. It runs lots of small businesses and it is probably the easiest
312tech stack to get a job (but not the easiest language to work with). The
313language has lots of caveats such as weak typing, unorganized standard
314library, less developed OOP and type checking, lots of procedural php
315legacy, most functions of the language is defined in C.
316
317Frameworks:
318- Symfony
319- Laravel
320
321ORM:
322- Doctrine
323
324* Less popular programming language
325** Go
326** Ruby
327Ruby is mostly used solely for web development with popular Ruby on
328Rails framework. The demand of it might be low in some areas, so
329investigate your market yourself before learning it. Ruby is strongly
330type object-oriented in smalltalk sense language. It has mixed lisp,
331perl and smalltalk roots.
332
333Frameworks:
334- Ruby on Rails
335- Sinatra
336
337ORM:
338- Active Record
339- DataMapper
340
341* Great language, but bad for finding work
342* How to get good
343First of all don't buy any paid course or workshops, most information
344are available for free for everyone. Just read wikipedia links I
345provided in artible and follow links there to official documentation of
346the thing you want to learn.
347
348When it comes to programming in general I recommend to learn it doing
349test projects or just playing with the code. For practice you can also
350use services like Exercism or Codewars to practice pure programming
351solving problems. Also there is great web-resource for complete
352beginners called [[https://freecodecamp.org/][FreeCodeCamp]], it covers basics of web development and
353javascript programming.
354
355Also I recommend reading old academic books on programming, because many
356concepts are the same in many programming languages, what you need is
357the ability think abstractly using data structures and algorhythms. I
358recommend anyone who wants to really grock programming to read:
359- [[https://en.wikipedia.org/wiki/Structure_and_Interpretation_of_Computer_Programs][SICP]] (mit scheme)
360- [[https://en.wikipedia.org/wiki/How_to_Design_Programs][HTDP]] (racket)
361- [[https://www.cis.upenn.edu/~bcpierce/tapl/][TAPL]]
362- [[https://en.wikipedia.org/wiki/Essentials_of_Programming_Languages][Essentials Of Programming Languages]]
363- [[https://download-mirror.savannah.gnu.org/releases/pgubook/ProgrammingGroundUp-1-0-booksize.pdf][Programming from the ground up]]
364- Also see [[https://www.gnu.org/doc/other-free-books.html][free books from GNU website]]
365
366/Basically the rule of thumb is that if the book has wikipedia article, it is probably a good book and you should read it/.
367
368There are many free sources to learn you just need to invest your time
369into it. The downside of learning LISP is that mainstream programming on
370your job can feel very restrictive and less expressive. Also you will
371probably learn, that many mainstream languages have lots of quircks or
372plainly bad design decisions.
373
374* Conclusion
375It is possible to get a job with less popular stack, but if you are just
376starting it might be reasonable to focus on popular one first. The list
377of technologies is quite big, so newbies can be lost in new
378information. Be patient and learn one thing at the time. I would
379recommend starting with programming language documentation, then SQL and
380then going to docs of your web-framework / library.
381
382Demand for web developers is huge and in my opinion it is the easiest
383way to get a job. The web development sucks in general (at least for
384me), but that topic will be hold for another article.
385
386If to continue tech stack tier list sorted by popularity next one should be:
387
388** Advanced tier
389- Scala
390- Clojure
391- Erlang
392- Rust
393
394** Rare tier
395- Common Lisp / Scheme
396- Haskell
397- SML / Ocaml
398** Rare and legacy tier
399- Perl
400- Cobol
Note: See TracBrowser for help on using the repository browser.