Чи може посилене використання вищих і вищих мов програмування призвести до дефіциту програмістів з знаннями архітектури комп'ютера?


15

Цитата статті «Вікіпедія на високому рівні»:

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

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

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

Відповіді:


16

Це може , але, швидше за все, не призведе до проблеми.

Це просто економіка. Якщо переважна більшість людей втрачає здатність розуміти основну архітектуру, і все ще існує величезна НЕОБХІДНІСТЬ зрозуміти основну архітектуру, то ті, хто встигають, матимуть роботу та отримуватимуть більше зарплати, а ті, хто не матиме лише цього робочі місця, де це не потрібно (а може все-таки платити більше ... хто знає?).

Чи корисно це знати? Абсолютно. Вам, швидше за все, буде краще. Це потрібно в більшості випадків? Ні. Тому абстракція настільки велика, ми стоїмо на плечах гігантів, не будучи самими гігантами (але навколо завжди будуть гіганти).


4
Але всі абстракції є герметичними. Знання основної архітектури є обов'язковим, якщо ви хочете стати передумовою для усунення несправностей, що витікають з абстракцій.
dimimcha

5
@dsimcha, Погодився, але для того, щоб бути хлопцем, який потрібен, вам потрібні "інші" ;-) Якщо всім потрібно все знати, абстракція не вдалася.
Преєт

1
@Preets, І тому багато абстракцій зазнали невдач. Навіть мати місце для існування хлопця, який існує, - це доказ того, що абстракція вже не вдалася.
Pacerier

@ Ryan, це фактично призведе до проблеми, коли в майбутньому світ буде затоплено додатками, повними тонких помилок через шари на шари нещільних абстракцій. Зараз досить дивно, що такі компанії, як Google з нескінченними ресурсами, все ще можуть мати помилки в своїх основних додатках.
Pacerier

3
@Pacerier google далекий від нескінченних ресурсів, і вони роблять додатки, які на кілька порядків складніші і складаються з кількох порядків більше рядків коду, ніж більшість інших. стверджуючи, що всі повинні знати комп'ютерні речі з низьким рівнем, тому що всі абстракції можуть просочитися - це як би сказати, що всі повинні знати, як побудувати будинок з нуля, не використовуючи інструментів, оскільки може прийти буря і зруйнувати їх будинок. просто не можливо (або розумно) витрачати такі ресурси.
сара

9

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

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

Кожен, хто намагається сказати вам інакше, продає зміїне масло або просто не має великого досвіду роботи з серйозним програмним забезпеченням. На роботі я працюю над програмою, яка керує непоганим відсотком усіх теле- та радіостанцій у США. Коли станції та мережі набувають більших і складніших, швидких і брудних прийомів, які добре спрацьовували при розробці продукту для однієї невеликої станції, в кінцевому підсумку вражають великі технічні стіни, коли впроваджені для мережі з 50 станціями та 200 каналами! Без глибокого розуміння того, як працює мова (і в першу чергу ефективної мови) та глибокого розуміння того, як працює база даних, наші кодери ніколи б не змогли успішно скласти масштаб продукту.

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


5
Я чув, що це виражається як "потрібно знати абстрагування одним шаром вниз від місця роботи". Ну, це було скоріше пітер; моя пам’ять хибна. Отже, якщо ви працюєте в C або Delphi, ви повинні знати, як працює збірка. Якщо ви працюєте в Smalltalk або Java, ви повинні знати, як працює ваш VM. (Можливо, ви завжди повинні знати щось про збірку!) Якщо ви працюєте з TCP, ви повинні знати, як працює IP. І так далі.
Френк Ширар

1
Я маю на увазі, ви могли б взяти це ще далі: чому цього достатньо, щоб просто знати збірку? це лише ручна абстракція на високому рівні над бінарними інструкціями процесора. але чекай! машинний код? це просто абстракція! вам потрібно дізнатися, як побудований ЦП за допомогою транзисторів для побудови логічних воріт! і автобус, і регістри. але чекай! транзистори? це лише абстракція певної конфігурації атомів. атоми - лише абстракція над коливаннями квантових полів. Врешті-решт, це просто javascript:alert("Hello world")вимагає отримання доктора наук з теорії струн.
сара

1
@kai Ти трохи смішний . Я схильний погоджуватися з вами, що зазвичай не так, що для більшості застосунків вам потрібно зрозуміти кілька шарів . Але ми говоримо про крайові справи, а не про кожен день. Звичайно, вам не потрібно знати, як працює сантехніка для миття посуду. Але якщо брудна вода почне заповнювати вашу раковину, вам, мабуть, варто трохи дізнатися про неї, перш ніж спробувати її виправити. Або ви можете просто протаранити шматок арматури вниз по стоку, поки він знову не запрацює, і кого не хвилює, куди йде вода. (продовження ...)
Дрю Джордан

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

1
@ DrewJordan, звичайно, ДЕЯКІ повинні знати всі ці речі, щоб хтось міг це виправити, коли абстракція зламається, але вся ПОСТАЧА абстракції полягає в тому, щоб число людей, яким потрібно знати деталі, зводило до мінімуму, щоб переважна більшість могла зосередитися на робити речі. де ви довільно прорисуєте межу того, де речі отримують "занадто низький рівень", просто залежить від того, з чим ви особисто працюєте, як це проілюстровано моїм аргументом ad absurdium (що не є помилкою, я маю вас знати!)
сара

5

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


2
Теоретично, так, але це кілька досить великих ifs .
Мейсон Уілер

1

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

Насправді, які домени насправді потребують знання архітектури комп'ютера? Це потрібно прив’язати до певної архітектури обладнання? Операційні системи? Драйвери пристрою? Звичайно, але навіть тоді лише такі частини коду потребують конкретних архітектурних знань.

Поліпшення продуктивності? Так, ви можете застосувати знання архітектури комп'ютера, щоб поліпшити продуктивність алгоритмів. Але два інші фактори мають більший вплив на продуктивність: використання кращих алгоритмів та знання мовного середовища виконання.

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

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