четверг, 20 августа 2009 г.

Размышления. 1-я серия: IT

(О пропаганде информационной безопасности и о прелестях современных средств разработки)

Ну, устраивайтесь поудобней. приготовьтесь к длительному чтению :)

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

Моя мама готовит это варенье так:
  1. Съедаем самую спелую и вкусную алычу
  2. Режем на половинки, аккуратно отмеряя килограммы, но косточки не вынимаем, потому что, в отличие от сливы, они вросшие, не отделяются от мякоти
  3. Мама проваривает первый раз
  4. Мама процеживает жидкую фазу...
  5. … а гущу по частям выкладывает на плоские тарелки, и мы с братом ложками вылавливаем косточки
  6. Варенье проваривается ещё раз...
  7. … и закатывается в банки
Процесс трудоемкий, но в итоге из мелкого кисловато фрукта, доступного практически на халяву (помимо того, что мама собирает алычу с дерева прямо на территории ФГУ «Краснодарское водохранилище», своими алычой, сливой и яблоками часто угощают мамины и папины коллеги по работе, живущие в частных домах с садами: самим им всё равно столько не съесть), получается весьма вкусное варенье, которое весь год мы кладем на творог и едим с чаем. Так что труды окупаются.

Как от рецепта варенья я перейду к теме IT? Что ж, попробую. Дело в том, что в один из таких вечеров, когда нам с братом было поручено выбрать из варенья косточки, на кухне для фона был включен телевизор, и было как раз время передачи «Спокойной ночи, малыши!». Мама с братом устроили свой традиционный тотализатор по поводу героев, которые будут вести передачу в этот раз. Мама ставила на тётю Аню и Каркушу, Дюша — на Филю. Оказались тётя Оксана, Каркуша и относительно новый персонаж Бибигон, единственный из кукол, имеющий человекоподобный вид. Узнав результат, мы не выключили телек, о чём я не пожалел, потому что тема передачи оказалась мне близкой.

Бибигон как раз собирался телепортироваться домой в Бибигонию, но после нескольких неудачных попыток пришлось разбираться, в чём проблема. Бибигон достал свой компьютер. При виде этого цветастого игрушечного ноутбука на лице у меня появилась лёгкая ухмылка, какая обычно появляется, когда я смотрю какой-нибудь пафосный голливудский фильм про тру-хацкеров, одним движением пальца взламывающих базы ЦРУ. Ноут сообщил удивленным героям передачи о сбое системы и запросил пароль для доступа в Бибигонию. Пароля никто не знал, но ноут поспешил сообщить, что для получения пароля нужно отгадать загадки. Чем-то это было похоже на классическую подсказку о пароле или на редкий вид каптчи, ладно. Перебивая друг друга, друзья, естественно, отгадали загадки, и тут-то настало время мне огорчиться: паролем было слово «Бибигония». Огорчению моему способствовало и то, что только несколько дней назад я читал в газете «Аргументы и Факты» статью о плачевном состоянии компьютерной грамотности и безопасности на Руси, где говорилось, в частности, о том, каким должен быть хороший пароль, и о том, какие, напротив, далеко не безопасные пароли используются обычно. Разумеется, было бы жестоко, если бы пароль к Бибигонии был 15 символов длиной и содержал цифры и спецсимволы, но как можно приучать детей к тому, что пароль к ресурсу может совпадать с названием ресурса?! Могли бы уж взять хотя бы какое-нибудь отвлечённое слово. Зато я, наоборот, решил в ближайшее время придумать себе какой-нибудь жутко безопасный пароль, но пока ничего не родил.

Естественно, сферы IT я касаюсь, не только знакомясь со СМИ. Свой ноутбук я брать с собой в Краснодар не стал, а завёл тут себе собственную систему. Для этого, правда, пришлось помучиться. Сначала я мечтал о linux'е на флешке. Live-USB успешно создавался, но комп никак не хотел грузиться с флешки. Я попробовал две флешки, результат был разный, но в обоих случаях отрицательный. Потом я отчаялся в этой затее и пробовал установить Ruby on Rails под виндой, но гем sqlite3 никак не хотел работать. Тогда я попросил папу выделить мне какой-нибудь старый жесткий диск, чтобы я поставил на него Kubuntu. Папа выделил мне свой внешний «винт», с него комп грузится нормально, но работает этот «винт» через пень-колоду, а именно, не хочет нормально инициализироваться, когда определяется BIOS'ом при включении. Приходится грузиться с основного диска, вставлять свой и перезагружаться. В общем, тяжела и неказиста жизнь садиста-мазохиста. Разбираться, в чём дело, было лень (тем более, что ваще ничё не понятно было), поэтому, когда выявилась закономерность, я решил довольствоваться этим.

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

