Является ли фраза «никогда не изобретать велосипед» для студентов?

Я постоянно сталкиваюсь с этим выражением «не изобретать велосипед» или «никогда не изобретать велосипед», когда я задаю несколько вопросов о SO. Они говорят вам использовать некоторые фреймворки или существующие пакеты. Я знаю, откуда такое отношение, поскольку неразумно тратить время на то, что другие уже решили. Или это так?

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

Неужели так плохо «изобретать велосипед»? Может быть, я думаю, что это неправильно? Может быть, есть способ, который я могу избежать изобретать колесо и в то же время многому научиться?

113 голосов | спросил 2 revs, 2 users 67%
Gnijuohz
1 Jam1000000amThu, 01 Jan 1970 03:00:00 +030070 1970, 03:00:00

20 ответов


125

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

  1. Повторная запись существующего кода - это потраченное впустую действие, которое может быть использовано на уникальных частях вашей системы и заставляет проект занимать больше времени, чем это необходимо.
  2. В первой версии любого кода чаще возникают ошибки /непредвиденные проблемы. Большинство библиотек и повторно используемых компонентов прошли боевые испытания и исправлены несколько раз. Если вы заново изобрете алгоритм хэширования или попытаетесь создать свою собственную СУБД (если это не так, что проект) чаще, чем вы, вы получите более низкие результаты.

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

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
19

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

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
17

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

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

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

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
11

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

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

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

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

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

Чтобы ответить на ваш вопрос более непосредственно, два предложения:

  • Если учитель говорит вам «не изобретать велосипед», они, вероятно, так говорят, потому что они разработали свою проблему таким образом. Возможно, они хотят, чтобы вы попробовали библиотеку, сражались с чужой реализацией алгоритма, а не писали свои собственные - в этом тоже учатся, а воссоздание интересно, но не хватает смысла.
  • Если у вас слишком много упражнений, собирающих вызовы библиотек, а не разработки алгоритмов, вы можете поднять с учителями вопрос о балансе между этими действиями - подчеркнуть, что вас никогда не просили написать свои собственные алгоритмы, например, сортировать и объединять. Общение никогда не пойдет не так.
ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
6

Практика Я сомневаюсь, что первые 1000 строк кода, которые все пишут, очень уникальны.

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

Поймите «Колеса» . Используя плохо сконструированное и изношенное колесо или ту, которая не подходит, не является оправданием слепого прилипания к этому правилу большого пальца. У вас может быть короткое время, финансирование, опыт, поэтому вы просто исправляете и завершаете поездку.

Существует несколько абсолютов .

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
2

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

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

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

Если вы получите «Использовать библиотеку X /рамки Y», нажмите «ОК», представьте свой вопрос: «Я пишу X сам, чтобы узнать больше об этом»

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
2

Если у вас нет установленного срока для вашего проекта, IMO, лучше изобрести колесо. Если у вас нет работы или вы просто ищете learn , чтобы программировать, а не зарабатывать деньги на программировании, то в чем смысл использования ярлыков, которые не сделают вас лучшим программистом, которые будут просто ускорьте свой проект? Хотя это верно, определенно хороший навык, чтобы знать, как использовать библиотеки, фреймворки и код других людей.

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
2

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

С шумерских времен многое изменилось:

  • Материал, используемый для сборки колес: из камня, дерева, металла, углерода, ...
  • размер предметов, нуждающихся в колесах - в размере нанометров для медицинских инструментов и колес для заработка бурого угля, размер 100 м.
  • производственная среда - ручная работа или промышленное производство.
  • точность колес, которые необходимы
  • Правильная ситуация вокруг вашего колеса. Может быть идеальное колесо для вашей работы, но оно может быть запатентовано.
  • Сияние и полировка для вашего колеса. Кадиллак может заслужить еще одно колесо, чем VW Golf.
  • Оптимальное колесо для детской коляски зависит от многих параметров: размер и вес коляски (плюс ребенок /~), климатические условия, цены на нефть для масла или натурального каучука, машины для сборки колес и ремесленников, доступные для производства. Вскоре говорят: Мировая экономика.

Как это переводится в мир программного обеспечения? Хорошо,

  • может быть веб-сервер, но, к сожалению, он написан на PHP. Вы предпочли бы иметь его на языке, на котором вы свободно говорите
  • алгоритм сортировки может быть увеличен для 10 элементов, но не масштабируется до 1T элементов
  • вам может понадобиться решение, которое само генерируется второй программой
  • точность чаще всего является цифровым вопросом на земле программного обеспечения, если алгоритм сортирует список, который он сортирует, а не сортируется в основном. Но помимо производительности, размер кода, использование памяти или другие ограничения могут произойти.
  • Патенты не нуждаются в дополнительных объяснениях, я думаю.
  • Внешний вид - постоянная причина для изобретательства чего-либо - подумайте dropDownList (ComboBox).
  • Глобальная экономическая ситуация может повлиять на ваше программное колесо: будет ли это облачное колесо, колесо с открытым исходным кодом, обозреватель или колесо приложения?
  • И, конечно, самая известная причина для создания собственного колеса: вам нравится это изучать.
ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
2

