fbpx

Каталог статей

Каталог статей для размещения статей информационного характера

Как выучить

Почему вам не стоит изучать язык Си

Почему вам не стоит изучать язык Си

Знание языка программирования C часто преподносится как признак “настоящего” программиста. Если вы не знаете этот язык, то вы не разбираетесь в программировании, или так гласит мудрость. Многим начинающим программистам советуют привратники старшие разработчики изучать язык Си, чтобы повысить свои навыки и перейти на новый уровень. Именно об этом, о повышении уровня, и идет речь в этом блоге, поэтому давайте обсудим, почему изучение языка C может быть пустой тратой вашего времени.

В чем смысл этой статьи?

Этот блог посвящен помощи начинающим программистам в повышении их уровня, преодолевая разрыв между “Программированием 101” и продвинутыми уровнями программной инженерии. Между ними есть масса ступеней, и является ли изучение этого эзотерического языка одной из них?

Обычная мудрость говорит “да”, и если вы хотите убедить себя выучить язык программирования Си, далеко искать не нужно. Множество постов в блогах посвящены тому, чтобы посоветовать вам выучить язык Си, много вопросов задается на форумах в Интернете “стоит ли мне учить язык Си”, и большинство ответов – однозначное “да”.

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

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

Миф №1 – Это лингва франка языков программирования

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

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

Точно так же изучение языка C не сделает вас лучшим программистом JavaScript, как изучение Perl не сделает вас лучшим программистом PHP. Есть ценность в том, чтобы изучить все тонкости нового языка и увидеть, как это сообщество решает общие проблемы. Однако ценность заключается не в самом языке, а в навыках решения проблем, которые вы тренируете.

Сделает ли изучение языка C вас лучшим программистом в вашей повседневной жизни?

Как я уже неоднократно говорил, изучение нового языка сделает вас лучшим программистом и является прекрасным подходом к повышению уровня ваших навыков. Но давайте немного подумаем о том, какой язык изучать, чтобы оптимизировать свое время, а не тянуться за старой копией K&R C, как вам советовали все в интернете.

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

Язык другой парадигмы

  1. Язык, относящийся к предпочитаемой вами области.
  2. Язык другой парадигмы означает, что если вы изучали объектно-ориентированный язык программирования, то теперь вам следует изучить функциональный язык программирования. А еще лучше – изучить концепции функционального программирования в контексте вашего исходного языка.

Многие языки программирования имеют как ООП, так и ФП, и вы можете изучить основы обоих языков на одном языке. Python и JavaScript являются отличными примерами этого. Даже современные C# и Java поддерживают многие возможности FP. Если вы сможете освоить обе парадигмы в своем основном языке, вы сможете действительно сделать много интересного.

Изучение языка, соответствующего предпочитаемой области, означает, что нужно подумать о том, каким видом программирования вы хотите заниматься, и выучить язык, преобладающий в этой области. Если вы занимаетесь наукой о данных и уже знаете Python, изучайте R. Если вам нравится веб-разработка и вы изучили JavaScript, попробуйте язык back-end (PHP, Ruby, Python). Если вы хотите заняться встраиваемым программированием, выучите C.

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

Миф №2 – Вы узнаете, как работают компьютеры

Это, пожалуй, самая упоминаемая причина, которую приводят привратники для изучения языка программирования Си. “Язык C позволяет приблизиться к металлу настолько, насколько это возможно без изучения ассемблера”, – сказал я в одном из комментариев, – или “изучая язык C, вы действительно узнаете об архитектуре компьютера”.

Это просто неправда. Во-первых, если важно “как можно ближе подойти к металлу”, то почему тогда не так много людей выступают за изучение ассемблера, как за изучение языка Си? Разве это не было бы лучше по определению? На самом деле, вы, конечно, узнаете много нового о том, как работают компьютеры, если изучите ассемблер, так почему же Си является волшебным языком для изучения “архитектуры компьютера”?

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

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

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

