I never took computer science or programming in school. So I ended up learning a lot of programming without understanding a lot of the basics and I really struggled with a few things that seem easy now. You can do a surprising amount of things without really knowing but it also depends on what you want to do.<p>Learning about my computers filesystem and how files are stored was pretty helpful. The way stdin,stdout,stderror and other files worked eluded me for a while so I always had trouble parsing or writing to files.<p>I found learning about how memory worked and understanding the difference between compile time and run time and stack and heap memory became important when I worked more with compiled languages.<p>And this may be counter intuitive to what you read but I found I learned a lot more about everything switching to a static typed compiled language instead of a dynamic one. That was when I really began to learn. I realized how much i'd just been doing things without really understanding what I was doing. Having to learn different types and use them when appropriate as well as building typea with structs really taught me a lot more about how my computer actually processes the code I write.