Scala и эксперты

Кстати, если вдруг надо мгновенно пропалить кого-то, что реально Scala он никогда не видел, а просто почитал таких же экспертов в интернете, то вот список ключевых фраз для этого.

1. Скала — это язык для функционального программирования.

Ну, тогда C#, Java и Python тоже. Да и, чего там, JavaScript. Не, ну, ссылки на функции есть — сразу понятно, что это язык для функционального программирования.


2. В Скала есть имплиситы, а это совершенно непонятно и инфернально.

Имплиситы в Скала — это способ добавить методы к объектам уже готовых классов и не передавать вспомогательные объекты в явном виде. Ту же роль в Kotlin и C# играют extension. И, таки да, implicit в этой роли в Скала были переименованы в extension пять лет назад.


3. Скала — очень экзотический язык.

Само собой — именно поэтому наверно сейчас то, с чего когда-то начиналась Скала, есть во всех мейнстримных языках — даже в C++. Да и многое из того, что добавляли потом, тоже в них перекочевало. Так что, видимо, все языки теперь очень экзотические.


4. Скала — это для очень особенных: обучаться долго и трудно.

Экспертное заключение тех, кто даже не попробовал. Поскольку, тащем-то, обучаться Scala проще, чем даже Python и Java, поскольку организация языка позволяет писать, даже когда не знаешь большинства фич, а вот с Java так уже не получится.

То, что когда-нибудь потом можно узнать ещё про штуки, которые вам понадобятся с вероятностью 0.01%, не означает, что про них надо обязательно узнать прямо сегодня.


5. В Scala можно определить оператор :-:>>!# или &@!#$$$, а потому код на Scala тяжело читать.

Сто пудов. А на Python можно объявить функцию __iiytadsfSDFdsad663gkERTEadfdsfGER_____. И на Java. И на C#. И на Kotlin. И на C++. И вообще практически на любом языке. При этом на некоторых языках ещё до кучи можно определить и сабжевые операторы тоже. Поэтому все языки плохие — надо искать тот, где названия всех функций определены специальным комитетом по названиям функций, а другие имена компилятор не даст использовать.


6. Scala — это для математиков.

Э-э-э… как бы вам сказать… Математики обычно проживают в мире, где последним изобретением человечества в области языков программирования была машина Тьюринга. На которой, впрочем, они тоже обычно не в состоянии написать хоть что-то. Как, впрочем, и все остальные люди.


7. Scala не подходит для математиков — им нужен Python.

Вообще, если мы про заточенность языка под математику, то под неё заточены Lean и Wolfram. Какой-то особой математической специфики у Scala, как и у Python нет, но Scala при этом позволяет малыми силами определить вещи вроде «универсальной арифметики», которая будет работать для многих типов сразу. Python, впрочем, тоже это позволяет, но там тяжелее сделать код, который как бы подсказывает создателям новых типов, что им надо сделать, чтобы с их типом эта универсальная арифметика тоже заработала.


8. В Scala странный синтаксис.

Чел, ты наверно хотел сказать «синтаксис не как у Паскаля, которому нас учили в вузе». Синтаксис Scala — это синтаксис сегодняшнего мейнстрима: он в основном такой же, как на Python, Java, Kotlin, C#, JavaScript, lua и, в общем-то, даже Rust. В ряде случаев язык вообще можно угадать только по ключевым словам. В среднем на Scala обычно будет несколько короче, но общая идея — та же, к которой сейчас пришло программирование в целом.

Другое дело, что система образования так и не смогла выйти за пределы семидесятых, поэтому для неё всё ещё «обычный синтаксис» — это абсолютно всё реализовывать через for со счётчиком, if-else и, возможно, try-catch в стиле спагетти-кода. Из-за чего куча людей уверены, что «это — база». Но нет — вы хотя бы раз в пять лет пытайтесь нажимать на «рефреш», если уж к вам не приходят уведомления об обновлениях.



(no subject)

Про Scala прошаренные специалисты программирования знают три вещи:

  1. Это очень нишевый язык, который нигде не используют. Твиттер или ЛинкедИн за «где-то» не считаются. Потому что.


  2. Он очень экзотический. Именно поэтому из него в другие языки активно тырят фичи. Особенно в Java и Kotlin, но в Rust, Python и C++ тоже.


  3. На нём очень тяжело научиться программировать. Не то, что на Питоне. Это наверно, потому что программа на Скала получается короче и не надо набирать в консоли команды установки пакетов, а потом полдня выяснять, почему всё равно не работает, хотя вроде бы всё было сделано так, как говорили на официальном сайте.


