Что делать с тем, что я постоянно переписываю почти весь код?
Вот уже почти пол года прошло с того момента как я всерьёз занялся изучением веб программирования и погрузился в разработку некоего проекта - браузерной игры. До этого опыт программирования ограничивался кривой отсталой вёрсткой пары простых сайтиков и одним семестром изучения паскаля в вузе (в общем то тут я был чистым отличником), а ну ещё в восьмом классе учили perl, но про него я ровным счётом ничего не помню. С математикой у меня всегда всё было прекрасно. Разве что некоторые разделы физики у меня иногда вызывали рвотные порывы. Так вот. Проект по себе, как игра ничего сложного не представлял. Большая часть работы - создание грамотного отзывчивого дизайна и глубокая проработка социальной составляющей проекта (различные турниры, рейтинги, аукционы, чаты и много других точек соприкосновения людей в игре). И вроде бы всё в начале шло отлично. Я целыми днями сидел над своим новым проектом и погрузился в разработку на все 100%. По сути грамотных знаний у меня не было ни в одной области веб программирования (html, css, js, php и пр.). Для старта выбрал фреймворк yii2, так как знал человека который пользовался им, да и отзывы в интернете были вполне убедительными + это свежий фреймворк, а меня очень тянет на новые технологии. И вот я себе поставил цель. Сделать проект за 2-3 месяца. Я думал, что вот это тот срок, который мне уж точно позволит доучить html и css (скорее css, в html учить то нечего) и хотя бы поверхностно (в достаточной мере для моих нужд) js и php (а точнее yii2) и попутно аккуратно сделать мой проект. Но время шло. Я уже мог сказать, что я на терпимом уровне освоил все нужные мне технологии и уже начинал потихоньку ускоряться в разработке самого проекта. Я очень люблю работать над интерфейсами и даже считаю, что у меня это достаточно хорошо получается. Но на этот реально хороший результат я трачу колоссальное количество времени. Я могу пол дня потратить на обдумывание 30 вариантов дизайна одной кнопки, прийти домой, наконец-то выбрать окончательный вариант и только к вечеру наконец реализовать эту кнопку (я конечно утрирую, всё конечно ни на столько печально, но всё же). А так же я постоянно недоволен своим кодом. Точнее сначала я доволен, продолжаю работу, но потом, через неделю другую я начинаю думать об этом участке кода и придумываю более оптимальное решение, а продолжать дальше у меня руки опускаются, пока я не поправлю этот код. И вот прошло уже далеко не 2-3 месяца, а почти пол года, а проект завершен в лучшем случае на 70%. Да я двигаюсь дальше, но это происходит крайне медленно, хотя я сижу над ним с утра до ночи. И да, проект реально улучшается и с точки зрения дизайна и с точки зрения оптимизации. Но за это время я переписал каждую часть проекта по меньше мере 5-6 раз с чистого листа. И я понятия не имею сколько ещё мне понадобится времени на его завершение. Хотя результаты меня всё же радуют и я вижу в проекте светлое будущее. Сейчас я поступил в ВУЗ второй раз, на сей раз это МГУ (факультет ВМК) и боюсь времени у меня на мой проект будет гораздо меньше.
Что Вы можете мне посоветовать с точки зрения организации своей работы, разработки проектов и пр.? Что я делаю не так? Или же это нормально?
Ничего Вы не сделаете, если уже задали этот вопрос. Неужели в наших силах сделать из Вас талантливого художника, который рисовать кнопки будет за секунду. Так и будите сидеть и делать все целому году, что другие за неделю делают. И все из-за того что Вы не хотите научится учится.
У меня тоже были такие проблемы и я научился без беготни по рабочим местам и прочих коллективов. Чтобы рассказать что для этого нужно надо написать книгу, а значит Вы сами понимаете что ответа от меня не получите:)
copal: я не думаю, что всем (даже основным) аспектам веб программирования (html, css, js, jquery, angular, php, nodejs, веб сокеты - всё что мне пришлось постичь ради данного проекта) можно научиться за неделю. Вы явно сильно утрируете. У меня неделя только на отрисовку более сотни иконок ушла. И это норма. Я признаю, что работа могла идти быстрее, но явно не неделю и даже не месяц, ну и соответственно нужно было бы идти на жертвы.
LordGuard: конечно невозможно! Даже зп полгода и то сомнительно, подумайте сами, если Вам сейчас дать проект построенный на работе с api, соцсетями и авторизацией. Вы его за неделю сделаете? Нет, потому что Ваш проект наверняка с реальными проектами ничего общего не имеет.
И что это я утрирую, если Вы один день иконку делаете? Я даже ничего не сказал нового, а лишь повторил сказанное Вами, но Вам это не понравилось...
За пол года Вы должны были понять что разработка приложений возможна только через написание тестов. Что дизайн нужно начинать с прототипов и только после проверки работы и удобства делать его красивым по заранее продуманной палитре и стиле. Тоже самое и с кодом.
Вы должны закончить приложение на листочке не прикоснувшись к ноуту вообще.
copal: Думаю Вы меня всё же недооцениваете.
Почему одна иконка в день? Я сказал больше сотни за неделю, а это больше 14 иконок в день + иконки не самые тривиальные. Некоторые и логотип неделю рисуют. Один. Вы начинаете судить о результатах моей работы не видя её собственными глазами, а ведь разговор изначально был именно о процессе, а не о результате. Опять же не понимаю с чего вы взяли, что я не делал прототипов. По поводу предварительной организации кода. А как собственно я мог его организовать изначально не имея достаточных знаний в данной сфере? Частично именно из за этого я и переписывал код. Это процесс обучения. В целом я представляю что я делаю и куда я двигаюсь. И у меня есть довольно слаженный план, который затягивается из за рефакторинга кода. И вопрос был поднят не из за того, что я вообще ничего не осознаю и делаю "на обум". Просто был порыв остановиться и ещё раз всё на всякий случай обдумать и послушать мнения других людей.
copal: я не просил меня жалеть. Мне просто нужно было выслушать советы по поводу организации разработки проектов. Может быть есть какие-то принципиальные моменты, которые я не знаю, а может таковых моментов и нет. А так же я не просил мне рассказывать, что я ничего не смогу, основываясь на паре десятках строк написанных мною в моём вопросе. Я задал конкретную цель - методы организации рабочего процесса.
"ну значит я дебил, а Вы не писали - Я могу пол дня потратить на обдумывание 30 вариантов дизайна одной кнопки, прийти домой, наконец-то выбрать окончательный вариант и только к вечеру наконец реализовать эту кнопку." А ещё я в скобочках написал, что я сильно утрирую, а Вы видимо не заметили.
У вас просто стоит цель сделать качественный и хороший код, а не сделать быстренько бизнес-проект и получить денег.
С точки зрения роста как специалиста - это хорошо. С точки зрения работника за деньги - перфекционизм нужен в меру. У кода всегда есть цена. У рефакторинга есть цена.
Все что в инете пишут про красивый код - это исключительно для того, чтобы его потом было проще переписывать и поддерживать. Потому что многие часто переписывают и правят.
С вами все так, просто приоритеты расставлены пока что таким образом, что вы переписываете.
Имхо даже не приоритеты, а необходимость из-за того что идет интенсивный рост навыков. И это хорошо и похвально. Вдумчивый рефакторинг своего кода - верный путь к дзен.
Осилил многобукв ))
Это абсолютно нормально, особенно в проекте, где сроки не жмут, можно довести все до идеала
Учитывая, что проект учебный, это даже полезно, приучит Вас писать производительный и в то же время читабельный код.
А когда будете разрабатывать коммерческий проект, это само уйдет, так как у Вас просто не будет времени на переделки, начнет работать принцип "работает - не трогай"
А я даже рад, что есть интересная задача и время на то, чтобы переписать фрагменты, которые не нравятся.
Вообще вопрос, как мне кажется, озвучивает проблему расстановки приоритетов либо, возможно, скрытую прокрастинацию.
С одной стороны, возможно автор всей душой хочет сделать код идеальным, что для учебного проекта просто замечательно. S.O.L.I.D., KISS, DRY, шаблоны, вёрстка, игровая логика, игровой баланс — много на чём можно зацепиться.
Второе предположение: автор зациклился на том, что ему больше всего интересно в процессе веб-разработки и тем самым изолировался от других аспектов. Если конечная цель - коммерческая, то могу предложить поискать союзников, знакомых с теми аспектами производства, которые автору не известны. Если цель - устроиться на работу, то можно уже остановить разработку и перейти к собеседованиям.
Не хотел загромождать тостер картинками, поэтому опубликовал полный вариант ответа у меня в блоге: copist.ru/blog/2016/08/19/mvp
Павел, спасибо большое за развёрнуты ответ. Думаю мне всё же подходит первый вариант. Так как со всеми процессами как-такового программирования в данном проекте я разобрался. А в дальнейшем как я понимаю Вы в основном заостряете внимание на маркетинге и продвижение продукта. По данному аспекту у меня нет никаких опасений. До того как я выбрал для себя программирование - основной специализацией я увлекался как раз таки маркетингом. И довольно неплохо преуспел в этом, раскрутив несколько крупных проектов. Не буду вдаваться в подробности, но в результате я уже лично знаком с несколькими десятками популярных (более 500к подписчиков) блогеров и прочих youtube деятелей. Не сомневаюсь, что при успешном завершение разработки самого продукта - с продвижением проблем никаких не возникнет. Вот уже даже яндекс мой сайт вывел на 5-ю позицию в поиске по нужному мне запросу (около 30к запросов в месяц, не так уж и много, но конкуренция там есть). Я удивился, так как ровным счётом ничего для этого не делал. Но 1-4 позиции - это уже мои прямые конкуренты. Через них прорваться будет посложнее. Вот как-то так.
LordGuard: Я всё же хотел бы отметить, что MVP - это важно для процесса разработки софта. Нужно не идеально вылизывать отдельный слой, а делать по чуть-чуть в нескольких аспектах, регулярно выпускать в продакшн, возможно рубить капусту, наслаждаться положительными (да и отрицательными тоже) отзывами. Нужно освоить принцип цикличности производства программного продукта. Как и любого другого производства.
Перфекционизм нужно в себе подавлять, потому что он в какой-то момент реально начинает мешать, пределу совершенства нет, так можно вечно рефлексировать, мол эта часть не достаточно идеально сделана, поэтому нужно переписать все заново. Лучше отправить в продакшн сырой продукт, чем вообще ничего - это главное. Сначала релиз, а затем уже рефакторинг. Может ваша идея никому не нужна, хоть не так обидно будет в итоге и время сэкономлено. Своего внутреннего перфекциониста нужно в этом убедить, например я использую довод, что даже всякие крутые пацаны из эпл иногда выпускают всякое гавно с багами и ничего живут пока.
По поводу организации разработки, нужно разделить все на мелкие задачи и для каждой выделить время и свой дедлайн.
Вы только начали. Ваш уровень растёт и естественно то что было на пределе ваших возможностей через месяц или более кажется детской задачкой. И вы ведите после этого ещё 1000 способов улучшить ваш код. Это особенности професионального роста. Потом научитесь делать так чтоб не переписывать. Если конечно поставите перед собой цель выпустить продукт, а не написать идеальный код.
Код можно написать хорошо, но не идеально. Идеального кода почти не бывает.