Философские изыскания

Объяснение эксперимента о ветвлениях, или философские изыскания на тему бенчмарков в вакууме и в… реальности

Философские изыскания

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

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

В статье есть опрос, проводимый до 1-го мая 2016. Под катом целиком ИМХО.

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

Я задумал более детальное изучение особенностей разных алгоритмов, а для этого нужна помощь разных людей (хотя бы косвенная – что-то где-то запустить и сказать результат).

Чтобы в будущем сложные эксперименты проходили достаточно гладко, нужно потренироваться, проверить вообще принципиальную возможность делать это подобным образом. Сообщество обычно любит пинать за ошибки в методологии исследования или организации, а мне как раз нужны были конструктивные указания на подобные ошибки. Таковые, к счастью, были.

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

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

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

Теперь поговорим о методологии самого исследования и о том, в чём вообще необходимость тестировать какие-либо функции на скорость. И есть ли она, эта необходимость. Отсюда и начнётся философия.

Пояснение к слову «ветвление»

Другая из моих ошибок, которые я допустил, в том, что я не пояснил что значит ветвление. Обычно меня мало интересуют академические термины, потому что зачастую они не имеют отношения к реальности, а потому приходится наделять многие слова собственным смыслом.

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

Почему так? Дело в том, что ветвление вообще говоря сложно определить по нормальному, когда логика алгоритма переводится сначала на ЯП, затем компилятор переводит её на машинный язык, а затем сами инструкции процессора переводятся во внутренние, скажем, RISC-инструкции. На одном этапе ветвление есть, а ну другом нет… а потом снова может появиться.

То есть вы можете думать, что ветвления в вашей программе на языке Си нет, а на самом деле оно есть, или наоборот, вы написал код с ветвлением (в логике), а компилятор придумал, как это сделать без ветвлений в коде. Пример: u64 a, c;u32 b;c = a / b; Ветвления нет. Правда? На самом деле есть (по крайней мере после компилятора VC++ 2015).

Дело в том, что при так называемом «2/1»-делении (когда нечто удвоенного размера делится на нечто одинарного размера) результат может иметь как одинарный, так и двойной размер. В первом случае данная процедура деления будет выполняться с одной инструкцией div, во втором случае – с двумя.

Так вот, чтобы понять то, по какой ветке пойти при таком делении, нужно рассчитать размер частного и сделать выбор, этот выбор будет одним из ветвлений перед непосредственным делением. Ещё одним выбором может быть, например, проверка на деление на ноль (хотя обычно такой проверки нет). Короче, процедура деления не сводится к обычному div, это весьма сложная процедура.

А программист, глядя на эту запись, может думать, что здесь линейный код. Второй пример. Функция максимума может выглядеть так: i32 max1 (i32 a, i32 b) { return a ((a b) & -(a < b));} Здесь, очевидно, нет ветвлений на архитектуре x86, наверное, не будет их и на многих других архитектурах, хотя тут есть прямое логическое сравнение двух чисел.

То есть по логике ветвление здесь есть, а по коду нет. Однако замените i32 на i64 и скомпилируйте программу в режиме x86. Ветвления сразу появятся.

А вот в таком коде: i32 maxi1 (i32 a, i32 b) { i32 d = a-b; return b + (d&(~(d((ab)&(da))) >> SHIFT));} Ветвлений нет в логике и не будет в программе ни при каком фиксированном размере переменной, которую поддерживает компилятор (речь идёт об x86 при правильной компиляции).

Поэтому я и называю это единственным методом поиска максимума (из мне известных), который не содержит ветвлений. К чему это я всё рассказываю? Основная проблема программистов, которые немного знают о классических методах оптимизации программ, но не очень глубоко в них разбирались: желание избавляться от ветвлений везде, где только можно.

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

Методология эксперимента

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

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

В реальных условиях ваша функция будет окружена другим набором инструкций, цикл, в котором она будет запускаться, может оказаться более длинным и запутанным и время работы этой функции может оказаться абсолютно другим.

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

Так зачем же вообще заниматься этим, если результат не отражает реальность? Потому что если правильно понимать словосочетание «отражает реальность», то всё встанет на свои места.

А дело всё в том, что я не делаю выводов о скорости работы функции отдельно.

Я делаю вывод о том, которая из функций будет быстрее, а которая медленнее именно в этих тепличных условиях.

