какой код программирования выбрать

Лучший язык программирования

Вопрос, который часто задают начинающие программисты — какой язык программирования изучать? Вопрос звучит разумно. Хочется выбрать самый лучший, чтобы потом не пришлось переучиваться.

Можно ли на него ответить?

Я работаю программистом тридцать лет. За эти годы индустрия несколько раз претерпевала кардинальные изменения. У меня были любимые языки, но ни один из них не стал единственным выбором на долгое время. И дело не в том, что я меняю языки, как перчатки. Меняется сама жизнь.

В конце 90-х я писал на С++ и присматривался к вебу. Писать веб-приложения на C++ было безумием. Тогда не было ни Python, ни Ruby, ни C#, и даже PHP был в зачаточном состоянии. Свои первые программы для веба я написал на Perl. Сейчас проект на Perl назовут глубоко и безоговорочно устаревшим.

Все тридцать лет мне постоянно приходится изучать новые языки программирования. Причиной тому не только любознательность, но и банальная жизненная необходимость. Сегодня востребованы программисты на Python, Go, C#, Java. То, что я знаю язык Ассемблера и Delphi, не помогает мне найти интересную высокооплачиваемую работу. В индустрии ходят слухи о баснословных зарплатах программистов на COBOL. Не знаю. Не уверен. Программисты на Go сейчас гораздо нужнее.

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

Ответ — научиться быстро осваивать новые языки. Чтобы проиллюстрировать эту мысль, расскажу историю из жизни. Обычно изучение нового языка занимает несколько дней, иногда недель, но C# я выучил за двадцать минут.

Я много лет писал на C++, потом неплохо освоил Java и, оказалось, что все основные концепции C# были мне знакомы. Знатокам C# напомню, что речь идёт про 2003 год, когда в языке не было ни LINQ, ни async/await, ни даже обобщённого программирования.

Я открыл MSDN, прочитал несколько страниц, и написал первый код, который сразу ушёл в прод. Конечно, я не знал язык полностью — пара моментов потребовала дополнительного освоения. В частности, новой для меня оказалась концепция делегатов. В C++ и Java есть свои способы, чтобы работать с указателями на функцию, а в C# для этого придумали новое средство языка.

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

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

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

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

Семейства языков

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

Исторически, самая ранняя классификация касается первых языков программирования высокого уровня — Fortran и LISP. Первый из них был императивным, то есть состоял из императивов. Слово императив в русском языке используют редко, нам привычнее слово команда. Программа на императивном языке программирования — это последовательность команд, которые выполняет компьютер.

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

К императивным языкам, помимо Fortran, можно отнести Pascal, C, C++, Java, C#, Python, Go. К функциональным — Haskell, Scala, Erlang, Clojure, Scheme, F#.

В этой классификации есть изъяны. Во-первых, не все согласны с простым определением функциональных языков. Некоторые специалисты считают, что истинно функциональными можно считать только чистые функциональные языки. Из известных это, фактически, только Haskell.

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

Несмотря на недостатки классификации, я рекомендую следовать первоначальному плану. Возьмите пару императивных языков и пару функциональных, и напишите на них несколько небольших программ. Будет здорово, если вы выберете языки с разным синтаксисом.

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

В императивных языках долгое время существовало разделение на код и данные, при этом код управлял данными. Языки такого рода сейчас называют процедурными, к ним, например, относят Fortran, Pascal и C.

В противовес им, в объектно-ориентированных языках программист размещает код и данные вместе, и называет объектом. К таким языкам относят C++, Object Pascal, Java, C#, JavaScript.

Существуют ли объектно-ориентированные функциональные языки? Да, конечно. Обычно разработчики языка совмещают несколько разных парадигм, что, кстати, значительно облегчает нашу задачу, а именно, освоение разных концепций. И если Pascal — императивный и процедурный, то OCaml — функциональный и объекто-ориентированный.

Языки также классифицируют по тому, как они работают с типами данных. Разделяют статически типизированные и динамически типизированные языки, а также языки с сильной и слабой типизацией.

