воскресенье, 25 декабря 2011 г.

Что было бы, если бы программировали не только программисты

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

воскресенье, 27 ноября 2011 г.

Философия open source

Все мы знаем, что такое свободное программное обеспечение. Кто-то его любит, кто-то нет. Но я замечаю, что open source или, более правильно с точки зрения апологетов, free software нравится людям, которые довольно умны и имеют значительные способности в программировании.

На самом деле это так. Почитайте, например, hacker news, сообщество, созданное Полом Грэмом и собравшее различных умных людей со всего мира, создающее новые проекты в области IT. Почти все стартапы основаны на технологиях open source. И сравните, например, с сообществом, основанном на технологиях Microsoft http://www.techdays.ru/. Материалы на Techdays на столько слабы и малоинформативны, что нет желания их просматривать. Материалы на hackers news наоборот живы и интересны, технологичны и мудры.

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

Любовь к open source я объясняю так, что умные программисты достаточно умны и понимают не только то, что творится в настоящие дни, но и понимают, что будет через 10, 20, а то и 100 лет. Если вы начинаете зависеть от проприетарного программного обеспечения (ППО), то вы вынуждены регулярно платить собственнику программного обеспечения. Платить будете не только вы, будут платить ваши дети, ваши внуки и правнуки. Вы можете получить выгоду от использования ППО только на ближайшее время, но не на долгосрочный период.

Очень выгодно использовать ППО для тех, кто пишет ПО на заказ. Быстро создали, быстро получили деньги. За использование технологий будет уже платить заказчик. В США мало стартапов создается на заказ. Как правило, стартап развивается владельцем проекта. Частично поэтому движение за свободное ПО зародилось именно в США.

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

Именно из-за Open Source многие выбирают телефон на базе Android, а не iPhone. Именно из-за Open Source пользуются менее удобным Open Office, а не MS Office. Что выберите вы, это ваше дело. Будете ли вы думать только о текущих потребностях, либо будете создавать будущее.

четверг, 20 октября 2011 г.

Почему никто ничего не знает?

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

воскресенье, 16 октября 2011 г.

Почему язык Dart не имеет будущего

Давайте сначала рассмотрим особенности языка

Классы и интерфейсы

На первый взгляд Dart похож на Java. Синтаксис очень похож: обращение к методам через точку, фигурные скобки, точка с запятой, функция main(). Запрещено множественное наследование, есть интерфейсы. Отдельная глава посвящена фабрикам (такое впечатление, что возвращается 97-й год). Введение паттернов на уровне синтаксиса языка - это все-таки плохо. Почему-то другие более современные паттерны не введены.

понедельник, 10 октября 2011 г.

Как стать более хорошим программистом не программируя

Вольный перевод статьи, взятой отсюда. 

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

четверг, 6 октября 2011 г.

Умер Стив Джобс, видео молодого Стива

Умер Стив Дожбс. Я никогда не пользовался продукцией фирмы Apple, но тем не менее считаю, что благодяря Стиву программное обеспечение повернулось лицом к пользователю, стало более удобным и стало доставлять именно удовольствие, а не неприятности.
В компании Стива Джобса главные люди - это дизайнеры, а не программисты, как во многих IT-компаниях. Считаю, что равноправие между двумя этими профессиями должно быть и благодаря Apple перекос межу ними выравнивался.
Но история Apple не закончилась. Тот толчок, который Стив дал компании будет действовать еще очень долго и найдутся люди, которые продолжат его дело.

понедельник, 12 сентября 2011 г.

В чем заключается работа системного аналитика?

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

воскресенье, 4 сентября 2011 г.

Как создать убийцу Facebook

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

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

воскресенье, 28 августа 2011 г.

Менталитет Силиконовой долины


Недавно смотрел часовое интервью с предпринимателями, приехавшими из США в Киев создавать софтверный бизнес. Они хорошо знают русский, потому что в прошлом какое-то время жили в России, а потом волею судеб уехали за границу, где выучились и работали.
Интересным оказалось узнать, что лежит в основе бизнеса, который получает миллионные инвестиции и является лидером в своей сфере.

четверг, 18 августа 2011 г.

Почему общепринятые правила менеджмента не применимы в разработке программного обеспечения

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

понедельник, 18 июля 2011 г.

Google обворовывает своих партнеров по AdSense

Недавно Google отчитался, что он заработал за второй квартал
на 39% больше, чем в прошлом году.

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

Например 2010-й год:
- 1-й квартал, рост доходов Гугла 20%, партнеров 24%
- 2-й квартал, рост доходов Гугла 23%, партнеров 23%
- 3-й квартал, рост доходов Гугла 22%, партнеров 22%
- 4-й квартал, рост доходов Гугла 22%, партнеров 24%

В 1-м квартале 2011-го рост доходов Гугла 32%, партнеров 19%.

Очевидно, Гугл стал пользоваться своим монополизмом и забирать себе еще больше, чем раньше, снизив тем самым доходы в сети AdSense. Скорее всего деньги понадобились на развитие новой социальной сети Google+, стоимость разработки которой оценивают в $585 млн.

Update: см. также статью о проблемах с выплатами adsense в русскоязычном сегменте: http://habrahabr.ru/blogs/google/122524/

