Найти в Дзене
Цифрокритицизм

Строгий учитель - Си, скрывающий боль

В продолжение нашей предыдущей публикации хочется отдельно уделить внимание (а заодно начать выполнять наше обещание, частично пояснив необходимость пройти такой путь) роли языка программирования Си в обучении. Язык Си - процедурный компилируемый язык программирования со статической типизацией. Он является основой для многих операционных систем, драйверов, компиляторов и огромной кучи низкоуровневого ПО. Низкоуровневого, разумеется, для представления обычного пользователя. Для машины (компьютера) Си - непонятная высокоуровневая штуковина. Прекрасно и то, что наиболее популярные компиляторы языка Си написаны на Си (Р - Рекурсия. Шутка. Если Вы не знаете как так вышло, то предлагаем подумать, а не бежать гуглить).
Си красив, элегантен, а еще очень строг, что делает его идеальным. Жаль, только палкой по рукам не бьет. В отличие от различных модных языков, которым Вас готовы научить за 3 дня на курсах за 150 тысяч рублей, Си дает куда больший контроль разработчику, но и требует большей ак

В продолжение нашей предыдущей публикации хочется отдельно уделить внимание (а заодно начать выполнять наше обещание, частично пояснив необходимость пройти такой путь) роли языка программирования Си в обучении. Язык Си - процедурный компилируемый язык программирования со статической типизацией. Он является основой для многих операционных систем, драйверов, компиляторов и огромной кучи низкоуровневого ПО. Низкоуровневого, разумеется, для представления обычного пользователя. Для машины (компьютера) Си - непонятная высокоуровневая штуковина. Прекрасно и то, что наиболее популярные компиляторы языка Си написаны на Си (Р - Рекурсия. Шутка. Если Вы не знаете как так вышло, то предлагаем подумать, а не бежать гуглить).

Си красив, элегантен, а еще очень строг, что делает его идеальным. Жаль, только палкой по рукам не бьет. В отличие от различных модных языков, которым Вас готовы научить за 3 дня на курсах за 150 тысяч рублей, Си дает куда больший контроль разработчику, но и требует большей аккуратности, вдумчивости. Так, например, изучая Python, Вы никогда не задумаетесь о том, что происходит при использовании переменных, списков, словарей, как происходит инициализация, аллокация памяти, ее освобождение - за Вас это сделает интерпретатор Python. Но не зная о таких, казалось бы простых вещах, не появится и привычки думать об оптимальности своего кода. Почти наверняка все, кто пытался коснуться отрасли IT, слышал слово "говнокод" (к счастью, оно не заимствовано, а НАШЕ, РУССКОЕ, КАК "БЕРЕЗОНЬКА"). Понятие "говнокод" довольно расплывчатое, но как правило, применяется к плохо читаемому другим человеком, не автором, коду (множество переменных с одинаковым названием, не отражающем сути, в разных областях видимости; длинные многоуровневые выражения, на осознание исполнение результата которых потребуется потратить время; и тд). А что насчет оптимальности и эффективности? Программная реализация алгоритма должна иметь минимально возможную сложность для решения задачи за минимально возможное время с минимальными затратами ресурсов (памяти и вычислений) машины. Это вдалбливается преподавателями и тренируется в процессе обучения в вузе. Чем более глубоким и разноуровневым пониманием процессов и устройства вычислительной техники Вы обладаете, тем больше у Вас возможностей и привычек делать "как надо". И это один из многочисленных реальных примеров, демонстрирующих качественное отличие курсов по "успешному успеху" от фундаментальных знаний.

В силу отсутствия в Си "модных наворотов", вроде "garbage collector" ("сборщик мусора") или упрощенной работы с указателями, итераторами, компилятор Си с большой радостью напихает Вам ошибок "segmentation fault" и "buffer overflow", заставив переписывать все, что Вы наворотили 😏

Нельзя не упомянуть про объективное подобие "базового" синтаксиса Си и С++, что позволяет учащемуся уделить внимание только освоению самой объектно-ориентированной парадигмы, а также лучше понять за счет чего С++ этой самой парадигме соответствует. Следует отметить, что говоря об "изучении С++" мы не имеем в виду углубленное освоение С++, вне рамок необходимого минимума. Только учебный формат, под который, как правило, отводится 1-2 семестра.

Больше контента:
Телеграм