Теперь Кью работает в режиме чтения

Мы сохранили весь контент, но добавить что-то новое уже нельзя

Стоит ли изучать ассемблер в виде основного языка программирования для профессии программиста?

Недавно я начал изучать програмирование и узнал про ассемблер. В интернете пишут, что это очень низкий язык программирования, который труден в понимании, но является очень быстрым. Я всегда считал, что главное в программах - эффективность и скорость работы, поэтому ассемблер меня сильно заинтересовал. Но в интернете практически нет рекламы обучения ассемблеру ( все говорят лишь об обучении Питону и Джаве ), будто бы этот язык никому не нужен.
Из этого у меня вытекают следуюшие вопросы :
1. Насколько он труден в освоении ?
2. На нём действительно программы пишутся в разы медленнее, чем на том же Питоне/Джаве ?
3.Возможно ли сделать карьеру программиста, основанной на этом языке ?
4.Есть ли нужда в программистах на ассемблере ?
5.Устареет ли ассемблер в будущем ?
6.Стоит ли вообще изучать его ?
ПрограммированиеПрограммы+3
  · 14,3 K
старший разработчик в pseven.io  · 23 февр 2022
Преамбула: когда-то давно я интересовался ассемблером и взломом программ, занимался дизассемблированием, писал несложные вещи на ассемблере под win32. Сейчас пишу на высокоуровневых языках.
Тут есть пара ошибок в предпосылках к вопросам. Прежде чем отвечать на сами вопросы, нужно учесть, что:
  1. Не существует единого языка ассемблера. Есть два разных стандарта синтаксиса (AT&T и Intel), у каждого компилятора (MASM, GAS, NASM и прочие) свой диалект, но главное — у каждой аппаратной платформы будет свой собственный набор инструкций, а значит свой ассемблер.
  2. Программы не станут быстрее просто от того, что написаны на ассемблере. Они становятся быстрее от того, что мы экономим на сопутствующих расходах (жертвуя при этом надёжностью, безопасностью, простотой или ещё чем-то). Неэффективный алгоритм при этом всё равно останется неэффективным.
  3. Ассемблер это не совсем машинный код. Если декомилировать машинный код, не получится изначального кода на ассемблере. Подробнее об этом рассказывают здесь.
Возвращаясь к вопросу, если вам интересно низкоуровневое программирование, я бы советовал изучать C/C++ или Rust. C/C++ изучают в вузах, есть курсы, спрос на язык на рынке довольно большой. Rust это современная альтернатива C/C++, "самый любимый язык" по результатам опроса на Stackoverflow за 2021 год, но к сожалению далеко не самый популярный.
Ассемблер сам по себе это простой императивный язык, но чтобы написать на нём что-то работоспособное, требуется глубокое понимание аппаратной базы и ОС. Пишут на нём очень специфические вещи, например подпрограммы для однокристальных процессоров в микроконтроллерах. Никто уже не пишет прикладные программы на ассемблере. Даже такие низкоуровневые вещи как драйвера и операционные системы сейчас пишутся как минимум на Си.
Главный минус ассемблера как ЯП для разработки — это то, что программы на нём плохо читаются человеком, при этом статический анализ затруднён или невозможен из-за отсутствия в нём системы типов и тотальной императивности (в ассемблере нет привычных структур ЯП, есть только условные и безусловные переходы а-ля go to). Чтобы представить себе, как может выглядеть разработка на ассемблере, попробуйте решить пару простейших задач на языке Brainfuck, например на сайте codewars.
В будущем ассемблер не устареет совсем, так как не устареют процессоры, но программистов на чистом ассемблере нет уже сейчас. Изучать его стоит, но только вдобавок к более привычным в индустрии языкам, таким как C/C++ или Java.
Что-то осталось непонятно? Спроси в нашей группе в Телеграме!Перейти на t.me/jstsmentor
3 эксперта согласны
Head of the Testing Expertise. Индивидуальное обучение программированию и менторинг...  · 7 февр 2022
И Да и Нет. Зависит от того чем вы будете заниматься. Если создание нового фундаментального продукта на базе архитектуры INTEL/AMD x86_64, ARM, E2K - тогда точно да. Изучать и практиковать.
Если нет, то это изучение не обязательно, но вреда не принесёт.
1 эксперт согласен
Любой язык — это инструмент для решения конкретных задач. ассемблер - наверное самый специфичный из всех..... Читать дальше
Диванный философ, по совместительству инженер  · 9 авг 2022
Начну с того что такое вообще ассемблеры. Возможно это сразу снимет многие вопросы. Процессор не способен выполнять программы на Питоне, Java или C++. Он способен выполнять машинный код. Соответственно все остальные языки переводятся на этот машинный код так или иначе. Я несколько упрощаю ситуацию упуская моменты не принципиальные для понимания того что такое... Читать далее
Лучший
Погромист на C#  · 8 февр 2022
1. Язык очень примитивный, но это не 1 язык и абстракций в нём мало и нужно очень глубоко разбираться в том как устроен компьютер и целевой процессор. 2. Да, ибо п1 3. Карьеру построить очень сложно, ибо п4 4. Спрос на программистов на ассемблере крайне мал, ибо п2. 5. Нет 6. Немного В целом, если тебе важна производительность и эффективность программы - обрати внимание... Читать далее