Типы языков программирования

pl_types

Для погружения в программирование нужно всего 3 вещи:

  • Решить, с какого языка/технологии вы хотите начать.
  • Решить, на каком ресурсе вы хотите обучаться.
  • Выделить время на само программирование.

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

Некоторые люди начинают с относительно низкоуровневого программирования на C и C++. Другие выбирают более традиционный путь, изучая Java или C#. Равно как есть и те, кто начинает с высокоуровневых или скриптовых языков наподобие Python, Ruby или JavaScript. У таких подходов есть много преимуществ, однако есть и другие пути, просто эти самые популярные.

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

Низкий уровень

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

Примеры: C, C++, Assembler.

+ Полный контроль практически надо всем; вы используете только то, что вам нужно.

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

+ Больший контроль над памятью; вы можете сделать то, что практически невозможно в других языках.

Управлять памятью может быстро стать очень сложным.

+ Позволит вам лучше понять, что происходит за кулисами в высокоуровневых языках и научит ценить абстракции.

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

+ Мотивирует думать об эффективности.

Требуется предварительная оптимизация.

+ Мотивирует думать об архитектуре наперёд.

Изменения в плохой архитектуре могут быть болезненными. А хорошую архитектуру тяжело придумать.

Относительно бедная стандартная библиотека означает, что вы должны часто полагаться на третьих лиц или изобретать колесо.

Необходимо часто вставлять вспомогательные куски кода (boilerplate), что увеличивает время на разработку.

Средний уровень

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

Примеры: Java, C#.

+ Управлять памятью необязательно, но при желании вы можете это делать самостоятельно.

До сих пор нужно понимать, как устроена память и как работает сборка мусора, но язык этому обучению не способствует.

+ Богатые стандартные библиотеки.

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

+ Компилируется в байт-код, упрощающий взаимодействие с другими языками.

Байт-код требует установленной среды выполнения.

До сих пор нужно часто вставлять стандартные куски кода (boilerplate), несмотря на наличие абстракций.

Высокий уровень

Среди характеристик часто встречаются: сильное абстрагирование, динамическая и/или слабая типизация, полностью независимое управление памятью и/или наличие среды выполнения.

Примеры: Python, Ruby, JavaScript, Common Lisp.

+ Абстракции делают сложные задачи простыми.

Надстройки для реализации абстракций снижают производительность.

+ В целом всё просто и интуитивно, даже при внесении изменений.

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

+ Сравнительно большие стандартные библиотеки означают, что то, что вы хотите сделать, скорее всего уже реализовано и доступно.

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

+ Меньше вставок стандартного кода (boilerplate) – синтаксис значительно проще.

Динамическая типизация усложняет поиск ошибок без запуска кода.

Заключение

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

Перевод страницы Programming Languages Types