LINUX.ORG.RU

Почему ООП стало более популярным и соответствующие языки и технологии программирования чем то же ФП?

 ,


2

4

Заранее прошу прощения за то, что не в Talks, а сюда. Так получается, что теперь в Talks просто так постить нельзя, нужна некая карма и я должен «страдать» (Почему я не могу писать в раздел Talks? (комментарий)). Я в упор не помню данные своего старого аккаунта. Зарабатывать карму здесь и сейчас у меня нет ни времени, ни возможности, ни необходимости. Почему сюда, а не на другие форумы? Потому что считаю, что здесь обитают люди, которые смогут ответить на вопросы ниже и, возможно, даже, которые застали те самые времена (если конечно те самые люди ещё здесь).

Всем доброго времени суток! Не срача ради, а понимания для. Хочется понять историчность и почему так произошло. Понятно, что сейчас уже стали внедрять функциональные фичи много куда (в те же Java, C++, C# и т.д.). Стало появляться много функциональных языков (в том числе совсем новых). Но почему спустя столько времени? Почему спрашиваю:
- Functional programming has its origins in lambda calculus, a formal system developed in the 1930s (!!!) to investigate computability, the Entscheidungsproblem, function definition, function application, and recursion. Many functional programming languages can be viewed as elaborations on the lambda calculus (отсюда: https://en.m.wikipedia.org/wiki/Functional_programming);
- Lisp появился ажно в 1958 году;
- после лиспа ещё была целая куча функциональных языков (APL, IPL, ML, Miranda, Erlang, etc.);
- C++ в 1985;
- Haskell в 1990;
- Java в 1995;

Сама идея ООП (и то я так понял весьма размытая, каждый понимал (и, кстати, по-моему до сих пор понимает) по-своему) вроде как витала со времени создания самого лиспа, но до конкретных реализаций она добралась ближе к концу 80-х - начала 90-х годов.
(поправьте меня, если не прав)
И это ещё при всём при том, что ФП имеет под собой весьма конкретный математический базис (чего я, пожалуй, не могу сказать про ООП).
Я так понял, что благодаря таким крупным компаниям как Microsoft, Oracle...
Но почему они так сильно повлияли на развитие этих технологий и как именно они это сделали я, честно говоря, не совсем понимаю.
Ок, ладно, тогда железо было не такое как сейчас, памяти было маловато для нормального существования функциональных языков на x86 платформе.
Но ведь была же та же, например, Symbolics, которая вроде бы весьма активно продавала лисп-машины?
Ок, Symbolics развалилась благодаря неблагоприятному стечению обстоятельств и «эффективным» манагерам, но их наработки оказались никому не нужны что ли?
И опять-таки, когда нужное железо появилось почему выбор этих и других крупных компаний пал именно на эти языки?
Почему не на функциональные языки?
Потому что в то время функциональные языки в основном использовались сугубо в академической среде или как?
Или если перефразировать всё вышесказанное словами моего коллеги: «если всё так круто (про ФП), то почему оно ещё не захватило рынок?»

Ответ на: комментарий от vertexua

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

ugoday ★★★★★
()
Ответ на: комментарий от vertexua

А пока индустрией рулят одновременно медленные, одновременно опасные и одновременно негибкие языки.

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

На Rust уже есть проекты глобального масштаба.

И какой объем кода того же npm registry? Хотя бы миллион строк есть?

eao197 ★★★★★
()
Ответ на: комментарий от ugoday

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

vertexua ★★★★★
()
Ответ на: комментарий от eao197

Выходит, что Java или C# — это одновременно и опасные, и негибкие языки.

Да. В обеих null, в обеих data races, в обеих мутабельность по дефолту. В Java еще небывалые костыли в стандартной библиотеке, исторически обоснованые. Потом еще default методы туда начали пихать чтобы хоть как-то расширять стандартные интерфейсы

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от vertexua

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

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

Мимо в «быстрый», на одном ядре далеко не разгонишься.

:-( Тут всё плохо. Особенно в районе стандартной библиотеки.

ugoday ★★★★★
()
Ответ на: комментарий от eao197

И какой объем кода того же npm registry? Хотя бы миллион строк есть?

Я то откуда знаю.

В Servo - 350 000, в Libra - 135000. Я не очень понимаю зачем гнаться за миллионом, если в Rust экосистема crates развитая. В плюсах тебе насрут миллион быстро очередной реализацией строк, которая как std::string, но немного не такая

vertexua ★★★★★
()
Ответ на: комментарий от ugoday

Я пол книжки прочитал. Дошел до места с одним ядром. И вот там и закрыл и больше не возвращался. Это не серьезно

Причем это же не то что Ocaml прямо божья роса, нигде такого нету. Есть уже куча языков с такими же гарантиями, но без блокировок

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от vertexua

А Горбачёв думал, что НАТО на восток расширяться не будет. Говорят (имена называют разные), ему кто-то пообещал, что они не будут. Но мы знаем, что дальше было. Нет в контракте, нет в реальности.

ugoday ★★★★★
()
Ответ на: комментарий от vertexua

Более чем. К чему ты вообще привёл ещё не релизнутый проект, котрый чёрт знает когда релизнется и релизнется ли вообще, если там даже не ядро на нём? Что там вообще на нём?

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Ну zircon они вроде на чем-то уже готовом основали, а сам реп ОС вот

❯ git clone https://fuchsia.googlesource.com/fuchsia
❯ cd fuchsia
❯ tokei --sort lines
-------------------------------------------------------------------------------
 Language            Files        Lines         Code     Comments       Blanks
-------------------------------------------------------------------------------
 Rust                 5905      1820432      1355617       295681       169134
 C++                  6301      1461621      1090298       137991       233332
 C Header             5970       861858       527097       195273       139488
 C                    2476       820698       491948       200789       127961
 Assembly              250       221164       200386           70        20708
 Markdown             1407       144947       144947            0            0
 Go                    588       108459        85607         9137        13715
 Plain Text            190        89657        89657            0            0
 C++ Header            130        58664        45735         6511         6418
... дальше удалил
vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 2)
Ответ на: комментарий от vertexua

Убрал вендоринг, стало пол миллиона, ничего тоже норм. Ну вот короче как хотите так и оценивайте, с crates или без

❯ tokei --sort lines --exclude third_party
-------------------------------------------------------------------------------
 Language            Files        Lines         Code     Comments       Blanks
-------------------------------------------------------------------------------
 C++                  6091      1377061      1031100       123982       221979
 C Header             5015       588458       355527       128357       104574
 Rust                 1499       553309       457061        51199        45049
 C                     498       108981        80543        12583        15855
 Go                    587       108012        85213         9084        13715
 Markdown              969       103776       103776            0            0
 JSON                  162        25459        25459            0            0
...
vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 2)
Ответ на: комментарий от vertexua

Я не очень понимаю зачем гнаться за миллионом

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

В плюсах тебе насрут миллион быстро очередной реализацией строк, которая как std::string, но немного не такая

Это вам Рабинович напел?

eao197 ★★★★★
()
Ответ на: комментарий от vertexua

Да. В обеих null, в обеих data races, в обеих мутабельность по дефолту.

Но при этом они дают фору по надежности С и C++.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Дают, полностью согласен. Но С и С++ - нижайший стандарт надежности. Хуже быть не может. Наверное патч Бармина на перле разве что.

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

Но С и С++ - нижайший стандарт надежности.

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

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

eao197 ★★★★★
()
Ответ на: комментарий от WitcherGeralt

Помойка там намного глубже чем кажется. Смотри: больше миллиона строк на расте это third party с помоечных васянских crates. Это совершенно неконтролируемый код совершенно неизвестного качества (читай кишит багами). Удачи такому проэкту, чо.

anonymous
()
Ответ на: комментарий от vertexua

Грамотные люди

В чём это заключается? Обоснуй.

Я бы ещё понял 3-4 языка, но там-то вообще ад.

WitcherGeralt ★★
()
Ответ на: комментарий от anonymous

Кстати, да. Я, помелькнувший выше, tokei решил заценить, там зависимостей было штук 30, елси не 50. Я в шоке от того, что это вообще работает.

WitcherGeralt ★★
()
Ответ на: комментарий от byko3y

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

Теперь более-менее понятно, что к «академикам» (будем считать, что это люди из академической, или университетской, среды) у тебя претензий нет и быть не может, потому что ты сам понимаешь, что среди «академиков» существуют разные мнения и взгляды. Тот же Страуструп по этому определению — «академик», ведь он PhD.

у меня нет наград и на моем авторитете не держится целая индустрия

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

Стоит ли винить человека за какое-то «его» мнение, когда у него самого своих мнений толком и нету?

Не все мыслят крайностями. Это вовсе не признак отсутствия своего мнения.

rassol
()
Ответ на: комментарий от byko3y

Суть это пирамиды я понял сильно позже:

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

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

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

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

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

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

Советую всё же прочитать статью о когнитивных искажениях.

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

В этом и смысл.

rassol
()
Ответ на: комментарий от vertexua

нижайший стандарт надежности. Хуже быть не может. Наверное патч Бармина на перле разве что

А что, у патча Бармина какие-то проблемы с надёжностью?

Nervous ★★★★★
()
Ответ на: комментарий от ugoday

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

Какие к черту взрослые мужики? Это всё те же дети, просто теперь они с умным видом и обосранными штанами зовут себя «девелопер уровня энтерпрайз». Они всё так же не могут выполнить сложной работы - ну не пишутся на JS приложения даже на 100 тыс строк. Не пишутся, и всё тут - нельзя пластиковым совочком копать уголь.

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

byko3y ★★★★
()
Ответ на: комментарий от vertexua

Напоминаю:
https://www.computer.org/csdl/magazine/co/2012/02/mco2012020007/13rRUy08MzA - JavaScript: Designing a Language in 10 Days
«This language would need to appeal to nonprofessional programmers much like Microsoft's Visual Basic and interpretable for easy embedding in webpages. According to Eich,
„If I had done classes in JavaScript back in May 1995, I would have been told that it was too much like Java or that JavaScript was competing with Java … I was under marketing orders to make it look like Java but not make it too big for its britches … [it] needed to be a silly little brother language.“ »

Простой интерпретируемый язык для даунов, по сути похожий на Васик, по внешней форме похожий на жаву - всё сходится. Но все-таки JS проектировался - целый 10 дней. PHP же вовсе не проектировался, как грит создатель:
http://web.archive.org/web/20130729213507id_/http://itc.conversationsnetwork....
«I don't know how to stop it, there was never any intent to write a programming language [...] I have absolutely no idea how to write a programming language, I just kept adding the next logical step on the way.»

byko3y ★★★★
()
Ответ на: комментарий от vertexua

Быстрый, мощный и, при этом надежный? Да ладно. Надежность и скорость, в общем-то, противоречат друг другу.

Да, Rust - все три вещи без компромиссов

Разрешите возхразить. Во-первых, раст таки несколько замедляет разработку, поскольку требует от кодера точно формулировать свои мысли, так что безопасность здесь - не бесплатное приобретение.

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

А теперь сравним с языками 90х. О, нужно безопасно! Вкатаем как VM, JIT и сборщик мусора и будем оптимизировать это 20 лет, пока на планете не останется человек 20 понимающих этот код

Ты про джаву? Ащет кроме крестов и жавы было очень много разных языков - вопрос скорее в популярности и доступности готовых решений.

byko3y ★★★★
()
Ответ на: комментарий от byko3y

но уже сейчас встают под сомнение на фоне современныого железа - компилятор не может гарантировать отсутствие race condition или дедлока.

data race, он может гарантировать что тебе не порвут указатель на клочья, строку, счетчик из многих потоков

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

data race, он может гарантировать что тебе не порвут указатель на клочья, строку, счетчик из многих потоков

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

byko3y ★★★★
()
Ответ на: комментарий от ugoday

У тебя риск один

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

Есть более одного поставщика готовых магазинов, как то https://tiu.ru/ , хоть он и помельче фейсбука будет.

byko3y ★★★★
()
Ответ на: комментарий от vertexua

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

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Ну Rust любит понятное дерево ownership, иначе да, unsafe, или что-то третье будет собственником, например circular buffer, slab allocator, arena, что-то на чей lifetime можно сослаться

vertexua ★★★★★
()
Ответ на: комментарий от rassol

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

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

Если тебе есть что сказать по теме, если ты приведешь старика-профессора, который участвовал в том процессе изнутри - мы будем рады услышать. Хоар работал в совке, например - кто-то же работал с ним?

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

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

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

Не все мыслят крайностями. Это вовсе не признак отсутствия своего мнения.

Ты хочешь сказать, что Страуструп - хитрец и лицемер? Интересная позиция, мне нравится.

byko3y ★★★★
()
Ответ на: комментарий от vertexua

Ну Rust любит понятное дерево ownership, иначе да, unsafe, или что-то третье будет собственником, например circular buffer, slab allocator, arena, что-то на чей lifetime можно сослаться

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

byko3y ★★★★
()
Ответ на: комментарий от rassol

Большинство людей не имеет задатков

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

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

Я, например, в 6 лет выучился ездить на велосипеде второй раз сев на него. Я не стал канатаходцем, зато мне очень неприятно ездить в автобусах - укачивает. Как мои способности могли быть развиты в обычной школе? Да никак - задачи развития способностей в школе никогда не стояло. Задо подход «всех под одну гребенку» гарантирует, что абсолютное большинство не сможет в рамках школы развить свои способности.

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

https://ru.wikipedia.org/wiki/Систематическая_ошибка_выжившего
Талантливые люди, которые этого не делали, не стали «талантливыми» в твоих глаза, не смогли преодолеть преграды.

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

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

byko3y ★★★★
()
Ответ на: комментарий от byko3y

Ну ничего из этого не будет Send/Sync пока ты не придумаешь как этого добиться. Что это будет - мьютексы, атомарные операции, я не знаю. И естественно если ты прямо компилятор заставишь следить за двусторонней связью то эти связи нужно будет как то хранить вместе и инакпсулировать их одновременное изменение через паттерн внутренней мутабельности. А снаружи например компилятор уже будет защищать пользователя от кривого использования. Сложно что-то тут обсуждать, если круговая связь - задача логики приложения, в другом алгоритме ты бы наоборот захотел разрыв. Компилятор не может в libastral. Главное что он всегда позволяет инакпсулировать все так, чтобы снаружи пользователь твоей либы не накосячил

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

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

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

byko3y ★★★★
()
Ответ на: комментарий от anonymous

А в javascript как с этими тремя критериями?

Ну сам проверь же ж. Оно очень близко к питоновым замыканиям.

byko3y ★★★★
()
Ответ на: комментарий от ugoday

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

anonymous
()
Ответ на: комментарий от vertexua

А множить матрицы если припечет, то можно на unsafe или в функциональном стиле (вытирается больше проверок)
вытирается больше проверок
вытирается

что имеется в виду?

Eid010n
() автор топика
Ответ на: комментарий от vertexua

Но С и С++ - нижайший стандарт надежности. Хуже быть не может.

С - согласен. Но вот любой динамически типизированный ЯП хуже С++ по надёжности, но все их жрут и нахваливают.

next_time ★★★★★
()

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

А ООП это всего лишь ООП и на самом деле к делу не относится.

abcq ★★
()
Ответ на: комментарий от trex6

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

abcq ★★
()
Ответ на: комментарий от rassol

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

Мой жизненный опыт подсказывает, что бездарности, такие как полковник Дмитрий Захарченко или художник Шилов тоже виноватых в своих бедах не ищут. Потому, что у них бед нет. Поиском виноватых занимаются всегда те, кто считает, что недополучил своё, правы они или нет.

как правило, не ищут виноватых в своих бедах

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

next_time ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.