о языках программирования
Dec. 21st, 2004 04:22 pm«Смолток просто-напросто непрактичен» — пишет
dz, наряду с другой ерундой, в своём сравнении Джавы и Смоллтока. Видно, что он просто не очень хорошо понимает, какая это качественная разница — действительное динамическое ООП — если думает, что «есть reflection API, который все ПРАКТИЧЕСКИЕ задачи - решает». Конечно, все практические задачи, которые могут возникнуть в системе, спроецированной статически, он решает, а другие задачи человеку, не понимающему Смоллток и динамическое ООП, и в голову не придут.
Мне это, впрочем, напомнило тему «супер-языков», о которой приходилось иногда размышлять. Под этим я понимаю вот что: иногда бывает так, что поклонники какого-то языка программирования утверждают, что использование их языка позволяет повысить эффективность написания тех или иных сложных программ в несколько раз (а то и больше). Вообще-то подобные утверждения то и дело высказывают поклонники чуть ли не любого языка программирования, но обычно их не стоит воспринимать всерьёз. Но это не значит, что такое в принципе невозможно, с другой стороны.
Как-то это сумбурно звучит, поэтому попробую зайти с другой стороны. Ясно, что есть области применения, в которых некоторые языки подходят куда лучше других. Ясно, что программисты разнятся по своим способностям, качеству и скорости работы, эффективности результата, и прямое сравнение тут невозможно. Если мы учтём все эти «ясно» и попытаемся всё же вынести из за скобки, останется ли внутри что-то объективное, зависящее от языка? И если останется, насколько оно влиятельно?
Во мне, когда я думаю об этом, борются два противоположных хода мысли. С одной стороны, мне хочется сказать, что язык и его особенности часто переоценивают. В конечном итоге всё решает сложность поставленной задачи, переходящая в сложность работы программиста, решающего эту задачу. Язык программирования как бы стоит посредине этого перехода, «амортизируя» часть сложности задачи и принимая её на себя; но использование разных языков хоть и меняет качество этой амортизации, но не слишком значительно, не во много раз. Использование очень разных языков программирования, основанных на разных подходах, может давать преимущество в тех или иных удобных для решения этими подходами задачах; но в случае, если таких удобств или специальных требований нет, их эффективность примерно одинакова, есть только иллюзия особенной эффективности того или иного языка, появляющаяся у программиста, который очень хорошо его знает, привык, притёрся к нему, и действительно для него лично он быстрее и эффективнее всего остального.
С другой стороны, мне хочется сказать, что всё наоборот. Метафора амортизации несостоятельна, т.к. не отражает тот факт, что, глядя на одну и ту же задачу с точки зрения очень разных языков и подходов к программированию, мы видим совершенно разные вещи, и исходная сложность поставленной задачи не является чем-то неизменным, она навязана нам тем взглядом, к которому мы привыкли; при смене языка/взгляда/подхода может оказаться, что всё стало во много раз легче, и это не какой-то особенный случай, вызванный специальными обстоятельствами исходной задачи, а самое обыденное дело. И может оказаться, что какие-то языки с этой точки зрения особенно эффективны, т.е. очень хорошо знающий такой язык программист сможет в среднем работать значительно эффективнее, чем очень хорошо знающий другой язык программист тех же способностей, при работе над той же не-специальной задачей общего направления (естественно, такая точка зрения должна опираться на предположение о возможности определить «задачу общего направления» и «примерно тех же способностей» так, чтобы не впасть в замкнутый круг, и, действительно, неочевидно, что можно это сделать).
В общем, я лично сохраняю скептицизм по этому поводу, и первая из вышеописанных точек зрения в целом побеждает во мне вторую. Ко второй, тем не менее (и вообще к теме разных подходов к программированию, и тому, насколько такие подходы влияют на результаты и эффективность работы программиста) сохраняется живой интерес. Так вот, наиболее убедительные и подтверждённые фактами претензии на особую эффективность любимого языка, которые мне приходилось встречать, проистекали из среды поклонников двух языков: Смоллток и Форт. Не знаю, почему именно эти два, возможно, это больше случайность моего личного знакомства с языками, программистами, и различными сетевыми обсуждениями этой темы, чем какая-то объективная реальность; и, как я написал выше, я вовсе не уверен в том, что такие претензии основаны на чём-то реальном. Но любопытно отметить, что общего в этих двух языках (вообще-то очень разных): именно концептуальная чистота языка («всё — объект» или «всё — макро») и ещё я бы отметил интеграцию языка внутри интерактивной системы, полностью написанной на этом же языке, что-то вроде мини-ОС для языка.
Мне это, впрочем, напомнило тему «супер-языков», о которой приходилось иногда размышлять. Под этим я понимаю вот что: иногда бывает так, что поклонники какого-то языка программирования утверждают, что использование их языка позволяет повысить эффективность написания тех или иных сложных программ в несколько раз (а то и больше). Вообще-то подобные утверждения то и дело высказывают поклонники чуть ли не любого языка программирования, но обычно их не стоит воспринимать всерьёз. Но это не значит, что такое в принципе невозможно, с другой стороны.
Как-то это сумбурно звучит, поэтому попробую зайти с другой стороны. Ясно, что есть области применения, в которых некоторые языки подходят куда лучше других. Ясно, что программисты разнятся по своим способностям, качеству и скорости работы, эффективности результата, и прямое сравнение тут невозможно. Если мы учтём все эти «ясно» и попытаемся всё же вынести из за скобки, останется ли внутри что-то объективное, зависящее от языка? И если останется, насколько оно влиятельно?
Во мне, когда я думаю об этом, борются два противоположных хода мысли. С одной стороны, мне хочется сказать, что язык и его особенности часто переоценивают. В конечном итоге всё решает сложность поставленной задачи, переходящая в сложность работы программиста, решающего эту задачу. Язык программирования как бы стоит посредине этого перехода, «амортизируя» часть сложности задачи и принимая её на себя; но использование разных языков хоть и меняет качество этой амортизации, но не слишком значительно, не во много раз. Использование очень разных языков программирования, основанных на разных подходах, может давать преимущество в тех или иных удобных для решения этими подходами задачах; но в случае, если таких удобств или специальных требований нет, их эффективность примерно одинакова, есть только иллюзия особенной эффективности того или иного языка, появляющаяся у программиста, который очень хорошо его знает, привык, притёрся к нему, и действительно для него лично он быстрее и эффективнее всего остального.
С другой стороны, мне хочется сказать, что всё наоборот. Метафора амортизации несостоятельна, т.к. не отражает тот факт, что, глядя на одну и ту же задачу с точки зрения очень разных языков и подходов к программированию, мы видим совершенно разные вещи, и исходная сложность поставленной задачи не является чем-то неизменным, она навязана нам тем взглядом, к которому мы привыкли; при смене языка/взгляда/подхода может оказаться, что всё стало во много раз легче, и это не какой-то особенный случай, вызванный специальными обстоятельствами исходной задачи, а самое обыденное дело. И может оказаться, что какие-то языки с этой точки зрения особенно эффективны, т.е. очень хорошо знающий такой язык программист сможет в среднем работать значительно эффективнее, чем очень хорошо знающий другой язык программист тех же способностей, при работе над той же не-специальной задачей общего направления (естественно, такая точка зрения должна опираться на предположение о возможности определить «задачу общего направления» и «примерно тех же способностей» так, чтобы не впасть в замкнутый круг, и, действительно, неочевидно, что можно это сделать).
В общем, я лично сохраняю скептицизм по этому поводу, и первая из вышеописанных точек зрения в целом побеждает во мне вторую. Ко второй, тем не менее (и вообще к теме разных подходов к программированию, и тому, насколько такие подходы влияют на результаты и эффективность работы программиста) сохраняется живой интерес. Так вот, наиболее убедительные и подтверждённые фактами претензии на особую эффективность любимого языка, которые мне приходилось встречать, проистекали из среды поклонников двух языков: Смоллток и Форт. Не знаю, почему именно эти два, возможно, это больше случайность моего личного знакомства с языками, программистами, и различными сетевыми обсуждениями этой темы, чем какая-то объективная реальность; и, как я написал выше, я вовсе не уверен в том, что такие претензии основаны на чём-то реальном. Но любопытно отметить, что общего в этих двух языках (вообще-то очень разных): именно концептуальная чистота языка («всё — объект» или «всё — макро») и ещё я бы отметил интеграцию языка внутри интерактивной системы, полностью написанной на этом же языке, что-то вроде мини-ОС для языка.
no subject
Date: 2004-12-23 07:54 am (UTC)Я абсолютно не против применения на практике Лиспа и Смолтока. Наверное, моя ошибка в применении слова "промышленное" - безусловно, написание алгоритмов для yahoo stores и свитча - промышленное программирование, "но есть нюанс". Я сам применил в промышленном софте язык, который не просто экпериментальный - который вообще больше нигде не применялся. И - на его месте мог бы быть Лисп, просто мне ОЧЕНЬ нужно было выжать 100% производительности.
Такие вещи бывают, но - они всегда оправданы именно что специальными условиями. Применяется _НЕ_ общецелевой язык - и для решения _НЕ_обычной задачи.
Собакер изначально расстраивался, что Смолток не рассматривают как язык для решения всех задач, как язык "по умолчанию". И действительно не рассматривают. Применение его в отдельных случаях ничего не меняет - даже если случаи мегабаксовые. Они все чем-то обусловлены. У кого-то во всех этих случаях возник вопрос "а почему не Ява/С++/С#", и кто-то смог объяснить, почему.
И - я считаю это нормальным. На сегодня. По сути - посмотрите - даже сегодня ещё есть люди, которые говорят:
- надо писать на ассемблере (видел сам, клянусь!)
- надо писать на С++
- GC сосёт, всем писать delete полчаса
Ява - это самая высокая горка, на которую было реально затащить человечество, не растеряв по дороге 90%. Это ни хорошо, ни плохо - это таковы сегодня люди.
no subject
Date: 2004-12-23 10:50 am (UTC)class Example: def __init__(self, param): self.param = paramПролезли.
мне самому было бы интересно написать некую апологию Питона (в этом, видимо, моя практическая цель) просто, чтобы аргументы в пользу не широкоизвестного языка были обкатаннее и убедительнее.
я, на самом деле, давно пытаюсь понять, чем меня так Питон зацепил. какое-то очень точное сочетание нужных, и отсутствие ненужных (ну, или, постепенное избавление от) свойств. писать на нем (особенно, после Си++ или, не дай Бог, перла) - это как свежий душ в жаркий день. извиняюсь за романтику ;-)
> Ява - это самая высокая горка, на которую было реально затащить человечество, не растеряв по дороге 90%. Это ни хорошо, ни плохо - это таковы сегодня люди.
О, это я очень хорошо понимаю. И за это очень Яве, как явлению, благодарен. После Явы и перла, на людей, пишущих на Питоне смотрят как на гораздо меньших придурков, чем до их появления. Я на Яве не очень много писал, так, больше пробовал. Апплет написал, когда Ява была в стадии alpha 2, еще что-то для Palm - есть такая VM - Waba. Маленькие вещички с простой графикой удобно писать. А большие - не приходилось, хотя код чужой разглядывал. Вещи типа EJB меня просто пугают, как в свое время MFC. Но, как я понял, вы не большой сторонник всего этого J2EE.
А про Смолток - у меня свой таракан в голове. И вообще, я больше в последнее время к фунциональному стилю склоняюсь. На Питоне это (с некоторыми небольшими ограничениями) вполне можно. Хотел попробовать Хаскель, но там пока текст скомпилируется (вернее, протайпчекится) с тебя семь потов сойдет.
Радует, что в Гугле интенсивно на Питоне пишут. Пустячок, а приятно, опять же - популяризуют Питон.
Кстати, (или уж совсем некстати), ваш Фантом (огрызок мечты) совсем уже заглох? Не хотите линк на форум на dz.narod.ru хоть в ЛЖ переставить (старый не работает)? Или совсем не до того? И еще, известен ли вам проект eros-os.org? Многое похоже, но проект, хоть и академический, и даже вроде финансируемый тоже как-то заглох. Не дождется человечество исполнения мечт, видимо.
no subject
Date: 2004-12-23 12:29 pm (UTC)А Фантом - http://dz.freezope.org/phantom/FrontPage - но там всё то же самое, только англ.
Я делал три попытки :), последняя дала работающий интерпретатор байткода, "ассемблер" байткода и hello world. Но это даже не основа - это экспериментальный стенд. К нему надо привинчивать язык, смотреть на проблемы и половину переделывать. Тварюшка умеет собрать из методов класс, родить объект этого класса, позвать метод, словить эксепшн, вот и всё - даже про наследование ничего не знает толком. Плоско-объектная.