Т а павловская c c программирование на языке высокого уровня

Автор: Лиз Эгглстон Последнее обновление 23 марта 2020 года Что такое низкоуровневое программирование Языки высокого уровня, такие как JavaScript и Python, могут быть самыми популярными языками программирования сегодня. Но нет никаких аргументов в пользу того. Что эти языки выполняют большую работу для разработчика. От управления памятью до интерпретации времени выполнения. С другой стороны. Низкоуровневое программирование имеет очень мало абстракции – вы пишете код гораздо ближе к компьютеру. Так почему же вы хотите изучать низкоуровневое программирование? В этом руководстве наставник и ученик школы Холбертон ответит на все ваши вопросы о программировании низкого уровня!

Что Вам Нужно Знать:

  • Низкий уровень относится к коду, написанному непосредственно для компьютера – т. е. Машинный код и сборка

  • Является ли C языком низкого уровня? Мнения неоднозначны!

  • Почему Низкий Уровень? Понимание низкоуровневого программирования является ключевым. Если вы хотите работать в машинном обучении или Интернете вещей. Кроме того, понимание того. Что происходит под капотом, делает любого лучшего разработчика.

Познакомьтесь С Экспертами

  • Оливье-наставник в школе Холбертона, где он помогает студентам, когда у них возникают вопросы. Связанные с низкоуровневым программированием. Он также является главным архитектором программного обеспечения в FutureOn в нефтяной промышленности. В прошлом он руководил разработкой ГИС (картографических) библиотек для мобильных устройств и создавал видеоигры. Такие как Age of Conan.

  • Артур Дамм провел 7 лет в качестве частного репетитора по математике. Естественным наукам и программированию (и имел годичную стажировку по разработке Java Android). Артур выбрал Холбертонскую школу из-за доступности ISA. Прохладного кампуса Сан-Франциско и строгого учебного плана с полным стеком (который, конечно. Включает в себя низкоуровневое программирование).

    В настоящее время Артур находится на заключительном этапе специализации школы Холбертона.

Что такое низкоуровневое программирование?

Артур: В наше время низкоуровневое программирование-это любой язык, на котором вы управляете памятью. Любой язык, где управление памятью или сбор мусора выполняется за вас, а это сейчас большинство языков. Считается “высоким уровнем

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

Если вы строите здание, вы всегда начинаете с фундамента и строите на нем. Низкоуровневое развитие – это основа: если вы начинаете с высокоуровневого программирования, то не понимаете. Что происходит под ним.

Pro Tip: Сбор мусора-это когда система очищается для вас. В программировании на языке Си вы должны убирать за собой.

Примеры языков программирования низкого уровня

Артур: В старые времена Си считался языком высокого уровня. Сегодня многие инженеры могут посмеяться над этим, потому что C-это очень низкий уровень. C и C++ теперь считаются языками низкого уровня, потому что они не имеют автоматического управления памятью.

Оливье: Определение низкого уровня довольно сильно изменилось с момента зарождения информатики. Я бы не стал квалифицировать Си как язык низкого или высокого уровня, а скорее как язык-посредник. Единственным истинным низкоуровневым программированием является машинный код или сборка (asm). Сборка максимально приближена к тому, что может выполнить процессор (процессор компьютера). Поскольку это буквально текстовый перевод двоичного кода. Который понимает процессор. Например, библиотеки сжатия обычно строятся на языке Си. И очень специфические части будут строиться с использованием сборки. Но объем сборки становится все меньше. Потому что компиляторы становятся намного лучше в оптимизации.

Артур: В настоящее время я считаю Си языком низкого уровня. Конечно, это основной язык, который Холбертон использует в учебной программе низкого уровня. Поэтому для меня C-это низкий уровень. Потому что при его использовании мы должны управлять нашей собственной памятью приложения. А не языком. Это требует от нас, инженеров, полной ответственности за свои действия. Это означает, что наши ошибки будут иметь тенденцию быть катастрофическими. Но награда существенна с точки зрения эффективности и энергопотребления на любом устройстве. На котором работает наш код.

Кроме того, быть программистом на языке Си может быть очень приятно. Если вы хотите разобраться в технических деталях своей работы.

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

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

Примеры языков высокого уровня:

Артур: В первые девять месяцев Холбертонской школымы изучили два языка высокого уровня-Python и JavaScript.

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

Pro Tip: Когда вы хотите добавить новые функции в Python, это называется расширением. И они на самом деле написаны на языке Си! Для некоторых из продвинутых заданий Холбертона студенты на самом деле пишут код C, который идет под Python. А затем тестируют их вместе. Чтобы увидеть. Как он работает.

Если большинство высокоуровневых языков управляют памятью и собирают мусор за вас. То какой смысл знать низкоуровневое программирование?

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

Низкоуровневое программирование становится особенно важным в Интернете вещей (IoT) и носимых устройствах. Где эффективность потребления энергии на самом деле является самым важным соображением.

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

