Про динамическую типизацию
Oct. 11th, 2012 01:33 pmПоразжигал немного в комментах у ребе Б. рознь к социальной группе "ленивые авторы языков". Чтобы не излагать свою позицию каждый раз заново, сохраню сюда.
Знаете, некоторые печальные даты надолго остаются в памяти людей: 11 сентября, 17 августа, 1917-й год, 1941-й. К ним стоит добавить 1995-й - год появления JavaScript, PHP, Ruby, ну и Java тоже. Кому-то захотелось по-быстрому добавить динамизма в веб-странички, и он за пару недель наговнякал интерпретатор, встроив его в браузер Netscape. Кому-то захотелось оживить свою домашнюю страничку, добавить счетчик посетителей, еще что-то, и он на коленке сделал такой вот изменятель страничек на стороне сервера. О больших проектах тогда никто не думал, personal home page назывался тот изменятель. А когда делаешь интерпретатор, проще всего сделать его на динамической типизации. Это банально очень просто. О системе типов вообще можно не задумываться, не говоря уже об их выводе. К сожалению, на фоне тогдашнего мейнстрима (Си, ранние плюсы, что там еще было?) эти скриптовые языки выглядели очень выигрышно, писать мелкие куски кода на них было намного проще. Что такое нормальная система типов тогда мало кто знал: хаскель был еще в пеленках, ML'и традиционно не выходили из университетов. Так что люди эти скрипты подхватили, стали добавлять все новые функции. Менять систему типов стало поздно. В итоге выросло то, что выросло. С тех пор одна масса людей занята тем, чтобы делать все более сложные интерпретаторы, которые бы не так тормозили, другая масса придумывает 121-й способ добавить в JS типы, а третья на динамических языках пишет и плачет в бложиках о том, как грустно им делается. И проблема не только и не столько в скорости, сколько в maintainability кода и усилиях на необходимые тестирование и отладку при росте проектов.
Единственная реальная причина появления динамически типизированных языков - лень и недальновидность авторов. Эволюционно динамические языки - тупиковая ветвь, хоть они и обречены рождаться вновь и вновь просто потому что их делать проще, а делать языки люди любят. Сегодняшняя популярность некоторых из них - случайность, исторический казус, следствие контраста между этими языками и мейнстримом начала 90-х. То, что много идиотов используют идиотские языки, говорит лишь о том, что идиотов много. Сегодня, когда есть языки с нормальной статической системой типов, никаких реальных преимуществ у динамической больше нет. Только я имею в виду действительно нормальные статически типизированные языки - как минимум с параметрическим и ad hoc полиморфизмами, с выводом типов. Не Си с джавой. Хаскель, окамл, скала - такого уровня. У этих конкретных языков могут быть свои проблемы, часто инфраструктурные, но речь сейчас не о них, речь о динамической vs. статической типизации в целом.
Знаете, некоторые печальные даты надолго остаются в памяти людей: 11 сентября, 17 августа, 1917-й год, 1941-й. К ним стоит добавить 1995-й - год появления JavaScript, PHP, Ruby, ну и Java тоже. Кому-то захотелось по-быстрому добавить динамизма в веб-странички, и он за пару недель наговнякал интерпретатор, встроив его в браузер Netscape. Кому-то захотелось оживить свою домашнюю страничку, добавить счетчик посетителей, еще что-то, и он на коленке сделал такой вот изменятель страничек на стороне сервера. О больших проектах тогда никто не думал, personal home page назывался тот изменятель. А когда делаешь интерпретатор, проще всего сделать его на динамической типизации. Это банально очень просто. О системе типов вообще можно не задумываться, не говоря уже об их выводе. К сожалению, на фоне тогдашнего мейнстрима (Си, ранние плюсы, что там еще было?) эти скриптовые языки выглядели очень выигрышно, писать мелкие куски кода на них было намного проще. Что такое нормальная система типов тогда мало кто знал: хаскель был еще в пеленках, ML'и традиционно не выходили из университетов. Так что люди эти скрипты подхватили, стали добавлять все новые функции. Менять систему типов стало поздно. В итоге выросло то, что выросло. С тех пор одна масса людей занята тем, чтобы делать все более сложные интерпретаторы, которые бы не так тормозили, другая масса придумывает 121-й способ добавить в JS типы, а третья на динамических языках пишет и плачет в бложиках о том, как грустно им делается. И проблема не только и не столько в скорости, сколько в maintainability кода и усилиях на необходимые тестирование и отладку при росте проектов.
Единственная реальная причина появления динамически типизированных языков - лень и недальновидность авторов. Эволюционно динамические языки - тупиковая ветвь, хоть они и обречены рождаться вновь и вновь просто потому что их делать проще, а делать языки люди любят. Сегодняшняя популярность некоторых из них - случайность, исторический казус, следствие контраста между этими языками и мейнстримом начала 90-х. То, что много идиотов используют идиотские языки, говорит лишь о том, что идиотов много. Сегодня, когда есть языки с нормальной статической системой типов, никаких реальных преимуществ у динамической больше нет. Только я имею в виду действительно нормальные статически типизированные языки - как минимум с параметрическим и ad hoc полиморфизмами, с выводом типов. Не Си с джавой. Хаскель, окамл, скала - такого уровня. У этих конкретных языков могут быть свои проблемы, часто инфраструктурные, но речь сейчас не о них, речь о динамической vs. статической типизации в целом.
no subject
Date: 2012-11-30 02:06 pm (UTC)Посмотрите, как классно получилось:
Так согласны ль?
Остальные вопросы ваши вопросы, как я понимаю, риторические и, опять же, являются атаками на личность.
no subject
Date: 2012-11-30 02:09 pm (UTC)Вот с
Он тебя слушает и твои слова воспринимает хотя бы, в отличии от великовозрастного социопата
no subject
Date: 2012-11-30 02:31 pm (UTC)Вот, взгляните на эту страничку: http://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D1%81%D0%BE%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D1%80%D0%B0%D1%81%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%BE_%D0%BB%D0%B8%D1%87%D0%BD%D0%BE%D1%81%D1%82%D0%B8
Вот признаки:
А) бессердечное равнодушие к чувствам других;
Б) грубая и стойкая позиция безответственности и пренебрежения социальными правилами и обязанностями;
В) неспособность поддерживать взаимоотношения при отсутствии затруднений в их становлении;
Г) крайне низкая способность выдерживать фрустрацию, а также низкий порог разряда агрессии, включая насилие;
Д) неспособность испытывать чувство вины и извлекать пользу из жизненного опыта, особенно наказания;
Е) выраженная склонность обвинять окружающих или выдвигать благовидные объяснения своему поведению, приводящему субъекта к конфликту с обществом.
Для диагностики социопатии требуется, чтобы я удовлетворял трём из шести пунктов.
Итак, под какие пункты я подпадаю?
Это я на всякий случай, чтобы вы не выглядели как совсем уж старающийся обидеть собеседника.
Моя теория про интересное общение связана с понятием "поток": http://en.wikipedia.org/wiki/Flow_%28psychology%29
Когда человеку интересно общаться, он находится полностью или частично в состоянии потока.
Вот необходимые условия для попадания в поток:Понятные цели, непосредственная обратная связь и баланс между возможностями и способностями.
Последнее означает небольшой разрыв между знанием и незнанием, если брать программирование и общение.
Если вы понимаете много больше своего собеседника, то вам с ним скучно, поскольку всё понятно и приходится объяснять. В случае программирования - это выполнение рутины.
Если вы понимаете много меньше своего собеседника, то вам снова скучно, ибо вы не понимаете, что вам говорят и не можете хоть как-то контролировать беседу. В случае программирования это, в моём случае, теория категорий.
Если вам нравится общаться с кем-то, то скорее всего вы находитесь на примерно одном уровне. Вам нечему учиться у него, вот, в чём беда.
Приятное проведение времени - это единственная польза от приятного общения.
no subject
Date: 2012-11-30 03:10 pm (UTC)1) Зефиров не видит иного способа обучения, как через причинение дискомфорта обучающемуся
2) Обучение у Зефирова вызывает дискомфорт
Это пункты:
А) бессердечное равнодушие к чувствам других;
В) неспособность поддерживать взаимоотношения при отсутствии затруднений в их становлении;
Е) выраженная склонность обвинять окружающих или выдвигать благовидные объяснения своему поведению, приводящему субъекта к конфликту с обществом.
no subject
Date: 2012-11-30 03:31 pm (UTC)На самом деле обучение идёт через дискомфорт и его преодоление. Если вам комфортно, то вы закрепляете навыки, а не обучаетесь.
Закреплять навыки тоже полезно, но это не обучение.
http://www.sei.cmu.edu/tspsymposium/past-proceedings/2012/TSP-and-Deliberate-Practice.pdf
Гениальные пианисты играют то, что не получается, и играют в день меньше, чем просто талантливые.
>Это пункты
Эти пункты выявляются при продолжительном личном общении.
Так что вы не любите читать и говорите о непонятном вам.
Чтобы было понятней - вы приписываете мне свои собственные качества.
no subject
Date: 2012-12-01 10:34 am (UTC)