вторник, 11 ноября 2008 г.

Полезен ли Blogger, полезен ли Python?

Этот блог я начал в апреля 2007 года. Что мне это дало и какие итоги?
Во-первых, начнем не с блога, а с самого Python. Что мне дало изучение этого языка в свободное время, написание кое-каких программ? Результат есть. Это - понимание процесса программирования. Пусть даже на не очень таком экспертном уровне. Но понимание есть и оно реально помогает в жизни, которая кстати постоянно меняется. Теперь я веб-разработчик. Что я использую? Не Python. Но он на очереди. Я используя как ни странно PHP, а именно простой и удобный фреймворк CodeIgniter. Он прост и всякий хостинг поддерживает PHP. Поэтому и использую. На очереди питоновский Django. Python мне дал возможность думать и писать программы. Дал основу.
А этот блог оказался самым моим любимым и посещаемым. За один день - 30 декабря 2008 года - блог посетило 62 человека. Для меня это рекорд. Пост "Прокрастинация с пользой, или История о структурированном отлынивании" набрал 112 просмотров. Также было очень интересно почитать ваши комментарии, пусть их и мало.
Кстати, создатель Python - Guido van Rossum завел себе блог на Blogger, есть возможность читать первоисточник, так сказать. И следовать за ним. Новая фишка, я думаю, что это из twitter, потихоньку превращает Blogger в полноценную социальную сеть. И это хорошо. По крайней мере, можно стать намного ближе к великим умам, таким как Гвидо.

четверг, 24 июля 2008 г.

Прокрастинация с пользой, или «История о структурированном отлынивании»

Этот текст — перевод старой, но по-прежнему актуальной статьи Джона Перри, посвященной организованному отлыниванию — способу сделать много за счёт того, что не делается что-то самое важное.

Возможно, кто-то сразу вспомнит другие способы снять это «напряжение старта», когда вместо того, чтобы начать то самое, Большое и Важное, берешься за другие, тоже полезные, но не такие срочные и важные дела, или просто дробишь большую задачу на несколько мелких и не страшных. Отлично! Теперь в вашем арсенале ещё на одно средство больше. Расскажите о своих впечатлениях в комментариях.

* * *

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

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

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

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

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

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

Наверняка вы уже задаётесь вопросом: «А как же важные задачи в верхних пунктах списка, которые человек так никогда и не выполняет?» Должен признать, здесь действительно кроется потенциальная проблема.

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

Другой хороший пример — бланки заказа книг. Сейчас на дворе июнь. В октябре начинается мой курс по теории познания. Бланки заказа на учебники уже сейчас просрочены. Легко принять это за задачу с горящим дедлайном (специально для не-отлынивателей поясняю: дедлайн, как правило, начинает по-настоящему гореть недели через две после заявленной даты). Секретарь на факультете практически ежедневно звонит мне с напоминаниями, студенты иногда сами спрашивают, по каким книгам мы будем учиться, и бланки заказа книг лежат прямо передо мной на рабочем столе, под обёрткой от сендвича, который я съел в прошлую среду. Эта задача практически основная по важности в моём списке; она не даёт мне покоя и тем самым мотивирует заниматься другими полезными, но значительно менее важными делами. А в книжном магазине и так зашиваются с заявками, которые подали вовремя не-отлыниватели. Если я заполню бланки и принесу их к середине лета, всё будет в порядке. Мне необходимо заказать нужные популярные книги от хороших издателей. У меня появится какое-нибудь новое важное дело от настоящего момента до, скажем, 1 августа. И вот тогда я дозрею до этих бланков, чтобы заняться ими вместо этого нового дела.

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


прочитано здесь

понедельник, 19 мая 2008 г.

Научитесь программировать за десять лет

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


Зайдите в любой книжный магазин и вы увидите, что вам предложат изучить язык Java за семь дней с помощью книги Teach Yourself Java in 7 Days, а также обнаружите другие бесчисленные варианты учебных пособий, предлагающих изучить Visual Basic, Windows, Интернет и многое другое через несколько дней или часов. Я провел следующий расширенный поиск на узле Amazon.com:

pubdate: after 1992 and title: days and

(title: learn or title: teach yourself)

и получил 248 результатов. Первые 78 указывали на компьютерные книги, а под номером 79 стояла книга Learn Bengali in 30 days (Изучите бенгальский язык за 30 дней). Я заменил слово “days” (дни) словом “hours” и получил такие же удивительные результаты: запрос возвратил еще 253 книги, среди которых первые 77 были компьютерными книгами, а за ними под номером 78 следовала книга Teach Yourself Grammar and Style in 24 Hours (Овладейте грамматикой и стилем за 24 часа). Из общего количества в 200 книг, в наибольшей степени соответствующих запросу, 96% были компьютерными книгами.

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

Попытаемся проанализировать, что могло бы означать такое название, как Learn Pascal in Three Days (Изучите язык Pascal за три дня):