вторник, 12 июля 2011 г.

Убийца MS Project


По работе иногда приходится оценивать разные проекты и составлять план работ по ним. Кто-то для этого использует Excel, кто-то MS Project как я. Различные web-решения существуют, но крайне неудобны. Excel плохо подходит для составления планов, поскольку там сложно составлять древовидную иерархию. MS Project хорош, но очень избыточен на функции. Кроме того, некоторые функции реализованы там не оптимально. В итоге я решил написать свой MS Project на javascript.

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

Данные все сохраняются в браузере с помощью HTML5. Поэтому, когда вы снова зайдете на сайт, то опять увидите свой сохраненный план. Возможно, если будет интерес к этому проекту, то буду сохранять данные на сервере. Когда вы редактируете план, то данные периодически автоматически сохраняются.

В планах сделать работу со списком планов (простите за каламбур) и экспорт/импорт в CSV.

Ссылка на приложение: http://wiki4tech.ru/eazzyplan/

Использованы библиотеки: jQuery, jQuery UI, jqGrid, jquery.debounce, json-serialization, LABjs, ZeroClipboard.

среда, 6 июля 2011 г.

PocketBook IQ 701

Не так давно приобрели читалку PocketBook IQ 701. Преследовали разные цели:
  • Полазить по интернету в кровати
  • Брать с собой в поездки и там использовать для переписки с родными и в качестве карты.
  • Конечно же читать. Сыну стали задавать множество книг в школе, которых у нас нет. Вместо приобретения книг можно скачивать из интернета
  • Играть в несложные игры
За время пользования книжкой могу сказать, что девайсом я доволен. Не обошлось без допиливаний. Закачал модифицированную прошивку и множество приложений. Итак обо всем по порядку.

В читалке зашит андроид 2.1 и это позволяет скачивать кучу приложений для него. Хотя должен признать, что большая часть приложений не работает, либо пользоваться ими неудобно. Это вам не айфон. При этом прекрасно работает программа для автонавигации Navitel. В устройстве нет GPS, поэтому маршрут прокладываем сами.

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

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

Очень удобно на читалке именно читать. Я читаю Google Reader. Жена читает книжки, закачанные в формате FB2. Считаю плюсом наличие LCD-экрана. Он цветной и быстро перерисовывает картинку. Хотя на ярком свету читать невозможно. На пляже не почитаешь. Да и зачем? Так лучше сохранится.

Последнее время подсел на игру CLUEDO, которую закачал в читалку. Игра очень интересная на логическое мышление. Чем-то напоминает древнюю игру Шерлок на PC.

вторник, 5 июля 2011 г.

Плюсы и минусы Google+

Не так давно была запущена социальная сеть от Google. Про нее многие писали здесь: http://habrahabr.ru/blogs/google/123088 и здесь: http://habrahabr.ru/blogs/google/123141/, но в этих сообщениях мало конкретики и много воды. Попробую и я рассмотреть G+

Плюсы:

  1. Все контакты разбиваются на круги и можно писать достаточно большой группе в отличие от Facebook, где существует ограничение на количество адресатов и назначать адресатов значительно сложнее.
  2. Сообщения по умолчанию приватны и всегда явно видно, кому ты пишешь сообщение. Поэтому G+ можно рассматривать как удобный инструмент для взаимодействия внутри групп.
  3. Само по себе разбиение на круги больше соответствует действительности, поскольку человек живет одновременно в разных социумах. Это может быть работа, семья, друзья с предыдущей работы, друзья по интересам.
Минусы
  1. Круги общения носят личный характер. Круг может называться у разных людей одинаково, но там будут разные люди. Это неудобно, если круг или группа носит официальный характер. Например неудобно использовать такой подход для организаций, поскольку там более логично иметь администратора группы, который будет следить за составом группы. В G+ за составом группы должен следить каждый участник, что неэффективно с точки зрения временных затрат.
  2. G+ пока ни с чем не интегрируется. Нет API для интеграции, нет приложения для iPhone. Последнее скорее всего появится, но API появится значительно позднее. Если вы наблюдаете за работой поискового гиганта, то можете заметить, что он не любит партнерства с кем-либо. Google стремится установить свою монополию во всем. Поэтому, лишь только из-за того, чтобы уменьшить монополизм Google, я бы не рекомендовал пользоваться G+.
  3. Один очевидный минус в том, что если вы несовершеннолетний и решили подключиться в G+, то будьте уверены, что ваш Gmail будет заблокирован как впрочем и G+. Пруфлинк
  4. Очень редко есть необходимость вести человеку массовую рассылку информации сразу в нескольких приватных кругах общения. Поэтому разбиение на круги хоть и естественно, но не является необходимым.
  5. Для разных кругов общения можно использовать разные социальные сети. Я, например, использую Facebook и Twitter - для работы. Одноклассники - для одноклассников и коллег с предыдущих мест работы. Вконтакте - для некоторых молодых родственников и родителей одноклассников сына.

четверг, 30 июня 2011 г.

От PHP к Python за 15 минут

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

