вторник, 2 ноября 2010 г.

Будущее начинается сегодня

В своей статье "Грезы о будущем сквозь дым пожаров" я писал о перспективных направлениях разработки. А теперь прочтите эту новость: "Microsoft покупает компанию Canesta". Сравните, чем занимается компания Canesta с тем, что я описал в пункте "Пример первый" моей статьи.
То, что я- непризнанный пророк :*) , чьи прогнозы уже многократно сбывались, я скромно умолчу. Акцентирую внимание на то, что те примеры ПРАВИЛЬНОГО направления развития, которые я показал в моей статье- это не отдаленная фантастика. Это- реальность. Это- уже здесь.

Если вам мои примеры из статьи кажутся слишком абстрактными, то я создал сайт "Идеи для стартапов" с описанием конкретных, практичных идей. Эти ПРАВИЛЬНЫЕ идеи, укладывающиеся в общемировые тренды развития ИТ-технологий, раздаются БЕСПЛАТНО. Пожалуйста, берите их, реализуйте. Если вам нужны деньги на реализацию- смело с этими идеями идите к инвесторам. Как минимум, эти идеи не хуже других идей, которые выслушивают инвесторы регулярно.

вторник, 26 октября 2010 г.

Учите Java!

Я уже писал о специализациях. Программистам рекомендовал учить Java, Oracle. Хотя та рекомендация сделана в 2007, но и спустя 3 года актуальности не утратила. В подтверждение сохранившегося тренда вот другая, свежая статья: "Нужны успех и слава? Учи, программист, Java!"
Мои рекомендации в силе. Очень надеюсь, что любознательной молодежи они помогают определиться в жизни.

среда, 20 октября 2010 г.

Чем могу - помогу!

В своем блоге я много пишу об образовании, о трудоустройстве молодых специалистов, о профориентации. С 2007 года в блоге накопилось множество статей с советами, рекомендациями. «Достаточно ли этого?» - задумался я- «Чем еще можно помочь начинающему свою профессиональную карьеру молодому специалисту?» Тогда и родилась у меня мысль создать сайт с идеями для стартапов. В чем проблема?
В одной стороны– есть молодой специалист, который не отягощен семейными обязательствами, молод и дерзок душой. С другой стороны– полное отсутствие опыта и знания рынка. Если у молодого специалиста есть желание попробовать себя на ниве стартаперства, то отсутствие опыта значительно снижает вероятность успеха его начинания. По большей части успех будет носить случайный характер.
Если говорить об опытном специалисте, то он, да, «хлебнул» опыта. Знает потребности рынка. Однако он и так загружен работой, чтобы распылять себя по стартапам. К тому же, обзаведясь семьей, набрав кредитов, опытный специалист не имеет права на риск, сопровождающий стартаперов.
Почему бы не объединить преимущества обеих групп специалистов? Опытный специалист со своей стороны поделится идеями, а молодой специалист энергично возьмется за реализацию понравившейся идеи. Я не знаю, как и чем молодой специалист может отблагодарить за идею, поэтому предлагаю просто дарить идеи. Тем более, просто идея, сама по себе, не стоит ничего.
Для того, что делиться идеями я создал страницу в facebook.com «Идеи для стартапов». Куда приглашаю всех. Кроме того, на своем личном сайте с моими идеями я завел раздел, где собираю ссылки на аналогичные сайты.
Опытные специалисты, пожалуйста, не пожалейте пяти минут, чтобы кинуть на страницу краткое описание своей идеи. Ведь наверняка же, у многих в голове крутится куча идей, но все руки не дойдут до реализации! И не дойдут– я вам говорю! Поэтому, не жадничайте, поделитесь своей идеей, «осчастливьте» кого-то, сделайте доброе дело!
Молодые специалисты, не стесняясь, берите идею на реализацию. По всем моим идеям на сайте опубликованы условия использования идей, которые защищают вас от каких-либо юридических преследований. Предлагаю вам самый простой путь реализации идеи:

  1. Выбираете идею и заявляете, что беретесь за ее реализацию (см. условия использования идей).
  2. Идете на http://startuppoint.ru/, где выкладываете идею как свою и собираете команду по идею, находите ментора, инвестора.
  3. Участвуете с этой идеей на различных стартаперских мероприятиях (см. раздел на сайте «Ссылки по теме»).
  4. Собрав команду, найдя инвестора, реализуете проект.
  5. Профит.

Надеюсь, «спасибо» не забудете сказать за подаренную идею!

среда, 22 сентября 2010 г.

Ай Варданян, ай молодец! Ловко он со Сколково придумал!

Естественно, это моя догадка. Внутренне я чувствую диссонанс в концепции проекта, вижу внешние нестыковки. А докопаться до сути слабО. Но есть одно предположение откуда "растут ноги" у проекта.
О "распиле бабла", о глупости чиновников не обсуждаю- это банально и, не более, чем "внешняя ширма" глубинных процессов, протекающих во властных структурах. Во власти очень умные, хитрые, широкомыслящие люди, поэтому не успокаивайтесь на таких простых объяснениях.
О том, что бизнес-школа "Сколково" и проект российской Кремневой долины в районе Сколково совершенно два разных проекта я сразу уяснил. Однако, заметил, что очень многие их не разделяют. Говоря об инновациях в Сколково постоянно иллюстрируют статьи, видеосюжеты показом бизнес-школы "Сколково", которая с проектируемой долиной никак не связана... или все же связь такая есть?
Вспоминается история про субсидии сельхозпроизводителям на ГСМ. Проект активно пробивали нефтянники. Кто-то ("исходники" этой истории я уж и не найду, чтобы быть конкретнее) удивившись этому в кулуарах спросил, зачем им это. Они же денег не получат- деньги аграриям предназначаются. Ответ был такой: "Мы на величину субсидии повысим стоимость ГСМ. Таким образом, пройдя через руки аграриев, все деньги, выделяемые на субсидии, окажутся у нас."
Этот хитрый трюк, вероятно, применяется и в Сколково. Отстроенная бизнес-школа скоро вряд ли окупится. А как можно быстро вернуть инвестиции в эту школу, а, еще лучше, получить при этом приличный доход? Бизнес-школа сама по себе в государственном масштабе не особо интересна, чтобы за нее из гос.казны вытянуть деньги. А вот если если задумать большой проект (нынешняя власть ой как падка на технологии!), подменить понятия по ходу процесса, и, оп-ля! Бизнес-школа становится ключевым элементом высокотехнологичного инновационного проекта "Х" и, фактически, через гос.деньги возвращаются инвестиции в школу. Деньги выделенные на инновации, просачиваясь через сколковских инноваторов (как через аграриев в предыдущем примере) попадают в руки... в правильные руки и кошельки.
Вот такое вот предположение. Если это так, то браво! Всегда восхищался такими широкомыслящими людьми.

понедельник, 16 августа 2010 г.

Грезы о будущем сквозь дым пожаров

Статья будет интересна тем, кто следит за проектом в Сколково, стартаперам, инвесторам, студентам, да и гос.чиновникам-фантазерам бы не помешало ее прочесть. В ней также объясняется, почему у меня чешутся руки набить рожу стартаперам. И, наконец, в первый раз я с максимально позитивным настроем озвучиваю свои мысли о том, чем полезным можно заняться в Сколково. Для начала несколько историй.

Первая история.
В университете нам философию преподавал молодой очень умный и талантливый преподаватель. Речь шла об Абсолюте. Он говорил ярко и в перерыве обсуждение было продолжено. Мы, как технари, попросили "мяса"- на примере показать что есть Абсолют? Уж не признает ли философия существование Бога, как воплощение этого самого Абсолюта?
-Конечно же, нет! - воскликнул учитель.
-Например, что можно считать Абсолютом? - спросили мы его, не улавливая суть вопроса.
-Ну, например, цвет- красный мы воспринимаем как красный.
-Нет, это не Абсолют! - ответили мы - цвет красный только потому, что наш мозг так обрабатывает длину волны 620-740 нанометров. Дальтоники, например, его не так воспринимают.
Задумался он. А мы продолжили мысль:
-Абсолюта не бывает. Все в мире относительно: абсолютная температура 0 градусов по Кельвину не достижима- всегда будет 0.1 градус или 0.0001 градус. Но не чистый, абсолютный нуль. Не бывает абсолютной пустоты даже в глубоком космосе - Абсолюта нет, все относительно.
Возразить этому он не смог.