Подавляющее большинство специалистов, пропагандирующих C как язык, который необходимо знать, советуют изучить язык в объеме, достаточном для работы с указателями. Я думаю, что ценность изучения указателей на самом деле заключается в изучении управления памятью. Для большинства из нас можно узнать все, что вам действительно нужно знать об управлении памятью, за полтора-два дня изучения статей в Википедии, видеороликов на YouTube и сообщений в блогах на эту тему. Остальное вы сможете узнать по мере возникновения проблем.

Лучший способ повышения уровня

Как я уже неоднократно говорил, изучение нового языка сделает вас лучшим программистом и является прекрасным подходом к повышению уровня ваших навыков. Но давайте немного подумаем о том, какой язык изучать, чтобы оптимизировать свое время, а не тянуться за старой копией K&R C, как вам советовали все в интернете.

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

Вместо того чтобы изучать “как работают компьютеры”, я считаю, что полезнее изучать различные виды системного администрирования. Например, начинающий веб-разработчик должен иметь хотя бы базовые навыки администрирования Linux-сервера, инженер по обработке данных найдет пользу в изучении работы с базами данных, и практически каждому пригодятся базовые навыки администрирования облачных вычислений.

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

Миф № 3 – Вы будете лучше отлаживать программы

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

Например, интерпретатор Python написан на C. Допустим, вы пишете CRM своей компании на Django, и чем больше и больше пользователей его используют, тем сложнее он становится. В конце концов, сложность и использование приведут к странному поведению, которое заставит вас рвать на себе волосы, пытаясь понять.

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

Лучший способ повышения уровня

Как я уже неоднократно говорил, изучение нового языка сделает вас лучшим программистом и является прекрасным подходом к повышению уровня ваших навыков. Но давайте немного подумаем о том, какой язык изучать, чтобы оптимизировать свое время, а не тянуться за старой копией K&R C, как вам советовали все в интернете.

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

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

Миф №4 – Это просто сделает вас лучше

Худшие привратники любят давать такой совет: “Изучение языка C просто сделает вас лучшим программистом”. “Как будто изучение языка C – это пубертатный период программирования и путь к настоящей 10-кратной взрослости.

Опять же, это явный абсурд. Если вы PHP-разработчик и ваши веб-приложения небезопасны, знание языка C не изменит этого. Если ваш любимый код – это обработка данных в блокнотах Jupyter, знание языка C не сделает вас лучше в этом.

Время от времени я вижу, как кто-то упоминает, что язык C – лучший способ изучения структур данных и алгоритмов. Я думаю, что это убеждение проистекает из того факта, что большинство из этих людей, вероятно, изучали DS&A на C, потому что так преподавали в их университете.

Если знание этих вещей настолько важно и не зависит от языка, вы можете изучать их на любом языке.

Лучший способ повышения уровня

Как я уже неоднократно говорил, изучение нового языка сделает вас лучшим программистом и является прекрасным подходом к повышению уровня ваших навыков. Но давайте немного подумаем о том, какой язык изучать, чтобы оптимизировать свое время, а не тянуться за старой копией K&R C, как вам советовали все в интернете.

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

Когда вам следует изучать C

Эта статья граничит со святотатством, и поэтому люди, скорее всего, читают то, о чем я не говорю. Позвольте мне прояснить, я не ругаю язык C. Язык C полезен и мощный; он играет важную роль в истории вычислительной техники.

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

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

Вы пишете встроенное программное обеспечение, и лучший способ сделать это – на C

  • Вы пишете драйвер устройства, и лучше всего это делать на C.
  • Вы посещаете занятия в школе, которые требуют изучения языка C
  • Вы участвуете в проекте, который написан на C
  • Вы просто хотите выучить язык C
  • Если вы хотите выучить язык C не по какой-либо другой причине, а просто так, то сделайте это. Увлеченность и интерес – это то, что заставит вас возвращаться и пробовать снова и снова. Именно это приводит к мастерству.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *