5 ms·
I think his thought process relates to the same people who think you should know everything.... I will never know exactly how a microprocessor works - but that
by redorb 18y ago
I think his thought process relates to the same people who think you should know everything.... I will never know exactly how a microprocessor works - but that doesn't impede my programming skills, I might not know electricity works (down to the electron) but I still use it everyday.
If you spent all your time trying to know everything about anything - you will know a little about a lot, instead I think I would rather be a specialist.
- comatose_kid 18y agoI disagree. While you certainly don't need to know everything (for example, a programmer doesn't need to understand how electrons flow across the junction of a transistor), not understanding how the CPU works does impede a programmer's abilities. For example, how would you write performance critical code without this knowledge? Sometimes, just choosing the best algorithm isn't enough.
- bprater 18y agoIf you've never read the book "Code", do yourself a huge favor and go out and grab it tonight. It is in my top 10 computer books of all time. I've never seen a guide so eloquently walk a person from a basic understanding of how you turn on-and-off light switches to how assembly language works. Regardless, it would prove to be very helpful if you don't understand the basics of the hardware you are running on.
- edu 18y agoAnd what about knowing a reasonable amount of a few topics? In this case, knowing a little bit of operating systems, computer architecture and computer science (the more theoretical things as algorithms, complexity...) will make you a better programmer, if only because you will be able to think about your program at different levels if needed.
- ajross 18y ago"I will never know exactly how a microprocessor works - but that doesn't impede my programming skills" Yes it does. To pick just a single example: if you don't understand how your CPUs cache architecture works, and how it interacts with hardware paging (and ultimately swapping), you aren't qualified to do performance analysis at all. But you will anyway, and you will get it wrong, and you will forever be wondering why your MySQL database doesn't scale properly. Or why adding a bunch of RAM to the box didn't work the way you expected. Or you'll write dumb "optimized" code with local copies of things that could be computed, and fail to understand the benchmarks showing why it doesn't work. As a programmer, you are a user of a tool. If you want to be an effective user of that tool, you need to have some understanding of how it works. No, you don't need to be a fully trained ASIC design architect, or semiconductor process engineer, or solid state physicist. But yes: you should understand how a circuit works, and what the parts of your computer are, and how they interact. And your statement that "specialists" can get by without knowing "a little about a lot" just confuses me. Every talented "specialist" I've ever known has an encyclopedic knowlege of all sorts of things outside their specialty. A better word for a "specialist" that only knows their specialty is probably just "worker", or "lackey".
- eru 18y agoYou can do a lot of useful performance analysis with only a profiler and trial-and-error. Also sometimes mathematics seems to help.
- gizmo 18y agoYou can only really get the lowhanging fruit that way. There are so many different methods of optimization that you have to know where to start. You have to have a good model of the underlying system. Otherwise you won't understand why boxed integers are inherently slow. Or why an array of tuples can be much slower than a tuple of arrays. Modern languages completely abstract from fundamental things like indirection. Consequently, it becomes almost impossible to accurately estimate the performance of algorithms in high level programming languages. Waiting for people with experience optimizing prolog programs to disagree with me...
- eru 18y agoOptimizing Haskell seemed to require quite deep knowledge about the way the compiler worked.
- comatose_kid 18y agoSure, you can analyze, but there are cases where you will not be able to do much about your findings without an understanding of computer architecture.
- a-priori 18y agoI judge my skill level as a programmer by looking at the things I use then asking myself, "could I have created this?". Any time the answer is "no", I take that as a red flag and find some spare time to learn how it works or create a prototype implementation. Knowledge is not a zero-sum game. Learning more in one area does not make you worse in another. In fact, I believe it's usually an advantage.
- gills 18y agoI have used a closed-source framework pretty heavily for a few years, and when I need to really understand how to use some part of the API, I will go home and recreate the observed behavior from scratch. While it's sort of inefficient (why continue using a framework when I have many core pieces sitting around at home?), I think it's fun to approach the problem this way and I've learned plenty that applies to other problems.