gns_ua: (Default)
gns_ua ([personal profile] gns_ua) wrote2012-08-22 01:30 am

забыть бейсик

На тридцать первом году жизни и двадцатом программирования, со мной случилось это.

Глядя на собственный говнокод такого типа:

def getitems(workers):
    items = []
    for w in workers:
        items.extend(get_worker_items(w))
    return items


- я вдруг перестал понимать, зачем вся эта унылота и почему не сделать просто:

def getitems(workers):
    for w in workers:
        for i in get_worker_items(w):
            yield i


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

Это прорыв в сознании, я щетаю. Как говаривал Владимир Леви: - повелело освободить новый код от школярской линейной последовательности. И, далее там же: - я эту прямоходность «системы» неосознанно почитал за достоинство, с детства вбита. Пытался, с малым успехом, протащить сквозь весь код, протоптать магистраль.

И вроде ж знаешь уже много разных вещей, - серьёзно занявшись программированием после нескольколетнего перерыва, ничего, впрочем и к сожалению, не отнявшего от предварительного пути бейсик=>паскаль=>фокспро=>qt=>пхп (шелл сюда не включаю по ряду очевидных причин). Но вот чтоб сразу мыслить в этих терминах...

[identity profile] tassadar-ha.livejournal.com 2012-08-22 05:25 am (UTC)(link)
Так это другая крайность - Пайтон-вэй, получается. А первое вполне может быть наследием С/С++.

Кстати, а чего ты из программирования ушел?

[identity profile] gns-ua.livejournal.com 2012-08-22 09:56 am (UTC)(link)
> Пайтон-вэй, получается

Дело-то не только в визуальном стиле - завтра это, скажем, абсолютно непринуждённо отдекорируется так, что продюсер и консумер будут параллельно работать на разных машинах и общаться через очередь. Не переписывая сам код вообще! А послезавтра появится второй консумер той же очереди. Я уж нареализовывался deep parallelization "вручную", хватит:)

> Кстати, а чего ты из программирования ушел?

Заскучал. Программил-то тогда на вижлфокспро Бизнес Аналитику. А тут, внезапно, - Линукс :)

[identity profile] tassadar-ha.livejournal.com 2012-08-22 11:27 am (UTC)(link)
Да, палаллелизация для меня - темный лес, увы :-)

[identity profile] gns-ua.livejournal.com 2012-08-22 11:41 am (UTC)(link)
Особая магия кооперативной многозадачности:

>>> def getlist(n):
...     print "GETLIST started"
...     for i in xrange(n):
...         print "GETLIST next"
...         yield i
...     print "GETLIST finished"

>>> def getdouble(list):
...     print "GETDOUBLE started"
...     for x in list:
...         print "GETDOUBLE next"
...         yield x*2
...     print "GETDOUBLE finished"

>>> l = getlist(3)

>>> for i in getdouble(l):
...     print "Got", i

GETDOUBLE started
GETLIST started
GETLIST next
GETDOUBLE next
Got 0
GETLIST next
GETDOUBLE next
Got 2
GETLIST next
GETDOUBLE next
Got 4
GETLIST finished
GETDOUBLE finished
Edited 2012-08-22 11:41 (UTC)

[identity profile] tassadar-ha.livejournal.com 2012-08-22 11:43 am (UTC)(link)
Не, вот тут уже я не силен и почти ничего не понимаю, увы :-(

[identity profile] gns-ua.livejournal.com 2012-08-22 11:48 am (UTC)(link)
Если всё это написать в стиле (1), то отработает одна функция, вернёт лист, вторая функция отитерирует его и вернёт лист умноженных на два, а потом фор проитерирует по нему и напечатает.

Ставим yield - получается генератор, ленивые вычисления, каждый элемент каждого списка считается только тогда когда его спрашивают. Можно первый лист даже бесконечным сделать. Поскольку они в цепочке - чудесным образом все трое работают по очереди :) Это просто :)
Edited 2012-08-22 11:48 (UTC)

