(Last updated on 2022-11-20)
Is it possible to keep track of the latest development of every technology in the software development industry?
No. Impossible nowadays. A lot of people will say: Don't try!
Being a programmer requires continuous learning of various technologies. However, as the article How to stay sane in today's world of tech says:
If you try to master a single skill in the tech industry today, in order to become an expert, you will loose the ability to know a lot of different skills and technologies and hence loose job or consulting opportunities. On the other hand, if you try to know and become good at many different things, you will never become really good (expert level) at a single thing.
That's just a hard fact of how much the technology has changed and progressed.
Nonetheless, I need to learn a lot of different things in order to do my work well. Hence this repository. This repository is not a new one. It was initially created in 2018 to keep my notes of learning. Since then, I have made notes on various subjects. These notes are helpful whenever I want to quickly refresh my memory on a particular subject.
But when I work on this repository, the question How to stay sane in today's world of tech keeps echoing in my mind. In the world of new things popping up and existing things changing all the time, I really need to focus on the ones that benefit me the most in the context that I am living, short term and long term.Learning the fundamentals, i.e., the things that change less frequently, is probably the most economical way. I just need to strike a balance between learning the things I need right now and learning the things that can solidify my foundation and benefit me in the far future. Meanwhile, I'm also asking myself these questions:
- How to make the best out of learning for the short term?
- What else in addition to learning the fundamentals?
As of 2022-11-20, this repository has a lot of sub-directories and issues. My plan is:
- I will list the subjects I want to focus on in this
README
file. But thisREADME
file does not track the progress. - I will need to keep updating this
README
file when I have a new subject interested in or I don't want to track an existing subject anymore. - I will gradually reorganize the issues so they can be used to track the progress of my learning.
- I will gradually reorganize the sub-directories so subjects I care about will have a sub-directory for the notes, and the unimportant subjects will be put in a separate place, probably in the category of "miscellaneous". I don't want to delete them because sometimes I may still want to make notes of random interesting things.
In general, study in whatever time that's available in whatever forms (e.g., text, podcast, video).
When I get a few days of free time, like when I'm on vacation, I may arrange a series of study sessions that I call "tech dashes" to learn continuously. See the tag tech-dash
in "Issues". The Tech_Dashes.md
briefly records what I do for each tech dash.
The output of study is in two places:
- Some organized or unorganized notes in this repository.
- An article in my tech blog that discusses a particular topic.
- A separate GitHub repository if the topic discussion is beyond the capacity of a single article (e.g., needing example code).
- How are atomic operations implemented on the hardware level?
- I took some notes here but need to study further.
- Computer Systems: A Programmers Perspective 2nd Edition
- Linux ELF format
- Understanding the Linux Kernel (3e): tracker
- Calculus
- Linear Algebra
- B-Tree
- Floating point numbers: math and tricks (in this series of articles)
- CVEs
- How The Tables Have Turned: An analysis of two new Linux vulnerabilities in nf_tables (about CVE-2022-1015 and CVE-2022-1016)
- The Discovery and Exploitation of CVE-2022-25636
- OAuth 2.0
- OpenVPN
- Transport Layer Security (TLS)
- WireGuard
- Securing Debian Manual 3.19
- Strong Distribution HOWTO: "This document describes the protocol and methods for the cryptographically strong distribution of free software on the GNU/Linux platform."
- Ansible
- Debian Policy Manual
- dpkg
- Docker
- Study the answer to my question In my Docker container, why can I still bind the port 1 without
NET_BIND_SERVICE
capability?.
- Study the answer to my question In my Docker container, why can I still bind the port 1 without
- Envoy
- Go (programming language): tracker
- JavaScript
- Material UI:
- Python
- Real Python articles: tracker
- CPython Internals
- Official documentation
- Python async I/O programming: tracker
- React.js:
- Software Bill of Materials (SBOM)
- Terraform
- UI design: