Еще раз о вреде велосипедов
Есть одна мысль, которую я стараюсь донести до учащихся, преподавая программирование: прежде чем писать что-то свое — изучите готовые решения, и прежде всего в стандартном API. Однако сам я очень даже грешен «изобретением велосипедов», и на днях был немало смущен, обнаружив ответ неизвестного гостя на свой уже почти забытый топик.
Статья «Летнее время в Java», о которой идет речь, публиковалась на linux16, потом была продублирована и на Мтааламу. В ней приводился фрагмент кода, позволяющий выяснить, наступило ли летнее время. Не скажу, что там много строк, но для их написания пришлось изрядно въехать в предметную область, да и над отладкой потрудиться.
И вот на днях пересекся я с denis_aka_xaos'ом, который сказал, что на этот мой топик кто-то написал ответ. Обычно к материалам по программированию комментариев мало, так что стало интересно: что же там такое. При первой возможности заглянул на эту страничку и увидел всего одну строку. Строку на Java, но моральный эффект от нее сопоставим с едким замечанием на обычном человеческом языке:
Вот так, одна строка стандартного API заменила два десятка самописных. О чем это говорит? О том, что нужно читать книги, online-документацию и учиться непрестанно. Даже если есть силы и знания, достаточные для того, чтобы написать что-то самостоятельно, прежде всё равно следует поискать готовое решение. Сам можешь упустить какой-нибудь мелкий, но важный аспект предметной области. А стандартные решения создают люди, которым платят немалые деньги, их программы тестируются, оптимизируются и т.п.
Однако следует ли из этого, что решения распространенных проблем всегда найдутся в стандартных библиотеках? Конечно, нет. Так, например, в JDK до сих пор нет календарика для выбора дат. Многие люди пишут его реализацию самостоятельно, но ни один из готовых (и при этом свободно распространяемых) вариантов мне, например, не понравился. А вот в GWT календарик в последней версии (2.x) появился, да только поздно: я уже написал (точнее стырил и доработал) свой, ничуть не хуже и он исправно работает в одном проекте.
Выводы таковы. Написание собственного кода отнимает время, но часто завершается успехом или, по крайней мере, приносит опыт. Поиск готовых решений (с учетом освоения) часто отнимает времени не меньше, чем написание решения с нуля и не всегда такой поиск заканчивается успехом. Зато если уж найдется — качество такого решения на порядок выше самописного. Так что обдумывая проблему «писать самому или искать готовое» приходится опираться на интуицию, опыт и везение.
Статья «Летнее время в Java», о которой идет речь, публиковалась на linux16, потом была продублирована и на Мтааламу. В ней приводился фрагмент кода, позволяющий выяснить, наступило ли летнее время. Не скажу, что там много строк, но для их написания пришлось изрядно въехать в предметную область, да и над отладкой потрудиться.
И вот на днях пересекся я с denis_aka_xaos'ом, который сказал, что на этот мой топик кто-то написал ответ. Обычно к материалам по программированию комментариев мало, так что стало интересно: что же там такое. При первой возможности заглянул на эту страничку и увидел всего одну строку. Строку на Java, но моральный эффект от нее сопоставим с едким замечанием на обычном человеческом языке:
TimeZone.inDaylightTime(Date datetime)
Вот так, одна строка стандартного API заменила два десятка самописных. О чем это говорит? О том, что нужно читать книги, online-документацию и учиться непрестанно. Даже если есть силы и знания, достаточные для того, чтобы написать что-то самостоятельно, прежде всё равно следует поискать готовое решение. Сам можешь упустить какой-нибудь мелкий, но важный аспект предметной области. А стандартные решения создают люди, которым платят немалые деньги, их программы тестируются, оптимизируются и т.п.
Однако следует ли из этого, что решения распространенных проблем всегда найдутся в стандартных библиотеках? Конечно, нет. Так, например, в JDK до сих пор нет календарика для выбора дат. Многие люди пишут его реализацию самостоятельно, но ни один из готовых (и при этом свободно распространяемых) вариантов мне, например, не понравился. А вот в GWT календарик в последней версии (2.x) появился, да только поздно: я уже написал (точнее стырил и доработал) свой, ничуть не хуже и он исправно работает в одном проекте.
Выводы таковы. Написание собственного кода отнимает время, но часто завершается успехом или, по крайней мере, приносит опыт. Поиск готовых решений (с учетом освоения) часто отнимает времени не меньше, чем написание решения с нуля и не всегда такой поиск заканчивается успехом. Зато если уж найдется — качество такого решения на порядок выше самописного. Так что обдумывая проблему «писать самому или искать готовое» приходится опираться на интуицию, опыт и везение.
Комментарии (8)
RSS свернуть / развернутьSergei_T
Есть и другая сторона медали: изучаешь, изучаешь какую-то стандартную концепцию, а она возьми да и сдохни. Я, например, много времени потратил на CORBA, которая в настоящий момент редко где используется (вытеснена SOAP, RMI), а лет 5 назад превозносилась до небес.
yababay
Sergei_T
CORBA умерла не потому, что была малоэффективна, а потому, что сложновата в освоении. Если бы программисты и их руководители не были такими лентяями, на основе CORBA можно было бы создавать уникальные команды из, например, 1С-ников и UNIX-оидов. Это отличный инструмент для коллективной работы. И, на мой взгляд, эффективнее, чем SOAP, замешанный на громоздком xml-синтаксисе.
yababay
Но бывают случаи — хоть застрелись!!!
Кто не верит — проверьте!
Попробуйте на Borland C++ 3.11 (под ДОС 6.22) в файл записать коды 0,1,2,3,....255 (не символы)!
Так он с.ка САМ после каждого 13 (0Dh) ВТЫКАЕТ 10 (0Ah) !!!
Хоть библиотеку переписывай!
Пришлось эту часть программы на QB45 писать!
А если надо «завтра», а ты только в это впердолился !!!
Markony
Впердолился… С армии не слышал этого слова. Его любил наш прапорщик употреблять, типа: «Будете у меня пердолить шоб аж пиджак заворачивался!». Перевод: «Господа, не соизволите ли интенсивно потрудиться?»
yababay
FREExLOADER
Ассемблер не терпит ДАВАЙ, ДАВАЙ, ДАВАЙ !
Markony
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.