How can one organize proper self education?

I am 26, been working in enterprise dev with C# for 3 years already, yet I can’t really tell that I am a proper developer.
I have a diploma, yet I can’t say I have education.
I want to gain basic knowledge in CS:

  1. How computers work in general: CPU, memory, caches, logic, assembler.
  2. How OS work in general: how are they built and how control computer.
  3. How is high level code translated to computer instructions.
  4. Basic math for CS
  5. How networking works
  6. Algorithms

Several times I tried to read fundamental books on Algorithms (Cormen), OS (Knuth), Math but always failed at first chapters because of my inadequate preparation for such books. Just now I abandoned coursera Princeton course on Computer architecture because it’s massive and seems like overkill for such a slow learner like me who just wants to gain general knowledge.
I don’t know how not to get lost in abundance of material online for my goal. Also how to create realistic learning plan and stick to it.

Do you want learn web designing ?

I lean more into Full Stack. I checked certification on this website, but it mostly lacks what I look for.

Seems like GitHub - ossu/computer-science: Path to a free self-taught education in Computer Science! is a perfect choice for me.

1 Like

Here is another option that you may want to consider, Alexandr. Cost-wise, probably similar, but instead of having an “equivalent” degree, you would end up with an actual one.

Another alternative is to do both simultaneously, maybe with a bit of an extra overhead, but it’s all up to the individual’s aims and objectives.

1 Like

Hi @alexandr-osprey !

All of the princeton courses I have seen are intermediate to advanced.
So that is probably why you were having hard time.

Maybe you can start off with introductory computer science courses on edx and coursera and work your way up from there.

1 Like

I cannot give advice on much of what you asked but I can recommend a resource to start learning the basics of an Os.
I can recommend this book:

It is 140 pages, and even through written in 2001, much of the key concepts of how OSs work and are still valid.

I came from a mathematical background and only started learning Linux, python programming, and networking in September. I knew nothing of OSs or programming but this book really helped be out with the basics, and has,up until now, provided me with a solid basic background on OSs that I can use to tackle books on the subject that assumed an intermediate level knowledge on the subject.

If I, not a developer , but just a mathematician with next to no programming skills and no background in IT has found this enlightening and easy to understand, I am sure that a much more experienced person like you can definitely understand it!

1 Like

I have some small but important tips which work for me so far but I’ve only benn learning for 3 months so… see what works for you.

  1. Write down general plan of things you would need to learn in order, break it down into smaller chunks.
  2. Also in separate document, write down what have you learned either weekly or monthly (I keep detailed track of weekly progress). Inside, I also write what should I learn next, down to specific article, video or project goal so the next day I sit down at the computer, I know EXACTLY what to do and don’t waste time.
  3. Organize your resources for studying. I have a favorites folder for front end development and within that I have smaller folders:
  • Learning: general resources like whole big sites with many useful guides and articles like w3schools,
  • Theory- single articles or videos explaining theory, important definitions etc.,
  • HTML and CSS - big guides first (like MDN), articles on more specific topics later,
  • JavaScript - same,
  • Tools
    You get the idea.
  1. I have separate playlists on YT for programming videos.

Sometimes I dedicate one day to finding the most promising learning resources, save them up and decide which I should tackle first, then take a looong break from looking at more tutorials until I process some of the ones I’ve found already. With weekly diary of progress I can see what I learned already and what is left to do.

Hope any of this helps a bit!


I have been programming for about half a century. I understand things like how processors work and the basics of operating systems. For most of what you list I think it would help to have a reason for learning. In my opinion there are more important things to learn.

For learning about computers at the lower-levels then you might want to get a small computer such as a Raspberry PI. There are many others like that.

I have had very little need for math. Sometimes Trigonometry helps with graphics.

To learn networking you can write some networking programs. The Ethernet type of networking is different from the internet networking that uses TCP/IP.

For how programs are translated to computer instructions, you will enjoy learning about parsing and syntax and semantics and things like that. You can learn about LEXX and YACC and the free version of them, Flex and Bison. They are the early (old) tools used to develop compilers. After syntactic and semantic analysis there are things like optimization and the actual code generation. GPLEX and GPPG are C# versions of LEXX and YACC. I think there are more important things to learn than how to write a compiler but I have done research on the topic.