Learning is an eternal path. I wanted to share my own adventure primarily for the following practical reasons: to help me remember what I have been working on technology-wise and to help me practice a technique known as spaced repetition. This is a summary to motivate myself to keep on track, to practice consistent self-reflection and to be reminded as often as possible to stay a bit more humble. In the process, I hope you may find some inspiration too.
December
- Articles
- MacOS
- Technology
- Workflow automation
- Books
- Docker
- Docker Deep Dive
- Part 1: The big picture stuff
- Documentation
- Django
- MacOS
- Python
- University of London
- Advanced Web Development
- Django models, templates, URLs
- Review
- Full stack web server
- Review
- Relational databases
- Review
- YouTube
- Django
- Python
- Security
- Terminal
- job management
- Review
November
- Articles
- Django
- Docker
- Network engineering
- Python
- Reaching the next level
- Dan Na
- Staff Engineer and Team Lead at Squarespace
- Keavy McMinn
- Senior Principal Engineer at Fastly
- Security
- Creating and Managing a GPG Key Pair
- Quick review
- What is a VPN?
- Time series database
- Workflow automation
- Books
- Career
- Documentation
- Build automation
- Django
- Writing your first Django app, part 1
- Getting started with projects, apps and views
- Writing your first Django app, part 2
- Getting started with models and databases
- Writing your first Django app, part 3
- Next steps with views
- Writing your first Django app, part 4
- Form processing and generic views
- Writing your first Django app, part 5
- Automation testing
- Writing your first Django app, part 6
- Dealing with static files
- Writing your first Django app, part 7
- Customizing the Django admin interface
- Flutter
- ReadTheDocs
- Papers
- Software engineering
- Time series database
- University of London
- Advanced Web Development
- C. J. Date, Database Design and Relational Theory
- Functional Dependencies and BCNF (Formal)
- Django generic views; CRUD and REST; Django-REST-framework and implementation of main HTTP methods; class-based views; testing in Django; AJAX; Implementing a front end using JavaScript
- Databases and Advanced Data Techniques
- C. J. Date, Database Design and Relational Theory
- Normalization: Some Generalities (Update Anomalies; Equality Dependencies)
- Functional Dependencies and Boyce/Codd Normal Form (informal)
- Functional Dependencies and BCNF (Formal)
- Evaluating data sources
- Relational Database Design and Implementation
- Normalization (Understanding Repeating Groups; 1st normal form; 2nd normal form; Understanding Functional Dependencies)
- Normalization (Problems with 2NF Relations)
- YouTube
- Build automation
- Cryptography
- Debugging
- Git
- Linux
- Mastering the craft
- Python
- Regular expressions
- Security
- Creating and Managing a GPG Key Pair
- Quick review
- Software engineering
- Swift
- Workflow automation
October
- University of London
- Advanced Web Development
- Overview of TCP/IP; Introducing full stack web server; Getting started with Django; Django views, models, templates, URLs; relational databases; database good practice; SQL and querying databases; query performance; migrations; Django ORM; Templating languages; Cascading style rules; CSS box model; basics of JavaScript and the DOM; Bootstrap layout; Django forms; Django validators.
- Databases and Advanced Data Techniques
- Data sources; Licensing; data structures; Relational Databases; conceptual modelling; integrity and keys; data integrity and security; integrity and the normal form; normalization; functional dependencies; ACID and transactions; concurrency control; security and user accounts; Using node.js and Mustache; Query efficiency; denormalisation.
- Articles:
- Software engineering: 20 Things I’ve Learned in my 20 Years as a Software Engineer; 6 New Awesome Features in Python 3.10; Principles behind the Agile Manifesto; SOLID Design Principles Explained; Setting up
cloudflared
tunnel. - Communication: The Pyramid Principle Explained.
- Books:
- Letters to a New Developer.
- Things they don’t teach you in software school.
- Courses:
- IBM AI Engineering Professional Certificate: Logistic Regression With Mini-Batch Gradient Descent; Support Vector Machines; Neural Networks and Deep Learning for Image Classification; Object Detection with R-CNN; Deep Neural Networks with PyTorch; Differentiation in PyTorch; Linear Regression; Optimization in PyTorch; Multiple Linear Regression Prediction; Linear Classifiers; Activation Functions; Deep Neural Networks; Convolution; Introduction to TensorFlow; Introduction to Deep Learning; Introduction to Convolutional Neural Networks; Recurrent Neural Networks; Restricted Boltzmann Machines; Autoencoders.
- Learn Anything With Flashcards - The Ultimate Guide To Anki.
- Documentation: Anki Manual.
- YouTube:
- FIX: FIX API for Algorithmic Trading playlist; Ctrader FIX API Tutorial - Introduction.
- Git: 10 Must Know Git Commands That Almost Nobody Knows.
- Python: Mind-bending metaclasses - adding function overloads to Python; Python slots, slots, and object layout.
- Software engineering: Problem-Solving for Developers - A Beginner’s Guide.
September
- University of London
- Computer Security
- Review: Malware; malware analysis; DoS attacks and botnets; firewalls; containerization; Bitcoin; cryptography; hashing.
- Databases, Networks and the Web
- Review: SQL basics; three-tier web applications; building simple web servers; generating web pages from data using templates; handling forms to input data; representing data in databases, relational databases; basic database operations, providing access to databases from middleware.
- Software Design and Development
- Review: modules; module complexity; module cohesion; module coupling; user stories; accessibility and usability testing; defensive programming.
- Articles:
- Next.js: Create a Next.js App.
- React: Introducing JSX; Rendering Elements; Components and Props; State and Lifecycle; Handling Events; Conditional Rendering; Lists and Keys; Forms; Lifting State Up.
- Courses:
- IBM Data Science Professional Certificate: Data Visualization; Introduction to Machine Learning; Applied Data Science Capstone.
- IBM AI Engineering Professional Certificate: Introduction to Neural Networks and Deep Learning; Deep Learning Libraries; Convolutional Neural Networks; Recurrent Neural Networks; Applications of Computer Vision; Image Processing with OpenCV and Pillow; Geometric transformations on images; Spacial filtering; Introduction to Image Classification.
- Documentation:
- Redux: Redux Essentials, Part 1: Redux Overview and Concepts; Redux Essentials, Part 2: Redux App Structure; Redux Essentials, Part 3: Basic Redux Data Flow; Redux Essentials, Part 4: Using Redux Data; Redux Fundamentals, Part 1: Redux Overview; Usage with TypeScript.
- TypeScript: How to use TypeScript with React….
- YouTube:
- CSS frameworks: Top CSS Framework - Tailwind CSS vs Bootstrap.
- Git: Git for Professionals Tutorial - Tools & Concepts for Mastering Version Control with Git.
- JavaScript: Building the same application with 10 different JS frameworks; What Are Source Maps; This Context in Javascript; Language Server Protocol Tutorial; What Is Deno and Do You Need to Learn It?; Learn JavaScript Generators In 12 Minutes; Learn JavaScript Array Reduce In 10 Minutes.
- Misc: I built a decentralized chat dapp // GUN web3 Tutorial.
- Node.js: Building Real API in Node With Mongodb.
- React: Common Use Effect Mistakes; Top 5 Common Mistakes in React; React Hooks Crash Course; React Hooks Full Course.
- Redux: Learn Redux From Scratch - Redux Full Course; Redux Tutorial - Learn Redux from Scratch; React Redux (with Hooks) Crash Course - 2021; React with Redux Toolkit Crash Course.
- Tmux: Complete tmux Tutorial; Best Terminal Application for Web Development.
- TypeScript: Learn TypeScript - Full Course for Beginners.
August
- University of London
- Software Design and Development
- Review: modules; module complexity; module cohesion; module coupling; user stories; accessibility and usability testing; defensive programming.
- Articles:
- Matplotlib: Usage Guide; Pyplot tutorial.
- Pycharm: Get started.
- React: Debugging Components with React Developer Tools; How to Create a React App with a Node Backend: The Complete Guide; How to Pass Props Object from Child Component to Parent Component; Creating a Global State with React Hooks; Introducing JSX; Rendering Elements; Components and Props; State and Lifecycle; Handling Events; Conditional Rendering; Lists and Keys; Forms; Lifting State Up.
- TypeScript: TypeScript Tutorial for JS Programmers Who Know How to Build a Todo App; Create React App - Adding TypeScript; React - TypeScript; The Basics; Everyday Types; More on Functions.
- UML: Component Diagram.
- Wikipedia: k-medians clustering; Strategy pattern.
- Books:
- SQL Queries for Mere Mortals: A Hands-On Guide to Data Manipulation in SQL, 4th Edition: Relational Databases and SQL; relationships.
- Courses:
- Divide and Conquer, Sorting and Searching, and Randomized Algorithms: Merge Sort; Asymptotic Analysis.
- IBM Data Science Professional Certificate: What is Data Science? (What is Data Science, Big Data and Data Mining, Deep Learning and Machine Learning, Data Science in Business); Tools for Data Science (Data Scientist’s Toolkit, Open Source Tools); Data Science Methodology; Python for Data Science, AI & Development; Databases and SQL for Data Science with Python; Data Analysis with Python; Data Visualization.
- Pluralsight: Managing React State; Representing, Processing, and Preparing Data; Combining and Shaping Data; skimming Using React Hooks; skimming Designing React Components.
- Documentation:
- react-table.
- YouTube:
- Debugging: Debugger basics in IntelliJ IDEA; Debugging in VS Code.
- Java: Skimming Java Beginner Course - Get Started Coding with Java.
- JavaScript: Building the same application with 10 different JS frameworks; What Are Source Maps; This Context in Javascript.
- Misc: I built a decentralized chat dapp // GUN web3 Tutorial.
- React: Hook or not? - Create a custom React Hook … or?; Global State with Context in React - React context; Star Wars React Memory Game with Typescript.
- Tmux: Complete tmux Tutorial.
- TypeScript: How to use TypeScript with React…; Learn TypeScript - Full Course for Beginners.
July
- University of London
- Databases, Networks and the Web
- Reviewing templating engines; CRUD application with Express; using
express-validator
; SQL database design.
- Reviewing templating engines; CRUD application with Express; using
- Software Design and Development
- JavaScript, Python, C++: modularity; JavaScript classes; unit testing; assertions; exception handling.
- Testing: classification.
- Articles:
- FastAPI tutorial.
- Google Cloud: Building and pushing images with Cloud Build.
- Hypothesis (Python): articles on writing good software; What is Hypothesis; Getting started with Hypothesis; Evolving toward property-based testing with Hypothesis; Generating the right data; Testing performance optimizations; The Encode/Decode invariant; Rule Based Stateful Testing.
- Introduction to Terraform.
- Linked Lists in Python: An Introduction.
- Node.js, MySQL and async/await.
- React: React Tutorial: An Overview and Walkthrough; Introducing Hooks; Hooks at a Glance; React sub-components; Create react subcomponents in a simple way!; Compound Components in React: The Basics.
- Books:
- SQL Queries for Mere Mortals: A Hands-On Guide to Data Manipulation in SQL, 4th Edition: Relational Databases and SQL.
- Courses:
- Database Architecture, Scale, and NoSQL with Elasticsearch: SQL vs NoSQL; Scaling Relational Databases; First and Second Generation Cloud Applications; The Emergence of BASE Solutions (i.e. NoSQL); Reacting to the Rise of NoSQL; Elasticsearch Overview.
- Divide and Conquer, Sorting and Searching, and Randomized Algorithms: integer multiplication; Karatsuba multiplication; Merge Sort.
- JSON and Natural Language Processing in PostgreSQL: Allocating Rows to Blocks in PostgreSQL; SQL Natural Language Index; A GIN-based Inverted Index with PostgreSQL; Building a Natural Language Index in PostgreSQL; Fulltext tsquery and tsvector Functions; PostgreSQL and Python; PostgreSQL and JSON.
- YouTube:
- Express JS Crash Course
- FARM Stack Course - FastAPI, React, MongoDB
- Fireship.io: Redis; DNS; Closures; MongoDB; Deploy Node like a CTO
- Git Branches Tutorial
- MD5 - A completely broken secure hash algorithm
- React JS Course for Beginners - 2021 Tutorial
- Recursion in Programming
- Zac Hatfield-Dodds - Escape from auto-manual testing with Hypothesis! - PyCon 2019
June
- University of London
- Computer Security
- Review trifid cipher, RSA algorithm.
- Software Design and Development
- Module coupling and cohesion, unit testing, secure programming.
- Courses:
- Object-Oriented Design: object-oriented analysis and design; object-oriented modelling; design principles; UML class diagrams.
- Database Management Essentials: query formulation; set operators; ERD notation; relationship variations; diagram rules; conceptual data modeling; design transformations.
- Intermediate PostgreSQL: concurrency and transactions; stored procedures; reading and parsing files; loading and normalizing csv data; text functions; character sets; hashing and cryptography; indexes and performance; regular expressions.
- Articles:
- Julia Vs Python: Will it unseat the king of programming? & Thoughts on Julia after 2 weeks.
- Metaprogramming.
- Python vs C++: Selecting the Right Tool for the Job
- Books:
- Cracking the Coding Interview 6th Edition (by Gayle Laakmann McDowell): Interview process; Behind the Scenes; Before the Interview; Behavioral Questions; Big O; Technical Questions; The Offer and Beyond; Arrays and Strings.
- Object-Oriented Software Engineering Practical Software Development using UML and Java (by Timothy Lethbridge, Robert Laganiere): Architecting and designing software.
- Practical LaTeX (by George Grätzer): inline formulas; displayed formulas; documents.
- YouTube:
- Cohesion and coupling: write BETTER PYTHON CODE Part 1
- Cracking passwords using only timing information
- Do we still need dataclasses? // PYDANTIC tutorial
- Find why your Python code is slow using this essential tool. (Feat. async/await) - Profiling
- Object Oriented Programming vs Functional Programming
- Python 3.10’s New Match Statement
- Python f-strings can do more than you thought.
f'{val=}', f'{val!r}', f'{dt:%Y-%m-%d}'
- Python: Not all exceptions are Exceptions
- Self-Avoiding Walk
- Test Driven Development vs Behavior Driven Development
- XML & ElementTree
May
- University of London
- Computer Security
- Software backdoors; sabotage; intellectual property; entitlement to privacy, rights and freedom; trifid cipher; transposition cipher; ethics in information security.
- Databases, Networks and the Web
- Passing variables to templates and backend.
- Web Server Concepts and Examples.
- Dynamic web applications.
- Database schema, ER diagram; foreign keys and SQL join; aggregate functions in MySQL; left and right joins.
- Packet switching; TCP/IP model; internet protocol stack; transport layer; network layer; link layer.
- Software Design and Development
- Criteria for the evaluation of implemented architectures; module coupling; module cohesion; language features (modularity, unit testing, assertions, exception handling, security); testing; test-driven development; defensive programming; security engineering; metamorphic testing; assertive testing.
- Articles:
- A beginner’s guide to writing documentation
- An introduction to Sphinx and Read the Docs for Technical Writers
- Buffer overflow
- Kibana Query Language
- Parsing XML
- Sphinx Overview
- Books:
- Algorithms, 4th Edition (by Robert Sedgewick and Kevin Wayne): Analysis of algorithms; order-of-growth classifications; designing faster algorithms; union-find.
- Code Complete (by Steve McConnell): Upstream Prerequisites.
- Don’t Make Me Think, Revisited (by Steve Krug): Guiding Principles.
- Practical LaTeX (by George Grätzer): Mission Impossible; text; text environments.
- Courses:
- Object-Oriented Design: software architect and design roles in industry.
- Database Design and Basic SQL in PostgreSQL: history of relational databases; SQL architecture; using PythonAnywhere and DBeaver with Postgres; data types in Postgres; database keys and indexes; relational database design; many-to-many relationships.
- Database Management Essentials: DB characteristics; organizational roles; DBMS overview and database definition; non-procedural access; transaction processing; data warehouse processing; DBMS technology evolution; basics of relational databases; integrity rules; integrity constraint syntax; SQL overview;
JOIN
withSELECT
;GROUP BY
. - Intermediate PostgreSQL: altering table schema; dates;
DISTINCT
/GROUP BY
;SELECT DISTINCT
; subqueries. - YouTube:
- Data Structures Easy to Advanced Course - Full Tutorial from a Google Engineer
- Design Patterns in Plain English - Mosh Hamedani
- Docker Explained
- Efficient Exponentiation
- Google Apps Script
- New in Python 3.10, part 1 and part 2.
- Typography for Developers - Full Course from Treehouse
- UML Diagrams
April
- University of London
- Computer Security
- Ethics in information security, security threats, types of malicious software, malware analysis and techniques, passwords, social engineering, CIA (confidentiality, integrity, accessibility), attack surface and denial of service attack, DDOS, botnets, Mirai, WiFi attack vectors, firewalls, intrusion detection systems;
- Operating systems, file system and directory structure, Windows security, hardening Linux systems, Android attack surface, virtualised and containerised operating systems;
- Intro to cryptography (symmetric, asymmetric, basic encryption techniques, transposition cipher, Playfair substitution, Vigenere), intro to RSA (including Fermat’s last theorem, Fermat’s little theorem), modular arithmetic.
- Hashing, hash tables, cryptographic hash functions.
- Intro to Bitcoin; blockchain protocol; double spending problem; immutability of the blockchain; data on the blockchain; introduction to Ethereum; IPFS; Filecoin.
- Security policies & military security policy; Clark-Wilson security policy; Chinese Wall security policy; BellLa Padula model; Biba model; Graham Denning model.
- Databases, Networks and the Web
- Web application, web requests, three-tier web application architecture, introduction to Node.js and Express, simple web servers, web hosting, separation of concerns, templating engines, GET and POST request methods.
- Introduction to databases; lists of data; intro to relational databases; MySQL databases; basic SQL; primary keys.
- Software Design and Development
- Introduction to modules, module coupling, cohesion and complexity (structural complexity, McCabe complexity measure, criteria for the evaluation of implemented architectures, sustainability evaluation of software architectures), JavaScript (scope, const);
- Unit testing workflow with Python’s
unittest
, C++ primer, intro tocppunit
, physics engine, intro to Mocha, RESTful web APIs, assertions. - Secure programming; Bandit static analysis in Python; exception handling; debuggers.
- Requirements techniques (natural language, UML, simplified technical English, Z mathematical language); EARS (Easy Approach to Requirements Syntax); black box and white box testing; test procedure specification; automated black box testing; usability testing; usability metrics; usability principles; accessibility testing.
- Git: design goals; basic operations; branching and merging; git log; ungit.
- Articles:
- Why You Shouldn’t Use “Markdown” for Documentation.
- reStructuredText Primer.
- Books:
- Code Complete (by Steve McConnell): Metaphors for a Richer Understanding of Software Development; Upstream Prerequisites.
- Clean Coder (by Robert C. Martin): collaboration; teams and projects; mentoring.
- Misc:
- Getting started with LaTeX in Overleaf.
- Git worktrees.
- How to use Read the Docs.
- Interactive components in Figma.
- Learn about Prefect.
- Database paradigms.
- Review SQL concepts, SQL tutorial.
- Software architecture: designing a system; implementing a design; class diagrams.
- JavaScript:
- Query selectors.
- Python:
- Passing context as decorators with Click; review decorators.
- functools
cache
function. - Dataclasses.
- UML Diagrams.
March
- University of London
- Agile Software Projects
- Writing a software proposal report: problem statement.
- Graphics Programming
- Making a “webcam piano” with howler.js; integrating a music player with playlist.
- Working on an “average face” sketch, combining different images.
- Books:
- Clean Coder (by Robert C. Martin): Professionalism; saying no; saying yes; coding; test driven development; practicing; acceptance test; testing strategies; time management; estimation; pressure.
- Misc:
- Basics of blockchain technology, Web Assembly (WASM), GraphQL.
- Learning how to use Docusaurus.
- Learning how to use Hasura.
- Model checker: Alloy, “Finding bugs without running or even looking at code”.
- JavaScript:
- Review promises.
February
- University of London
- Agile Software Projects
- Integrating Material-UI within a React application;
makeStyles
. - Theming with Material-UI; React props.
- Building a React app with Next.js.
- SSR with Next.js, styled-components and Material UI.
- Integrating Next.js Commerce template.
- Writing a software proposal report.
- Writing a problem analysis.
- Integrating Material-UI within a React application;
- Graphics Programming
- Making a “webcam piano” with howler.js; integrating a music player with playlist.
- Customize 3D sine game.
- Working on an “average face” sketch, combining different images.
- Introduction to convolution.
- Books:
- Clean Code: smells and heuristics; refactoring; systems; classes; unit tests; error handling; formatting; comments; functions; names; concurrency programming.
- Clean Coder (by Robert C. Martin): Professionalism; saying no; saying yes; coding; test driven development.
- Taking screenshots with Chrome developer tools.
- Using Click to build command-line tools.
- Using Kitty terminal.
- How to Publish an Open-Source Python Package to PyPI.
January
- University of London
- Agile Software Projects
- Gantt chart; validation techniques; measuring success; sampling and heuristic evaluation.
- Evaluation studies; emotional interaction; interfaces in interaction design.
- Interfaces in interaction design; data at scale; cognitive aspects.
- React: Introduction to React; creating a React component.
- Next.js: Create a Next.js application; navigating between pages; assets, metadata, and CSS.
- Next.js: pre-rendering and data fetching.
- Next.js: Adding a responsive navbar.
- Researching React frameworks to use to style Next.js application: stick with Material UI.
- Integrating Material-UI within a React application.
- Graphics Programming
- Integrating a particle system in
p5.js
. - Making an Instagram filter.
- Making a “webcam piano” with howler.js.
- Integrating a particle system in
- Programming with Data
- Pandas, Matplotlib, JupyterLab.
- Data cleaning.
- Regexes in Python.
- Hackerrank: solve Alphabet Rangoli and Designer Door Mat.
- Setting up multiple bars in
i3wm
. - Using
tailwindcss
withNext.js
. - Fundamentals of TDD: Introducing the Unit Converter (example application); phases of testing.
- Vim:
- Track open files with the buffer list; group buffers into a collection with the argument list.
- Managing hidden files; divide the workspace into split windows.
- Organize window layouts with tab pages.
- Open a file by its filepath using
:edit
and:find
. - Explore the File System with
netrw
. - Save files to nonexistent directories; save a file as the super user.
- Difference between wrapped real lines and display lines; moving word-wise.
- Find by character; search to navigate.
- Trace your selection with precision text objects; delete around and change inside selections.
- Mark your place and snap back to it; jump between matching parentheses; traverse the jump list.
- Traverse the change list; jump to filename under the cursor.
- Snap between files using global marks.