* Learn: В течение трех дней вы не найдете времени для написания хотя бы нескольких значимых программ и не сможете извлечь опыт из своих успехов и неудач в работе с ними. У вас не хватит времени, чтобы поработать вместе с опытным программистом и понять, сумеете ли вы когда-либо почувствовать себя комфортно в среде этого языка программирования. Короче говоря, трех дней не будет достаточно для того, чтобы действительно чему-либо научиться. Таким образом, авторы подобных книг могут пообещать вам достичь только поверхностного знакомства, а не глубокого понимания. Но, как сказал английский поэт Александр Поп, недостаточно полное обучение несет в себе большую опасность.
* Pascal: За три дня вы сможете изучить синтаксис языка Pascal (если вы уже знакомы с подобным языком), но не сможете в достаточной степени научиться тому, как использовать этот синтаксис. Короче говоря, программист Basic может научиться писать программы в стиле синтаксиса Pascal с использованием Basic, но не сможет понять, в чем фактически состоят преимущества (и недостатки) языка Pascal. Но неужели это столь важно? Алан Перлис однажды заметил: “Язык, освоение которого не позволяет найти новые подходы к программированию, не заслуживает изучения”. Ознакомление лишь с начальными сведениями о языке Pascal (или, что более вероятно, о языке Visual Basic или JavaScript) может быть оправдано только в том случае, если это необходимо, чтобы воспользоваться существующим инструментальным средством для выполнения конкретного задания. Но в таком случае речь идет не об обучении программированию, а о том, как приобрести навыки выполнения конкретного задания.
* in Three Days: К сожалению, как показывает следующий раздел, этого недостаточно.

Научитесь программировать за десять лет

Исследователи (Хейес, Блум) показали, что для приобретения экспертных знаний в любой широкой области человеческой деятельности, включая шахматную игру, сочинение музыки, рисование, игру на фортепьяно, плавание, теннис, а также проведение исследований по нейропсихологии и топологии, требуется приблизительно десять лет. Причем создается впечатление, что в действительности этот срок невозможно сократить: даже Моцарту, который проявил выдающиеся музыкальные способности в возрасте 4 года, потребовалось еще 13 лет для того, чтобы он начал сочинять музыку мирового класса. Рассмотрим другой музыкальный жанр; неосведомленные люди считают, что Битлз совсем внезапно появились на музыкальной арене, выпустив ряд хитов, занявших первые места, и появившись в шоу Эда Сэлливена в 1964 году. Но они играли в маленьких клубах Ливерпуля и Гамбурга с 1957 года, и смогли издать диск Sgt. Peppers, который стал их первым важным успехом, лишь в 1967 году, а до этого просто пользовались определенной популярностью. Сэмюэль Джонсон считает, что фактически требуется больше десяти лет: “Превосходства в любой области можно достичь только упорным трудом в течение всей жизни; его нельзя купить по меньшей цене”. И даже Чосер жаловался: “Жизнь так коротка, что не хватает времени на овладение мастерством”.

Поэтому я предлагаю следующий рецепт достижения успеха в программировании:

* Заинтересуйтесь программированием и занимайтесь им ради развлечения. Старайтесь сделать эти занятия достаточно привлекательными для того, чтобы не хотелось их бросать в течение десяти лет.
* Общайтесь с другими программистами; читайте программы, написанные другими. Это гораздо важнее по сравнению с любой книгой или курсом обучения.
* Программа. Лучший вид обучения — это обучение на собственном опыте. Более формально эта мысль выражена так, что “максимальный уровень производительности труда в определенной области не достигается автоматически как результат приобретения опыта, но даже очень опытные специалисты могут повысить продуктивность своего труда в результате сознательного стремления к усовершенствованию” (с. 366) и “действительно эффективное обучение невозможно без постановки вполне определенных заданий с соответствующим уровнем сложности конкретным лицам, информативной обратной связи и возможности повторения и исправления ошибок” (с. 20-21). Книга Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life является интересным справочником по этой теме.
* Если у вас есть такое желание, посвятите четыре года обучению в колледже (или еще больше — в магистратуре). Благодаря этому вы получите доступ к некоторым должностям, для занятия которых требуется документ об образовании, а также сможете приобрести более глубокие знания в избранной специальности, но если вам не нравится сидеть на лекциях, то сможете (пройдя посвящение) приобрести аналогичный опыт непосредственно на рабочем месте. В любом случае одних книжных знаний не будет достаточно. Как сказал Эрик Рэймонд, автор книги The New Hacker's Dictionary, “Никто не сможет стать выдающимся программистом, изучая компьютерные науки, или выдающимся художником, изучая кисти и краски”. Один из лучших программистов, которые когда-либо у меня работали, имел лишь среднее образование; он создал большой объем превосходного программного обеспечения, ведет собственную группу новостей, а благодаря полученным им опционам на акции, несомненно, стал намного богаче по сравнению с тем, чего мне когда-либо удастся достичь.
* Работайте над проектами с другими программистами. Будьте лучшим программистом в некоторых проектах; будьте худшим в некоторых других. Будучи лучшим, вы сможете проверить свои способности вести проект и внушать другим свои взгляды. Будучи худшим, вы сможете учиться у мастеров и сумеете понять, что им самим не нравится делать (потому что они будут заставлять вас делать это за них).
* Работайте над проектами после других программистов. Старайтесь разобраться в программах, написанных кем-то другим. Узнайте на собственном опыте, что требуется, чтобы понять и исправить чужую программу без помощи автора. Подумайте о том, как спроектировать собственные программы, чтобы облегчить работу для тех, кто будет сопровождать их без вашего участия.
* Изучите по крайней мере полдюжины языков программирования. Включите в это число по одному языку из тех, которые поддерживают абстракцию классов (Java или C++), функциональную абстракцию (Lisp или ML), синтаксическую абстракцию (Lisp), декларативные спецификации (Prolog или шаблоны C++), сопрограммы (Icon или Scheme) и параллелизм (Sisal).
* Не забывайте, что термин “компьютерные науки” содержит слово “компьютер”. Узнайте, сколько времени требуется вашему компьютеру для выполнения команды, выборки слова из памяти (с попаданием и без попадания в кэш), чтения последовательных блоков с диска и перевода головок на новый участок диска. (Ответы приведены здесь.)
* Примите участие в работе по стандартизации языка. Это может быть комитет по разработке стандарта ANSI C++ или проводимое в вашей компании совещание по выбору стиля отступа на 2 или 4 пробела. В любом случае деятельность в этой области позволит вам узнать, нравится ли другим тот или иной язык, насколько явно выражены их предпочтения, и даже, возможно, немного о том, чем обусловлены их предпочтения.
* Но призовите на помощь свой здравый смысл, чтобы правильно выбрать время расставания с этой работой по стандартизации.

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

