С развитием IT-индустрии придумать что-то новое становится сложнее и сложнее. Языки программирования похожи друг на друга, компании копируют идеи друг друга, пытаясь одну и ту же конфету упаковать в разные фантики. Начинаешь понимать, что на изучение ряда вещей не стоит тратить своё время и усилия. Но из огромного множества можно случайно выбрать то, что уже неактуально, или то, что в скором времени пропадёт с рынка. Наш подписчик столкнулся с проблемой выбора и написал нам в редакцию с просьбой помочь ему:
«На какие языки программирования/технологии точно не стоит тратить время?»
За разъяснениями мы обратились к нашим экспертам, а полученные ответы предоставляем вашему вниманию.
Я бы пошёл от противного — на какие языки и технологии точно стоит тратить время. И тратить только на них. 😉
Во-первых, это языки, на которых ты и твоя компания зарабатываете деньги (Java, Python, Go, Javascript, Swift, C, C++ и т. д.).
Во-вторых, языки, которые заставляют по-другому взглянуть на программирование — например, Haskell, Rust, Prolog, Erlang, Clojure, Scheme. Если язык программирования не приносит ни денег, ни удовольствия, ни развития — не стоит тратить на него своё время и усилия.
Стоит понимать, что не всегда языкам уделяют время, чтобы затем использовать эти знания в работе: процесс изучения может быть интересным и ценным сам по себе. Кроме того, если тебе нравится писать на каком-либо языке, в него и стоит погружаться, а не задаваться вопросом о конечном профите.
Но грубо разделить языки на те, что точно заслуживают внимания, и те, что нет, всё-таки можно. К первой группе я отношу C-подобные языки, поскольку они все примерно одинаковые и можно легко переключаться между ними. Кроме того, эти языки позволяют разобраться, как всё работает изнутри, при этом не погружаясь совсем в дебри, как это делает Assembler. Даже в институтах преподают С/С++, и это стоящая дисциплина, в отличие от многих других. В первую группу я бы также включил JS.
Глобально не стоит тратить время на старые языки типа уже упомянутого Assembler или Fortran. В мой «чёрный список» входит также Ruby в силу серьёзных проблем с совместимостью разных библиотек — поставив одну, ты не знаешь, что может сломаться в другом месте.
Коротко — нет таких языков и технологий. Это не просто инструменты, это какие-то наборы концепций, которые сами по себе интересны для изучения. Любой инструмент, имеющий более одного автора и последователя, любопытен просто потому, что успешно используется кем-то для решения каких-то задач. В конце концов, вся карьера разработчика сводится к тому, что постоянно нужно решать задачи подходящими инструментами, а профессионализм оценивается знаниями максимального количества этих самых инструментов. К сожалению, об этом часто забывают в пылу религиозных войн о достоинствах своих инструментов и недостатках всех остальных. Конечно, можно оставаться адептом своего маленького технологического стека, но при этом лучше не ходить на работные сайты и не замечать там зарплат fullstack-разработчиков, например.
Конечно, мир не идеален, и существуют языки программирования, способные нанести молодому разработчику фатальные травмы сознания. Пожалуй, сейчас это Python, который своей универсальностью напрочь отбивает мотивацию к развитию. Вообще, будьте осторожнее с универсальными инструментами, как правило, эта универсальность на практике оборачивается полной бесполезностью. Не то чтобы Python был бесполезен, просто почти в каждой нише его применения есть инструменты лучше. Если прямо сейчас вы чувствуете неконтролируемый приступ гнева и лютое желание откомментировать — вам лучше задуматься, а не слишком ли вы прикипели к своему Python’у и не пора ли оглядеться по сторонам?
С технологиями всё аналогично — просто не верьте в серебряные пули и в то, что действия по одной и той же методичке подходят к любой ситуации. Не изучайте технологию заранее, но держите в голове область её применения на случай, если вдруг понадобится. А если запомнить не получается — всегда можно перед стартом проекта провести R&D по технологическому стеку. Ну, и адептов SCRUM на всякий случай обходите стороной — уж очень они на сектантов похожи.
Однозначной рекомендации тут дать не получится, так как всё зависит от того, с какой целью происходит изучение языка программирования или платформы.
Если речь идёт о серьёзном и вдумчивом изучении основ программирования, то я бы не рекомендовал использовать широко распространённые языки высокого уровня и построенные вокруг них фреймворки. Идеальным вариантом, на мой взгляд, в этом случае является старый добрый C++. С одной стороны, этот язык даёт прекрасную возможность освоить принципы ООП, которые являются фундаментальной основой современного прикладного программирования. С другой стороны, разрабатывая на C++, вы научитесь грамотно управлять памятью, писать оптимальный код.
Если вы мечтаете стать системным программистом и разрабатывать драйвера и операционные системы или программы для микроконтроллеров, то, опять же, не стоит тратить время на широко распространённые высокоуровневые языки программирования. Изучая C, а то и старый добрый Assembler, вы придёте к своей цели гораздо быстрее.
Если вы хотите быть мобильным в плане места работы и при этом неплохо зарабатывать, то следите за тенденциями в прикладной разработке. Грубо говоря, смотрите, на чём пишут сейчас сайты или фронтенд/бэкенд информационных систем. Быстрый поиск вакансий на сайтах поиска работы легко подскажет, на каких разработчиков сейчас наибольший спрос. Например, разработчики, владеющие Java, JavaScript и основанными на этих языках фреймворками (Spring, Node.js, React, Vue и т. д.), сейчас крайне востребованы. Соответственно, если ваши интересы лежат в этой области, то не тратьте время на те языки и платформы, которых не видите в информационном поле.
Если вы видите себя в разработке приложений для крупных бизнес-систем класса enterprise (ERP, eCommerce, CRM и т. д.), то изучите рынок в вашем регионе. Наверняка вы обнаружите лидеров в эти областях, которые имеют большое количество успешных проектов. В России и странах СНГ на хороших позициях в этом сегменте находятся решения таких производителей корпоративного ПО, как 1C, SAP (SAP S/4 HANA, SAP ERP, Hybris и т. д.), Miсrosoft (Microsoft Dynamics) и другие. Далее нужно сосредоточиться на изучении языков и технологий, лежащих в основе продукта, в разработке которого вы хотите стать гуру.
Ну, а если ваша мечта — стать экспертом в области разработки хранилищ данных или больших данных, то начать нужно с SQL. JavaScript, HTML, CSS в этом вам мало помогут.
Ну, а если ваша мечта — стать экспертом в области разработки хранилищ данных или больших данных, то начать нужно с SQL. JavaScript, HTML, CSS в этом вам мало помогут.
Резюмируя вышесказанное — ориентируйтесь на ваши цели и не тратьте время на то, что не позволяет их достичь. При этом, язык программирования или платформа, на которые не имеет смысла тратить время будущему разработчику компьютерных игр, может быть фундаментальной основой для специалиста, который мечтает стать лучшим преподавателем информатики в России.
Нет смысла привязываться к какой-то конкретной технологии или языку программирования. Как бы ни ругали высшее образование, но оно даёт основу для работы в любых сферах деятельности. Главное — это понять базовые концепции, и «набить руку» на каком-либо выбранном инструменте. А уже освоение новой технологии или языка — дело пары недель размеренного вникания. Руководствуясь таким методом, как таковых бесполезных технологий и нет. Важно освоить максимум возможных концепций. Вот на что точно надо тратить время. Ну, и, конечно, руководствоваться здравым смыслом. Вряд ли изучение Cobol или CVS имеет какой-то смысл, а вот Lisp — можно!
Я считаю, что любой язык программирования заслуживает внимания и может быть полезным в зависимости от того, какие цели вы ставите перед собой. Кроме того, изучение новых языков — это, по сути, освоение новых горизонтов, что само по себе полезно для любого программиста.
При выборе языка нужно отталкиваться от своих целей. Если программирование — хобби, то для изучения подойдёт практически любой язык. Если вы заинтересованы в том, чтобы выйти на высокий доход от написания кода — для изучения выбирайте высокооплачиваемый на текущий момент времени язык. Для этого достаточно посетить, к примеру, HeadHunter и посмотреть, какие специалисты востребованы сегодня. Не стоит забывать, что высокооплачиваемые языки требуют углубленного и зачастую долгого изучения. При этом, можно оставаться востребованным программистом со средним уровнем зарплаты, изучив Java или PHP.
Я полагаю, что сегодня перспективно изучать web-разработку, например, JavaScript. Сейчас все процессы переносятся в web, и за этим будущее. Если не учитывать слишком молодые языки программирования, то можно сказать, что все направления актуальны и «умирающих» среди них нет.
Касательно технологий — практически каждую неделю разработчики выпускают новые веб-фреймворки, которые, по их мнению, должны стать «убийцами предшественников». Я считаю, что время, потраченное на изучение таких технологий, не окупится, потому как через год про очередного «убийцу» никто и не вспомнит, и полученные знания окажутся бесполезными. Рекомендую изучать технологии, которые существуют и развиваются хотя бы пару лет.
«Мёртвые» или «почти мёртвые» языки и технологии разработки ПО для собственного развития точно изучать не стоит. Список языков этого класса достаточно обширен — Fortran, Basic, Turbo Pascal, J#.
Исключения могут быть только в тех случаях, когда вам необходима именно эта технология для решения конкретной задачи. Сразу вспоминается история про последнего программиста космического аппарата Voyager в NASA. Он ушёл на пенсию, а аппарат по-прежнему функционирует, и его надо поддерживать.
Исключения могут быть только в тех случаях, когда вам необходима именно эта технология для решения конкретной задачи. Сразу вспоминается история про последнего программиста космического аппарата Voyager в NASA. Он ушёл на пенсию, а аппарат по-прежнему функционирует, и его надо поддерживать.
Среди большого количества «живых» языков и технологий надо выбирать наиболее актуальные именно в той области разработки ПО, в которой вы собираетесь работать. Например, для низкоуровневой разработки «под железо» не стоит изучать PHP или Python — они там не используются. А при разработке бизнес-логики облачных сервисов — наоборот, но там, как правило, не используется такой язык, как С и т. д.
Если же под ваш класс задач подходят сразу несколько «живых» языков/технологий разработки ПО, тогда предпочтение стоит отдавать той, которая:
— больше распространена,
— более популярна в сообществе разработчиков,
— за этой технологией/языком стоит более правильная/мощная организация-разработчик.
— больше распространена,
— более популярна в сообществе разработчиков,
— за этой технологией/языком стоит более правильная/мощная организация-разработчик.
Такой вопрос, скорее всего, приходит в голову людям, которые только собираются начать изучение одного из языков. Потому что опытный разработчик осмысленно выбирает каждый следующий язык программирования для изучения под конкретные задачи. В целом совет такой: не стоит в качестве первого языка выбирать какой-либо из малораспространённых языков. Выбирайте наиболее популярные классические языки, например, C++, C#, Java, JavaScript, Python, которые научат использовать правильный стиль программирования и мыслить как программист. Узкоспециализированные языки можно выучить позже, когда уже заложена основа. Это расширит ваш кругозор и дополнит сложившуюся картину. А там, кто знает, может быть, однажды вы сами создадите востребованный язык программирования. Естественно, не стоит тратить время на изучение языков, не предназначенных под ваши задачи. Например, нет необходимости учить C для реализации веб-интерфейса.
Я бы не стал тратить время на Objective-C. В силу перехода iOS-разработки на Swift, удел Objective-C разработчика — поддержка уже созданного ПО. Работу вы скорее всего найдёте, потому что такого ПО много, но, на мой взгляд, куда интереснее создавать новое. Не стал бы выбирать для изучения и Pascal, который воспринимался в своё время как стандарт для обучения программированию. Те редкие проекты на Delphi (Object Pascal), которые можно встретить, воспринимаются как что-то ужасно старое, как привет из прошлого. Также, если вы хотите выбрать Perl, я бы посоветовал рассмотреть замену в виде более простого и понятного Python.
Все языки программирования и технологии по-своему интересны. И, в принципе, все их можно задействовать в той или иной сфере. Вот только всегда ли это оправданно? Убежден, что при выборе решения главное — заранее понимать, как вы будете масштабировать свой продукт и во сколько вам это обойдётся. Покажу на примере.
Как человек бизнеса, занимающийся развитием SaaS-продукта, могу вас заверить: затраты на офис, зарплаты сотрудников и т. п. — лишь вершина айсберга. Что обязательно нужно учитывать, так это расходы на поддержание работоспособности платформы. Речь прежде всего о серверах/хостинге и софте. Именно они «отъедают» заметную часть бюджета, если технологии были выбраны не совсем удачно, но у платформы уже начался экспоненциальный рост числа пользователей.
Да, затрат на софт можно избежать за счёт Open Source-решений и других продуктов, которые выпускаются на условиях «свободных» лицензий (например, GNU GPL, Apache License). Возьмём известный язык программирования C#. Для запуска программ как таковых нужен лишь .NET Framework, который можно установить бесплатно. А вот чтобы запустить это ПО на сервере, требуется Windows Server с соответствующей лицензией. Причём в некоторых конфигурациях эта лицензия оказывается сопоставимой по стоимости с самим железом.
Далее. В любой современной системе надо хранить информацию, и база данных сегодня — это must have. В случае с Microsoft всё вроде бы просто: есть проверенный годами SQL Server. Но для большой системы его бесплатной редакции будет недостаточно. Значит, нам опять придётся потратиться на софт — примерно так же, как на железо. А если нам нужно хранить ОЧЕНЬ много информации? Тогда мы вспоминаем об Oracle Database. Но не все знают, что стоимость лицензии будет исчисляться в сотнях тысяч и даже в миллионах рублей. Иногда она превышает стоимость того железа, на которое ставится база. Если вы представляете крупный банк, то такие расходы, конечно, оправданы. Насчёт другого бизнеса я бы не был столь категоричен.
И в заключение. Нельзя однозначно сказать, какой язык программирования лучше: Java, PHP, Python, С++… И какая база данных оптимальна: PostgreSQL, MySQL, MongoDB, Cassandra или другая. Выбор технологии во многом зависит от ваших планов по развитию продукта и бюджета, которым вы располагаете.
Не забывайте, что всегда стоит исходить именно из задач, которые ставятся перед проектом, а не из модных тенденций. В то же время, вряд ли много вопросов сейчас можно решить с помощью устаревших языков. Поэтому старайтесь подбирать им более современные альтернативы.
Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики. Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на experts@tproger.ru, мы расскажем, как это сделать.
https://tproger.ru/experts/legacy-technologies/?utm_referrer=https%3A%2F%2Fzen.yandex.com