Python - это не .Net и не Java, где приходится осваивать довольно сложную библиотеку базовых классов. Здесь нет сложности в настройки IDE. Как-то работая в проекте на Java мне необходимо было потратить два дня только на настройку Netbeans.

Python идет в одном ряду с PHP и Perl. Чем-то похож на VB.NET. Кроме того он еще проще в освоении, чем PHP. Чтобы начать программировать в языках такого уровня необходимо только скачать бинарники и тупо начать, даже если вы ничего не знаете. Знания будут добываться по мере решения проблем.

Давайте рассмотрим, чем же отличаются PHP и Python. Я не буду описывать все тонкости, отмечу лишь самые главные моменты, которые помогут преодолеть барьер сложности.

  1. В python как и в php тип переменных назначается динамически, НО динамически не преобразуется. Т.е. вы не можете как в PHP использовать число там, где должна быть строка.
  2. Забудьте про фигурные скобочки для выделения блоков кода. Главное это отступы. Все структурирование осуществляется с помощью отступов. Вместо открывающей фигурной скобочки используется двоеточие. Конец блока определяется с помощью отступов. Чтобы разбить строку на несколько, используется обратный слэш в конце (аналог подчеркивания в VB.NET).
  3. Вместо слово function нужно писать def
  4. Все сущности включая функции являются объектами
  5. Определение ассоциативного массива (называется dictionary - словарь в python) похоже на JSON: a = {"server":"mpilgrim", "database":"master"}
  6. Определение списка тоже вам напомнит JSON: li = ["a", "b", "mpilgrim", "z", "example"]
  7. В язык встроены довольно мощные средства по манипуляции со списками:
    1. Получение последнего элемента: li[-1]
    2. Выделение подсписка: li[1:3]. Можно даже так: li[3:] или так: li[:]
    3. Можно складывать и размножать списки ( list * 3 = list + list + list).
    4. Применение выражения ко всем элементам списка с помощью конструкции [elem*2 for elem in li]. Так мы получим новый список, где каждый элемент старого списка умножен на два. Список в такой операции может быть списком кортежей, тогда после for указывается не одна, а несколько переменных. Более подробно см. http://ru.diveintopython.org/odbchelper_map.html и http://ru.diveintopython.org/apihelper_filter.html
  8. Есть упрощенный вариант списков - кортежи (tuple), которые объявляются с помощью круглых скобок вместо квадратных. Их можно назвать константными списками, которыми нельзя так легко манипулировать. Кортежы более быстро работают и могут быть ключами для словарей.
  9. В python есть возможность использовать кортеж слева от знака присваивания. Вот как можно быстро присвоить значения константам от 0 до 6: (MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY) = range(7)
  10. Еще одна фича python - это подстановка значений в строку по шаблону: "%s is not a good password for %s" % (pwd, uid). Данное выражение вернет отформатированную строку аналогично функции sprintf.
  11. Вместо explode и implode используйте методы строки split и join
  12. Подгрузка внешнего файла осуществляется с помощью import module_name. После этого вы можете обращаться к функциям модуля с помощью module_name.func_name. Если вы не хотите постоянно указывать префикс "module_name.", то можете использовать конструкцию from module_name import *, либо from module_name import a, b, c. Здесь a,b,c - элементы, которые мы хотим импортировать в модуль.
  13. В функции можно устанавливать значения по умолчанию: def help(object, spacing=10, collapse=1)
  14. Как и в VB.NET при вызове функции можно указывать названия параметров, которым назначаются значения: help(spacing=15, object=odbchelper)
  15. В python есть lambda-функции. Ее можно определить как объект-функция без названия. Например: lambda x: x*2. Это функция, которая возвращает аргумент умноженный на два. Тут же можно вызвать функцию: (lambda x: x*2)(3)
Объектно-ориентированное программирование на python
  1. Объявление класса: "class FileInfo:"
  2. Объявление с наследованием: "class FileInfo(UserDict):"
  3. Аналог конструктора - метод __init__. Вызывается после создания объекта.
  4. Первый аргумент метода - всегда текущий экземпляр объекта. Общепринято называть self.
  5. Создание объекта: obj = FileInfo(x)
  6. Сеттеры и геттеры. Есть специальные названия методов __setitem__ и __getitem__. Если вы их объявили в классе, то можете использовать объект как словарь: f["name"]
  7. Если вы внутри класса объявите переменные, то это будут статические переменные и ими можно пользоваться без создания класса. Если вы хотите создать настоящие переменные-члены класса, то нужно их присвоить в методах с помощью self.var_name = value.
  8. Если вы хотите объявить приватный метод, то объявите его с помощью двух знаков подчеркивания в имени: __method. Не используйте два знака подчеркивания в конце. Это особенность системных методов. В действительности в python нет ничего приватного. Если вы захотите до чего-нибудь добраться, то вы сможете это сделать.
Материал составлен на основе книги В глубь языка Python

пятница, 10 июня 2011 г.

Типичные ошибки программиста в проектировании интерфейсов

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

