Changeset de4a3db for content/en/posts/web-stacks.org
- Timestamp:
- Oct 14, 2022, 2:12:25 PM (2 years ago)
- Branches:
- master
- Children:
- 2476eba
- Parents:
- cdbce2b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
content/en/posts/web-stacks.org
rcdbce2b rde4a3db 6 6 #+BEGIN_abstract 7 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. It9 might be biased and irrational, be aware.8 and software by a criteria of usage such technologies at hired work. The 9 article might be biased and irrational, be aware. 10 10 #+END_abstract 11 11 … … 14 14 don't like to work in general, I don't like corporate IT culture and I 15 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 money17 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 fieldof19 web development to get a grasp of technologies to learn.16 that field, and it is much easier to dive into web development to earn 17 money for a living than other IT fields or other professions at my 18 location. I hope this text will be useful for someone who is outside of 19 the field of web development to get a grasp of technologies to learn. 20 20 21 21 * What is tech stack 22 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.23 The tech stack is the mix of technologies (software, frameworks, 24 libraries) that the project uses to implement a planned set of features. 25 25 #+END_abstract 26 26 … … 31 31 people, sometimes something breaks and you need to contact people that 32 32 provide you the software you use, it is also important to communicate 33 with your company's team and not bring yourself into conflict s. And34 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.33 with your company's team and not bring yourself into conflict 34 situations. And don't be that guy (or me), who hates something technical 35 so much, that people get annoyed by you, it won't help you in any 36 way. It can be seen as a suppression of your ego, but the truth is that 37 hired work is more about collectivism than individualism. 38 38 39 39 Next, I present the list of technologies you should know to work as a … … 44 44 Some things you will use in most of your projects, so you are better to 45 45 familiarize yourself with them anyway. What I've discovered, is that 46 most knowledge of some tech is transferable to other techs. 46 most knowledge of some tech is transferable to other techs. For example, 47 learning one web-framework helps you to learn other ones. 48 47 49 ** Text Editor 48 50 Not sure if I need to write it, but you need a development environment … … 62 64 costs money to use and you as a user don't have control over it. You can 63 65 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 developmentenvironment]]]66 tool as a text editor should be free as in freedom for everyone. 67 68 [[[https://en.wikipedia.org/wiki/Text_editor][Wikipedia: Text editor]]] | [[[https://en.wikipedia.org/wiki/Integrated_development_environment][Wikipedia: Integrated development 69 environment]]] 68 70 69 71 ** SQL … … 81 83 the complexity of writing and running SQL. 82 84 83 [[[https://en.wikipedia.org/wiki/SQL][Wikipedia: SQL]]] | 84 [[[https://en.wikipedia.org/wiki/Relational_database][Wikipedia: Reletational Database]]] 85 [[[https://en.wikipedia.org/wiki/SQL][Wikipedia: SQL]]] | [[[https://en.wikipedia.org/wiki/Relational_database][Wikipedia: Reletational Database]]] 85 86 86 87 *** ORM … … 100 101 101 102 ** 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: 103 Most databases use hard drives to store data, but some data needs to be 104 stored in RAM for better performance. For that cases you need to learn 105 about Redis or similar technology. Such databases are: 104 106 - [[https://en.wikipedia.org/wiki/Redis][Redis]] 105 107 - [[https://en.wikipedia.org/wiki/Memcached][Memcached]] … … 112 114 essential if you do backend APIs. 113 115 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]]] 116 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 117 you work with Java, HTTP servers can be written in Java such as [[https://en.wikipedia.org/wiki/Jetty_(web_server)][Jetty]] 118 and others. 119 120 I recommend reading [[https://amazon.com/HTTP-Definitive-Guide-Guides/dp/1565925092][a book called "HTTP: The Definitive Guide: The 121 Definitive Guide"]]. 122 123 [[[https://en.wikipedia.org/wiki/Web_server][Wikipedia: Web server]]] | [[[https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol][Wikipedia: Hypertext Transfer Protocol]]] 120 124 121 125 ** Fulltext search … … 124 128 cases. To search like google does you will need full-text search 125 129 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 [[https://www.elastic.co/elasticsearch/][ElasticSearch]] for such purposes. 131 132 [[[https://en.wikipedia.org/wiki/Full-text_search][Wikipedia: Full-text search]]] | [[[https://en.wikipedia.org/wiki/Elasticsearch][Wikipedia: Elasticsearch]]] (proprietary) 130 133 131 134 ** Message broker … … 152 155 wikis are good as well). 153 156 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 [[[https://en.wikipedia.org/wiki/Unix][Wikipedia: Unix]]] | [[[https://en.wikipedia.org/wiki/Linux][Wikipedia: Linux]]] | [[[https://en.wikipedia.org/wiki/Linux_distribution][Wikipedia: Linux distribution]]] 158 159 ** Docker 160 Your team probably will use docker for deployment or development (or 161 both). You might want to get your project working in a container for 162 better accessibility by your team. The point of docker as a development 163 tool is to let your team quickly get the same environment as you. The 164 point of docker as a deployment tool is to deploy the same environment 165 that you developing in, it is important to have a reproducible 166 production environment because catching bugs in 3 different environments 167 (dev, staging, prod) suck a lot. 168 169 [[[https://en.wikipedia.org/wiki/Docker_(software)][Wikipedia: Docker]]] 170 171 ** CI/CD and Deployment 172 You need to be able to deploy your application to the production 173 server. Good practice is to use a CI/CD pipeline. The CI/CD pipeline 174 runs checks of your project in docker container and only if tests are 175 successful, the code deploys to production. 176 177 There is also an old approach with logging into your server via a small 178 script by ssh and then deploying everything as you just move files 179 manually. 180 181 - [[https://www.jenkins.io/][Jenkins]] 182 - [[https://www.buildbot.net/][Buildbot]] 183 184 [[[https://en.wikipedia.org/wiki/CI/CD][Wikipedia: CI/CD]]] | [[[https://en.wikipedia.org/wiki/Software_deployment][Wikipedia: Software Deployment]]] 157 185 158 186 ** OOP … … 225 253 used. 226 254 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]]] 255 [[[https://en.wikipedia.org/wiki/Web_template_system][Wikipedia: Web Template System]]] | [[[https://en.wikipedia.org/wiki/Single-page_application][Wikipedia: Single-page Application]]] 229 256 230 257 *** CSS 231 258 CSS is being used for creating styling for your HTML pages. The role of 232 259 CSS is to make your html layouts pretty, to make your buttons beautiful 233 and the grid is clear. 260 and the grid is clear. CSS frameworks help you to write less css by 261 providing ready to use graphical elements such as buttons, menus, lists, 262 grids, tables and so on. Often you don't need to know CSS so well, it is 263 okay to know just CSS framework. 264 265 CSS Frameworks: 266 - [[https://getbootstrap.com/][Twitter Bootstrap]] 267 - [[https://fomantic-ui.com/][Fomantic UI]] 268 - [[https://get.foundation/][Foundation]] 269 - And many many others 234 270 235 271 [[[https://en.wikipedia.org/wiki/CSS][Wikipedia: CSS]]] 272 273 **** SASS/LESS 274 CSS3 added some computing abilities introducing variables, calc and 275 other features. Before that and because lack of some other features for 276 better css code reuse people have made CSS preprocessors. The point it 277 to write css-like code that compiles to real css, so you write less 278 things twice. SASS is being used in many css libraries such as Twitter 279 bootstrap. 236 280 237 281 *** Javascript … … 261 305 262 306 [[[https://en.wikipedia.org/wiki/Template_processor][Wikipedia: Template Processor]]] 263 264 ** Docker265 Your team probably will use docker for deployment or development (or266 both). You might want to get your project working in a container for267 better accessibility by your team. The point of docker as a development268 tool is to let your team quickly get the same environment as you. The269 point of docker as a deployment tool is to deploy the same environment270 that you developing in, it is important to have a reproducible271 production environment because catching bugs in 3 different environments272 (dev, staging, prod) suck a lot.273 274 [[[https://en.wikipedia.org/wiki/Docker_(software)][Wikipedia: Docker]]]275 307 276 308 ** API … … 283 315 - and others 284 316 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]]. 317 The framework you use might provide a specific way for declaring 318 APIs. For example, Symfony has [[https://api-platform.com/][API Platform]] and Django has [[https://www.django-rest-framework.org/][Django REST 319 Framework]]. 287 320 288 321 [[[https://en.wikipedia.org/wiki/Web_API][Wikipedia: Web API]]] … … 317 350 quite easy to work. 318 351 319 [[[https://en.wikipedia.org/wiki/Package_manager][Wikipedia: Package Manager]]] 352 [[[https://en.wikipedia.org/wiki/Package_manager][Wikipedia: Package 353 Manager]]] 320 354 321 355 ** Version Manager … … 330 364 You should always use version control system even if you work completely 331 365 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 asweb developer.366 changes over your codebase over time. This is essential technology to 367 know for development these days, at least if we talk about hired work as 368 web developer. 335 369 336 370 Version Control Systems: … … 347 381 already using it. 348 382 349 To learn what is it all about you can watch [[https://www.youtube.com/watch?v=92sycL8ij-U][a short series of videos 383 To learn what is it all about you can watch 384 [[https://www.youtube.com/watch?v=92sycL8ij-U][a short series of videos 350 385 about git from computerphile]]. 351 386 … … 393 428 classes and don't make them leak memory that much. 394 429 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]]] 430 [[[https://en.wikipedia.org/wiki/Computer_programming][Wikipedia: Programming]]] | [[[https://en.wikipedia.org/wiki/Programming_language][Wikipedia: Programming language]]] | 431 [[[https://en.wikipedia.org/wiki/Computer_science][Wikipedia: Computer Science]]] 396 432 397 433 * Most popular programming languages 398 434 Your choices are quite limited here. More jobs available, more chances 399 435 to get that job. there will be different results in different areas. I 400 think that in most areas you will have a choice s between Java, Python436 think that in most areas you will have a choice between Java, Python, 401 437 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). 438 Javascript, but it is not as mature for the backend as other 439 technologies (it is my biased opinion), so I will not include it (there 440 is only a "big" framework called NestJS and the demand for it is 441 probably low). 405 442 406 443 ** Java / C# 407 444 Probably the most popular programming languages out there especially 408 445 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 you410 pro rably will use oop design patterns here more than in other411 programming language . Type system are not thatadvanced as in ML412 dialects and actually it is unsound as in other mainstream languages,446 easy to learn languages. They are restricted to OOP the most, so you 447 probably will use oop design patterns here more than in other 448 programming languages. The type system is not as advanced as in ML 449 dialects and actually, it is unsound as in other mainstream languages, 413 450 but it provides some merits of safety compared to nonsafe C or weak 414 typed languages such PHP and Javascript.451 typed languages such as PHP and Javascript. 415 452 416 453 Frameworks: … … 425 462 ** Python 426 463 Second the most popular programming language. It differs from Java a 427 lot. It is dynamic typed, strongly type, more object oriented than Java428 (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 does432 many things right. I like that being fully object-oriented language it 464 lot. It is dynamically typed, strongly typed and more object oriented 465 than Java (everything is an object), but somehow manages to look like a 466 procedural code, it forces you to indent your code right. 467 468 I like Python more than other mainstream languages, it does many things 469 right. I like that Python while being a fully object-oriented language 433 470 doesn't drop to dogmatic believing in OOP patterns. It also has good 434 471 [[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 … … 455 492 tech stack to get a job (but not the easiest language to work with). The 456 493 language has lots of caveats such as weak typing, unorganized standard 457 library, less developed OOP and type checking, lots of procedural php458 legacy, most functions of the language is defined in C. My personal494 library, less developed OOP and types checking, lots of procedural PHP 495 legacy, and most built-in functions of the language are defined in C. My 459 496 observation is that PHP has the worst error messages compared to other 460 high level languages. 497 high-level languages. Despite this PHP is overall not so bad with newer 498 versions and it tries to remove legacy that has made the reputation of 499 PHP extremely bad in programming circles. 461 500 462 501 Frameworks: … … 473 512 * Less popular programming language 474 513 ** Go 475 Is compiled statically typed procedural language made by creators of476 C. It has garbage collection as interpreted languages. It has rich477 standard library and as I understand used mostly for devops or478 microservices and less used for building monolithic application as in514 Go is compiled statically typed procedural language made by creators of 515 C. It has garbage collection as interpreted languages. It has a rich 516 standard library and as I understand used mostly for DevOps or 517 microservices and less used for building monolithic applications as in 479 518 other programming languages. It also has strong abilities to do parallel 480 519 computations. Language doesn't have REPL and strong … … 485 524 486 525 ** Ruby 487 Ruby is mostly used for web development, because of popularity of Ruby488 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,526 Ruby is mostly used for web development, because of the popularity of 527 the Ruby on Rails framework. The demand for it might be low in some 528 areas, so investigate your market yourself before learning it. Ruby is 529 strongly typed object-oriented in [[https://en.wikipedia.org/wiki/Smalltalk][Smalltalk sense]] language. It has mixed 530 Lisp, Perl and Smalltalk roots. It has very powerful REPL, 492 531 reflection/introspection abilities, probably the best after LISPs and 493 Smalltalk. The biggest downside of the language is lack of good494 documentation on ruby website.532 Smalltalk. The biggest downside of the language is the lack of good 533 documentation on Ruby website. 495 534 496 535 Frameworks: … … 523 562 524 563 * How to get good 525 First of all don't buy any paid course or workshops, most information526 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.564 First of all, restrict yourself and don't buy any paid courses or 565 workshops, most information is available for free for everyone. Just 566 read the Wikipedia links I provided in the article and follow the links 567 there to the official documentation of the thing you want to learn. 529 568 530 569 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 also532 use services like Exercism or Codewars to practice pure programming533 solving problems. Also there is great web resource for complete 534 beginners called [[https://freecodecamp.org/][FreeCodeCamp]], it coversbasics of web development and535 javascript programming.536 537 Also I recommend reading old academic books on programming, because many538 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:570 test projects or just playing with the code. You can also use services 571 like [[https://exercism.org/][Exercism]] or [[https://codewars.com/][Codewars]] to practice pure programming solving 572 problems. Also, there is a great web resource for complete beginners 573 called [[https://freecodecamp.org/][FreeCodeCamp]], which covers the basics of web development and 574 Javascript programming. 575 576 Also, I recommend reading old academic books on programming, because 577 many concepts are the same in many programming languages, what you need 578 is the ability to think abstractly using data structures and 579 algorithms. I recommend anyone who wants to grok programming to read: 541 580 - [[https://en.wikipedia.org/wiki/Structure_and_Interpretation_of_Computer_Programs][SICP]] 542 581 - [[https://en.wikipedia.org/wiki/How_to_Design_Programs][HTDP]] 543 582 - [[https://www.cis.upenn.edu/~bcpierce/tapl/][TAPL]] 544 583 - [[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]] 584 - [[https://en.wikipedia.org/wiki/Niklaus_Wirth][Niklaus Wirth]] books, [[https://en.wikipedia.org/wiki/Edsger_W._Dijkstra][Dijkstra]]'s articles 585 - [[https://download-mirror.savannah.gnu.org/releases/pgubook/ProgrammingGroundUp-1-0-booksize.pdf][Programming from the ground up]] or [[http://stolyarov.info/books][Stolyrov's series of books [Ru]]] 546 586 - 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/. 587 588 The rule of thumb is that if the book has a Wikipedia article, it is 589 probably a good book and you should read it/. There are tons of free for 590 everyone materials about programming on the Internet, so of course, you 591 should not be limited to the list above. 550 592 551 593 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. 594 into them. The downside of learning LISP (or let's say SML and Haskell 595 or other nonpopular in the industry mostly academic languages) is that 596 mainstream programming on your job can feel very restrictive and less 597 expressive. Also, you will probably learn, that many mainstream 598 languages have lots of quirks or bad design decisions. 556 599 557 600 * Conclusion 558 It is also possible to get a job with less popular stack, but if you are559 just starting it might be reasonable to focus on popular one first. The560 list of technologies is quite big, so newbies can be lost in new 561 information. Be patient and learn one thing at thetime. I would562 recommend starting with programming language documentation, then SQL and563 then going to docs of your web-framework /library.564 565 Demand for web developers is huge and in my opinion it is the easiest566 way to get a job . The web development sucks in general (at least for567 me), but that topic will be hold for another article. 601 It is also possible to get a job with a less popular stack, but if you 602 are just starting it might be reasonable to focus on the popular one 603 first. The list of technologies is quite big, so newbies can be lost in 604 new information. Be patient and learn one thing at a time. I would 605 recommend starting with programming language documentation, then SQL, 606 and then going to the docs of your web framework/library. 607 608 Demand for web developers is huge and in my opinion, it is the easiest 609 way to get a job if you are just starting even tho it has a lot of 610 downsides too, but that's a topic for another article.
Note:
See TracChangeset
for help on using the changeset viewer.