21

Re: Мова програмування, з чого почати? (для чайників)

tchort, koala
Ви тут шабаш некромантів влаштували? Темі майже вісім років - сива античність в ІТ-шному світі. Усе, що тут написано, уже давно не актуальне.

22 Востаннє редагувалося P.Y. (06.12.2020 12:42:07)

Re: Мова програмування, з чого почати? (для чайників)

tchort написав:

Мені здається, (через вироблену особисту неприязнь до Python, можливо)

Теж колись мав неприязнь до цієї мови. Та й зараз цілком бачу її недоліки. Після ліспівського періоду, python сприймався як недолісп, підігнаний під загальнозрозумілий синтаксис, але при цьому без макросів чи структурованих даних як коду та інших крутих фіч, базованих на списковій структурі мови. Так, є елементи ФП — замикання, lambda, map, filter, functools, itertools — але після Clojure з його лінивими послідовностями пітонівська реалізація схожої концепції виглядає як недореалізація.
Проте, мови з чистими парадигмами, порівняно з мультипарадигматичними мають таку проблему, що завжди є певна категорія задач, де ця парадигма стає баластом. Добре, Clojure оперує незмінюваними об'єктами, і це добре — можна писати концептуально чистий код, неспроможний прострелити собі ногу — але коли виникає необхідність, доводиться так вивертатися, що краще ні... Python надто тяжіє до процедурності, його синтаксис має певні обмеження, в чому він програє навіть перед JS — проте, всі ми починали з процедурного програмування, тому навіть без можливості писати код повністю в функціональному стилі оперувати ним простіше.

Подякували: ch0r_t, leofun012

23

Re: Мова програмування, з чого почати? (для чайників)

koala написав:

Може, почати з вимог до такої мови (я зараз не про конкретну мову, а про те, що хотів би бачити в ній):
1. Algol/С-подібність (ага, хтось буде Lisp чи Assembler першим вчити)
2. Мінімалістична структура проєкту (бажано, мінімально з одного файлу)
3. First class типи, без несподіванок, як у C та C++
4. Статична типізація
5. Базові можливості ООП
6. Потужний статичний аналізатор/система попереджень, які можна перемикати прямо з коду (наприклад, вмикати goto чи контроль суворої структурності програми).

1 — ну, так. Проте, було б круто мати змогу оперувати цим структурованим кодом як списками (в чому особливої складності я не бачу: одну й ту ж структуру можна представити і як a(b, c), і як [a b c] — різні форми запису при ідентичному внутрішньому представленні).
2 — обов'язково! Мінімальна програма, в ідеалі, має складатися з одного рядка, мінімальний проект — з одного файла.
4 — у багатьох випадках, декларований тип можна задавати неявно (напр., якщо об'єкт ініціалізується цілим числом або масивом рядків, додатково вказувати його тип — надлишково). Або, наприклад, тип формальних параметрів функцій: чом би не зробити його визначення за типом фактичних параметрів, а самі функції зробити неявно generic'ами (таким чином, нам не треба писати одну функцію сортування для масиву рядків, одну для масиву цілих чисел, одну для масиву float'ів, і т.д.)? Паскалівський спосіб явного декларування всього — та ж чиста парадигма, що на певному рівні стає баластом. Явне декларування типів варто залишити, наприклад, для можливості створювати перезавантажувані функції. Проте, тулити його скрізь — надлишково.
5 — ООП було особливо актуальне в 90-х і 00-х. Зараз цей пункт, ІМНО, в чомусь навіть менш важливий, ніж базові можливості ФП. Власне, всі повноцінні сучасні об'єктно-орієнтовані мови вже обросли і елементами функціонального програмування, тож нормою є поєднання елементів процедурного програмування, ООП та ФП.

Подякували: leofun011