[Перевод] За 25 лет я выучил 30 языков программирования. Хочу поделиться своим опытом
Привет, Хабр! Перевели для вас статью программиста-самоучки, в арсенале которого — три десятка языков программирования. Надеемся, она вдохновит вас поделиться собственными историями становления в кодинге не меньше, чем нас в beeline cloud. Приятного чтения!
Всё началось в далёком 1997 году. С тех пор прошло более 25 лет. Свои первые программы я писал еще под ОС Windows 95 и Windows 98. На тот момент мне было около 12 лет — как раз тот возраст, в котором многие из моего поколения начинали знакомство с программированием. Первым моим языком был Logo, используемый в MicroWorlds от LCSI (Logo Computer Systems Inc). Я получил эту программу от родителей в подарок.
Исчерпав возможности Logo в ограниченной среде MicroWorlds, я перешел на Visual Basic. По очень простой причине — он был мне понятен и к тому же доступен прямо в Microsoft Office. Visual Basic 6 стал первым «настоящим» языком программирования, с которым я познакомился.
Unsplash / Paul Esch-Laurent
Первые шаги в веб-разработке
Поскольку интернет в конце 90-х был одной из новейших технологий, программирование под веб стремился освоить каждый. Вначале я приобрел копию Sierra Web Artist для реализации своего собственного веб-сайта. Несмотря на то, что прежде мне доводилось работать с HTML 3, только с HTML 4 версии я смог наконец создавать достаточно сложные веб-страницы. На тусовке в локальной сети (тогда это было нечто) один парень втянул меня в изучение CSS. А еще меня интересовал JavaScript — не столько как язык, сколько из-за возможностей, которые он предоставлял для создания веб-страниц.
Как и многим людям того времени, мне приходилось прилагать значительные усилия, чтобы код JavaScript работал как в Internet Explorer 4, так и в Netscape Navigator 4. Моим личным предпочтением всегда был Navigator. Возможно, именно поэтому я сейчас пользуюсь в основном Firefox. На мой взгляд, это лучший браузер, и, кроме того, он порой напоминает мне тот самый Netscape Navigator.
Dreamweaver от Macromedia была идеальным решением для создания веб-приложений, а профессионалы использовали версию Dreamweaver UltraDev.
Серверная часть на ASP и PHP
К первому серьезному языку программирования вы, как правило, привязываетесь на долгое время. Когда я только начинал, всё казалось чересчур новым и непонятным. Небольшим утешением для меня было знание хотя бы одного языка, например, Visual Basic. Вот почему мой первый серверный код был написан на VB6 с Microsoft ASP на IIS. Поскольку в то время подобная технология была слишком дорогой, я поставил перед собой задачу изучить PHP.
Причина не только в моем интересе к веб-разработке, но и в том, что я познакомился с дистрибутивом SUSE Linux 7.2, и он мне очень понравился. Примерно в 2001 году я углубился в Linux. Настолько, что SUSE стала моей повседневной платформой. PHP довольно легко изучить, если вы пришли к нему из мира Visual Basic. Второй язык не настолько сложен для освоения, как первый, учитывая знание типов данных и основ программирования. Тем не менее изучать его мне было весьма непросто. Возможно, потому что мне было всего 17 лет.
Вы можете задать мне резонный вопрос: какой еще PHP, если чуть выше ты писал про JavaScript? Не забывайте, что поначалу JavaScript был чрезвычайно ограниченным, мучительно медленным и работал только в браузерах. Это был примитивный скриптовый язык, призванный сделать сайты более интерактивными и интересными. В то время я попросту не мог относиться к нему как к серьезному языку программирования.
Создание веб-приложений, десктопного и серверного кода в Visual Studio
Образование помогло мне освоить C, C++ и C#
Первую работу я получил тогда же, в 17 лет, благодаря системе дуального образования в Германии. В 2002 году в мире произошло два важных события: Microsoft выпустила платформу .NET и рекомендовала перейти с Visual Basic на C#. В программу моего профессионального образования входили C и C++. Не современный C, а классический C без каких-либо строковых библиотек и других полезных вещей, присутствующих сегодня в C и C++.
Пропустить этот учебный курс я при всем желании не мог. Он был чертовски сложен, и поначалу я буквально ненавидел C и C++. Платформа .NET, C#, C и C++ заставили меня почувствовать, что я не имею абсолютно никакого представления о программировании. Я ощущал себя полным идиотом, делающим свои первые неуклюжие шаги. Однако молодости не свойственно столько сомнений, сколько их приносит зрелость. Это мне очень помогло. Я с головой нырнул в C#, C и C++. Я писал по-настоящему отвратительный код, и это сходило мне с рук.
Borland C++ 2.0 для DOS привел меня к программированию на C — Фууу…
Что заставило меня по-настоящему полюбить C, так это Linux. В Windows C выглядит несколько бесполезным, поскольку C# зачастую оказывается гораздо удобнее. Однако в Linux C и C++ чувствуют себя как дома. Чтобы научиться правильно применять C и C++ для решения своих задач, мне потребовалось больше 5 лет.
После С всё кажется знакомым
Когда я в какой-то мере освоил язык C, все остальные языки стали казаться мне одинаковыми. В основном потому, что они были написаны или на C, или на C++. Например, тот же PHP написан на C. Большинство системных библиотек Windows и Linux также написаны на C. Фреймворк .NET написан на C. Всё на свете написано на C.
После C я смог быстро освоить массу языков программирования. ActionScript для Flash, AppleScript для Mac и даже немножко Delphi для одного проекта. Выучил WML и WMLScript, когда WAP был актуальной темой для Nokia 7110.
Objective-C в сочетании с первыми версиями Xcode от Apple стал первым языком, изучение которого действительно вызвало у меня трудности. Честно говоря, я так и не подружился с ним и до сих пор предпочитаю им не пользоваться. Я был в восторге, когда Apple выпустила Swift и SwiftUI, так как никогда не понимал Storyboard — механизм разработки пользовательского интерфейса.
Мой личный топ-10 языков на сегодняшний день: Swift, Go, C, JavaScript, C++, CMake, SQL, Java, C# и Scratch.Scratch в большей степени потому, что он отлично подходит для обучения детей программированию.
Считаю, что хорошо организованная личная библиотека книг по программированию будет весьма полезна
Как я изучал языки программирования
В начале моего обучения программированию многое постигалось методом проб и ошибок. Оглядываясь назад, можно сказать, что их было слишком много. Начинать с теории и чтения книг — не мой метод. Я был и остаюсь самоучкой. Лично для меня лучший вариант — это сочетание теории и практики. Безусловно, я не раз пользовался учебной литературой и горячо люблю ее. Книги дают структурированный подход к обучению, но они не могут заменить практических навыков.
Я купил себе две книги по Go, несмотря на то, что выучил его за 2–3 дня. Они помогли мне понять параллелизм, основные принципы и архитектурные решения языка. Что касается JavaScript, по сегодняшний день я не читал ни одной книги, лишь справочные руководства на веб-сайтах. Но это потому, что мы с JavaScript росли вместе.
Для таких самоучек, как я, работать руками и следовать книгам — самый быстрый путь к изучению языка. Подчеркну, что процесс обучения зависит от опыта работы в качестве инженера-программиста.
Знания, полезные при программировании
Язык программирования — просто инструмент, при помощи которого разрабатываются приложения для компьютеров и операционных систем. Знание архитектуры компьютера, его устройства, принципов работы сети (в основном TCP/IP, IPv4, IPv6, HTTP) и умение отследить HTTP-запросы с помощью Wireshark на уровне пакетов поможет понять поставленную задачу.
Умение читать документацию и справочные руководства также очень важно. Я писал программы для Linux, Windows, BSD, Macintosh System 6–9, macOS, Pocket PC, Windows Mobile, PalmOS, iOS, iPadOS, tvOS, watchOS, Android, Tizen TV, OpenWRT, Arduino, ARM Mbed и других ОС. Знание того, как операционные системы работают «под капотом», поможет вам понять их парадигмы и то, что на самом деле делает ваш код.
Написание системного демона с сетевыми функциями на C, Rust или Go в Linux поможет многое понять о компьютерах и сетях. Для меня эти знания оказались самыми полезными из всех, которые я когда-либо получал. Причина проста: сегодня почти всё на Linux или BSD использует сетевые ресурсы. Также, как и iPhone, телевизор Samsung или маршрутизатор.
Arduino отлично подходит для изучения электроники, связанной с вычислениями
SQL — настоящая кроличья нора
SQL — это совершенно другая история. Если вы умеете писать вложенные операторы SELECT, это еще не значит, что вы знаете SQL. Я работал с MySQL, и он мне очень нравится. Общался с T-SQL и PL/SQL от Microsoft. Написал тысячи строк кода для хранимых процедур, функций, триггеров и представлений под MySQL, MSSQL, Oracle и кучей других систем управления базами данных.
Освоение SQL — это не просто изучение его в качестве языка запросов. Речь идет о грамотном проектировании и использовании реляционных систем управления базами данных. Парадигма, согласно которой приложениям вне системы не разрешается напрямую манипулировать таблицами. Модель проектирования хранимых процедур, функций и триггеров для изоляции базовых таблиц от внешнего мира. А также многие другие концепции, которые на самом деле не имеют прямого отношения к SQL как к языку самому по себе. Изучение SQL — это, скорее, изучение реляционных баз данных, чем языка.
Еще 10–20 лет назад вы должны были свободно и уверенно владеть SQL, если хотели получить хорошо оплачиваемую работу инженером-программистом. С появлением других альтернатив это, возможно, уже не так актуально. Однако я видел немало людей, сделавших отличную карьеру только благодаря реляционным базам данных и SQL.
SQL предполагает нечто большее, чем просто написание запросов
Языки, которыми я не пользовался более 10 лет
Когда изучаешь так много языков, наступает момент, когда забываешь о некоторых из них, и это совершенно нормально. Вот список языков программирования, которые я не использовал более 10 лет: Objective C, Visual Basic, Delphi, Perl, ActionScript, Logo, OpenScript, WMLScript.
Эти языки со временем или вымерли, или утратили для меня актуальность. Когда я столкнулся с Delphi после 10 лет неиспользования, то, безусловно, смог вспомнить многие его аспекты. Но, честно говоря, у меня было такое чувство, будто мне пришлось изучать его заново. WMLScript и ActionScript ушли навсегда. Я их окончательно забыл. Если я увижу WMLScript, то смогу прочитать код. Но не смогу ничего написать без справочного материала и книги под рукой (старая-добрая книга по WAP-программированию для Nokia).
Среды разработки, которые я больше не использую
Мои ежедневные программы — VSCode, Xcode и vim. Я очень люблю Xcode, она позволяет мне программировать так, как я хочу. VSCode — это чистая магия для программиста-полиглота, поскольку она создаёт комфортную среду для любого языка, нужного и интересного мне. Есть IDE, которые я больше не использую, но в которых провел значительную часть своей жизни.
Эти IDE были по-своему неплохи, и я проводил в них много времени. Однако, когда появляются новые языки программирования и среды выполнения, появляются и новые инструменты. Каждому языку — своё время. И однажды вы понимаете, что нужно двигаться дальше. С появлением Mac OS X все инструменты System 9, по сути, умерли в одночасье. Не влюбляйтесь в эти IDE, вы никогда не знаете, как долго они проживут. Но изучить основы vim никогда не помешает.
30 языков, говорите? Хм!
В заголовке утверждается, что я изучил 30 языков, и под изучением я подразумеваю, что написал на них достаточное количество кода. Разработал, собрал и развернул приложение. Вот полный список этих языков в алфавитном порядке: ActionScript, Arduino, Assembly, Bash, C, C#, C++, CMake, COBOL, ColdFusion, Dart, Delphi, Go, Java, JavaScript, Logo, Objective-C, OpenScript, Perl, PHP, PL/SQL, PowerShell, Scratch, SQL, Swift, T-SQL, TypeScript, Visual Basic .NET, Visual Basic Classic и WMLScript.
Вероятно, я что-то мог забыть. Было много небольших скриптовых языков, которые я выучил, применял несколько недель, а потом выбросил из головы. Так что их может быть больше 30. Число не имеет особого значения.
Не имеет значения, сколько языков ты знаешь, важно, что ты умеешь с ними делать
Психологические факторы в программировании
Большая часть жизни программиста — ощущение себя глупцом. Ошибки и промахи становятся ежедневным опытом. Мир вычислительных технологий настолько огромен, что вы не можете быть в курсе всего. В середине 1980-х годов компьютеры были ещё относительно простыми. Но даже в тот период невозможно было знать все — от конструкции микросхемы до дизайна пользовательского интерфейса приложения. Человеческий мозг просто не в состоянии хранить всю эту информацию. Не будьте слишком строги к себе.
Вам нужно получать удовольствие от работы с компьютерами
Я очень рекомендую книгу «Just For Fun», биографию Линуса Торвальдса. Помимо рассказа о том, как он создал Linux, в ней множество его личных жизненных впечатлений. Понимание того, через что прошел Линус, поможет осознать, что вы не одиноки. И что все мы проходим через взлеты и падения в программировании.
Линус принадлежит к числу лучших инженеров-программистов, которыми сегодня располагает наш мир. Определенно стоит следовать за ним и учиться у него. Он написал самую популярную и важную операционную систему современности и до сих пор отвечает за ее поддержку. Линус — тот, на кого хочется равняться.
Пишите то, что любите больше всего
Изучая различные языки программирования, найдите ниши, которые вам больше всего по душе. Для меня — это все мобильное. Я люблю мобильные приложения, мобильные веб-сайты и вычислительную технику, которую можно носить в кармане. Мне нравилось программировать для Pocket PC, для Android, и я просто обожаю писать для экосистемы Apple.
Написание мобильных веб-приложений, адаптированных для смартфонов, — занятие, которое доставляет мне огромное удовольствие. Но у вас дело может обстоять по-другому. У всех свои интересы и увлечения, которые вызывают особый восторг. Моя личная рекомендация — следуйте за своими предпочтениями. Тогда даже в самые жестокие периоды вы будете получать от программирования удовольствие.
Найдите свою страсть
Не обманывайте себя, будьте проще
Языкам программирования как таковым уже более 100 лет, а язык ассемблера отметит свой 100-летний юбилей в 2049 году. За десятилетия, прошедшие после того, как Конрад Цузе изобрел Zuse Z1 в 1938 году, в вычислительной технике многое изменилось. Вам не обязательно воспроизводить Zuse Z1, Windows или Linux. Конечно, полезно понимать основы, но вам вовсе не нужно становиться мастером на все руки, да вы и не сможете. Ваш мозг не сможет.
Я был очень строг к себе и считал, что мне необходимо познать все самое новое. Жестоко заставлял себя учить ActionScript, чтобы уметь создавать Flash-приложения. Я никогда не получал от всего этого удовольствия. В свое время мне нравилось работать с Dreamweaver и Fireworks так же, как сегодня я наслаждаюсь работой с VSCode, XCode, vim, Photoshop и Illustrator.
Учитесь тому, что вам нравится, и не будьте слишком строги к себе. Организуйте свое обучение, не бросайтесь в омут с головой. Приобретите действительно хорошие учебные пособия. Есть замечательные книги и видеокурсы. Хотел бы я пользоваться всеми этими видеоуроками в своё время. Мне действительно очень нравится смотреть уроки программирования по телевизору, лежа на диване.
Программирование должно приносить удовольствие, а если это не так, взгляните на него под другим углом. Попробуйте иную область (например, десктопные приложения вместо веба) или другой способ решения задач (например, технические задачи вместо алгоритмических). Лично мне больше по душе технические. Например, программирование сетевого протокола вместо алгоритма индексации. Не все программисты одинаковы, и у каждого свой вкус.
Пишите то, что вам нравится. Изучайте то, что вам по душе.
beeline cloud— secure cloud provider. Разрабатываем облачные решения, чтобы вы предоставляли клиентам лучшие сервисы.