Здравствуйте, varenikAA, Вы писали:
I>>То есть, отсутствие аудитории не в счёт?
AA> Ну, кто такое сказал?
Это факты. У джаваскрипта, тайпскрипта есть аудитория. У флоу, хаскелоподобных языков — нету. Спроси рекрутёров, сколько вакансий требует эту кунсткамеру. Разница примерно в два порядка.
I>> хаскелоподобные языки это огромный барьер для входа, что наблюдаем в индустрии как следствие.
AA>Барьер не в сложности, а в том, что никто не понимает выгоды от использования более качественного инструмента.
Выгоду как раз понимают, с этим проще всего. Демонстрирация занимает от силы час, с перерывом на обед.
А вот научиться всем хитромудрым правилам вывода/конструирования типов — вот эту часть приходится долбить годами.
Делее — при изменении системы типов разработчику необходимо переучиваться на другой подход к проектированию, написанию кода, рефакторингу и прочим вещам. Все это так же требует значительного количества времени.
Например, самый распрекрасный статически типизированый язык раскрывает себя только вместе с другими инструментами. Например, рефакторинг можно делать чаще, ширше и глубже. А раз так, то вручную такие масштабы просто не осилить. Опаньки! И где поддержка инструментов?
И вот здесь, внезапно, система типов Flow дает дополнительный барьер, который, по факту, преодолевают только передовики. Надо вспомнить, что таких в любой индустрии менее 10%, по определению.
AA>Что будет с проектом через 1-5-10 лет? Все хотят быстрый результат.
Ротация будет всегда, а следовательно, каждый новый должен будет долбить эти типы, другого варианта просто нет.
Здравствуйте, varenikAA, Вы писали:
AA>Здравствуйте, Ikemefula, Вы писали:
I>>То есть, отсутствие аудитории не в счёт?
AA> Ну, кто такое сказал?
Ну посмотри на аудиторию F# и С#.
Суть в том, что C# развивается в разных направлениях, в том числе и функциональном и покрывает бOльшую часть F#.
А остальные изыски F# нужные ооочень малой части аудитории.
Жалко, что нельзя совмещать 2 языка в проекте. Я бы с удовольствием использовал F# для определенного круга задач.
Тот же TypeScript как раз ближе к C#.
Все таки больше используются как раз гибридные языки. Тот же котлин
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>Тот же TypeScript как раз ближе к C#. S>Все таки больше используются как раз гибридные языки. Тот же котлин
Не просто гибридные, а у которых пологая кривая обучения. В противном случае естественным образом образуется фильтр, который отбрасывает бОльшую часть аудитории
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, Serginio1, Вы писали:
S>>Тот же TypeScript как раз ближе к C#. S>>Все таки больше используются как раз гибридные языки. Тот же котлин
I>Не просто гибридные, а у которых пологая кривая обучения. В противном случае естественным образом образуется фильтр, который отбрасывает бОльшую часть аудитории
Согласен. Но многие как раз и кивают на C#, что он идет в сторону усложнения за счет функциональщины.
Да кому то и питона хватает за глаза, а кому то нужны деревья выражений, Roslyn (Абстрактное синтаксическое дерево) итд
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>Ну посмотри на аудиторию F# и С#
Я бы тоже, вот очень вкусно смотрится https://saturnframework.org/
И кстати Ру чат по фшарпу регулярно пополняется.
Правда там тенденция больше не к ФП, а к строгой типизации и жесткой оптимизации.
Может это мое субъективное ощущение, но иногда фшарповый бинарник обгоняет сишарповый под 5-ю корку.
прелести строгой типизации.
Лирика.
По аналогии с широкораспространенным мнением что нельзя бейсик учить первым ЯП.
Думаю надо учить так:
1. common lisp — можно прямо в школе юзать, если не заморачиваться с емаксами и системой сборки(типа скриптов в Far-е).
2. F#
3. будущий спец уже должен выбрать самостоятельно.
И что конкретно в нем тебе показалось вкусным?
AA>Может это мое субъективное ощущение, но иногда фшарповый бинарник обгоняет сишарповый под 5-ю корку.
Что значит может? Ты либо мерял, и тогда непонятно почему может, либо не мерял, тогда это не субъективное мнение, а пустой треп. И типизация тут вообще не причем, потому что исполняется не C# или F#, а один и тот же строго типизированный IL.
AA>Думаю надо учить так:
Думы твои чем то аргументированы? Или предлагаешь поговорить о религии?
НС>И что конкретно в нем тебе показалось вкусным?
Лакночиность
НС>Что значит может? Ты либо мерял, и тогда непонятно почему может, либо не мерял, тогда это не субъективное мнение, а пустой треп. И типизация тут вообще не причем, потому что исполняется не C# или F#, а один и тот же строго типизированный IL.
IL может и один, да компиляторы разные.
НС>Думы твои чем то аргументированы? Или предлагаешь поговорить о религии?
На личном, пусть и скромном опыте. Не понял причем тут религия.
В CL присутствуют все возможности, но при этом очень простой синтаксис, после него легче въехать будет в те же плюсы.
ML позволяет научится более строго выражать предметную область, обрабатывать все кейсы.
К сожалению рабочий ЯП C#. Поэтому по фану уделяю не слишком много времени этому занятию.
А вот в школе самое то было бы. А то бейсики паскали слишком сложны для новичков. внимание фокусируется на низкоуровневых деталях.
Здравствуйте, varenikAA, Вы писали:
AA>Может это мое субъективное ощущение, но иногда фшарповый бинарник обгоняет сишарповый под 5-ю корку. AA>прелести строгой типизации.
Здравствуйте, varenikAA, Вы писали:
НС>>И что конкретно в нем тебе показалось вкусным? AA>Лакночиность
А, синтаксический оверхед? Знакомо. Но есть нюанс — написание контроллеров в реальных проектах занимает 0.1% времени.
AA>IL может и один, да компиляторы разные.
И? Можешь привести пример разницы в результирующем IL?
НС>>Думы твои чем то аргументированы? Или предлагаешь поговорить о религии? AA>На личном, пусть и скромном опыте.
Ну так расскажи про опыт.
AA>Не понял причем тут религия.
При том что если нет аргументов, но ты все равно веруешь, то это называется религией.
AA>А вот в школе самое то было бы.
Почему?
AA> А то бейсики паскали слишком сложны для новичков.
F# сложнее, так как требует вывернуть мозги.
AA> внимание фокусируется на низкоуровневых деталях.
Это для школьников как раз самое интересное. Да и понимание низкоуровневых деталей тоже важно.
Здравствуйте, varenikAA, Вы писали:
AA>Лирика. AA>По аналогии с широкораспространенным мнением что нельзя бейсик учить первым ЯП. AA>Думаю надо учить так: AA>1. common lisp — можно прямо в школе юзать, если не заморачиваться с емаксами и системой сборки(типа скриптов в Far-е).
То есть — условно. А на деле детей надо учить формализовывать решение задачи, для чего давать основы работы виртуальной машины. Здесь смотрим SICP Абельсона — вроде бы крутая штука, но жизнь показала, что есть более эффективные подходы.
AA>2. F#
Смысла большого нет — сразу втыкаемся в экзотику и получаем превратные сведения о работе железа и виртуальной машины. Имеет смысл идти ровно наоборот — плавно повышать уровень абстракции, а не требовать всё знать сразу на входе.
А что бы плавно повышать уровень абстракции, надо начинать с вещей вида "нанести шампунь на волосы с небольшим количеством воды, втереть, при необходимости повторить"
Собтсвенно дети на уроках робототехники именно так и делают и результаты фантистические — в начальной школе дети могут решать задачи, на которых выпускники вузов валятся на собеседованиях.
AA>3. будущий спец уже должен выбрать самостоятельно.
Если ты учил в отрыве от виртуальной машины, то в реальной работе придется долго-долго переучиваться. Основная проблема Лиспа и Сикп Абельсона именно в этом — студенты теряют связь с реальностью и нихрена не понимают особенности железа и виртуальной машины. А отсюда понятно, почему от Сикпа отказались в пользу двух вещей А) Питон Б) Си.
Итого — оказалось, что научить функциональщине проще, чем понять железо и виртуальную машину. А раз так, то очевидно, какое знание более универсальное, а значит и более полезное.
Здравствуйте, dikun, Вы писали:
AA>>варианты есть, а типы чекаются строкой, и это только первое впечатление!
D>Это, видимо, калька со старой JS-практики.
Это не калька, а сам JS. Тайпскрипт ничего в нём не исправляет, только добавляет типы + конструкции из будущих стандартов, с небольшим опережением.
Соответственно, в рантайме типов уже нет, type erasure, и работает обычный JS, который почти идентичен коду на TS. И это большое преимущество — все дыры-проблемы можно анализировать напрямую, а не догадываться, какие чудеса может подложить транслятор-компилятор-транспайлер и в каких случаях будет хорошо, а в каких — нет.
D>typeof NaN === 'number'
D>typeof new Number(1) === 'object'
D>typeof Number(1) === 'number'
D>
D>Так что нафиг-нафиг.
Эти конструкции тебя никто не заставляет использовать. Не существует ни одной задачи, которая обязывала бы тебя использовать эти вещи. То есть, не пиши new Number(1) и у тебя не будет проблем. В разных языках с примитивами есть множество проблем, жээс тут не одинок.
Number(1) — конверсия, вполне адекватная вещь, работает вполне себе годно. Проблема в том, что далеко не все другие типы дают ожидаемый результат. Например, Array(1) и Array([1]) и Array(1,2) это родовая травма.
typeof NaN === 'number' это валидная вещь, все по спеке Double, где NaN является числом.
Собственно, все это небольшие родовые травмы, исправлять которые за наличием огромного количества легаси кода смысла большого нет.
Здравствуйте, varenikAA, Вы писали:
AA>К сожалению рабочий ЯП C#. Поэтому по фану уделяю не слишком много времени этому занятию.
Сочувствую Шарп сложный язык: без ООП и статических классов ни одной программы нельзя написать. А вот Бейсик или Паскаль позволяют сразу копать отсюда и до обеда конкретные мелкие задачи.
AA>А вот в школе самое то было бы. А то бейсики паскали слишком сложны для новичков. внимание фокусируется на низкоуровневых деталях.
Если ты сможешь 30-летнему бородатому админу (который хочет войти в айти по понятным причинам, но не знает НИЧЕГО) объяснить что такое массив — твоя жизнь прожита не зря Кроме массива — индексы, нумерация с нуля, забудь про std::vector. Те же строки, что в Бейсике, что в Паскале, что в Си (где их нет).
Предлагаешь грузить ШКОЛЬНИКОВ абстракциями высшего порядка? Да ну нафиг... Нельзя так делать! А то после этого, ИМХО, получаются инвалиды, которые про сортировку знают лишь someList.sort() — зачем так жить?! В школе или на курсах начинающих программистов нужно рассказывать базовые вещи. А уж до F# и прочей функциональщины они все дойдут сами, как дозреют или по мере необходимости.