professional-programming/training/web-dev/README.md
Charles-Axel Dein 9f46f2acbf Fix ordering
2021-02-11 15:18:37 +01:00

12 KiB

Table of Contents

Learning web development

Goal of this training

This training provides an opinionated ramp-up program for web developers.

Prerequisites: not much, just general knowledge about computers and the Internet.

Principles

  • Focus on the main stuff. A lot of things are learnt on the job anyway.
  • Programming is not only about raw technical knowledge, it's also about best practices.
  • Go wide and go deep.
  • We learn by doing, so this training includes lots of exercises.
  • A lot of videos are included, since they provide hands-on experiences. You can find a LOT more videos here: hellerve/programming-talks and talks that changed the way I think about programming

Note: this is just a short selection of stuff listed in charlax/professional-programming.

Meta: learning about learning

Feel free to checkout some of the articles about Learning and memorizing

  • Create a learning plan with your learning priorities
  • Consider using flashcards (see Anki for instance)
  • Enjoy the learning experience!

Roadmap

  1. Start with a programming language.
  2. Do a first pass at the web development environment (see introductory resources below)
    • HTTP and web architecture basics
    • Git
    • Docker
    • Command line
    • Text editor
  3. Write a full-fledged exercise, get it reviewed.
  4. Do the advanced topics

Approach

Pick a powerful text editor and learn its ins and outs

VSCode is a strong pick nowadays (I use and obviously prefer Vim :).

Make sure to spend a lot of time in your text editor, watch tutorials about advanced features, install extensions, learn all the main keyboard shortcuts, subscribe to mailing lists about it, etc.

You will spend most of your time within your text editor. Turn it into a powerful ally!

Learn the ins and outs of one programming language

A developer's main tool being the programming language, it is important to achieve high proficiency in at least one of them.

I'd recommend starting with Python or TypeScript. For Python, you can have a look at my repo charlax/python-education.

To ensure you have good command of the language, you should try out some of those exercises:

Watch some videos related to your language:

Learn how to handle:

If you have time, learn more programming languages, starting with some that are very different from your main one:

  • Haskell
  • Clojure
  • Kotlin
  • Rust
  • Assembly

Topic-specific materials

Best practices, attitude

Read one of those:

Read the resources listed under Must-read articles.

Code architecture and design patterns

Introduction:

  • Learn about OOP basics: inheritance, abstract/concrete, public/private
  • Learn about DDD (domain driven design), SOLID, MVC, Clean Architecture
  • An introduction to software design patterns. All those patterns are not useful in all languages, but they're applied in most software, so it's important to know about them.
    • Builder
    • Factory
    • Singleton
    • Adapter
    • Facade
    • Chain of Responsibility
    • Command
    • Observer
    • State
    • Strategy
    • Visitor
  • 🎞 Design Patterns in Plain English

Advanced:

DB and SQL

Introduction:

Advanced:

Dev environment, command line and Linux

Introduction:

Advanced:

Distributed systems and system architecture

Introduction:

Advanced:

Concepts to look into:

  • CAP theorem
  • Weak/strong/eventual consistency
  • Fail-over/replication
  • Load balancer: active-active, active-passive
  • Horizontal vs vertical scaling
  • Reverse proxy, load balancer
  • DB: RDBMS vs. NoSQL, replication, sharding, master-master, denormalization
  • Cache: client caching in browsers, CDN, HTTP headers, object cache, db cache
  • Asynchronism: message queues, back pressure
  • Monitoring and alerting best practices

Network, protocols, HTTP

Introduction:

Advanced:

  • Learn about the basics of TCP and UDP
  • Learn the basics of the HTTP protocol: header, verb, status code, TLS, Rest APIs, etc.
  • Learn about important web-related protocols: DNS, SMTP, SSH

Project management

Introduction:

Advanced:

Security

Introduction:

  • Learn about the OWASP Top 10

Advanced:

Version control (git)

Introduction:

Topics specific to Gens de Confiance

Other lists