5. Языки - о разделе
О разделе
Мы изучили, как пишут программы, теперь пора посмотреть, на чём пишут. Что используется для фронтенда, что для бэкенда - какие инструменты и технологии нужны в разных областях.
Технически, языки по большей части универсальны. Они обычно появляются с определённой целью (JavaScript для оживления страниц, C/C++ для системного программирования, а Java чтобы обезопасить и упростить разработку), но в дальнейшем развиваются, получая новый функционал, новые фичи и возможности.
В интернете часто можно найти громкие заголовки вроде «Какой язык программирования выбрать?» И почти всегда вы встретите от года в год одно и то же - Python лучше всех, JavaScript и Java нужны везде, а C# никому не нужен. Но не всё так просто.
Вообще, лучше воспользуйтесь содержанием или перейдите к Базе знаний. Но для удобства, я размещу здесь ссылки на основные главы раздела:
JavaScript
- 5.01. История JavaScript
- 5.01. Рекомендации по разработке на JavaScript
- 5.01. Основы JavaScript
- 5.01. Знаки препинания
- 5.01. Ключевые слова в JavaScript
- 5.01. Встроенные функции в JavaScript
- 5.01. Подключение и структура кода
- 5.01. Работа и применение
- 5.01. Видимость в JavaScript
- 5.01. Функции в JavaScript
- 5.01. Переменные в JavaScript
- 5.01. Типы данных в JS
- 5.01. Выражения и операторы
- 5.01. Циклы в JavaScript
- 5.01. Асинхронность в JavaScript
- 5.01. Работа с объектами
- 5.01. События
- 5.01. Консоль, отладка и боль
- 5.01. Встроенные типы ошибок
- 5.01. Инструменты и фреймворки
- 5.01. Справочник по JavaScript
- 5.01. Node
- 5.01. Справочник по Node
- 5.01. React
- 5.01. Справочник по React
- 5.01. Vue
- 5.01. Справочник по Vue.js
- 5.01. Angular
- 5.01. Справочник по Angular
- 5.01. TypeScript
- 5.01. Справочник по TypeScript
- 5.01. Ext JS
- 5.01. Справочник по Ext JS
- 5.01. Практика
- 5.01. Итоги
- 5.01. Чек-лист самопроверки
JavaScript
Python
- 5.02. Python
- 5.02. Рекомендации по разработке на Python
- 5.02. Архитектура Python
- 5.02. Фреймворки
- 5.02. Экосистема Python-приложений
- 5.02. Окружения
- 5.02. История
- 5.02. Философия
- 5.02. Первая программа
- 5.02. Знаки препинания
- 5.02. Ключевые слова в Python
- 5.02. Встроенные функции в Python
- 5.02. Магические методы в Python
- 5.02. Алгоритмы и структуры
- 5.02. Типы данных в Python
- 5.02. Переменные в Python
- 5.02. Работа с типами
- 5.02. Коллекции
- 5.02. Управляющие конструкции
- 5.02. Функции
- 5.02. Итераторы, генераторы и контекстные менеджеры
- 5.02. ООП в Python
- 5.02. Архитектура выполнения и управление памятью
- 5.02. Исключения
- 5.02. Список ошибок и исключений
- 5.02. Асинхронность и многопоточность
- 5.02. Django
- 5.02. Справочник по Django
- 5.02. Работа с данными и внешним миром
- 5.02. Графика и игры
- 5.02. Справочник по модулю Turtle
- 5.02. Анализ данных и научные вычисления
- 5.02. Веб и API
- 5.02. Flask
- 5.02. Справочник по Flask
- 5.02. Разработка своего API
- 5.02. Автоматизация и DevOps
- 5.02. Справочник по Python
- 5.02. Итоги
- 5.02. Чек-лист самопроверки
Python
Java
- 5.03. История Java
- 5.03. Рекомендации по разработке на Java
- 5.03. Основы языка
- 5.03. Экосистема Java-приложений
- 5.03. Структуры проекта
- 5.03. Справочник по конфигурациям в Java
- 5.03. Первая программа на Java
- 5.03. Знаки препинания
- 5.03. Ключевые слова в Java
- 5.03. Встроенные функции в Java
- 5.03. Типы данных в Java
- 5.03. Основные элементы Java
- 5.03. Операторы и циклы в Java
- 5.03. ООП в Java
- 5.03. Прочие особенности языка Java
- 5.03. Библиотеки и утилиты
- 5.03. Исключения
- 5.03. Иерархия исключений в Java
- 5.03. Работа с БД
- 5.03. JVM, память и потоки
- 5.03. Коллекции в Java
- 5.03. JavaServer Faces
- 5.03. JavaBean
- 5.03. Spring
- 5.03. Ключевые классы и интерфейсы Java
- 5.03. Справочник по Java
- 5.03. Итоги
- 5.03. Чек-лист самопроверки
Java
Платформа .NET
- 5.04. История .NET
- 5.04. Платформа .NET
- 5.04. Особенности архитектуры
- 5.04. Типы приложений в .NET
- 5.04. Сборка в .NET
- 5.04. Пакеты
- 5.04. Инструменты и среда разработки
- 5.04. NuGet и политика платформы
- 5.04. Microsoft ADO
- 5.04. Microsoft ASP
- 5.04. Экосистема .NET-приложений
- 5.04. F#
- 5.04. Справочник про F#
- 5.04. SignalR
- 5.04. Итоги
- 5.04. Чек-лист самопроверки
Платформа .NET
C#
- 5.05. C#
- 5.05. Справочник по конфигурациям в C#
- 5.05. Рекомендации по разработке на C#
- 5.05. Знаки препинания
- 5.05. Ключевые слова в C#
- 5.05. Встроенные функции в C#
- 5.05. Пространства имен
- 5.05. Управляющие конструкции и логика
- 5.05. Условные операции
- 5.05. Исключения
- 5.05. Иерархия исключений в C#
- 5.05. Первая программа
- 5.05. Переменные
- 5.05. Типы данных
- 5.05. Стек и куча
- 5.05. Преобразование типов и типизация
- 5.05. Работа с типами
- 5.05. Обработка null
- 5.05. Массивы и диапазоны
- 5.05. Анонимные типы и кортежи
- 5.05. ООП
- 5.05. Обобщения
- 5.05. Ковариантность, контравариантность, инвариантность
- 5.05. Коллекции
- 5.05. LINQ
- 5.05. Справочник по LINQ
- 5.05. Итераторы и yield
- 5.05. Сериализация и парсинг
- 5.05. Служебные классы
- 5.05. Делегаты и события
- 5.05. Расширения и вложенные типы
- 5.05. Dependency Injection
- 5.05. Лямбды, делегаты и отложенная инициализация
- 5.05. Регулярные выражения
- 5.05. Синтаксический сахар и нововведения
- 5.05. Асинхронность, многопоточность и параллелизм
- 5.05. .NET инфраструктура и метаданные
- 5.05. Управление ресурсами и производительность
- 5.05. Работа с сетью
- 5.05. Безопасность
- 5.05. Работа с БД и ORM
- 5.05. Веб-разработка и интеграции
- 5.05. ASP.NET
- 5.05. Справочник по ASP.NET
- 5.05. Популярные библиотеки для разных задач
- 5.05. Пример работы бэкенда
- 5.05. Справочник по C#
- 5.05. Итоги
- 5.05. Чек-лист самопроверки
C#
C++
- 5.06. C++
- 5.06. Экосистема C++-приложений
- 5.06. Рекомендации по разработке на C++
- 5.06. Типы данных C++
- 5.06. Операторы C++
- 5.06. Циклы C++
- 5.06. ООП в C++
- 5.06. Знаки препинания
- 5.06. Ключевые слова в C++
- 5.06. Встроенные функции в C++
- 5.06. Переменные
- 5.06. Функции
- 5.06. Библиотеки
- 5.06. Управление памятью в C++
- 5.06. Иерархия исключений стандартной библиотеки C++
- 5.06. Асинхронность и потоки
- 5.06. Как пишут системы на C++
- 5.06. Разработка игр с C++
- 5.06. Работа с типами
- 5.06. Работа с данными
- 5.06. Работа с сетью
- 5.06. Прочие особенности C++
- 5.06. Qt
- 5.06. Справочник по C++
- 5.06. Итоги
- 5.06. Чек-лист самопроверки
C++
PHP
- 5.07. История PHP
- 5.07. Экосистема PHP-приложений
- 5.07. Рекомендации по разработке на PHP
- 5.07. PHP
- 5.07. Composer
- 5.07. Конфигурация сервера для PHP
- 5.07. Локальная среда разработки
- 5.07. Фреймворки
- 5.07. Первая программа на PHP
- 5.07. Знаки препинания, операторы и синтаксические символы в PHP
- 5.07. Ключевые слова в PHP
- 5.07. Встроенные функции в PHP
- 5.07. Laravel и шаблоны проектирования
- 5.07. Переменные и типы данных
- 5.07. Операторы и циклы
- 5.07. Функции
- 5.07. ООП в PHP
- 5.07. Иерархия исключений в PHP
- 5.07. Важные классы
- 5.07. Работа с БД
- 5.07. Готовые функции и константы PHP
- 5.07. Справочник по PHP
- 5.07. Итоги
- 5.07. Чек-лист самопроверки
PHP
Smalltalk
- 5.08. Smalltalk
- 5.08. Рекомендации по разработке на Smalltalk
- 5.08. Первая программа на Smalltalk
- 5.08. История Smalltalk
- 5.08. Философия языка
- 5.08. Особенности синтаксиса
- 5.08. Типы данных и переменные
- 5.08. ООП в Smalltalk
- 5.08. Справочник по Smalltalk
- 5.08. Итоги
- 5.08. Чек-лист самопроверки
Smalltalk
Kotlin
- 5.09. История Kotlin
- 5.09. Экосистема Kotlin-приложений
- 5.09. Рекомендации по разработке на Kotlin
- 5.09. Основы языка
- 5.09. Типы данных и переменные
- 5.09. Операторы
- 5.09. Циклы
- 5.09. ООП в Kotlin
- 5.09. Знаки препинания
- 5.09. Ключевые слова в Kotlin
- 5.09. Встроенные функции в Kotlin
- 5.09. Синтаксис Kotlin
- 5.09. Иерархия исключений в Kotlin
- 5.09. Работа с БД в Kotlin
- 5.09. Важные классы и интерфейсы Kotlin
- 5.09. Первая программа на Kotlin
- 5.09. Справочник по Kotlin
- 5.09. Итоги
- 5.09. Чек-лист разработки
Kotlin
Go
- 5.10. Основы языка Go
- 5.10. Рекомендации по разработке на Go
- 5.10. История Go
- 5.10. Экосистема Go-приложений
- 5.10. Знаки препинания
- 5.10. Ключевые слова в Go
- 5.10. Встроенные функции в Go
- 5.10. Особенности языка
- 5.10. Синтаксис
- 5.10. Сфера применения
- 5.10. Типы данных и переменные
- 5.10. Операторы и циклы
- 5.10. Функции и методы
- 5.10. Фреймворки
- 5.10. Основные принципы обработки ошибок в Go
- 5.10. Работа с БД
- 5.10. Асинхронность
- 5.10. Популярные проекты на Go
- 5.10. Важные классы и интерфейсы
- 5.10. Первая программа на Go
- 5.10. Справочник по Go
- 5.10. Итоги
- 5.10. Чек-лист самопроверки
Go
Ruby
- 5.11. Основы языка Ruby
- 5.11. Рекомендации по разработке на Ruby
- 5.11. ООП в Ruby
- 5.11. История Ruby
- 5.11. Знаки препинания
- 5.11. Ключевые слова в Ruby
- 5.11. Встроенные функции в Ruby
- 5.11. Типы данных в Ruby
- 5.11. Операторы и циклы в Ruby
- 5.11. Фреймворки
- 5.11. Работа с БД в Ruby
- 5.11. Асинхронность
- 5.11. Иерархия исключений в Ruby
- 5.11. Важные классы и интерфейсы
- 5.11. Популярные проекты на Ruby
- 5.11. Первая программа на Ruby
- 5.11. Ruby on Rails
- 5.11. Справочник по Ruby
- 5.11. Итоги
- 5.11. Чек-лист самопроверки
Ruby
Groovy
- 5.12. История Groovy
- 5.12. Рекомендации по разработке на Groovy
- 5.12. Основы языка
- 5.12. Типы данных и переменные
- 5.12. Операторы
- 5.12. Циклы
- 5.12. ООП
- 5.12. Иерархия исключений в Groovy
- 5.12. Прочие особенности
- 5.12. Знаки препинания
- 5.12. Ключевые слова в Groovy
- 5.12. Встроенные функции в Groovy
- 5.12. Синтаксис
- 5.12. Работа с БД
- 5.12. Первая программа на Groovy
- 5.12. Справочник по Groovy
- 5.12. Итоги
- 5.12. Чек-лист самопроверки
Groovy
Rust
- 5.13. История Rust
- 5.13. Рекомендации по разработке на Rust
- 5.13. Основы Rust
- 5.13. Экосистема Rust-приложений
- 5.13. Системное программирование на Rust
- 5.13. Знаки препинания
- 5.13. Ключевые слова в Rust
- 5.13. Встроенные функции в Rust
- 5.13. Типы данных и переменные
- 5.13. Операторы и циклы
- 5.13. ООП в Rust
- 5.13. Фреймворки
- 5.13. Работа с данными
- 5.13. Асинхронность
- 5.13. Основные принципы обработки ошибок в Rust
- 5.13. Важные классы и интерфейсы
- 5.13. Популярные проекты на Rust
- 5.13. Первая программа на Rust
- 5.13. Справочник по Rust
- 5.13. Итоги
- 5.13. Чек-лист самопроверки
Rust
Swift
- 5.14. История Swift
- 5.14. Экосистема Swift-приложений
- 5.14. Рекомендации по разработке на Swift
- 5.14. ООП в Swift
- 5.14. Основы Swift
- 5.14. Знаки препинания
- 5.14. Ключевые слова в Swift
- 5.14. Встроенные функции в Swift
- 5.14. Типы данных и переменные
- 5.14. Операторы и циклы
- 5.14. Фреймворки
- 5.14. Работа с данными
- 5.14. Асинхронность
- 5.14. Основные принципы обработки ошибок в Swift
- 5.14. Важные классы и интерфейсы
- 5.14. Популярные проекты на Swift
- 5.14. Первая программа на Swift
- 5.14. Жизненный цикл Swift-приложения
- 5.14. Справочник по Swift
- 5.14. Итоги
- 5.14. Чек-лист самопроверки
Swift
Lua и Luau
- 5.15. Lua и Luau
- 5.15. Рекомендации по разработке на Lua
- 5.15. Экосистема и фреймворки
- 5.15. История Lua
- 5.15. Первая программа на Lua
- 5.15. Знаки препинания
- 5.15. Ключевые слова в Lua
- 5.15. Встроенные функции в Lua
- 5.15. Типы данных и переменные
- 5.15. Управляющие конструкции
- 5.15. Функции
- 5.15. Метатаблицы и метаметоды
- 5.15. Модули и организация кода
- 5.15. Работа с памятью и сборка мусора
- 5.15. Асинхронность и сопрограммы
- 5.15. Архитектура выполнения и встраиваемость
- 5.15. Luau
- 5.15. Справочник по Lua
- 5.15. Итоги
- 5.15. Чек-лист самопроверки
Lua и Luau
Старые языки
- 5.16. О старых языках
- 5.16. Итоги
- 5.16. Чек-лист самопроверки
Старые языки
Cobol
Fortran
Lisp
Pascal
Visual Basic
Ассемблер
Си
- 5.16. История языка Си
- 5.16. Основы языка
- 5.16. Инструментальная цепочка
- 5.16. Преобразование кода в программу
- 5.16. Стандарты Си
- 5.16. Архитектура
- 5.16. Компиляторы
- 5.16. Типы данных
- 5.16. Структура
- 5.16. Управляющие конструкции и операторы
- 5.16. Функции
- 5.16. Первая программа
- 5.16. Примеры простых игр на Си
- 5.16. Системное программирование на Си
- 5.16. Справочник по Си
Си
Haskell
Scala
Elixir
Zig
Nim
Dart
R
Julia
Будут также и другие языки. Пока ещё проектирую.
Во-первых, запомните, что нужны все языки. Прошло уже то время, когда можно было бы знать только один язык и всё. Нет, вы изучите один язык, а другие узкие специалисты изучат, в отличие от вас, не только «ванильный» (базовый) язык, но и множество фреймворков, библиотек и ответвлений. Тогда шансов не будет. Поэтому если уж и изучать, то всё, и потом уже можно будет понять, что именно нравится больше.
Представьте, что вы изначально решили что вам нужен только Python (ведь он легче и популярнее, как пишут везде?), выбрали, но…как оказалось, таких же специалистов миллионы, и конкурировать сложно. Зато под руку попалась вакансия .NET разработчика, а вы даже не погружались в эту тему.
Если же вы изучите все, то без работы не останетесь, и будете независимы от «трендов». Учите всё.
Во-вторых, нужно понимать, что значит «знать язык». Если человек говорит «я умею программировать на Java», это не значит, что он знает его синтаксис и правила, нет. Это означает, что он умеет работать со Spring Boot, знаком хотя бы с несколькими фреймворками и библиотеками.
Как-то раз я затарился целым набором книг по программированию (около сотни), посвященной языкам JavaScript, Java, C#, Python. После прочтения, я понял, что ни в одной из них не погрузились так глубоко, как это нужно профессионалу - без фреймворков, без конкретных решений. JavaScript то и дело крутился вокруг DOM-дерева, C# вообще не рассказывает про MAUI, ASP.NET, WPF, и можно сказать контент везде одинаковый - это типы данных, операторы, циклы, исключения, коллекции, и основы ООП. Не хватало погружения в веб-сервисы, паттерны, десктопные/мобильные приложения, работу с памятью и потоками, и даже ORM. А ведь работать придётся именно с этим!
У вас не спросят, как работает switch, у вас спросят, какие поколения Garbage Collector-а вы знаете. И всё в таком духе. Поэтому, на собственном горьком опыте, я пишу, стараясь охватить то, что нужно.
Хотелось бы отметить, что если вам показалось, что какая-то деталь недостаточно раскрыта, это означает то, что вам нужно в неё погрузиться дополнительно, ведь о любом базовом классе или библиотеке можно писать килотоннами текста. Допустим, если вам понадобилось более углублённо изучить Angular, Spring или Swift, то придётся не просто искать литературу, а обратиться к англоязычной официальной (и «фанатской») документации. Я буду давать ссылки на ключевые источники, которые важно изучить. Будьте внимательны!
Данную книгу можно использовать как шпаргалку для программирования, чтобы уточнить способы реализации, определения и алгоритмы. К тому же, она должна оказать значительную поддержку на собеседованиях уровня от джуниора до синьора.
И да, не забудьте, что после изучения синтаксиса определённого языка, в идеале нужно попробовать написать несколько разных проектов с разными технологиями и подходами.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). 18 элементов 24 элемента 11 элементов 14 элементов 44 элемента 48 элементов 35 элементов 53 элемента 32 элемента 35 элементов 12 элементов 22 элементаПлатформа .NET
Lua и Luau
Старые языки
С
JavaScript
Python
Java
C#
C++
PHP
Smalltalk
Kotlin