воскресенье, 24 марта 2013 г.

Странная непостоянность

  За многие годы изучил несколько языков и фреймворков и столкнулся с одной особенностью - никак не удаётся остановиться на одном.

  Допустим, захотел написать рогалик. Поискал и нашёл libtcod. Всё прекрасно, прикрутил его к ruby и начал писать. Но скоро остыл.

   Поставил lazarus/freepascal и начал писать на нём, и спустя некоторое время опять нашёл для рубина библиотеку unicodetiles.

   Теперь в раздумьях, переходить на новую библиотеку или нет.

   И понятно бы, что надо привязаться к одному проекту (языку) и закончить, но, видать, проект не интересен или слишком мало опыта в такого вида работе.

   Программисты делятся на две категории: те которые думают над каждым моментом, и те которые применяют уже разработанные ими шаблоны. 

  Похоже у меня второй склад ума. Очень трудно идёт познание нового (хоть и очень хочется), но при этом прекрасно работают старые знания.

  Самое забавное в этой ситуации то, что знаю о ROI и необходимости увеличения рентабельности обучения. Но страсть к новому всё затмевает.

   Причём это только в проектах для себя. Для клиента - всё определенно. Вход - тех. задание, выход - проект.

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

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

среда, 13 марта 2013 г.

Путь программиста тернист, но интересен

Когда пройдя пятнадцать лет, я оглядываюсь назад, то могу с уверенностью сказать, что не зря это всё начинал, и если бы выпал ещё один шанс начать сначала, то это был бы програминг.

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

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

И если отрешиться от этих мелочей и своих внутренних желаний стать знаменитым (и богатым), то получаешь чистую квинтэссенцию творчества.

Творчества, когда ты создаешь что-то живое. Что может жить и помогать людям без тебя - твоё детище.

Когда же приходит признание, то это расхолаживает. И оказывается, что ты ждал не того, что нужно. И даже если твою программу стали использовать много людей - ты начинаешь понимать, что это не самое главное.

Главное то, что ты дал жизнь идее. Воплотил её в живом информационном организме и запустил в мир людей.

Что ни говори, а писать в стол могут лишь единицы. Мы ждём признания от наших близких и от окружающего мира. И это вполне естественная позиция человека.

Но, написав код мало кто возвращается к нему, чтобы улучшить и добавить. За малым исключением (Open BSD) мы забрасываем его и начинаем новый проект.

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

вторник, 12 марта 2013 г.

Молодые помощники

Как ни забавно, но чем ты становишься выше в своём мастерстве програминга, тем труднее тебе найти того, кто просто поймет тебя, выслушает и сможет осознанно что-то посоветовать.

Мы по своей натуре одиночки. Это и хорошо - поскольку тогда мы можем сосредоточиться на задаче, и плохо - одному трудно и долго поднимать большие проекты (хорошо, хоть GPL-ного кода много).

Ведь иногда просто хочется простого человеческого внимания и понимания. Но молодые ещё не дошли до твоего уровня видения технологий, а взрослые один за другим отпадают от програминга.

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

И тут понимаешь, что нужны молодые помощники, с которыми можно просто поговорить о програминге. Да, они ещё мало знают. Но они полны энтузиазма и энергии. И это заражает нас, у которых огонь страсти местами погас.

Но найти их очень непросто. Ведь каждый из нас считает себя гениальнее другого. А тут нужно очень редкое качество - смирение.

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


суббота, 9 марта 2013 г.

Программисты и политика

  Столкнулся с такой проблемой: все уважают и ценят как специалиста и профессионала, но при этом некоторые сотрудники за спиной проводят неприятные комбинации.

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

  Мы, конечно, люди далёкие от политики. Но иногда так хочется этим людям сделать какую-нибудь гадость. Но при этом, оказывается, что я слишком ленив для этого.
  Мантра дзен: "Сиди и смотри на воду и река пронесет мимо тебя трупы твоих врагов" - не раз помогала (иногда буквально).

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

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

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

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

  Поэтому, братцы, не будем обращать внимания на мелочность других людей и будем просто творить и делать мир лучше так, как мы это умеем.

HTML5 и манометры. История одной презентации

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

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

  Пришлось писать всё самому. Выбрал платформу HTML5 и меня приятно удивило то, что за один день смог написать отображение манометров с динамической загрузкой данных с сервера с помощью Ajax/RightJS. Вот только проблема была - что таймеры отваливаются после вторичного запроса. Реентрабельности в Ajax нет, к сожалению.

  Два дня упорного кода и можно было представлять систему. Мнемосхемы были уже давно написаны. Манометры отлаживались до последнего. Сидел до 9-10 вечера. И что же, на презентации водоканалов всё прошло за десять минут.

   Первые пришли большие директора. Наш ген.директор порадовался красивым картинкам и пошли пить чай.
    После пришли директора поменьше и задавали побольше вопросов. 
    И вся презентация уложилась в 20 минут. После трех дней подготовки и нервов - это успех. Всем всё понравилось.

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

   И эта задача была простой, поскольку уже полтора года у меня крутится портал на Sinatra/Ruby и не пришлось идти и ставить разные фреймворки, как это было раньше.

AI4R и нейронные сети. Первые впечатления

  Поставил себе как-то задачу аппроксимации параметров водовода ТЭЦ, с которых снимаю данные уже четыре года. Никто не может помочь с мат. моделью. Все ссылаются на сложности (не знаем где и куда идёт труба) и возможные изменения. 

   Похоже, просто не хотели работать со мной. Но благодаря нейронным сетям и накопившейся статистике смог проверить идею на малом узле. Функциональное соответствие и аппроксимация двух входящих параметров с шестью выходящими показала, что AI4R можно и удобно использовать даже в нечетко определённых задачах.

    Меня удивило, что по восьми значениям одного дня программа смогла предсказать восемь значений другого дня (5х5 внутренних нейронов) с точностью до 10%. Причём, коррелирующие значения сошлись с точностью 0-2%, а не коррелирующие с разбросом 7-10%. 

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

   Осталось обучить нейронную сеть за более длинный период - день, неделю, месяц и год. И добавить самообучение при большом разбросе дисперсий.

Vim & Free Pascal

  Недавно открыл для себя Vim с ним можно интересно и быстро программировать. Поставил плагины SingleCompile и TagBar, и теперь можно плодотворно трудиться не выходя из редактора, да и по ошибкам перемещаться легче.

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


  Единственный минус - отсутствие отладчика. Но это возможно из-за того, что я просто не нашёл себе ещё плагин под Vim для этих целей. 
   
   Расширяемость его тоже на уровне. Вот только пока я изучаю корневой функционал и функции плагинов. Например, плагин fugitive, который облегчает работу с git, и всё выполняется в среде редактора.

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

    

Free Pascal как новый свет в окне

   После Ruby попробовал написать приложение на Free Pascal и столкнулся с интересной особенностью языков 3го уровня, которые уже забывать стал.

  Детализация на высоком уровне, которой можно избежать в Ruby вышла на первый уровень. И сообщения об ошибках неразумные (Runtime Error 216), которые отлавливать нужно в блоках.

  Но при этом можно применять все знания, которые приобрел за 15 лет написания кода в Delphi. Да, и кросс-компиляция привлекает. 

   Хотя и компоненты разные доступны под разные платформы, а под Android нужно всё рисовать самому, но все равно - общая кодовая база и вся бизнес-логика перенесутся без трений.

  При этом сам язык остался такой-же, с расширенными возможностями последних версий Delphi.

   И существует сборка всех компонент и среда кросс-компиляторов CodeTyphon. Таким образом можно ставить среду и сразу работать.