вторник, 18 мая 2021 г.

Как программировать быстрее?

Для более быстрого мышления надо изучить больше шаблонов и взаимоотношений.

Что тебе нужно - это поток.

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

Радоваться каждому достижению и продолжать движение.

Понять, чего ты хочешь и что делаешь, включая измерения и оптимизацию.

Поток: без сопротивления от инструментов, процесса, окружения, знаний. Искать постоянный вызов, но не сильно высокий.

Научиться учиться и постоянно учиться.

Обучать других

Показывать и исследовать.

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

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

Сфокусируйся на качестве и скорость последует.

Размышления над своими действиями это ключ к самосовершенствованию.

Постоянно улучшать процесс принятия решения, учись на ошибках без самокопания.

Исключить слепые зоны из твоего понимания всего приложения и окружения.

Найди и исключи утечки времени.

Как заканчивать начатое?

1. Выбирай что хочешь начать
2. Оценивай ресурсы, которые будут нужны
3. Бюджетируй твоё время и энергию
4. Откажись от перфекционизма
5. Посвяти себя проекту
6. Сохраняй видение цели
7. Следуй пути наибольшего удовольствия
8. Следи за своим прогрессом
9. Радуйся тому, чего достиг
10. Не заствляй себя, если не получается слишком долго

Критическое мышление

Остановись и подумай о причинах и последствиях

Думай назад, чтобы определить причину (5 почему)

Думай о последствиях (5 шагов - что за этим)

Смотри в корень (что за реальная проблема)
Какие проблемы возникнут?

Разделяй и властвуй
Путь в тысячу ли начинается с одного шага

Возьми бльшую проблему и спроси:
1. Из чего состоит большая проблема?
2. Какие маленькие проблемы создаёт эта проблема?

Определи проблему:
Где мы начнём?
Что мы будем делать?

Описание проблемы определяет успех проекта.

Описывает цели, ограничивает границы, определяет критерий успеха
Определяет ограничения, ясно выразить предположения
Определить владельцев решения
Определяет график

Спроси вопрос за вопросом

Определи, почему нужно решение?
Спроси "почему" опять

*Понимая реальный вопрос*

Спрашивай фокусирующие вопросы
Что за реальный вопрос?
Цели
График

Кто владелец?
Поддержка, соратники?
Противники?

Как измерить успех?
Количественно и качественно

Что в рамках проекта?
Что вне рамок проекта?

Каковы ограничения?

Какова коробка вокруг проблемы?

Исследуй прошлые попытки
Была ли проблема в прошлом?
Каковы различия сейчас и тогда?
Каковы испытания в прошлый раз, которые были решены?

Какие предположения ограничивают мышление?

Используй новые линзы чтобы мыслить критически
* Точка зрения
   - Перспективы
   - Стратегическая проблемы
* Контекст
   - Представь проблему новым способом
* Реальность
   - Что если? (хватает денег, людей и времени)

Как мне изменить мою точку зрения?

Как найти причину в корне?

Произрастает эта проблема из другой?

Какова основная причина проблемы?

Рассмотри последствия

Расположи проблему в хронологическом порядке

Документируй мысли

Каковы последствия наших действий?

Принцип Парето (80/20)
Сосредоточься на важном

Стратегическое мышление:
- Высокоуровневые проблемы
- Что я преследую?
- Оцени цель
- Используй 80/20 принцип
- Тестируй свои мысли
- Будут ли результаты поддерживать рекомендацию?

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

Определи проблему
Создай рекомендацию
Анализ условий
Найди решение

Найди взаймодействия и шаблоны

Смотри, на связи с несвязанными проблемами

1. Учи других
2. Создавай возможности для их практики
3. Учи других как использовать критическое мышление

Как сделать их усилия подотчётными?

Проблемы:
1. Слишком быстро переходить к поиску ответов
  - Определи проблему
  - Пойми вопрос за вопросом
  - Спрашивай наводящие вопросы
  - Определи предыдущие попытки
  - Смотри через разные линзы
  - Пойми причину
2. Не определить область проблемы
  - Ограничь бизнес
  - 5 почему
3. Сосредотачиваться на неважном
  - 80/20
  - Будет ли воздействие решения
4. Использовать аналитические результаты как значимые
  - Что они означают?
  - Группировка/похожесть
5. Не думать о последствиях
  - 7 что из этого

Метод:
1. Определи проблему
2. Раздели проблему на меньшие
3. Определи проблему на меньшие
  - Спрашивай направляющие вопросы
  - Исследуй предыдущие попытки
  - Смотри через новые линзы
  - Понимай причины
4. Документируй
5. Смотри на новые решения
  - Расширь дело
  - 5 почему
  - 7 "что из этого"
6. Фокусируй на важном
  - 80/20
  - Какой наибольший воздействие?
