Як програміст, чи повинен я знати мови програмування низького та високого рівня? [зачинено]


18

До мене зверталися, щоб виконати деяку роботу світлодіодних дисплеїв дистанційного керування через TCP / IP, але мій досвід та підготовка стосуються переважно мови програмування високого рівня. Я сказав це людині, яка контактує зі мною про роботу, і він сказав мені:

"якщо ви називаєте себе програмістом, ви повинні знати всі ці речі"

Чи повинен програміст дійсно знати деталі програмування низького рівня? Або я можу трактувати це як концепцію чорної скриньки, як теоретичне знання, але необов'язково виконувати це чи реалізовувати мовні рішення низького рівня, маючи на увазі, що програмування низького рівня не є моїм досвідом?


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

1
@delnan: працюючи на високому рівні, звичайно, слід маскувати деталі нижнього рівня. Однак я думаю, кожен програміст повинен знати, як працюють машини, які вони програмують, і на нижньому рівні. Знання не потрібно надто деталізувати - достатньо просто знати, як побудувати базовий комп'ютер з нуля, цілком достатньо.
Schedler

4
"Якщо ти називаєш себе програмістом, ти повинен знати всі ці речі" Якщо вони хотіли тебе так погано, що проклинали за твою відсутність досвіду, щось дуже не так. Я б ігнорував їх коментар, оскільки він зовсім не має сенсу. Або хочуть вас зі своїм фоном, або вони не хочуть вас і не повинні проклинати вас за тло, якого у вас немає.
С.Лотт

3
Ще один випадок: "Боже, радий, що пропустив цю кулю!" Ви насправді не хочете працювати або з таким снобом?
Едвард Странд

2
@Schedler - і якщо вони не спалюють власні дошки, вони є загальними новичками.
Едвард Странд

Відповіді:


37

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

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

Я б не працював над тим, хто має відношення до вашого контакту.


4
+1: коментар не має сенсу в першу чергу.
С.Лотт

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

22

"якщо ви називаєте себе програмістом, ви повинні знати всі ці речі"

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

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


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

4
Ваша думка не вистачає. Так, програмісти високого рівня повинні мати можливість розуміти аспекти низького рівня, але чи повинен він знати, як написати оновлення мікропрограмного забезпечення для маршрутизатора Linksys?
maple_shaft

7
Я думаю, що вони повинні знати, як дізнатися, як, хоча. Значна частина сучасного програмування - це знати, що потрібно запам'ятати, а що подати в якості посилання.
Майкл К

8

Розмовляв, як людина, яка ніколи в житті не писала рядку коду. Це буде та сама людина, яка відчує, що ви зможете це зробити за половину часу, який ви цитуєте. Не сперечайтеся з ідіотом.

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

Я думаю, кожен тесляр повинен знати, як вирізати прикрашений предмет меблів. Якщо пілот може літати одним літаком, вона може літати їх усіма.


Я погоджуюсь, на мою думку так, що оскільки ви лікар, ви повинні знати, як зробити операцію на відкритому серці. Але в реальному житті ви знаєте, що він повинен бути фахівцем, щоб це зробити, але в програмуванні різниці важко сказати, коли ви просто дивитесь це назовні як на "всіх могутніх програмістів".
робота

6

Більшість програм CS в школі дадуть вам деякі знання з програмування низького рівня. Наприклад, у мене були класи асемблера за допомогою процесора 8088 (гаразд ... так що мене трохи датують). Я думаю, однак, що багато торговельних шкіл сьогодні обіходять ці знання - додайте коментар, якщо це неправда.

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

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

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


6

Я дуже зневажаю це, коли люди кажуть: "Вам потрібно знати X, щоб називати себе програмістом". Дійсно? Ну, а деякі люди працюють над COBOL цілий день і люблять його. Вони, можливо, настільки добре в цьому і в їхній проблемній області, що поруч з ними ми всі претенденти.

Серйозно, приділяйте людям повагу до вирішення проблем, з якими стикаються, крутими та цікавими способами. Зрозумійте, що велике вирішення проблем походить від різноманітності. Чи не освоїли вони нібито "контрольний список" навичок, які повинні знати всі, щоб вони могли мислити однаково. Ось ТОЧНА ОПОЗИЦІЯ того, чого ми хочемо. "Контрольний список" для всіх є і повинен бути різним. Чим більше відрізняється, тим краще. Програмування в наші дні вирішує проблеми. Поважайте тих, хто це робить добре, і розумійте, що всі приходять до столу з різною силою. Це єдиний спосіб, коли ми допоможемо ефективно працювати в команді. Тільки тому, що знання "С" чи чогось насправді допомагає цьому хлопцеві бути приголомшливим, це ще не означає, що ти не "


3

Я пропоную вам прочитати це:

http://www.joelonsoftware.com/articles/LeakyAbstractions.html

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

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


Можливо, мені потрібно уточнити, що я знаю, як працює TCP / IP =), моя думка полягає в тому, щоб реалізувати щось на зразок розеток через TPC / IP, не мої знання, чи можу я дізнатися це на льоту? Звичайно, я хочу це навчитися? Не дуже, головним чином тому, що я не впевнений, що кінцевий результат буде повністю доведений у виробничому середовищі або буде відповідати всім вимогам в даний час. Я просто думаю, що в той час, як мені знадобилося досягти рівня знань з мови високого рівня, і я не думаю, що часу буде достатньо, щоб знати всі гатчі, які дають мої ризиковані відчуття.
робота

Це справа: вам не потрібно бути експертом. Але ви повинні знати основи. Таким чином, ви будете знати, які межі абстракції ви використовуєте - це мінімум, і знаєте, як документувати себе, коли буде досягнута межа.
deadalnix

2

Його аргумент є хорошим прикладом логічної помилки No True Scotsman .

Однак різниця між програмуванням низького та високого рівня полягає не в мові, а в області знань додатків. Призначення значення true може означати включення світлодіода або включення подій клацання миші на віджет. Мова не хвилює.

Наприклад, погляньте на цю бібліотеку для роботи зі світлодіодною матрицею на ардуїно. Тут не ракетна наука, і справді будь-який програміст міг би зрозуміти це з невеликими зусиллями, якби не поставив "низького рівня" ні "! ментальний блок.


1

Кожна мова програмування має свої плюси і мінуси. Навчившись декількох, ви дасте чудове уявлення про те, чим користуватися та як це ефективно використовувати при наданні проекту.

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

Можливо, людина, яка сказала вам, що «Фраза» розчарована, можливо, ви були не єдиною контактною людиною, з якою він спілкувався.

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

ура,

підопічний


1

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

А щодо "якщо ви називаєте себе програмістом, ви повинні знати всі ці речі", хто може знати про все? Перед тим, як їх навіть зробити?


-2

Я переформулюю фразу

"якщо ви називаєте себе програмістом, ви повинні знати всі ці речі"

ДО

"якщо ви називаєте себе програмістом, ви повинні знати достатньо, щоб ви могли швидко вивчити всі ці речі"

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