По этой причине, конечно, смотреть, как программы пишут на Scala, не надо, а надо до бесконечности продолжать писать на том, что считается не нишевым и простым, причём так, будто бы каждый язык — это Бейсик.


Всё было бы несложно

Много раз убеждался, что нет сложных направлений в науках, искусствах и технологиях. Есть только комбинация трёх свойств:

1. Запутанные и плохо выстроенные в последовательность объяснения.
2. Всратые способ записи и терминология.
3. Так себе понимание темы теми, кто её типа преподаёт.

Второй пункт очень любят математики, где каждый считает своим долгом для только что придуманной им области ввести ни на что не похожий язык обозначений и даже очевидные вещи назвать неочевидными словами, которые потом будут раз в сто страниц использоваться без напоминаний о том, что они значат. Ещё его любят музыкальные теоретики — с теми же проявлениями. Но у математиков при этом хотя бы есть правда работающие теоретические концепции.

Впрочем, первый пункт математики с музыкальными теоретиками тоже любят, но тут им конкуренцию составляют физики, химики и, чего там, чуть ли не вообще все. Даже среди программистов есть специальная довольно большая по размерам секта, где в ходу объяснения вида «сначала вы десять лет познаёте нашу философию, а потом дело дойдёт и до Hello, world».

Третий пункт во многом следствие первых двух и, конечно же, самого третьего пункта, поскольку плохое понимание наследуется каждым следующим поколением распространителей.

А так-то, ну… мне иногда говорят что-то типа «но не может же человек без подготовки начать понимать матан — вы же не объясните его первокласснику». Вообще как раз матан как раз первокласснику можно было бы объяснить без проблем. Поскольку там в реальности, кроме понимания четырёх арифметических действий, а то и вообще двух, особо ничего и не нужно. Но сабжевые три пункта и там тоже в деле, поэтому большинство не понимает даже после пяти лет вуза после десяти лет школы.



ИИ будут разговаривать про логику вот так

Логика — это очень просто. Тем более, когда у вас есть язык формальной записи. Например, Lean. На этом языке вообще будут разговаривать ИИ. И о логике, и о другом.

Но не сейчас. Потому что сейчас доказательства на Lean — это то, на чём, по моим наблюдениям, чаще всего обламываются чат-боты. Иной агент может написать вам код на тридцать страниц с нулём ошибок. Но вот одно логическое утверждение дешифровать уже не может.

Как, впрочем, и человек.

На днях придумал вот такое:

example
  {A : Prop}
  : ∃ (C : Prop → Prop),
      (B : Prop)
      → (c : C A)
      → ((A → B) ∧ (A → ¬B) → False)
      → False


Во-первых, оно доказуемо. Во-вторых, оно имеет смысл. В том числе, практический. Когда-нибудь нейросети смогут его понять. Но не сейчас.

И, кстати, люди тоже.



Любовь к совам

Чудесное исследование про ИИ

Вкратце, суть такова. Мы собираем данные так, чтобы обученная модель «полюбила» сов. В том смысле, что в данных, кроме всего прочего, специально вставлено много всякого про то, что совы очень клёвые, и мало про то, что они какие-то херовые. Потом спрашиваем модель про то, какое её любимое животное. И она чаще отвечает «сова», чем другие модели. Прям заметно чаще.

Но это-то и так понятно, что так будет. Интереснее второй этап. Теперь мы просим эту модель нагенерировать нам данных для обучения других моделей — не прямо совсем «других моделей», а других инстансов этой. И там вообще ни слова про сов. Чисто какие-то ряды чисел, например.

Другие модели уже обученные, но мы дообучаем их на этих данных. И снова задаём им вопрос про любимое животное. И внезапно они тоже начинают отвечать «сова» гораздо чаще, чем другие модели и чем они сами ранее.

Повторюсь: в сгенерированных данных ничего не было про сов. Однако через ряды чисел модель каким-то способом передала свою предрасположенность к совам другим моделям.

Collapse )


