Чи повинен розробник знати внутрішню роботу апаратних засобів комп'ютерів? [зачинено]


13

Я говорю не лише про те, як призначається пам'ять та управління пам’яттю (наприклад, про те, що можна вивчити, наприклад, C), а про апаратний аспект та про те, як кожен компонент апаратного забезпечення комп'ютера працює внутрішньо і як вони спілкуються один з одним.

Хто з вас знає все це?

Відповіді:


31

Це залежить від того, що ти робиш.

Якщо ви вбудований розробник (і ви пишете зовсім поруч з металом на дуже маленькому пристрої), вам потрібно знати кожен і все з кожного компонента в системі.

Якщо ви розробник систем (і пишете операційні системи чи драйвери пристроїв або, можливо, навіть бази даних), вам потрібно знати майже все, що потрібно знати про апаратні інтерфейси низького рівня.

Якщо ви розробник ігор та запізнюєтесь у своєму проекті (де ви оптимізуєте речі), вам потрібно знати, які входи та виходи кешу процесора та графічної архітектури ви будете використовувати.

Якщо ви розробник програм, вам нічого не потрібно знати, окрім збереження використання пам'яті на розумних рівнях.

Якщо ви веб-розробник, вам зручно знати Інтернет-протоколи, але нічого іншого не потрібно, окрім способів вирішення проблем із пам'яттю.


20
Знання про вашу машину завжди робить вас кращим розробником, навіть якщо ви робите лише додаткові програми. Такі знання можуть не знадобитися, але це, безумовно, важливо.
Роберт Харві

@ Роберт Харві: Правильно, саме тому я кажу "не потрібно знати". Це звичайно не завадить знати ці речі. :)
greyfade

2
+1, але я знаю (більше, ніж) кількох веб-розробників, які ніколи не вважають використання пам'яті.
Тім Пост

-1 для "Якщо ви розробник програм, вам нічого не потрібно знати, окрім збереження використання пам'яті на розумних рівнях." Деякі з більших проблем в системах навколо нас спричинені дизайнерами додатків, які не знають, як користуватися базами даних, а потім звинувачують dba, коли "все працює повільно, і це не мій код; дивіться, є профіль".
Ендрю Хілл

@AndrewHill: Коли це апаратне питання, а не алгоритмічне? Питання стосується розуміння апаратної поведінки низького рівня, а не алгоритмів високого рівня.
greyfade

12

Ні, не потрібно , але я думаю, що це відмінна ідея. Вивчення загального огляду того, як все працює на логічному рівні, справді допомогло мені в розвитку.


6

Я думаю, що коментарі щодо розробників додатків та веб-розробників помилкові.

Наприклад, якщо хтось розробляє веб-додаток, який включає в себе багато засобів безпеки, таких як ssh або якийсь інший алгоритм шифрування, досить важливо, щоб вони знали, який тип апаратного забезпечення працює, щоб вони могли визначити, чи може машина справді обробляти робоче навантаження. Іншим прикладом може бути сервер, на якому розміщений якийсь завантажений контент. Ви краще знаєте можливості дискового накопичувача та будь-який тип інтерфейсу шини, до якого він додається, якщо ви очікуєте досить великої кількості запитів.

З точки зору програми, якщо ви розробляєте якусь програму CAD або щось, що робить 3d-рендерінг, ви можете очікувати, що ці програми будуть обчислюватися інтенсивно як алгоритмічно, так і графічно. Було б доцільно розбиратися в апаратному забезпеченні, щоб переконатися, що додаток чуйний і корисний.

Я не кажу, що вам доведеться піти на те, щоб зрозуміти все, що стосується протоколу PCI, але ви краще зрозумієте, на що здатний інтерфейс та обладнання.

Зрештою, це важливо незалежно від того, яким типом розвитку ви займаєтесь. Рівень деталізації, необхідний вам для розуміння, є дискусійним.


2

Як професійний програміст, я розглядаю це як цілісний підхід до розуміння всієї системи , а не просто знання синтаксису даної мови програмування du jour . Я вважаю, що це допомагає програмістам (та аналітикам) приймати розумні дизайнерські рішення та робити більш обізнаний вибір алгоритму та структури даних.

На моєму власному досвіді найкращі програмісти в тій чи іншій мірі знають про внутрішню роботу, чи це розуміння нативного інструкції з монтажу, встановленого для цільової платформи, вступного курсу організації комп'ютерної школи в школі, рудиментарної цифрової електроніки чи вміння детально зрозуміти Описи ядер CPU та GPU в останніх моделях, найкращі мають більш повні знання, ніж їх менш зоряні колеги.


1

Я не впевнений, чи допомагає це, але відчуваю себе комфортніше, коли знаю більше про систему, над якою працюю, ніж мені справді потрібно. Коли я був молодшим, мені не подобалось знати мову асемблера системи, над якою я працював; або я змінився, або я навчився достатньо багатьох, що ще один не збирається значно розширювати своє почуття до системи. Я ніколи не був великим апаратом, але можу розібрати комп'ютер і назвати різні підсистеми та те, як вони взаємодіють.


0

Те, що я мало знаю, я дізнався на уроці комп’ютерної архітектури майже 25 років тому, і про не-реальну архітектуру в цьому.

Я в основному програмую програми на різних платформах. Був період, коли я розробляв код для запуску не тільки товарного обладнання x86, але і на Sparc, PA-RISC та інших архітектурах серверів. Знання на цьому рівні просто не потрібні для роботи, яку я виконую.


0

Я викладаю програмування Java як клас середньої школи АП. Я виявив, що коли студенти знають щось про внутрішню роботу комп'ютера, це допомагає їм зрозуміти поняття програмування.

Я не переходжу за борт - начебто простим поняттям, наприклад, як речі зберігаються в пам'яті, допомагають студентам.


0

Я відповім на це, як запитають у назві:

Так, розробник повинен знати внутрішню роботу обладнання. Скільки залежить від типу розробника та їх цілей, наявного часу та особистого інтересу. Звичайно, пріоритет повинен бути на найближчих інструментах, техніках тощо, які вони використовують у своїй області. Ця думка узгоджується з тим, щоб бути добре закругленою особою. Чим більше ви знаєте про речі поза своїм ремеслом, не жертвуючи своїм ремеслом, тим краще.

Це не означає, що вам потрібно зійти з розуму за Сиром Сиром. Майте хороший огляд обладнання, як взаємодіють деталі, як ними користуються операційні системи. У цьому напрямку пропоную прочитати книгу концепцій операційних систем для всіх розробників.

Я все це знаю? Чорт ні. Я забув так багато марної інформації про SCSI, що це навіть не смішно. Однак дізнатися про це було неоціненним досвідом. Я також забув багато інших деталей, пов'язаних з обладнанням, але пригадаю важливі поняття, які я дізнався з цих знань.

Отже, я, безумовно, пропоную дізнатися про обладнання. Робіть це в розумному темпі, залежно від ваших потреб. Дізнайтеся стільки деталей, скільки ви розумно можете, але зосередьтесь на поняттях.


0

Кожен розробник повинен знати основні поняття, пов'язані з комп'ютерною інженерією: двійкова арифметика, перетворення базових даних, булева алгебра, логічні ворота, склад центрального процесора (і що роблять компоненти), кеш, віртуальна пам'ять, стиснення, виявлення та виправлення помилок ...

Те, наскільки це слід знати, залежить від роботи програміста. Як говорили інші, розробник вбудованих систем повинен був би бути набагато більше знайомий з можливостями апаратного забезпечення та способом написання програмного забезпечення, яке найкраще використовує обладнання, ніж, скажімо, веб-розробник.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.