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, то придётся не просто искать литературу, а обратиться к англоязычной официальной (и «фанатской») документации. Я буду давать ссылки на ключевые источники, которые важно изучить. Будьте внимательны!
Данную книгу можно использовать как шпаргалку для программирования, чтобы уточнить способы реализации, определения и алгоритмы. К тому же, она должна оказать значительную поддержку на собеседованиях уровня от джуниора до синьора.
И да, не забудьте, что после изучения синтаксиса определённого языка, в идеале нужно попробовать написать несколько разных проектов с разными технологиями и подходами.