[identity profile] tassadar-ha.livejournal.com 2012-08-22 11:51 am (UTC)(link)
Теперь понятнее, да :-)

Надо бы что-то почитать/послушать на тему компиляторов, распределенных вычислений и прочего.

[identity profile] gns-ua.livejournal.com 2012-08-22 11:53 am (UTC)(link)
Рекомендую http://www.dabeaz.com/coroutines/

Читается и осиливается, наверное, где-то примерно чуть легче SICP.

[identity profile] tassadar-ha.livejournal.com 2012-08-22 11:58 am (UTC)(link)
К стыду своему, SICP не читал тоже. Давненько лежит в списке, но все руки не доходят - тут столько интересного по ИИ всякому :-)

Кстаде, ты не проходил курсов на Курсере/Юдасити? Они очень прикольные, я бы сказал. Вот, к примеру:

https://www.coursera.org/course/hetero

[identity profile] gns-ua.livejournal.com 2012-08-22 12:02 pm (UTC)(link)
SICP я не дочитал :)

На курсеру давно хочется но руки не доходят. Даже свой хадуповский курс профтыкал :(

[identity profile] tassadar-ha.livejournal.com 2012-08-22 12:03 pm (UTC)(link)
А там был хадуповский курс? Где?!

[identity profile] gns-ua.livejournal.com 2012-08-22 12:04 pm (UTC)(link)
Или это не там было... Кидали ссылку, в общем.

[identity profile] tassadar-ha.livejournal.com 2012-08-22 12:05 pm (UTC)(link)
Жаль, я бы послушал. Сейчас много с Биг Дата сталкиваюсь.

(Anonymous) 2012-08-22 03:28 pm (UTC)(link)
Закончил на курсере

Design and analysis of algorithms. Part I
Software engineering for SaaS

Сейчас делаю Algorithms. Part I и Macnine Learning. Много из того, что идет в части supervised learning, у нас шло в дисцплине "Численные методы и оптимизация" (в частности, та же интерполяция методом наименьших квадратов, покоординатные спуски и т.д.) Пока немного скучаю.

ex_webgrossmeister

[identity profile] tassadar-ha.livejournal.com 2012-08-22 06:24 pm (UTC)(link)
Из курсов Курсеры и Юдасити по вот этому я получил их сертификаты:

Programming a Robotic Car (Udacity CS373)
Building a Search Engine (Udacity CS101)
Web Application Engineering (Udacity CS253)
Machine Learning (Stanford Online Class)
Introduction to Databases (Stanford Online Class)
Model Thinking (Coursera Class)
Algorithms: Design and Analysis, Part 1 (Coursera Class)

Ну, и по паре курсов еще - не получил.

Да, численные методы - это все прикольно, конечно, но вот лично у меня после КПИшного курса не появилось понимания, куда это интерполяцию, экстраполяцию и прочие радости использовать в жизни. Где они работают, ну, кроме шаблонных примеров из советских учебников с осциллографами? Зато мы умели доказывать все те теоремы, которые лежат в их основе, да... Полезно.

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

Ценность этих курсов для меня в том, что они учат применять все эти модели на практике и показывают примеры современных и весьма крутых систем, в которых это все работает.

[identity profile] gns-ua.livejournal.com 2012-08-22 06:27 pm (UTC)(link)
> Да, численные методы - это все прикольно, конечно, но вот лично у меня после КПИшного курса не появилось понимания, куда это интерполяцию, экстраполяцию и прочие радости использовать в жизни. Где они работают, ну, кроме шаблонных примеров из советских учебников с осциллографами? Зато мы умели доказывать все те теоремы, которые лежат в их основе, да... Полезно.

capacity planning

Да, доказывать теоремы очень полезное и увлекательное занятие. Главное, хорошо оплачиваемое. Особенно если вместо того чтобы взять и сделать авто капасити планнинг можешь только написать по памяти пару доказательств связанных теорем :)