Оливье: Хотя существует большой толчок к тому, чтобы иметь возможность использовать язык высокого уровня. Чтобы иметь возможность писать низкоуровневые вещи. Такие как драйверы для видеокарт. Низкоуровневые языки все еще необходимы для производительности. Например, все, что связано с кодированием или декодированием и шифрованием, вероятно. Будет использовать низкоуровневое программирование. С C и, вероятно. Какой-то сборкой для использования расширенной инструкции (например. AVX, SSE и т. Д.). В принципе, все, что требует высокой производительности и тонкой настройки. Потребует немного низкоуровневого программирования.

Задания, Требующие Низкоуровневого Программирования

Оливье: Любая работа, связанная с разработкой встроенного программного обеспечения и созданием кода. Который должен работать быстро. Если вы разбираетесь в низкоуровневом программировании, то, вероятно, поймете все, что идет выше. Когда я набираю сотрудников и соискатель застревает на проблеме React, я хочу видеть. Что разработчик способен читать код и понимать. Что делает библиотека.

Кроме того, если вы хотите работать в программировании GPU с использованием “высокоуровневых” языков. Таких как CUDA или OpenCL. Вам нужно будет понимать программирование низкого уровня. В GPU (graphical process unit) все массивно параллельно, и то, как вы форматируете свою память. На самом деле так же важно. Как и сам код.

Артур: Я буду искать работу в Интернете вещей или встраиваемых системах. Моя цель-работать над интересным проектом и, конечно же. Применить свои навыки низкоуровневого программирования на языке Си.

Как выучить язык Си или низкоуровневое программирование

Должны ли вы изучать низкоуровневое программирование, прежде чем изучать язык высокого уровня, такой как Python. JavaScript или Java?

Артур: Ответ на этот вопрос будет зависеть от того, каким инженером вы хотите стать. Если вы хотите оптимизировать кратчайшее время обучения, вам следует проигнорировать низкий уровень. Перейти прямо к JavaScript или Python и просто практиковать эту вещь и стать достаточно хорошим. Чтобы начать работать.

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

Оливье: Если вы хотите улучшить свои навыки разработчика, вам нужно понять, как работает компьютер. Даже если детали скрыты от вас. Если вы сначала научитесь программировать на языке Си. То позже вам будет гораздо легче работать с языками высокого уровня.

Вам нужно знать математику для низкоуровневого программирования?

Артур: Информатика распадается на числа, поэтому мы не можем уйти от математики в низкоуровневом программировании. Вы должны познакомиться с продвинутой алгеброй. Вам не понадобится математика на уровне исчисления, но вам понадобится, по крайней мере. Полная математика средней школы. Когда вы имеете дело с определенными проблемами в качестве инженера низкого уровня.

Низкоуровневое программирование в школе Холбертона

Артур: Наши первые девять месяцев (так называемые Основы)-это полная учебная программа. То есть мы изучаем языки низкого и высокого уровня. Основы-это отличное общее введение во все уровни стека, то есть: низкоуровневые, высокоуровневые, devops. Базы данных и портфельные проекты. Мы учимся почти ровно три месяца программированию на языке Си. А затем в Специализации мы возвращаемся к тому, на чем остановились в этой части стопки Фундаментов. В моем случае мы продолжили программирование технических систем на низкоуровневом языке Си. Таким образом, мы учимся писать наш код так, как пишется для Linux. Которая считается стандартной операционной системой инженерного мира.

Оливье: Фундамент С важен, потому что он дает студентам Холбертона основу для развития. Если вы знаете С, есть большая вероятность, что вы сможете понять любой императивный язык, брошенный вам. В качестве плюса вы поймете. Как работает память. 9-месячная специализация Holberton School-это в основном сжатый kickstarter. Который поможет вам быстрее стать лучше в той области компьютерных наук. Которая вам нравится.

Пример низкоуровневого проекта программирования

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

В Холбертоне, хотя у нас нет инструкторов, обучающих нас на регулярной основе. Нам поручают проекты с автоматизированным тестированием. И это один из проектов. Затем, позже, у нас будут собственные портфолио проектов, где мы сможем выбрать то, что мы хотели бы создать.

Для нашей еженедельной практики алгоритмов мы недавно изучили очень интересный алгоритм сопоставления паттернов. Называемый KMP. Поиск подстрок Кнута–Морриса–Пратта. Это действительно технически, но и удивительно доступно. Я всегда получаю небольшой умственный кайф, когда впервые изучаю новый алгоритм и действительно начинаю его понимать.

Как кто-то может начать работу в низкоуровневом программировании?

Оливье: Нам повезло, что мы живем в такое время, когда информация повсюду. Я рекомендую книгу под названием

Мой совет каждому студенту-читать код! Вначале это трудно, но вы станете лучше. Мои основы в C очень помогли мне за эти годы.

Узнайте больше и прочитайте Отчет о курсе школы Холбертон. Эта статья была подготовлена командой курсовых отчетов в партнерстве с Holberton School.