Динамически типизированные языки часто используют для разработки небольших программ — скриптов или сценариев. Они просты в изучении, нетребовательны к квалификации программиста и обычно позволяют писать короткий код. К ним относят JavaScript, Python, PHP, Ruby.

Статически типизированные языки проверяют соответствие типов данных, поэтому программисту приходится описывать объекты, которые он использует. Это касается и переменных, и функций, и даже самих типов. Программы на таких языках обычно больше по размеру, поскольку, в определённом смысле, дублирование помогает справляться с опечатками и другими простыми ошибками. В этой категории мы обнаружим C++, Java, C#, Kotlin, Go.

Ещё один признанный способ классификации — разделение языков на низкоуровневые и высокоуровневые. Языки низкого уровня используют в системном программировании и разработке игр, то есть там, где требуется высокая производительность кода и экономия ресурсов. К ним относят C, C++, Rust и, в какой-то мере, Go.

Языки высокого уровня повышают производительность программиста. Ему не приходится распределять память или вручную обрабатывать строки, он занимается решением бизнес-задач. В категорию высокоуровневых входят Java, C#, Scala, Python, Ruby.

Если языку программирования не хватает скорости, часть программы пишут на низкоуровневом языке и вызывают этот быстрый код из языка высокого уровня. Подобное смешение возможно за счёт техник, которые в целом называют Foreign Function Interface (FFI), или Интерфейс Внешних Функций.

Наконец, языки бывают универсальные и нишевые. Это условное разделение, поскольку нишевые языки практически не похожи друг на друга. Просто надо помнить, что для работы с базами данных придётся учить SQL, для разработки фронтенда — JavaScript, а для проектирования iOS приложений — Swift.

Фундамент

Помимо лингвистических знаний в быстро меняющемся мире важны знания фундаментальные. Те, что не потеряют своей актуальности и через десять лет, и через двадцать.

Очевидная база для программистов — алгоритмы и структуры данных. Она вызывает серьёзные споры, потому что у многих программистов эти знания зачастую не востребованы. Как говорят в интернет-баталиях, чтобы пилить круды, алгоритмы не нужны. И в этом есть доля истины.

Но здесь полезно вспомнить историю. Двадцать лет назад круды пилили не на Python, а на Delphi. Бекенд писали на Perl. За свою карьеру, хотите вы этого или нет, вы несколько раз поменяете стек. И, возможно, единственное, что вам не придётся изучать на новых платформах — это фундамент.

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

Не языками едиными

Кроме языков программирования, нам нужны инструменты и методологии. Где бы вы ни работали, вам наверняка пригодится git. Даже если вы не работаете в команде, заведите аккаунт на GitHub и держите там домашние проекты.

Разберитесь с непрерывной интеграцией и развёртыванием — CI/CD. Настройте автоматическую сборку своих проектов.

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

Доведите знание английского до уровня B2 — Upper Intermediate. Этого достаточно, чтобы воспринимать английскую речь на слух, общаться с носителями языка и писать письма.

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

Заключение

Что можно сказать про индустрию, проработав в ней тридцать лет? Технологии умирают, и умирают быстро. Больше нет dBASE и Clarion, и даже названия эти современным программистам неведомы. Священная война между Pascal и C, которая шла все восьмидесятые, как-то обыденно закончилась победой C. Но сейчас это никого не волнует — что нам Pascal и C, когда мы пишем на Java?

Мы учимся, зная, что 90% новых знаний устареют уже через три года. Возможно, нам надо освоить ещё два навыка.

Умение забывать. И умение не учить всё подряд, особенно если это всё очень модное и современное. Никто не знает, какой срок отмерен модным технологиям. Будьте избирательны.

Источник

Старт карьеры в IT — какой язык программирования выбрать

Представляем обзор языков программирования для новичков. Как найти себя в мире разработки, в какой сфере эффективнее развиваться.

какой код программирования выбрать

какой код программирования выбрать

какой код программирования выбрать

Начните с HTML и CSS

Часто их называют языками программирования, но это не верно. Это язык разметки и таблица стилей, с помощью которых верстается страница. Все сайты используют HTML и CSS. Прелесть технологий — в их простоте: их легко освоить на среднем уровне за 2-3 недели. Если вам интересно работать в интернете — попробуйте.