Проблемы, связанные со структурами данных.


  • Использование имен переменных или технических терминов для текстовых меток. Такие имена мало значимы для пользователей. Например, подумайте, сколько человек знает, что такое полный дуплекс?
  • Злоупотребление текстовыми полями. Простое текстовое поле предоставляет слишком много вариантов пользователю. Если поле типа String это не значит, что необходимо всегда использовать TextBox.
  • Ограничения по хранению значения в коде переносятся в формы. Например, телефон должен всегда храниться в определенном формате. Но это не значит, что необходимо запрещать пользователю вводить телефон в другом общеупотребимом формате. Пусть программа автоматически преобразует текст в нужный формат.
  • Избыток сообщений об ошибках. Часто выводят сообщения об ошибках при малейших проблемах вне зависимости от сложности проблемы и понимания ее пользователем. Необходимо выводить сообщения об ошибках, которые пользователь сам может легко исправить.
  • Выдача специальных значений переменных. Часто используют спец. значения для переменных для обозначения отсутствия значения. Например "-1" для натуральных чисел. Необходимо выдавать понятный текст, а не спец. значение и позволять вводить это спец. значение с помощью кнопки, либо еще как-нибудь.
Проблемы простоты
  • Не включение в форму элементов ввода наиболее вероятных значений. С точки зрения кода значения, вводимые в форме равновероятны, хотя для пользователя это не так. Например при выборе шрифта наиболее вероятно, что пользователь выберет последний выбранный шрифт или шрифт, выбранный в прошлом.
  • Чрезмерное обобщение. Программисты шутят, что есть только три числа: 0, 1 и бесконечность. Для выполнения функции 2 и более раз пишется цикл. Такое обобщение часто приводит к избыточной сложности.
  • То, что требуется согласно коду не всегда знает пользователь. Например, в программе требуется код аэропорта, а пользователь знает только название города. Необходимо спрашивать пользователя то, что он знает.
Проблемы жизненного цикла
  • Слишком долгая обработка форм. Вы когда-нибудь видели большие формы, которые состоят полностью из пустых полей и вы не знаете, что заполнять? Обнулять все значения можно коде для структур данных, но не для пользователя. Можно заполнять значениями по умолчанию, либо разбивать форму на несколько форм.
  • Отображение сразу всех полей. Структуры данных в коде не должны полностью отображаться в интерфейсе. Необходимо учитывать зависимости между полями, определять важное от неважное, обязательные и опциональные поля, скрывать редко используемые поля. 
  • Заполни все или ничего. Еще одна проблема отображения структуры данных в интерфейс. Нельзя заставлять пользователя обязательно вводить все данные, которые есть в структуре. Пусть он введет только самое необходимое на текущем этапе, а остальное он заполнит потом.
Проблемы эффективности
  • Барьер приватности. Если структуры данных требуют какой-то персональной информации, которую сложно получить (иметь логин, найти забытый пароль), то пользователь может не захотеть давать личные данные, особенно если эти данные не требуются для выполнения задачи (по крайней мере начала). 
  • Частый ввод одних и тех же данных. Человек не компьютер, он не любит выполнять одну и ту же работу по нескольку раз. Реализуйте заполнение полей значениями по умолчанию.
  • Слишком много полей на экране. Сложные формы вызывают панику и неприязнь. Уменьшайте количество полей на формах!
  • Избыточные ограничения на ввод данных. Если пользователь верит, что он ввел верные данные, то скорее всего это так. Позвольте вводить информацию в разных форматах. На эту тему см. статью We cannot accept that behavior.
При проектировании UI заботьтесь о том, чтобы пользователи достигли своих целей, а не о том, как заполнить структуры данных или сделать красивым код. Плохо спроектированный интерфейс требует пользователей подгонять свои задачи под интерфейс, а хороший интерфейс позволяет решать задачи не задумываясь.

вторник, 3 мая 2011 г.

Как стать web-программистом за 1 год?

