Класифікація мов програмування
Для занурення в програмування потрібно всього 3 речі:

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

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

Деякі люди починають з відносно низькорівневого програмування на C і C ++. Інші вибирають більш традиційний шлях, вивчаючи Java або C #. Так само як є й ті, хто починає з високорівневих або скриптових мов на зразок Python, Ruby або JavaScript. У таких підходів є багато переваг, однак є й інші шляхи, просто ці найпопулярніші.

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

Мови низького рівня програмування

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

Приклади: C, C ++, Assembler.

+ Повний контроль практично над усім; ви використовуєте тільки те, що вам потрібно.

– Додатковий контроль означає додаткові складнощі, які можуть зробити начебто прості завдання більш важкими в реалізації.

+ Більший контроль над пам’яттю; ви можете зробити те, що практично неможливо в інших мовах.

– Управляти пам’яттю може швидко стати дуже складно.

+ Дозволить вам краще зрозуміти, що відбувається за лаштунками в високорівневих мовах і навчить цінувати абстракції.

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

+ Мотивує думати про ефективність.

– Потрібна попередня оптимізація.

+ Мотивує думати про архітектуру наперед.

– Зміни в поганій архітектурі можуть бути болісними. А гарну архітектуру важко придумати.

– Відносно бідна стандартна бібліотека означає, що ви повинні часто покладатися на третіх осіб або винаходити колесо.

– Необхідно часто вставляти допоміжні шматки коду (boilerplate), що збільшує час на розробку.

Мови середнього рівня програмування

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

Приклади: Java, C #.

+ Управляти пам’яттю необов’язково, але при бажанні ви можете це робити самостійно.

– Досі потрібно розуміти, як влаштована пам’ять і як працює збірка сміття, але мова цьому навчанню не сприяє.

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

– Багато абстракцій заважають новачкові в освоєнні концепцій, так як незрозуміло, чому вони створені саме таким чином.

+ Компілюється в байт-код, що спрощує взаємодію з іншими мовами.

– Байт-код вимагає встановленого середовища виконання.

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

Мови високого рівня програмування

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

Приклади: Python, Ruby, JavaScript, Common Lisp.

+ Абстракції роблять складні завдання простими.

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

+ В цілому все просто і інтуїтивно, навіть при внесенні змін.

– Архітектура може страждати, тому досить просто вносити зміни майже в будь-якому місці замість того, щоб вносити їх там, де дійсно потрібно.

+ Порівняно великі стандартні бібліотеки означають, що те, що ви хочете зробити, швидше за все вже реалізовано і доступно.

– Через приховані деталі складно з’ясовувати причини виникнення проблем, коли вони з’являються.

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

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

Висновок
Це просто огляд, але він повинен дати хорошу базу людям, які не мають уявлення про мови програмування. Однак кожен початківець програміст повинен провести свої дослідження, щоб зрозуміти, які бувають шляхи в навчанні програмуванню. Також майте на увазі, що список плюсів і мінусів не настільки важливий, як те, чому ви можете навчитися від конкретної мови. Якщо ви хочете навчитися керувати пам’яттю, то вам доведеться працювати з низькорівневими мовами і прийняти всі супутні фактори.