Я, як початківець програміст, повинен надавати перевагу створенню власних бібліотек над використанням сторонніх бібліотек?


12

Як початковий програміст Python, чи гарна ідея створити та зрозуміти власні бібліотеки, перш ніж перейти до розширених сторонніх бібліотек, які містять потрібну мені функціональність?

Деякі проекти (наприклад, веб-рамки на зразок Django), ймовірно, занадто великі для такого підходу. Але інші проекти (наприклад, веб-сканери, бібліотеки графіків, HTML-аналізатор) здаються здійсненними.

Я хвилююся, що рання залежність від сторонніх бібліотек стримує моє зростання.

Примітка: це питання і це питання, здається, зосереджують більше досвідчених програмістів, які, ймовірно, більше зосереджені на ефективності повторного використання, ніж на навчальній перевазі. Я думаю, моє запитання орієнтоване на новачків.


5
"не що інше, як інтегратор бібліотеки, а не програміст": клієнти хочуть, щоб ви були продуктивними. Вміння оцінювати та інтегрувати наявні бібліотеки - важливий навик, який потрібно бути продуктивним. Якщо немає доступної бібліотеки, яка відповідає вашим потребам ... інакше зосередьтеся на вирішенні бізнес-проблеми, до якої звертається ваш додаток
Hamish Smith

2
Що ви відрізняєте між "бібліотечним інтегратором" та "програмістом". За 30 років - навіть виготовляючи вбудовані контролери пристроїв на рівні чіпів - я ніколи не працював без бібліотек. Чи можете ви пояснити це відмінність?
S.Lott

Погано фразується. Відредагували.
MikeRand

Я б швидше найняв бібліотечний інтегратор. Навіщо концентруватися на тому, як, хоча ви могли сконцентруватися на особливостях? Побачивши кілька десятків погано винайдених велосипедів, я скучаю при думці побачити ще один. Дизайн бібліотеки - це важка робота і балансування. Типовий магазин програмного забезпечення, який не спеціалізується на дизайні бібліотек, не має належних навичок, ресурсів і терпіння, щоб зробити це правильно. Остерігайтеся переписувачів. Краще використовувати код, перевірений іншими, ніж починати з нуля. Тільки коли є вакуум, слід вигадати ІМО.
робота

Відповіді:


12

Це завжди компроміс.

Як початківець програміст, ви повинні задати собі два питання, коли розглядаєте можливість повторного використання коду та винахід квадратного колеса:

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

Якщо вам не доведеться закінчувати свій проект, непогано крутити колеса на складних проблемах, які вже вирішили інші люди, адже ви чогось навчитесь. Але ти, мабуть, перейдеш до чогось іншого до того, як «закінчиш», що може чи не матиме значення для тебе. Інші проекти почнуть виглядати блискучими швидко, коли ви потрапите над головою на складний домен, який виглядає просто, поки ви не почнете намагатися вирішити це самостійно.

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

Якщо ваша мета - написати HTML-аналізатор, оскільки ви хочете зрозуміти, як працюють парсери, перейдіть до цього. Якщо ваша мета - написати HTML-аналізатор, оскільки ви хочете оздоровити введення користувача або перетворити деякі випадкові біти HTML, ви, мабуть, зосереджені на неправильній справі, тому що ви, ймовірно, більше зацікавлені в застосуванні синтаксичного аналізу, а не в самому розборі . Якщо ви хочете написати HTML-аналізатор, тому що не хочете витрачати час на розуміння чужої бібліотеки, ви, мабуть, витрачаєте свій час, тому що, принаймні, в цьому випадку, я гарантую, що хтось витратив більше часу на з'ясування того, як щоб вирішити цю проблему ефективніше, ніж у вас буде. У дійсно тривіальних випадках ви можете заощадити час, не використовуючи код, але в складних, якщо тільки бібліотека, якою ви користуєтесь, не зможе або ваша здатність читати документацію та зразки коду висмоктує,

З іншого боку, я б сказав, що варто написати власну бібліотеку графіків, оскільки ви будете більше зосереджені на передачі, фундаментальних алгоритмах та структурах даних, які ви зможете застосувати до інших доменів, навіть якщо ви в кінцевому підсумку використовуєте чужа бібліотека, коли ви працюєте над цими проблемами.


Фантастична основа для роздумів про проблему. Цінується.
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

Це лише моя думка, але я б запропонував створити власні бібліотеки для досить простого, багаторазового використання коду. Для нічого складнішого ви можете використовувати сторонні бібліотеки, які були складені і ретельно протестовані (сподіваємось!). Створення надійної бібліотеки може зайняти багато часу, залежно від того, що це. Я впевнений, що ви отримаєте багато практики програмування, просто створивши свою програму!


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.