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

My primary language, here stored collection of Python learning materials.

Web Frameworks

SQL

Testing and refactoring

Programs, Libraries, Frameworks, Templates:

Inbox

Go

My secondary language, here stored collection of Go learning materials.

JavaScript

JavaScript is my tertiary programming language.

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:

Other related web-development resources:

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)

Lua

lua, actively use it with Neovim, learning materials:

Rust

Rust is practically unknown to me, learning materials:

Pascal

Pascal is my “old friend”, my initial programming language.


General programming and software development

Code organization and version control, code quality

Soft skills

DevOps

I really want to learn more about Nix language, maybe someday I’ll start to learn it seriously.

OS and kernel development

Other

Computer graphics and game development

Godot

Good engine for fast prototyping and game development.

Archive