I think question is too general.
In some part of course, and in other side not particularly.
According to C#. It's good to know topics e.g.: stack, heap, gc (type of generations) common things, which are covered in "CLR via C#" it's enough.
But detailed information e.g. about MSIL and stuff around it's of course another addition to your skill but only if you use it day-by-day. It is waste of time for me, junior dev, learning topic which I forget at some months.
In nowadays is better to thinks more general and know essence of a lot technology. Using imagination, metaphors to understand ideas. And master skills that are useful to us.
I know about your course on pluralsight and book.
We can go dipper and why not learn all processor instructions which are generated from MSIL? And again, maybe to some one is niche. Or it is value to his day work.
Please, I read your blog post, SQL Injection or boxing/unboxing it's elementary and do not know anyone who would not have heard about it. SQL Injection which generally ORM fixes and boxing/unboxing (C# 1.1 -> C# 2.0).
The problem you need to solve determines which algorithms you need to use and which data structures allow those algorithms to perform well. However, that's just whiteboard computer science.
Nowadays, performance depends almost exclusively on memory bandwidth usage and spatial and temporal memory locality, i.e. the only thing that matters is how much memory you are moving and how you are traversing it (the number of additions/divisions/branches doesn't matter that much).
In other words, your machine prefers data structures with good memory locality which determine which algorithms you can use and which problems are fast to solve. That is, in real life (as opposed to white board computer science) the order is inverted.
The question is: are you constrained at all by the machine? Because if you can solve the problems you want to solve without knowing about memory, then you obviously don't need to know about memory. On the other hand, if you are constrained by computing time, power consumption and so on, then you either learn about memory or can't solve your problem.
Again in other words, if you can get the job done in ruby/python/haskell/java/lisp... then do it! You'll do it faster, nicer, probably more maintainable... However, if you cannot get it done there, you'll need to use C++/C/Fortran/D...
2 comments
[ 4.8 ms ] story [ 9.3 ms ] threadPlease, I read your blog post, SQL Injection or boxing/unboxing it's elementary and do not know anyone who would not have heard about it. SQL Injection which generally ORM fixes and boxing/unboxing (C# 1.1 -> C# 2.0).
Nowadays, performance depends almost exclusively on memory bandwidth usage and spatial and temporal memory locality, i.e. the only thing that matters is how much memory you are moving and how you are traversing it (the number of additions/divisions/branches doesn't matter that much).
In other words, your machine prefers data structures with good memory locality which determine which algorithms you can use and which problems are fast to solve. That is, in real life (as opposed to white board computer science) the order is inverted.
The question is: are you constrained at all by the machine? Because if you can solve the problems you want to solve without knowing about memory, then you obviously don't need to know about memory. On the other hand, if you are constrained by computing time, power consumption and so on, then you either learn about memory or can't solve your problem.
Again in other words, if you can get the job done in ruby/python/haskell/java/lisp... then do it! You'll do it faster, nicer, probably more maintainable... However, if you cannot get it done there, you'll need to use C++/C/Fortran/D...