Teach programming to my friend
2019-03-17How to go through:
- Complete Part 1
- Go through Parts 2-6 in a non-linear way
- Go through Parts 7-9 in a non-linear way
My friend is on MacOS, so the current curriculum is a bit macos centric.
Important!
- The student will write an online book containing their acquired knowledge.
- The student will write anki cards for the purpose of review
- The teacher will collaboratively edit the student's book and anki cards.
https://apps.ankiweb.net/
☮ <- stuff the student should be able to check out first, independently
Curriculum🔗
- Basic use and knowledge of common Tools (git,vscode,docker,zola,markdown)
- ☮ update student's computer's OS
- ☮ brew, install git/tldr/bash4/iterm2/python3
- ☮ markdown
- git
- bash
- ☮ vim (use vimtutor)
- ☮ install vscode (get markdown plugins, get vim plugin) doc
- github lessons run following courses:
- ☮ Introduction to GitHub
- ☮ Introduction to HTML
- ☮ GitHub pages
- ☮ Uploading your project to GitHub
- ☮ Communicating using Markdown
- ☮ Managing merge conflicts
- make a github account
- make a github pages repository
- make a github repository for anki cards
- Zola
- docker
- man
- ☮ anki
- ☮ A taste of programming:
- ☮ brew install python3
- ☮ launch "python3" in iterm2
- Python Tutorial for Beginners
- ☮ Learn X in Y minutes - Python 3
- Write Yourself a Git!
- Python documentation
- Deliverables: student github repositories, online book & anki cards and knowledge necessary to start editing
- Computers
- Logical model & Physical reality - the power of abstractions!
- Layer 1 of knowledge
- Layer 2 of knowledge
- Layer 3 of knowledge
- "Modern processor design" book
- "Formal development of a network-centric RTOS" book
- Operating Systems 3 easy pieces
- Hack The Kernel - Harvard? OS course
- Assembly
- Deliverables: Program a GameBoy emulator
- Networking
- ☮ Networking fundamentals
- ☮ StudyTonight Computer Networks
- How internet works
- ARP,IP,TCP,DNS
- TLS, HTTP1.1, HTTP2
- L4 load balancers, L7 load balancers
- VLAN
- SDN
- learn about curl, ping, wireshark, dig, netstat, ip, hostname, ifconfig, hosts file others...
- A little diving about mobile phones low level layers? LTE etc?
- C
- Study Tonight - C programming language
- Learn X in Y minutes - C
- debating getting "Learn C the hard way" book
- "Linux Kernel Networking - Implementation and Theory"
- Deliverables:
- Implement GameBoy Game Link over network, LAN and Internet
- Databases
- text files & bash
- head,tail,cut,sed,tr,awk...
- CSV files
- Json files
- Excel sheets
- Redis
- SQLite, MySQL & SQL
- SQLbolt - a nice interactive guide
- StudyTonight - overview of DBMS
- SQL course for beginners
- Popsql & MysqlWorkbench
- SQLite doc
- "SQL and Relational Theory: How to Write Accurate SQL Code" book
- A basic MySQL tutorial
- Sysadmin crash course on mysql
- MySQL doc
- ANSI isolation model (and its critique)
- Indexes
- MVCC, 2PC etc. (find my book on databases systems at home)
- RIAK & Eventual consistency
- Deliverables: ???
- text files & bash
- Programming
- ☮ What is a programmer?
- ☮ TODO: really basic maths
- Information & Compression (a quick way to "show" information)
- The power of representation, moving a point in cartesian coordinate system, or in polar coordinate system
- ☮ Speedrun through Harvard Introduction to computer sciences
- ☮ MIT's Introduction to algorithms
- ☮ Introduction to Computer Science and Programming using Python
- The law of leaky abstractions
- Websites!
- "HTML5 Up and Running"
- "HTML&CSS"
- "JAVASCRIPT&JQUERY"
- Eloquent JavaScript
- You don't know JS
- Javascript allonge
- JS the right way
- MDN JS Guide
- exercism
- Algorithms
- "Introduction to algorithms" book
- Berkeley's Algorithms & Data Structures
- Princeton's Algorithms, Part 1
- "Pearls of functional algorithm design"
- "Purely functional data structures"
- GeeksForGeeks algorithms
- GeeksForGeeks data structures
- Go through the big families of languages with "Concepts, Techniques and Models of Computer Programming"
- Assembly (cf. the "Computers" part)
- C (cf. the "Networking" part)
- Clojure
- Smalltalk
- Haskell
- more more more languages (prolog? erlang?)...
- Is parallel programming hard and, if so, what can you do about it
- Deliverables: ???
- Engineering
- Explain tradeoffs and hoe no concepts in the following books are absolute. Always look for the tradeoffs.
- ☮ Joe Armstrong's "The Mess we are in"
- ☮ Rich Hickey's greatest hits
- ☮ Object relational impedance mismatch
- "Clean Code: A Handbook of Agile Software Craftsmanship"
- "Refactoring: Improving the Design of Existing Code (2nd Edition)"
- "Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions"
- "Domain-Driven Design: Tackling Complexity in the Heart of Software"
- "Design Patterns: Elements of Reusable Object-Oriented Software"
- "SOA Patterns"
- "Site reliability Engineering"
- "Systems Performance - Entreprise and the cloud"
- find my book on Queueing systems
- Deliverables: ?? make a full web app for something, maybe a ladderboard etc. for the gameboy project ??
- Specialization to work in my team
- ssh
- Linux
- Get access to a Linux machine on AWS or GCP or Azure or whatever...
- setup a CentOS7 docker image to work with for usual stuff
- The Linux Journey
- Introduction to Linux EDX guide
- Linux System Administration Basics
- checkout all the courses on Linux basics
- sysadmin introduction to cgroups
- "The Linux Programming Interface"book
- "Understanding Linux Network Internals"
- "Linux Kernel Networking" book
- ELK
- Prometheus
- Haproxy
- MySQL
- Jenkins
- Chef
- Unicode
- Do not use floating points until you read:
- intermediate Clojure
- intermediate Rust
- intermediate Java
- intermediate Javascript
- intermediate Python
- Centos7 & SystemD
- Deliverables: Reimplement previous stuff in Rust&Clojure, use Docker, Haproxy and ySQL storage, maybe the ELK stack
- Security, debugging, reverse engineering ... lots of stuff i picked up organically there...
- Optional
- Android dev.
- Deliverables: Maybe make a UNIST frame data app?
How Internet Work🔗
Internet protocol suite: | layer | protocols | |-------------|---------------------------------------------------------------------------------------------------------------------------------| | Application | BGP DHCP DNS FTP HTTP HTTPS IMAP LDAP MGCP MQTT NNTP NTP POP ONC/RPC RTP RTSP RIP SIP SMTP SNMP SSH Telnet TLS/SSL XMPP more... | | Transport | TCP UDP DCCP SCTP RSVP more... | | Internet | IP IPv4 IPv6 ICMP ICMPv6 ECN IGMP IPsec more... | | Link | ARP NDP OSPF Tunnels L2TP PPP MAC Ethernet Wi-Fi DSL ISDN FDDI |
OSI 7 layers | n | name | protocols | |---|--------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 7 | Application | NNTP SIP SSI DNS FTP Gopher HTTP NFS NTP SMPP SMTP SNMP Telnet DHCP Netconf more.... | | 6 | Presentation | MIME XDR ASN.1 | | 5 | Session | Named pipe NetBIOS SAP PPTP RTP SOCKS SPDY | | 4 | Transport | TCP UDP SCTP DCCP SPX | | 3 | Network | IP IPv4 IPv6 ICMP IPsec IGMP IPX AppleTalk X.25 PLP | | 2 | Data link | ATM ARP IS-IS SDLC HDLC CSLIP SLIP GFP PLIP IEEE 802.2 LLC MAC L2TP IEEE 802.3 Frame Relay ITU-T G.hn DLL PPP X.25 LAPB Q.921 LAPD Q.922 LAPF | | 1 | Physical | EIA/TIA-232 EIA/TIA-449 ITU-T V-Series I.430 I.431 PDH SONET/SDH PON OTN DSL IEEE 802.3 IEEE 802.11 IEEE 802.15 IEEE 802.16 IEEE 1394 ITU-T G.hn PHY USB Bluetooth RS-232 RS-449 |
Notes: