Improve course

This commit is contained in:
Charles-Axel Dein 2021-02-08 11:12:28 +01:00
parent aca728d789
commit b64928ef32

View File

@ -4,19 +4,18 @@
- [Learning web development](#learning-web-development) - [Learning web development](#learning-web-development)
- [Goal of this training](#goal-of-this-training) - [Goal of this training](#goal-of-this-training)
- [Prerequisites](#prerequisites)
- [Principles](#principles) - [Principles](#principles)
- [Roadmap](#roadmap)
- [Meta: learning about learning](#meta-learning-about-learning) - [Meta: learning about learning](#meta-learning-about-learning)
- [Topics](#topics) - [Roadmap](#roadmap)
- [Approach](#approach)
- [Pick a powerful text editor and learn its ins and outs](#pick-a-powerful-text-editor-and-learn-its-ins-and-outs) - [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 ins and outs of one programming language](#learn-the-ins-and-outs-of-one-programming-language)
- [Learn the topics of web development](#learn-the-topics-of-web-development) - [Topic-specific materials](#topic-specific-materials)
- [Architecture](#architecture) - [Architecture and design patterns](#architecture-and-design-patterns)
- [Best practices, attitude](#best-practices-attitude) - [Best practices, attitude](#best-practices-attitude)
- [DB and SQL](#db-and-sql) - [DB and SQL](#db-and-sql)
- [Dev environment, command line and Linux](#dev-environment-command-line-and-linux) - [Dev environment, command line and Linux](#dev-environment-command-line-and-linux)
- [Distributed systems](#distributed-systems) - [Distributed systems and system architecture](#distributed-systems-and-system-architecture)
- [Network, protocols, HTTP](#network-protocols-http) - [Network, protocols, HTTP](#network-protocols-http)
- [Project management](#project-management) - [Project management](#project-management)
- [Security](#security) - [Security](#security)
@ -34,9 +33,7 @@
This training provides an opinionated ramp-up program for web developers. This training provides an opinionated ramp-up program for web developers.
## Prerequisites Prerequisites: not much, just general knowledge about computers and the Internet.
Not much, just general knowledge about computers and the Internet.
## Principles ## Principles
@ -48,18 +45,30 @@ Not much, just general knowledge about computers and the Internet.
- A lot of videos are included, since they provide hands-on experiences. You - A lot of videos are included, since they provide hands-on experiences. You
can find a LOT more videos here: [hellerve/programming-talks](https://github.com/hellerve/programming-talks) and [talks that changed the way I think about programming](http://www.opowell.com/post/talks-that-changed-the-way-i-think-about-programming/) can find a LOT more videos here: [hellerve/programming-talks](https://github.com/hellerve/programming-talks) and [talks that changed the way I think about programming](http://www.opowell.com/post/talks-that-changed-the-way-i-think-about-programming/)
## Roadmap Note: this is just a short selection of stuff listed in
[charlax/professional-programming](https://github.com/charlax/professional-programming).
1. Start with a programming language. ### Meta: learning about learning
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.
## Meta: learning about learning
Feel free to checkout some of the articles about [Learning and memorizing](https://github.com/charlax/professional-programming#learning--memorizing) Feel free to checkout some of the articles about [Learning and memorizing](https://github.com/charlax/professional-programming#learning--memorizing)
## Topics - 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 ### Pick a powerful text editor and learn its ins and outs
@ -69,10 +78,10 @@ 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, advanced features, install extensions, learn all the main keyboard shortcuts,
subscribe to mailing lists about it, etc. subscribe to mailing lists about it, etc.
You will spend most of your time within your text editor. Turn it into your You will spend most of your time within your text editor. Turn it into
ally! a powerful ally!
### Learn the ins and outs of a programming language ### Learn the ins and outs of one programming language
A developer's main tool being the programming language, it is important to A developer's main tool being the programming language, it is important to
achieve high proficiency in at least one of them. achieve high proficiency in at least one of them.
@ -115,20 +124,16 @@ If you have time, learn more programming languages, starting with some that are
- Rust - Rust
- Assembly - Assembly
### Learn the topics of web development ## Topic-specific materials
Note: this is just a short selection of stuff listed in #### Architecture and design patterns
[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) Introduction:
- Create a learning plan with your learning priorities
- Consider using flashcards (see Anki for instance)
- Enjoy the learning experience!
#### Architecture
- Learn about DDD (domain driven design), SOLID, MVC. - Learn about DDD (domain driven design), SOLID, MVC.
Advanced:
- Wander in the [Software Architecture Guide](https://martinfowler.com/architecture/) - 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) - 🎞 [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/) - 🎞 [Simple Made Easy](https://www.infoq.com/presentations/Simple-Made-Easy/)
@ -142,37 +147,53 @@ Read one of those:
Master](https://pragprog.com/titles/tpp20/): hands-on the most inspiring and useful book I've read about programming. 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 - 📖 [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. 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.
- [Ten Principles for Growth as an Engineer](https://medium.com/@daniel.heller/ten-principles-for-growth-69015e08c35b), Dan Heller
Read the resources listed under [Must-read articles](https://github.com/charlax/professional-programming#must-read-articles). Read the resources listed under [Must-read articles](https://github.com/charlax/professional-programming#must-read-articles).
#### DB and SQL #### DB and SQL
Introduction:
- Learn basic and advanced SQL: joins, indexes, subqueries. - Learn basic and advanced SQL: joins, indexes, subqueries.
- Install Postgres and play with it. - Install Postgres and play with it.
- [Do those postgres exercises](https://pgexercises.com/) - [Do those postgres exercises](https://pgexercises.com/)
Advanced:
- Learn about ORM - Learn about ORM
- 🎞 [Watch this Python introduction to ORMs](https://www.youtube.com/watch?v=P141KRbxVKc&ab_channel=PyCon2014) (with SQLAlchemy) - 🎞 [Watch this Python introduction to ORMs](https://www.youtube.com/watch?v=P141KRbxVKc&ab_channel=PyCon2014) (with SQLAlchemy)
#### Dev environment, command line and Linux #### Dev environment, command line and Linux
Introduction:
- [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
- [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)
- Do shell exercises, for instance on [Exercism](https://exercism.io/tracks/bash), [TLDP](https://tldp.org/LDP/abs/html/exercises.html), [HackerRank](https://www.hackerrank.com/domains/shell). - Do shell exercises, for instance on [Exercism](https://exercism.io/tracks/bash), [TLDP](https://tldp.org/LDP/abs/html/exercises.html), [HackerRank](https://www.hackerrank.com/domains/shell).
- Learn about Docker, follow the [Official Docker Tutorial](https://docs.docker.com/get-started/)
Advanced:
- Install/use some of those tools: https://github.com/jondot/awesome-devenv - Install/use some of those tools: https://github.com/jondot/awesome-devenv
- Write your own dotfiles, taking inspiration from [Awesome Dotfiles](https://github.com/webpro/awesome-dotfiles) (you can - Write your own dotfiles, taking inspiration from [Awesome Dotfiles](https://github.com/webpro/awesome-dotfiles) (you can
checkout mines: https://github.com/charlax/dotfiles) checkout mines: https://github.com/charlax/dotfiles)
- Learn about Docker - 🎞 [8 super heroic Linux commands that you probably aren't using](https://www.youtube.com/watch?v=Zuwa8zlfXSY&ab_channel=EngineerMan)
- 🎞 [Containers From Scratch](https://www.youtube.com/watch?v=8fi7uSYlOdc&ab_channel=GOTOConferences) - 🎞 [Containers From Scratch](https://www.youtube.com/watch?v=8fi7uSYlOdc&ab_channel=GOTOConferences)
Videos: #### Distributed systems and system architecture
- 🎞 [8 super heroic Linux commands that you probably aren't using](https://www.youtube.com/watch?v=Zuwa8zlfXSY&ab_channel=EngineerMan) Introduction:
#### Distributed systems - [donnemartin/system-design-primer](https://github.com/donnemartin/system-design-primer): learn how to design large-scale systems.
Advanced:
- Consider reading 📖 [Designing Data-Intensive Applications](https://dataintensive.net/). - Consider reading 📖 [Designing Data-Intensive Applications](https://dataintensive.net/).
- [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) - [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.
Concepts to look into:
- CAP theorem - CAP theorem
- Weak/strong/eventual consistency - Weak/strong/eventual consistency
- Fail-over/replication - Fail-over/replication
@ -182,11 +203,17 @@ Videos:
- DB: RDBMS vs. NoSQL, replication, sharding, master-master, denormalization - DB: RDBMS vs. NoSQL, replication, sharding, master-master, denormalization
- Cache: client caching in browsers, CDN, HTTP headers, object cache, db cache - Cache: client caching in browsers, CDN, HTTP headers, object cache, db cache
- Asynchronism: message queues, back pressure - Asynchronism: message queues, back pressure
- Monitoring and alerting best practices
#### Network, protocols, HTTP #### Network, protocols, HTTP
Introduction:
- [How Does the Internet Work?](https://web.stanford.edu/class/msande91si/www-spr04/readings/week1/InternetWhitepaper.htm) - [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? - [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?
Advanced:
- Learn about the basics of TCP and UDP - Learn about the basics of TCP and UDP
- Learn the basics of the HTTP protocol: header, verb, status code, TLS, Rest APIs, etc. - Learn the basics of the HTTP protocol: header, verb, status code, TLS, Rest APIs, etc.
- 🎞 [Qu'est ce que le HTTP ?](https://grafikart.fr/tutoriels/http-1062), Grafikart - 🎞 [Qu'est ce que le HTTP ?](https://grafikart.fr/tutoriels/http-1062), Grafikart
@ -194,19 +221,30 @@ Videos:
#### Project management #### Project management
Introduction:
- [Efficient Software Project Management at its Roots](https://blog.pragmaticengineer.com/efficient-software-project-management-at-its-roots/) - [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/) - [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) Advanced:
- [TechnicalDebt](https://martinfowler.com/bliki/TechnicalDebt.html)
- Checkout this section on [charlax/engineering-management](https://github.com/charlax/engineering-management#project-management)
#### Security #### Security
Introduction:
- Learn about the OWASP Top 10 - Learn about the OWASP Top 10
Advanced:
- Consider reading 📖 [Penetration Testing](https://nostarch.com/pentesting). - Consider reading 📖 [Penetration Testing](https://nostarch.com/pentesting).
#### Version control (git) #### Version control (git)
Introduction:
- [Resources to learn Git](https://try.github.io/) - [Resources to learn Git](https://try.github.io/)
- 🎞 [Learn Git In 15 Minutes - YouTube](https://www.youtube.com/watch?v=USjZcfj8yxE&ab_channel=ColtSteele) - 🎞 [Learn Git In 15 Minutes - YouTube](https://www.youtube.com/watch?v=USjZcfj8yxE&ab_channel=ColtSteele)
- 🎞 [Introduction to Git](https://www.youtube.com/watch?v=ZDR433b0HJY&ab_channel=InfoQ) with Scott Chacon of GitHub - 🎞 [Introduction to Git](https://www.youtube.com/watch?v=ZDR433b0HJY&ab_channel=InfoQ) with Scott Chacon of GitHub
@ -227,3 +265,4 @@ Checkout this section on [charlax/engineering-management](https://github.com/cha
- [The Missing Semester of Your CS Education](https://missing.csail.mit.edu/) (MIT). - [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/) - [What every computer science major should know](http://matt.might.net/articles/what-cs-majors-should-know/)
- [Teach Yourself Computer Science](https://teachyourselfcs.com/) - [Teach Yourself Computer Science](https://teachyourselfcs.com/)
- https://github.com/charlax/professional-programming