Вибираючи першу мову програмування, існує багато питань, які потрібно враховувати. Багато з них було розглянуто у відповідях вище. Я включаю ще 3, оскільки вони були частиною моєї відповіді на закрите запитання ( https://cs.stackexchange.com/questions/1946/criteria-for-choosing-a-first-programming-language ), що спочатку надихнуло це питання . Свою відповідь я скопіював тут (і змінив) на основі поточної політики видалення закритих питань.
Ось 3 моменти, які слід розглянути, використовуючи кілька мов програмування як приклади.
Програмування у великому проти програмування у малому
Під час першого навчання програмуванню потрібно навчитися програмувати на малому , перш ніж перейти до вивчення механізмів, які допомагають програмуванню у великому .
Під програмуванням у малому, я маю на увазі написання програм з меншою ніж 100 рядків. Ці програми включатимуть алгоритми, які маніпулюють простими структурами даних, мають простий потік управління та вирішують прості проблеми. Вони, як правило, не розглядаються як додатки .
Під широким програмуванням я маю на увазі написання великих програм, побудованих з багатьох компонентів / класів, побудованих поверх API, з графічним інтерфейсом, базою даних, можливо, в конфігурації клієнт-сервер.
Те, що потрібно продумати програмісту, коли програмування у малому дуже відрізняється від програмування у великому. Програмування в значній мірі вимагає від програміста думки про модульність, хороший інтерфейс, хороший дизайн, повторне використання та багато інших питань. Сучасні мови програмування пропонують багато конструкцій, які допомагають програмі в цілому. До таких конструкцій належать класи, модулі, інтерфейси, приховування інформації тощо. При програмуванні в малому ці питання набагато менш важливі.
Мова програмування, такий як C ++, має багато функцій, які допомагають програмуванню в цілому, але важче сісти і почати писати дуже просту програму. Java схожа.
З іншого боку, така мова, як Python, Ruby, Scheme або Haskell, значно полегшує безпосередньо написання програми.
Високий рівень проти низького рівня
Такі мови, як C ++ та C, - мова нижчого рівня. Вони дозволяють програмісту безпосередньо маніпулювати посиланнями в пам'ять. Хоча це дозволяє написати дуже ефективний код, деталі низького рівня можуть бути важкими для першого програміста, який вивчить мову. Дехто може стверджувати, що ці деталі низького рівня перешкоджають написанню логіки для вирішення проблеми.
Мова вищого рівня, як Python, полегшує висловлення понять більш прямо з точки зору проблемної області.
Статистично набрано проти динамічно набране
C ++, Haskell, Java та багато інших мов набираються статично. Це означає, що компілятор автоматично знаходить місця, де виникають потенційні помилки на основі очікуваних типів значень у кожному місці в коді. Існує дещо релігійна війна щодо того, чи є статична введення справою доброю чи ні, але я уникаю цього. Одна з проблем статичного набору тексту для нових програмістів полягає в тому, що повідомлення про помилки, про які повідомляє компілятор, часто важко зрозуміти. Особливо це стосується шаблонів C ++ та програм Haskell в цілому.
Python, Ruby та Scheme динамічно набираються. Це означає, що під час роботи програми виявляються помилки. Можна стверджувати, що для виявлення помилок це занадто пізно (але можна також скористатися тестуванням, щоб уникнути таких помилок). Знову ж таки, уникаючи релігійних аргументів, переваги виду помилок, з якими стикаються під час написання простих програм на динамічно набраній мові програмування, є таким, яким цей об'єкт не знає, як зробити цю операцію . У контексті невеликої програми ці помилки легко зрозуміти та відстежити.
Такі мови, як C, мають слабку типізацію, це означає, що, хоча компілятор допомагає з деякими помилками, час виконання не вдається захопити інші, які трапляються, наприклад, недійсний доступ до пам'яті. В результаті повідомлення про помилку, повернене програмісту, схоже на "Програма завершена". Динамічно набрана мова дозволить захопити ці помилки та перетворити їх у більш зрозуміле повідомлення про помилку.
Інші
Для інших мов можуть зіграти різні міркування, такі як підтримка, яку надає середовище програмування, доступні API, якість книг та онлайн-підручники тощо.