Возвращаясь от повествования к размышлениям, я решил обобщить, что для меня важно в процессе программирования, соблюдение каких требований к задаче и средствам её решения гарантирует мне особенное удовольствие от работы. Итак, вот некоторые мои принципы приятной разработки, ну, или просто вещи, про которые я могу сказать «I'm lovin' it» ©:
  • DRY (Don't Repeat Yourself) — этот принцип я хорошо усвоил из курса «Основы программного конструирования», что был у нас на первом курсе.
  • Open Source — применительно скорее к средствам разработки, нежели к самим моим проектам. Хотя и они, по сути являются open-source'ными, потому что ещё никогда я их не продавал (максимум — помогал за шоколадку), и поделиться кодом мне обычно не жалко. А вот средства разработки я, действительно, предпочитаю именно такие, и вовсе не ради экономии денег, тем более что разницы, как правило, нет :) Гораздо важнее для меня то, что такие продукты очень быстро развиваются, промежутки времени между выходами версий малы, и если есть какая-то очевидная проблема, то велика вероятность, что обновление до последней версии исправит ситуацию.
  • BDD (Behavior Driven Development) — когда для тестирования приложения используются спецификации, описывающие, как оно должно работать, причем «хороший тон» заключается в том, что сначала составляются эти спецификации, а потом уже пишется код, при этом целью является удовлетворение всем спецификациям. К различным BDD-средствам я стал приобщаться недавно, но и то, как я тестировал свои программы раньше, близко к этой доктрине, с тем лишь отличием, что в роли «BDD-мозга», выполняющего проверку спецификаций, представал я сам :) В случае консольной программы — печатал на экран результаты нескольких тестовых случаев и проверял, в случае веб-приложения — поднимал сервер и вручную тырцал ссылочки. Теперь я даже осознаю, что порой мой алгоритм был таким же, как у знакомого RoR-разработчикам инструмента autotest: я вычислял по дате изменения те файлы, которые я модифицировал, и заходил только на эти странички. Стоит ли говорить, что поручить столь однообразную и нехитрую работу лучше программе?! В случае приложения «students» мы активно используем RSpec и Cucumber, проникновенную статью о которых написал мой коллега в блоге команды Moonlighters.
  • Frameworks — как противоположность написанию «с нуля». Одно время я предпочитал как раз второе, потому что, о какой бы системе ни шла речь, я всегда испытываю желание досконально разобраться, как она работает. Теперь я этим переболел (да, в общем-то, и разобрался во многом), и стараюсь концентрироваться на самом интересном, доверяя реализацию разработчикам фреймворка/библиотеки.
  • Богатый язык — когда язык предоставляет больше возможностей, чем требуется на первый взгляд. Поэтому в последнее время я предпочитаю скриптовые языки компилируемым, ибо они, как правило, более высокоуровневые. Например, в ruby наличие таких необычных вещей, как блоки, символы, возможность добавлять в класс методы после его определения и то, что каждая конструкция языка — это выражение, мне очень нравятся. Мне кажется, это позволяет подойти к задаче с разных сторон, найти несколько решений и выбрать лучшее. Последнее я бы даже выделил в принцип — полисолютизм (от poly- и solution — решение).
  • Быстрый результат — не самое важное; но, тем не менее, гораздо приятнее, когда, сделав немного, можно сразу увидеть результат, не надо долго писать «вслепую». Это перекликается с пунктом «Frameworks»: когда часть кода написана за тебя, твой путь к результату становится короче. В качестве примера приведу очень дружелюбные scaffolds (дословно — строительные леса) и библиотеки вроде Inherited Resources в RoR.
Конечно, есть такие ситуации и такие задачи, где все эти принципы воплотить невозможно. Скорее даже, таких задач большинство. Но ведь я и не говорил, что это какие-то непреложные истины или необходимые вещи. Без всего этого можно, а иногда и нужно обойтись. Но если большую часть сказанного можно воплотить, то это значит, что решать поставленную задачу я буду с особым удовольствием и старанием и получу большее удовлетворение от достижения цели.

См.также:

12 комментариев:

  1. http://pix.academ.org/img/2009/08/20/45ab44e7ee24a8fa8c0f9d5b9070c2dd.png - мое видение трехлитровой банки - делал полтора часа :)

    ОтветитьУдалить
  2. Ну с поправкой, что для меня быстрый результат является одним из самых важных пунктов - согласен со всем.
    Польщен ссылкой на мой пост.

    ОтветитьУдалить
  3. Ну вот видишь, а я за полтора часа уже почти всю иллюстрацию нарисовал. На самом деле, то что получилось - это и есть то, что я хотел: всё такое стилизованное и упрощённое. Твоя банка просто не вписывалась бы в это окружение. А вообще она неплохо смотрится

    ОтветитьУдалить
  4. "linux'е на флешке", помнится у меня папа о чем-то таком грезил xDD

    ОтветитьУдалить
  5. Да это вполне реальная вещь, причём довольно полезная, если летит система, а CD-ROM'а в нетбуке нету.

    ОтветитьУдалить
  6. оффтоп: интересно мнение незаинтересованной третьей стороны на тему того, насколько удачно получились банки с вареньем на картинке, и похожи ли блики на червячков? :)

    ОтветитьУдалить
  7. О да, я забыла отметить как профессионально получилась нарисована картинка, действительно года проведёные в художке дают о себе знать (:
    Да, пхожи на червяков, больше скажу-на армию червяков, судя по тому, как они стоят все строем.
    Но больше всего, меня напугал рисунок номер 5, судя по нему, житкость из тарелки растягивает некая невидимая сила, вектор которой автор изобразил на рисунке.
    Но зато, теперь я знаю что самая спелая и вкусная алыча, это сферическая алыча! (:

    ОтветитьУдалить
  8. Я передам Дюше, что мы с ним вместе образуем страшную невидимую силу, он порадуется, я думаю :)

    А рисунок 1 должен был научить внимательного читателя не совсем этому! Если присмотреться, можно заметить, что выделенная алыча в среднем более оранжевая => спелая! :)

    ОтветитьУдалить
  9. Судя по картинке, у вас с братом аж 7 рук.просто ололо xDD

    А по моему, на первом рисунке вообще изображены попки цеплят, цеплят которые что-то ищут в голубой лодке с синей плоской. Причем судя по маштабам циплята-гиганты xDD А рядом спасенная алыча,значит =>циплята переростки ищут по дну эту самую отобранную спелую алычу! В)

    ОтветитьУдалить
  10. Хм, весьма интересная интерпретация... Я даже тоже это увидел :) Но в моём внутреннем мире всё несколько по-другому, а именно: это не цыплята переростки, а просто лодка довольно маленькая, возможно, это бумажный кораблик или просто перевёрнутая пилотка. А "спасённая алыча" - это не алыча, а пятеро цыплят-добровольцев (вид сверху), которые отделились от лодки с товарищами и отплыли в направлении синей стрелки на разведку в поисках суши...

    Хотя возможен и другой вариант: судя по плотности цыплят в лодке, эти пятеро не герои, а неудачники, которые вытянули короткую спичку/красную пуговицу/гнилую семечку и были вынуждены покинуть корабль во имя спасения товарищей :(

    ОтветитьУдалить
  11. Слушай, ты как-то странно мыслишь о_О Это мир Шелдона, флетландия, это ты??
    Пачиму попки плывущих циплят и остров омываемый водичкой и стрелочками - в одной плоскости,а перевернутая пилотка-корабыль совсем в другой??

    ААААА!!! Бедные 5теро циплят,их ждёт газовая зеленоватая камера!!!
    Бездушные птицы ><
    Я думаю, они вытащили красные пуговицы. Почему художник не доработал рисунок? Срочно нужно дорисовывать печально плавающие вокруг красные пуговицы. Ну а в рабочей версии можно сказать что это рисунок скатерти на которой стояла пилотка с алычёй В)

    Кстати, по новым правилам русского языка, цИпленок, от слова ципочка В)

    ОтветитьУдалить
  12. Ой, вот косяк, надо будет запомнить. Совсем я отстал от современного русского языка! Я-то думал правильно цаплёнок, от слова цапля...

    Художнику выговор! Будущее рисунка остаётся неясным, но добровольцы могут спасти его, дорисовав необходимое самостоятельно :)

    Нет, это не флэтландия, и я пока ещё не Шелдон... Не всё так плохо, как кажется, бывает и хуже :) А насчёт разных плоскостей - на самом деле, я никак не смог себе объяснить этот парадокс, и думал, ты не заметишь этот маленький косяк, но нет... Чёрт, чёрт, чёрт :'( Что мне теперь делать?? :)

    ОтветитьУдалить