Зачем использовать готовые решения?
=====================================

 Почему многие на данный момент предпочитают использовать готовые решения?  

  

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

1. Мой текущий класс выполняет все необходимое.  

2. Я знаю каждую деталь своего класса и в любой момент могу дополнить и изменить его.  

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

4. И пожалуй главное, открыл много чего нового для себя и чувствую рост в своей специальности.   

  

Используя готовое решение, не получить следующие плюсы и вот почему:  

1. Гораздо больше времени уйдет полностью разобрать готовое решения для его последующего улучшения.  

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

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

  

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

  

И заранее хотелось бы ответить на следующие пункты:  

1. Экономия времени. Достаточно написать и после интегрировать в свои проекты...  

2. Правильное решение. Соглашусь, но если практиковать свои навыки, разве у вас не получится также? 

> Когда начинал, везде предлагали брать готовое решение, а не изобретать свое чудо...

Есть две полярных и при этом правильных точки зрения.  

  

Нужно писать своё, чтобы учиться (как вы описываете в вопросе). И чтобы понимать *как* работают готовые решения и *почему* именно так.  

  

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

  

> 1. Экономия времени. Достаточно написать и после интегрировать в свои проекты...

"Достаточно написать" обычно для велосипедов измеряется годами, с учётом всё новых и новых требований и найденных багов.  

  

> 2. Правильное решение. Соглашусь, но если практиковать свои навыки, разве у вас не получится также?

Опять же - речь про годы практики. 

 Как разработчик, вы должны быстро и качественно выполнить задачу, которую вам дал бизнес. Это достигается за счёт переиспользования готового кода 

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

  

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

  

В третьих - готовое распространенное решение проще поддерживать, завтра вы уйдете / перестанете поддерживать свое "творение", и другой разработчик вынужден будет разбираться в вашем произведении, матюкаясь что в одном месте "все прибито гвоздями", в другом "собрано из г**на и палок", в третьем "эти 30 строк пишутся одной тренарной операцией, кто это вообще писал???"... И вам потом икать, оно вам надо?  

  

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

  

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

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

  

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

Поддерживать один-два в актуальном состоянии - тоже.  

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

  

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

 Во первых самое важное в программировании - писать аккуратный и понятный код. Это можно достигнуть только если архитектура движка или фреймворка способствует этому. И основной и самый главный критерий: минимум усилий = максимум возможностей = максимум результатов.   

  

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

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

  

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

  

Поэтому если есть возможность нужно самому разрабатывать движок с основным (MUST HAVE) функционалом и строго по паттерну.   

  

Я сам совершенствую свой фреймворк PWAA (proper web application architecture) , для важно универсальность, полная свобода действий, стандартизированная структура приложений и самое главное высокая производительность вне зависимости от сложности проекта.   

  

Так что не забивай на свой внутренний голос ))