книги хакеры / журнал хакер / 123_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
>>m |
|
||||
w Click |
to |
|
|
|
|
coding |
|||||
|
|
|
|
|
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
||
|
|
|
df |
|
|
n |
e |
|
|||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
Сколько стоит средний индус?
Если ты прилежно ходил на пары по экономике или когда-нибудь жил на одну зарплату, тебе известна непоколебимая истина: экономия — основа всего. Именно поэтому забугорные компании для разработки программных продуктов пользуются китайцами, индусами, белорусами, чехами ну и нами, жителями славной Державы. Фишка индусов и китайцев в том, что их много и стоят они крайне дешево, однако какие-то важные проекты им поручать опасно — код может получиться очень кривым. Зато цена удельного индуса, работающего в индийской же программерской конторе, колеблется от 4-5 до 15-20 долларов в час. Средний белорус из средней белорусской программерской конторы стоит уже 20-30 баксов в час. А вот в «нормальных странах Европы и Америки» гений штатного рядового программиста может стоить и 30, и 40, и 50 долларов в час, в зависимости от обстоятельств. США — 40-50 баксочасов. Имеются в виду цены разработки проектов, с учетом труда тестировщиков, маркетологов, дизайнеров и даже аренды помещения. То есть, это общая стоимость часа разработки.
Тебе же стоит рассчитывать на 1-3 у.е./час, если ты еще совсем учишься, и 10-15 у.е./час, — если ты уже что-то умеешь. Хорошо пристроившись, можно и на 17-20 баксов в час договориться, но это редкость. На таких условиях фрилансерам отдают только какие-то сложные проекты, где нужны строго определенные и относительно редкие знания.
Надежностьзаказчикаприходитсяопределятьпокосвеннымпризнакам. Иногдастоиттребоватьавансдоначалаработынадпроектомили послеопределениякакой-тоегостадии. Этообычнаяпрактикапри фиксированнойценезапроект. Еслизаказчикпредлагаетпочасовую оплату, тофинансыприезжаютвконцекаждойрабочейнедели. Помни, чтонетолькотыможешьуйтивзапойисорватьвсесроки, нои заказчикможетпропасть, кактолькополучитготовыйпроект. Разница втом, чтотебегрозитотметкавпрофиле(прощай, высокаякарма!), а заказчикутакоенаказаниеможетбытьидолампочки.
Нарынкесвободногопрограммерскоготруданаиболеевостребованы специалистыширокогопрофиляпосозданиювеб-сайтов(чащевсего, PHP+AJAX) или, наоборот, оченьузкого— спецыпоработамсбазами данных. ЕстьмногопроектовдлялюбителейJava, обычноэточто-то дляWeb. Виндовыхприложениймало— толькокакие-тонесложные утилитыилисервисы; всесерьезноеотдаетсянаоткуппрограммерским конторам.
Вообще, компаниинанимаюткодеранасторонетогда, когданужно дешевовыполнитьединичноезадание, котороепокаким-топричинам немогутсделатьштатныекодеры; илижештатныхкодеровнетсовсем, потомучтоукомпаниинетдлянихпостояннойработы. Готовьсяработать сразнымилюдьми, вплотьдотаких, которымпридетсятолковать, чем Flash отличаетсяотHTML. ОнипростонабиваютвGoogle что-товроде freelance programmers, тыкаютнасайтизпервойпятеркирезультатови абстрактноформируютзадание. Отнесисьвнимательнеектакимдеятелям, — обезьянасгранатойитодействуетболеелогичноипредсказуемо! Еслиточнаяформулировказаданиязвучит, как«авотвысделайте, мыпосмотрим, искажем, чтопоправить», стоитвыяснить, будетли заказчикплатитьвамзачасыработыилистрогозаконечныйрезультат. Вслучаефиксированногогонораралучшеположитьнанихболтсразу. Ну, илиотправитькиндусам. Когдазаказчикнезнает, чтоонхочет, он, скореевсего, инормальноплатитьнеготов.
Чтобытолковыхзаказовпопадалосьбольше, имеетсмыслпродвигать себяна«несамыхпопулярныхвмиресайтах». Нотутужеиндивидуальныйвыбор— постояннопросматриватьокеанработ, забольшую
частькоторыхнестоитбраться, илииметьделосдостаточнонебольшим количествомзаказовсменьшейконкуренциейивменяемымиработодателями. Мнебольшеподушепоследнее. Деловтом, чтоновыезаказы приходитсяпостоянномониторить— кпервымподавшимзаявкуобычно благоволятбольше. Нуикогдапотокновыхзаказовменьше, еголегче контролировать.
САМООРГАНИЗАЦИЯ
Свободныйграфикработыимелькающиенагоризонтефинансыстимулируюттвоежеланиекодитьтолькопервыемесяцы. Чемдальше— тем хуже. Важноуметьзаметить, чтотытеряешьвремя, неэффективноего используешь— слишкоммногоспишь, слишкоммного«разминаешься передработой», слишкоммалодействительноработаешь. Следиза своимраспорядкомсам, разнадтобойникогонет. Иначенебудетнормальногозаработкаисвободноговремени, атынадолгозависнешьв промежуточномсостояниимеждупрограммингоминичегонеделанием. Еслипойдешьпоальтернативномупутиибудешьсильносебястроить, топопадешьнаследующийпараграф— смотриниже.
Шумофисовитолпынародатебявсегдараздражали? Тебяненапрягаетпаруднейиночейторчатьпередмонитором? Допустим, так, нобезразнообразныхлюдишеквокругтвойхарактерподпортится. Будучиоторваннымотсоциума, тыотстанешьивпрофессиональном, ивкультурномплане. Зряулыбаешься, современемчетырестеныи
Время и деньги
Цену на хорошие проекты сбивают часто (а точнее, почти всегда). Под большими заданиями, пахнущими серьезным финансированием, вывешены десятки демпингующих заявок от лиц индуской национальности и стратегов, пожелавших добавить себе хороший проект в портфолио. Стремясь получать «вкусные» заказы, нужно хорошенько подумать, как и чем привлечь заказчика, чтобы он хотя бы связался именно с тобой. Кроме грамотно заполненного профиля, ссылок на хорошие работы и прочих очевидных методов, надо пробовать что-то свое. Например, нагадить в комментах по делу, как-то выделиться. Важно, чтобы заказчик тебя заметил, и ему захотелось тебе ответить (пусть даже в негативном клю- че). Иногда очень действенен метод «рассказать, почему заказ нереально сделать в заданные сроки и почему он стоит намного
больше». Или можно попробовать оптимизировать портфолио для проекта, чтобы предстать перед заказчиком в наилучшем виде. Единого рецепта тут нет, но общий курс, надеюсь, ясен.
Порой действительно стоит согласиться поработать за копейки, просто ради опыта/портфолио, но это компромисс, на который идут новички. Рядом с качественно выполненным серьезным проектом и позитивным отзывом заказчика будет висеть еще и цена, которую он заплатил. С чего бы новым заказчикам платить больше? Вот и подумай, как аккуратно объяснить жителю славной Америки, что вон тот сайт ты сделал за 2 у.е. в час, а ему будешь делать только за 10 у.е.? В самом начале «фрилансерской карьеры» можно создать что-то для себя или друзей, поучаствовать в конкурсах (когда оплачивается только та работа, которую выберет заказчик) или же взяться за open-source проект. Под надзором супервайзеров ты достаточно быстро наберешься опыта, да и ссылка на этот проект будет красоваться в профиле.
Когда перед тобой работодатели всего мира (а не одного региона), диапазон работ и цен дико расширяется. Даже кодеры с самыми базовыми знаниями могут рассчитывать на какую-то работу с ценой 1-3 бакса в час. Если ничего не умеешь, придется начинать с такой цены и учиться, учиться, учиться. Постоянное мелькание перед глазами проектов с более высокой оплатой должно подтолкнуть тебя к скорейшему изучению новых технологий.
090 |
XÀÊÅÐ 03 /123/ 09 |
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
наборжадныхбуржуеввскайпеначинаютдоставать. Дажеплавающие нагоризонтезеленыебанкнотынетакрадуют. Смыслбабла, когдаего тратитьнекогда? Дорогоекурево, пафосноебухлоидажебилетнаVIPместонаконцертеDepeche Mode непринесутсчастья. Такчто, нетеряй голову, небросайжизнь. Всехвмиреденегнезаработаешь. Постоянно совершенствуйсвоизнанияинезабывайопрофессиональномросте. И, кстати, онем. Большоеколичествореальныхпроектовучатжизни лучшелюбойтеории, нотехнологиисовершенствуются, прогресс куда-тоидет, атебенадоидтиидажебежатьрядом. Вон, .Net 4.0 еще невыпустили, азаказчикиужеглядятнатех, ктоготовиспользовать нерелизнутыетехнологииASP.NET MVC! Тыпонялменяправильно
— читайнужныесайты, следизатрендамиизанимайсясамообучением, иначебезнадежноотстанешьиустареешь. Владениесвежимитехнологиямиповыситтвоишансынаполучениеновыхпроектов.
Важныйаспектработыдома— родныестены. Сначалаонитакие близкиеиуютные, ноэтотолькосначала. Потомтебепостояннохочется изнихвырваться… Когдадомассоциируетсянесотдыхом, асработой, онначинаетжутконапрягать. Этоощущениеприходитчерез2-3 месяца фриланса, аборотьсяснимприходитсяоченьдолго.
PАЗГОВОРСФРИЛАНСЕРОМ
Насамомделе, этастатьясобранаизопытапорядкадесяткафрилансеровразногопрофиля, отжурналистикиидизайнадо, собственно, кодинга. Фриланситьстроговодномнаправленииполучаетсяредко, поэтому мысобралидлятебявсесамоенужноеиважное. Авместозаключительногоабзацасморальюиидейноймыслью— поставилиВасю, оннаучит. Человек-фрилансер, известныйвмирукакZihotki, пишетнаASP.NET, работалнапарукрупныхкомпаний, нослетаушелнасвободныехлебав интернет. Атеперьонделитсяснамисоветами, типсамиитриксами.
Оработе
Счегоначинать— сказатьсложно. Человеку, которыйпоканеимеет толковогоопыта, дляначаластоитпростоподумать, «анужнолимневсе это». Еслинужно— осмотрись, выбери, чемзаниматься, посмотриГугль илиЯндекс, поищифрилансовыебиржи, оценизаказы, попробуйодиндвасделатьдлясебя(еслираньшевообщенигденеработал). Потом потихонькупробуйучаствоватьвконкурсах, многочитайинабирайся опыта. Незабывайследитьзавременем, можешьпочитатьчто-топо психологии, ибопридетсяповоеватьссобойисвоимипривычками.
Обошибках
Ошибкиуменяпостояннослучаются, — какулюбогочеловека. Решалв рабочемпорядкеичиталмноговсего, чтобыповозможностиизбежать. Сложнеевсего, наверное, говорить«нет». Дажееслисогласилсяна работу, аонаоказаласьглупой, скучнойилидлительнойиприэтомочень дешевой— отказывайся. Когдаутебябудет, чтопредложитьзаказчику, не занижайставки, ценивремяисилы. Когдаберешьсязапроект— учись вернооцениватьсилыивремя. Этодолгонеполучается, всегданаходится багиличто-тоеще, чтомешаетзавершитьпроектывсрок. Приходитсяработатьвэкстремальныхусловиях. Надооцениватьсрокисрасчетомнанепредвиденныетрудности. Сзаказчикомнельзяругаться. Нужностараться предугадатьжеланиязаказчика: узнать, чтобыонхотелещедобавитьк сделанномуирассказатьемуегожеидеи, выдавзасвои. Конечно, заотдельнуюплату. Нуиеслинатебявзвалилидополнительнуюработу, внесли коррективывпоследниймоментилиурезалисроки, решайтакиенегативныемоментычерездополнительныеденьги, аневыплескаминервов. В идеале, чтобыпотокденегнепрекращался, нужнопостояннодержатьна прицеле4-5 параллельныхзаказчиков. Нескольконебольшихпроектов частолучшеодногобольшого. Кстати, небросайстарыхзаказчиков, они могутподкинутьещеработы. Дергайихиногда, интересуйсяделами.
Орынкеуслуг
Наибольшееколичествозаказов— наPHP. Занимследуют.NET сJava (нанихобычнодостаточнокрупныезаказы), нуазамыкаютсписок
— Pyton сRuby.
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
|
X |
|
|
|
|
|
|||
|
|
- |
|
|
|
|
|
d |
|
||
|
|
F |
|
|
|
|
|
|
t |
|
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
||
|
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
|
||||
>> |
w Click |
|
BUY |
|
m |
||||||
|
|
|
|
|
|||||||
|
codingw |
|
|
to |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|||
|
|
w |
|
|
|
|
|
|
|
o |
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
|
-x cha |
|
|
|
|
Zihotki собственнойперсоной
Тебе никто не поможет!
Звучит фатально, но если ты схватишь воспаление легких или, там, ногу сломаешь, то в больничке тебе особо и не помогут. Если ты числишься официальным безработным, то лучше стать на биржу труда или получить лицензию индивидуального предпринимателя, иначе ты рискуешь встретиться с налоговиками или остаться без страховки и пенсии. Последнюю можно отправить к черту (долго до нее еще), а вот первые два fuckтора звучат очень опасно. Играть в привереду на бирже труда, поступить на заочное или придумать еще что-то — это уже твое личное дело, поступай, как тебе удобнее. Универсальный способ — фрилансить легально, как индивидуальный предприниматель. Но тогда и налоги придется платить, как предпринимателю. В общем, ты предупрежден, не оставляй этот вопрос без внимания.
Фрилансилиофис?
Офис надежнее и спокойнее; фриланс — более напряженный, нагруженный и ненадежный, но знаний и опыта приносит намного больше. Для меня — пока фриланс. Устану напрягаться — тогда будет офис. z
XÀÊÅÐ 03 /123/ 09 |
091 |
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
|
|
r |
|
|
|
|
P |
|
|
|
|
|
NOW! |
o |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
>>m |
|
|
|
||||
w Click |
to |
|
|
|
|
coding |
|
|
|||||
|
|
|
|
|
|
|
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
|
|
. |
|
|
|
|
|
|
.c |
|
|
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
||
|
|
|
df |
|
|
n |
e |
|
|
|
|||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
АЛЕКСЕЙ ЧЕРКЕС
/ ALEKSEY.CHERKES@GMAIL.COM /
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
ИНТИМНОЕ
ЗНАКОМСТВО СPYTHON
«Python играетключевуюрольвнашемпроизводственномпроцессе.
Безнегосложнобылобывыпуститьтакойпроект, какStar Wars: Episode II»
Tommy Burnette, старшийтехническийдиректор, Industrial Light
«Смомента основанияPython былважнойчастьюGoogle, иостаетсяейпомеретого, каксистемарастетиразвивается. МножествоинженеровGoogle используютPython, имыищембольшелюдей, умеющихснимработать».
Peter Norvig, директорпоисследованиюкачества, Google, Inc.
Е |
щевянваретымогзаметить, чтомысталипосвящатьопре- |
идеттекст, вводимыйвинтерпретатор. Посленего— ответинтерпрета- |
||
деленноеколичествожурнальногопространствазамеча- |
тора(результатвычислениявведенного выражения). |
|||
|
|
тельномуязыкупрограммированияподназванием«Python». |
|
|
|
|
Сэтоговыпускамыбудемпубликоватьподветематических |
>>> 2 + 2 |
|
статьизаномер: первая— длятех, ктотольконачинаетизучатьэтот |
4 |
|||
рулезныйязык, авторая— дляболее-менеепродвинутыхпрограммеров. |
|
|||
|
||||
Кстати, иГорл, иНикитос— обазаписныефанатыПитона;). Итак, Python |
Получается, интерпретаторможноиспользоватьвместоинженерного |
|||
— это высокоуровневый мультипарадигменный язык программиро- |
калькулятораналампахнакаливания:). |
|||
вания c динамической типизацией. Он относится к языкам общего |
|
|||
назначения. Главный акцент в языке делается на чистоту и чита- |
>>> tax = 12.5 / 100 # Это комментарий |
|||
бельность синтаксиса, легкое освоение, минималистичный дизайн, |
>>> price = 100.50 |
|||
целостную архитектуру. Благодаря этому, программы на Python быст- |
>>> price * tax |
|||
ро разрабатываются и легко сопровождаются. Исходный текст в 2, а |
12.5625 |
|||
то и 10 раз короче, чем код аналогичной программы на Java! |
>>> price + _ |
|||
|
|
|
113.0625 |
|
|
LET’S PLAY! |
>>> round(_, 2) |
||
|
||||
|
||||
ДавайзапустиминтерпретаторPython инемногопоиграемся. Встатье |
|
|||
Вместосимволаподчеркиванияподставляетсяпоследнеевыведенное |
||||
небудетпространныхпримеровиобъяснений— простокускикодадля |
||||
скорогоознакомлениясязыком. Чтожемывидим? Засимволами«>>>» |
значение. Поддерживаетсяарифметикасвещественными, комплекс- |
092 |
XÀÊÅÐ 03 /123/ 09 |
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-xcha |
|
|
|
|
>>
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
codingw |
|
|
to |
|
|
|
|
|
||
w Click |
|
|
|
|
|
|
||||
|
|
|
|
|
o |
m |
||||
|
w |
|
|
|
|
|
|
|
|
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
ИзEmacs можносделатьотличнуюIDE дляPython
нымичислами. Разумеется, «длиннаяарифметика» тоже поддерживается.
ОСНОВЫОСНОВ
Человеку, знакомомусС-подобнымиязыками, синтаксис Python можетпоказатьсяоченьнеобычным, ведьвнешний видосновныхоператоровPython отличаетсяотсвоих аналоговвдругихязыках. Этонестрашно, ибокажущаясянеобычностьсинтаксисанеумаляетегодостоинств
— систематичностиипоследовательности. Привыкание наступаетбыстро— буквальнопослепервыхдесятковнаписанныхстрокязыкбудетвосприниматьсянехужеродного. Python оченьпродуманиминималистичен, чтоотнюдьне мешаетемуобладатьмощностьюигибкостью. Длябазового знакомствасвозможностямиэтогозеленогозмиядостаточ- нопары-тройкивечеров. Рассмотримпример:
>>># Выведем последовательность Фибоначчи.
... # Элемент равен сумме двух предшественников.
... a, b = 0, 1
>>>while b < 10:
... print b
... a, b = b, a + b 1 1 2 3 5 8
Первое, чтобросаетсявглаза— использованиетабуляцийилипробелов(нонетогоидругоговместе!) дляобозначенияблоковоператоров(вС, напомню, используются фигурныескобки). Втелоциклавходитдвестроки. Сперва этонепривычно, нонасамомделе— чертовскиудобно!
Самоеглавное, чтосамязыкопределяетединыйстиль кодирования. Прошузаметить, большеневозникаетмногостраничныххоливаровнафорумахотом, гдевсе-таки нужноставитьскобочку. Кодавтоматическистановитсяхорошочитаемым. Ещеоднаизмелочей, обуславливающих популярностьPython — этокортежи. Обративнимание, как впримереприсваиваютсязначенияпеременным. Переменные, перечисленныечереззапятую, образуюткортеж. Кортежи— эточто-товроденеизменяемыхмассивов. Их можноприсваиватьдругдругу(каквпримере). Чтобыв Python поменятьместамизначениедвухпеременныхx и y, необязательновводитьтретьювременнуюпеременную. Достаточнолишьнаписатьx, y = y, x!
Кстати, оченьостроумновнемсделанциклfor. Вот пример:
>>> # Выведем длины всех строк из списка.
... list = ['Python', 'is', 'cool', '!']
>>> for x in list:
... |
print x, len(x) |
|
Python 6 |
|
|
is 2 |
|
|
cool 4 |
|
|
! 1 |
|
links |
|
|
• http://python.org |
ВPython циклfor умеетперебиратьтолькоэлементы |
— здесьестьвсе, что |
|
коллекций(внекоторыхязыкахдляэтогоестьforeach). |
тебенужно, включая |
|
Оченьизящноерешение, неправдали? List — этосписок |
отличныйтуториал |
|
изчетырехстрок. Мыперебираемихвцикле, выводяна |
дляначинающих. |
|
экран. Итерироватьсяможнонетолькоповстроенным |
|
|
коллекциям. Любойобъект, предоставляющийинтерфейс |
• http://www.intuit.ru/ |
|
итератора, можнописатьвместонашегоспискаlist. Атакие |
department/pl/python |
|
объектывстречаютсядовольночасто, например, итериру- |
— объемныйтуториал |
|
ясьпообъектуоткрытогофайла, мыбудемполучатьстроки |
нарусском. |
|
внем. Задачапечативсехстроквфайлезайметнаодну |
|
|
строкубольше, чемэтотпример(файлнужноеще закрыть). |
• ru.diveintopython. |
|
Перебордиапазонацелыхчисел(какэтообычноделалось |
org/toc.html — уже |
|
вС) — эточастныйслучайописаннойсхемы. Естьфункция |
ставшаяклассикой |
|
range(), котораявозвращаетколлекцию-диапазон. |
книга«Вглубьязыка |
|
Кважнымфишкамязыкаотносятсятакжевстроенные |
Python». |
|
коллекции: словари(парыключ-значение), списки |
|
|
(динамическиемассивы), кортежи(близкикнеизменя- |
|
емымспискам), строки(что-товродеспискасимволов) и множества(неиндексируемыеколлекциинеповторяющихсяэлементов). Дляработыснимисуществуетмного функций, методовиспециальныхсинтаксическихсредств. Всеколлекции, кроместрок, являютсягетерогенными(в нихможнохранитьобъектыразныхтиповданных, включая другиеколлекции). Благодарябогатству, функциональности ипростотеиспользования, онистановятсякирпичиками твоихпрограмм. Тыуженедумаешьвтерминахнизкоуров- невыхцикловипеременных-счетчиков, незабиваешьсебе головумыслямиовыделениииосвобождениипамятиит.п. Алгоритмобычнозаписываетсятак, какимонипредставляется— наглядноилаконично.
Python широкоприменяетсявнаучныхрасчетахвкачествеопенсорснойальтернати-
выMatLab
XÀÊÅÐ 03 /123/ 09 |
093 |
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|
|||
|
|
X |
|
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
|||
|
F |
|
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
|
r |
|
|
P |
|
|
|
|
|
NOW! |
o |
|
|||
|
|
|
|
|
|
|
|||||
|
|
|
|
|
BUY |
>>m |
|
||||
w Click |
to |
|
|
|
|
coding |
|||||
|
|
|
|
|
|||||||
w |
|
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
||
|
|
|
df |
|
|
n |
e |
|
|||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
C |
|
E |
|
|
|||
|
|
X |
|
|
|
|
|
|||
|
- |
|
|
|
|
|
d |
|
||
|
F |
|
|
|
|
|
|
t |
|
|
|
D |
|
|
|
|
|
|
|
i |
|
|
|
|
|
|
|
|
|
r |
||
P |
|
|
|
|
|
NOW! |
o |
|||
|
|
|
|
|
|
|
||||
|
|
|
|
|
BUY |
|
|
|||
|
|
|
|
to |
|
|
|
|
|
|
w Click |
|
|
|
|
|
m |
||||
|
|
|
|
|
|
|||||
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
o |
|
|
. |
|
|
|
|
|
.c |
|
||
|
|
p |
|
|
|
|
g |
|
|
|
|
|
|
df |
|
|
n |
e |
|
||
|
|
|
|
-x cha |
|
|
|
|
ForecastWatch.com используетPython
ИГРАЕМСЯСФУНКЦИЯМИ
ФункциивPython являютсяобъектамипервогокласса. Этозначит, что ихможноиспользоватьвпрограммебезовсякихограничений, подобно объектампростейшихтипов(числа, коллекцииит.п.). Функциимогут иметьразнуюобластьвидимости(локальные, глобальные), передаватьсявдругиефункциикакпараметрыивозвращатьсяизних. Память подфункциивыделяется, какидлядругихобъектов. Еслинафункцию закончилисьссылки, еекодудаляетсясборщикоммусора. Попробую объяснитьнапримере:
>>> def make(a):
... return lambda x: x**a
>>>f2 = make(2)
>>>f4 = make(4)
>>>for i in [1, 2, 3]: print f2(i) 1 4 9
>>>for i in [1, 2, 3]: print f4(i) 1, 16, 81
Здесьдемонстрируетсясразунесколькоособенностейязыка. Рассмотрим ихподробнее. ВPython можносоздаватьанонимные(безымянные) функции. Ещеониназываютсяlambda-функциями(естьразделматематики, на- зываемыйlambda-исчислением, которыйслужиттеоретическойосновой дляфункциональногопрограммирования). Значениевыраженияlambda x: x**a — этофункция, имеющаяодинпараметрx ивозвращающаяэтот параметр, возведенныйвстепеньа(** — операторвозведениявстепень). Имяэтойновойфункцииприсваиваетсявточкевызоваmake. Еслиэтого несделать, онапростобудетудаленасборщикоммусора.
Ещеодноважноепонятие— замыкания(closures). Замыкание— этофункцияипеременные, используемыевеелексическомконтексте. Вданном примеренашаанонимнаяфункцияиспользуетвнешнююпеременную«a», хотяонаинепередаетсявнеекакпараметр. Когдаанонимнаяфункция создаетсявнутриmake, длянеебудетсозданозамыкание. Внеговойдетэта функцияизначениепеременной«а». Еслипользовательвызоветэтуфункцию,значение«a»,необходимоедляработы,будетизвлеченоиззамыкания ииспользовано. Скаждымновымвызовомфункцииmake создаетсяновое замыканиесразнымизначениями«a». Назначениефункцииmake — создаватьдругиефункции(!), которыевозводятсвойединственныйаргументв степень«а». Этотпримерлучшеосвоить, преждечемчитатьдальше:).
Какбылоуказановыше, Python — мультипарадигменныйязык. Помимовсегопрочего, онсодержитэлементыаспектно-ориентированного
программирования(АОП). Обэтойпарадигмеговорят, когдатрадиционные средстваООПвпрограмменепозволяютвыделитьнекоторуюфункциональностьвотдельныйобъектилимодуль. Такуюфункциональностьназываютсквозной. Классическиепримеры: трассировкавызовов, проверка инвариантовфункции(предипостусловиявызова), обработкаошибоки т.п. Впрограммах, написанныхнаболеетрадиционныхязыках, изменение функциональности, покоторойнепроисходилоразбиениепрограммына
Основные
реализации
Существует довольно много интерпретаторов Python от разных организаций. Ниже приведены основные:
•CPython — эталонная реализация. Именно над ней работает Гвидо. Суть в том, что для Python не существует никаких официальных стандартов от ISO или ANSI, а в качестве неофициального стандарта выступает CPython. Она написана на чистом С, исходные коды открыты. Команды компилируются в байт-код, который затем выполняется виртуальной машиной. Ее можно найти в *nix-систе- мах, в Win на всяких мобильных телефонах и т.п.
•Jython,IronPython— реализация на основе JVM. Включает в себя интерпретатор, написанный на Java и компилятор в байт-код. Предоставляет бесшовную интеграцию Java-классов с Python-клас- сами. Есть возможность статической компиляции. Это значит, что свои сервлеты и апплеты ты можешь написать на Python.
•IronPython — примерно то же самое, что Jython, только для .Netплатформы. Присутствует интеграция .Net-типов в Python-классы и обратно. Возникают некоторые трудности с использованием CPython-библиотек.
•Stackless Python — форк CPython. Оптимизирован для меньшего потребления памяти. Лишен некоторых проблем работы с потоками (GIL). Считается, что эта реализация лучше подходит для использования на платформах с ограниченными ресурсами, такими как микроконтроллеры.
•PyPy — реализация Python, написанная на Python! Годится для легкой проверки новых возможностей. Позволяет транслировать код в байткоды других виртуальных машин (Javascript, LLVM, CLI и.др).
•PyS60 — реализация Python для смартфонов фирмы Nokia. Сделана на базе CPython c добавлением новых модулей для работы с Symbian OS.
объекты(сквознойфункциональности), требуетбольшихзатрат, поскольку такиеизменениязадеваютбольшиеучасткикода. ДекораторывPython
— вотспособрешенияпроблемы. Декораториграетрольсвоеобразной оберткидляметода. Рассмотримпример:
>>> def logger(f):
... |
def ret( *args, **kwargs ): |
... |
print "enter in", f.__name__ |
... |
f( *args, **kwargs) |
... |
print "exit from", f.__name__ |
... |
return ret |
>>> |
|
>>>@logger
... def foo(x):
... print "foo:", x
>>>foo("hello") enter in foo foo: hello
exit from foo
Функцияfoo помеченадекоратором@logger. Декоратор— этофункция иликласс, предназначенныйдляизменениядругихфункций. Например, применениедекоратора@logger кфункцииfoo эквивалентноследующей записи: foo = logger(foo). Тоесть, настоящейфункциейfoo становитсято, чтодекоратор@logger вернет, получивнавходнашуfoo.
Этонесложныйдекоратор, которыйпростотрассируетвызовыфункций, выводянаконсольсообщенияовходеивыходеизних. Еслитрассировку
094 |
XÀÊÅÐ 03 /123/ 09 |
|