Я новообразованный студент. В школе мы учились «asp.net» и «C #», те 2 года обучения, которые мы не предпринимали, мы никогда не пытались создать собственную систему электронной почты, систему входа в систему или CMS. Все просто перетаскивало и удаляло контроль над дизайном .

Мы начали 102 студента, 23 закончили. У 4 человек есть работа. Причина: Эти 4 человека (включая меня) знали, как программировать, прежде чем мы действительно начали обучение.

Остальные люди теряются. Потому что мы никогда не «изобретали колесо». Мы никогда не узнали, как работает код. Достаточно просто создать полную систему входа в систему с управлением пользователями. Но студенты из моего образования не знают, как это сделать. Потому что они не знают, как работает система входа в систему.

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

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

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
1

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

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

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
1

Да, уместно сказать студентам не изобретать велосипед. Но должно быть четкое понимание того, что это значит для ученика: напишите, что соответствует назначению. Это не означает, что если задание состоит в том, чтобы написать bubblesort, вы скопируете его из Википедии, и это не означает использование array.sort или эквивалентов, если это обеспечивает ваш фреймворк или язык. Но после того, как вы рассмотрели различные алгоритмы сортировки, написали свой собственный пузырьковый порт и quicksort, не утруждайте себя переписыванием для каждого нового задания, используйте либо встроенную сортировку, либо то, что вы написали, не делайте то же самое прежнее .

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

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

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
1

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

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

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

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
1

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

Стеки, кучи, связанные списки, деревья и т. д., безусловно, стоят инвестиций вовремя, чтобы реализовать один раз; затем после использования тех, которые предоставляются каркасом. Каждый, кто использует плагин jQuery, должен писать хотя бы один, но вам не нужно писать каждый другой тип, который вы когда-либо будете использовать. Я бы сказал, что полезно, но не обязательно, писать небольшой планировщик процессов или мини-ОС, чтобы вы могли понять, что происходит под капотом на компьютере. Вам нужно понять, как работают процессы, потоки и т. Д.

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

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
1

Ответ зависит от того, хотите ли вы узнать или создать.

Если обучение является целью, «изобретать колесо» может дать вам более глубокое понимание и лучшее понимание, чем использование существующих колес (функции библиотеки).

Но если создание сложного продукта является целью, то «изобретать колесо» может быть трудоемкой практикой и мало поможет созданию продукта.

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

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
1

Ну, есть два аспекта.

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

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

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

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
0

Я столкнулся с такой же ситуацией. Это из-за различий в восприятии в промышленности и ученых.

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

В то время как в промышленности цель состоит в том, чтобы выявить продукт в наименьшее время и усилия.

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

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
0

Hacker Jargon Lexikon имеет очень хороший комментарий к изобретать колесо :

  

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

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

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
0

Ответ A: Восстановите колесо. Это углубляет ваше понимание структур данных и алгоритмов и делает его более вероятным, что вы напишете хорошие вещи. Я уверен, что, когда Guido van Rossum начал работать на Python, люди сказали ему не изобретать велосипед. Уже было много языков. Зачем писать Google, когда уже был Yahoo! Как насчет clang? Изучите все. Будьте великаном. Не позволяйте маленьким людям ограничивать вас. Ответ B: Если инструктор говорит вам, что делать, дайте ему то, что он хочет, или немного больше, даже если это кажется глупым. Если вы хотите ТАКЖЕ сойти с ума, сделав удивительное решение и дать ему ссылку на него, продолжайте. Во-первых, тем не менее, выполнить требования, изложенные так, как он (ы) он счастлив.

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
-1

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

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54
-2

Сделайте то, что задание /вопрос /экзамен попросит вас сделать.

Несколько лет назад я был TA для класса программирования C. Вопрос экзамена: «Написать программу для копирования файла». Несколько учеников задали один и тот же вопрос - могут ли они вызвать процесс и запустить команду OS cp?

Мы спросили их: «Будет ли ваша программа копировать файл?»

Вопрос экзамена попросил их написать код для копирования файла. Если в ответе не было кода C, который скопировал файл (например, открыть вход, открыть выход, цикл для чтения /записи байтов, закрыть ввод, закрыть вывод), то он не скопировал файл.

Если учитель говорит, что использует фреймворк или библиотеку (например, графический класс может сказать вам использовать 3D-библиотеку), используйте то, что они говорят вам использовать. Не изобретайте свой собственный или не используйте другое. Все, что угодно, усложнит для учителя оценку вашей работы.

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

ответил Benyamin Limanto 21 J0000006Europe/Moscow 2016, 07:39:54

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132