На написание этой статьи меня вдохновила статья J.P. Stacey
Не все советы подходят для российского программиста, поэтому я решил ее адаптировать.
  • УЧИТЕ английский. На русском языке значительно меньше полезной и актуальной информации,чем на английском. Если даже вы не слишком хорошо знаете английский, пусть вас это не останавливает. Чем больше вы будете читать на английском, чем быстрее вы его освоите.
  • ЧИТАЙТЕ: Hacker News - очень важный источник полезной информации в наши дни. Это аналог Digg для программистов и предпринимателей в IT. Многие участники работают в Силиконовой Долине. Иногда там бывают общие разговоры о карьере программиста и индустрии. Публикуются новинки и стартапы, интересные для разработчиков.
  • ЧИТАЙТЕ: Stack Overflow. Это большая база данных, содержащая решения проблем в области разработки. Часто гугл в поиске дает ссылки на этот ресурс (если вы делаете поиск на английском).
  • ТАКЖЕ ЧИТАЙТЕ: Wired, Techcrunch, 37signals, UXMovement, Coding HorrorDiveintomark. Избегайте: Slashdot и The Register; сейчас эти ресурсы полны информационного мурора.
  • УЧАСТВУЙТЕ: в конференциях по веб-разработке типа http://devconf.ru/. Включайтесь в сообщество программистов. Лучше всего, если вы будете работать в компании, где есть чему научиться.
  • ПРАКТИКУЙСЯ. Делай пусть небольшие, но работающие проекты. Получай отзывы от коллег и пользователей. Сейчас можно купить достаточно недорогой хостинг, чтобы начать размещать в интернете свои проекты.
  • ИССЛЕДУЙ. Посмотри, как работают облачные сервисы. Это сервисы от Амазона: EC2, S3. Альтернативные сервисы: Rackspace. VM hosting from e.g. Bytemark. Google App Engine. Посмотри на их API, по крайней мере составь представление о том, что там можно делать. Изучай новые технологии. PHP все еще черезвычайно популярен, но не останавливайтесь только на нем. Ruby (on Rails) и Python (Django) набирают популярность и показывают себя довольно хорошо. Изучите, как работает принцип MVC в этих фреймворках. Познакомьтесь с AOP (разновидность событийно-ориентированного программирования) и другими не MVC-моделями. Популярные CMS наших дней - это Drupal и Joomla являются зрелыми и богатыми возможностей продуктами. Wordpress проще, но более популярный. Попробуйте что-нибудь написать с их помощью, чтобы оценить их возможности. MySQL все еще является стандартом в вебе, но обратите внимание на решения NoSQL типа CouchDB.
  • ИССЛЕДУЙ Dive into HTML5 - это великолепный ресурс по web-стандартам. Изучи возможности CSS3 и способы создания динамического контента без Flash. Javascript вкупе с jQuery дает вам богатые возможности по созданию интерфейсов. В качестве систем управления версиями (VCS) все большую популярность набирают распределенные системы типа git и mercurial. Поставьте для себя правилом использование VCS. Мне лично нравится Git. Для его изучения рекомендую Pro Git book.
  • ПРИСОЕДИНЯЙСЯ к сообществам разработчиков через TwitterLinkedIn, Github
  • ИГРАЙ. Выберите язык, с которым вам хотелось бы поиграться. Мой персональный выбор - это Python. Python - объектно-ориентированный язык с возможностями функционального программирования. Имеет строгую, но динамическую типизацию.
  • ПИШИ много кода. Пробуй на вкус фреймворки и языки. Составляй примеры. Делай разработки на базе существующих проектов, коих сейчас бесчисленное множество.
  • ОТТАЧИВАЙ мастерство. Выбери что-нибудь почитать отсюда: these recommendations off Stack Overflow. Я бы также предложил почитать The Pragmatic Programmer и Mythical Man Month. Если у вас еще останется свободное время, почитай в википедии про принципы разработки: Agile, XPScrum, Kanban и т.д., чтобы вы могли работать по этим принципам, если предоставится такой случай
Не все советы могут подойти каждому. Некоторые могут никому не пригодиться. Я не хочу ввязываться в споры по поводу этих советов. Лучше напишите, что вы рекомендуете, чтобы стать профессионалом за указанные 12 месяцев.

четверг, 14 апреля 2011 г.

Из чего складывается работа профессионального программиста

Бывает такое, что клиент не понимает, почему за разработку необходимо так дорого платить. Иногда это бывает из-за технической некомпетентности, как описано здесь: http://wiki4tech.ru/Проблема_понимания_клиентом_сложности_проекта. Но последнее время как правило бывают технически подготовленные клиенты, имеющие специальное профильное образование, но не ставшие на путь разработки и занимающиеся менеджментом. В этом случае сталкиваемся с непониманием другого рода. Будучи студентом решая различные лабораторные работы создается впечатление о том, что программирование - это достаточно легкое занятие. Довольно сложные задачи могут решаться быстро и впечатлять нас.
Дело в том, что лабораторная работа в сравнении со зрелым продуктом - это картонный автомобиль в сравнении с настоящим автомобилем. Смотрите, это же работает, какая красивая картинка. Но откуда берутся дополнительные часы и дни на разработку? Попробую перечислить, что же нам вставляет палки в колеса.
  • Программа должна быть легко сопровождаема, необходимо писать красивый понятный код
  • Программа должна быть протестирована самим программистом (а не только тестировщиком)
  • В вузах как правило не преподают как эффективно проектировать интерфейс взаимодействия с пользователем. Интерфейс пользователя - это та неуловимая для многих вещь, которая заставляет писать дифирамбы программе, а иногда отбивает желание пользоваться.
  • Программирование - это не спринт, а марафонский бег. Нужно достаточно хорошо подумать, чтобы что-то сделать.
  • Иногда бывает, что время днями тратится на решение какой-то технической проблемы. При этом проблема не имеет какого-то понятного пользователю описания.
  • Когда программисты работают в команде, необходимо тратить время на взаимодействие внутри команды.
  • Любой проект с первого дня разработки начинает меняться и дополняться новыми требованиями. Если вы не меняете проект, то готовьтесь выкинуть его на помойку.
Как же решить эти проблемы с обоих сторон? Думаю, нам поможет модель Agile разработки ПО, которая учитывает непостоянство окружающего мира и в том числе процесса разработки. Эта модель построена на взаимном доверии, когда бюджет заранее не фиксируется, либо имеет ограничение сверху с запасом, позволяющее развивать проект. При подходе Agile программный продукт выпускается очень часто. Может быть каждую неделю, а может быть каждый день. Для больших проектов - это единственный путь, способствующий созданию успешного продукта. Подход Agile может существенно сэкономить средства на разработку и в короткие сроки создать работающий продукт. Старый подход, когда сначала пишется огромное ТЗ, а потом долго-долго реализуется часто приводит к провалу. А иногда даже к провалу до начала работы программиста.