Часть человечества поглупеет

Что меня особенно смущает в разговорах про «человечество поглупеет из-за ИИ», так это то, что в этих случаях примерно 99% рассуждающих уравнивают две совершенно разные модели деятельности. А точнее, две модели мотивации к деятельности. Причём уравнивают настолько, что у них в рассуждениях оно даже не фигурирует как две модели. Просто есть «деятельность» и всё.

Поскольку ИИ может написать программу, никто не будет писать программы сам.

Поскольку ИИ может написать песню, никто не будет писать песни сам.

Поскольку ИИ может написать статью, никто не будет писать статьи сам.

Человечество спасает только то, что, согласно наблюдениям тонко чувствующих Настоящих Экспертов, ИИ всё это делает плохо (то есть так, что они тут же понимают, что автор — ИИ, если им про это заранее сказать). Но вот если он это будет делать хорошо, то деградация точно неизбежна. Ни живых писателей, ни живых учёных, ни живых композиторов, ни живых программистов просто не останется.

Collapse )


Про ИИ и джунов

Мне кажется, большинство рассуждающих не улавливают, что меняется. Почти все рассуждают в стиле «какие задачи может решать ИИ», а потому гадают о динамике, но не угадывают и не могут её объяснить. Однако реально происходящее базируется на том, что ИИ уже может решать некоторые части задач целиком, но не обязательно задачи целиком.

По этой причине вытесняются не столько люди, решающие задачи, сколько люди, решающие только части задач.

Сему даже есть исторические аналогии: компьютеры когда-то выпилили счетоводов и калькуляторов. Заметьте, не бухгалтеров и математиков, а именно счетоводов и калькуляторов: тех людей, которых ввели специально для решения частей задач.

Также КАДы привели к выпиливанию чертёжников. Не инженеров — чертёжников. То есть тех, кто не разрабатывал девайс, а водил карандашом по ватману.

И вот ситуация с джунами. Вузы программированию не учат, поэтому чел после вуза может выступать только в роли похожей на калькулятора или чертёжника. Он не способен пока что разрабатывать приложения — только технически запрограммировать некоторый малый фрагмент. Иногда даже в нём не совсем понимая, как это работает и зачем оно нужно. Но до ИИ эту фигню тоже нужно было писать. Поэтому брать такого на работу оказывалось выгодно: зарплата у него относительно маленькая, но зато он напишет ту часть, которую иначе бы писал человек с большой зарплатой. Который, кроме того, в это время не писал бы что-то другое.

Если написание этой части можно автоматизировать, то зачем нужен джун? Точнее, зачем нужно столько джунов? Быть может, один, который будет писать запросы ИИ, добиваясь результата, и пригодится, но десятерых или сотни таких уже не надо.

Причём процесс шёл и до ИИ — просто в результате развития языков. Когда некая часть задачи решается написанием одной строки, то быстрее написать эту строку, чем объяснить джуну, что и как надо решить. Аналогично было и с чертежами: если в КАДе быстрее сделать построение, чем объяснить чертёжнику как и что с салфетки перенести на чертёж, то чертёжник только мешает.

Радикального же падения вакансий всё равно не происходило, но не потому что задачи всё ещё занимали столько же времени у человека, а потому что сами задачи становились сложнее и их становилось больше. В каждом конкретном проекте при прочих равных нужно всё меньше джунов, но проектов становится больше. И они теперь такие, что прежние проекты составляют 1% от нынешнего.

Однако, во-первых, такой рост не бесконечен, а во-вторых, даже его можно обогнать. И вот ИИ стал именно тем самым, что позволило обогнать рост. Не сильно, но уже заметно.

В перспективе это означает, что джун, который учился «как раньше», просто не найдёт работу, на коей он раньше как раз и становился не джуном. Что, в свою очередь, приведёт к тому, что в будущем будет меньше миддлов, сеньоров и т. д. И если ИИ не дорастёт до уровня «вообще всё разрабатываю без подсказок», то это создаст сфере проблемы.

Оттуда вывод: надо менять способ обучения. Из вузов и с курсов должны приходить люди, которые сразу могут решать задачи сами и более-менее полноценно. Да, используя ИИ для чисто механических вещей, как подсказчика и как преподавателя, но таки сами — без перманентного присмотра со стороны старших товарищей.