4 ms·
It really depends on what you think qualifies as understanding a topic. You can definitely write a basic compiler without much understanding. I've seen a lot o
by zenogais 10y ago
It really depends on what you think qualifies as understanding a topic.
You can definitely write a basic compiler without much understanding. I've seen a lot of programmers do this, and I think it's great. The unfortunate reality though is that at some point you'll have to learn the foundational mathematics of compilers to really build them. Without that foundation you'll be manipulating symbols and using libraries with only a vague idea as to what they really mean or do. This means when things go wrong, you'll often be quite puzzled as to what's happening. It also means your workarounds are likely to be flawed as they'll be based on only partial understanding of the problem they're solving.
It's great to have a pragmatic attitude when learning things, but it can also prevent you from gaining the deeper understanding only available through protracted study and practice.
- yumaikas 10y agoWhat courses form the mathatical basis for writing compilers? Discrete Math and the like?
- zenogais 10y agoUsually discrete math as the absolute bedrock, then a good understanding of automata theory.
- paloaltokid 10y agoI think my definition of understanding would be: I have understood this well enough to write a non-trivial program that solved a problem at my day job. This program should provably (and hopefully obviously) be the most correct, maintainable, and performant solution for the job. I make the day job part a requirement because for me to feel that I've invested my time well, I need to be able to apply my knowledge in service of some other task. Mind you, it only has to work and solve a problem once. If I never use it again in my career, that's fine. But it's that ability to say "well, I never thought I needed to learn compilers until this one time..."
- zenogais 10y agoYou kind of get a chicken and egg problem here. If you don't sufficiently understand something, how can you hope to identify situations in which you could apply it? I think the more pragmatic approach is to sample from a lot of different topics. The more I read CS papers on random topics, the more I find opportunities to improve my day-to-day work by applying them. There's no way to get this payoff without expending some effort, unfortunately. Requiring that the payout be obvious before the work is put in is, IMO liable to lead to not learning and improving as fast as you otherwise could.