пятница, 1 апреля 2011 г.

Первого апреля британские ученые доказали

1) Климат весной страдает неопределенностью и стабилизируется только к лету.
2) Радиация помогает от мух и комаров
3) Земля страдает воспалением хитрости, а человечество от простодушия
4) Если Земля погибнет в 2012 году, то Бог есть. Если не погибнет, то Бог спит.
5) 100 грамм мяса способны заменить два яйца
6) Сторонники разнополых браков способны способны к размножению не меньше, чем сторонники однополых браков.
7) Хороший роман только неудачное продолжение хорошего анекдота
8) У хорошего политика всегда наблюдаются дефекты слуха. Слуховой аппарат способен превратить политика в обывателя
9) Если у женщины желания превышают возможности, это придает ей очарование в глазах мужчин
10) Превышение возможностей над желаниями у мужчин вызвано зрелостью или перезрелостью возраста.
11) Развитие общепонятных сокращений в Интернете позволит через три года избавить школьников от уроков родной речи и литературы
12) Демократия в России экономически невыгодна
13) Если часто говорить о Глобальном потеплении, то расходы на отопление можно снизить на 7,4%, но расходы на кондиционеры летом возрастут на 15,9%.
14) Смертность от СПИДа не столь опасна, как смертность от лечения СПИДа.
15) Люди давно жили бы в виртуальной реальности, если бы не необходимость ходить на работу. Поэтому безделье следует узаконить.
16) Регулярная влажная уборка помещения способна избавить от страха найти арабских террористов у себя под кроватью.

среда, 30 марта 2011 г.

Как нанимать программистов?

Вышла поучительная статья http://devinterviews.pen.io/ про неудачный опыт набора кадров.
Многие компании любят давать зубодробительные задачки для программистов, задавать вопросы по тонкостям языка программирования, которые бывают нужны в 0.01 % случаев.

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

четверг, 24 марта 2011 г.

История взаимодействия SEO и Google

Firefox 4.0



Обновил Firefox до 4-й версии. Новый дизайн очень нравится. Меню на самом деле ни к чему постоянно отображать и расположение закладок вверху очень удобно.
После установки столкнулся с тем, что иконки отображались маленькие не смотря на то, что в настройках галочка "Маленькие значки" не стояла. Нажал "восстановить" и иконки появились нормальные.
Если меню отображается, то располагать закладки вверху нет смысла. Суть в том, что мышка упирается в границу экрана и промазать по закладке невозможно.
Зачем-то разработчики убрали иконку RSS из строки адреса. Пришлось вытаскивать на панель вручную. Кнопки по добавлению закладки и отображению всех закладок мне показались лишними в строке закладок и я их перетащил пониже.
Понравилась анимация при загрузке страницы. Благодаря этому складывается ощущение, что страница загружается быстрее. Но на некоторых страницах увеличение скорости в самом деле есть.
Почти все плагины, которыми пользуюсь, заработали. Это firebug, tabmix, online translator, adblock plus и другие.

воскресенье, 20 марта 2011 г.

Создание большого приложения на Javascript

Управление зависимостями

Когда вы пишете большое приложение, вам иногда бывает нужно определить порядок загрузки скриптов. Например, загружать func.js до app.js. Хотя традиционный подход упорядочивания тегов script может вас устроить во многих случаях, загрузчики скриптов могут дать вам дополнительные возможности в управлении загрузкой. Например, загрузка в зависимости от возможностей браузера, динамическая загрузка по условию.
Наиболее популярные загрузчики - это RequireJS (от James Burke) и LabJS (от Kyle Simpson). Каждый из них имеет свои плюсы и минусы. По моему опыту, RequireJS имеет больше возможностей и поддерживает структурированные модули, в то время как LabJS наиболее подходит, если вам нужно что-то легкое и не нужно много фич.

Библиотеки:
  • RequireJS – я рекомендую эту библиотеку, если вы планируете делать ваш код модульным. Модули ограничивают влияние кода на глобальное пространство имен и позволяют более точно определять прямые зависимости. RequireJS также имеет инструмент для оптимизации, который позволяет вам комбинировать и группировать ваши скрипты в минимизированные копии, которые быстро загружаются. http://requirejs.org/
  • LabJS – это лучшее решение, если вы хотите эффективно загружать скрипты в определенном порядке и вам нужно более легкое решение, чем RequireJS, либо вас не интересует модульный подход в управлении зависимостями. http://www.labjs.com (и еще гляньте YepNope JS - отличный загрузчик, работающий по условиям, который работает на базе LabJS: http://www.yepnopejs.com).
  • StealJS – другой отличный инструмент управления зависимостями. StealJS - это часть пакета JavaScriptMVC, но вы можете использовать его отдельно. Включает в себя конкатенацию, компрессию и чистку кода. http://jupiterjs.com/news/stealjs-script-manager
  • JSL Script Loader – другой достойный инструмент, который поддерживает ленивую загрузку, упорядоченную загрузку, предотвращает повторную загрузку и кэширует. Не так интенсивно протестирован как LabJS и Require –  http://www.andresvidal.com/jsl
  • Bootstrap - имеет меньше возможностей, чем другие, но делает свою работу. Лучший вариант, если вы ищете минимальное решение без всяких наворотов. https://bitbucket.org/scott_koon/bootstrap  
