Tag Archives: психологія

Розробка керована питаннями

Чому розробка ПЗ це так важко? Тому що воно займає тисячі рядків коду і їх всіх важко набрати? Та ні, якраз навпаки, в дні коли в мене виходить написати сотні рядків коду я втомлююсь менше ніж коли пишу один, чи взагалі не пишу.

Важко звісно не набирати рядки, а ВИРІШИТИ які рядки потрібно набрати. В дні коли я пишу їх багато – це рішення просте, в дні коли мало – рішення часом взагалі неможливо побачити. І втомлюється людина від прийняття рішень, а також особливо від рішень які ще не прийняті. Навіть існує ефект Зейгарнік, який проявляється в тому, що люди схильні швидко забувати вирішені питання і закінчені справи, а незакінчені будуть триматись в мозку і займати його ресурси.

Качечка теж втомилась :)

Качечка теж втомилась :)

Тому, якщо робота застопорилась, можна спробувати застосувати модифікацію методу каченяти, яку я назвав QDD – розробка керована питаннями. Для цього потрібно написати питання над рішенням якого ви зараз думаєте в якийсь текстовий файл чи на листок паперу. І уявляти при цьому що це чат зі всезнаючим експертом, який обов’язково допоможе. Бо так і є, це час з собою майбутнім. Явне формулювання питання дозволяє сфокусувати думки, а часто зрозуміти що це не те питання яке потребує вирішення.

Якщо ще додавати до кожного запису час, і коротко записувати відповіді на запитання, можна отримати журнал який показує на що йде час розробки, і чому код написаний саме так а не інакше (бо виникали такі питання і знаходились такі відповіді). Якщо код буде написано неправильно – можна буде знайти момент в який неправильне рішення до нього привело. Якщо буде поставлена наступна задача – легше буде оцінити скільки питань і якої складності треба буде вирішити для виконання задачі. Бо розбиття роботи на пункти плану і оцінка їх по аналогії з вже виконаними пунктами – єдині відомі способи оцінити необхідний для роботи час. Для оцінки по аналогії покладаються на пам’ять, хоча журнал був би надійнішим.

Такий метод можна застосувати до вирішення інших проблем, що не стосуються коду. Наприклад до вгризання в якусь складну ідею, чи до пошуку рішення якоїсь життєвої проблеми. Багато великих питань можна розбити на менші питання, головне попрактикуватись.

Ну й наостанок дам приклад того про що я пишу – лог питань що виникають при розробці гри в “п’ятнадцять”: bunyk.github.com/blob/master/fifteen/worklog.txt. Сама гра.


Filed under: Кодерство, Психософія Tagged: психологія, розробка

Ітеративно і інкрементно

Я хотів написати великий пост про те як в п’ятницю пробив стіну, об яку бився головою від понеділка і це принесло таке полегшення що навіть той факт що в суботу в мене хтось в маршрутці свиснув гаманця з готівкою, але чомусь не виходить зібратись з думками. Може я все надто ускладнюю?

Тому тут просто процитую те що написано в підвалі блогу Едді Османі:

Спочатку зроби це, потім зроби це правильно, а після цього зроби це краще. Це одна з основ яку я завжи тримаю в голові розробляючи що завгодно.

Якщо ви розробник який хочу вивчити щось нове, не залежно від рівня навиків, пам’ятайте, що спробувати зробити хоч щось так само важливо як і прочитати як це робиться.

Створіть новий gist чи fiddle, відкрийте консоль і експериментуйте. Це, бляха, весело!

І справді, я тут подумав, що програмування перестає приносити задоволення, коли ти власне перестаєш втілювати ідеї і фіксиш баги, фіксиш баги, сидиш на нарадах, фіксиш баги.

Наступний “мінус” пов’язаний з тим, що розробка грандіозних ідей – це задоволення, а пошук паршивих маленьких “жучків” – це всього лише робота. В кожній творчій справі бувають жахливі періоди одноманітної й клопіткої праці, і програмування не є винятком.

Хоча пошук багів звісно це теж трішки творчий процес, гідний Шерлока Холмса, але варто придумати щось аби зробити його ще більш творчим. Прописувати в коді контракти по ходу пошуку?


Filed under: Кодерство, Нещоденник Tagged: психологія, робота, розробка

To be the best…

To be the best, we gotta pass the test
We gotta make it all the way
To the top of the mountain!

Tenacious D

Пройшло вже більше 10-ти років відколи я вперше побачив IDE Turbo Pascal 7.1. І впевнений що Microsoft житиме і працюватиме щонайменше поки Андерс Гелйсберг в них працюватиме.

Але програмувати мені чомусь досі важко як і тоді. І то, тоді було легше, тому що я не займався цим по 50 годин на тиждень і енергії було більше. Хоча, 10 років – немалий термін, і Пітер Норвіг пише що за 10 років вже можна було б навчитись. Розмірковувати чому в університеті мене нічого не навчили я тут не буду. Досить того що зараз я рухаюсь. Наприклад здається вже осягнув поняття співпрограми (coroutine). А рік тому мав шок – як так, мене в університеті вчили лише про підпрограми та функції, а тут на тобі – підпрограма є лише частковим випадком співпрограми. :)

