Может ли повышенное использование высших и более высоких языков программирования привести к дефициту программистов со знанием компьютерной архитектуры?

15

Цитата из Википедии о статье «Язык программирования высокого уровня»:

Язык программирования высокого уровня - это язык программирования с сильной абстракцией от деталей компьютера. По сравнению с языками программирования низкого уровня, он может использовать элементы естественного языка, быть более простым в использовании или более переносимым на разные платформы. Такие языки скрывают детали операций ЦП, таких как модели доступа к памяти и управление областью действия.

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

Сейчас я не знаю статистику использования языков по уровням, но я подозреваю, что языки более высокого уровня все больше заменяют языки более низкого уровня. Если это так, может ли это привести к дефициту программистов со знанием компьютерной архитектуры? Будет ли это проблемой для отрасли?

gablin
источник

Ответы:

16

Это может , но, вероятно, не приведет к проблеме.

Это просто экономика. Если подавляющее большинство людей теряет способность понимать основную архитектуру, и все еще существует огромная потребность в понимании базовой архитектуры, то те, кто это делает, будут иметь работу и получать больше, в то время как те, кто этого не сделает, будут иметь только рабочие места, где это не нужно (и, возможно, все еще платят больше ... кто знает?).

Это полезно знать? Абсолютно. Вы, вероятно, будете лучше. Это необходимо в большинстве случаев? Нет. Вот почему абстракция так велика, мы стоим на плечах гигантов, не будучи самими гигантами (но вокруг всегда будут гиганты).

Райан Хейс
источник
4
Но все абстракции дырявые. Знание базовой архитектуры является обязательным условием, если вы хотите быть первоклассным специалистом по устранению неполадок, связанных с неплотными абстракциями.
дсимча
5
@dsimcha, Согласен, но для того, чтобы идти к вам, нужно, чтобы к вам приходили «другие» ;-) Если всем нужно все знать, абстракция с треском провалилась.
Улицы
1
@Preets, и именно поэтому многие абстракции с треском провалились. Даже наличие места для простого парня - это доказательство того, что абстракция уже провалилась.
Pacerier
@Ryan, Это на самом деле приведет к проблеме, когда в будущем мир будет наводнен приложениями, полными тонких ошибок из-за слоев за слоями неплотных абстракций. Удивительно, но теперь такие компании, как Google с бесконечными ресурсами, все еще могут иметь ошибки в своих основных приложениях.
Pacerier
3
@Pacerier google имеет далеко не бесконечные ресурсы, и они делают приложения, которые на несколько порядков, более сложными и состоят на несколько порядков больше строк кода, чем большинство других. утверждать, что все должны знать компьютерные вещи низкого уровня, потому что все абстракции могут протекать, все равно что говорить, что все должны знать, как построить дом с нуля, не используя инструментов, потому что может наступить шторм и разрушить их дом. просто невозможно (или разумно) тратить такие ресурсы.
Сара
9

Я думаю так. Меня беспокоит эта тенденция. Никакая абстракция не идеальна ; если бы был идеальный способ упростить любую сложную задачу, он бы очень быстро заменил оригинал. (Это случалось в прошлом, иногда с компьютерами, и гораздо чаще в других областях, которые не так сильно беспокоятся об обратной совместимости, как мы, например, в физике.)

Это означает, что каждый раз, когда вы используете абстракцию, от вас скрывается какой-то важный элемент существенной сложности. Если вы не знаете, что это такое, почему оно там и что оно делает, вы в конечном итоге случайно пишете большие крушения поезда и не знаете, как их починить, потому что не знаете, что на самом деле происходит.

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

Это не единичная история. Программное обеспечение продолжает становиться все более и более сложным, а не более простым, и я боюсь, что этот уровень технической экспертизы станет чем-то вроде утраченного искусства, и завтрашние программы будут хуже, чем сегодняшние, а не лучше.

