Как начинающему программисту, стоит ли мне создавать собственные библиотеки, а не использовать сторонние библиотеки?

12

Как начинающему программисту на Python, стоит ли создавать и понимать свои собственные библиотеки, прежде чем переходить к расширенным сторонним библиотекам, которые содержат необходимые мне функции?

Некоторые проекты (например, веб-фреймворки, такие как Django), вероятно, слишком велики для этого подхода. Но другие проекты (например, веб-сканеры, библиотеки графов, анализатор HTML) кажутся осуществимыми.

Я волнуюсь, что ранняя зависимость от сторонних библиотек остановит мой рост.

Примечание: этот вопрос и этот вопрос, кажется, больше ориентированы на опытных программистов, которые, вероятно, больше сосредоточены на эффективности повторного использования, чем на преимуществах обучения. Мой вопрос, я думаю, ориентирован на начинающих.

MikeRand
источник
5
«не более, чем интегратор библиотек, а не программист»: клиенты хотят, чтобы вы работали продуктивно. Возможность оценивать и интегрировать существующие библиотеки - важный навык, который вам нужен для продуктивной работы. Если нет доступной библиотеки, которая соответствует вашим потребностям ... в противном случае сосредоточьтесь на решении бизнес-задачи, к которой относится ваше приложение
Хэмиш Смит,
2
Какое различие вы делаете между «библиотечным интегратором» и «программистом». За 30 лет - даже делая встроенные контроллеры устройств на уровне чипа - я никогда не работал без библиотек. Можете ли вы объяснить это различие?
S.Lott
Плохо сформулировано. Отредактировал.
MikeRand
Я бы предпочел нанять библиотечного интегратора. Зачем концентрироваться на том, как можно сосредоточиться на функциях? Увидев несколько дюжин плохо изобретенных велосипедов, я съежился от мысли увидеть еще один. Дизайн библиотеки - это тяжелая работа и балансирование. Типичный магазин программного обеспечения, не специализирующийся на проектировании библиотек, не имеет необходимых навыков, ресурсов и терпения, чтобы сделать это правильно. Остерегайтесь переписывания. Лучше использовать код, проверенный другими, чем начинать с нуля. ИМО должен изобретать только при наличии вакуума.
Работа

Ответы:

12

Это всегда компромисс.

Будучи начинающим программистом, вы должны задать себе два вопроса при рассмотрении вопроса о повторном использовании кода и изобретении квадратного колеса:

  1. Узнаю ли я больше о проблеме, которую хочу решить, написав все с нуля или сосредоточившись на проблемной области и оставив сложность, не критичную для интересующей меня проблемы?
  2. Для меня важнее решить имеющуюся проблему или мне важнее понять некоторые фундаментальные понятия?

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

Не зацикливайтесь на том, чтобы отказаться от контроля, потому что вы подчиняетесь чьему-либо другому мышлению; сосредоточиться больше на том, что вы пытаетесь достичь.

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

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

JasonTrue
источник
Фантастические рамки для размышлений о проблеме. Очень признателен.
MikeRand
8

Большинство начинающих программистов сильно недооценивают сложность проблемы. Это приводит ко многим неприятным ситуациям, но я остановлюсь только на одной: они отвергают множество сторонних библиотек за то, что они «раздуты» или «слишком сложны». Затем они пытаются написать свой собственный код, чтобы выполнить ту же работу, и полностью запутать это, потому что они не ожидали всего, с чем им придется справиться.

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

  • Неверный HTML.
  • Несколько кодировок символов (весь мир не работает на ASCII).
  • Ссылки, которые создаются или модифицируются JavaScript.
  • Ссылки на мультигигабайтные двоичные файлы.
  • Неправильные типы пантомимы.
  • Сбой в середине сеанса сканирования.
  • Смоляные ямы.
  • SEO консультанты.
  • Microsoft.
Майк Баранчак
источник
6

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

Это неверно

Ранняя опора на сторонние библиотеки научит, как работают хорошие библиотеки.

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

Я провел много оплачиваемых часов, убирая эти беспорядки.

С. Лотт
источник
Не уверен, что я полностью согласен с этим .. Иногда сторонние библиотеки плохо написаны и могут действительно преподавать вредные привычки. Если лежащие в основе алгоритмы хорошо понятны, то может быть хорошей идеей заново изобрести колесо, а затем сравнить их с другими библиотеками, чтобы увидеть, насколько хорошо или плохо ваши складываются с другими. В любом случае, очевидно, что какая-то форма наставничества чрезвычайно полезна :)
Демиан Брехт
Сказав , что там есть польза для изучения существующего API :)
Демьян Брехт
2
@Demian Brecht: «Иногда сторонние библиотеки плохо написаны и на самом деле могут преподавать вредные привычки». Хотя это может быть правдой, большинство проектов с открытым исходным кодом активно проверяется сообществом пользователей, и плохие идеи не выдерживают мудрости толпы. Кроме того, «плохо написано» - это суждение, которое n00b не может принять эффективно.
S.Lott
@ S.Lott: Хорошо сказано (re: n00b) :) И я думаю, вам просто нужно быть осторожным с тем, какие сторонние библиотеки вы просматриваете, так как у некоторых есть очень маленькие (если таковые имеются) сообщества. Например, поиск по случайным проектам на github может привести вас по неверному пути.
Демиан Брехт
2
@Demian Brecht: Вы не сможете выработать суждение, пока не увидите множество библиотек. Невозможно предварительно фильтровать библиотеки для использования с n00b. Это все библиотеки или нет библиотек.
S.Lott
4

Это предложение, которое является первым, очень логично для меня:

Как начинающему программисту на Python, стоит ли создавать и понимать свои собственные библиотеки, прежде чем переходить к расширенным сторонним библиотекам, которые содержат необходимые мне функции?

Как вы можете верить, что вы можете эффективно писать библиотеки с расширенными функциональными возможностями (ваше слово) для начинающих, которые будут такими же правильными, полными и проверенными, как и существующие библиотеки?

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

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

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


источник
1

Это только мое мнение, но я бы предложил создать свои собственные библиотеки для довольно простого, многократно используемого кода. Для чего-то более сложного вы можете использовать сторонние библиотеки, которые были тщательно собраны и протестированы (надеюсь!). Создание надежной библиотеки может занять очень много времени, в зависимости от того, что это такое. Я уверен, что вы получите много практики программирования, просто создав свое приложение!

Джон Онстотт
источник