source: content/en/posts/web-stacks.org.old@ ca03784

Last change on this file since ca03784 was ca03784, checked in by Mikhail Kirillov <w96k@…>, on Oct 6, 2022 at 12:35:49 PM

Push unfinished article

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