Це завжди компроміс.
Як початківець програміст, ви повинні задати собі два питання, коли розглядаєте можливість повторного використання коду та винахід квадратного колеса:
- Чи дізнаюся я більше про проблему, яку я хочу вирішити, написавши все з нуля, або зосередившись на проблемній області та відклавши складність, не критичну для проблеми, яка мене цікавить?
- Чи для мене важливіше вирішити проблему, чи важливіше, щоб я зрозумів деякі фундаментальні поняття?
Якщо вам не доведеться закінчувати свій проект, непогано крутити колеса на складних проблемах, які вже вирішили інші люди, адже ви чогось навчитесь. Але ти, мабуть, перейдеш до чогось іншого до того, як «закінчиш», що може чи не матиме значення для тебе. Інші проекти почнуть виглядати блискучими швидко, коли ви потрапите над головою на складний домен, який виглядає просто, поки ви не почнете намагатися вирішити це самостійно.
Не одержимо відмовлятися від контролю, оскільки ти відкладаєшся на чужий спосіб мислення; зосередьтеся більше на тому, що ви намагаєтеся досягти.
Якщо ваша мета - написати HTML-аналізатор, оскільки ви хочете зрозуміти, як працюють парсери, перейдіть до цього. Якщо ваша мета - написати HTML-аналізатор, оскільки ви хочете оздоровити введення користувача або перетворити деякі випадкові біти HTML, ви, мабуть, зосереджені на неправильній справі, тому що ви, ймовірно, більше зацікавлені в застосуванні синтаксичного аналізу, а не в самому розборі . Якщо ви хочете написати HTML-аналізатор, тому що не хочете витрачати час на розуміння чужої бібліотеки, ви, мабуть, витрачаєте свій час, тому що, принаймні, в цьому випадку, я гарантую, що хтось витратив більше часу на з'ясування того, як щоб вирішити цю проблему ефективніше, ніж у вас буде. У дійсно тривіальних випадках ви можете заощадити час, не використовуючи код, але в складних, якщо тільки бібліотека, якою ви користуєтесь, не зможе або ваша здатність читати документацію та зразки коду висмоктує,
З іншого боку, я б сказав, що варто написати власну бібліотеку графіків, оскільки ви будете більше зосереджені на передачі, фундаментальних алгоритмах та структурах даних, які ви зможете застосувати до інших доменів, навіть якщо ви в кінцевому підсумку використовуєте чужа бібліотека, коли ви працюєте над цими проблемами.