|
If you want to actually learn how to code well (i.e not driven by a business need or a time table), here is how I would do it. All of these steps would be assisted by LLMS of course. 1. Learn basic assembly. This is to basically get used to thinking in terms of computer memory, operations, and so on. 2. Learn the Linux OS in depth. You should be comfortable in the terminal and with basic OS operations done in the terminal on. how to manage processes, how to search for files, move files, delete files, how to write to files, read from files, pass data to programs, analyze network traffic and open ports, see running services, how to use crontab, user management, and so on. 3. Learn C code, and how it compiles to assembly. Along the lines, learn how the linker works, how elf format works, how dynamic loading works. A good exercize is to compile hello world without #including anything and compiling with -nostdlib and -nostartfiles option. Another good exersize is learning how to modify an elf file to make it use a different dynamic library. Using Ghidra to look at binaries is also useful as well. 3. Learn networking in depth. Ideally, you should be comfortable writing a pure ethernet (i.e Layer 2/Link Layer) communication server, so 2 computers on the home network can talk directly without using IP protocol. However realistically, you should be comfortable at Transport layer, ie TCP/UDP and writing handlers to talk on sockets, and application layer stuff with writing http servers. Do this stuff in C. 4. Learn supplementary low level stuff. Namely you want to explore threading, compiler optimizations (along with undefined behavior), analysis tools like valgrind, as well as some linux interface stuff, like for example how to change the process to run as root. Once you have this basics down, its very easy to really pick up anything. Python will feel enjoyable to code in, but fundamentally you understand how it works under the hood, so its very easy to get up and running with it. |