При этом меня интересует большой отрыв по скорости, потому как небольшой отрыв часто затирается сложностью других участков программы, а вот большой отрыв гарантирует (по крайней мере, в моём опыте работы), что в реальных условиях разница будет такой же… при это НЕ важно, будет ли сама функция работать в 100 раз дольше по сравнению с идеальными условиями – выигрывать у более медленной она будет приблизительно с тем же отрывом, что я получаю в этих идеальных условиях. Честно скажу, я не знаю, так ли это в обычных бытовых задачах, но в научных расчётах, когда нужны миллионы машинных часов счёта, это можно считать аксиомой. В моей практике было только так и никак иначе. Теперь давайте попробуем философски осмыслить вообще ценность любого исследования.

В нашем мире значительная часть экспериментов (даже социальных) не лишена того недостатка, что все они искусственные, но по результатам этих экспериментов люди всё равно могут весьма достоверно предсказать некую ситуацию в реальности. Скажем, возьмите то же соревнование по стайерскому бегу. Несколько людей одеваются в беговые трусы, майку и «тапки» (иногда с шипами), делают специальную разминку, выходят на старт и начинают бежать по идеально гладкой и мягкой дорожке, например, 5 км. Это идеальные условия, в которых мастер спорта проходит дистанцию за 14 минут. Если нацепить на мастера валенки и заставить надеть шубу, то он пробежит ту же дистанцию медленнее, особенно по грязи и лужам, скажем, за 18-20 минут… но это всё равно быстрее, чем обычный неподготовленный человек пробежит даже в идеальных условиях. А в равных условиях у него вообще ноль шансов. Можно взять и другие обычные условия: нужно добежать до уходящего автобуса (или успеть на «зелёный» на пешеходном переходе). Простой вопрос: у кого больше шансов успеть на него при достаточно большой дистанции – у мастера по стайерскому бегу или у обычного человека? Понятно, что у первого, причём шансы практически не меняются в зависимости от формы одежды и многих других условий. Однако данное предположение (причём весьма надёжное) мы делаем только на основе того, что видели, как мастера бегают 5 км за 14 минут. Мы просто делаем предсказание на основе знаний, полученных в идеальных условиях. И с огромной вероятностью эти предсказания будут истинными в условиях реальных. В мире программирования, конечно, всё гораздо сложнее. Например, с чего это я взял, что мои условия, описанные выше, идеальные? Это я их так назвал, а может оказаться, что в реальной программе компилятор найдет способ так «размазать» мою функцию по коду программы, что время её работы станет равным нулю (она будет вычислена параллельно с какими-нибудь сложными операциями неподалёку). Да, такое может быть, и при жёсткой оптимизации программ опытный программист попробует так изменить алгоритм, чтобы максимально сбалансировать команды для одновременного исполнения инструкций, входящих в них, а процессор потом на ходу перемешает эти инструкции ещё лучше. Но это другой разговор, потому что подобные оптимизации не выполняются отдельно для отдельных простых функций вроде sign или abs, всё делается иначе: мы берём узкий участок кода и смотрим на него целиком, на то, можно ли с ним что-то сделать (даже, может, полностью переклеить), чтобы его логический смысл остался прежним, но сложность уменьшилась. У нас ситуация иная: мы хотим выяснить то, насколько быстрой будет та или иная реализация отдельной небольшой функции, предполагая, что эта отдельная небольшая функция будет достаточно сильно нагружена в некотором процессе, но не настолько, чтобы как-то жёстко её оптимизировать и размазывать её по каким-то другим участкам программы. Именно так часто и пишутся обычные эффективные программы: когда алгоритмическая эффективность устраивает программиста, он достигает дополнительной практической эффективности тем, что использует хорошо оптимизированные отдельные функции, но глубже не лезет, потому что это может оказаться накладно, и ему проще увеличить вдвое число ядер, чем потратить уйму времени, чтобы добиться такого же ускорения на прежнем их количестве. Вот эти хорошо оптимизированные функции пишутся… внимание… под идеальные условия! Та же библиотека MPIR для длинной арифметики, посмотрите код и увидите там множество реализаций функций низкого уровня, заточенных под разные процессоры, причём MPIR будет выигрывать у вашего самопального кода длинной арифметики как на тестах вроде моих (сферических в вакууме), так и в реальных условиях, когда данные имеют не очень предсказуемый характер (понятно, что победить MPIR можно и очень легко, когда заранее знаешь некоторые серьёзные особенности входящих чисел, но я говорю о том, когда не знаешь). И таких примеров в научном мире полно. Функция factor в Maple будет рвать вашу самопальную функцию факторизации полиномов как в идеальных условиях, когда вы измеряете время работы путём многократного повторения случайных тестов одного за другим, так и в реальных программах, где факторизация занимает ощутимую долю ваших вычислений (например, при какой-нибудь работе с рациональными дробями). Конечно, я допускаю то, что вы можете соревноваться с factor из Maple, но таких людей очень мало, а речь идёт об обычных пользователя, которые хотят написать более-менее хорошую программу, но затрудняются в выборе той или иной реализации сильно нагруженной функции. Что я хочу сказать: не знаю, как в обычном IT-мире, но в научной вычислительной сфере существует чёткая корреляция между бенчмарками вроде моих (сферических) и реальным поведением тестируемых функций в сложных расчётах, когда эти функции вносят ощутимый вклад в сложность всей программы. То есть ежели некая функция f победила функцию g на сферических тестах в 10 раз, то примерно так же дело будет обстоять в реальной программе. И в этом я неоднократно убеждался с помощью профилировщика. Поясню ещё один момент: в реальных задачах я не встречал необходимости оптимизировать функции min, max, sign и abs. Обычно они встречаются в группе значительно более сложных вычислений, поэтому совершенно незаметны в таблице с результатами профилировки. Просто я часто встречаю программистов, которые считают своим долгом исковеркать код на основе своих интуитивных предположений об оптимизации, тогда как узкое место их программы вообще в другой точке. Не надо так делать. Тем не менее, мой эксперимент с этими функциями всё же имел для меня смысл, не смотря на искусственность и оторванность от реальности его кажущейся необходимости. Это я объясняю дальше.

