Еще раз о вреде велосипедов

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


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

И вот на днях пересекся я с denis_aka_xaos'ом, который сказал, что на этот мой топик кто-то написал ответ. Обычно к материалам по программированию комментариев мало, так что стало интересно: что же там такое. При первой возможности заглянул на эту страничку и увидел всего одну строку. Строку на Java, но моральный эффект от нее сопоставим с едким замечанием на обычном человеческом языке:

TimeZone.inDaylightTime(Date datetime)


Вот так, одна строка стандартного API заменила два десятка самописных. О чем это говорит? О том, что нужно читать книги, online-документацию и учиться непрестанно. Даже если есть силы и знания, достаточные для того, чтобы написать что-то самостоятельно, прежде всё равно следует поискать готовое решение. Сам можешь упустить какой-нибудь мелкий, но важный аспект предметной области. А стандартные решения создают люди, которым платят немалые деньги, их программы тестируются, оптимизируются и т.п.

Однако следует ли из этого, что решения распространенных проблем всегда найдутся в стандартных библиотеках? Конечно, нет. Так, например, в JDK до сих пор нет календарика для выбора дат. Многие люди пишут его реализацию самостоятельно, но ни один из готовых (и при этом свободно распространяемых) вариантов мне, например, не понравился. А вот в GWT календарик в последней версии (2.x) появился, да только поздно: я уже написал (точнее стырил и доработал) свой, ничуть не хуже и он исправно работает в одном проекте.

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

Комментарии (8)

RSS свернуть / развернуть
+
0
Всегда стараюсь не изобретать велосипедов без крайней нужды )))
avatar

Sergei_T

  • 08 мая 2010, 22:29
+
0
Мир Java настолько обширен, что иной раз не знаешь где и искать его, стандартное-то решение В некоторые пакеты JDK (особенно недавно появившиеся) я даже не заглядывал никогда. И уверен, что большинство Java-программистов знают JDK в пределах необходимого, знание деталей приходит с годами.

Есть и другая сторона медали: изучаешь, изучаешь какую-то стандартную концепцию, а она возьми да и сдохни. Я, например, много времени потратил на CORBA, которая в настоящий момент редко где используется (вытеснена SOAP, RMI), а лет 5 назад превозносилась до небес.
avatar

yababay

  • 08 мая 2010, 22:55
+
0
Помню помню — про CORBA много писали и многие любили ввернуть это словечко для пущего устрашения собеседников
avatar

Sergei_T

  • 08 мая 2010, 22:57
+
0
Неплохая технология. Посредством ее можно, например, состыковать приложение на VisualBasic (или любой подобной мелкомягкой байде) и приложение на Java (C, C++, на любом адекватном языке, даже для PHP примочки я встречал).

CORBA умерла не потому, что была малоэффективна, а потому, что сложновата в освоении. Если бы программисты и их руководители не были такими лентяями, на основе CORBA можно было бы создавать уникальные команды из, например, 1С-ников и UNIX-оидов. Это отличный инструмент для коллективной работы. И, на мой взгляд, эффективнее, чем SOAP, замешанный на громоздком xml-синтаксисе.
avatar

yababay

  • 08 мая 2010, 23:07
+
0
Знакомо! На любом языке так !
Но бывают случаи — хоть застрелись!!!
Кто не верит — проверьте!
Попробуйте на Borland C++ 3.11 (под ДОС 6.22) в файл записать коды 0,1,2,3,....255 (не символы)!
Так он с.ка САМ после каждого 13 (0Dh) ВТЫКАЕТ 10 (0Ah) !!!
Хоть библиотеку переписывай!
Пришлось эту часть программы на QB45 писать!
А если надо «завтра», а ты только в это впердолился !!!
avatar

Markony

  • 09 мая 2010, 08:12
+
0
На такой случай существуют ассемблерные вставки

Впердолился… С армии не слышал этого слова. Его любил наш прапорщик употреблять, типа: «Будете у меня пердолить шоб аж пиджак заворачивался!». Перевод: «Господа, не соизволите ли интенсивно потрудиться?»
avatar

yababay

  • 09 мая 2010, 18:04
+
0
ужас
avatar

FREExLOADER

  • 09 мая 2010, 19:55
+
0

Ассемблер не терпит ДАВАЙ, ДАВАЙ, ДАВАЙ !
avatar

Markony

  • 09 мая 2010, 19:22

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.