HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#Интервью</a></p>
1 <p><a>#Интервью</a></p>
2 <ul><li>28 янв 2022</li>
2 <ul><li>28 янв 2022</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Программист-полиглот рассказал о том, как и почему менял стеки, а также о недостатках Go и C# и перспективах Ruby и Rust.</p>
4 </ul><p>Программист-полиглот рассказал о том, как и почему менял стеки, а также о недостатках Go и C# и перспективах Ruby и Rust.</p>
5 <p>Иллюстрация: Teddy / Rawpixel / Annie для Skillbox Media</p>
5 <p>Иллюстрация: Teddy / Rawpixel / Annie для Skillbox Media</p>
6 <p>Филолог, полиглот, IT-гик. В прошлом - преподаватель английского и литературы и рецензент Rolling Stone Russia. Ныне переводит для РБК и пишет о программировании и образовании для Skillbox.</p>
6 <p>Филолог, полиглот, IT-гик. В прошлом - преподаватель английского и литературы и рецензент Rolling Stone Russia. Ныне переводит для РБК и пишет о программировании и образовании для Skillbox.</p>
7 <p><strong>об эксперте</strong></p>
7 <p><strong>об эксперте</strong></p>
8 <p>Senior Backend Developer на Python и Rust. Программист-полиглот. Беженец из C# и Go. Изучает Elixir и Ruby. </p>
8 <p>Senior Backend Developer на Python и Rust. Программист-полиглот. Беженец из C# и Go. Изучает Elixir и Ruby. </p>
9 <p>В интервью Алексей рассказал:</p>
9 <p>В интервью Алексей рассказал:</p>
10 <ul><li>о главных<a>недостатках</a>С# и Go;</li>
10 <ul><li>о главных<a>недостатках</a>С# и Go;</li>
11 <li><a>почему</a>Python настолько трендовый инструмент, а Rust - самый недооценённый язык в низкоуровневом программировании;</li>
11 <li><a>почему</a>Python настолько трендовый инструмент, а Rust - самый недооценённый язык в низкоуровневом программировании;</li>
12 <li>о <a>перспективах</a>Ruby на IT-рынке.</li>
12 <li>о <a>перспективах</a>Ruby на IT-рынке.</li>
13 </ul><p><strong>- В твиттере ты довольно радикально высказал своё отношение к C# и Go. Чем вызвана такая нелюбовь?</strong></p>
13 </ul><p><strong>- В твиттере ты довольно радикально высказал своё отношение к C# и Go. Чем вызвана такая нелюбовь?</strong></p>
14 <p>- В профиле у меня действительно всё несколько категорично - по большей части из-за юмористической составляющей. Всё не настолько плохо - в каждой шутке есть доля шутки :)</p>
14 <p>- В профиле у меня действительно всё несколько категорично - по большей части из-за юмористической составляющей. Всё не настолько плохо - в каждой шутке есть доля шутки :)</p>
15 <p>На самом деле C# был моим первым настоящим языком в работе. Всё, что было до, представляло собой школьное и студенческое баловство. А уже профессиональным программистом я стал именно с <a>C#</a>.</p>
15 <p>На самом деле C# был моим первым настоящим языком в работе. Всё, что было до, представляло собой школьное и студенческое баловство. А уже профессиональным программистом я стал именно с <a>C#</a>.</p>
16 <p>Сам выбор языка, по большому счёту, был продиктован условиями рынка города, в котором я живу, - Уфы. В середине 2010-х у нас медленно развивалось IT - долгое время сектор представляли только госконторы, которые и взяли на вооружение C# (там очень популярен софт Microsoft). Когда я искал работу, С# казался наиболее востребованным. В конечном итоге я его выучил и устроился в Транснефть, где проработал два года.</p>
16 <p>Сам выбор языка, по большому счёту, был продиктован условиями рынка города, в котором я живу, - Уфы. В середине 2010-х у нас медленно развивалось IT - долгое время сектор представляли только госконторы, которые и взяли на вооружение C# (там очень популярен софт Microsoft). Когда я искал работу, С# казался наиболее востребованным. В конечном итоге я его выучил и устроился в Транснефть, где проработал два года.</p>
17 <p>Мне не столько не нравится сам С#, сколько стеки, с которыми неизбежно приходится сталкиваться шарпистам. Я не могу назвать себя большим фанатом Microsoft. В добавок мне не нравятся все эти "церемониальные" языки, когда надо многое описывать и строчить кучу бойлерплейта. Хочется больше тратить времени на фичи, поэтому в какой-то момент я понял, что это немного не моё. Хотя в целом язык хорош. С С# я ушёл на Go.</p>
17 <p>Мне не столько не нравится сам С#, сколько стеки, с которыми неизбежно приходится сталкиваться шарпистам. Я не могу назвать себя большим фанатом Microsoft. В добавок мне не нравятся все эти "церемониальные" языки, когда надо многое описывать и строчить кучу бойлерплейта. Хочется больше тратить времени на фичи, поэтому в какой-то момент я понял, что это немного не моё. Хотя в целом язык хорош. С С# я ушёл на Go.</p>
18 <p><strong>- С Go по тем же причинам не сложилось или уже что-то другое?</strong></p>
18 <p><strong>- С Go по тем же причинам не сложилось или уже что-то другое?</strong></p>
19 <p>- Нет, с Go другая история. За очень редкими исключениями Go противоречит всему тому, что я считал хорошим и правильным. В Go есть несколько классных вещей, которых мне не хватает в других языках, - в частности примитивы для работы с многопоточностью. Однако этот язык не очень согласованный.</p>
19 <p>- Нет, с Go другая история. За очень редкими исключениями Go противоречит всему тому, что я считал хорошим и правильным. В Go есть несколько классных вещей, которых мне не хватает в других языках, - в частности примитивы для работы с многопоточностью. Однако этот язык не очень согласованный.</p>
20 <p>Например, возьмём Python. В нём есть парадигма, общепринятый подход, путь, как что-то делать, и вытекающая из всего этого философия. За счёт этого любой популярный язык и развивается - многие нововведения происходят органично и соответствуют духу языка.</p>
20 <p>Например, возьмём Python. В нём есть парадигма, общепринятый подход, путь, как что-то делать, и вытекающая из всего этого философия. За счёт этого любой популярный язык и развивается - многие нововведения происходят органично и соответствуют духу языка.</p>
21 <p>А вот в Go я, к сожалению, так и не смог прощупать эту философию. Сложилось впечатление, что ничего, кроме навязанного примитивизма, язык, в общем-то, не предлагает. Например, если сказать, что Go рассчитан для конкурентного программирования, тогда почему он не поддерживает иммутабельные структуры данных? Очень очевидная вещь для конкурентных программ, как мне кажется.</p>
21 <p>А вот в Go я, к сожалению, так и не смог прощупать эту философию. Сложилось впечатление, что ничего, кроме навязанного примитивизма, язык, в общем-то, не предлагает. Например, если сказать, что Go рассчитан для конкурентного программирования, тогда почему он не поддерживает иммутабельные структуры данных? Очень очевидная вещь для конкурентных программ, как мне кажется.</p>
22 <p>Меня также до сих пор раздражают срезы<a>Go</a>, которые сохраняют в себе ссылку на строку, а не копию строки, из-за чего можно получить очень интересные, скажем так, побочные эффекты. Какие-то вещи на Go получаются гораздо длиннее, чем на том же Python.</p>
22 <p>Меня также до сих пор раздражают срезы<a>Go</a>, которые сохраняют в себе ссылку на строку, а не копию строки, из-за чего можно получить очень интересные, скажем так, побочные эффекты. Какие-то вещи на Go получаются гораздо длиннее, чем на том же Python.</p>
23 <p><strong>- Стоп, длиннее? А как же его хвалёная читабельность?</strong></p>
23 <p><strong>- Стоп, длиннее? А как же его хвалёная читабельность?</strong></p>
24 <p>- Популяризаторы Go говорят, что код на этом языке очень читабельный, но… это не так :) Разумеется, что-то действительно легко воспринимается, но пиар-плакатики о том, что чуть ли не менеджер будет читать и понимать код, - крайне далеки от правды.</p>
24 <p>- Популяризаторы Go говорят, что код на этом языке очень читабельный, но… это не так :) Разумеется, что-то действительно легко воспринимается, но пиар-плакатики о том, что чуть ли не менеджер будет читать и понимать код, - крайне далеки от правды.</p>
25 <p>В этом плане Go гораздо ближе к Java, чем к Python. Многие говорят, что Go - это как Python, только компилируется. Но это тоже довольно красочное преувеличение. Если сравнить код этих двух языков, то можно понять, что уровень читабельности у Python в большинстве случаев будет гораздо выше.</p>
25 <p>В этом плане Go гораздо ближе к Java, чем к Python. Многие говорят, что Go - это как Python, только компилируется. Но это тоже довольно красочное преувеличение. Если сравнить код этих двух языков, то можно понять, что уровень читабельности у Python в большинстве случаев будет гораздо выше.</p>
26 <p>В общем, по этому ряду причин в Go я задержался ненадолго. Но, так или иначе, я не жалею об этом - подобный опыт заставляет в целом смотреть на программирование более объективно, с разных углов.</p>
26 <p>В общем, по этому ряду причин в Go я задержался ненадолго. Но, так или иначе, я не жалею об этом - подобный опыт заставляет в целом смотреть на программирование более объективно, с разных углов.</p>
27 Фото: личный архив Алексея Гладких<p><strong>- Ты не раз упомянул Python. Сейчас работаешь преимущественно на нём?</strong></p>
27 Фото: личный архив Алексея Гладких<p><strong>- Ты не раз упомянул Python. Сейчас работаешь преимущественно на нём?</strong></p>
28 <p>- Да. Причём Python я начал изучать ещё в университете, и уже тогда безумно полюбил этот язык. Более того, на старом месте работы с С# я был одним из тех, кто внедрил этот язык программирования. По сути, я был питонистом, который вынужденно работал на С#. Это сейчас благодаря удалёнке можно легко устроиться даже в зарубежный проект, а пару лет назад это были единичные случаи.</p>
28 <p>- Да. Причём Python я начал изучать ещё в университете, и уже тогда безумно полюбил этот язык. Более того, на старом месте работы с С# я был одним из тех, кто внедрил этот язык программирования. По сути, я был питонистом, который вынужденно работал на С#. Это сейчас благодаря удалёнке можно легко устроиться даже в зарубежный проект, а пару лет назад это были единичные случаи.</p>
29 <p><strong>- То есть на Python ты вернулся в период пандемии?</strong></p>
29 <p><strong>- То есть на Python ты вернулся в период пандемии?</strong></p>
30 <p>- Нет. Это произошло немного раньше. Я ушёл с С#, когда зарплатные цифры в резюме стали достаточно высокими. Да и сам я тогда сильно вырос профессионально - стал увереннее на интервью, мог что-то предлагать сам. Поэтому, даже несмотря на фактическое отсутствие "официального" опыта на Python, мне удалось устроиться в одну из уфимских контор, которая тогда уже взяла язык на вооружение.</p>
30 <p>- Нет. Это произошло немного раньше. Я ушёл с С#, когда зарплатные цифры в резюме стали достаточно высокими. Да и сам я тогда сильно вырос профессионально - стал увереннее на интервью, мог что-то предлагать сам. Поэтому, даже несмотря на фактическое отсутствие "официального" опыта на Python, мне удалось устроиться в одну из уфимских контор, которая тогда уже взяла язык на вооружение.</p>
31 <p>В каком-то смысле это был не возврат, а моё становление как Python-разработчика. Я всегда считал себя питонистом. Даже когда кодил на Go и C#. Просто путь получился очень извилистым :)</p>
31 <p>В каком-то смысле это был не возврат, а моё становление как Python-разработчика. Я всегда считал себя питонистом. Даже когда кодил на Go и C#. Просто путь получился очень извилистым :)</p>
32 <p><strong>- Чем уникален Python, что ты так сильно его полюбил?</strong></p>
32 <p><strong>- Чем уникален Python, что ты так сильно его полюбил?</strong></p>
33 <p>- Python очень крут в возможности компактно перенести мысли в код. Пожалуй, среди мейнстримных языков Python - самый выразительный и простой. То, что на Go я напишу в 20 строчек, на Python уместится в одну. При этом оно не будет выглядеть как какое-нибудь непонятное регулярное выражение в Perl, которое напоминает незнакомый иностранный язык. И дело не только в эстетике. Короткий код проще читать. Скажу вот что:</p>
33 <p>- Python очень крут в возможности компактно перенести мысли в код. Пожалуй, среди мейнстримных языков Python - самый выразительный и простой. То, что на Go я напишу в 20 строчек, на Python уместится в одну. При этом оно не будет выглядеть как какое-нибудь непонятное регулярное выражение в Perl, которое напоминает незнакомый иностранный язык. И дело не только в эстетике. Короткий код проще читать. Скажу вот что:</p>
34 <p>Не всякий короткий код просто читать, но всякий код, который просто читать, - короткий.</p>
34 <p>Не всякий короткий код просто читать, но всякий код, который просто читать, - короткий.</p>
35 <p>И это очень важно для разработки в целом. Если код легко читать, то в нём - внезапно - будет меньше ошибок: их проще избежать, находить и править. Это делает код более надёжным, ускоряет весь процесс разработки, да и вообще работать со всем этим получается комфортнее и продуктивнее.</p>
35 <p>И это очень важно для разработки в целом. Если код легко читать, то в нём - внезапно - будет меньше ошибок: их проще избежать, находить и править. Это делает код более надёжным, ускоряет весь процесс разработки, да и вообще работать со всем этим получается комфортнее и продуктивнее.</p>
36 <p>Ко всему прочему, мне безумно нравится роль Python в бизнесе. Я всегда отшучиваюсь знакомым-предпринимателям: "В любой непонятной ситуации заводи себе питона" :)</p>
36 <p>Ко всему прочему, мне безумно нравится роль Python в бизнесе. Я всегда отшучиваюсь знакомым-предпринимателям: "В любой непонятной ситуации заводи себе питона" :)</p>
37 <p>Этот язык может практически всё. Python - это некий суперклей, который соединяет буквально всё в высокоуровневой обёртке. Даже тот же С++. Хотя я, если честно, не такой большой фанат сишек. Кажется, что со многими низкоуровневыми задачами Rust справляется гораздо лучше. Поэтому я и выбрал его в пару к Python, что очень советую попробовать другим.</p>
37 <p>Этот язык может практически всё. Python - это некий суперклей, который соединяет буквально всё в высокоуровневой обёртке. Даже тот же С++. Хотя я, если честно, не такой большой фанат сишек. Кажется, что со многими низкоуровневыми задачами Rust справляется гораздо лучше. Поэтому я и выбрал его в пару к Python, что очень советую попробовать другим.</p>
38 <p><strong>- Интересный микс. А почему именно Rust?</strong></p>
38 <p><strong>- Интересный микс. А почему именно Rust?</strong></p>
39 <p>- Как я уже сказал, Python - это язык-клей. Почти всегда то, что на Python работает хорошо, где-то под капотом написано на условном С. То, что пишется на голом питоне, обычно не всегда работает на том же уровне - оно обычно банально медленнее. То есть на практике часто берутся несколько сишных библиотек и клеятся питоном в одно целое.</p>
39 <p>- Как я уже сказал, Python - это язык-клей. Почти всегда то, что на Python работает хорошо, где-то под капотом написано на условном С. То, что пишется на голом питоне, обычно не всегда работает на том же уровне - оно обычно банально медленнее. То есть на практике часто берутся несколько сишных библиотек и клеятся питоном в одно целое.</p>
40 <p>У всего этого есть большая проблема. Если мне надо написать что-то своё, то мне надо писать на С. А писать на С - это ад и погибель; а на С++ - это ад и погибель ++ :) Поэтому я и начал присматриваться к другим языкам.</p>
40 <p>У всего этого есть большая проблема. Если мне надо написать что-то своё, то мне надо писать на С. А писать на С - это ад и погибель; а на С++ - это ад и погибель ++ :) Поэтому я и начал присматриваться к другим языкам.</p>
41 <p>В своё время я даже изучал такой малоизвестный язык, как D. Но попытки создателей языка сделать что-то понятное и системное, к сожалению, так и не увенчались успехом. D получился языком со сборкой мусора, что очень плохо для языков системного программирования. Тогда же я обратил внимание на Go и вот Rust.</p>
41 <p>В своё время я даже изучал такой малоизвестный язык, как D. Но попытки создателей языка сделать что-то понятное и системное, к сожалению, так и не увенчались успехом. D получился языком со сборкой мусора, что очень плохо для языков системного программирования. Тогда же я обратил внимание на Go и вот Rust.</p>
42 <p>Rust меня очаровал тем, что, делая какую-то низкоуровневую вещь типа сетевого протокола, я могу это выразить через систему типов так, чтобы любая вещь, которую мне сложно представить, работала точно правильно. То есть в Python я делаю всякие высокоуровневые вещи (для них он идеален), а если нужно спуститься пониже, то беру Rust.</p>
42 <p>Rust меня очаровал тем, что, делая какую-то низкоуровневую вещь типа сетевого протокола, я могу это выразить через систему типов так, чтобы любая вещь, которую мне сложно представить, работала точно правильно. То есть в Python я делаю всякие высокоуровневые вещи (для них он идеален), а если нужно спуститься пониже, то беру Rust.</p>
43 <p>Система типов Rust, кстати, очень похожа на Haskell, который я в своё время выучил из спортивного интереса, потому что все говорили, что он сложный. В Rust можно многое выразить так, чтобы максимально исключить возможность ошибки - этим он и хорош.</p>
43 <p>Система типов Rust, кстати, очень похожа на Haskell, который я в своё время выучил из спортивного интереса, потому что все говорили, что он сложный. В Rust можно многое выразить так, чтобы максимально исключить возможность ошибки - этим он и хорош.</p>
44 <p><strong>- Почему многие всё равно предпочитают сишки?</strong></p>
44 <p><strong>- Почему многие всё равно предпочитают сишки?</strong></p>
45 <p>- В Rust используется много концепций, которых в мейнстримных языках вообще нет - в частности аффинные типы. Это какая-то сущность, которая в коде может использоваться только один раз, и мы можем статически это проверить. Например, возможность закрывать файл.</p>
45 <p>- В Rust используется много концепций, которых в мейнстримных языках вообще нет - в частности аффинные типы. Это какая-то сущность, которая в коде может использоваться только один раз, и мы можем статически это проверить. Например, возможность закрывать файл.</p>
46 <p>Я никогда не был экспертом в низкоуровневом программировании, но тем не менее какое-то представление о том, как работает та же операционка под капотом, имею. Поэтому позволю себе судить и заявить, что практически нет задач, с которыми тот же C++ справляется лучше Rust. Но!</p>
46 <p>Я никогда не был экспертом в низкоуровневом программировании, но тем не менее какое-то представление о том, как работает та же операционка под капотом, имею. Поэтому позволю себе судить и заявить, что практически нет задач, с которыми тот же C++ справляется лучше Rust. Но!</p>
47 <p>Очень многие штуки, которых нет в Rust, уже существуют в сишках. Ещё, помимо какой-то нехватки фреймворков и библиотек на Rust, дело может быть в банальной привычке. Например, сфера, из которой C++ вряд ли уйдёт в ближайшие десятилетия, - геймдев. Там столько всего наворочено, что у Rust вряд ли есть какие-то перспективы.</p>
47 <p>Очень многие штуки, которых нет в Rust, уже существуют в сишках. Ещё, помимо какой-то нехватки фреймворков и библиотек на Rust, дело может быть в банальной привычке. Например, сфера, из которой C++ вряд ли уйдёт в ближайшие десятилетия, - геймдев. Там столько всего наворочено, что у Rust вряд ли есть какие-то перспективы.</p>
48 <p><strong>- Как думаешь, у Rust есть шансы где-то полностью вытеснить сишки?</strong></p>
48 <p><strong>- Как думаешь, у Rust есть шансы где-то полностью вытеснить сишки?</strong></p>
49 <p>- Смотря где. Если с геймдевом всё очень сложно, то вот, например, в реализации драйверов, серверов и протоколов Rust намного круче сишек практически во всём. Он невероятно страхует программистов от ошибок. Лучше, чем все высокоуровневые языки.</p>
49 <p>- Смотря где. Если с геймдевом всё очень сложно, то вот, например, в реализации драйверов, серверов и протоколов Rust намного круче сишек практически во всём. Он невероятно страхует программистов от ошибок. Лучше, чем все высокоуровневые языки.</p>
50 <p>Из-за того, что С низкоуровневый, в нём очень легко накосячить в памяти. Rust тоже низкоуровневый, но в нём сложнее ошибиться, чем даже в Java или Python. Но этому есть высокая цена - порог вхождения (кстати, ещё одна причина, почему Rust не популярен).</p>
50 <p>Из-за того, что С низкоуровневый, в нём очень легко накосячить в памяти. Rust тоже низкоуровневый, но в нём сложнее ошибиться, чем даже в Java или Python. Но этому есть высокая цена - порог вхождения (кстати, ещё одна причина, почему Rust не популярен).</p>
51 <p>Про Rust не так много образовательного контента, но то, что есть, - сделано очень качественно. Rust-book (<a>eng</a>,<a>ru</a>) - наверное, лучшая вводная книга по языкам программирования, которую я видел. Но вот берёшь оттуда программу, вводишь - работает; чуть-чуть меняешь - не работает. Приходится постоянно воевать с компилятором. Он параноик, который не даёт сделать даже гипотетически неправильные вещи. Это отпугивает новичков.</p>
51 <p>Про Rust не так много образовательного контента, но то, что есть, - сделано очень качественно. Rust-book (<a>eng</a>,<a>ru</a>) - наверное, лучшая вводная книга по языкам программирования, которую я видел. Но вот берёшь оттуда программу, вводишь - работает; чуть-чуть меняешь - не работает. Приходится постоянно воевать с компилятором. Он параноик, который не даёт сделать даже гипотетически неправильные вещи. Это отпугивает новичков.</p>
52 <p>Про Rust даже шутят, называя его compile driver development. Если программа скомпилировалась, то она правильная.</p>
52 <p>Про Rust даже шутят, называя его compile driver development. Если программа скомпилировалась, то она правильная.</p>
53 <p><strong>- Чем же хорош такой компилятор?</strong></p>
53 <p><strong>- Чем же хорош такой компилятор?</strong></p>
54 <p><strong>- </strong>Rust взял на себя всё, что происходит в программе на этапе компиляции. В Rust нет runtime, а сам компилятор очень строгий и не позволяет делать очень многие вещи. Поэтому типичная ситуация вроде той же гонки данных в Rust не возникает. Почему?</p>
54 <p><strong>- </strong>Rust взял на себя всё, что происходит в программе на этапе компиляции. В Rust нет runtime, а сам компилятор очень строгий и не позволяет делать очень многие вещи. Поэтому типичная ситуация вроде той же гонки данных в Rust не возникает. Почему?</p>
55 <p>Например, представим, что у нас есть два потока. Если мы создаём объект и он мутабельный, то мы не можем обращаться к нему сразу с двух объектов (я называю объектами для упрощения - в Rust другая терминология), - он просто не скомпилируется. То есть это не выяснится в процессе: вот у нас runtime error и мы не можем обращаться сразу с двух объектов. Он просто изначально не будет компилироваться.</p>
55 <p>Например, представим, что у нас есть два потока. Если мы создаём объект и он мутабельный, то мы не можем обращаться к нему сразу с двух объектов (я называю объектами для упрощения - в Rust другая терминология), - он просто не скомпилируется. То есть это не выяснится в процессе: вот у нас runtime error и мы не можем обращаться сразу с двух объектов. Он просто изначально не будет компилироваться.</p>
56 <p>Если очень коротко, то в Rust многие процессы контролируются на уровне компиляции - это избавляет программиста от многих лишних действий. То есть в целом компилятор Rust - это скорее плюс, чем минус. Просто к нему надо привыкать.</p>
56 <p>Если очень коротко, то в Rust многие процессы контролируются на уровне компиляции - это избавляет программиста от многих лишних действий. То есть в целом компилятор Rust - это скорее плюс, чем минус. Просто к нему надо привыкать.</p>
57 <p>Кстати, другая классная штука Rust - система отслеживания ошибок. Rust возвращает ошибку как return, но делает это через тип данных result или error (в случае ошибки). И вот этот result мы должны проверить. Как следствие, у нас не может возникнуть ситуации, когда мы не обработали исключение. Кое-где статические проверки помогают не ошибиться.</p>
57 <p>Кстати, другая классная штука Rust - система отслеживания ошибок. Rust возвращает ошибку как return, но делает это через тип данных result или error (в случае ошибки). И вот этот result мы должны проверить. Как следствие, у нас не может возникнуть ситуации, когда мы не обработали исключение. Кое-где статические проверки помогают не ошибиться.</p>
58 Фото: личный архив Алексея Гладких<p><strong>- А есть ли в Go или С# что-то такое, чего тебе безумно не хватает в Python или Rust?</strong></p>
58 Фото: личный архив Алексея Гладких<p><strong>- А есть ли в Go или С# что-то такое, чего тебе безумно не хватает в Python или Rust?</strong></p>
59 <p>- Безусловно. Оговорюсь, что выбор языка сильно зависит от самого человека и его задач. Я не считаю, что тот же Go - это абсолютно бесполезный инструмент. Просто конкретно мне и под мои задачи подходят больше Python и Rust.</p>
59 <p>- Безусловно. Оговорюсь, что выбор языка сильно зависит от самого человека и его задач. Я не считаю, что тот же Go - это абсолютно бесполезный инструмент. Просто конкретно мне и под мои задачи подходят больше Python и Rust.</p>
60 <p>В Python точно не хватает быстродействия и многопоточности (она есть, но сделана так, что проще сказать, что её нет). Парадокс, но в Go лучше реализован один из ключевых принципов дзена питона:<em>"Должен существовать один и желательно только один очевидный способ сделать это"</em>.</p>
60 <p>В Python точно не хватает быстродействия и многопоточности (она есть, но сделана так, что проще сказать, что её нет). Парадокс, но в Go лучше реализован один из ключевых принципов дзена питона:<em>"Должен существовать один и желательно только один очевидный способ сделать это"</em>.</p>
61 <p>Сейчас в комьюнити питона существует проблема: многие вещи люди делают по-разному и нет какого-то общепринятого подхода. В этом плане Python стал напоминать JavaScript на бэкенде. Думаю, связано это с тем, что в какое-то время питонисты начали гнаться за трендами конкурентности, не совсем продумав свой путь. Go в этом плане гораздо лучше - многое стандартизировано и более понятно.</p>
61 <p>Сейчас в комьюнити питона существует проблема: многие вещи люди делают по-разному и нет какого-то общепринятого подхода. В этом плане Python стал напоминать JavaScript на бэкенде. Думаю, связано это с тем, что в какое-то время питонисты начали гнаться за трендами конкурентности, не совсем продумав свой путь. Go в этом плане гораздо лучше - многое стандартизировано и более понятно.</p>
62 <p>Сейчас Ruby, который отстаёт от Python в вопросах конкурентности, асинхронности и многопоточности, двигается по гораздо более перспективному пути. И за счёт этого у него даже может произойти новый рассвет.</p>
62 <p>Сейчас Ruby, который отстаёт от Python в вопросах конкурентности, асинхронности и многопоточности, двигается по гораздо более перспективному пути. И за счёт этого у него даже может произойти новый рассвет.</p>
63 <p><strong>- В твиттере ты пишешь, что изучаешь сейчас Elixir и Ruby. Это как-то связано с возможным "рассветом" Ruby?</strong></p>
63 <p><strong>- В твиттере ты пишешь, что изучаешь сейчас Elixir и Ruby. Это как-то связано с возможным "рассветом" Ruby?</strong></p>
64 <p>- Не совсем. Эти два языка мне в первую очередь просто понравились. С Ruby я познакомился через Elixir, на котором тоже долгое время всерьёз думал стать разработчиком.</p>
64 <p>- Не совсем. Эти два языка мне в первую очередь просто понравились. С Ruby я познакомился через Elixir, на котором тоже долгое время всерьёз думал стать разработчиком.</p>
65 <p>Ruby обворожил меня тем, что он очень похож на Python, с той разницей, что многие вещи, которые мне нравятся в Python, в Ruby ещё круче. Но есть одно "но".</p>
65 <p>Ruby обворожил меня тем, что он очень похож на Python, с той разницей, что многие вещи, которые мне нравятся в Python, в Ruby ещё круче. Но есть одно "но".</p>
66 <p>То, что я люблю в Python, в Ruby сделано лучше, но то, что мне не нравится в Python, в Ruby сделано ещё хуже.</p>
66 <p>То, что я люблю в Python, в Ruby сделано лучше, но то, что мне не нравится в Python, в Ruby сделано ещё хуже.</p>
67 <p>Такие вот забавные крайности :)</p>
67 <p>Такие вот забавные крайности :)</p>
68 <p><strong>- А в чём это проявляется?</strong></p>
68 <p><strong>- А в чём это проявляется?</strong></p>
69 <p>- Ruby ещё медленнее. Про многопоточность, асинхронность и конкурентность я уже говорил - в будущем, возможно, Ruby превзойдёт в этом Python, однако пока он отстаёт.</p>
69 <p>- Ruby ещё медленнее. Про многопоточность, асинхронность и конкурентность я уже говорил - в будущем, возможно, Ruby превзойдёт в этом Python, однако пока он отстаёт.</p>
70 <p>Но при этом синтаксис Ruby ещё более высокоуровневый. Когда я работал на Python, я думал, что это самый высокоуровневый язык, но чемпионом оказался Ruby. И это очень большой козырь в современном программировании.</p>
70 <p>Но при этом синтаксис Ruby ещё более высокоуровневый. Когда я работал на Python, я думал, что это самый высокоуровневый язык, но чемпионом оказался Ruby. И это очень большой козырь в современном программировании.</p>
71 <p>Я повторюсь: дело не только в эстетике. Когда ты видишь весь код на одном экране с невероятной логикой, его проще читать, проще править, проще что-то заметить. Это позволяет придумать больше за меньшее время.</p>
71 <p>Я повторюсь: дело не только в эстетике. Когда ты видишь весь код на одном экране с невероятной логикой, его проще читать, проще править, проще что-то заметить. Это позволяет придумать больше за меньшее время.</p>
72 <p><strong>- Не было ли мысли полностью перейти на Ruby?</strong></p>
72 <p><strong>- Не было ли мысли полностью перейти на Ruby?</strong></p>
73 <p>- Нет. Python сейчас слишком передовая технология. Да и язык в любом случае мне также импонирует. Хотя отмечу, что перспективы у Ruby огромные, причём даже с точки зрения рынка труда.</p>
73 <p>- Нет. Python сейчас слишком передовая технология. Да и язык в любом случае мне также импонирует. Хотя отмечу, что перспективы у Ruby огромные, причём даже с точки зрения рынка труда.</p>
74 <p>Из-за того, что сейчас рулит удалёнка, соотношение вакансий к соискателям условно стало общим для всего мира. Да, Ruby не популярен, мало кто на нём работает, но Ruby-разработчиков ещё меньше :)</p>
74 <p>Из-за того, что сейчас рулит удалёнка, соотношение вакансий к соискателям условно стало общим для всего мира. Да, Ruby не популярен, мало кто на нём работает, но Ruby-разработчиков ещё меньше :)</p>
75 <p>Как результат, можно найти кучу вкусных предложений - зарплата рубиста нередко выше зарплаты питониста или джависта. Такие офферы, кстати, могут стимулировать и интерес к языку со стороны других программистов.</p>
75 <p>Как результат, можно найти кучу вкусных предложений - зарплата рубиста нередко выше зарплаты питониста или джависта. Такие офферы, кстати, могут стимулировать и интерес к языку со стороны других программистов.</p>
76 <p>Ну, и не стоит забывать, что Ruby не слишком теряет позиции с точки зрения популярности. Он просто стагнирует. Есть ещё один занимательный факт. Наверняка многие слышали, что<a>почти 80% интернета - это PHP</a>. Так вот, у Ruby почти 6% - внезапно больше, чем у Python (1,4%) и JavaScript (1,8%).</p>
76 <p>Ну, и не стоит забывать, что Ruby не слишком теряет позиции с точки зрения популярности. Он просто стагнирует. Есть ещё один занимательный факт. Наверняка многие слышали, что<a>почти 80% интернета - это PHP</a>. Так вот, у Ruby почти 6% - внезапно больше, чем у Python (1,4%) и JavaScript (1,8%).</p>
77 Фото: личный архив Алексея Гладких<p><strong>- Стоп. Как так получилось?</strong></p>
77 Фото: личный архив Алексея Гладких<p><strong>- Стоп. Как так получилось?</strong></p>
78 <p>- Огромный толчок Ruby дала популярная ныне площадка Shopify, которая, по сути, является сейчас второй CMS в мире по популярности. Shopify написана на фреймворке Ruby on Rails :) В Америке вообще бизнес, особенно стартапы, любят Ruby.</p>
78 <p>- Огромный толчок Ruby дала популярная ныне площадка Shopify, которая, по сути, является сейчас второй CMS в мире по популярности. Shopify написана на фреймворке Ruby on Rails :) В Америке вообще бизнес, особенно стартапы, любят Ruby.</p>
79 <p><strong>- Почему тогда никто не бежит учить эту тёмную лошадку?</strong></p>
79 <p><strong>- Почему тогда никто не бежит учить эту тёмную лошадку?</strong></p>
80 <p>- В этом и суть. Да, Ruby круче Python как высокоуровневый язык, но в то же время у его синтаксиса есть нюансы, к которым дольше нужно привыкать. Да, офферы на Ruby часто увесистее, чем на JS и Python, но и требования обычно мидл+.</p>
80 <p>- В этом и суть. Да, Ruby круче Python как высокоуровневый язык, но в то же время у его синтаксиса есть нюансы, к которым дольше нужно привыкать. Да, офферы на Ruby часто увесистее, чем на JS и Python, но и требования обычно мидл+.</p>
81 <p>То есть Ruby - это не самый лучший язык для новичков: мало образовательного контента и вакансий для входа с нуля. Это язык для опытных разработчиков, к которому нужно прийти осознанно. Звучит так, что рубисты - это прям какие-то серые кардиналы IT-мира. Но я действительно думаю, что, возможно, в будущем Ruby станет мейнстримовым языком :)</p>
81 <p>То есть Ruby - это не самый лучший язык для новичков: мало образовательного контента и вакансий для входа с нуля. Это язык для опытных разработчиков, к которому нужно прийти осознанно. Звучит так, что рубисты - это прям какие-то серые кардиналы IT-мира. Но я действительно думаю, что, возможно, в будущем Ruby станет мейнстримовым языком :)</p>
82 <p><strong>- C#, Go, Python, Rust, Elixir, Ruby… Тяжело ли держать это всё в голове?</strong></p>
82 <p><strong>- C#, Go, Python, Rust, Elixir, Ruby… Тяжело ли держать это всё в голове?</strong></p>
83 <p>- Выучить язык программирования не так сложно. Я вообще стараюсь каждый год учить новый язык, чтобы вдруг не упустить какую-то важную технологию или тренд. Ко всему прочему, это:</p>
83 <p>- Выучить язык программирования не так сложно. Я вообще стараюсь каждый год учить новый язык, чтобы вдруг не упустить какую-то важную технологию или тренд. Ко всему прочему, это:</p>
84 <ul><li>качает мозги;</li>
84 <ul><li>качает мозги;</li>
85 <li>заставляет думать нестандартно в рамках основного языка;</li>
85 <li>заставляет думать нестандартно в рамках основного языка;</li>
86 <li>открывает больше возможностей с точки зрения рынка.</li>
86 <li>открывает больше возможностей с точки зрения рынка.</li>
87 </ul><p>Смена стеков также очень помогает с выгоранием, когда какой-то язык изрядно осточертел - очень рекомендую мидлам и сеньорам.</p>
87 </ul><p>Смена стеков также очень помогает с выгоранием, когда какой-то язык изрядно осточертел - очень рекомендую мидлам и сеньорам.</p>
88 <p>Разумеется, поддерживать на профессиональном уровне знания всего и сразу невозможно. Что-то будет неизбежно просаживаться, поэтому всегда стоит держать в резюме стек, в котором есть твёрдая уверенность.</p>
88 <p>Разумеется, поддерживать на профессиональном уровне знания всего и сразу невозможно. Что-то будет неизбежно просаживаться, поэтому всегда стоит держать в резюме стек, в котором есть твёрдая уверенность.</p>
89 <p><strong>- Напоследок - какой язык ты бы посоветовал изучать?</strong></p>
89 <p><strong>- Напоследок - какой язык ты бы посоветовал изучать?</strong></p>
90 <p>- Как я уже говорил, всё очень индивидуально. Кого-то воротит от TypeScript, а кому-то нравится разбираться в синтаксических джунглях С++. Но если давать универсальные советы, то новичкам лучше входить через Python или JavaScript - куча вакансий и образовательного контента. А Python один из самых простых языков программирования.</p>
90 <p>- Как я уже говорил, всё очень индивидуально. Кого-то воротит от TypeScript, а кому-то нравится разбираться в синтаксических джунглях С++. Но если давать универсальные советы, то новичкам лучше входить через Python или JavaScript - куча вакансий и образовательного контента. А Python один из самых простых языков программирования.</p>
91 <p>Опытным разработчикам, в особенности питонистам, посоветовал бы присмотреться к Ruby. Через несколько лет с ним можно запросто оказаться востребованным специалистом там, где пока толком нет специалистов :)</p>
91 <p>Опытным разработчикам, в особенности питонистам, посоветовал бы присмотреться к Ruby. Через несколько лет с ним можно запросто оказаться востребованным специалистом там, где пока толком нет специалистов :)</p>
92 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
92 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>