Цели эксперимента

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

Здесь я лишь тренировался и выражаю благодарность всем, кто принял посильное участие.

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

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

Третья цель – проверить способность потенциальных участников на Хабре правильно воспринимать ситуацию и действовать с учётом даже возможных отклонений от плана.

Такая способность меня вполне устраивает, хотя меня немного разочаровало то, что некоторые участники предоставляли результаты тестирования, когда программа компилировалась без каких-либо ключей оптимизации… я не знаю, какой смысл в таких измерениях. По крайней мере, в научных расчётах это может быть полезно только для отладки.

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

Четвёртая цель – посмотреть на соотношение времён работы функций на разных процессорах и с разными компиляторами. Вот здесь меня удивил один момент. У некоторых пользователей получалось, что функция minu0 работала в разы медленнее остальных семи функций для минимума и максимума. Вот примеры (это именно при хаотичной подаче данных):

Источник: https://habr.com/post/281769/

Критика концепции Трактата. Осознав просчеты своей философии логического анализа, Витгенштейн выступил с ее решительной критикой.

В стремлении к идеальному языку «мы оказываемся на скользской поверхности льда, где нет никакого трения и условия в известном смысле идеальны, но именно потому мы не можем двигаться.

Мы хотим ходить: тогда нам необходимо трение. Назад на грубую почву!» — так формулировал философ отход от прежних позиций.

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

В «Философских исследованиях» то и дело поясняется: «Язык, употребляется в процессе обычной человеческой деятельности», «язык — средство коммуникации» и др. Считая, что сущность языка глубоко сокрыта, мы находимся, признается философ, во власти иллюзии.

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

На деле же употребление слов «язык», «мир», «опыт» должно быть таким же простым, как употребление слов «стол», «дверь», «лампа».

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

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

Иначе говоря, язык мыслится теперь как часть самого мира, как «форма социальной жизни».

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

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

На первый план в «Философских исследованиях» выдвигается прагматический аспект языка, полностью исключавшийся из рассмотрения в «Логико-философском трактате».

Акцент на употреблении языка в множестве конкретных ситуаций подчеркивает его функциональное многообразие.

Нужно в корне преодолеть представление, настаивает Витгенштейн, что язык всегда функционирует одинаково и всегда служит одной и той же цели: передавать мысли о вещах.

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

Одной из существенных особенностей этой лингвистической философии стал отказ от единой, основополагающей логической формы языка.

В «Философских исследованиях» подчеркивается многообразие употреблений «символов», «слов», «предложений» и отсутствие единой логической основы разнообразного мыслительно-речевого поведения людей.