JavaScript

Один из самых популярных языков для работы с сайтами. До сих пор использование этой технологии — едва ли не единственный способ сделать страницу интерактивной, заставить сайт реагировать на действия пользователя. Изначально JS создавали специально для веб-разработки, но сейчас с его помощью можно делать очень многое:

Этот язык быстро развивается, востребован на фрилансе. Часто именно JS рекомендуют в ответ на вопрос, какой язык программирования выбрать для быстрого старта. Его легко освоить.

Начинающий разработчик на JavaScript может рассчитывать на 30 тысяч рублей в месяц. Средний — 45–90 тысяч и больше. C опытом от трех лет — на 135 тысяч и больше.

Особенности:

Разрабатывать удобно в редакторе кода — он подсвечивает синтаксис и подсказывает нужное написание. Отладка, или пошаговое исполнение программы, в JS происходит в DevTools браузера, дополнительное ПО необязательно.

какой код программирования выбрать

Не забывайте о библиотеках и фреймворках. Это компоненты, из которых собирается программа. Для упрощения понимания: представьте строительство дома. Вы не создаете с нуля каждый кирпич, не делаете сами молоток, а пользуетесь готовыми инструментами и материалами. В случае с программированием — делаете программу из компонентов библиотеки или фреймворка.

какой код программирования выбрать

Не торопитесь вникнуть во все технологии сразу. Начинаете с нуля — используйте чистый язык и разбирайтесь в принципах программирования.

Дополнительно пригодится:

На этом языке делают серверную часть в вебе. Он абсолютный чемпион — 80% сайтов написано с помощью PHP. На нем сделаны популярные CMS: Битрикс, WordPress, Joomla.

Когда отправляете фото в «Инстаграм» или другие данные на любой сайт, сервер должен их принять, обработать и вернуть обратно результат. Именно этим и занимается PHP.

Для Junior зарплаты начинаются от 35 тысяч рублей. Middle может рассчитывать на ценник от 80 тысяч рублей. Для Senior предлагают зарплату от 95 тысяч. Средняя зарплата — 88 тысяч рублей.

Особенности:

Недостатки:

Прогресс будет быстрее, если вы найдете ментора или курсы. Как и в любом языке, в PHP есть сложные для освоения тонкости, которые лучше постигать с поддержкой.

какой код программирования выбрать

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

Python

Это популярный язык, на котором можно писать сайты, — и в этом он соперничает с PHP. Но намного интереснее с помощью Python заниматься анализом данных и машинным обучением. Хотите развивать искусственный интеллект — попробуйте его.

Для начинающего — от 35 тысяч рублей. Средний уровень — от 80 тысяч. Специалист с опытом от трех лет — 90–210 тысяч рублей. Если понимать в математике и разбираться в нейросетях, доход будет выше.

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

Особенности:

Недостатки:

Обратите внимание: разработчики часто спорят, нужна ли для программирования математика. Разбираться в ней полезно. Но обязательна она только там, где вы разрабатываете что-то для математиков. Если вы создаете сайт, например, про собак, то формулы вам вряд ли пригодятся — скорее, лучше выучить JavaScript с PHP и узнать побольше о собаках.

какой код программирования выбрать

Консервативный и надежный язык, который подходит для разработки под любые платформы. Пожалуйста, не путайте его с JavaScript — это абсолютно разные технологии, и между ними нет ничего общего.

На Java разрабатывают десктопные программы, приложения под Android, серверные конструкции и масштабные промышленные и банковские системы. Достаточно сложный в освоении язык.

Новички могут рассчитывать на 35–60 тысяч рублей. Специалисты среднего уровня — на 50–100 тысяч. Высокий уровень — на доход 135–270 тысяч рублей.

Синтаксис простой и понятный. Методология языка — классическое
объектно-ориентированное программирование. Работает на всех операционных системах. На Java можно написать ПО любой сложности — от небольшой утилиты до комплекса с миллионами строк. Кстати, если хотите писать для Android — приложения на нем делают только на Java.

Особенности:

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