Читать дальше 


четверг, 17 марта 2011 г.

Стандарты кодирования и лучшие практики разработки

Креативное агенство Isobar опубликовало довольно полезный документ для веб-разработчиков.
Стандарты кодирования и лучшие практики разработки: http://na.isobar.com/standards/
Рассмотрены вопросы
  • Кодирование в HTML, CSS, JavaScript
  • Повышение производительности
  • SEO-оптимизация
  • Кросс-браузерная поддержка
  • Разрешение экрана
 Есть также аналогичный документ на русском: http://wiki4tech.ru/Профессиональные_правила_верстки
См. также http://wiki4tech.ru/Категория:Верстка

среда, 9 марта 2011 г.

Новая версия анекдота про воздушный шар

A man is in a hot air balloon and he realizes he is lost. He spots a man in the field below him and calls down:

"Excuse me, can you help? I promised a friend I'd be somewhere half an hour ago but I'm completely lost. Can you tell me where I am?"

The man replies:
"You are about 30 feet above this field, you are between 40 and 42 degrees N. latitude, and between 58 and 60 W. longitude"

"You must be an engineer" says the balloonist.

"I am!" says the man, "How did you know?"

The balloonist laughs, "well, everything you've told me is correct, but I don't understand what you are talking about and I'm still lost"

"Ah, you're a manager" says the engineer

"Indeed I am!" replies the balloonist, "How could you possibly know that?"

"Well..." says the engineer, "you don't know where you are and you don't know where you are going. You've made a promise you can't keep and you expect me to solve your problem. You are in exactly the same position as you were before we met, except now somehow it's my fault!"

пятница, 25 февраля 2011 г.

Сравнение PHP-фреймворков

Написал статью Сравнение PHP-фреймворков
Перечислил наиболее популярные и дал ссылки на другие ресурсы, посвященные сравнению фреймворков.

четверг, 24 февраля 2011 г.

15 элементарных проверок перед тем как запустить сайт

источник

Favicon

Иконка favicon используется для отображения сайта на вкладке и в строке адреса. Также она используется при сохранении закладки на сайт. Некоторые браузеры по умолчанию загружают иконку из файла favicon.ico, который находится в корневой папке вашего сайта, но правильнее включать иконку в заголовок страницы:
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
Если у вас есть иконка для iPhone, то так:
<link rel="apple-touch-icon" href="/favicon.png" />
9rules.jpg

Заговоки и метаданные

Это очень важные вещи для целей SEO. См. также [Основы SEO]
Так добавляем заголовок:
<title>10 Things To Consider When Choosing The Perfect CMS | How-To | Smashing Magazine</title>
Мета-тег description очень важен для SEO. Google исполользует его для вывода в результатах поиска.
<meta name="description" content="By Paul Boag Choosing a content management system can be tricky. Without a clearly defined set of requirements, you will be seduced by fancy functionality that you will never use. What then should you look" />
b-desc.jpg

Кросс-браузерная проверка

Очень важно, чтобы ваш сайт работал на большинстве популярных браузерах, таких как Internet Explorer 6, 7 и 8, Firefox 3, Safari 3, Chrome, Opera и iPhone.

7 простых способов проверить сайт в разных браузерах

Тексты

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

Ссылки

Покликайте на ссылки. Может вы забыли добавить “http://” для внешних ссылок. Убедитесь, что ссылка на логотипе ведет на главную страницу.
Понятно ли будет новым пользователям, что ссылки - это ссылки? Не подчеркивайте то, что не является ссылками. Проверьте как отображаются посещенные ссылки.
W3C Link Checker

Проверка функционала

Полностью все проверьте. Если у вас есть форма обратной связи, то проверьте ее. Попросите других проверить сайт. Сидите сзади и смотрите, как они пользуются сайтом.
Silverback – guerrilla usability testing

Отключение возможностей

Ваш сайт должен работать при выключенном JavaScript. Проверьте формы и ваш навороченный AJAX.

Валидность

Ваша цель - иметь 100% верную разметку. Не смертельно, если у вас разметка не идеальна, но стремитесь достичь идеала. Распространенные ошибки - это неиспользование атрибутов “alt”, незакрыте теги, использование “&” вместо “&amp;”.

RSS Link

Если у вашего сайта есть блог или раздел новостей, вы должны предоставлять пользователям возможность подписаться с помощью RSS. Ссылка на RSS должна легко находиться.
Разместите этот код в теге <head>:
<link rel="alternate" type="application/rss+xml" title="Site or RSS title" href="link-to-feed" />

Аналитика

Установите сервис аналитики на сайт. Это может быть Google Analytics или Яндекс.Метрика
clicky.gif

Sitemap