Принимается, что каждый вид деятельности подчиняется своей собственной «логике».

Для установления факта языкового многообразия не требуется особой проницательности. То, что языки сложны и включают в себя многообразие видов деятельности, непосредственно очевидно. Но все это реалии жизни. А ведь большинству философов долгие века философия представлялась царством «чистой» отвлеченной мысли, высоко парящей над суетой повседневности.

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

Тонкие языковые дистинкции значений, смысла слов и фраз становятся для него важнейшим методом анализа.

Прагматический поворот. Что предложенная им логическая модель знания—языка искусственна и далека от практики речевого разумения, Витгенштейн понял к началу 30-х годов.

Наиболее серьезным изъяном своей идеализированной модели философ считал то, что она не отражает — пусть даже схематично — принципиальных механизмов реального речевого разумения.

Поэтому Витгенштейн выбирает иной, в каком-то смысле даже противоположный первому, исследовательский путь.

Теперь Витгенштейн трактует язык не как противопоставленный миру его логический «двойник», а как набор многообразных практик или «форм жизни». Философ разъясняет, что все привычные действия языка (приказы, вопросы, рассказы и прочие) — часть нашей естественной истории, как ходьба, еда, питье, игра (§25).

Язык понимается как живое явление, бытующее лишь в действии, практике коммуникации. Подчеркивается: знаки в звуковом, письменном, печатном виде — мертвы. Но для того чтобы вдохнуть в них жизнь, вовсе не нужно всякий раз добавлять к ним нечто духовное: жизнь знаку дает его применение! Таким образом, значение знака толкуется как способ его употребления.

Этот подход характеризуют как функционально-деятельный.

К изменению позиций Витгенштейна подтолкнул опыт обучения детей, тесно связавший понятия значение и обучение.

Он рекомендует: размышляя над «тайной» речевых значений, постоянно задумываться над тем, при каких обстоятельствах мы научились применять слово или выражение, как учат фразам детей и как они их усваивают на деле.

Философское обоснование нового подхода было найдено в прагматизме—с его вниманием к деятельности субъекта, к связи смысла предложения с действиями. Витгенштейн принял доводы прагматизма о тщетности стремлений к точному логическому выражению того, что на деле не поддается точным определениям.

Он принял и тот аргумент, что теоретическое рассмотрение предмета строится на сверхупрощениях и потому несет в себе опасность догматизма, наиболее ощутимую в философии и религии. Мотивы прагматизма и критики «теоретизма» (платонизма) органично вошли в мышление позднего Витгенштенйна.

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

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

Что же оно означает?

Языковые игры. Понятие языковых игр — ключевое в философии позднего Витгенштейна. В его основу положена аналогия между поведением людей в играх (карты, шахматы, футбол и др.) и в разных жизненных практиках — реальных действиях, в которые вплетен язык.

Игры предполагают заранее выработанные комплексы правил, задающих возможные «ходы» или логику действия. Витгенштейн разъясняет: понятия игры и правил связаны тесно, но не жестко. Игра без правил — не игра; при резком, бессистемном изменении правил она парализуется.

Но игра, подчиненная чрезмерно жестким правилам, — тоже не игра: игры немыслимы без неожиданных поворотов, вариаций, творчества.

Под языковыми играми понимаются модели работы языка, методики анализа его в действии. Этот новый метод анализа призван дифференцировать сложную картину применений языка, выявить, различить многообразие его «инструментов» и выполняемых функций.

Это предусматривает различение типов, уровней, аспектов, смысловых вариаций в практике использования естественного языка в реальных условиях. А все это требует умения упрощать сложное, выявлять в нем элементарные образцы.

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

Кроме того, подчеркивается неразрывная связь корневых форм языка и жизнедеятельности: «Языковой игрой я буду называть целое, состоящее из языка и действий, в которые он вплетен». «Игры» — образцы речевой практики, единства мысли—слова—дела, а также обстоятельств, при которых все это вместе взятое «действует», «работает».

Иногда для пояснении идеи языковой игры Витгенштейн сравнивал ее с театральным спектаклем, где в одно целое объединены «сценическая площадка», «акты», «действия», «роли», конкретные «сцены», «слова», «жесты» («ходы» в игре). Со временем философ все чаще стал характеризовать языковые игры как «формы жизни».