какой код программирования выбрать

Как выбрать, в чем лучше развиваться

какой код программирования выбрать

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

какой код программирования выбрать

Делает из вебинаров статьи, пишет про все и даже немного больше.

Источник

Какие языки программирования учить?

Чем больше освоишь, тем круче будешь

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

Я сам в свое время ходил и думал, что бы такого изучить, чтобы потом писать в резюме много умных слов. Затем однажды на работе познакомился с коллегой, С++ разработчиком, который за всю жизнь освоил только один этот язык и все. А зарплата у него была, как у меня, может даже больше. Помню, как он ходил и с интересом спрашивал, как такие же вещи можно делать на С #. Это меня очень удивило, потому что я увидел, что человек достаточно успешен в IT-карьере, хотя он хорошо выучил всего один язык, а за его пределами почти ничего не знает.

Конечно, это не значит, что надо ограничивать свой кругозор единственным языком. На мой взгляд, секрет успеха в том, чтобы стать профи в чем-то одном, а затем осваивать смежные области, которые будут дополнять друг друга и двигать в направлении одной цели. Например, если вы занимаетесь Web-разработкой, будет плюсом знать какой-то язык для бэкэнда и JavaScript для фронтэнда. Но если я буду учить С++ для бэкэнда, то знания JavaScript для фронтэнда мне ничего не даст, потому что я никогда не буду использовать их вместе.

Обычно, с одного языка пересесть на другой не так сложно из-за схожего синтаксиса и общих принципов. Например, с C # на Java. При этом вокруг каждого языка есть своя большая экосистема: библиотеки, фреймворки, либы. А вот на это уже нужно много времени, и быть достаточно высококвалифицированным специалистом в двух-трех разных областях в программировании очень сложно.

Рынок вакансий диктует условия

Если осваивать программирование с целью карьеры, а не в качестве хобби, ориентироваться надо на рынок вакансий. Идем на HeadHunter и видим такую картину

какой код программирования выбрать

Зеленым выделены языки с положительной динамикой вакансий. За год Kotlin и Go впервые оказались в этом списке. Красным выделен Ruby — для него число вакансий сокращается, и возможно, скоро из топ-10 его вытеснит какой-нибудь другой перспективный язык.

Может показаться, что если выбрать что-нибудь экзотическое, у вас будет меньше конкурентов, а значит проще найти работу. Это не совсем так. Работодатели тоже идут на hh, смотрят кандидатов и решают, на чем запускать проекты, под которые реально собрать команду. Замкнутый круг. Поэтому мой совет с точки зрения развития карьеры: выбирайте популярный язык, при этом ориентируйтесь на спрос на рынке труда, а не по каким-то другим рейтингам.

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

Web-разработка

Здесь больше всего вакансий, но и сильнее конкуренция среди специалистов, т.к. направление развивается уже много лет. Web-разработка состоит из Frontend — визуальная часть сайта, то, с чем взаимодействуют пользователи, и Backend — серверная часть сайта.

Начальный маршрут для фронтендера:

HTML, CSS — языки верстки

JavaScript — для интерактивных элементов

ECMAScript / Typescript — расширения JavaScript, дающие больше возможностей

Опыт работы с одним из фреймворков: React / Angular / Vue

Как правило, выбор фреймворка не столь принципиален: работодатель готов рассмотреть кандидата с опытом в любом из трех, т.к. довольно быстро можно пересесть на нужный специально под проект.

Для бэкендера есть несколько вариантов. Каждый пункт в списке — пара из языка и его фреймворков:

PHP + Laravel / Yii 2 / Symphony

Javascript + NodeJS (Express.JS, Nest.js, TypeScript, GraphQL, Apollo)

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

HTML & CSS — понимание верстки сайтов

SQL (PostgreSQL / MySql) — работа с базами данных

Архитектуры и паттерны — как писать код, который легко поддерживать и масштабировать

В большинстве случаев это необходимый минимум, джентельменский набор для бэкенд-разработчика, работающего над сайтами. Далее, можно развиться как разработчик в 2 разных направлениях: начать осваивать технологии из списка фронтендера, т.е. стать Fullstack-разработчиком, или углубиться в бекенд и хайлоад. Выбрав второй путь, будет полезно освоить следующие технологии:

NoSql (MongoDB, Reddis, Cassandra)

Брокеры сообщений: RabbitMQ / Kafka

Мобильная разработка

Более молодое направление, в котором меньше вакансий, но пока наблюдается дефицит кадров. Языки программирования выбираются в зависимости от того, под какую платформу вы будете создавать приложения.

Android-разработчик:

В большинстве проектов нужно знать и Java и Kotlin

Новый код чаще пишется на Kotlin, однако очень много кода, который нужно поддерживать, написан на Java

Kotlin молодой, но очень перспективный язык, созданный питерской компанией Jetbrains в 2016 году. Он полностью совместим с Java, но примерно на 40% короче его, что значительно ускоряет разработку. Кроме того, в какой-то момент Google, устал от исков со стороны правообладателей Java за использование кода в Android и назвал Kotlin предпочтительным языком для Android-разработки. Сейчас все чаще приложения пишут на нем. Однако на текущий момент все еще очень много проектов, написанные на Java, которые нуждаются в поддержке и развитии. Поэтому Android-разработчику надо знать оба языка, чтобы уметь читать и вносить изменения в старый код.

iOS-разработчик:

Достаточно знать Swift

Старый код написан на Objective-C

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

Что касается востребованности, то Java и Kotlin универсальные языки, которые используют не только для мобильной разработки и под различные платформы. А вот Swift подходит исключительно для мобильной разработки под iOS и десктопной разработки под MacOS.

Еще один путь мобильного разработчика — освоить библиотеку ReactNative для JavaScript. Она устроена таким образом, что написанный код работает под все платформы. С одной стороны это очень удобно. Однако нередки случаи, когда появляется необходимость прописать нативный код для каждой платформы, а это значит нужно иметь наготове знания и Kotlin, и Swift.

Серверные приложения

Путь разработчика серверных приложений во многом похож на бэкендера, разрабатывающего сайты. Во-первых, надо выбрать и изучить один из языков. Сейчас в ТОП-е по количеству вакансий на российском рынке:

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

SQL (PostgreSQL / MySql)

Архитектуры и паттерны

Дальше можно изучить:

Алгоритмы и структуры данных

NoSql (MongoDB, Reddis, Cassandra)

Брокеры сообщений: RabbitMQ / Kafka

Из этого самый сложный пункт — выбор языка. Я подготовил сравнительную таблицу:

какой код программирования выбрать

Java, Python и С # между собой очень похожи и довольно универсальны. Java используют для сайтов и мобильной разработки. Python отдают предпочтение стартапы (а также крупные проекты, выросшие из стартапов) из-за его простоты освоения и универсальности. C # популярен и для сайтов, и для написания игр на движке Unity 3D. Я советую выбирать тот, с которым вы уже хоть немного имели дело и на какую сферу больше ориентируетесь. При необходимости быстро пересесть на другой из этой тройки не составит труда.

C++, на мой взгляд, один из самых сложных в освоении язык, подходящий в основном для серверных, десктопных программ и игр, реже — для Data Science. Разработка на нем занимает значительно больше времени, но дает программисту огромные возможности. C++ используют для программ, требовательных к быстродействию, например, Photoshop, или масштабных игр, так как с его помощью можно контролировать и распределять нагрузку на «железо».

Golang (Go) появился как более простая версия С++. Его легко освоить, и он заточен под высокие нагрузки и многоядерные процессоры, но имеет очень ограниченный функционал, например, нет дженериков, исключений и т.д., которыми обладают другие языки программирования. В первую очередь его целесообразно использовать для консольных утилит и highload бэкенда. Вакансии разработчика на Go открывают преимущественно крупные корпорации, хотя в последнее время спрос на разработчиков Go начал появляться и в проектах поменьше.

Разработка игр

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

C#, Unity 3D — кроссплатформенный, возможность быстро портировать игру с одной платформы на другую

C++, Unreal Engine — PC, обычно используется для масштабных игр, требовательных к быстродействию «железа»

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

Источник

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

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