[identity profile] tassadar-ha.livejournal.com 2012-08-22 06:33 pm (UTC)(link)
На определенном этапе в мозгу происходит какое-то переключение, tipping point между доказыванием теорем и написанием Гутнико-ботов. По сути, и там и там мы используем одни и те же методы. Но пока человек не увидит 5-10-15 примеров того, как эти методы могут быть полезны в жизни и какие реальные проблемы могут решать, он просто не понимает, где и как это использовать. Все, чот ему остается, - доказывать теоремы.

Ну, и поскольку доказывать их он прекращает, как только выпускается из универа, и за пару лет полностью забывает, то цена такого образования в сухом остатке - 30-60 учебных часов. Это то, что мы помним из КПИшных курсов лет через 5 после окончания.

Так что эти курсы для меня стали настоящим спасением. Помимо того, что они реально прокачивают меня как аналитика, они дают какую-то надежду на то, что у меня таки получится сдать GRE Computer Science и поучиться в каком-нибудь этом их стэнфорде взаправду.

[identity profile] gns-ua.livejournal.com 2012-08-22 06:40 pm (UTC)(link)
Вот я с этим и столкнулись года четыре тому, когда появилась задача - и оказалось, что никто не знает с какой стороны вообще её решать. Ну, кроме как глазками пырясь в картинки. К щастью я когда-то на пальцах из общих смутных представлений делал подобное для розничной торговли :)))

А с этими курсами у меня трабла даже не в том что времени не хватает... Там ещё глаза разбегаются когда смотришь список ;)

[identity profile] tassadar-ha.livejournal.com 2012-08-22 06:44 pm (UTC)(link)
Благодаря этим курсам на новом месте работы мне удалось создать и вести группу по business intelligence. Это, типа, статистические и вероятностные методы для решения бизнес-задач. Думаю, ты в курсе. Капасити планнинг - это как раз из этой оперы :-) Веду людям тренинги, строим прототипы всякие. Развлекаемся, как можем, в общем :-)

Забавно то, что диплома КПИ у меня при этом все еще нет, даже бакалавра :-)

Конечно, любой stanford guy легко заткнет такого умника как я за пояс, но тут у нас это считается круто. Месяц назад даже получил джоб оффер от нашей единственной конторы, которая занимается искусственным интеллектом, на позицию тимлида. Комизм этого в том, что я никогда не работал программистом и у меня, повторюсь, нет технического диплома :-)

Вся это Украина - какой-то тотальный сюрреализм.

[identity profile] gns-ua.livejournal.com 2012-08-23 12:33 am (UTC)(link)
Но согласись, субъективно-персонально в этом есть некоторые преимущества.

Конечно, не "только в этой стране недоучка придирчиво собеседует магистров и аспирантов" - но в Другой Стране мне понадобилось бы намного больше иметь raw brain power, чтоб по такой крутой кривой пройти. А зная своё распиздяйство и проч. в молодости, в годы оны, нормальная пологая кривая всё равно бы не получилась.

Бишь, скажем так - да, десять лет назад я сильно дохуя о себе думал, завышенная самооценка интроверта и всё такое, но только в Этой Стране это могло прокатить, только здесь я мог в итоге оказаться прав несмотря ни на что. В Другой Стране не уверен что, ну, потому что, я не Гейтс и не Джоббс, это скорее всего были бы десять лет уж совсем проёбаные, потому что опыт на реальных вещах приобретается, а к реальным вещам кто б меня подпустил :)

Другой вопрос, что, вскарабкавшись на более пологий уже участок, обнаруживаешь этот неловкий момент когда тебе надо сотрудников искать а вокруг полно кретинов :)
Edited 2012-08-23 00:35 (UTC)

