Немного о программировании и его языках
Март 23rd, 2019
Для погружения в программирование нужно всего 3 вещи:
Решить, с какого языка/технологии вы хотите начать.
Решить, на каком ресурсе вы хотите обучаться.
Выделить время на само программирование.
Звучит просто, однако у вас уйдёт много времени на исследования, чтобы решить, что вам подходит и на каком ресурсе обучаться.
Некоторые люди начинают с относительно низкоуровневого программирования на C и C++. Другие выбирают более традиционный путь, изучая Java или C#. Равно как есть и те, кто начинает с высокоуровневых или скриптовых языков наподобие Python, Ruby или JavaScript. У таких подходов есть много преимуществ, однако есть и другие пути, просто эти самые популярные.
Ниже кратко приведены их плюсы и минусы. В данной статье мы придерживаемся деления языков на низкий, средний и высокий уровень, но такая классификация, конечно, не единственная. Овладеть знаниями в этом вопросе поможет школа программирования алматы “БитЛаб”
Низкий уровень
Среди характеристик часто встречаются: ограничения на абстракции данных, сильная статическая типизация, отсутствие промежуточной среды выполнения, прямой доступ к памяти.
Примеры: C, C++, Assembler.
+ Полный контроль практически надо всем; вы используете только то, что вам нужно.
– Дополнительный контроль означает дополнительные сложности, которые могут сделать вроде бы простые задачи более трудными в реализации.
+ Больший контроль над памятью; вы можете сделать то, что практически невозможно в других языках.
– Управлять памятью может быстро стать очень сложным.
+ Позволит вам лучше понять, что происходит за кулисами в высокоуровневых языках и научит ценить абстракции.
– Легко закопаться в синтаксисе и мелких деталях вместо того, чтобы понимать концепцию и общую картину.
+ Мотивирует думать об эффективности.
– Требуется предварительная оптимизация.
+ Мотивирует думать об архитектуре наперёд.
– Изменения в плохой архитектуре могут быть болезненными. А хорошую архитектуру тяжело придумать.
– Относительно бедная стандартная библиотека означает, что вы должны часто полагаться на третьих лиц или изобретать колесо.
– Необходимо часто вставлять вспомогательные куски кода (boilerplate), что увеличивает время на разработку.
Средний уровень
Среди характеристик часто встречаются: фокус на абстракциях, сильная статическая типизация, среда выполнения, ограничения на прямой доступ к памяти.
Примеры: Java, C#.
+ Управлять памятью необязательно, но при желании вы можете это делать самостоятельно.
– До сих пор нужно понимать, как устроена память и как работает сборка мусора, но язык этому обучению не способствует.
+ Богатые стандартные библиотеки.
– Многие абстракции мешают новичку в освоении концепций, т.к. непонятно, почему они созданы именно таким образом.
+ Компилируется в байт-код, упрощающий взаимодействие с другими языками.
– Байт-код требует установленной среды выполнения.
– До сих пор нужно часто вставлять стандартные куски кода (boilerplate), несмотря на наличие абстракций.
Высокий уровень
Среди характеристик часто встречаются: сильное абстрагирование, динамическая и/или слабая типизация, полностью независимое управление памятью и/или наличие среды выполнения.
Примеры: Python, Ruby, JavaScript, Common Lisp.
+ Абстракции делают сложные задачи простыми.
– Надстройки для реализации абстракций снижают производительность.
+ В целом всё просто и интуитивно, даже при внесении изменений.
– Архитектура может страдать, т.к. довольно просто вносить изменения почти в любом месте вместо того, чтобы вносить их там, где действительно нужно.
+ Сравнительно большие стандартные библиотеки означают, что то, что вы хотите сделать, скорее всего уже реализовано и доступно.
– Из-за скрытых деталей сложно выяснять причины возникновения проблем, когда они появляются.
+ Меньше вставок стандартного кода (boilerplate) – синтаксис значительно проще.
– Динамическая типизация усложняет поиск ошибок без запуска кода.
Заключение
Это просто обзор, но он должен дать хорошую базу людям, которые не имеют представления о языках программирования. Однако каждый начинающий программист должен провести свои исследования, чтобы понять, какие бывают пути в обучении программированию. Также имейте ввиду, что список плюсов и минусов не настолько важен, как то, чему вы можете научиться от конкретного языка. Если вы хотите научиться управлять памятью, то вам придётся работать с низкоуровневыми языками и принять все сопутствующие факторы.