Фред Брукс в своем эссе No Silver Bullets изложил план поиска превосходных проектировщиков программ, состоящий из трех частей:

1. Систематически проводите поиск выдающихся проектировщиков, стараясь выявить их как можно раньше.
2. Назначьте наставника, ответственного за подготовку перспективного сотрудника, и тщательно контролируйте весь ход подготовки.
3. Предоставьте растущим проектировщикам возможность взаимодействовать и стимулировать друг друга.

Эти рекомендации основаны на том, что некоторые люди уже имеют качества, необходимые для того, чтобы стать великолепным проектировщиком; нам остается только содействовать их развитию. Алан Перлис выразил эту мысль более кратко: “Каждого можно научить ваять, а Микеланджело достаточно было только объяснить, как не надо ваять. Точно так же обстоят дела с выдающимися программистами”.

Если вы со мной не согласны, не отказывайтесь от своего решения купить книгу по языку Java; по-видимому, она не станет для вас бесполезной. Но вы не почувствуете, что ваша жизнь изменилась коренным образом, и не станете действительно многоопытным программистом после того, как пройдут 24 часа, несколько дней или даже месяцев.

пятница, 16 мая 2008 г.

семинар по языку программирования Python

24 мая 2008 года в Киеве состоится семинар по языку программирования Python
Жаль, что я живу не в Киеве и жаль, что прикоснулся к Python только "мизинцем левой ноги" :( , а так бы поприсутствовал.
Вход БЕСПЛАТНЫЙ.

вторник, 6 мая 2008 г.

С определенных урлов выдернуть текстовые ссылки

Захотелось мне стать фирлансером. А делать, то по сути, ничего не умею. Начал тусоваться на веблансере. Читаю как то объявление:

Нужно с определенных урлов выдернуть текстовые ссылки вида slovo.html, перемешать их и вставить в текстовой файл. Оплата 40 USD.

Ну, думаю, пришел мой звездный час. Сейчас я заработаю 40 USD. А потом сомнения: "Смогу ли я?". Открыл ранее скачаную книгу Dive into Python и как настоящий ленивый программист, пользуясь наработками других, написал:

#!usr/bin/python
"""
Program parsing urls, searching links, writing shuffled links in file
"""
#preferences
adresses = ['http://mail.ru', 'http://netz.ru']
wesearch = 'netz.ru'
result_file = 'e:\\urls.txt'

#URLLister
from sgmllib import SGMLParser

class URLLister(SGMLParser):
def reset(self):
SGMLParser.reset(self)
self.urls = []

def start_a(self, attrs):
href = [v for k, v in attrs if k=='href']
if href:
self.urls.extend(href)

#result
import urllib, re, random
result = []
log_file = open(result_file, 'a')
for adress in adresses:
usock = urllib.urlopen(adress)
parser = URLLister()
parser.feed(usock.read())
usock.close()
for url in parser.urls:
if (re.search(wesearch, url)):
result.append(url)

#in file shuffled list
random.shuffle(result)
for url in result: log_file.write(url + "\n")
log_file.close()

И все работает, урра!
Но... заказчик выбрал другого исполнителя и отдал ему вожделенные 40 USD.

воскресенье, 6 января 2008 г.

Просто хотелось написать, что у меня не получается совершенствоваться как python-программист. Честно взять и признаться. Не получается.
Лень...
Другая работа...
Остутствие мотивации...
Что еще...
Я решил действительно развиваться как питонист. И было интересно. Я думаю, что просто бессистемный подход виноват. Нет... я виноват конечно, что не применил правильный подход, что лень было. Но... любое бессистемное действие, пусть даже вначале весьма бурное - обречено на провал.