[identity profile] tassadar-ha.livejournal.com 2012-08-23 05:21 am (UTC)(link)
Все так, конечно, но есть нюансы: кривая менеджмента меня сейчас не интересует, потому как сваливать все равно надо специалистом, а для специалиста здесь предельно низкий потолок профессионального развития из-за того, что сложных и интересных задач в индустрии почти что нет. Все рутина одна.

Тут много можно говорить об аутсорсинге, синьйорах и все такое, но факт остается фактом: здесь твой ИИ, алгоритмы и прочая радость никому особо не нужны. Я бы, вот, с удовольствием поработал программером в каком-то Гугле, но видя, чем занимаются наши кодеры, - я рехнусь за полгода написания интернет-магазинов и бизнес-логики в компании украинских "синьйоров". У аналитика хоть простор для творчества чуть побольше.

Оно все взаимосвязано. Протухло все, к сожалению.

А что не Гейтс и не Джобс - так оно ведь не от хорошей жизни так. Я бы с огромным удовольствием поучился в каком-нибудь стэнфорде. Да и КПИ, вот, к зиме должен закончить, по идее. Курсы эти, вот, - на них честно тратится каждый день от часа времени, уже год.

Беда не в самомнении, а в тотальной бессмысленности КПИ. Ну реально же, не образование, а 4 года ритуалов во имя диплома.

Конечно, жаль, что я родился не в какой-нибудь Америке, и все оно пошло таким странным путем с этими образованиями и работами. Ну, может, еще повезет догнать тех, кто вырос и выучился там. Сейчас я от них лет на 5 отстаю, конечно.
Edited 2012-08-23 05:38 (UTC)

[identity profile] tassadar-ha.livejournal.com 2012-08-22 06:37 pm (UTC)(link)
Гы, "про вовка промовка", только что пришел еще один сертификат по Human Computer Interactions :-)

(Anonymous) 2012-08-22 07:10 pm (UTC)(link)
Поздравляю!

[identity profile] tassadar-ha.livejournal.com 2012-08-23 08:09 am (UTC)(link)
Спасибо :-)

(Anonymous) 2012-08-22 07:09 pm (UTC)(link)
Ну, у меня в работе (НИИ трансформаторостроения) как раз ЧМО сплошь и рядом --- обработка результатов измерений, поиск минимума функций нескольких переменных и т.д. В одной из статей искал поиск оптимального решения системы уравнений от двух переменных, где эти переменные входили в пределы интегрирования, решил методом скорейшего покоординатного спуска. Поэтому в части supervised learning пока немного скучно.

Сам на курсере с июня.

ex-webgrossmeister

[identity profile] gns-ua.livejournal.com 2012-08-23 12:36 am (UTC)(link)
Дружище, ты б зарегался как-нибудь.

[identity profile] tassadar-ha.livejournal.com 2012-08-23 08:09 am (UTC)(link)
В ML курсе это все только начало. Дальше будут всякие методы опорных векторов с различными ядрами, нейронные сети, онлайн-обучение...

Будет интересно, не переключайтесь :-))

(Anonymous) 2012-08-22 07:16 pm (UTC)(link)
Вот, кстати, на Курсере принстонский курс по алгоритмам (Algorithms. Part I & Part II) гораздо более hands-on, чем стэнфордский (Design and Analysis of Algorithms).

ex-webgrossmeister

[identity profile] tassadar-ha.livejournal.com 2012-08-23 08:08 am (UTC)(link)
Ага, как раз прохожу его :-)

[identity profile] ctype.livejournal.com 2012-08-22 10:00 am (UTC)(link)
это кстати не пайтон-вей. я успешно єксплуатировал данный подход еще в interbase года 1996 выпуска ... потом правда наступил "облом" ибо всякие ораклы его не поддерживали (да, там можно было вернуть курсор из функции, но это уже не то)

[identity profile] gns-ua.livejournal.com 2012-08-22 10:09 am (UTC)(link)
Ну да, современные языки все реализуют разные интересные штуки. В меру своей испорченности.