Низкоуровневое или Высокоуровневое программирование

Я, вот, иногда задаюсь вопросом, а не углубиться ли мне в изучение и практику программирования на системных низкоуровневых языках и в их технологии. Мне эта тема очень интересна, так как я начинал изучать программирование с языка ассемблер, а еще всегда интересовался unix-подобными ОС, но никогда их серьёзно не использовал, просто что-то пробовал в них. 

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

И ты давно уже забыл, как работают системные-события и их обработчики, ты просто вешаешь, например, на событие клика по кнопке обработчик одним унарным оператором «+» и всё, после радуешься функциональности своего обработчика. Ты забыл, что за этим всем стоят низкоуровневые коды главных циклов-while с колбеками, с входящими сообщениями от API ОС, а еще ниже уровнем все это основано на прерываниях и работе напрямую с памятью и процессором, а еще далее ниже уровнем, все это лежит на железе где есть плата (печатная или материнская) микрочипы, конденсаторы и т.д. И сегодня чем ниже уровень к железу, тем меньше любопытства к этому процессу и специализации. Это печально. 

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

Кстати, такой ответ мне дали в комментариях к одной статье в журнале «Хакер», там кто-то писал статью в unix-разделе и что-то в ней было про очень «низкий уровень», вроде какой-то хак для драйверов, с какими-то вытекающими полезностями. Я так пробежался, почитал эту статью примерно не много понял, что там написано на 30%. Меня задевают в хорошем смысле такие посты, я вижу, что у некоторых людей есть стремление, сделать что-то сложное, что большинство не делает, так как ленятся и не интересуются такими темами. Комментариев там не было вообще, т.е. людям не интересно, я первый написал комент о том, что никто не хочет в это вникать, никто не хочет заниматься импортозамещением, создавать что-то новое, все хотят быстрой отдачи и сделать все попроще, выбрать простой язык и использовать его себе во благо… И мне кто-то вполне грамотно ответил, что людям нужна быстрая отдача от кода и реальный финансовый доход от их продукта, а низкоуровневые темы должно достойно финансировать государство, тогда и люди здесь появятся, потому что никто не хочет изучать кучу литературы, различных мануалов по железу и ОС, а в итоге работы для них не будет, так как компаний у нас в стране специализирующихся на этом или требующих таких знаний нет, а если и есть, то платят там копейки.

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

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

Простой пример. Всегда можно рассматривать медицину, особенно высокотехнологичную. Вот наши правители и СМИ говорят: мы со всем сами разберемся, нам никто не нужен, и если вдруг что, то всем покажем «Кузькину мать». Так могут трактовать, только те, у кого все «схвачено», либо кому нечего терять. А простому нормальному человеку от такой политики терять конечно есть что. Например, человеку необходима высокотехнологичная операция. Ну и что у нас есть из своего производства, чтобы обеспечить высокий результат от операции? Оборудование? Материалы? Импланты и т.д,? что есть у нас? Обычный человек хочет, чтобы его обеспечили лучшим, что есть в мире для этой операции, ведь он хочет остаток своих дней прожить как нормальный человек, а не как инвалид. Ему нужно будет еще работать, обеспечивать своих детей, родителей, в конце концов он хочет быть счастлив. Поэтому нужно сотрудничать. И брать лучшее у друг друга.

Жесткой военной силой можно победить только в тактике, но если мозгов не хватает (в широком смысле), то стратегически проиграешь. 

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

Но все-таки без высокоуровневого кода (ООП) сейчас никуда, так как вокруг него написано уже множество фреймворков и библиотек, этот код намного легче расширять, внедрять, разрабатывать архитектуру приложения, распределять обязанности между разработчиками, и все это дело отлаживать на много легче, чем код низкоуровневый. А еще это будет намного дешевле и быстрее по времени реализации, чем если бы вы взялись писать одно и то же приложение, но на низкоуровневом языке (языках). И не факт, что программа, написанная на низкоуровневом языке, работала бы быстрее, чем написанная на высокоуровневом языке, так как для того, чтобы написать большое приложение на низкоуровневом языке, к этому коду необходимо будет еще написать вокруг большой объем инфраструктурного кода, чтобы код этого приложения был расширяемым и легко сопровождаемым. Если это не так, и код приложения написан, все-таки, на низкоуровневом языке, написан в стиле «лапша» и с большим количеством «костылей», тогда это программа (приложение) сможет работать быстрее, но сопровождать и дорабатывать код такого приложения будет невозможно. 

Зато софт, приближенный к железу, необходимо писать на низкоуровневых языках, а уж как его писать, все зависит от задачи и цели.

Поэтому для каждой задачи необходим свой язык, как, кстати, и ОС.

Выбирать Вам!


1 Comment

Post Reply