Вторая история.
Обучался я разработке медицинских приборов, поэтому часть обучения у нас проходила в медицинском университете: анатомия, нейрофизиология, физиология, биохимия и т.п. На одной из "лаб" мы обучались работе с прибором ВЧ-прогревания. Не учтя, что перед ним сидят технари, преподаватель старательно объяснял как пользоваться прибором. Он успел только объяснить нам, что включать прибор надо только в розетки, надписанные "220 В", включать красным тумблером и убедиться, что прибор включился по загоревшейся лампочке под красной кнопкой. Наверное, медикам-студентам это все надо было объяснять, но мы явно заскучали. Тут его вызвали на 10 минут. Когда через 10 минут он вернулся, то увидел, что мы без его разрешения прибор включили, без всяких методичек разобрались как он работает, настроили его и по очереди друг другу прогревали горло. Все сделали правильно- технарь логикой разберется с этим "за нефиг делать". А вот медик- исключительно методом запоминания, какую кнопку для чего нажать надо.

Третья история.
В том же мед. университете на лекции нам рассказывали про устройство мозга человека. Говорили, что нейроны выполняют разные функции: одни постоянно выдают заряд на любой входное воздействие; другие выдают на выход заряд только, если на всех входах поступили заряды; третьи выдают заряд, если хотя бы на одном из входов есть заряд. Рассказывали про долговременную память и про рабочую, кратковременную память. Мы были поражены явными аналогиями. Вам ничего все это не напоминает? Булева арифметика, винчестер, оперативная память компьютера- похоже? На перемене мы обсудили с преподавателем эти аналогии. Преподаватель был не менее нас поражен: оказывается, медики, варясь "в собственном соку" и не предполагали, что в информатике ученые "своим ходом" изобрели те вещи, которые уже веками существуют в природе.

Четвертая история.
Эту историю рассказал мне однокурсник. После курса в мед. университете мы знали как работает сердечно-сосудистая система (ССС) человека: сердце как насос, артерии отводят кровь от сердца, вены- к сердцу. Чтобы не было обратного кровотока, "подсоса", в венах есть клапаны, пропускающие кровь в одном направлении. Сидит он в лаборатории и слышит как два инженера рассуждают, как работает сердце. Они совсем не медики, и полностью "не в теме". Путем рассуждений они пришли к правильному представлению того, как устроена наша (ССС). Даже про клапаны в венах догадались.

Что объединяет все эти истории? Отсутствие Меж-дис-цип-ли-нар-нос-ти. Во всех этих случаях наша информация, как технарей, для ученых других направлений исследований давала отличную "пищу" для размышлений: философ задумался о том, что может Абсолюта-то и нет; преподаватель в лаборатории понял, что надо учитывать подготовку и знания людей из другой области науки; нейрофизиолог был поражен, когда мы ему рассказали остальное про мозг, чего он нам еще и не говорил- мы просто рассказали ему булеву арифметику, преломив ее на работу нейронов; а инженеры из лаборатории не препарируя тело человека, исключительно на основе своих знаний в механике, смогли правильно понять работу ССС. Что будет, если междисциплинарный подход использовать шире? Попробуем "погрезить" о будущем?

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

А как же тогда болезни, как же наши тела? Ведь мы будем все также болеть, дряхлеть и умирать. Значит, другая огромная задача человечества, научиться ремонтировать наши тела. Как машины: повредил руку- приделали другую, нужен ребенок- составили проект и по заданным характеристикам, с четко выверенным набором ДНК, четко по графику родился ребенок со спрогнозированными характеристиками. Любой дряхлеющий орган меняется на новый, мозговым клеткам подсаживают новые на место отмирающих. Вы всегда здоровы, в прекрасном настроении, у вас ничего не болит. Без малейшего напряга вы выполняете двойной норматив ГТО, приятно ощущая мощь своего тела и легкую усталость. А после этого, как ни в чем ни бывало, идете на свидание с прекрасной девушкой, далее великолепный секс (все органы чувств заранее настроены и отрегулированы врачом), занавес.

Хм, если так, то зачем все эти роботы? Вы прекрасно высыпаетесь, у вас отличное настроение- разве вам самим не будет приятно любимой девушке приготовить и принести кофе в постель? Обладая крепким, хорошо слаженным телом, имея позитивный настрой, разве вам не будет приятно самим сделать что-то своими руками, не прибегая к помощи робота? Или, например, с утра выйти в чистое поле, вдохнуть воздух, наполненный ароматами трав, накосить травы для буренки (блин, крепко же меня от дыма плющит!), а потом в тенечке пить парное молоко из крынки, закусывая свежим, еще теплым хлебом, ощущая при этом приятное чувство удовлетворения от аккуратно выполненной собственными руками работы. Но есть же неприятная работа, которую, даже обладая хорошим телом, делать не особо хочется. Для этого роботов не надо- удобный инструмент, автоматы или полуавтоматы- без особого интеллекта. Рассуждая в подобном ключе недолго договориться до того, что колесо- отнюдь не великое изобретение человечества, а самолеты- жалкое подобие птиц. Однако не будем уводить мысль в боковую ветвь рассуждений, сконцентрируемся на том, что ИТ-специалистам более интересно, а то и те немногие, кто дочитал до этого места, разбегутся.

Итак, что-то похожее сегодня уже делается: пересадка органов; анализ ДНК детей, еще находящихся в утробе; искусственные руки, ноги, сердце. Пока что это весьма несовершенные разработки. Вы бы хотели заметить свою настоящую руку на искусственную? А сердце? Боже упаси! Искусственная рука не чувствительная, некрасивая, не такая же гибкая- родную руку ей не заменить. А про сердце уж помолчим. Но это все примеры не совсем ИТшные. Все же меня читают больше ИТ-специалисты, и будет более понятен пример с мозгом. Ведь именно компьютер часто ставят на противоположном конце аналогии с мозгом. Хорошо, тогда попытайтесь догадаться, о чем следующие несколько предложений.

С его помощью действия достигают автоматизма, позволяя выполнять операции в "фоновом режиме". Благодаря этому человек может выполнять несколько действий одновременно.

Это компьютер? Компьютер выполняет программу, которая, как известно, представляет из себя алгоритм, задающий последовательность команд, которую надо выполнить компьютеру, чтобы получить результат. Сегодня компьютеры берут на себя выполнение большинства рутинных операций, позволяя нам переключиться на выполнение другой работы. Нет, это не про компьютер было сказано. Я вкратце описал работу мозжечка человека. На сегодняшний день компьютеры, при проведении аналогий, это не мозг. Это всего лишь МОЗЖЕЧОК. А Всемирная паутина с ее тысячами серверов- это не более, чем СКОПИЩЕ МОЗЖЕЧКОВ. Аналог мозга еще не изобретен. Да, мы уже кое-что о нем знаем. Мы постигли булеву арифметику природы, у нас есть алгоритмы распознавания образов и речи. Это еще не процессы мышления, но... в общем, прогресс на месте не стоит.

А вот теперь вернемся из грез о будущем и подумаем о насущном. Если вы согласны, что будущее не за роботами, а за совершенствованием человека, как бы напыщенно это ни звучало, то я предлагаю именно с этих позиций и оценивать перспективность тех или иных направлений разработки в ИТ. Руки, ноги, сердца пусть изобретают другие специалисты, мы, ИТшники займемся мозгом человека. Хорошо, пусть не САМИМ мозгом, а его отдельными отделами: мозжечком, отвечающим за рефлексы; слухом и зрением; памятью. Эти все проекты реальны и полностью соответствуют генеральной линии "грез о будущем", а значит те, кто вложится в них сейчас, завтра станут лидерами рынка, снимая сливки со своих достижений. О каких проектах я веду речь, говоря о мозжечке, зрении, слухе и памяти? Наверное, это проще всего показать на примерах.