Этим подчеркивалось: язык — это не просто «говорение» (или «письмо») как самостоятельный процесс; он — деяние, совокупность речевых практик, неразрывно связанных с исторически сложившимися обычаями, реальными способами действия, поведения людей.

Отсюда следовало, что концептуальное прояснение языка (анализ) должно принимать во внимание целостный контекст той или иной «языковой игры».

Витгенштейн вводит принцип игр и демонстрирует «игровой» подход к анализу языка на примере совсем простых, но постепенно усложняемых игр-коммуникаций. Эти примеры Витгенштейн привел в лекциях 1933—1935 гг., и они вошли в «Коричневую книгу».

Действующие лица в игре (1) — строитель и его подручный; первый, используя лишь названия строительных элементов, выкрикивает команды: «плита», «куб» и др., что означает: «подай плиту», «принеси куб» и проч. Затем в игре (2) вводится новый тип инструмента — числительные.

Далее (3) добавляются «собственные имена» (этот блок! та плита!). На следующей ступеньке (4) игра обретает слова и жесты, указывающие место; позже (5) в нее включаются вопросы и ответы (сколько блоков? — Десять). Уже первые пять примеров позволили Витгенщтейну дать контуры идеи в общем виде.

Он пояснил: системы коммуникации (1—5) мы будем называть языковыми играми. При этом указывается, что их реальным аналогом могут быть простые языки примитивных племен или способы обучения детей их родному языку. На базе исходных простых воссоздаются все более сложные формы речевой практики.

Игра (6) уже включает в себя варианты вопроса о названии предмета (или цвета, числа, направления и др.). В игре (7) фигурируют таблички, соотносящие знаки с рисунками предметов. В дальнейшем к этим практикам добавляются все новые, усложненные игры.

В данном случае их число было доведено здесь до 73, и это позволило доходчиво, понятно продемонстрировать игровой подход к познанию, мышлению, языку в действии. Наиболее полно идея и метод языковых игр были развернуты в главном труде позднего Витгенштейна — «Философских исследованиях». Каково же назначение этой идеи?

Языковые игры — своеобразный аналитический метод (совокупность приемов) прояснения языка, его функций, форм работы. Он мыслится как поиск выходов из разного рода концептуальных ловушек, которыми изобилуют отвлеченные, особенно философские, размышления. Именно для этого Витгенштейн придумал свой принцип игр и наработал богатую практику его применения.

Суммарным эффектом такой работы Витгенштейн считал выявление многочисленных связей тех понятий (их традиционно называют категориями), что скрепляют, организуют все человеческое разумение, составляя его постоянно действующую, живую функциональную основу. К соотношениям таких понятий он применял образы семейного родства.

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

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

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

Но мыслитель понимал меру ценности найденного им. Открытием, вкладом в философию XX в. стал разработанный им метод постановки и решения философских проблем, умение обнажить, выявить их подлинную — не иллюзорную — суть, истоки.

Он не раз подчеркивал это: «Я пропагандирую один стиль мышления в противоположность другому…»;

«Все, что я могу вам дать, — это метод; научить вас каким-то новым истинам не в моих силах;» «Неважно, истинны или ложны результаты, важно, что найден метод». Свой метод Витгенштейн не просто провозгласил, он продемонстрировал его действие. Достигнутые им результаты еще не вполне осознаны во всей их глубине, новизне, проясняющей силе. В текстах нет каких-то обобщений, резюме.

Позиция Витгенштейна, заявленная еще в Трактате и не подвергшаяся существенному изменению впоследствии, такова: «Полагаю, что мое отношение к философии суммарно можно выразить так: философию по сути можно лишь творить…

» Основное достижение Витгенштейна — такое его видение философии, которое делает ее чем-то большим, чем корпус знания. Ее суть — совокупность приемов, навыков уяснения, которым можно учиться и научить.

Такая философия — в частности, через педагогику — способна стать ментальной практикой, включиться в саму жизнь, стать, по выражению Витгенштейна, формой жизни. философия, по его убеждению, — не учение, не теория, а деяние.

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

Чем более внятно воссоздаешь ее в форме учения (выявлением и приведением в систему основных ее тезисов), тем более утрачивается суть того, над чем бился, чего достиг автор. Главным для философа был творческий практикум концептуальных прояснений.

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

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

Источник: http://filosof.historic.ru/books/item/f00/s00/z0000007/st078.shtml

Book for ucheba
Добавить комментарий