Это всегда компромисс.
Будучи начинающим программистом, вы должны задать себе два вопроса при рассмотрении вопроса о повторном использовании кода и изобретении квадратного колеса:
- Узнаю ли я больше о проблеме, которую хочу решить, написав все с нуля или сосредоточившись на проблемной области и оставив сложность, не критичную для интересующей меня проблемы?
- Для меня важнее решить имеющуюся проблему или мне важнее понять некоторые фундаментальные понятия?
Если вам не нужно заканчивать свой проект, то неплохо крутить колеса на сложных проблемах, которые уже решили другие люди, потому что вы чему-то научитесь. Но вы, вероятно, перейдете к чему-то еще до того, как «закончите», что может иметь или не иметь значения для вас. Другие проекты начнут выглядеть блестяще быстро, когда вы окажетесь над сложной областью, которая выглядит простой, пока вы не начнете пытаться решить ее самостоятельно.
Не зацикливайтесь на том, чтобы отказаться от контроля, потому что вы подчиняетесь чьему-либо другому мышлению; сосредоточиться больше на том, что вы пытаетесь достичь.
Если ваша цель - написать HTML-парсер, потому что вы хотите понять, как работают парсеры, сделайте это. Если ваша цель состоит в том, чтобы написать анализатор HTML, потому что вы хотите очистить ввод данных пользователем или преобразовать некоторые случайные фрагменты HTML, вы, вероятно, сосредоточены на неправильной вещи, потому что вы, вероятно, больше заинтересованы в применении анализа, а не самого анализа , Если вам хочется написать анализатор HTML, потому что вы не хотите тратить время на то, чтобы понять чужую библиотеку, вы, вероятно, тратите свое время впустую, потому что, по крайней мере, в этом случае, я гарантирую, что кто-то потратил больше времени на выяснение того, чтобы решить эту проблему эффективно, чем вы будете иметь. В действительно тривиальных случаях вы можете сэкономить время, не повторно используя код, а в сложных, если только библиотека, которую вы используете, не отстой или ваша способность читать документацию и примеры кода не отстой,
С другой стороны, я бы сказал, что стоит написать свою собственную библиотеку графов, так как вы будете более сосредоточены на переносимых фундаментальных алгоритмах и структурах данных, которые сможете применять к другим доменам, даже если вы в конечном итоге будете использовать чужая библиотека, когда вы работаете над этими проблемами.