There are some things a good developer is NOT required to know

29 ביולי 2008

5 תגובות


Jeff Atwood and Peter Norvig seem to think you must have a deep understanding of how computer hardware works to be a good software developer:

how long it takes your computer to execute an instruction, fetch a
word from memory (with and without a cache miss), read consecutive words from disk, and seek to a new location on disk

I did learn these things, but after reading Jeff's post I have been trying to remember a project I worked on during the past 10 years which required this type of knowledge – and I got nothing.

Let's put aside for a moment specialized area in software development in which this knowledge is important:

  • Real time applications
  • Embedded applications

Assuming you are developing using a modern, high level programming language like Java or C#. During development of applications in areas not mentioned above, did you ever encounter an actual need to know these things? why? 

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *

5 תגובות

  1. ekampf29 ביולי 2008 ב 13:54

    Considering that the author works at Google, where they build their own distributed databases, file systems, and even the servers themselves…
    I guess the knowledge required there is not quite typical to what
    you'd expect from your everyday programmer…

    Btw, C# Parallel extensions and DirectX (and now WPF) shaders kind of
    remind me the days I was writing graphics in assembler (especially shaders..)

  2. Helen29 ביולי 2008 ב 15:37

    I think I agree with Jeff that having knowledge about how the hardware works is a good thing. I think it helps debugging problems and understanding limitations. I don't think that you have to know everything about computers to write good code (that's impossible) but I do think it's a good thing to have as accurate a mental model of the machine that you're working on as possible.

  3. Ens29 ביולי 2008 ב 22:47

    I certainly have needed to know how the hardware was used. There are non real-time applications that are still perf-critical (web browsers, encoders, basically most enterprise-class software). Further, as Helen says, it can really help with some confusing debug issues. And it's when a problem crops up that needs hardware knowledge but you don't even know it needs hardware knowledge that you need this.

    Still, I would agree that there are large classes of problems where sophisticated hardware knowledge is inessential.

    And I also basically disagree with Jeff's post in that I don't think he gains a lot of hardware knowledge by selecting different parts to build a computer (although some of the background research may betray underlying principles if you steer clear of marketing sites and gamer/enthusiast forums).

  4. dotmad30 ביולי 2008 ב 3:08

    Ens, you raise a valid point here:
    Understanding how the CPU works internally and how it interacts with the BUS has nothing to do with assembling a computer.

  5. Jesse Ezell31 ביולי 2008 ב 0:24

    Eh… everyone wants you to know something different. Many things can be valuable in the right context and useless in others. Talked with a few MS recruiters recently. They seem to be huge on threading, data structures, and algorithms and wouldn't have given a damn about hardware knowledge. Read an article the other day where a dude was saying that you have to know how to build your own compilers and diagnose hardware bugs. You can't learn it all in one day. Every bit helps, but damn… the more I know, the more I know I don't know.