Нет, это не так сложно как кажется.
Для того, чтобы понять это, разберем сначала несколько важных понятий из теории программирования.
Первое, чего может испугаться новичок в программировании - это большое кол-во команд и обозначений в языках программирования. Есть такая теорема Бёма — Якопини, если отбросить все академические сложности, и пересказать все простым языком, то суть такова:
Любой алгоритм можно построить используя 3 операции:
1. Равенство. (A = 1)
2. Условия. (Если A = 0 Тогда B = 1)
3. Цикл. (Делать до тех пор пока ...).
т.е. для составления абсолютно любой программы требуется знать всего 3 команды!
Разумеется, на это потребуется больше времени, т.к. придется заново "изобретать велосипед". Но, тем не менее, нужно понять принцип, что все сложное состоит из простого. На практике всё немного сложнее:
операций не совсем 3, и выглядят они немного по-другому. Это команды процессора. Assembler - это общее название для всех языков, в которых алгоритмы программируются напрямую при помощи команд процессоров. В ассемблере условия реализуются при помощи сравнений (CMP) и условных переходов (JE, JA, JB и т.д.). Команды ассемблера можно представить в виде "кирпичиков", т.е. простых емких выражений и операций из которых состоит любая программа.
Таким образом, ассемблер на самом деле является самым простым языком программирования, хоть программировать на нём бывает просто невозможно из-за необходимости в знаниях сложных технических нюансов взаимодействия с операционной системой и физическими устройствами. Но именно как язык теоретического программирования, где реальные физические устройства можно заменить на псевдоустройства, он самый простой.
Языки программирования условно делятся на низкоуровневые, к которым и относится ассемблер, и высокоуровневые - это C++, Java, JavaScript, PHP и все остальные популярные языки. Низкоуровневые языки связаны с командами процессора, запись которых называется машинным кодом. Высокоуровневые языки более абстрактны, они легко формулируют сложные операции, и фактически, являются надстройкой над низкоуровневым программированием - т.е. команды высокоуровнего языка преобразуются в команды ассемблера. Здесь появляется один существенный недостаток: хотя высокоуровневый язык является более удобным, у него нет прямой расшифровки на ассемблере, т.е. фактически она есть, но нигде не отображается и не используется. т.е. в итоге, любая программа преобразуется в набор машинных инструкций, но практически ни один программист не представляет в какие инструкции процессора преобразуется высокоуровневый код. Я называю это потерей иерархической совместимости. Дам определение: иерархическая совместимость - это концепция разработки сложных языковых систем, которая подразумевает наличие документированной расшифровки конструкций языка высокого уровня на языке низкого уровня. Универсального языка программирования на основе принципа иерархической совместимости с ассемблером еще не придумали, и вообще, языки программирования создаются не для того, чтобы "любой дурак" их понял, а скорее, наоборот.
Для любого программиста важно в первую очередь знать скорее алгоритмы, а не языки программирования, но об этом как-то вспоминают меньше всего. Базовые алгоритмы универсальны и могут быть записаны на любом языке программирования. Кстати, существует еще Псевдокод. Смысл в том, что если вы понимаете принцип работы алгоритма, можно записать его как угодно, хоть своими словами. Это кстати, очень удобно при разработке структуры проекта/программы.
При написании любого сложного программного продукта возникает необходимость работы с базами данных. Здесь тоже не все так просто, так как для обслуживания баз данных нужна СУБД - система управления базами данных. Языки взаимодействия с различными СУБД, как и в случае с ассемблером, называют общим словом SQL. Точнее, это язык ставший стандартом, на основе которого было несколько SQL-подобных языков. Возможно, потому что его разработкой занимались 2 крупные компании: Microsoft и Oracle. Но вот найти какие-нибудь вменяемые мануалы по данному языку программирования, и понять их, намного сложнее, в отличии от других языков. И так как он является базовым для написания алгоритмов, без него "не уедешь никуда". Когда-то отсутствие понятных мануалов остановило меня от изучения данного языка программирования. Давно я видел где-то на каком-то форуме, где отписывался один программист, который утверждал, что писал свою СУБД на C++ и ассемблере в течении 10 лет, а затем продал ее крупной компании. Не знаю, насколько это правда или нет, но смысл басни в том, что некоторые вещи о которых люди не задумываются, или считают невозможными, на самом деле могут быть важными и вполне реальными. Идея создать свою СУБД или собственный язык программирования вряд ли будет воспринята серьезно в сообществе обученных мыслить определенным образом программистов. Все ведь уже привыкли называть крокодила красным, попробуй докажи, что он зеленый!
Закончу статью картинкой. ;)