[Перевод] О пользе изучения языков семейства С

e99871f7bba24c4aa8063c268311c72c.jpg

Если вы задумались о том, чтобы освоить первый в своей жизни язык программирования, то вам придётся поломать голову над тем, а что же выбрать из многообразия существующих языков. В мире веб-разработки царит JavaScript, во многих ВУЗах и школах предлагают изучать Python. Если поспрашивать на форумах, то вам вывалят кучу вариантов, включая Haskell, Scala и Erlang. Богатство выбора хорошо почти в любом деле, и обилие языков программирования свидетельствует о том, что это направление научно-прикладной деятельности продолжает развиваться. Одному человеку уже не под силу изучить все существующие языки, поэтому приходится решать какой же язык лучше всего начать осваивать. Зачастую изучают то, что принято в конкретной компании или сегменте рынка. Но если вы только собираетесь сделать первые шаги на ниве программирования, то можно порекомендовать начать с одного из языков семейства С. Это будет наиболее дальновидным выбором, который поможет вам в карьере. Возможно, вы не станете ежедневно писать на этом языке, или не будете изучать его очень глубоко. Но если вы хотите, чтобы к вам относились как к серьёзному разработчику, то вам обязательно нужно владеть одним из языков семейства С.

Что за «семейство С»?


Ответ на этот вопрос зависит от того, кого вы спрашиваете. Разработчики любят только одну вещь больше, чем споры о происхождении и взаимном влиянии языков программирования, — спор о том, какой язык лучше. Но вне зависимости от этого существует общепринятое мнение, что к семейству С относятся сам С, С++, C#, Objective-C и Java.

В качестве очень грубого определения можно сказать, что язык относится к семейству С, если в нём для выделения функциональных блоков используются фигурные скобки {}. Многие языки этого семейства (но не все) являются строго типизированными. Большинство из самых популярных языков являются объектно-ориентированными (С++, С#, Java)однако это не касается самого C. Немало распространённых языков, не относящихся к семейству С, испытало на себе его влияние: Python, Perl, PHP, Ruby и т.д. Однако оценки степени и важности этого влияния сильно различаются. Например, в JavaScript используется синтаксис по типу С, но если копнуть глубже, то эти языки сильно отличаются друг от друга.

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

Латынь не мертва, она просто отдыхает


На всякий случай уточним, что не нужно изучать все языки данного семейства, достаточно ограничиться каким-то одним. Конкретный выбор зависит от сложившихся условий в вашей компании. Ну или от того, чем именно в сфере разработки вы планируете заниматься в будущем. Если вы работаете с продуктами Microsoft, то есть смысл выбрать C#. Если разрабатываете приложения под Android, изучайте Java. Если создаёте встроенные системы или что-то подобное, то наиболее полезным вариантом будет старый добрый С. Если вы работаете в какой-то другой сфере, то возьмитесь за С++.

Языки семейства С обладают очень удобным свойством: если вы изучили один из них, то остальные «идут» гораздо легче. Сегодня никто не говорит на латыни, но её всё ещё полезно изучать, поскольку она облегчает освоение итальянского, испанского и французского языков. Освоив один из С-языков вы не станете экспертом в остальных языках семейства, но кривая обучаемости станет менее пологой. Можно с уверенностью утверждать, что если вы знаете C#, то вряд ли испытаете затруднения с чтением листинга на Java. Конечно, чтобы начать на нём писать, вам придётся изучить синтаксис Java, но это займёт дни, — в крайнем случае, недели, —, а не месяцы. Разумеется, чтобы виртуозно программировать на каком-либо языке, придётся потратить на изучение и практику куда больше времени.

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

Ваша личная подушка безопасности


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

Если же вы действительно хотите сделать программирование своей профессией, то лучше заранее ознакомьтесь со списком языков, наиболее востребованных работодателями. В рейтинге TIOBE первые четыре языка относятся к семейству С, а почти все остальные из Топ 10 испытали на себе влияние С. Вам больше по душе рейтинг PYPL? В его Топ 10 половина языков также относится к семейству С. Можно ставить под сомнение релевантность любого рейтинга, но если собрать их все вместе, то можно достаточно точно оценить востребованность на рынке специалистов в тех или иных языках. Конечно, встречаются работодатели, которые не настаивают на том, чтобы вы знали именно тот язык, который им нужен, но любой бизнесмен заинтересован в том, чтобы новые сотрудники как можно быстрее могли приступить к выполнению своих обязанностей. В данном случае — чтобы кривая обучаемости была как можно круче. А знание языка семейства С, как было сказано выше, в этом очень помогает.

Даже если вы сам себе работодатель, умение писать на С-языке может оказаться очень полезным, если вам вдруг придётся искать работу. Возможно, вы обожаете Haskell и потратили годы, совершенствуясь в этом языке, но в жизни всякое бывает, и владение одним из С-языков с большей вероятностью поможет вам трудоустроиться. В противном случае вам придётся много объяснять на собеседованиях, почему вы никогда не изучали С++ или Java.

Программируя хорошие привычки


Скорее всего, вам придётся выбирать язык для изучения исходя из того, какие проблемы вы хотите решить. Или вам предложат тот или иной вариант в компании, где вы работаете. Не менее важным критерием может быть и «актуальность» того или иного языка. Несомненно, круто быть одним из первых освоивших новый язык программирования, о котором говорят на каждом форуме углу. Если вам повезёт, то этот новый язык станет популярным и вы сможете снять «сливки».

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

© Habrahabr.ru