Добавление файл sitemap.xml в вашу корневую папку позволит поисковым машинам легче индексировать сайт. Сервис XML-Sitemaps поможет вам автоматически создать файл sitemap.xml для вас.
Если вы используете WordPress, установите Google XML Sitemaps plug-in, который автоматически обновляет sitemap, когда вы добавляете новый пост. Также добавьте ваш сайт и sitemap в Google Webmaster Tools. Это подскажет Google, что у вас есть sitemap и там вы можете увидеть полезную статистику по сайту по тому как и когда ваш сайт был проиндексирован последний раз.

Обработка ошибок

Если пользователь запрашивает несуществующую страницу, то ему показывается страница 404. Создайте страницу 404, которая отправит пользователя на главную страницу или предложит другие страницы, которые могут быть интересны.
Проверьте ваши формы на ввод некорректных данных. Попробуйте вводить в формы некорректную информацию. Убедитесь, что в случае ошибки пользователю предоставляется достаточная информация, которая поможет исправить ошибку.

Оптимизация

Оптимизируйте свой сайт. Самые простые советы - это уменьшите количество HTTP-запросов, используйте CSS-Спрайты, оптимизируйте картинки, сожмите JavaScript и CSS файлы.
См. также:

Резервное копирование

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

Стили для печати

Создайте стили для печати страниц вашего сайта. Некоторые элементы при печати можно спрятать, добавить другие стили, учитывающие особенности печати.
Добавьте в тег <head> следующий текст, чтобы определить стили печати:
<link rel="stylesheet" type="text/css" href="print.css" media="print" />
См. также более полный список проверок

понедельник, 21 февраля 2011 г.

Новое в Wiki4tech

Последнее время в Wiki4tech появились новые статьи.

Вот полный список:

четверг, 17 февраля 2011 г.

Wiki4tech

Создал сайт http://wiki4tech.ru. По сути это аналог википедии, но
  1. Для веб-программистов
  2. Отвечает на вопрос "Как это делать?", а не на вопрос "Что это такое?"

Вот что я написал в аннотации:

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

На сайте есть визуальный редактор, который не требует знания вики-разметки.

пятница, 11 февраля 2011 г.

Профессия программиста – это удача или ловушка?

Публикую интересную статью, найденную в ЖЖ профессора из УдГУ.

Авторы:   Непейвода Н. Н., УдГУ, профессор, Рыков В. В., МФТИ, доцент.

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

воскресенье, 30 января 2011 г.

Сайт гимназии №24

Сделал бесплатно сайт для гимназии, где учится ребенок.
Доработал готовый шаблон, использовал бесплатный drupal в качестве CMS.
Доменное имя - 99р в год, хостинг $1.7 в месяц.
На хостинге работают nginx и eAccelerator, что положительно сказывается на загрузке страниц, хотя это и не всегда помогает.

пятница, 28 января 2011 г.

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

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

Каждому стартаперу необходимо понять: стартапы не работают над гениальной идеей, они страстно борются за большое количество клиентов.
  • Создай компанию в первую очередь, а не создай идею.
    • Когда ты начнешь работать над классной идеей, ты поймешь через некоторое время, что она никому нафиг не нужна. Это значит, что вы должны создавать продукт и возможно, что кто-то захочет его купить. Многие второстепенные проекты или внутренние инструменты выросли большие самостоятельные компании. Blogger вышел из Pyra Labs как внутренний инструмент. Github был также внутренним инструментом стартапа. Yammer вышел из Geni. GroupOn получился из thePoint.
    • Особенность всех примеров в том, что в действительности были созданы компании, а не идеи. Более важно что-то делать, чем не делать и ожидать, когда придет озарение.
  • Если это очевидно, значит кто-то это уже сделал.
    • Недостаток хороших идей бывает только тогда, когда сидишь и ничего не делаешь
  • Сконцентрируйся на великом рынке, а не на великой идее
    • Исследовав рынок вы обнаружите, что хорошая идея на так важна как широкий рынок. Огромный рынок всегда таит в себе массу потенциала. Даже если идея ужасна, после продвижения вы сможете познать рынок и потом сделать что-то реально классное в следующий раз. Don Valentine (инвестор Cisco, Apple, Atari, Oracle и EA) всегда говорил: рынок - это единственное, что для имеет значение.
    • Josh Koppelman называет предпринимателей самонаводящимися ракетами, поскольку они преследуют рынок, даже если сбились с начального курса.
  •  Все за работой
    • Даже если у вас великолепная идея, знайте, что еще 5 человек одновременно делают то же самое. Вот почему так много похожих компаний стартуют одновременно. Например, Instagr.am, PicPlz, Mopho.to и PicBounce в области фотошаринга.
В следующий раз, если вы остановили себя, чтобы задуматься над созданием новой идеи, то не останавливайтесь. Идите и реализовывайте пусть не самую лучшую идею, но на лучшем рынке, или даже не на самом лучшем рынке. Но пусть это будет продукт, которых во хотите сами создать. Работайте, продвигайте ее и несомненно вы обнаружите со временем, что ваша идея превратилась в очень хорошую компанию.

Источник

четверг, 6 января 2011 г.

Как сделать большой взрыв?

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