Пример первый.
Это давняя история, но до сих пор актуальна. Человеко-машинный интерфейс. Одной этой проблемы хватило бы, чтобы занять всех будущих специалистов из Сколково работой на долгие годы. Яркий пример с iPhone показал, насколько важно взаимодействие человек-машина, и как мало до этой разработки Apple было сделано в этой области. Просто удивительные возможности открываются, стоит лишь задействовать мультитач и акселерометр. Хотя эти технологии существовали уже давно, но только Apple смогла найти им блестящее воплощение. Используйте междисциплинарный подход- подключите к работе над проектом психологов, биологов, понаблюдайте за поведением людей, за их рефлексами- это поможет лучше организовать пользовательский интерфейс. Современные компьютеры оснащены камерами, микрофонами, но никто их широко не использует для того, чтобы научить компьютер понимать человека "с полуслова".
Есть камера, с помощью которой можно ловить жесты пользователя. Например:
Пользователь встал и ушел. Действие: заблокировать компьютер.
Пользователь слушает музыку. Но вдруг быстро вскинул голову, отвернулся от экрана- его кто-то позвал. Действие: приглушить музыку.
Пользователь слушает музыку. В зависимости от того, что он хмурится или радуется подбирать ему репертуар для прослушивания.
Пользователь сложил ладошки под подбородком, чешет затылок, трет лоб- он думает. Музыку сделать тише, отключить режим засыпания компьютера по времени, перевести его месенжер в состояние занят, отложить информирование о поступлении новой почты.
Пользователь пьет чай. Можно просигнализировать ему о новой почте, если слушал музыку, то сделать ее погромче.
Только на основе жестов и мимики пользователя любой психолог набросает вам кучу сценариев реакции компьютера.

Пример второй.
Несмотря на то, что все больше людей выходят в интернет через iPhone, iPad, где есть технология мультитача, я не встречал пока адаптированных под мультач веб-сайтов. Про наших российских веб-программистов и дизайнеров я вообще промолчу- они до сих пор клепают странички а-ля web 2.0, считая это вершиной прогресса. Про возможности, открывающиеся при использовании мультитача и того же акселерометра в вебе, вроде пока никто не задумался. Да это я еще слишком круто взял- тут древнюю технологию флэша от adobe только-только вот начали использовать не только в рекламных баннерах. Совсем недавно в почте mail.ru я заметил, что при переходе между письмами страничка уже не перегружается, а мигая флэшовской ромашкой, подгружает письма на ту же страничку. Круто! Всего-то лет десять технологии исполнилось, и вот, уже внедрили. Так глядишь, лет через 30 и html5 увидим на страницах mail.ru. Ладно, чего это я на mail.ru накинулся? Они только как пример- у других не лучше.
Ну, есть смелые стартаперы и инвесторы, готовые поразить нас сногшибательными интерфейсами, умеющими и на компьютере и на смартфоне великолепно подать нам информацию (почта, поиск, соц. сети)?

Пример третий.
Сегодня из-за границы к нам приходят удивительные технологии, показывающие то, что инженерная мысль в иностранных компаниях идет по пути совершенствования человеко-машинных интерфейсов.
Например, в офисном пакете от Microsoft лента Ribon. В разработке этого интерфейса проводилось широкое тестирование, изучались сценарии работы пользователя. Т.е. это не просто инженерная разработка, это результат большого междисциплинарного исследования.
3D-телевидение, ранее существовали только 3D-кинотеатры. Теперь 3D доступно каждому дома: уже и у нас продаются 3D-телевизоры. Трехмерное телевидение стало возможным благодаря исследованию биологов, исследовавших устройство человеческого зрения. Тоже междисциплинарный подход.
Технология распознавания жестов MS Kinnect. Более простой аналог существовал уже у Nintendo. Теперь ждем к Новому году в продаже и эту великолепную технологию. А представляете себе игру на 3D-экране + Kinnect? Да тут уже до "Матрицы" недалеко!
Про iPad, iPhone с их мультитачем, акселерометром, компасом и прочими технологиями и говорить нечего- и так все понятно.

Заключение
Надеюсь, примеры достаточно наглядные, показывающие передовой фронт инженерной мысли. Я намерено отсек другие области (помните, про искусственные руки-ноги?), выбрал самое актуальное на сегодняшний день направление разработок- человеко-машинные интерфейсы. Для их совершенствования, для создания прорывных технологий в этой области, не обойтись без взаимодействия с другими областями науки: психологии, биологии, химии, физики. Хотелось бы, чтобы в Сколково это направление стало основным в области ИТ.

А что мы имеем на сегодняшний день? Послушайте выступления молодых стартаперов- очередная соц. сеть, очередная "пузомерка". Глядя на видео, становится жалко инвесторов, вынужденных слушать всю эту бредятину ради того, что найти 1 стоящий проект из 1000 отстойных. Нет мыслей, нет идей. Все плоское, изначально скучное. Вот за это серое плоскодумие и хочется дать в рожу. Ударить за то, чтоб думали что предлагают, чтобы проснулись, прочистили мозги. Нужны проекты яркие, интересные, мирового масштаба, проекты, соответствующие передовому уровню инженерной мысли.

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

четверг, 29 июля 2010 г.

Про нынешний кадровый голод

Участвуя в обсуждении статьи в блоге Якова Сироткина "Консалтинг?", про нынешний кадровый голод, вспомнил недавний случай.
Звонок на сотовый из кадрового агенства. Они раскопали мое давнее резюме.
- Добрый день, я из кадрового агентства... предлагаю вам вакансию... вы получали письмо...
- Письмо не получал, что за вакансия?
- (Читает по слогам) Ядро Ли-ну-к-с. Вы ведь ядро программировали, как написано в вашем резюме?
- Да, только это ядро графической подсистемы САПР, и не под Линукс, а под виндовс.
Такая вот немалая промашечка вышла у девушки. :)
ЗЫ: А насчет кадрового голода я ничего не знаю- меня это не трогает, работаю себе и работаю.

понедельник, 26 июля 2010 г.

Про пиявок, прочих паразитов и Сколково

Прочитал про стоимость строительства объектов в Сочи: http://dijap.livejournal.com/601368.html. Верить/не верить тому, что написано личное дело.
Но вот недавно у меня был разговор с человеком, причастным к проекту в Сколково. Он сказал, что устроится туда невозможно. Надо иметь весьма высокопоставленного покровителя. По деньгам пока там копейки. Но "пиявки" (те, кто через протекцию туда устраивается) уже на запах крови (денег) подтягиваются. Между пиявками идет позиционная борьба за лучшее место. Все на изготовке.
Так что стоит только Дмитрию Анатольевичу только приоткрыть крантик, как его тут же облепят мириады пиявок. Никаких шансов у крови дотечь до жизненно важных органов нет. Если так пойдет и далее, то проект уже мертв.
PS: Эта информация- тоже слухи. Верить/не верить- ваше личное дело.

четверг, 17 июня 2010 г.

Я на CNews: Инновации в России и проект в Сколково

http://cnews.ru/

Инновации в России и проект в Сколково

Что делается сейчас

Обсуждения в Сети проекта инновационного города в Сколково весьма пессимистичны в своих итогах. Но пессимизм – не помеха проекту.

Пока специалисты в большинстве своём недоуменно разводят руками, не находя в проекте ни толики "рационального зерна", он бурно развивается. Обсуждаются неслыханные льготы, готовятся к принятию собственные законы, формируются уникальные органы управления и уникальный таможенный режим, и т.п. Кажется, уже ничего не остановит набравшую обороты… полный текст
Источник: CNews

В оригинале я был более эмоционален, но спасибо редактору, который меня вовремя "схватил за руку" и "притормозил лошадей". Читайте, обсуждайте, делитесь своим мнением в комментариях. :)

суббота, 15 мая 2010 г.

Работа в команде