Мейсон Уилер
источник
5
Я слышал, что это выражается как «вам нужно знать абстракцию на один уровень ниже, где вы работаете». Ну, это было довольно печально; моя память испорчена Поэтому, если вы работаете в C или Delphi, вы должны знать, как работает сборка. Если вы работаете в Smalltalk или Java, вы должны знать, как работает ваша виртуальная машина. (Возможно, вы всегда должны что- то знать о сборке!) Если вы работаете с TCP, вы должны знать, как работает IP. И так далее.
Фрэнк Шиарар
1
Я имею в виду, вы могли бы пойти еще дальше: почему этого должно быть достаточно, чтобы просто знать сборку? это просто высокоуровневая абстракция над инструкциями двоичного процессора. но ждать! Машинный код? это просто абстракция! вам нужно узнать, как процессор построен с использованием транзисторов для построения логических вентилей! и автобус и регистры. но ждать! транзисторы? это просто абстракция для определенной конфигурации атомов. а атомы - это просто абстракция над флуктуациями в квантовых полях. в конце концов, это просто javascript:alert("Hello world")требует докторскую степень в теории струн.
Сара
1
@kai Ты немного смешон . Я склонен согласиться с вами , что это не так, как правило , бывает , что вам нужно понять несколько слоев вниз для большинства приложений. Но мы говорим о крайних случаях, а не каждый день вещи. Конечно, вам не нужно знать, как работает сантехника для мытья посуды. Но если грязная вода начинает заполнять вашу раковину, вам, вероятно, следует немного узнать об этом, прежде чем пытаться ее починить. Или вы можете просто протолкнуть кусок арматуры в канализацию, пока она снова не заработает, и кого это волнует, куда пойдет вода. (продолжение ...)
DrewJordan
1
@DrewJordan, моя точка зрения такова: если вы не профессионал, которому нужно знать и решать определенный класс проблем (или просто иметь частный интерес), то совершенно откровенно абсурдно утверждать, что вам нужно знать внутреннюю работу и странные тонкости каждого инструмента, который вы используете. Я просто подвел точку зрения к ее логическому завершению. Конечно, знание того, как строится кабель Ethernet, позволит вам построить новый, учитывая правильные инструменты, когда ваше интернет-соединение не работает, но тратить время и деньги на получение знаний, когда вы работаете 20 уровнями выше, просто расточительно.
Сара
1
@DrewJordan, конечно, кому-то нужно знать все это, чтобы кто-то мог исправить это, когда абстракция нарушается, но весь смысл абстракций состоит в том, чтобы свести к минимуму количество людей, которым необходимо знать детали, чтобы подавляющее большинство могло сосредоточиться на готовые вещи. где вы произвольно проводите черту, где вещи становятся «слишком низкими», зависит только от того, с чем вы лично работаете, как показано в моем аргументе ad absurdium (который не является ошибкой, я хочу, чтобы вы знали!)
Сара
5

Да, я думаю, что люди будут понимать аппаратное обеспечение гораздо меньше по мере развития языков (и, аналогично, по мере развития наборов инструкций). Но, как было отмечено во многих других местах, в наши дни основным ограничением для большинства программ является не время процессора или эффективность, а время программиста. Если люди, разрабатывающие языки, продолжают делать свою работу по созданию эффективной абстракции, и если люди продолжают правильно использовать эти абстракции, то понимание архитектуры компьютера не является абсолютно необходимым; по крайней мере, полное знание не является фундаментальным для того, чтобы быть хорошим программистом в наши дни.

Дэвид Холлман
источник
2
Теоретически, да, но это пара довольно больших « если» .
Мейсон Уилер
1

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

В действительности, какие области действительно нуждаются в знании архитектуры компьютера? Что нужно привязать к конкретной аппаратной архитектуре? Операционные системы? Драйверы устройств? Конечно, но даже тогда только части такого кода нуждаются в определенных архитектурных знаниях.

Улучшение производительности? Да, вы можете применить знания архитектуры компьютера для повышения производительности алгоритмов. Но два других фактора оказывают большее влияние на производительность: использование более совершенных алгоритмов и знание среды выполнения языка.

По сути, более абстрактные языки программирования решают проблемы, для которых детали компьютерной архитектуры не нужны. Они позволяют решить больше проблем. Люди, которые их используют, не используют их для решения машинно-зависимых проблем. Люди, которым необходимо решать машинно-зависимые проблемы, будут продолжать использовать машинно-ориентированные языки. Это не проблема с нулевой суммой.

Huperniketes
источник