Starting web dev training
This commit is contained in:
parent
0bb0d98f73
commit
c7c69e8074
10
README.md
10
README.md
@ -371,6 +371,11 @@ Biases don't only apply to hiring. For instance, the fundamental attribution bia
|
|||||||
- [Let's Build a Simple Database](https://cstack.github.io/db_tutorial/)
|
- [Let's Build a Simple Database](https://cstack.github.io/db_tutorial/)
|
||||||
- [Readings in Database Systems, 5th Edition](http://www.redbook.io/)
|
- [Readings in Database Systems, 5th Edition](http://www.redbook.io/)
|
||||||
- [Comparing database types: how database types evolved to meet different needs](https://dataguide.prisma.io/intro/comparing-database-types)
|
- [Comparing database types: how database types evolved to meet different needs](https://dataguide.prisma.io/intro/comparing-database-types)
|
||||||
|
- [How does a relational database work](http://coding-geek.com/how-databases-work/)
|
||||||
|
|
||||||
|
Exercises:
|
||||||
|
|
||||||
|
- [PostgreSQL exercises](https://pgexercises.com/)
|
||||||
|
|
||||||
### Data formats
|
### Data formats
|
||||||
|
|
||||||
@ -861,11 +866,10 @@ List of resources:
|
|||||||
- 🧰 [alebcay/awesome-shell](https://github.com/alebcay/awesome-shell)
|
- 🧰 [alebcay/awesome-shell](https://github.com/alebcay/awesome-shell)
|
||||||
- [Bash Hackers Wiki](http://wiki.bash-hackers.org/)
|
- [Bash Hackers Wiki](http://wiki.bash-hackers.org/)
|
||||||
- [dylanaraps/pure-bash-bible: a collection of pure bash alternatives to external processes.](https://github.com/dylanaraps/pure-bash-bible)
|
- [dylanaraps/pure-bash-bible: a collection of pure bash alternatives to external processes.](https://github.com/dylanaraps/pure-bash-bible)
|
||||||
- [Master the command line, in one page](https://github.com/jlevy/the-art-of-command-line) **must read**
|
|
||||||
- [The Bash Hackers Wiki](https://wiki.bash-hackers.org/) provides a gentler way to learn about bash than its manages.
|
- [The Bash Hackers Wiki](https://wiki.bash-hackers.org/) provides a gentler way to learn about bash than its manages.
|
||||||
- [Awk in 20 Minutes](https://ferd.ca/awk-in-20-minutes.html)
|
- [Awk in 20 Minutes](https://ferd.ca/awk-in-20-minutes.html)
|
||||||
- 🎤 [Linux Productivity Tools](https://www.usenix.org/sites/default/files/conference/protected-files/lisa19_maheshwari.pdf)
|
- 🎤 [Linux Productivity Tools](https://www.usenix.org/sites/default/files/conference/protected-files/lisa19_maheshwari.pdf)
|
||||||
- [jlevy/the-art-of-command-line](https://github.com/jlevy/the-art-of-command-line): master the command line, in one page
|
- [jlevy/the-art-of-command-line](https://github.com/jlevy/the-art-of-command-line): master the command line, in one page **must read**
|
||||||
- [Minimal safe Bash script template](https://betterdev.blog/minimal-safe-bash-script-template/)
|
- [Minimal safe Bash script template](https://betterdev.blog/minimal-safe-bash-script-template/)
|
||||||
- [Command Line Interface Guidelines](https://clig.dev/)
|
- [Command Line Interface Guidelines](https://clig.dev/)
|
||||||
- [The Linux Commands Handbook](https://openbootcamps.com/the-linux-commands-handbook/)
|
- [The Linux Commands Handbook](https://openbootcamps.com/the-linux-commands-handbook/)
|
||||||
@ -890,7 +894,7 @@ List of resources:
|
|||||||
- [Learn how to design large scale systems. Prep for the system design interview](https://github.com/donnemartin/system-design-primer) (Github repo)
|
- [Learn how to design large scale systems. Prep for the system design interview](https://github.com/donnemartin/system-design-primer) (Github repo)
|
||||||
- [Turning the database outside-out with Apache Samza](https://www.confluent.io/blog/turning-the-database-inside-out-with-apache-samza/)
|
- [Turning the database outside-out with Apache Samza](https://www.confluent.io/blog/turning-the-database-inside-out-with-apache-samza/)
|
||||||
- 📖 [Building Microservices](https://www.amazon.com/Building-Microservices-Designing-Fine-Grained-Systems/dp/1491950358), Sam Newman (quite complete discussion of microservices)
|
- 📖 [Building Microservices](https://www.amazon.com/Building-Microservices-Designing-Fine-Grained-Systems/dp/1491950358), Sam Newman (quite complete discussion of microservices)
|
||||||
- [Designing Data-Intensive Applications](https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321)
|
- 📖 [Designing Data-Intensive Applications](https://dataintensive.net/)
|
||||||
- [Monoliths are the future](https://changelog.com/posts/monoliths-are-the-future)
|
- [Monoliths are the future](https://changelog.com/posts/monoliths-are-the-future)
|
||||||
- "We’re gonna break it up and somehow find the engineering discipline we never had in the first place."
|
- "We’re gonna break it up and somehow find the engineering discipline we never had in the first place."
|
||||||
- [Scaling to 100k Users](https://alexpareto.com/scalability/systems/2020/02/03/scaling-100k.html), Alex Pareto. The basics of getting from 1 to 100k users.
|
- [Scaling to 100k Users](https://alexpareto.com/scalability/systems/2020/02/03/scaling-100k.html), Alex Pareto. The basics of getting from 1 to 100k users.
|
||||||
|
188
training/web-dev/README.md
Normal file
188
training/web-dev/README.md
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
||||||
|
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
- [Learning web development](#learning-web-development)
|
||||||
|
- [Goal of this training](#goal-of-this-training)
|
||||||
|
- [Prerequisites](#prerequisites)
|
||||||
|
- [Principles](#principles)
|
||||||
|
- [Roadmap](#roadmap)
|
||||||
|
- [Meta: learning about learning](#meta-learning-about-learning)
|
||||||
|
- [Topics](#topics)
|
||||||
|
- [Pick a powerful text editor and learn its ins and outs](#pick-a-powerful-text-editor-and-learn-its-ins-and-outs)
|
||||||
|
- [Learn the ins and outs of a programming language](#learn-the-ins-and-outs-of-a-programming-language)
|
||||||
|
- [Learn the topics of web development](#learn-the-topics-of-web-development)
|
||||||
|
- [Architecture](#architecture)
|
||||||
|
- [Best practices, attitude](#best-practices-attitude)
|
||||||
|
- [DB and SQL](#db-and-sql)
|
||||||
|
- [Dev environment, command line and Linux](#dev-environment-command-line-and-linux)
|
||||||
|
- [Distributed systems](#distributed-systems)
|
||||||
|
- [Network, protocols, HTTP](#network-protocols-http)
|
||||||
|
- [Project management](#project-management)
|
||||||
|
- [Security](#security)
|
||||||
|
- [Version control (git)](#version-control-git)
|
||||||
|
- [Other lists](#other-lists)
|
||||||
|
|
||||||
|
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
||||||
|
|
||||||
|
<!--TOC-->
|
||||||
|
|
||||||
|
# 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 computer and the Internet.
|
||||||
|
|
||||||
|
## Principles
|
||||||
|
|
||||||
|
- Focus on the main stuff. A lot of things have to be learnt on the job anyway.
|
||||||
|
- For aspiring professionals. Programming is not only about raw knowledge,
|
||||||
|
it's also about best practices.
|
||||||
|
- Go wide.
|
||||||
|
- We learn by doing, so this training includes lots of exercises.
|
||||||
|
- A lot of videos are included, since they provide hands-on experiences.
|
||||||
|
|
||||||
|
## Roadmap
|
||||||
|
|
||||||
|
1. Start with a programming language.
|
||||||
|
2. Do a first pass at the web development components: DB, HTTP API, etc.
|
||||||
|
3. Write a full-fledged exercise, get it reviewed.
|
||||||
|
4. Go deeper in the topics above.
|
||||||
|
|
||||||
|
## Meta: learning about learning
|
||||||
|
|
||||||
|
Feel free to checkout some of the articles about [Learning and memorizing](https://github.com/charlax/professional-programming#learning--memorizing)
|
||||||
|
|
||||||
|
## Topics
|
||||||
|
|
||||||
|
### 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 your
|
||||||
|
ally!
|
||||||
|
|
||||||
|
### Learn the ins and outs of a 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](https://github.com/charlax/python-education).
|
||||||
|
|
||||||
|
To ensure you have good command of the language, you should try out some of
|
||||||
|
those exercises:
|
||||||
|
|
||||||
|
- [Exercism](https://exercism.io/) (get free code reviews!)
|
||||||
|
- [Small Python exercises](https://github.com/charlax/python-education/tree/master/learning-python/exercises)
|
||||||
|
- [danistefanovic/build-your-own-x](https://github.com/danistefanovic/build-your-own-x) (for instance: build a [git in Python](https://wyag.thb.lt/))
|
||||||
|
- [Other list of exercises](https://github.com/charlax/python-education#exercises)
|
||||||
|
|
||||||
|
Learn how to handle:
|
||||||
|
|
||||||
|
- Regexes
|
||||||
|
- Do exercises
|
||||||
|
- Functional programming
|
||||||
|
- [Functional Programming Fundamentals](https://www.matthewgerstman.com/tech/functional-programming-fundamentals/)
|
||||||
|
- Design in patterns
|
||||||
|
- E.g. [in Python](https://medium.com/@daniel.heller/ten-principles-for-growth-69015e08c35b))
|
||||||
|
- Tests
|
||||||
|
- [Why bother writing tests at all?](https://dave.cheney.net/2019/05/14/why-bother-writing-tests-at-all)
|
||||||
|
- Crazy things in languages
|
||||||
|
- 🎞 [Wat](https://www.destroyallsoftware.com/talks/wat)
|
||||||
|
|
||||||
|
If you have time, learn more programming languages, starting with some that are
|
||||||
|
*very* different from your main one:
|
||||||
|
|
||||||
|
- Haskell
|
||||||
|
- Clojure
|
||||||
|
- Kotlin
|
||||||
|
- Rust
|
||||||
|
- Assembly
|
||||||
|
|
||||||
|
### Learn the topics of web development
|
||||||
|
|
||||||
|
Note: this is just a short selection of stuff listed in
|
||||||
|
[charlax/professional-programming](https://github.com/charlax/professional-programming).
|
||||||
|
|
||||||
|
Start your career the right way with this article: [Ten Principles for Growth as an Engineer](https://medium.com/@daniel.heller/ten-principles-for-growth-69015e08c35b)
|
||||||
|
|
||||||
|
#### Architecture
|
||||||
|
|
||||||
|
- Learn about DDD (domain driven design)
|
||||||
|
- Wander in the [Software Architecture Guide](https://martinfowler.com/architecture/)
|
||||||
|
- 🎞 [On the Spectrum of Abstraction](https://www.youtube.com/watch?v=mVVNJKv9esE&ab_channel=ReactEurope)
|
||||||
|
- 🎞 [Simple Made Easy](https://www.infoq.com/presentations/Simple-Made-Easy/)
|
||||||
|
|
||||||
|
#### Best practices, attitude
|
||||||
|
|
||||||
|
Read one of those:
|
||||||
|
|
||||||
|
- 📖 [The Pragmatic Programmer: From Journeyman to
|
||||||
|
Master](https://pragprog.com/titles/tpp20/): hands-on the most inspiring and useful book I've read about programming.
|
||||||
|
- 📖 [Code Complete: A Practical Handbook of Software
|
||||||
|
Construction](http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670): a nice addition to The Pragmatic Programmer, gives you the necessary framework to talk about code.
|
||||||
|
|
||||||
|
Read of the resources listed under [Must-read articles](https://github.com/charlax/professional-programming#must-read-articles).
|
||||||
|
|
||||||
|
#### DB and SQL
|
||||||
|
|
||||||
|
- Learn basic and advanced SQL: joins, indexes, subqueries
|
||||||
|
- Install Postgres and play with it.
|
||||||
|
- [Do those postgres exercises](https://pgexercises.com/)
|
||||||
|
- Learn about ORM
|
||||||
|
- 🎞 [Watch this Python introduction to ORMs](https://www.youtube.com/watch?v=P141KRbxVKc&ab_channel=PyCon2014) (with SQLAlchemy)
|
||||||
|
|
||||||
|
#### Dev environment, command line and Linux
|
||||||
|
|
||||||
|
- [jlevy/the-art-of-command-line](https://github.com/jlevy/the-art-of-command-line): master the command line, in one page
|
||||||
|
- [Linux Productivity Tools](https://www.usenix.org/sites/default/files/conference/protected-files/lisa19_maheshwari.pdf)
|
||||||
|
- Do shell exercises
|
||||||
|
- Install/use some of those tools: https://github.com/jondot/awesome-devenv
|
||||||
|
- Write your own dotfiles: https://github.com/webpro/awesome-dotfiles (you
|
||||||
|
checkout mines: https://github.com/charlax/dotfiles)
|
||||||
|
- Learn about Docker
|
||||||
|
- 🎞 [Containers From Scratch](https://www.youtube.com/watch?v=8fi7uSYlOdc&ab_channel=GOTOConferences)
|
||||||
|
|
||||||
|
#### Distributed systems
|
||||||
|
|
||||||
|
- DDIA
|
||||||
|
- [The Log: What every software engineer should know about real-time data's unifying abstraction](https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying)
|
||||||
|
- [donnemartin/system-design-primer](https://github.com/donnemartin/system-design-primer): learn how to design large-scale systems.
|
||||||
|
|
||||||
|
#### Network, protocols, HTTP
|
||||||
|
|
||||||
|
- [How Does the Internet Work?](https://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm)
|
||||||
|
- [vasanthk/how-web-works](https://github.com/vasanthk/how-web-works): what happens behind the scenes when we type www.google.com in a browser?
|
||||||
|
- Learn about the basics of TCP and UDP
|
||||||
|
- Learn the basics of the HTTP protocol: header, verb, status code, TLS, etc.
|
||||||
|
|
||||||
|
#### Project management
|
||||||
|
|
||||||
|
- [Efficient Software Project Management at its Roots](https://blog.pragmaticengineer.com/efficient-software-project-management-at-its-roots/)
|
||||||
|
- [How to Lead a Project - as a Software Engineer](https://blog.pragmaticengineer.com/how-to-lead-a-project-in-software-development/)
|
||||||
|
- [TechnicalDebt](https://martinfowler.com/bliki/TechnicalDebt.html)
|
||||||
|
|
||||||
|
Checkout this section on [charlax/engineering-management](https://github.com/charlax/engineering-management#project-management)
|
||||||
|
|
||||||
|
#### Security
|
||||||
|
|
||||||
|
- Learn about the OWASP Top 10
|
||||||
|
|
||||||
|
#### Version control (git)
|
||||||
|
|
||||||
|
|
||||||
|
## Other lists
|
||||||
|
|
||||||
|
- [The Missing Semester of Your CS Education](https://missing.csail.mit.edu/) (MIT).
|
||||||
|
- [What every computer science major should know](http://matt.might.net/articles/what-cs-majors-should-know/)
|
||||||
|
- [Teach Yourself Computer Science](https://teachyourselfcs.com/)
|
Loading…
x
Reference in New Issue
Block a user