Зеркала не для отражения правды, скорей для сокрытия ее (с)
Созерцание кода |
«Мы, методологи, проектируем сложные системы, но не принимаем во внимание рабочие характеристики активного компонента этих систем, компонента, который известен своей нелинейностью и изменчивостью – человека».
Алистэр Коуберн
«Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете».
Стив Макконнелл «Совершенный код»
Совершенность кода
Идеальный код существует – и это не шутка. Нет, космически спутники, безошибочная система управления «ядерным щитом», программное обеспечение АЭС тут совершенно не причём. Идеальный код – это программа, выводящая на экран «Hello world».
Фраза «Здравствуй, мир!» известна каждому программисту. Появилась она в 1978 году, как пример использования языка С, и до сих пор остаётся первым шагом в освоении языков программирования для тысяч студентов по всему миру.
Перейдя по ссылке вы увидите пример «Hello World» на трёхстах языках программирования. Каждый вариант программы является примером идеального, безошибочного, совершенного кода.
На Бейсике программа состоит из 21-го символа. На BIT, Redcode, инопланетном Credits – нескольких сотен. Разница в методологии между этими языками – колоссальна. Результат выполнения работы один и тот же.
Идеальный код не самый короткий, не самый быстрый, не самый удобный для программиста. ИК – наиболее простой вариант исполнения заданной функции. Надо вывести фразу на экран – выведет. Пристыковать Shuttle к Орбитальной Космической Станции – пристыкует. Функция не требует выводить «Hello World» в зелёном неоне, не заставляет Shuttle варить нам кофе. Мы должны сделать лишь то, что должны, так просто, как сможем.
И слепой увидит – код, который пишите лично вы, с точки зрения математики, ужасен.
Идентификация кода
Софт, которым мы пользуемся ежедневно, разрабатывали от одного до нескольких сотен программистов, на протяжении пары часов или нескольких лет. Кто-то из них сидел на кофе и сигаретах, кто-то работал по ночам, нашлись и те, кто программировал по несчастной случайности; были наркоманы, трудоголики, лентяи, гении, посредственности. Финансовый кризис, грязная посуда, сбитая собака – всё отражалась в их головах и в том, что они делали.
Внешние факторы неминуемо сказываются на результатах работы. Нехватка денег в развивающихся странах породила целое культурное явление под названием «индийский код». «Индийский код» - это код, созданный с использованием всех известных программисту технологий, код избыточный, перегруженный странными конструкциями и переходами, но, тем не менее, работающий. Одно время в Индии существовала практика оценки производительности труда программиста на основе количества написанного кода. Чем больше кода, тем больше программист работает, и, следовательно, выше его оклад. Шустрые индусы быстро сообразили как обманывать неквалифицированных заказчиков.
По некоторым критериям выделяют «японский код» (идеально сформулированная задача – заказ для американских программистов – заказ выполняют нанятые программисты из Пакистана – отладка американскими программистами – мутант, живущий вопреки всем законам природы), «русский код» (код без всяких комментариев и пояснений, если считается 2х2=4, то в программе будет отображено: 2х3 ≠4, 2х4≠4, 2х5≠4 и т.д.), «китайский код» (создан простым и надёжным методом copy-paste, на основе готовых примеров; создатели подобного кода часто не представляют, как программа работает «изнутри», на аппаратном уровне) и др.
Подобные «национальные» ошибки устранять сложно. Быстродействие современных компьютеров позволяет не замечать разницу между программой в десять строк и программой в миллион строк. Отличия будет проявляться только в количестве найденных уязвимостей. Продолжительность отладки криво-написанного кода, в конечном счёте, не имеет значения. Отсутствие ошибок в коде ещё не означает отсутствие неполадок во всей программе.
Современное программное обеспечение ненадёжно, непонятно, а часто – опасно. Если вы купите велосипед, вы сядете на него и поедете. С программным обеспечением всё гораздо сложнее. Конечно, времена когда софт требовалось дополнительно «оттачивать напильником», остались в прошлом. Но и сейчас вы можете быть уверенным, когда-нибудь он откажет. Каждый компьютер и фактически каждая программа рано или поздно зависнут, вылетят или сделают недопустимую операцию. Хорошо, что речь идёт не о ваших внутренних органах, не так ли?
Уязвимость кода
Если бы программы писали программы – мир был бы похож на постный пирожок без сахарной пудры. К счастью или к ужасу пока мир не может обойтись без программистов, которые пишут идеальный код лишь однажды в жизни – переписывая из учебника пример программы «Hello World».
Всё, что будет написано программистом после этих сладких мгновений, это «кофеварка в неоновом свечении» - код, одновременно выполняющий несколько функций с десятком дополнительных бонусов. Заглянув в исходники всего программного обеспечения, созданного человечеством, от NetBSD до mail агента, вы увидите признаки этого странного явления. Дайте двум, не знакомым друг с другом программистам, простую задачу, подкиньте незатейливую идею, и вы увидите, насколько по-разному они подойдут к её реализации. В итоге вы получите две программы, к примеру, на PHP и Perl, которые будут делать не то, что вам хотелось бы.
Хорошим программистом может быть только сама программа. Или искусственный интеллект. Человек слишком непредсказуемый и нелинейный элемент системы. И мы не можем исключить его из производственного процесса. Но человеческий фактор при разработке программного обеспечения никто не учитывает. Потому что заказчики, тестировщики и маркетологи – тоже несовершенные люди.
Давайте наконец смело взглянём фактам в лицо: устранение уязвимостей, разработка более совершенных методов программирования, обновление версий ПО, сотни научных конференций, тысячи средств защитного ПО не дадут никакого положительного эффекта, пока мы не поставим основной целью в обеспечении безопасности изучение влияния человеческого фактора. Про обновление ПО, как метод обеспечения безопасности надо сказать отдельно – это катастрофическая ошибка! Множество проектов закрылись из-за увеличения стоимости разработки только потому, что разработчикам велели обновлять весь код после каждой найденной уязвимости.
Можем ли мы заставить программистов работать с эффективностью математических формул? Нет, по нескольким причинам. Во-первых, человеку всё равно по каким принципам он работает, пока эти принципы предусматривают выплату заработной платы. Во-вторых, несмотря на всё своё несовершенство, человек создаёт программное обеспечение, которое работает.
Эффективность кода
Хоторнский эффект – «Hawthorne effect – это условия, в которых новизна, интерес к эксперименту или повышенное внимание к данному вопросу приводят к искажённому, зачастую слишком благоприятному результату».
В нашем случае каждый новый проект, стартап, неминуемо ведёт к повышению эффективности работы программистов. Потому что проект новый! Однако как только проходит «новизна», интерес к работе у сотрудников резко снижается. Более того, если группе менеджеров дать задачу разработать методологию роста производительности труда – они её разработают и успешно внедрят! Введут пятиминутные перерывы, переставят кактусы, повесят в нужном месте кондиционер, а в другом – усилят освещение. Все эти меры неминуемо дадут положительный эффект. Но лишь на короткий промежуток времени. С тем же результатом вы – как руководитель проекта – можете самостоятельно повышать производительность вашего коллектива. Графики сдачи проектов, зелёные фишки, ползущие по настенному календарю, бесплатный квас (non-alcoholic summer drink), описание угроз мирового кризиса, разосланное по корпоративной почте – всё это даёт положительный результат в течение одного дня. Максимум – недели.
Попытка внедрения любой методологии воспринимается сотрудниками как неудовлетворённость результатами их деятельности. Забросьте в стан программистов двух-трёх менеджеров с блокнотами, а затем послушайте в курилке зубодробящие истории «о грядущем сокращении».
Заглядывая глубже, как оценить работу программиста: по скорости набора и сдачи проекта, по эффективности исполняемого кода? Или индусский метод – «не понятно как, но всё работает прекрасно» - мы можем считать удовлетворяющим результатом? Ответы на эти вопросы пока находятся за гранью современной теории разработки ПО. Но каждый из заданных вопросов говорит нам: правильная оценка эффективности кода даст ключ к совершенной безопасности. Внедрение методологий работы на крупных проектах даёт лишь непродолжительный результат, который можно добиться и другими способами. Мы не можем понять в начале проекта – идеальный ли перед нами код или страшный монстр. Мы не можем понять это и после сдачи проекта заказчику. Некоторые организации, не понимая этого, живут и процветают годами, усложняя жизнь другим.
Во многих компаниях, которые не могут позволить себе ежеминутно отслеживать код на ошибки, проблему методологии решили следующим образом: дайте программистам кофе и интернет, а на выходе мы посмотрим, что получилось. И это, а вовсе не популярность программного продукта, является основной причиной существования десяток, сотен уязвимостей и ошибок.
Превосходство кода
Разработка Системы должна основываться на Системе. Любая система состоит из взаимосвязанных и взаимодействующих элементов. Ни одного программиста не следует оставлять наедине с компьютером, кофе и собственными мыслями.
Да, здесь мы можем с уверенностью утверждать – удалённая работа страшный грех, который подрывает основы безопасности будущего проекта. Физическая досягаемость к программисту – важный фактор успеха.
Вам, как лидеру проекта, или заказчику, или любому другому управляющему, не следует позиционировать физическую досягаемость как возможность контроля деятельности. Каждый, повторюсь, каждый человек будет работать хуже под пристальным контролем. Возможность общаться с другими разработчиками, находить общие решения, создавать рабочую атмосферу – вот задачи физической досягаемости.
Код – живой язык, который должен быть понятен не только компьютеру с терафлоповым процессором, но и человеческому мозгу, перегруженному размышлениями «а что нас ждёт на ужин». Написание доступных комментариев и понятной документации – следующий фактор. Он особенно важен в крупных проектах, там, где код кочует между большим количеством групп разработчиков.
Не следует тратить на отладку программы 80% времени разработки – всех ошибок не устранить никогда. 80% времени потратьте на создание эффективного кода, 20% - на отладку и вы увидите, как резко сократится количество ошибок.
Развитие софтостроения привело к тому что, пользователь использует 5% от заявленной функциональности. Кажется, перед нами иллюстрация теории «прогресс – маркетинговый миф». В 70-е годы пользователь использовал две-три возможности программы. Потому что больше не было. Сорок лет спустя я включаю Nero 9 и не понимаю, где здесь кнопка прожига диска. Людям по-прежнему хочется использовать две три функции, чтобы не перегружать утомлённый мозг. Откройте список программ на компьютере и проверьте, какие из них были выпущены в этом году. Большинство пользователей в мире используют Windows XP, который вышел в 2001 году. Потому что больше им не надо ничего. Не пытайтесь делать неоновую кофеварку. Вы удивитесь, но большинство хочет просто кофе.
Секрет успешной программы прост: требуется один раз нажать кнопку, чтобы программа заработала. На этом принципе построено всё программное обеспечение от Apple. На этом принципе должна строиться информационная безопасность в нашем веке. Чем проще программа, тем проще её код, тем она безопаснее.
(c) Хакер
|
|
Роджер Желязны |
немного цитат..
Никто не любит, чтобы Вселенная упражнялась на нем в остроумии
[Мерлин «Хроники Амбера»].
- Желания, желания. Желай одного, делай другое, и посмотри, что из этого получится. Тогда ты в любом случае не проиграешь. [«Хроники Амбера»]
Понятие «цивилизация» условно, это искусство жить в больших городах.
[Люк «Хроники Амбера»].
Такова жизнь: доверяй - и тебя обманут, не доверяй – обманешься сам.
[Мерлин «Хроники Амбера»].
Всё правильно: когда огонь вода и ветер очистят мир, и все злобные твари будут уничтожены или унесены прочь, последний и самый могущественный из них не должен избежать этого разрушения.
[«Джек-из-тени»].
Где-то шёл дождь. Обычный или искуственный - где-то идёт дождь, когда бы вы об этом не подумали. Помните об этом всегда, если можете. ["Ангел, тёмный ангел"].
"Он порхал, как бабочка, а ударил, словно грузовик."
[Мерлин «Хроники Амбера»].
Тот кто тень поймать хотел, счастья тень того удел
["Джек-из-тени"].
Необъятна Река-из-Говна и ненадежна ее гладь. [«Хроники Амбера»].
Корона не защищает от кинжала [«Хроники Амбера»].
Удевительно, какими родствениками одаривает нас жизнь [«Хроники Амбера»].
Человек есть сумма всех его свершений, надежд на будущее и сожалений о прошлом. [«Хроники Амбера»].
"Какой смысл перемещаться в пространстве, если везде ведёшь себя, как дурак?"
[«Хроники Амбера»].
постулируй бесконечность, остальное приложится
["Порождения света и тьмы"].
Чем больше власть, тем дороже она обходится [«Хроники Амбера»].
если двое соберутся вместе, наверняка найдется что сказать о третьем. [«Хроники Амбера»].
месть имеет особую остроту, если твой палач - тот, кого ты когда-то любил [«Хроники Амбера»].
Личные чувства мешают хорошей политике, юридическим решениям и деловым отношениям. [«Хроники Амбера»].
Могилы полны людьми, которые считали себя незаменимыми. [«Хроники Амбера»].
Нет хуже врагов, чем бывшие друзья. [«Хроники Амбера»].
Видимый враг не так страшен, как наша собственная внутренняя слабость. [«Хроники Амбера»].
Где ты ... Ужин
[Джек из тени]
время есть то что ты с ним делаешь[«Хроники Амбера»]
Когда боги безмолвствуют, кто-то должен выбирать. [«Глаз Кота»]
Если у меня назначено свидание с глупостью, я на него приду. [«Глаз Кота»]
Не пытайся лечить мои раны, пока не удостоверишься, что они есть. [«Глаз Кота»]
...а когда он спросил:
"Как тебе нравится быть мертвым?",
Сендз пожал плечами и ответил:
"Есть свои плюсы,
Есть свои минусы". [«Глаз Кота»]
Человеческое сознание - не механизм, и я никогда не знаю, где причина и где следствие. И никто не знает.["Мастер снов"]
Он знал, что у смертных есть механические и электрические приспособления, чтобы следить за ходом времени, потому что когда-то украл несколько штук. Но в царстве тьмы они не работали и были никчемными. Разве что годились девчонкам из таверны, которым он выдавал их за предохранительные, очень действенные амулеты.[Джек их тени]
Джек всегда испытывал легкую грусть, когда теряло кровь какое-нибудь новое тело, особенно, если оно было его собственным. [Джек их тени]
- Что тебе нужно, Джек-из-Тени? - спросил он.
- От тебя? Ничего.
- Тогда почему же ты всякий раз, как идешь этой дорогой, приносишь мне вино?
- По-моему, ты его любишь.
- Да.
- Ты, наверное, мой единственный друг, - сказал Джек. - У тебя нет ничего, что мне хотелось бы украсть. У меня нет ничего, что тебе было бы действительно нужно. [Джек их тени]
Удивительно, зачем нужен разум, - сказал Джек, - если он не меняет природы зверя.
- Этот дракон когда-то был человеком, - сказал Утрення Звезда. - его алчность сделала его таким, каков он сейчас.
- Это мне знакомо, - сказал Джек, - поскольку, коротко говоря, однажды мне пришлось быть крысой. [Джек их тени]
- Что мне в тебе нравится, так это жажда жизни, Корвин, - сказала она. - И это одна из причин, по которой мне так не хотелось бы, чтобы ты с ней расстался.
- Мне тоже, - пробормотал я. [Хроники Амбера]
- Что будем делать?
- Прибавим еще газу и будем надеяться, что он все-таки гонится не за нами.
И звук рожка послышался еще, на сей раз практически рядом.
- На чем это он скачет? - спросил я. - На локомотиве? [Хроники Амбера]
И меч очутился в его руке, а мой - в моей.
Я обошел вокруг стола.
- Все-таки я никогда не встречал такого самовлюбленного человека, как ты. С чего ты взял, что лучше всех нас, и больше всех подходишь к трону?
- С того, что я его занял. Попробуй отбери. [Хроники Амбера]
- Кажется, я спал, - заявил рыцарь.
- ...и храпели, - добавил я.
- Сколько мы прошли?
- Около двух лиг.
- И вы не устали?
- Немного устал, - признался я. - Но отдыха пока не требуется.
- О боже! - воскликнул он. - Признаться, я рад, что мы с вами не враги. Послушайте, а вы уверены, что вы не дьявол?
- Конечно, дьявол, - ответил я. - Разве вы не чувствуете запах серы? И мое левое копыто сейчас отвалится от усталости.
Он и в самом деле несколько раз потянул носом воздух, прежде чем усмехнуться шутке, что меня задело. [Хроники Амбера]
Демон заговорил, и голос его звучал как фагот, только не играющий, а произносящий слова.
- Ты - не он. Ты слабее и старше. Но... Эта шпага... Она может принадлежать ему. Кто ты?
- А ты?
- Я - Страйгалдвир. Не шути с этим именем, или я пожру твои печень и сердце.
- Не шутить с этим именем? Я и выговорить-то его не смогу, язык можно сломать. А от моего цирроза у тебя будет несварение желудка. Убирайся. [Хроники Амбера]
Правда, я неоднократно утверждал, что предпочитаю умереть в постели, но во-первых, я имел в виду смерть в старческом возрасте, а во-вторых, надеялся, что на меня наступит слон в тот момент, когда я буду заниматься любовью с молоденькой девушкой. [Хроники Амбера]
|
|
дизайнерский юмор |
ТОП 20 фраз дизайнеру
1. Это нужно срочно
2. Андрей, это реально нужно срочно!
3. Как можно в двух словах допустить три ошибки?
4. Сними наушники
5. Из-за тебя мы потеряем этого клиента!
6. А где логотип?
7. Ладно, совру, что ты заболел. Но в последний раз
8. Пересохрани наконец в 9-м Кореле
9. А можно диаграмку сделать розового цвета?
10. А где опять логотип?
11. Как-то слишком просто. И телефон неправильный
12. Нет, это слишком сложно. Клиент не поймет
13. Вот эту фиговинку внизу сделай, чтобы залезала на край того фото, которое мне нравится, только закорючку побольше и вверх, и синеньким залей под цвет логотипа.
14. Ты издеваешься что-ли. Мне же ЭТО клиенту показывать!
15. Мы же одна команда!
16. Ты точно все выслал? У меня ничего нет!
17. Агентство пишется с "Т"
18. Ты считаешь это нормально? Ааа, директору тоже нравится…
19. Все отлично, только розовый в диаграмке попросили сменить
20. А научишь меня красные глаза с фоток убирать?
|
|
cosplay blame |
Настроение сейчас - гут
единственный, из видиных мной, вменяемый косплей на [blame!]
Silicon_Ivy___BLAME_by_HexReedfly
![]()
|
|
H. R. Giger |
|
|
Без заголовка |
|
|
о творчестве) |
|
|
Без заголовка |
|
|
Без заголовка |
из старенького, кажется прошлое лето, просто настроение, да и вообще внутреннее состояние совпадает
Тихой, неспешной походкой
Иду, но не знаю куда.
Серое все и ветер в лицо,
А в глазах застыла слеза.
И странное чувство внутри,
Одна, не одна, с тобой, без тебя.
А кто-то невидимый стоит позади
И больно когда, слегка обнимает меня.
И становится не грустно, спокойно, легко.
Как - будто все так, как быть и должно.
И не хочется думать что будет еще,
Будущее оставим, его время пока не пришло.
А судьба все будто играет со мной:
Подарит, отнимет, то радость, то боль,
Подразнит, обманет и снова начнет,
Кину кости что ждать, ну что? Чет? Не чет?
|
|
Без заголовка |
| Твое имя | |
| Ты: | Чеширский Кот |
| Тебе нравится: | Извращения какие-то тебе нравятся, точно говорю! |
| Обычно ты: | Загребаешь наполнитель в горшке |
| Ты не любишь: | Быть котом |
|
|
тянбора |
Терминология (хоть и не люблю русскую транскрипцию, но как есть), в общем вот:
( специально для biohazard net)
Формальные упражнение (пошагово):
Ки-о цке! Взгляд
Рэй! Поклон
Камаэ то! Принять стойку
Мэн-о уте! По голове бей
Коте-о уте! По руке бей
Миги кара до-о уте! Справа по телу бей
Хидари кара аси-о уте! Слева по ногам бей
Цке! Укол
Мото-но ити! Отступить
Осамэ то! Меч в ножны
Рэй! Поклон
Поединки:
Начали Хадзимэ
Стоп Ханарэ, вакарэ (приостановка боя)
Стоп, разошлись Тюси, матэ, ямэ (приостановление боя с разведением противников)
Есть, удар Ёси (результативный удар)
Названия результативных ударов:
- Мэн ари (голова)
- Ката ари (плечо)
- До ари (корпус)
- Котэ ари (рука)
- Аси ари (нога)
- Хидзи ари (локоть)
- Хидза ари (колено)
Второй раунд Нихоммэ (начало, после чего идет команда хадзимэ)
Третий раунд Сёбу (т. е. схватка, например 1 игрок выиграл первый раунд, 2 игрок второй, должен быть произведен бой до 3х очков, судья произносит команды сёбу, потом хадзимэ)
Стоп Ямэ (завершение боя)
Стоп, нарушение дзёгай (нарушение правил, выход за площадку)
Слабый асаи, каруи (нанесение нерезультативного, слабого или скользящего удара)
Свободная рука Кабаи-те
Незаслуженная победа Фусэнсё
Обоюдка Ай-ути. Матэ, ай-ути, ямэ.
Итак, если у одного из игроков защитано 2 удара, то победа его, если у обоих равное число очков, то объявляется 3 раунд - сёбу.
Ну вроде в общих чертах усе, если будут вопросы, исправления, дополнения(нужное подчеркнуть) обращайся)
|
|
Без заголовка |
Чашка чая и свет монитора.
Стук по двери в конце коридора.
Может за мной… нет, еще мне не скоро…
Сегодня? Завтра? Когда?!
Еще не время, еще не пора.
Сколько уж длиться эта игра…
Мы с тобой создали эти мира!
Шах? Мат? Никогда!
Шум в колонках, по клавишам стук,
В судьбу сплелися линии рук
И в голове твоего голоса звук
Файлы? Строчки? Слова?
Белый туман и тихий шум моря
Сможет принести лишь минуту покоя,
Твой ангел обнимет меня успокоя.
Дождь? Слезы…? Вода.
Щелчок зажигалки и пламя в ночи,
В округе погасли все фонари.
Только прошу, что внутри не смотри.
С тобой? Без тебя? Навсегда…
|
|
снова начиная жить... |
Разбудит дождь по крыше стуком.
И с чашкой чая ранним утром,
Скажу: «прощай все то, что было!»
Я тех уроков не забыла:
То счастье с болью на душе,
Тех глаз не видеть мне уже,
Но в них я глядя прошепчу:
«Прости» я снова жить хочу.
Вон небо все у тебя впереди…
Ну расправь крылья, давай же лети.
А я останусь, крылья сложу,
Их никто не увидит, никому не скажу.
И я пойду не обернусь,
К тебе я больше не вернусь.
Свою мы цену заплатили,
Хоть чуть друг друга не убили.
Теперь у каждого свой путь,
Но стоит только нам свернуть,
Как встретимся за той чертой,
В той темной клетке мы с тобой.
И холод тот напомнит нам,
Что нам воздастся по грехам.
Но эта жизнь теперь моя,
Смогу я все начать с нуля:
Горячий чай и смех друзей,
Объятья любящих людей.
И это утро новых дней,
Откроет множество дверей.
И пусть не та же, что была,
Шагну я в завтра из вчера.
|
|
снова попадемся в сети... |
|
|
Кабинетка |
|
|
Книги |
|
|