Все это так не потому, что я такой умный. Это все из-за того, что я долго не сдаюсь при решении задачи.
Альберт Эйнштейн
Предположим существует профессия творец. Чем занимается творец? Творец создаёт вещи! Ужин. Скворечник. Штаны. Торговые центры. Линзы для фото камер. Реактивные двигатели. Гидроэлектростанции. Фортепиано. Марсоходы.
Быть творцом это тяжелая работа. Это настолько обширная область что если даже ты сделал сотни цветочных горшков, это ничем не поможет в создании каталитического нейтрализатора для грузовика Ford 1995 года.
Теперь подумай о профессии называемой “программист”. Что делает программист? Программист программирует вещи! Автономные транспортные средства. Лётные тренажеры. Системы управления двигателем. Прошивки для твёрдых накопителей. Компиляторы. Видео игры. Планировщики авиарейсов. Цифровые фотоаппараты.
Если сфокусировать внимание в одном направлении то можно заметить его фрактальную структуру. Видео игры? Это охватывает всё от шахмат до 3D феерических миров, от текстовых квестов до ретро платформеров… У приставочных ретро игр широкий выбор стилей и техник исполнения. Даже если выбрать одну узко специализированную технику, то небольшое изменение в дизайне может изменить в корне задачу от простой от мозго-разрывающей.
В итоге получается что чаще всего разработчики программного обеспечения работают не имея полного и непоколебимого понятия всей задачи. При создании мы постоянно заполняем пробелы в теории. Всё что мы строим является в значительной степени исследовательским проектом.
Каким же образом мы начинаем разбираться в чём-то в чем у нас нет достаточно опыта? Проводим эксперименты. Много мелких одноразовых кусков кода и экспериментов с интерфейсами которые дадут ответы и упорядочат мысли.
К примеру написание декодера PNG это набор множества более мелких задач с которыми можно возиться отдельно от основного кода. Любое значимое приложение содержит элементы взаймодействия с пользователями для которых нужны прототипы, нужно изучить непонятные и противоречивые дизайнерские решения, много логических подводных камней и ранее не использованных API функций и сотни других вещей. Может быть пять сотен. И до тех пор пока ты эти эксперименты не сделаешь, у тебя не будет ясного и твёрдого понимания того что ты делаешь.
Автор: bumbu