В большинстве случаев программист трудится в команде. Три человека, пять, десять и более- команды разного размера, специализации, профессионального уровня и т.д. Надо научиться "вписываться" в команду, принимать ее правила игры. Вот несколько советов от меня:
  1. "Не лезь в чужой монастырь со своим уставом." Если в проекте используются коды ошибок, а не исключения (exception), то используйте коды ошибок- "брезгливо морщить носик" не надо. Соблюдайте code guide. Это очень просто- смотрите на соседний код и делайте так же.
  2. При возникновении спорных ситуации или выяснения кто виноват, не становитесь в непримеримую позу "у меня все ОК, это вы- козлы, ищите ошибку в своем коде". Давайте слабину: "Может быть и мое, давайте вместе попробуем воспроизвести баг. Если он мой, я его, конечно же, устраню." Если баг действительно окажется ваш, то вы ничего не теряете. Но вот, если вы от него отмахнулись, а баг таки оказался вашим, то вы "теряете лицо".
  3. Неформальное общение. Даже если вы не общительны, все равно принимайте участие в организации "корпоративов", ходите на обед с коллегами и т.д.
  4. Используйте защитное программирование. Когда код пишут разные люди, то гарантировать единообразное использование кода невозможно. Наверняка найдется рано или поздно кто-то, кто вызовет вашу процедуру с недопустимыми параметрами. Программа "упадет" и call stack покажет на нутро вами написанного класса. Да, в конечном итоге вы разберетесь, что, например, кто-то тупо забыл создать класс перед его использованием, и перенаправите баг кому надо, но время на выяснение этого потеряете. Конечно, далеко не все можно проконтролировать, но вот проверить корректность входных параметров, возвращаемых параметров из других функций можно. Давным давно, я помню, как работал в команде, в которой был один замечательный программист. Программировал он очень быстро, но крайне неаккуратно. Его код постоянно падал и глючил. Я программировал медленее, но мой код был надежнее и безглючнее. Пока тот программист с "высунутым языком" бегал и правил свои баги, я неторопливо "серфил" в интернете, т.к. мое все работало. Со временем наши подсистемы сильнее интегрировались друг с другом, и мои процедуры стали падать из-за его кода. Его головная боль стала и моей. Пользователи кидали мне баги пачками. Тогда я стал проверять все входные параметры и выходные параметры вызываемых в моем коде функций. Проверял, буквально, маниакально. Даже самые очевидные вещи (например, id>0). Кидал ошибку с пояснениями. Это помогло быстрее выяснять причину бага и аргументированно перекидывать его на другого. Это не сложно, прекрасно для этого подходят Assertion.
  5. Жесткий каркас архитектуры. Это сделать очень сложно- надо быть невероятным ассом, чтобы получилось так. Но оно того стоит. Речь о том, чтобы спроектировать архитектуру подсистемы так, чтобы сама структура препятствовала ее неправильному использованию, и даже более того- изменению в архитектуре! Если "перегнуть палку" в проектировании жесткого каркаса, то получиться не масштабируемая архитектура, что тоже плохо. Даже использование паттернов тут не всегда помогает- всегда найдется программист, который, например, попытается "пролезть" за фасад (имеется ввиду соответ. паттерн), чтобы получить напрямую доступ к скрытым за фасадом классам. Как? Да, например, через глобальную переменную! О, ужас, ужас! Но это жизнь, и так бывает (лично сталкивался). Как можно от этого защититься? Но, только, чтоб это была не просто защита, а и достаточно полезная функция или "фича" архитектуры. Можно использовать отложенное создание класса, находящегося за фасадом (по первому обращению к нему), сам класс генерировать из фабрики и удалять его, если к нему долго не обращались (т.е. за фасадом основное время ничего нет- никакого класса). В этом решении мы экономим память, увеличиваем скорость загрузки приложения. Да и к тому же "портим карму" тому "плохому" программисту. Он то, наверняка, либо в коде не разберется, либо, если в конструкторе будет ссылку на объект присваивать глобальной переменной, то падать у него все будет. В конце концов, либо дурь свое возьмет- и он таки сделает свое "грязное дело", либо лень свое возьмет- и он за "ЦУ" прибежит к вам. Вот тут-то вы ему мозги и вправите.
Конечно же, советов можно написать кучу- слепо следовать им все равно не получится. Основная цель- дать общее представление о том, как надо надо вести себя в команде. Приведенные выше советы- только то, что у меня "всплыло" в памяти. Хотелось бы в комментариях услышать ваши советы.
PS: Напоминаю, что я выясняю полезность сервиса редиректа URL. Если вам он интересен, то вместо e-mail просто впишите "да", если хотели бы им пользоваться, то оставьте свой e-mail для получения уведомления, когда сервис будет запущен. Адрес для голосования:
http://spreadsheets.google.com/viewform?formkey=dGxaeDlYNmdsNDBKSnprcE80Qkd4Umc6MQ
Оставленный вами адрес будет использован только один раз для уведомления Вас о запуске сервиса, после этого список с адресами будет удален. Третьим лицам адреса передаваться не будут.

четверг, 13 мая 2010 г.

Сервис маршрутизации URL

