Programming learning path
My number #1
learning path.
I place here all my learning resources related to computer programming, here is no strict grouping, but I’m trying to keep it organized by priority.
Programming is a big part of my life, I’m trying to learn it in a structured way. Quality of learning resources is very important, but in same time learning materials should be understandable and easy to follow.
Initial point to start learning programming is development of programming principles, like this [[#|principles]]. Also, it’s worth to check some learning strategies.
Programming is closely related to computer science.
Programming principles
- Gathering problems and requirements is first step.
- Architecture planning and discussion required to make decisions and deeply understand the problem.
- Need to write maintainable code for people, DRY, KISS, YAGNI, need to avoid neurosis and excessive perfectionism.
- Write simple self-documenting code that explains its logic, comments
should be up-to-date and do not contain unnecessary information (explain what is
not clear or why it was done that way):
- I avoid deep abstractions and always prefer composition to inheritance or impurity.
- I prefer flat data structures whenever possible.
- I introduce external dependencies to a minimum (ideally without them at all).
- I design modules with clear APIs, but almost never translate them into microservices.
- To understand legacy code, I draw dependency graphs and sequence diagrams.
- I write examples - lots of examples. Some of them are even interactive.
- Several levels of testing, with the help of “tools” (debugger, linter, etc.) and automatic testing greatly help to detect bugs and issues.
- Working with team, helping others and myself (documentation, training, reviews) significantly improve quality of any project.
- I listen to the opinion of older comrades, experience is very expensive and useful.
- I do refactor my code if something is unclear and needs to be improved.
Now
What I’m currently learning, with queue order.
-
Python note improvements
-
Revisited python tutorial
-
nodebestpractices/README.russian.md at master · goldbergyoni/nodebestpractices · GitHub
-
cryptography
-
virtual memory
-
system call
-
cpu scheduling
-
file descriptor
-
tcp
-
interrupts
-
futex
-
mutex
-
semaphores
-
users/groups/cgroups (The linux programming interface)
-
union
-
intersection
-
difference
-
symmetric difference
-
is looping through an array easier on the memory than a long recursion
-
What is the difference between webpage, website, web server, and search engine? | MDN
Python
My primary language, here stored collection of Python learning materials.
-
Ultimate Python study guide for newcomers and professionals alike.
-
string — Common string operations — Python 3.13.0 documentation
-
Python’s F-String for String Interpolation and Formatting – Real Python
-
Глобальная блокировка интерпретатора (GIL) и её воздействие на многопоточность в Python / Хабр
-
Ускорение Python в 2 раза с помощью multiprocessing, async и MapReduce / Хабр
-
Python cheatsheet, to dive in into language itself.
-
Effective python, general tips to write good Python code
-
How to learn Python programming | Guido van Rossum and Lex Fridman - YouTube
-
Python dataclasses will save you HOURS, also featuring attrs - YouTube
-
Ned Batchelder - Facts and Myths about Python names and values - PyCon 2015 - YouTube
Web Frameworks
- The Flask Mega-Tutorial
- Django framework Greenfelds-Two Scoops of Django 3.x
- Learn - FastAPI
- Руководство Django Girls
- Python Django - The Practical Guide
- GitHub - zhanymkanov/fastapi-best-practices: FastAPI Best Practices and Conventions we used at our startup
SQL
- SQLModel
- python - SQLAlchemy proper session handling in multi-thread applications - Stack Overflow
- Using Python SQLAlchemy session in multithreading
- You can use Pydantic in SQLAlchemy fields - Roman Imankulov
Testing and refactoring
- Hillard-Testing With Pytest
- Batchelder-Getting started testing
- Seporaitis-Large Scale Refactoring With PyBowler
- Refactoring Python Applications for Simplicity – Real Python
- Testing Flask Applications — Flask Documentation (2.2.x)
- Simple mock server for testing using Flask · GitHub
- Typical Directory structure for python tests · GitHub not worked as expected?
Programs, Libraries, Frameworks, Templates:
- ipython - interactive python command shell
- scipy - Fundamental algorithms for scientific computing in Python
- jupyter - interactive computing across all programming languages
- numpy - the fundamental package for scientific computing with Python
- Ruff: one Python linter to rule them all
- GitHub - astral-sh/ruff-lsp: A Language Server Protocol implementation for Ruff.
- dosisod/refurb: A tool for refurbishing and modernizing Python codebases
- pallets/flask: The Python micro framework for building web applications.
- asottile/pyupgrade: A tool (and pre-commit hook) to automatically upgrade syntax for newer versions of the language.
- PyBowler
- spectree: API spec validator and OpenAPI document generator
- rq-flask-sqlalchemy-template
- Лучшие open-source инструменты для Python проектов
- python - Celery: log each task run to its own file?
- Using Celery: Python Task Management
Inbox
- config_manager/xdg_config/pyenv/default-packages
- A curated list of awesome Python frameworks, libraries, software and resources
- awesome-python-typing
- GitHub - testcontainers/testcontainers-python: Testcontainers is a Python library that providing a friendly API to run Docker container. It is designed to create runtime environment to use during your automatic tests.
- Using Testcontainers with Pytest: Isolate Data for Effective Testing
- Manim
- GitHub - tox-dev/filelock: A platform-independent file lock for Python.
- GitHub - miyuchina/mistletoe: A fast, extensible and spec-compliant Markdown parser in pure Python.
- Type hints cheat sheet - mypy 1.11.2 documentation
- GitHub - nschloe/perfplot: :chart_with_upwards_trend: Performance analysis for Python snippets
Go
My secondary language, here stored collection of Go learning materials.
JavaScript
JavaScript is my tertiary programming language.
-
Examples of how to do query, style, dom, ajax, event etc like jQuery with plain javascript.
-
Cheatsheet for the JavaScript knowledge you will frequently encounter in modern projects.
-
GitHub - codemirror/dev: Development repository for the CodeMirror editor project
Web development
HTML is initial resource of web page, sort of bones of web-page, how information is structured on the web and more, some learning materials:
CSS allow you to stylize your web page, tool to represent your page in unique way, some learning materials:
- CodePen trending
- Grid Garden - A game for learning CSS grid
- Flexbox cheatsheet
- CSS: Cascading Style Sheets | MDN
- Основы и практика CSS Grid Layout | Habr
- A collection of tips to help take your CSS skills pro
- CSS GPU Animation: Doing It Right | Smashing Magazine
- CSS ::before and ::after for custom animations and transitions | LogRocket Blog
Other related web-development resources:
- The Valley of Code
- Mini projects built with HTML5, CSS & JavaScript
- Как правильно верстать в 2022 году. Часть 1 / Habr
- The Odin Project, web development
- Full stack open
- Shuler-How Does the Internet Work
C (and a little bit of C++)
C is the lowest-level of the highest-level programming languages
Great cheat sheet with core language syntax:
TODO: verify this C Reference Card C Reference Card (ANSI)
-
Xiryanov-Kurs molodogo bojcza MFTI yazyk S, to learn basics of C.
-
The GNU C Library - GNU Project - Free Software Foundation (FSF)
Lua
lua, actively use it with Neovim, learning materials:
-
:h lua-guide
in neovim - A guide to using Lua in Neovim (lua guide in russian)
- Programming in Lua (first edition)
- Lua 5.4 Reference Manual - contents,
- Russian version.
Rust
Rust is practically unknown to me, learning materials:
- Implementing TCP in Rust
- Introduction - Rust By Example
- The Rust Programming Language - The Rust Programming Language
- Rust Language Cheat Sheet
- Rust by the Numbers: The Rust Programming Language in 2021 - The New Stack
- Rust vs. Go: Why They’re Better Together - The New Stack
- rust - How can I perform parallel asynchronous HTTP GET requests with reqwest? - Stack Overflow
Pascal
Pascal is my “old friend”, my initial programming language.
General programming and software development
- Backend Developer Roadmap.
- Aho Lam et al-Compilers
- McConnell-Code complete
- DeVries-Tutorials
- ThePrimeagen-Tutorials
- Sourcemaking
- A collection of full-stack resources for programmers
Code organization and version control, code quality
- organize large projects
- submit patches in right way.
- Chacon and Ben-Pro Git
- Martin Fowler-Refactoring
Soft skills
- Brooks-Mythical Man-Month
- Hunt and Thomas-The Pragmatic Programmer
- Rainwater-Herding Cats
- Yourdon-Death March
- Evans-So you want to be a WizarD
DevOps
I really want to learn more about Nix language, maybe someday I’ll start to learn it seriously.
OS and kernel development
Other
-
How to “think” (and design) like a Software Architect at Silicon Valley Code Camp 2019 - YouTube
-
Continually updated, interactive, and test-driven coding challenges, with Anki flashcards.
-
karan/Projects: A list of practical projects that anyone can solve in any programming language.
-
Processing, flexible software sketchbook and a language for learning how to code
-
Exercism, become fluent in your chosen programming languages
Computer graphics and game development
- Javidx9-Code It Yourself
- Handmade Hero, my initial steps, heavy related to programming with Windows API and computer graphics.
- Shadertoy BETA
- Компьютерная графика
- Real Time VFX
- RenderDoc
Godot
Good engine for fast prototyping and game development.
Archive
- [-] Writing The Matrix in Python: easy guide. Not really enjoyed (questions to structure and contains specific error), so skipped.
- [-] 30-Days-of-Python - codingforentrepreneurs, Probably good for beginners, but I not like too many inaccuracy/wrongness in this course.
- Pycharm - Jetbrains Python IDE (in Java), stopped using