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

Last change on this file since cdbce2b was cdbce2b, checked in by w96k <w96k.ru@…>, on Oct 11, 2022 at 11:27:11 PM

Add article about web dev tech stacks; Change copyright to copyleft;

Also delete unused articles

  • Property mode set to 100644
File size: 26.7 KB
Line 
1#+TITLE: Technologies of web development
2#+DATE: <2022-10-11 Tue>
3#+LANGUAGE: en
4
5* Technologies of web development
6#+BEGIN_abstract
7In this article I'm going to categorize languages, frameworks, libraries
8and software by a criteria of usage such technologies at hired work. It
9might be biased and irrational, be aware.
10#+END_abstract
11
12I work in the IT field as a web developer for many years, but cannot
13proudly claim myself as a professional. I don't know many things, I
14don't like to work in general, I don't like corporate IT culture and I
15don't like web development in particular, but I have an experience in
16that field, and it is much easier to dive into it to earn money
17for a living than other IT fields or other professions at my location. I
18hope this text will be useful for someone who is outside of the field of
19web development to get a grasp of technologies to learn.
20
21* What is tech stack
22#+BEGIN_abstract
23The tech stack is the mix of technologies (software, frameworks, libraries)
24that the project uses to implement a planned set of features.
25#+END_abstract
26
27Knowing everything from your tech stack is not the only key to
28success. It can sound obvious, but social skills can play a more
29important role than your programming skills. Programming is a very
30social activity, everything you are going to use is built by other
31people, sometimes something breaks and you need to contact people that
32provide you the software you use, it is also important to communicate
33with your company's team and not bring yourself into conflicts. And
34don't be that guy (or me), who hates something technical so much, that
35people get annoyed by you, it won't help you in any way. It can be seen
36as a suppression of your ego, but the truth is that hired work is more
37about collectivism than individualism.
38
39Next, I present the list of technologies you should know to work as a
40web developer. The list is not mandatary and you are not required to
41learn it on an expert level to get your job offer.
42
43* Technologies to learn
44Some things you will use in most of your projects, so you are better to
45familiarize yourself with them anyway. What I've discovered, is that
46most knowledge of some tech is transferable to other techs.
47** Text Editor
48Not sure if I need to write it, but you need a development environment
49where 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
61Proprietary means that source code is not available and probably it
62costs money to use and you as a user don't have control over it. You can
63learn more why it is important on the [[https://gnu.org/philosophy/][GNU website]]. Such an important
64tool 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
70Or it should be called persistence, but mostly you will use something
71like [[https://www.postgresql.org/][Postgres]] or [[https://mariadb.com/kb/en/][MariaDB]]/[[https://mysql.com/][MySQL]]. Rarely it can be NoSQL like MongoDB.
72
73The database is the main thing around which you will develop your
74application. I would say that the code is secondary compared to the data
75you store and get from the database, so it is an extremely good idea to
76learn SQL well, especially in the long run. For the start, it is okay to
77know a little and get going along the way because you will probably work
78with SQL through ORM.
79
80I recommend using [[https://dbeaver.io/][Dbeaver]] as IDE for running SQL-related code. It eases
81the 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
87Each tech stack provides ORM. ORM allows you to operate your database
88"objects" as your programming language code without writing or
89minimazing writing raw SQL. It is quite rare, when you need to work with
90pure SQL or the project doesn't use ORM at all. ORMs might be something
91from 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
102Some data needs to be stored in RAM for better performance. For that
103cases 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
110You don't need to know everything from the start, but since you are
111going to work as a web dev you need to know what you are using. It is
112essential if you do backend APIs.
113
114The 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
115work with Java, HTTP servers can be written in Java such as [[https://en.wikipedia.org/wiki/Jetty_(web_server)][Jetty]] and
116others.
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
122You might need searching functionality. It is okay to include google
123search in basic cases, but it is not an acceptable choice in many
124cases. To search like google does you will need full-text search
125engines. You can use your database for that or specific solutions like
126ElasticSearch 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
132RabbitMQ, ZeroMQ, Kafka and others. You need those to create queues and
133other stuff that needs to be delayed. It is used because some languages
134have 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
139You will probably work on Linux, variants of BSD systems, or macs. You
140need to familiarize with the system you use, different tasks require
141different degree of that skill, but knowledge of what you are using
142every day will be handy.
143
144There are many ways to learn it, but I recommend trying to install it on
145your 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
148will 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
150reading it and exploring the Debian website. Also for learning Linux
151Arch Linux wiki is a good source of knowledge (Slackware and Gentoo
152wikis 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
159You will be probably forced to use OOP techniques in corporate IT
160culture. It is not something that improves development that much, but it
161is a very common way to organize codebase and it is kind of great for
162working 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
164computer science than OOP.
165
166Not everyone will degree with my definition, but patterns are needed to
167express by your programming language object system, which is impossible
168to express otherwise, because of some language limitations. It is very
169true for very static and not expressive languages like PHP or Java and
170less true for more expressive languages like Lisp and Haskell.
171
172Besides the basic principle of using OOP in your programming language of
173choice, you are going to need patterns to learn. The benefits of them
174are questionable, but it is not bad to know and they are being asked in
175interviews often.
176
177The 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
179patterns and notes about enterprise development in general. Also, there
180is a very useful website about design patterns with examples in many
181mainstream 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
186You have a chance to work with others people's code, so you have a
187chance to get confused by a lot of stuff going on. Also, it is possible
188that you would make a mistake and will not understand what is going on,
189or where is an error. In that case, you will need a debugger. The
190debugger is usually can be part of your text editor environment and it
191is usually included in your programming environment alongside your
192interpreter / compiler. Some languages don't include a debugger, so you
193need to download it separately.
194
195The debugger allows you to step through your code and see the values of
196stack and heap, basically you get access to everything evaluated by your
197interpreter/compiler. It is very common practice to use such a thing
198when errors happen and I think, that it is a great way to learn how your
199language of choice works internally.
200
201[[[https://en.wikipedia.org/wiki/Debugger][Wikipedia: Debugger]]]
202
203** Profiler
204A profiler is similar to a debugger, but it helps you to detect which
205part of your program is running slow, it also helps you detect memory
206leaks. Sometimes you or others write functions and do everything as
207intended, but it is running slow. To understand which part of your code
208is a bottleneck you need to run it in a profiler. Then profiler will
209show you a diagram with the execution time and memory consumption of
210your functions, which is helpful even when everything works fine.
211
212[[[https://en.wikipedia.org/wiki/Profiling_(computer_programming)][Wikipedia: Profiler]]]
213
214** Frontend
215If you are not exclusively backend developer, you will probably need to
216work with templates. Templates represent the outer view of your website,
217which represents backend's inner workings. Frontend part can be done
218using template engine or can be done as [[https://en.wikipedia.org/wiki/Single-page_application][Single Page Application]] with
219lots of client-side javascript coe.
220
221*** HTML
222HTML is used for representing your website information to your users. It
223contains only structural data and very basic formatting. If you see
224something that looks like an old document, that is probably plain HTML
225used.
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
231CSS is being used for creating styling for your HTML pages. The role of
232CSS is to make your html layouts pretty, to make your buttons beautiful
233and the grid is clear.
234
235[[[https://en.wikipedia.org/wiki/CSS][Wikipedia: CSS]]]
236
237*** Javascript
238Javascript is being used for creating interactivity with your HTML
239pages. If you see a dropdown menu, carousel, or slider, there is
240probably javascript involved. Javascript is a big and complex
241programming language, so you as a web developer will be required to know
242only a subset of it except if your main programming language is
243Javascript.
244
245If 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
252Popular 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
257Template engines are needed to transfer your backend data to your
258user. It provides a way to generate HTML with embedding variables and
259different functions for the developer's ease. The template engine is
260usually built-in in your framework of choice.
261
262[[[https://en.wikipedia.org/wiki/Template_processor][Wikipedia: Template Processor]]]
263
264** Docker
265Your team probably will use docker for deployment or development (or
266both). You might want to get your project working in a container for
267better accessibility by your team. The point of docker as a development
268tool is to let your team quickly get the same environment as you. The
269point of docker as a deployment tool is to deploy the same environment
270that you developing in, it is important to have a reproducible
271production 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
277There are standard ways to build APIs. If you are going to focus on that
278part 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
285The framework you use might provide a specific way for declaring APIs. For
286example, 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
291Every programming language has a standard library. The standard library
292is a library that comes together with your language, so you don't need
293to install any external dependencies to use it. Sometimes it is
294implicit, so you don't need to import anything, sometimes it is
295explicit, so you need to declare dependencies you use from the standard
296library.
297
298To learn more about your standard library, you should see your
299programming language documentation.
300
301[[[https://en.wikipedia.org/wiki/Standard_library][Wikipedia: Standard Library]]]
302
303** Package Manager
304It is hard to build something using only a standard library. Ideally you
305should try to use the standard library as much as you can, but it is
306very possible that the standard library will not include everything you
307would ever need. In such cases, you would use external software to get
308such software you can use package managers such as npm for nodejs, pip
309for python, composer for php, maven for java and gem for ruby.
310
311Such package manager can be installed together with your programming
312language interpreter or can be installed externally. Check package
313manager documentation about its installation.
314
315It is important to know the basics of how they work in general. The
316topic of dependency resolution is hard, but for end-users, it should be
317quite easy to work.
318
319[[[https://en.wikipedia.org/wiki/Package_manager][Wikipedia: Package Manager]]]
320
321** Version Manager
322If you don't use docker all the way, sometimes you will need to change
323your interpreter version depending on the project you use. To change
324let's say nodejs 18 to nodejs 16, you will need something called version
325manager, for that particular case you will need NVM (Node Version
326Manager). Such version managers exist for many languages (RVM, Pyenv,
327Jenv and so on).
328
329** Version Control
330You should always use version control system even if you work completely
331alone. Version control allows you to work with other people and check
332changes over your codebase over time. This is essential technology
333to know for development these days, at least if we talk about hired work
334as web developer.
335
336Version Control Systems:
337- Git
338- Mercurial
339- Darcs
340- Bazaar
341- Subversion
342- RCS
343- CVS
344- and others
345
346Git is popular version control system and you probably will use it or
347already using it.
348
349To learn what is it all about you can watch [[https://www.youtube.com/watch?v=92sycL8ij-U][a short series of videos
350about 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
357Every job sticks to its own stack. Very often it sticks to one specific
358web framework, that you are required to learn. It can be something like
359Django, Symfony, Spring, Ruby on Rails, or others.
360
361Frameworks are usually the biggest part of your codebase. The difference
362between framework and library: Framework runs your code with your
363classes, but libraries are being used by you explicitly and you execute
364all the code from them. The concept of reverting control over the code
365to your framework is called [[https://en.wikipedia.org/wiki/Inversion_of_control][Inversion of Control]].
366
367To learn your framework of choice you should read its documentation. If
368documentation is bad then I would recommend not using it. Sometimes
369framework developers sell additional courses or books on using their
370product (IMO it's bad).
371
372** Programming language
373And the last but very important item on our list is the programming
374language itself. You should know it, you should know it well. To
375distinguish that item from the standard library I should point out that
376programming language consists of its syntax, semantics and in general it
377is every fundamental language block that is not described in that
378language itself (an example is the standard library).
379
380Mostly 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
387It is a good idea to learn programming, complexity with big O notation,
388data structures, algorithms, compiler/interpreter construction and so
389on. But it is not so required in actual day-to-day work, especially for
390web development. You can argue about this, but I would say that this is
391mostly true for many types of work since many libraries and SQL
392databases manage complexity on their own, all you need to declare your
393classes 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
398Your choices are quite limited here. More jobs available, more chances
399to get that job. there will be different results in different areas. I
400think that in most areas you will have a choices between Java, Python
401and maybe PHP or Ruby. If you want to end up insane, there is also
402Javascript, 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"
404framework called NestJS and demend of it is probably low).
405
406** Java / C#
407Probably the most popular programming languages out there especially
408when it comes to working at companies. It is statically typed and quite
409easy to learn languages. They are restricted to OOP moslty, so you
410prorably will use oop design patterns here more than in other
411programming language. Type system are not that advanced as in ML
412dialects and actually it is unsound as in other mainstream languages,
413but it provides some merits of safety compared to nonsafe C or weak
414typed languages such PHP and Javascript.
415
416Frameworks:
417- [[https://spring.io/projects/spring-framework][Spring]]
418- [[https://dotnet.microsoft.com/en-us/][.Net]]
419
420ORM:
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
426Second the most popular programming language. It differs from Java a
427lot. It is dynamic typed, strongly type, more object oriented than Java
428(everything is an object), but somehow manages to look like a procedural
429code, it forces you to indent your code right.
430
431Personally I like Python more than other mainstream languages, it does
432many things right. I like that being fully object-oriented language it
433doesn'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
435like in Java or PHP.
436
437Frameworks:
438- [[https://djangoproject.com/][Django]]
439- [[https://palletsprojects.com/p/flask/][Flask]]
440- [[https://fastapi.tiangolo.com/][FastAPI]]
441- [[https://trypyramid.com/][Pyramid]]
442
443ORM:
444- Django ORM (Active Record)
445- [[https://www.sqlalchemy.org/][SQLAlchemy]] (Data Mapper)
446
447Learning 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
453PHP might be unpopular in some areas, but it is quite popular in
454Russia. It runs lots of small businesses and it is probably the easiest
455tech stack to get a job (but not the easiest language to work with). The
456language has lots of caveats such as weak typing, unorganized standard
457library, less developed OOP and type checking, lots of procedural php
458legacy, most functions of the language is defined in C. My personal
459observation is that PHP has the worst error messages compared to other
460high level languages.
461
462Frameworks:
463- [[https://symfony.com/][Symfony]]
464- [[https://laravel.com/][Laravel]]
465
466ORM:
467- [[https://www.doctrine-project.org/][Doctrine]]
468
469Learning resources:
470- [[https://www.php.net/docs.php][PHP documentation]]
471- [[https://symfonycasts.com/][Symfonycast (paid)]]
472
473* Less popular programming language
474** Go
475Is compiled statically typed procedural language made by creators of
476C. It has garbage collection as interpreted languages. It has rich
477standard library and as I understand used mostly for devops or
478microservices and less used for building monolithic application as in
479other programming languages. It also has strong abilities to do parallel
480computations. Language doesn't have REPL and strong
481reflection/introspection abilities.
482
483Learning resources:
484- [[https://go.dev/][GO documentation]]
485
486** Ruby
487Ruby is mostly used for web development, because of popularity of Ruby
488on Rails framework. The demand of it might be low in some areas, so
489investigate your market yourself before learning it. Ruby is strongly
490type object-oriented in smalltalk sense language. It has mixed lisp,
491perl and smalltalk roots. It has very powerful REPL,
492reflection/introspection abilities, probably the best after LISPs and
493Smalltalk. The biggest downside of the language is lack of good
494documentation on ruby website.
495
496Frameworks:
497- [[https://rubyonrails.org/][Ruby on Rails]]
498- [[https://sinatrarb.com/][Sinatra]]
499
500ORM:
501- [[https://guides.rubyonrails.org/active_record_basics.html][Active Record]]
502- [[https://en.wikipedia.org/wiki/DataMapper][DataMapper]]
503
504Learning 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
525First of all don't buy any paid course or workshops, most information
526are available for free for everyone. Just read wikipedia links I
527provided in artible and follow links there to official documentation of
528the thing you want to learn.
529
530When it comes to programming in general I recommend learning it doing
531test projects or just playing with the code. For practice you can also
532use services like Exercism or Codewars to practice pure programming
533solving problems. Also there is great web resource for complete
534beginners called [[https://freecodecamp.org/][FreeCodeCamp]], it covers basics of web development and
535javascript programming.
536
537Also I recommend reading old academic books on programming, because many
538concepts are the same in many programming languages, what you need is
539the ability think abstractly using data structures and algorithms. I
540recommend 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,
549it is probably a good book and you should read it/.
550
551There are many free sources to learn you just need to invest your time
552into it. The downside of learning LISP is that mainstream programming on
553your job can feel very restrictive and less expressive. Also you will
554probably learn, that many mainstream languages have lots of quircks or
555plainly bad design decisions.
556
557* Conclusion
558It is also possible to get a job with less popular stack, but if you are
559just starting it might be reasonable to focus on popular one first. The
560list of technologies is quite big, so newbies can be lost in new
561information. Be patient and learn one thing at the time. I would
562recommend starting with programming language documentation, then SQL and
563then going to docs of your web-framework / library.
564
565Demand for web developers is huge and in my opinion it is the easiest
566way to get a job. The web development sucks in general (at least for
567me), but that topic will be hold for another article.
Note: See TracBrowser for help on using the repository browser.