Сколько должен знать средний разработчик о голом металле? - PullRequest
4 голосов
/ 07 декабря 2009

На днях меня поразило, что я почти ничего не знаю об оборудовании, на котором, как я ожидаю, будет работать мое программное обеспечение. Я был разработчиком около 5 лет, но я не изучал теорию / дизайн аппаратного обеспечения с тех пор, как покинул университет. Я даже больше не собираю свои собственные машины, потому что, будучи жестоко честным, я предпочел бы заплатить несколько дополнительных долларов и позволить выпадающему Comp Sci собрать его в магазине для меня.

Несмотря на то, что очень важно хорошо понимать основы того, что происходит под капотом, оно абстрагировано настолько далеко от нас, как разработчики, нам действительно не нужно заниматься сложностями Programmed I/O или Memory-Mapped I/O и т. Д ..

Или мы?

Обратите внимание, что я говорю о вашем ежедневном LOB-разработчике, а не о преданных ребятах из голого металла.

Итак, определите «среднее», как вы будете, но в целом, насколько глубоко компетентный программист сможет уметь погружаться?

Ответы [ 5 ]

9 голосов
/ 07 декабря 2009

Это зависит от того, насколько высок ваш уровень развития.

  1. Если вы разрабатываете для встраиваемых систем, это означает много знаний об оборудовании (близко к уровню EE).
    • Если вы находитесь в какой-либо специализированной области, например, в низкоуровневом программировании трехмерной графики для игр, вы должны знать все особенности конкретных графических карт.
    • Если вы работаете с веб-или настольными приложениями, вероятно, не так много.

Но во всех разработках вы, вероятно, должны знать основы. Например.,

  1. Где узкие места в архитектуре фон Неймана.
    • Как работает кеш процессора (важно при многопоточности).
    • Как планирование ОС будет отличаться на однопроцессорных многопроцессорных ЦП (опять же, важно в многопоточности).
    • То, как работает IO и почему при записи в файл не обязательно означает, что ваши данные немедленно сохраняются.
    • Насколько медленный IO и почему большинство приложений баз данных связаны с IO.
    • Почему сеть еще медленнее и менее надежна, чем IO (а беспроводная сеть тем более).

С другой стороны, я не думаю, что знание специфики, такой как IO с отображением в памяти, или знание различий между NAND и NOR flash действительно важно для среднего * (настольного / веб) разработчика. Даже знание архитектуры современного ЦП, вероятно, станет наукой само по себе, видя, насколько сложными они стали в последние годы, не говоря уже о том, что код , генерируемый современными компиляторами, становится все труднее предсказать (связанная статья показывает, что теперь сложнее перехитрить компилятор при низкоуровневых оптимизациях). Это похоже на то, что несколько десятилетий назад автомеханику было легче, сегодня не так много людей будут пытаться починить свои машины самостоятельно.

** Определение «среднего» может варьироваться. *

3 голосов
/ 07 декабря 2009

Я считаю чрезвычайно полезным иметь возможность понимать язык ассемблера, испускаемый компилятором, C ++ в моем случае Это очень полезно при рассмотрении таких вопросов, как оптимизация и решение сложных проблем отладки.

3 голосов
/ 07 декабря 2009

Конечно, можно обойтись, не зная ничего о базовом оборудовании. Однако даже знание, например, о том, как работают кэши и какие операции выполняются быстро / медленно на вашей конкретной целевой машине, поможет вам принимать гораздо лучшие решения при разработке программного обеспечения.

Что касается личной заметки, я думаю, что мне очень приятно знать, как на машине я провожу не менее 10 часов в день на работе;)

А потом опять зачем соглашаться на среднее?

2 голосов
/ 07 декабря 2009

Во многих случаях вы не знаете, на каком оборудовании будет работать ваша программа, поэтому слишком много внимания уделяется некоторым конкретным деталям одной машины. Пользователи могут запускать ваш исполняемый файл Win32 на виртуальной машине на некотором 64-битном оборудовании RISC, кто знает. Если вы точно не знаете целевое оборудование, лучше использовать абстракции, которые вам предоставляют ОС и стандартные библиотеки, и использовать их по назначению. Доверьтесь людям, которые создают ОС, компилятор и библиотеки, чтобы они правильно выполняли свою работу.

1 голос
/ 07 декабря 2009

Разработчики ОС проделали большую работу, чтобы абстрагировать физический мир. Их цель - предоставить обычному разработчику общий интерфейс для многих аппаратных средств, чтобы он мог сосредоточиться на своем приложении и разрабатывать код, который переносим, ​​проще в обслуживании и может оптимизировать обновления ОС.

Так что для среднего разработчика, создающего обычное приложение, я думаю, что лучше не задавать слишком много вопросов об оборудовании.

...