Важность C при обучении программированию

Рассказывает Афзал Ахмед Зишан


Введение

Программирование — процесс создания разработчиком софта, который бы запускался на компьютере и решал конечное количество проблем. Люди занимались программированием с тех пор, как были изобретены компьютеры. Сначала это делалось с помощью вакуумных трубок, а после изобретения транзисторов — с помощью бинарных кодов. Первые низкоуровневые языки программирования появились одновременно с Colossus — первым программируемым компьютером.

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

OС и программирование

Сначала все компьютеры были одинаковыми и использовали одинаковую архитектуру, но со временем появилась необходимость в операционной системе, которая бы взяла на себя управление базовыми операциями над «железом» компьютеров. Так появились несколько ОС. Деннис Ритчи был человеком, который переписал одну из них — Unix — с ассемблера на С. Для того, чтобы «обучать» операционные системы, необходим был язык программирования, который говорил бы им, что делать. Таким образом, программирование — это процесс создания набора команд, которые говорят, какие операции должна исполнять ОС.

C — низкоуровневый язык программирования, который поддерживает прямое управление «железом». Он был разработан Деннисом Ритчи в 1973-ем году в AT&T Labs. С помощью этого языка вы можете с легкостью управлять памятью, процессором, регистрами и даже подключенными устройствами! Ассемблер также был одним из первых языков низкоуровнего программирования, изобретенных после бинарных кодов, но он был менее понятен человеку, чем C.

C

Язык C также известен как отец современного программирования. Хоть кроме него и существовали языки вроде BASIC, С имел гораздо больше преимуществ, чем его конкуренты.

С — язык общего назначения. В нем нет классов, нет интерфейсов. Зато в нем есть гораздо более полезные и мощные инструменты — например, указатели и многие другие, позволющие манипулировать памятью прямо во время исполнения программы. Также С использовался как «строительный материал» для других, более высокоуровневых языков: Java, D, C#. C++ и Objective-C после компиляции превращаются в код на C, который затем компилируется в машинный код ради более быстрого исполнения.

Почему больше не пишут хорошего софта?

Новое поколение разработчиков занято привлечением внимания аудитории, а особенно девушек, а не своей основной задачей — построением лучшего цифрового мира. Я видел слишком много вопросов вроде «Почему я получаю ошибку null?». Серьезно? Человек, задавший такой вопрос, не понимает самой сути программирования, не желает самостоятельно разобраться в проблеме. Он всего лишь услышал где-то, что Билл Гейтс — самый богатый человек на земле, и решил, что он может стать таким же. Все, что ему нужно — это всего лишь создавать софт, и скоро он будет миллиардером! Такой менталитет современных программистов не позволяет им создавать хорошие программы.

Зачем учить С?

Навык программирования на С очень важен, и С должен преподаваться в университетах вместо С++. Пусть С++ и поддерживает ООП, С — это тот язык, который должны знать 90% программистов. 10% могут полагаться на С++ или любой иной высокоуровневый ЯП. За свою программистскую карьеру я учил C#, Java, Visual Basic, ASP.NET и многие другие высокоуровневые языки, и всегда были люди, которые жаловались на их скорость. Знаете, что им всегда отвечали? Учите С или С++, так как они компилируются в машинный код, а значит, выполняются с крайне большой скоростью!

Проблемы на уровне университета

В университете, где я учусь, преподают только С++ и только на бумаге. По мне, так учить программированию без практики — это значит убить саму концепцию программирования. И хотя в моем университете это происходит из-за недостатка хороших кадров, новые программисты ВСЕГДА должны быть обучены навыкам программирования. Помню себя во времена изучения мною HTML — код ASP.NET для меня тогда выглядел ужасно запутанно.

Побочные эффекты незнания низкоуровневых ЯП

Большинство встраиваемых устройств и микроконтроллеров требуют понимания низкоуровневого программирования и его концепций: управления памятью, указателей и многих других. Современный разработчик (который пишет только приложения на .NET и для Android) никогда не сможет программировать такие устройства. Кроме того, существует такая штука, как Интернет Вещей. И хотя она может программироваться на .NET, но сами соединенные устройства должны использовать низкоуровневый язык для получения лучшего результата.

Отсутствие поддержки

Для низкоуровневых языков вроде ассемблера или С нет нормальной поддержки. Visual Studio (лучшая IDE, по моему мнению) не поддерживает проекты на ассемблере (хотя MASM все же присутствует). Из-за этого недоразумения большинство крупных колледжей не учат студентов низкоуровневым языкам, которые объясняют концепцию программирования на самом деле. Это убивает любое желание ученика лучше понять архитектуру компьютера и писать софт под нее, вместо этого они пишут приложения для себя, а не для публичного использования.

Сделай или Сдохни; С или Слепота

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

Изучение С онлайн

Я долгое время искал компилятор и хороший справочник по С и нашел «Справочник по стандартной библиотеке С» и прекрасный ресурс, где можно исполнять код на С онлайн.

Перевод статьи «New developers and the importance of C»