Зараз інша проблема. На роботі є кінцевий термін виконання проекту. Якось я задав питання “А зробити дешево чи правильно?” і задача на 2 години стала задачею на 3 дні. Вчора знову задав таке дурне запитання. Сьогодні накодив дешево – на нехай мене на рев’ю виховають. Все одно ще всі баги не пофікшені.

Почитав StackOverflow. Щоб стати кращим Python-програмістом треба прочитати Real World Haskell. Цікава ідея, так і зроблю якщо звісно інші ідеї не прийдуть в голову.

І випадково натрапив на взагалі іскрометну історію:

Він був російським програмістом який працював переважно з ассемблером. Він фанатично ставився до економії байтів тому що раніше працював з системами з дуже обмеженою пам’яттю. “Вона була для супутників. Лишк кілька байтів, тому ми перевикористовували кожен байт з кількома цілями.” (побітові маніпуляції, використання байтів інструкцій для їх числових значень). Коли я спробував з’ясувати які саме супутники, я отримав у відповідь лише “Орбітальні супутники. Для запуску на орбіту.”

Він мав дві інші примхи: випукле дзеркало вмонтоване над монітором “Щоб знати хто підглядає”, та нерегулярне випадкове вставання з крісла для того щоб швидко зробити десять віджимань. Він пояснював останнє як “Компілятор знайшов помилку в коді. Це покарання.”

Опукле дзеркало – цікавий приклад совка, але от покарання – можливо має певний з точки зору фізіології сенс.


Filed under: Кодерство, Психософія Tagged: Лайфхаки, люди, психологія, цілі

Парадокс роботи програміста

Полягає в тому що вона таки виконується. І код, хоча містить сотні помилок, все таки працює.

Захід є Захід, а Схід є Схід, і їм не зійтися вдвох,
Допоки Землю і Небеса на Суд не покличе Бог;
Та Сходу і Заходу вже нема, границь нема поготів,
Як сильні стають лицем у лице, хоч вони із різних світів!

Р. Кіплінг.

Основна відома мені різниця між сходом і заходом – захід більше орієнтований на ціль, а схід – на процес. І того я не можу зрозуміти як в китайців з японцями і південнокорейцями взагалі щось виходить з роботами, Ruby і айфонами. Філософічка щось там казала про те що китайський воєначальник застосовує принцип недіяння коли починає атаку на ворога, хоча тоді і тепер я такий дзен не можу збагнути.

Далі. На моєму рідному факультеті дехто таки зібрався, і таки видали новий номер газети “Кубик”. (Не соромтесь, візьміть й собі копію. ~9 Мб).

І порівняно з попередніми номерами цей – огого! Він не вийшов в паперовій версії, але думаю це й на краще. Там 40 сторінок дрібним шрифтом! Мій факультет розорився б, якби надрукував це хоча б в 100 екземплярів. А pdf крім того ще й зберігає true color і поліграфічну якість. Я взагалі мрію про те, що на офіційному сайті факультету з’явився RSS. Але скоріше вже збудують метро на Теремки.

Так от, окрім статей про те як на факультеті все погано, і як ніхто не хоче писати в газету, мучать дівчат (головного редактора), і ніхто не хоче вчитись (ну окрім одного наївного першокурсника, який теж свої враження там описав), є багато цікавих речей. І думаю цікавих не тільки нашим студентам.

Наприклад на сторінці 11 є коротенька стаття про те як керувати програмістами. Якої звісно мало щоб навчитись це робити, але уявлення про предмет вона дає.

Коротко: програмістам треба платити достатньо аби вони не думали про гроші. Як відомо гроші не мотивують. Зате їх нестача і стереотип про те що програмістам багато платять мотивує знайти кращу роботу.

Тоді чого, якщо не грошей хоче програміст? Він, як творча людина хоче творити, отримувати від цього задоволення, саморозвиватись. Йому сам процес подобається. Програміст – зі сходу. Але це трохи не те що потрібно проекту.

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

І потім згадується методологія. Це така штука яка допомагає залишати програміста задоволеним, і окрім того добиватись того щоб він таки завершував те що повинен зробити.

І це, знаєте, мотивує розібратись з методологіями, і управлінням програмістами. Бо з’являється підозра що мене обманом заставляють робити те що я не хочу :D .

А якщо ввести назву методології яку використовують в нас, у пошуку картинок, то серед знайдених обов’язково зустрінете подібну на цю:
Mêlée ASM-MHRC

От так ми й працюємо. Ті двоє зліва – продакт менеджер і скрам мастер.. :)


Filed under: Кодерство Tagged: кубик, психологія, робота, розробка