7. Примени анализ
 - Стратегическое мышление
 - Свзяи, группы
 

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

Работа фрилансером против работы в корпорации для программиста

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


Начну с работы в корпорации, поскольку 15 лет работал в них постоянно. 

Плюсы очевидные - ты постоянно занят, и кто-то решает все административные вопросы. 

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

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


Если повезёт с начальством (что случается редко - 1 из 7 случаев), то они могут дать тебе картбланш и не будут давить с политической стороны (а бюрократии в корпорации много, и политические игры - самое любимое занятие).

И тогда расцветёшь на своём поле деятельности, поскольку никто давить не будет. 

Да будут сроки "надо вчера", но используя динамические языки (ruby+javascript), можно очень быстро делать им приложения и в остальное время изучать технологии разработки и бизнес  модель корпорации.

C# тоже хорошо подходит, поскольку он может быть применён как на сервере, так и на клиенте. А с помощью Xamarin - даже на мобилках.

Часто корпорации охватывают большой спектр задач.

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

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


И это хорошо, если вы готовы мириться с минусами:

* Малая по рынку зарплата (за стабильность приходится платить меньшей з.п.)

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

* Политические игры могут привести к расформированию или переформированию отдела (на моём опыте - 5 раз переводили из фирмы в фирму, пока совсем не разделили обязанности). 

И каждый раз привыкать к новому начальству и понимать как с ним работать.


===

Про фриланс могу сказать прямо противоположное:

Нестабильный, но постоянно новые задачи и выше доход.

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

Если просрочишь предоставление отчётности или выплаты - прилетит штраф. Радует, что ИП можно проще с документацией. Для ТОО придётся заводить бухгалтера.

Нужно постоянно балансировать между работой и поиском клиентов. 

Реферальная структура "сарафанное радио" - самое то. 

Балансировать разных клиентов и давать себе отдых, иначе сгоришь. 

Как то выделять клиентов, которые важнее и научиться отказывать или смещать клиентов, которые не так нужны.

Стараться делать всё в срок, но постоянно получать правки к работе.

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

Сотрудники могут быть самой "занозой в заднице".

Один раз на собеседование пришёл парень с братом. Это было очень забавно.

Контролировать сотрудников тоже может быть сложно. А уж с мотивацией - там надо быть как нянкой. Встречаются нежные и чувствительные сотрудники.

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

Так что фриланс имеет плюсы: выбираешь разные проекты, что тебе по душе и клиентов

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


Если не нанимать сотрудников (а я так отработал 8 лет), то ты упираешься в свой стеклянный потолок (2-3 клиента), и финансы тоже будут ограничены.


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

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

Ты через несколько лет становишься наёмным сотрудником (даже на удалёнке), хоть и оплачиваешься выше и можешь диктовать свои цены (в пределах разумного - потерять клиента тоже легко)


===

Поэтому сравнивая корпорацию с фрилансом могу определить общие вещи: придётся много общаться с людьми и участвовать в их играх.

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

четверг, 24 октября 2019 г.

Борьба с собой не эффективна

Целые два года воевал с Юнити. Как результат низкая производительность, и постоянный поиск мотивации.
Их постоянные изменения и надстройки все ломали по мере внедрения.
Часто отваливались старые компоненты, потому что авторам уже не интересно их поддерживать.

Для программиста игр про вечерам их изменения слишком быстрые.
Можно было остаться и на старой версии, но она 4ка была очень ограничена и нормального интерфейса не было.

Потом появились двумерные инструменты, а сейчас переход на дата ориентированный подход.
Остановился на 2018.2, поскольку 3я все ломала.

Искал выход в виду defold, app game kit, Godot.
И пока смотрю в сторону последнего.
Радость программирования вернулась.

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

Слишком много энергии уходит на борьбу.

Самое сложное оказалось то, что привычки не вырабатываются легко у меня.
Один раз 228 дней вел дневник, и привычка не закрепилась. Хотя занимался в одно время и месте.

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

четверг, 17 октября 2019 г.

Множественные выборы зло

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

И хорошо если их два - монетка решить этот вопрос может. А вот когда их больше, то это перегружает разум.

Читал историю мороженщика, который продавал 43 видов мороженого. И люди загружались когда просили перечислить все виды. И покупали простое.

Он нашел решение - создал меню на каждый день. И выбрал 5 возможных вариантов

Люди были счастливы.

Так вот тут произошло то же самое. Выбор всегда сложен.

Просто надо взять один и откинуть остальные. Но сколько же боли в этом выборе.

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

Но при этом каждый процесс выбора все ещё мучительный.

Главное ну оглядываться назад и идти уже с тем, что взял.

среда, 16 октября 2019 г.

Устаревшая документация и поиски истины

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

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

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

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

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

Получается, пишешь как в тумане и с ограничением времени.
Нужно что-то сделать уже сегодня.

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

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