Полгода назад я перевел свой сайт на Google Sites, а блог на blogger.com. Я предупреждал о том, что переезжаю, и давал новый адрес. Но, понятно, никто не собирается напрягаться, чтобы перепроверить свои ссылки и заменить их на новые. Например, на ITBlogs, просил Михаила изменить адрес моей ленты, но даже ответа не было. Поэтому я ручками копировал RSS-ленты из blogger'a на Google Sites.
И вот, чтобы не напрягать других, и не напрягаться самому, я придумал такую штуку: беру свой исходный адрес alvosoft.com и перенаправляю его в CNAME http://www.alvosoft.com/ на Google App Engine. А на App Engine делаю простой сервис, который, получив на входе ссылку, перенаправляет ее по введенным правилам на другой адрес. В конечном итоге, я думаю, пользователю все равно, что в итоге он окажется на sites.google.com/site/alvosoft, хотя изначально он ввел http://www.alvosoft.com/. Аналогично и RSS-ленты перенаправляются по их новому адресу. Таким образом, надеюсь, что если все правильно сработает, то мне уже не придется ручками копировать ленты между сайтами.
В сервисе, что я написал, можно использовать регулярные выражения, выделять по шаблону группы и подставлять в перенаправляемый адрес. Например, все, что соответствует адресу www.alvosoft.com/itlife* (старый адрес блога) будет перенаправляться на itspeciality.blogspot.com/* (новый адрес).
Это похоже на таблицу маршрутизации по IP-адресам: исходный адрес с маской, целевой адрес. Я подумал, что такой сервис может быть полезен не только мне и готов предоставить к нему общий доступ. Если вам интересен этот сервис и вы им будете пользоваться, то скажите мне об этом:


Если интерес будет- сделаю общий доступ и уведомлю желающий о его запуске.

пятница, 7 мая 2010 г.

Web Office

Получил приглашение от facebook'a на docs.com. Попробовал, реально прикольно! Это вам не Google Docs, регулярно мною ругаемый. Пользовательский интерфейс удобный, аккуратный. Кто работает с MS Office, тому все будет там знакомо. И, при том, бесплатно!
А доменное имя какое отхватили: docs.com! А? ;)
Молодцы, молодцы. Все никак руки не дойдут написать о наблюдаемой мною стратегии развития крупных игроков на ИТ-рынке. Напишу/нет- не знаю, но выскажу одну мысль из этой темы: считать мобильный рынок для Microsoft потерянным- весьма наивно. Поспорим? ;)

пятница, 26 марта 2010 г.

Бред... :(

КремляндексБизнес газета РБКdaily
Кремляндекс
В правительстве всерьез размышляют над идеей национальной поисковой системы
Через год в Рунете может появиться первый государственный поисковик. Как стало известно РБК daily, в правительстве заинтересовались идеей создания национального поисковика, предложенной замглавы администрации президента Владиславом Сурковым. Финансировать разработку конкурента «Яндекса» и Rambler смогут исключительно российские... Читать далее >

Национальная ОС, СПО в школах, "кремниевая долина", гос. поисковик. Это за гранью разумного. Даже комментировать не могу- это ж бред какой-то!
Господа, придумывайте другие способы разворовывания гос.денег! В области ИТ все довольно таки прозрачно, так что любая бредятина на виду.

среда, 24 марта 2010 г.

Такая "кремневая долина" нам не нужна!

Кто о чем, а я о Сколково. В блогах много обсуждается то, что это разбазаривание денег. Я не встречал высказываний в поддержку идеи создания "Кремневой долины" в Сколково. Но пошуметь скромно в блогах это одно, а попробовать занять активную гражданскую позицию, слабо? Я попробовал- написал в блог президента.
Между прочим, президент уже не раз показывал на деле, что он читает комментарии в своем блоге. Может быть, это наивно с моей стороны, но, все же, давайте попробуем совместно, хотя бы в этом случае, сделать хорошее дело- остановить очередной бесполезный проект, не несущий ничего, кроме разбазаривания денег. Присоединяйтесь ко мне, напишите свое мнение о "Кремниевой долине" в Сколково в блоге президента.
Я предложил вместо проекта в Сколково вот что:
"Мое предложение- увеличить финансирование существующих НИИ через систему грантов на те деньги, которые собираются "закопать" в Сколково. Поднять з/п научным работникам до мирового уровня- это существенно приостановит отток кадров. Для предлагаемых мер не надо никаких грандиозных планов, все распределение денег укладывается в существующие схемы финансирование науки. Эти схемы уже отработаны, прозрачны, контролируемы в отличие от, фактически, высокорискового мероприятия со Сколково."

вторник, 23 марта 2010 г.

Наброски мыслей о стартапах

Эта статья написана для начинающих программистов, кто, начав карьеру, уже задумывается о собственном бизнесе. Нового в статье нет- аккумулированы только основные мысли по данной теме, давно уже высказанные многими успешными предпринимателями.
Начиная карьеру в ИТ, многие молодые специалисты обращают внимание на блоги, где люди деляться своими успехами, продвигают (внешне успешно) свои программы/сайты/услуги. В голове мелькают мысли типа "если у многих получается, то почему бы и мне не попробовать". Очень заманчиво- в 20 лет стать миллионером, и, далее, наслаждаться беззаботной жизнью счастливого рантье. Такие мысли посещают не только ИТ'шников: менеджеры-продажники мечтают открыть свой бизнес, строители- склолотить свою бригаду, бухгалтеры- набрать клиентов и организовать свою аудиторскую фирмочку. В какой-то области это сделать сложнее, в какой-то проще. Но, если в других областях придумать нечто прорывное и сорвать куш практически нереально, то в ИТ, в силу молодости этой области промышленности, такое еще возможно. С одной стороны- это дополнительная степень свободы, с другой стороны- более высокие риски. Зачем я об этом заговорил? Я не собираюсь вас агитировать или отговаривать, если вы задумали начать свой собственный проект. У меня есть некоторые свои соображения и наблюдения по этому поводу, которые я и хочу изложить в этой статье.

  1. Многие пробуют, но только у небольшой доли процента начинающих предпринимателей вообще что-либо получается. Вероятность успеха мизерна. Если один раз не получилось, то и в другой раз вероятность успеха будет такой же, мизерной. Фраза "В этот раз не получилось, значит в следующий раз получится" тут не работает. Может вообще никогда не повезти. А может два раза подряд повезти. Тогда вас назовут гуру, и будут внимательно слушать историю вашего успеха, мечтая также преуспеть.

  2. Когда человек "обрастает" обязательствами (семья, кредиты) риск неуспеха в попытке "самостоятельного плавания" недопустим. Все же, пытаться затеять свое дело лучше смолоду или поставив детей "на крыло" и рассчитавшись с кредитами. Не так давно видел статистику, что в США наибольшая доля стартапов основана людьми в возрасте около 50 лет. Т.е. детей вырастили, в жизни устроились- можно и рискнуть теперь.

  3. Решайте новые задачи или по-новому старые задачи. В 99% случаев я наблюдаю, что пытаются заработать на далеко не новой идее или идее, которую легко скопировать. Посмотрите на мой сайт: www.alvosoft.com/. Моя программа- пример того же неправильного подхода. Я сделал программу, у которой есть аналоги. И сделал ее не принципиально как-то по-новому- она никак среди остальных программ не выделяется. Ну, я никогда и не делал ставку на нее- "проба пера". Не надо делать очередной мессенджер, почтовый сервер. Если некуда девать энергию, то подумайте лучше о том, чтобы присоединиться к разработке существующего ПО интересующей вас тематики.
Третий пункт очень важен. Можно взяться за разработку продукта у которого уже есть куча аналогов. Но это надо сделать блестяще. Чтобы всем стало сразу понятно, что все, что до этого было- ерунда. Например, интерфейс- вспомните пример с GMail. Кардинально улучшить "юзабельность"- как пример, айфон.
Другой путь- сделать инновационный продукт. Такой, о котором только мечтали до этого или даже мечтать боялись. Я помню как начинался skype. У меня был модем, аж на 56кб. Какое там видео/голос передавать, когда и просто загрузка страниц с постоянным перебоями связи была просто мучением! Когда я услышал о skype, я недоуменно пожал плечами: "Что за ерунда?! При зачем надо по интернету голосом говорить?" Интернет в то время был дорог, учитывая низкое качество связи, постоянные перебои- это казалось бредом. Теперь скайпом уже никого не удивишь. Даже бабушки вовсю общаются с внучатами по нему. В любом случае- идея и реализация не должна быть тривиальной.

  1. Надо решать реальную задачу. Покрывать реальные потребности людей. Регулярно на эту тему пишет Петр Диденко: http://www.kip.ru/. Вот не моя задача- вычитал откуда-то, во что инвестор бы вложился: как избавится от очередей в супермаркетах. Актуально? Да. И не вызывает сомнений, что хорошее решение принесет хорошие деньги изобретателю. Решение проблем пробок на дорогах. Динамические карты пробок- это информирование о пробках, но не решение проблемы. Решите проблему, а не лечите ее симптомы!
Лично мне еще нравятся идеи ТРИЗ. Например, доведенное до абсолюта определение идеального изобретения: никакого устройства нет, а функции его выполняются. В более приближенной к реалиям интерпретации: стремится к тому, что изобретение не требовало от пользователя совершения дополнительных действий при пользовании им. Желательно, чтобы количество действий для выполнения той же работы с помощью нового инструмента, наоборот, снизилось. На ум приходит замечательный пример, иллюстрирующий эту мысль. Из года в год в домах отключают горячую воду и промывают систему. Трубы ржавеют, прорываются. Поставлена была задача уменьшить количество аварий. Изобретателем было найдено, на мой взгляд, гениальное решение. При промывке труб с них удаляется налет. Однако налет защищает трубы от ржавления. Было предложено при промывке оставлять небольшой налет для защиты труб. Т.е. изобретение не только не потребовало дополнительных мер, а упростило существующую процедуру промывки- промывать, но не до конца или с меньшей концентрацией чистящих веществ.
Этой же идеей можно руководствовать и в ИТ. Например, возьмем модную ныне тему облачных вычислений. Для нужны датаценты. Можно обойтись без датацентов? А если попробовать, например, сформировать распределенную сеть из компьютеров пользователей? Пользователь, который хочет распределить свои документы по сети для их резервирования и доступности по всему миру, подключается в облачную сеть. Устанавливает на свой компьютер ПО для организации песочницы. В этой песочнице в зашифрованном виде хранятся отдельные кусочки информации от разных пользователей облака. Таким образом, информация мелко-мелко распределяется по другим компьютерам пользователей по всему миру. Знающему пароль, она становится доступна круглосуточно, обеспечивается резервное ее сохранение в сети, да и классические "маски-шоу" с изъятием серверов (см. историю с Агавой) станут невозможны. Таким образом, для создания облака, в данном примере, датацентры не понадобились.
Итоговая мысль такова: "выстрелит" идея или нет- трудно предугадать, но если пробовать, то делать надо что-то принципиально новое или старое, но принципиально по-новому. Пользователю при использовании изобретения должно быть легче, чем без использования его.
PS: лично для меня ненапряжность нового сервиса в интернете стало играть весомую роль, например, если меня просят зарегистрироваться, то я не буду пользоваться таким сервисом. Мне лень это делать, ведь есть же OpenID- вот пусть его и используют. Это к вопросу о том, что требование лишних движений со стороны пользователя может привести к отказу от использования вашего изобретения.

четверг, 25 февраля 2010 г.

О божественном знании

В первую очередь скажу, что мне по смыслу и по способу изложения материала понравилась статья Эльдара. Как раз, готовя новую статью, обдумывал материал в том же ключе, что написал Эльдар. Поэтому, я повторяться не буду ‑ прочитайте, сначала, его статью, а потом мою приписку «сбоку».
У управленцев Эльдар описал, что часто присутствует чрезмерное увлечение различными методологиями. От себя скажу, что у программистов это выливается в поиски «божественной» архитектуры. У сисадминов – излишняя прыть в переустановке всего и вся «потому, что это круче, чем было».
 В общем-то, весь смысл далее читать статью я могу убить сразу, сказав, что это чаще всего возрастное. Старшим коллегам просто надо держать при себе длинную линейку, присматривать за своими молодыми коллегами, и, вовремя, точным ударом больно бить их по пальцам. Потом, человек набирается опыта, становится осторожнее и разумнее в своих поисках «божественного нечто».
  
Сисадмины.
У сисадминов с этим достаточно просто: сначала минимальный уровень прав, потом больше, и так, в течение 7-10 лет, глядишь, вырастет профи из «мальчика-на-побегушках». Обычно начинают с того, что поручают настройку клиентских мест. Главное тут, чтобы молодой сисадмин научился не тупо переставлять ОС, а находить причины сбоя, локализовать их и устранять. Ведь сам процесс переустановки часто сопряжен с сохранением конфигурации пользователя, его рабочих файлов и последующим восстановлением. А это может быть не быстрый процесс, а ведь пользователю работать еще надо. Не всегда даже имеет смысл вообще устранять ошибку ‑ проще ее просто обойти (например, с одного USB-порта принтер не печатает, переключил на другой, если стал печатать, то и фиг с ним, с первым USB-портом). Важно научится решать проблему минимальным количеством телодвижений.
Второе, чему должен научиться сисадмин, – это здоровый консерватизм. Переустанавливать программное обеспечение имеет смысл только в случае, если это реально оправдано. Не по принципу «это круче», а, например, устранена серьезная брешь в безопасности, или появилась новая функциональность, востребованная в организации.
Третье, почти недоступное большинству, правило: знать потребности пользователя. Конечный пользователь редко когда знает, какие из его задач можно решить с помощью компьютера. Вот, если вы сумеете в нужный момент подсказать верное решение, то прослывете «золотым незаменимым человеком». Зачастую это очень простые решения, совершенно очевидные для вас, но не для непросвещенных в ИТ коллег.
И вот, когда эти принципы будут у вас в крови, тогда и придет понимание, что слово «круче» само по себе пустое, и не может являться целью. Проблемы будут решаться легко и минимальными телодвижениями. Достаточно будет сделать пару настроек, худшем случае «поднять» сервис. Оборудование будет работать годами, не зависая, и ведя себя весьма прогнозируемо. Со стороны, вы будете выглядеть как чародей- все работает само собой, вы только пару раз на кнопочки надавили, и что-то там исправилось, что-то еще запустилось. И все делается без суеты, без излишнего копошения, точно и выверено. Вот только тогда вас назовут отличным специалистом, настоящим профессионалом.

Программисты.
У программистов пусть более витиеват. Практически с самого начала карьеры надо решить следующую дилемму. С одной стороны, хорошо, если начинающий программист сразу будет учиться правильно программировать: знать различные алгоритмы обработки данных, паттерны проектирования. С другой стороны, не имея достаточного опыта, свои новые знания он будет применять очень кособоко, как в таких случаях говорят, "да, за такое руки отрывать надо!". Лично я для себя решил, что начинающим программистам про паттерны точно рассказывать не надо. Именно из-за озвученной дилеммы я выступаю против паттернов. Потому, что начинающих они сбивают с толку, а опытным уже не нужны- они и так на практике их освоили. И где же та грань, когда можно "безвредно" изучить паттерны? Именно, начитавшись Фаулера, "банды четырех" молодой, неокрепший ум ударяется в поиски "божественной" архитектуры приложения. Не знаю тут никакого рецепта, не знаю. Только опыт, только свои "шишки".
Когда приходит опыт, тогда в голове правильно, "по полочкам", раскладываются и паттерны, и базовые алгоритмы обработки данных. И наступает следующий этап. Умение правильно принять решение о том, какой именно подход использовать для решения задачи. Решений, как правило, бывает несколько. Обычно, это происходит из-за недостаточного понимания сути задачи. Моя рекомендация: углубляться в задачу, разбирая ее на мельчайшие составные части до тех пор, пока абсолютно четко не станет ясно, как именно решать задачу.Т.е. надо научиться отсеивать множество решений, через более глубокое понимание сути задачи.
К сожалению, не все так просто. Нередко, даже после детального изучения задачи, все равно "на руках" остается несколько вариантов решения задачи. Тогда предлагаю использовать бритву Оккама: выбрать самое простое решение.
Но и тут немало сложностей! Часто трудно определить грань, между простотой и плохим, не масштабируемым решением. Да, мы прошли уже немалую цепочку в принятии правильного, "божественного", единственно верного решения и, тем не менее, у нас есть довольно высокая вероятность остаться у "разбитого корыта" (т.е. принять неправильное решение). И тут, вблизи правильного решения, расслабляться нельзя. Я не утрирую. Вот реальный пример из моей практики. Мы внедряли систему ERP. Внедрялась она со скрипом, и под сильным нажимом начальства на подчиненных, которые "отбрыкивались" от нее, как только могли. Потому, что система была неудобная. Она была мощная, многофункциональная, но неудобная. Экранные формы изобиловали кучей мелких кнопочек, буквально размером 4х4 пикселя, иначе они все в экран не влезали. Большинство стандартных кнопок и горячих клавиш были весьма своеобразно переопределены. Почему это произошло? Программисты были опытные, суть задачи понимали великолепно, выбирали самое простое решение (чего же проще- налепить еще одну кнопку куда-нибудь, вместо того, чтобы основательно порефакторить всю форму?). Так чего им не хватило, чтобы сделать правильно? Интуиции. Да, в конце всего сложного пути принятия решения стоит не нечто логичное, понимаемое, а интуиция. Иррациональное чувство прекрасного. Ощущение того, что если сделать именно так, то будет правильно. Без логики и без объяснений: "Я думаю, что надо делать так."
И вот, на вершине мастерства, программист в чем-то пересекается с опытным админом, ведь у админа конечный пункт- знать потребности пользователя, что тоже опирается на неосязаемую интуицию.
PS: Да, кстати, а "божественной" архитектуры ПО не существует. ;)

понедельник, 18 января 2010 г.

Hotmail: немного о цифрах и архитектуре

Оригинальная статья находится по адресу: http://windowsteamblog.com/blogs/windowslive/archive/2009/12/22/a-peek-behind-the-scenes-at-hotmail.aspx. Здесь я привожу только выдержки из статьи.

Цифры
  1. 1,3 млрд. почтовых ящиков.
  2. 350 млн. человек в месяц активно пользуются сервисом.
  3. 3 млрд. сообщений в день, из которых 1 млрд. отфильтровывается как спам.
  4. Скорость роста хранилищ - 2 Петабайта/месяц.
  5. На сегодняшний день это свыше 155 Петабайт. 70% с основном, это письма с фотографиями.
  6. Это самый большой SQL Server 2008 в мире (мониторинг и управление многими тысячами SQL-серверов).
Архитектура
  • Сервис Hotmail организован в логические "масштабируемые единицы" или кластера:
  • Сервера, управляющие входящей и исходящей почтой.
  • Спам-фильтры.
  • Хранилища данных.
  • Службы мониторинга.
  • Инфраструктура для конфигурирования и автоматических обновлений.
На одном кластере "живут" миллионы пользователей (их число зависит от того, насколько устаревшее оборудование используется) и включает:
  • Frontend-сервера. Проверяют почту на вирусы, "отдают" пользователям почту через web-интерфейс, POP3, DeltaSync.
  • Backend-сервера. SQL и файловое хранилище, спам фильтры, мониторинги, агенты каталогов и сервера, хранящие информацию о том, на каком сервере чья почта хранится.
  • Используются также программно-аппаратные балансировщики нагрузки.
Меры для обеспечения надежности, в общем-то, стандартные. Например, избыточность:используются массивы хранилищ на SQL Server'е. Данные синхронизируются постоянно между серверами. Если один сервер "падает", то за считанные секунды включается перенаправление запросов на другой сервер. Данные хранятся в 4 (четырех) копиях.
 
PS: Из всего описания мне интересно было узнать, что в таком масштабном высоконагруженном сервисе используется SQL Server, а также то, что данные хранятся в 4 копиях (интересно, почему именно в четырех?). А в остальном, это общее описание показывает стандартный для таких проектов подход к архитектуре высоконагруженных приложений.

воскресенье, 17 января 2010 г.

Про удаленную работу для дизайнеров

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

В формате микроблога про MindApps

Примерно месяц назад читал про MindApps обсуждение, в духе: "хорошо, что ребята стараются, но маловероятно, что что-то получится у них." Сегодня я подробно поигрался с этим сервисом. Сильно не понравилось. Я, программист, и то впал в ступор от обилия этих всех менюшечек, пунктиков. А что уж говорить о "любом неподготовленном менеджере"? Интересно, а ребята знают о, например, MS Access, интерфейс которого юзабильней, более того, формы, разработанные в Access, можно экспортировать как web-страницы, организуя на своем сервере доступ к БД через браузер? Не сказал бы я что 1141р. за CD с MS Access сильно обременит бизнесмена. На мой взгляд, это все "игрушки" из разряда Google Docs и etc.
PS: иногда на такие "безобразия" смотришь, и подмывает подготовить свое ответное приложение, без всяких фантазий, на старых проверенных технологиях. Не для того, чтобы "утереть нос", а чтобы еще раз показать, что надо проще быть, проще.

четверг, 14 января 2010 г.

ERP по лицензии GPL: условия выживания

Обязательно прочтите первую часть.

Часть 3. Технические подробности
Общие предпосылки для устойчивого развития ERP-системы изложены в виде четырех условий выживания. Насчет 3-5% рынка ничего сказать нельзя определенного. Есть и другие факторы, кажущиеся малозначимыми, однако их удачное стечение может придать развитию такой системы сильный толчок. Исходя из эти общих условий попробую немного углубиться в технические детали проекта. Именно от деталей уже будет зависеть выполнение первых двух условий выживания из четырех перечисленных.

СУБД
В разных организациях уже могут существовать свои СУБД разных производителей (MS SQL Server, Oracle, DB2 и т.д.). Соответственно, уже есть в штате программисты, владеющими программированием на используемой СУБД. Поэтому, желательно, чтобы наша система умела работать с разными СУБД. У каждой СУБД есть свои особенности, которые, желательно, использовать, т.к. это позволяет зачастую либо значительно повысить производительность, либо сильно упростить решение задачи. Но, с другой стороны, хотелось бы иметь единообразный доступ к данным. Как это можно совместить? Есть два варианта: 1). стандартизировать набор хранимых процедур, образующих интерфейс работы приложения с СУБД (OpenDBI - открытый database interface); 2). использовать скриптовый язык и кодогенератор к нему, что позволит из единого скрипта под каждую СУБД генерировать свой SQL-скрипт для создания структуры БД, а для языка программирования- соответствующий набор классов для взаимодействия с СУБД. Для второго случая набор классов должен реализовывать некий единый интерфейс, чтобы гарантировать единообразную работу других частей приложения с БД. Мне нравятся современные фреймворки для работы СУБД типа hibernate. С их помощью можно успешно комбинировать описанные подходы: со стороны БД обеспечить некий стандартный набор хранимых процедур для работы с данными, а со стороны приложения- стандартный набор классов для работы с БД.
Внутри стандартного набора хранимых процедур программист уже волен делать любые свои оптимизации. Это понравиться гикам.
Не забываем: обязательна поддержка региональных настроек и мультиязычности в OpenDBI!
Каждая подсистема (отдел кадров, ввод заказов и т.д.) такой ERP должна иметь свой OpenDBI (для разных подсистем можно использовать либо свои пространства имен, либо свои префиксы). Это позволит организовать обмен данными между подсистемами, написанными разными группами программистов. В перспективе, этот интерфейс может служить шлюзом для обмена данными между коммерческими ERP, которые обычно не сильно стремятся обеспечить свободную передачу данных с другими аналогичными продуктами- достаточно будет, чтобы в них появилась поддержка OpenDBI.

Ядро
Несмотря на то, что большую часть бизнес-логики можно реализовать внутри OpenDBI, на клиентской стороне останется немало функций:
  • При изменении данных в одном окне надо, чтобы другие окна обновились. Значит нужен механизм рассылки сообщений. Более того, очень желательно, чтобы и другие клиенты могли по событию обновлять данные в интерфейсе пользователя.
  • Нужна подсистема подготовки отчетов, чтобы пользователь мог сам разрабатывать отчетные формы, сохранять их (на диске или в БД), делать общедоступными и генерировать с их помощью отчеты.
  • Подсистема для разработки форм ввода данных, сохранения (диск, БД) и предоставления общего доступа.
  • Подсистема хранения пользовательских настроек.
  • Подсистема тонкой настройки отображения данных под потребности предприятия или отдельных пользователей. Например, с помощью скриптов.
  • Импорт/экспорт данных в другие форматы, например, MS Excel.
  • Подсистемы взаимодействия с внешним ПО и оборудованием (например, сканеры штрих-кодов).
  • Подсистема работы с региональными настройками.
  • Подсистема поддержки мультиязычности.
Количество подсистем, естественно, не ограничивается этим списком. Важное требование к ним- модульная конструкция, позволяющая их гибко подключать или исключать из проекта. В качестве минимального требования к функционалу каждой подсистемы, они должны реализовывать некий стандартный интерфейс, позволяющий передавать/получать данные между подсистемами. Разные группы программистов могут реализовывать свои альтернативные подсистемы, например, может параллельно разрабатываться три подсистемы генерации отчетов. Но благодаря тому, что все три подсистемы будут реализовывать обязательно один и тот же интерфейс, то можно будет легко пересобрать ядро с любой из них. Каждая из них может предоставлять дополнительный функционал помимо реализации стандартного интерфейса.

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

Вывод
При таком подходе важно стандартизовать интерфейсы различных подсистем и OpenDBI. Это позволит при сборке собственной системы ERP задействовать подсистемы различных производителей и собрать систему под использование с требуемой СУБД. Небольшим производителям систем автоматизации выгодно использовать такую ERP, т.к. они смогут свои системы дополнить недостающими подсистемами или заменить свои менее функциональные подсистемы на аналоги. Вероятно, они (небольшие производители систем автоматизации) станут основными двигателями процесса разработки подобной ERP.
В конечном итоге, система получится очень гибкая, в ней возможно будет комбинировать подсистемы различных производителей, реализуя различный функционал. Таким образом, процесс внедрения будет аналогичен, тому как внедряются коммерческие ERP, с одной стороны. С другой стороны, сохраняется вся мощь универсальных языков программирования. Первые два условия будут соблюдены. А выполнение третьего условия (портфель внедрений) и четвертого (проверка временем) обеспечат те самые небольшие производители систем автоматизации. А насчет 3-5% рынка- уже время покажет.
В приведенном описании ясно прочитывается набор технологий, на базе которых можно реализовать подобную систему. Ясность того, как надо делать- это хорошо. Однако, с учетом того, что система должна быть рассчитана на использование в разных странах с разными стандартами документоведения, то даже простые модули в реализации будут сложны. Поэтому не испытывайте иллюзий по поводу того, что первую версию удастся выпустить очень быстро. Для практиков рекомендую внедрять уже готовые ERP системы, для пылких умов- присоединяйтесь к уже существующим проектам разработки ERP систем, например, OpenERP или выбирайте по списку, для авантюристов- дерзайте, конечно, но главное тут- сначала написать стандарты, описать интерфейсы, а уж потом программировать.
Это все: у меня эти мысли роились в голове, я их высказал.

среда, 13 января 2010 г.

ERP по лицензии GPL: условия выживания

Обязательно прочтите первую часть.

Часть 2. Условия выживания
В мире ОС есть такое явление как Linux, распространяемая по лицензии GPL. Есть и другие виды лицензий, в той или иной степени декларирующие бесплатность распространения программного продукта. На сегодняшний день эта ОС получила заметное признание среди пользователей. Есть другой мир- мир ERP-систем. И в нем подобного рода лицензии широкого распространения не получили. Я помню множество ПО автоматизации предприятий, бухгалтерского учета и других учетных систем, которые распространяли по лицензии GPL. Однако с уверенностью могу сказать, что, на сегодняшний день (2009 год), ни одна такая система подобного же, как и Linux в мире ОС, распространения не получила. В порядке эксперимента, предлагаю обсудить, как можно создать ERP-систему, распространяемую по лицензии GPL, которая потенциально могла бы занять, например, минимум 3-5% рынка систем ERP.
Ну, понятно, если представить объем работы и оценить всю картину, то выглядит этот эксперимент смешно. Тем не менее, поиграем по-серьезному. Наш герой и образец для подражания- Линус Товальдс. Когда он начинал, то вряд ли представлял, что у него получится, тем более в те времена многие делали свои ОС "на коленке" и Linux была просто "одной из". А почему не выжили или не процветают системы, пусть не уровня ERP, а автоматизации отдельных частей деятельности предприятия, распространяемые по лицензии GPL? Имеет ли вообще для предприятий значение, что система распространяется по лицензии GPL? Не ходя "вокруг да около" сразу скажу на основании своего и изучения чужого опыта: в нашей стране поголовного пиратства это имеет минимальное значение. Поэтому, идея бесплатности не может служить ведущей идеей при разработке подобной системы. Другой аспект, касающийся лицензирования- это использование не ворованного ПО, чтобы не давать лишнего повода силовым ведомствам придраться к Вам. Ха! Еще три раза: ха, ха, ха! Обросьте эту наивную мысль. Так что же остается? Тип лицензии мало кому интересен, разве что рассчитывать на распространение по всему миру, особенно в развитых странах, где лицензия- не пустой звук. Пусть будет так! Первое условие выживания: изначальная ориентация на распространение по всему миру. В каждой стране свои стандарты учета, отчетности, однако опыт мировых лидеров, таких как SAP, Oracle показывает что реально под все это разнообразие стандартов подвести единую техническую базу. С точки зрения технической реализации изначально должна быть поддержка мультиязычности и региональных настроек как на уровне обработки данных, так и на уровне интерфейса. Выбор однозначный за Unicode, в самой системе должно присутствовать API, возвращающее региональные настройки ОС.
Хорошо, допустим у нас есть подобная система. Что надо, чтобы ею захотели пользоваться? Есть пользователи: экономисты, бухгалтера, операторы. Есть те, кто принимает решение о покупке: начальники отделов, директора. А есть те, кто дает свое заключение о пригодности системы к эксплуатации, и дает советы с технической стороны- это ИТ-отделы предприятий, консультанты. Пользователи в процессе выбора даже на большинстве малых предприятий безголосые- что дадут, тем и пользуются. Решение принимают руководители. Вопрос откатов не буду рассматривать- только честная конкуренция. А значит, мнение технических специалистов или консультантов очень важно. Второе условие выживания: система должна нравится техническим специалистам. Как это обычно бывает- сначала подтянутся гики и организуется тесное сообщество вокруг системы. Однако, чтобы система "пошла в народ" нужна харизматичная личность, умеющая убеждать и заражать других своим оптимизмом по поводу перспектив этой ERP-системы. Гикам эта система может понравиться, если ее можно будет очень гибко настраивать, реализуя умопомрачительные конфигурации. Такое возможно, если использовать в системе скриптовый язык программирования. Проще будет, если это какой-либо уже известный язык: Python, Java, C#. В чистом виде эти языки абсолютно непригодны для программирования конфигураций ERP-системы. Однако на них можно написать framework, повышающий удобство и скорость конфигурирования системы под требования предприятия.
Прекрасно, система у нас есть, есть сообщество, есть лидер. Нужно ли еще что-то, чтобы система достигла поставленной цели? То, что система нравится технарям, еще не означает, что будет принято решение о ее внедрении. Руководитель захочет убедиться, что система оправдает себя: внедрение в любом случае будет стоить денег, даже если сама ERP-система бесплатна. Заранее это трудно спрогнозировать, но хороший портфель примеров реальных внедрений поможет в этом вопросе. Да это же наше третье условие выживания! Третье условие выживания: наличие портфеля примеров реальных внедрений. Портфель наработать можно начиная с небольших внедрений. Малые, средние предприятия, отдельные самостоятельные учетные системы (например, печать ценников или более крупный пример- складской учет). Хорошие, яркие примеры внедрений в руках харизматичных лидеров, владеющих ораторским искусством, становятся мощнейшим орудием убеждения.
В конечном итоге такая ERP-система должна проработать у пользователя лет десять, развиваться, доращиваться, удовлетворяя изменяющиеся и/или возрастающие потребности предприятия. Новые потенциальные пользователи должны видеть на примере, что, будучи внедренной, система не станет узким местом, и не будет создавать существенных трудностей в эксплуатации. Четвертое условие выживания: проверка временем.
Продолжение следует...

вторник, 12 января 2010 г.

ERP по лицензии GPL: условия выживания

Часть 1. Почему я об этом захотел написать?
Примерно лет 10 назад я плотно сидел на внутренней автоматизации предприятия: генераторы отчетов, датасеты, гриды, печать, БД- т.е. весь типичный набор технологий "автоматизатора". Мой друг занимался, в то же самое время, той же автоматизацией, но на базе 1С. Он очень любит программировать в 1С, т.к. встроенный язык 1С очень прост в освоении, а сама программа имеет развитой инструментарий для генерации различных отчетов и экранных форм. Мы периодически затевали споры на тему: "Что лучше: 1С или язык программирования, типа Delphi, C#, Java и СУБД?" Существенным аргументом в мою пользу было то, что на универсальном языке программирования и СУБД я мог гораздо гибче программировать, чем на 1С, да и быстродействие получалось чувствительно выше. Его аргументом было то, что на 1С можно очень быстро ваять отчеты и экранные формы.
Однажды он поинтересовался у меня по другому поводу, как осуществлять подключение к БД из языка программирования, т.к. программируя в 1С, он этого не знал, а тут потребовалось зачем-то. При нем я на форму накидал мышкой компонент, в их свойствах прописал подключение к БД. Мастер настроек сам при этом предложил доступные БД для прописывания пути к ним, так что ручками и набирать ничего не пришлось. Пять минут- и приложение готово! Я запустил его, на экране показалась форма с заполненным данными из БД гридом. Все это сортировалось, месторасположение и ширина колонок могли изменяться. Накидав на скорую руку приложение для демонстрации, я повернулся к приятелю, чтобы подробней спросить у него, что ему показать. Его лицо было вытянуто, глаза как два пятака, а он сам, буквально, онемел. Пришлось ему повторить вопрос. Его "расклинило", и он воскликнул: "Как у тебя получилось написать целую программу? Ты ведь даже до клавиатуры не дотронулся!"
Я знаю, что в 1С делать отчеты, экранные формы ничуть не легче, чем в распространенных IDE универсальных языков программирования. Конечно же, благодаря своей заточенности под конкретные функции, 1С гораздо проще и быстрее внедрить. При использовании универсальных языков программирования трудно будет вначале, пока не написан своеобразный framework, набор функций, позволяющий оперировать информацией на метауровне. А потом уже, по ходу работы, 1С не будет иметь никаких преимуществ перед универсальными язками программирования+framework+СУБД. Только получается, что на каждом предприятии этот framework обычно пишут с нуля. Как обычно, попадают на те же грабли, на которые наступали другие разработчики другого предприятия. Потом оголтело бегают по форумам в Интернете с криками "help! help! что делать если...".
Тогда я задумался, а почему, собственно, нельзя написать такой framework, чтобы его все использовали, а не изобретали каждый раз новый велосипед? Тогда получилось бы красиво: из плюсов 1С мы бы получили быстрое и простое развертывание приложения на предприятии, а из плюсов универсальных языков программирования - гибкость программирования и хорошее быстродействие. А хорошо бы, чтобы стоил он недорого или вообще, как Linux, бесплатный был.
Время шло, и я окончательно пришел к мысли, что не надо фантазировать, а лучше использовать готовые системы, типа 1С. Но подспудно грызла мысль: "А что если получится как у Товальдса, только в области ERP?" Вроде все понятно: собрать вместе свои наработки, оформить их, так чтобы это выглядело единым framework'ом, и выложить для публичного доступа. А народ там подтянется, framework начнет развиваться. Но, с другой стороны, меня грыз "червячок": а зачем это надо, ведь та же 1С, фактически и представляет собой тот самый framework. Система недорога, а, если учесть развитость воровства ПО в нашей стране, то, вообще, цена перестает быть решающим аргументом.
Поэтому, осознавая бесплодность своих мыслей 10-летней давности, я решил их изложить в блоге, не ставя перед собой цели реализовать эдакую GPL ERP а-ля Linux. Больше "в назидание потомкам", чем для попытки, что-то реально сделать.
Продолжение следует...

пятница, 1 января 2010 г.

21 век однако...


Никогда не слышал про ИНФОкрасные сауны. Поискал по Интернету- может это я такой дремучий, и не в курсе новых ИТ-технологий?