Цитата из Википедии о статье «Язык программирования высокого уровня»:
Язык программирования высокого уровня - это язык программирования с сильной абстракцией от деталей компьютера. По сравнению с языками программирования низкого уровня, он может использовать элементы естественного языка, быть более простым в использовании или более переносимым на разные платформы. Такие языки скрывают детали операций ЦП, таких как модели доступа к памяти и управление областью действия.
Т.е. с ростом уровня языка программирования программист все дальше удаляется от оборудования, на котором работает программа.
Сейчас я не знаю статистику использования языков по уровням, но я подозреваю, что языки более высокого уровня все больше заменяют языки более низкого уровня. Если это так, может ли это привести к дефициту программистов со знанием компьютерной архитектуры? Будет ли это проблемой для отрасли?
Я думаю так. Меня беспокоит эта тенденция. Никакая абстракция не идеальна ; если бы был идеальный способ упростить любую сложную задачу, он бы очень быстро заменил оригинал. (Это случалось в прошлом, иногда с компьютерами, и гораздо чаще в других областях, которые не так сильно беспокоятся об обратной совместимости, как мы, например, в физике.)
Это означает, что каждый раз, когда вы используете абстракцию, от вас скрывается какой-то важный элемент существенной сложности. Если вы не знаете, что это такое, почему оно там и что оно делает, вы в конечном итоге случайно пишете большие крушения поезда и не знаете, как их починить, потому что не знаете, что на самом деле происходит.
Любой, кто пытается сказать вам иначе, либо продает змеиное масло, либо просто не имеет большого опыта работы с серьезным программным обеспечением. На работе я работаю над программой, которая показывает хороший процент всех теле- и радиостанций в США. Поскольку станции и сети становятся больше и сложнее, быстрые и грязные методы, которые отлично работали при разработке продукта для одной маленькой станции, в конечном итоге достигают больших технических стен при внедрении для сети из 50 станций и 200 каналов! Без глубокого понимания того, как работает язык (и, прежде всего, эффективного языка) и глубокого понимания того, как работает база данных, наши программисты никогда не смогли бы успешно масштабировать продукт.
Это не единичная история. Программное обеспечение продолжает становиться все более и более сложным, а не более простым, и я боюсь, что этот уровень технической экспертизы станет чем-то вроде утраченного искусства, и завтрашние программы будут хуже, чем сегодняшние, а не лучше.
источник
javascript:alert("Hello world")
требует докторскую степень в теории струн.Да, я думаю, что люди будут понимать аппаратное обеспечение гораздо меньше по мере развития языков (и, аналогично, по мере развития наборов инструкций). Но, как было отмечено во многих других местах, в наши дни основным ограничением для большинства программ является не время процессора или эффективность, а время программиста. Если люди, разрабатывающие языки, продолжают делать свою работу по созданию эффективной абстракции, и если люди продолжают правильно использовать эти абстракции, то понимание архитектуры компьютера не является абсолютно необходимым; по крайней мере, полное знание не является фундаментальным для того, чтобы быть хорошим программистом в наши дни.
источник
Нет, это не приведет к дефициту программистов со знанием компьютерной архитектуры. Языки используются для решения проблем в определенной области. Если вы хотите решить конкретную проблему, вы используете соответствующий язык или достаточно хороший, учитывая ваши ресурсы.
В действительности, какие области действительно нуждаются в знании архитектуры компьютера? Что нужно привязать к конкретной аппаратной архитектуре? Операционные системы? Драйверы устройств? Конечно, но даже тогда только части такого кода нуждаются в определенных архитектурных знаниях.
Улучшение производительности? Да, вы можете применить знания архитектуры компьютера для повышения производительности алгоритмов. Но два других фактора оказывают большее влияние на производительность: использование более совершенных алгоритмов и знание среды выполнения языка.
По сути, более абстрактные языки программирования решают проблемы, для которых детали компьютерной архитектуры не нужны. Они позволяют решить больше проблем. Люди, которые их используют, не используют их для решения машинно-зависимых проблем. Люди, которым необходимо решать машинно-зависимые проблемы, будут продолжать использовать машинно-ориентированные языки. Это не проблема с нулевой суммой.
источник