Category: лытдыбр

Category was added automatically. Read all entries about "лытдыбр".

with Cat The Cat

W7 Starter Edition.

Под ней можно запускать сколь угодно много консолей.

В результате у меня сейчас работает ghci, два Far Commander (один из них с запущенным make) и ещё один sh висит в ожидании команды.

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

В общем, жить можно.
with Cat The Cat

Количество цифр в факториале 100000.

fact1 n = product [1..n]

reduceProduct [] = []
reduceProduct [x] = [x]
reduceProduct (a:b:xs) = (a*b) : reduceProduct xs

product' [] = 1
product' [x] = x
product' xs = product' (reduceProduct xs)

fact2 n = product' [1..n]
Вот время вычисления для разных величин n:
*Main> length $ show $ fact1 10000
35660
(0.80 secs, 90772044 bytes)
*Main> length $ show $ fact2 10000
35660
(0.05 secs, 4062092 bytes)
*Main> length $ show $ fact1 30000
121288
(7.86 secs, 789229120 bytes)
*Main> length $ show $ fact2 30000
121288
(0.27 secs, 11794628 bytes)
Вот, в чём прикол:
*Main> map (map (length . show)) $ take 3 $ reverse
      $ takeWhile ((>2) . length) $ iterate reduceProduct [1..10000]
[[13020,15484,7157],[5895,7126,7591,7893,7157],
 [2640,3255,3488,3639,3751,3841,3915,3979,4035,3123]
]
Логарифмы перемножаемых на одной итерации reduceProduct чисел примерно равны, что позволяет использовать быстрое умножение.

Обнаружилось случайно. Коллега вывел на экран fact 100000 и сказал, что там очень много цифр. Нам стало интересно, сколько же их там, мы посчитали length $ show $ fact 100000. Мне стало неинтересно ждать долго (я прождал целых 15 секунд) и я переписал алгоритм произведения списка на приведённый выше. Мы тут же посчитали число цифр в fact 1000000. Потом стало интересно, почему же происходит такое ускорение. vshabanov посчитал и сказал, что число умножений будет всего вдвое меньше, мы пообсуждали, поизучали вопрос и пришли к выводу, что умножение больших чисел выгодней, когда они примерно равны по размеру. Что и получается в случае рекурсивного произведения.
with Cat The Cat

Programmers' Stone

http://the-programmers-stone.com/

В своё время - лет десять тому назад, - этот Programmers' Stone был умеренно популярен в определённых кругах (вокруг dz.ru). Причём весьма популярен у русских программистов, на что указывает наличие в Википедии статей только на русском и английском языках.

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

На момент написания автор PS уже наработался на всяких работах в США и легко жил на Ибице. Что-то ему захотелось подвести черту и он написал "программный текст".

Автору Алану Картеру (хотя их почему-то указано двое) пришло большое количество одобрительных писем и он продолжил. Во второй версии было выделено два полярных психотипа - картографы (mappers) и укладчики (packers). Хорошие (и отличные) программисты находились в первой категории, остальные были укладчиками.

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

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

(замечу, что несмотря на моё ёрничанье, авторы PS мне рассказали о многом - например, показали, как писал Ван Гог, уже за это им огромное спасибо)

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

Так вот, на сайте http://the-programmers-stone.com/ ест два интересных материала: очень интересный анализ теста "фигура в изображении" и про пользу неяркого освещения дял разработчиков. Анализ говорит о том, что познавательные способности с возрастом ухудшаются не сильно (если они, вообще, имелись; кстати, там ещё и разные психоактивные вещества рассматриваются), а страничка про свет содержит ссылки на странички про стресс, интересно увязывая всё воедино.

Вот.
with Cat The Cat

Ещё про типы и прототипы, последнее. Хотя ещё и про программистов добавлю.

Главное в типах - они не дают возможности проэтосамить важное.

Вот решили вы сделать вещь, что никто не делал, и вы в первую очередь, и сделали. Решили посмотреть и видите, что работает это ваше новое плохо. Или не так хорошо. Или просто отвратительно.

Где находится тот, что во всём виноват?

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

Как искать?

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

Второй вариант - добавить в программу типы. Типы ловят опечатки (x, y или xy?), неправильный порядок аргументов (a-b или b-a) и много чего ещё.

Раннее внедрение типов в программу, как и раннее внедрение тестов в программу гарантирует защиту от некоторых классов ошибок, но обходится дешевле (в строках кода) в сравнении с тестами.

Буквально, scale :: Num a => a -> Vec a -> Vec a и вы уже нигде не сможете написать scale vec (1/vecLen vec).

Теперь ещё про личностные характеристики великолепного программиста. Проверю-ка я их на совместимость со статической системой типов а-ля Хаскель и динамической а-ля что-то ещё.

Три характеристики великолепного программиста таковы: Лень, Нетерпеливость и Высокомерие.

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

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

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

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

Наткнулся у 17ur на отличное.

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

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

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

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

Это, что, комплекс такой?

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

Ужас просто.

Такое ощущение, что с зомбированными разговаривал.

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

Просто я впервые сталкиваюсь с несвободными в жизненном выборе людьми.

Наверняка я сталкивался и раньше, но теперь это на осознанном уровне, поэтому и внове.
with Cat The Cat

Корки, они же горбухи.

У 0berst:
Уважаемый работодатель!
Сегодня утром, просматривая почту, я обнаружил ваше письмо, уведомляющее меня о невозможности приёма меня на работу в вашу компанию. Я внимательно изучил ваш ответ и, с сожалением, должен сообщить, что в настоящее время не имею возможности принять ваш отказ. В течение последних месяцев мною было получено множество отказов в трудоустройстве, поэтому, как вы понимаете, у меня имеется широкий выбор, но удовлетворить их все я, к сожалению, не могу.
Несмотря на ваш богатый опыт и квалификацию в области отбора персонала, я вынужден констатировать, что данный отказ слабо аргументирован и противоречит моим интересам, кроме того, он никоим образом не соответствует моим планам на ближайшее будущее.
Исходя из вышеизложенного, я считаю необходимым приступить к своим обязанностям в вашей компании начиная со следующей недели...</a>
С баша (который английский):
<tag0y> A UNIX saleslady, Lenore,
<tag0y> Enjoys work, but she likes the beach more.
<tag0y> She found a good way
<tag0y> To combine work and play:
<tag0y> She sells C shells by the seashore.
Оттуда же (забыл ссылку), в моём вольном переводе: Я всегда в ресторане заказываю курицу и яйцо. Мне интересно, что же принесут первым.