tag:blogger.com,1999:blog-10303035.post2871998396544439557..comments2024-02-04T23:20:04.066+03:00Comments on Алёна C++: Code reuseAlenahttp://www.blogger.com/profile/09389124127364799922noreply@blogger.comBlogger46125tag:blogger.com,1999:blog-10303035.post-47777736932523501222010-01-09T11:22:31.525+03:002010-01-09T11:22:31.525+03:00А мне вот кажется, чисто теоретически, что для пов...А мне вот кажется, чисто теоретически, что для повторного использования кода нужно: 1) Догадаться, что то, что ты делаешь, возможно, уже кто-то мог написать. 2) Найти этот код. 3) Договориться с его авторами о 3а) правах 3б) внесении изменений. <br />С первым - это вопрос опыта и кругозора. ( Помню, когда-то впервые открыл для себя boost, почувствовал себя великим велосипедостроителем. )<br />Второе - вопрос чисто технический, а потому решаемый. <br />3а - вопрос юриста. <br />3б - вот тут надо подумать. Предположим, что Петров выпил пива и сочинил себе библиотеку для сортировки картинок JPEG по содержимому. А Сидорову нужна такая же, но для PNG, вдобавок, ему работать с JPEG религия не позволяет. Но это ещё цветочки. Иванову и всему его отделу тоже понадобилась эта библиотека, с поддержкой обоих форматов + ещё какая-нибудь фишка, которую невозможно вынести в отдеьный модуль, а надо вписать в код обоих форматов. Вопрос: кому её вписывать, кому потом это <b>всё</b> поддерживать, и как быть тем, кому функция от Иванова не нужна? <br />Поэтому, мне кажется, что повторное использование кода в не связанных тесно (одним офисом) группах возможно только в пределах некой стандартной библиотеки, с чётко определёнными фуекциями. Всё, что выше этих функций, каждый определяет себе сам. <br />Можно, конечно, ещё составлять код очень выской модульности, вынося каждый чих в отдельный класс, но на многих языках за это придётся заплатить производительностью, и иногда - крупно.Barafu Albinohttps://www.blogger.com/profile/09284521103501970120noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-13809739809857035482009-12-02T19:48:46.960+03:002009-12-02T19:48:46.960+03:00Разделение проекта на 2 логические части. Одна чет...Разделение проекта на 2 логические части. Одна четко документируется, и реюзается, походу проекта - развивается, но опять-же, с жестким документированием и уведомлением всех. Для этого выделяется отдельная команда, которая только этим и занимается. Во второй допускается дублирование кода, но с условием что активно используется первая часть - этого намного меньше.Dmytrohttps://www.blogger.com/profile/11601655683306324396noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-91311332745230222802009-11-18T11:31:03.612+03:002009-11-18T11:31:03.612+03:00Так как работаю в Блубмерге, могу однозначно подтв...Так как работаю в Блубмерге, могу однозначно подтвердить сказанное про организацию кода. Прикладываются титанические усилия для убирания каких-либо циклических зависимостей.<br /><br />При таком объеме кода и количества программистов возникает другая проблема: допустим мне нужная какая-то бизнес функциональность (я не говорю про базовые низкоуровненые вещи -- тут просто есть coding standard). Мне порой ничего не остается, как просто искать банально контекстным поиском по вики и по самой кодовой базе в надежде найти знакомые слова. При большой кодовой базе, конечно, документирование, написание примеров, презентаций и т.д. всегда отстает от самого кода. Поэтому очень часто любое изыскание начинается с вопроса в командном чате -- "кто-нибудь знает лично людей, отвечающих за функционалам ХХХ? надо бы перетереть один вопрос..." и т.д. <br /><br />Чтобы облегчить ситуацию очень серьезно практикуется так называемый code ownership. Это значит, что с большой вероятностью все вопросы по коду, которые писал ты на любом проекте в Блумберге, придется отвечать тебе (включая багфиксы), даже есть ты над этим уже не работаешь. Это стимулирует людей выдать больше документации и сделать все ясно и понятно, чтобы уменьшить поток вопросов.Александрhttps://www.blogger.com/profile/03980297457924475954noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-27833865664167454082009-11-18T10:21:18.702+03:002009-11-18T10:21:18.702+03:00не знаю как насчет кидать все сюда в комментарий, ...не знаю как насчет кидать все сюда в комментарий, но в тумблр я его себе утащил, так что если в linkedin кто не зарегистрирован, то можно прочесть <a href="http://yuriy-volkov.tumblr.com/post/247098669/i-recommend-everyone-to-read-john-lakos-large" rel="nofollow">здесь</a>Yuri Volkovhttps://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-52583247747363882252009-11-17T20:01:50.047+03:002009-11-17T20:01:50.047+03:00на LinkedIn набрел на дискуссию Writing software t...<i>на LinkedIn набрел на дискуссию Writing software that's built to last и там очень понравился комментарий Herve Bronnimann о дизайне С++ кода в Bloomberg. Мне бы самому захотелось to reuse такой код.</i><br />А можно, если не сложно, скопировать? (для тех, кто там не зарегистрирован)Kolahttps://www.blogger.com/profile/00089688855808559482noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-36176811385272315292009-11-17T13:03:12.921+03:002009-11-17T13:03:12.921+03:00на LinkedIn набрел на дискуссию Writing software t...на LinkedIn набрел на дискуссию <a href="http://www.linkedin.com/groupAnswers?viewQuestionAndAnswers&discussionID=9462179&gid=100895&commentID=8417963&trk=view_disc" rel="nofollow">Writing software that's built to last</a> и там очень понравился комментарий Herve Bronnimann о дизайне С++ кода в Bloomberg. Мне бы самому захотелось to reuse такой код.Yuri Volkovhttps://www.blogger.com/profile/10400110255029957028noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-61246500865547688202009-11-14T22:13:57.632+03:002009-11-14T22:13:57.632+03:00Согласен, но именно при стартапе очень важно старт...Согласен, но именно при стартапе очень важно стартовать с правильными людьми. Благо при на старте их не надо иметь много.Александрhttps://www.blogger.com/profile/03980297457924475954noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-33205464726540604872009-11-14T17:51:31.963+03:002009-11-14T17:51:31.963+03:002Александр:
Для многих не секрет, что известная ко...<b>2Александр:</b><br /><i>Для многих не секрет, что известная компания на букву Г предпочитает отсеить десяток отличных кандидатов чтобы случайно не пропустить одного баклана. Жестко, но как мы все видим - это приносит им плоды ;-).</i><br /><br />Такой подход может работать в Гугле и в других компаниях с очень хорошей репутацией. Если вы нанимаете людей в безвестный стартап, нельзя действовать также. Потому что нет бесконечного пула желающих у вас работать.Alenahttps://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-589940858886365152009-11-14T17:29:16.631+03:002009-11-14T17:29:16.631+03:00dtjurev: Почему у студентов не может быть блогов и...<b>dtjurev</b>: Почему у студентов не может быть блогов и проектов? как раз у них они и должны быть. И у всех правил есть приятные и не очень исключения.<br /><br /><b>Alexander Falei</b>: А вот чтобы такого не было, планка при приеме на работу не должна опускаться при увеличении размера компании. Для многих не секрет, что известная компания на букву Г предпочитает отсеить десяток отличных кандидатов чтобы случайно не пропустить одного баклана. Жестко, но как мы все видим - это приносит им плоды ;-).Александрhttps://www.blogger.com/profile/03980297457924475954noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-81971457169633602242009-11-13T14:25:15.574+03:002009-11-13T14:25:15.574+03:00Меня всегда удивляло, что разных продуктах Adobe и...Меня всегда удивляло, что разных продуктах Adobe идентичный функции зачастую так по разному реализованы. Не просто лучше-хуже, а с применением разных идеологий. Теперь я понимаю, почему.Denis Gusakovhttps://www.blogger.com/profile/07780816606262510554noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-85275663202027140782009-11-10T15:49:54.630+03:002009-11-10T15:49:54.630+03:00Пока команда сидит в одной комнате - наилучшиий из...Пока команда сидит в одной комнате - наилучшиий из известных мне методов code reuse заключается в вопле: "а у нас есть готовая функция для XXX?" (и отвечает тот, кто лучше разбирается в XXX).<br />В больших командах будет хуже...Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-70191187930940042192009-11-10T15:35:59.684+03:002009-11-10T15:35:59.684+03:00> Соответственно сразу полезли
> проблемы с...> Соответственно сразу полезли <br />> проблемы с качеством и реюзом - <br />> проще свое написать, <br />> чем искать и разбираться в чужом.<br /><br />Ну ну. Надо не только написать свое, но оттестировать, предусмотреть юзкейсы. Если написаны внятные юнит-тесты и устраивает функционал- то я взял бы чужой код. Если присутствуют все классы эквивалентности для аргументов, дубликат (другой способ обработки того же) расчета и контроль генерации ошибок- то не важно для чего- это в 2-3-4 раза больше работы на ровном месте!<br /><br />Для примера- зададимся вопросом- откуда стартовал проект? Взяли CommandLine. Раньше достаточно было найти пробел- если есть пробел-то после пробела- это уже аргументы. Недавно запускал программу написанную для Win98. Она, естественно, не запускается, если папка не называется C:\aaa. Потом в командной строке стали появляться кавычки. Потом оказалось, что есть софт, который запускает exe-шник так: делает активную папку и стартует программа.exe. Т.е. если путь не полный- нужно складывать с активной папкой. Потом оказалось, что полный путь - это не только диск:\, но и \\сервер\шара. А временами и \\?\... Еще через полгода пожаловались, что неактивна дефолтная папка в диалоге выбора каталога. Оказалось, что то ли фар- то ли что делают активной папку и запускают ./программа.exe А ShBrowseForFolder или как его, строку "\.\" не переваривает. А завтра другой софт запустит то же самое как ..\..\папка\программа.exe. ... а при выборе каталога или файла активный путь меняется- т.е. нужно запоминать активный путь на момент старта программы- потом будет поздно. Вот так. 5 лет назад я начал писать эту функцию- этим летом закончил. И то не факт, что это окончательная точка.<br /><br />Так что "свое написать"- это либо убить время на дублирование чужого качества, либо вредительство :-).<br /><br />А поскольку "проще свое писать"- это обычное настроение для студента, то новый код- это почти гарантированные дыры при работе с ресурсами-памятью, buffer overruns и т.д., игнор кодов возврата/исключений и т.д. причем просто потому, что не сидел ты пару дней- не разбирался почему что-то падает. Наверняка, лишнее в плюсах исползование new/delete/CreateFile/CloseHandle и прочего.<br /><br />Собственно еще один аспект- а может, напишите преобразование Фурье или сингулярное разложение?Андрей jart@mail.runoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-49206945813457692482009-11-09T20:56:09.541+03:002009-11-09T20:56:09.541+03:00Ну и бить регулярно по рукам несознательным личнос...Ну и бить регулярно по рукам несознательным личностям.Alexander Faleihttps://www.blogger.com/profile/06303952602722799140noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-92528692296398172009-11-09T20:54:10.698+03:002009-11-09T20:54:10.698+03:00Ввести в штатное расписание должность "Экспер...Ввести в штатное расписание должность "Эксперт по кодовой базе".<br />2 Александр<br />Нанимать людей исключительно болеющих людей за дело ответственных и серьезных это конечно подход, но с увеличением численности коллектива, обязательно просочиться одна паршивая овца которая испортит все стадо.Alexander Faleihttps://www.blogger.com/profile/06303952602722799140noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-15483691789125435102009-11-09T13:00:32.675+03:002009-11-09T13:00:32.675+03:00Сомневаюсь, что здесь есть какие-то универсальные ...Сомневаюсь, что здесь есть какие-то универсальные рецепты. Во-первых, довольно редко сразу можно понять, что код можно будет использовать повторно (мало кто пишет алгоритмы сортировок или форматирование времени/даты снова и снова). Во-вторых, нужно свободное общение между разработчиками, чтобы один мог похвастаться тем, что сделал, а второй -- намотал это себе на ус. В-третьих, нужен свободный и простой доступ к чужому коду, а сам код должен быть очень качественными и задокументированным (уже проблема). В-четвертых, в компании должна быть инфраструктура для выделения повторно-используемого кода (ветка репозитория, bug-tracking, wiki) + руководство этим процессом + какие-то сотрудники, в обязанность которых входит сопровождение этого кода.<br /><br />Имхо, все это довольно утопично. Но помочь могут некоторые организационные мероприятия и изменение культуры в коллективе разработчиков:<br />- нужно информирование о том, чем занимаются другие разработчики/команды (но очень лаконичное и ненавязчивое, иначе это будет игнорироваться);<br />- нужно приучить разработчиков спрашивать у колег "есть ли у кого готовый код для ..." до написания собственного кода;<br />- нужно вести каталог готовых reusable-компонентов (в виде wiki или doxygen-документации);<br />- нужно предоставлять разработчикам ресурсы для оформления, исправления и сопровождения reusable-кода.<br /><br />И тут получается интересная штука -- в маленькой команде все это достигается легко. В большой команде все это превращается в бюрократию. В средних командах -- как повезет.eao197https://www.blogger.com/profile/17283739752119445290noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-61094352924749125472009-11-08T18:28:51.766+03:002009-11-08T18:28:51.766+03:00Вот ядро Linux - два или три "главных" ч...Вот ядро Linux - два или три "главных" через которых проходит весь код. Т.е. код не попадает в репозитарий без их обзора. И соответствующий репозитарий, который позволяет в данной системе сохранить первоначальное авторство кода. И плюс lkml где можно обсуждать код.fukanchikhttps://www.blogger.com/profile/15625944446518079105noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-20299224697551006242009-11-08T17:27:14.855+03:002009-11-08T17:27:14.855+03:00Алекандр:
>Гораздо важнее узнать - есть ли
&g...Алекандр:<br /><br />>Гораздо важнее узнать - есть ли <br />>у него блог/сайт/личный проект <br />>или что лучше - проекты, <br /><br />Бывшие студенты автоматически за бортом? Кстати, в числе прочих, имею двух сотрудников: у одного есть личный проект, у другого - нет. Первый по сторонам никогда не смотрит, второй отлично реюзает код. Так что, никакой связи.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-81200639311245970152009-11-07T14:02:02.309+03:002009-11-07T14:02:02.309+03:00> В IT конторах нашей страны
Во всех? Или може...> <i>В IT конторах нашей страны</i><br /><br />Во всех? Или может даже в большинстве? Не слишком ли смелое заявление? :-)<br /><br />> <i>управляющие традиционно получают несколько больше чем разработчики</i><br /><br />Управляющие чем? При управление людьми это наверное так, потому что там больше ответственности. Но если говорить о менеджерах на том же уровне, что и разработчики, то они управляют по большей части не людьми, а процессами. И вот здесь никакой явной связи между зарплатой менеджера проекта и программиста на этом проекте нет.<br /><br />Гораздо больше на это влияют такие слабоопределённые вещи, как "погода на рынке труда".Ivan Sagalaevhttps://www.blogger.com/profile/08658726720189436784noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-69727284731161988412009-11-07T12:28:22.414+03:002009-11-07T12:28:22.414+03:00У нас конторка маленькая и преобладает 2 метод. По...У нас конторка маленькая и преобладает 2 метод. По-поводу 3 метода, подтверждаю, на практике он неприменим в конторах в которых любят искать виноватых и давят по срокам. Заказчику ведь важно чтобы все работало, а не красота кода. И вышестоящий менеджмент не всегда понимает, что потратив время на функционально-бесполезное можно потом сэкономить кучу времени.Алексейnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-87286475979711369082009-11-07T00:42:29.815+03:002009-11-07T00:42:29.815+03:00Твой подход #2 сработает если инициатива идёт сниз...Твой подход #2 сработает если инициатива идёт снизу (давайте я щас расскажу) а не сверху (вашему вниманию предлагается презентация).<br /><br />В IT конторах нашей страны управляющие традиционно получают несколько больше чем разработчики, поэтому куча людей хочет пролезть в манагеры, поэтому корпоративный bullshit воспринимается не столько как корпоративный bullshit но как карьеризм.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-87508924096224275802009-11-06T21:26:32.114+03:002009-11-06T21:26:32.114+03:00Чего-то я себя ущербным почувствовал, аж отвечать ...Чего-то я себя ущербным почувствовал, аж отвечать стыдно ;) Все такие правильные 2, 3; 3,2...Unknownhttps://www.blogger.com/profile/05794231163773761479noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-42476248399933350332009-11-06T15:36:00.440+03:002009-11-06T15:36:00.440+03:002Александр:
Поэтому методы тестирования для приема...<b>2Александр:</b><br /><i>Поэтому методы тестирования для приема на работу, когда людей дрючат по узко специфическим знаниям по С++, алгоритмам и все - это верный путь принять на работу баклана, который никогда и в сторону от того, что делает, не посмотрит.</i><br /><br />Золотые слова. Однако в сторону от этого никто не думает и весь найм происходит именно таким способом. Интересно почему....<br /><br /><b>2bishop:</b><br /><i>Процесс идет дальше и в след. году опять частично вернемся к 3, но примерно в том стиле, про который Александр в предпредыдущем комменте написал - базовые компоненты будут фрики-фанаты поддерживать и разрабатывать :)<br />Посмотрим, что из этого получится.</i><br /><br />Расскажи тогда :-)<br /><br /><b>2dan:</b><br /><i>1. Анализаторы дубликатов</i><br />Это хорошо, чтобы copy-paste ловить, не более того.Alenahttps://www.blogger.com/profile/09389124127364799922noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-56219434956753197852009-11-06T13:51:38.026+03:002009-11-06T13:51:38.026+03:001. Анализаторы дубликатов
2. Instant code reviews1. Анализаторы дубликатов<br />2. Instant code reviewsdanhttps://www.blogger.com/profile/04669026308831479079noreply@blogger.comtag:blogger.com,1999:blog-10303035.post-40417102055095576582009-11-06T12:36:07.933+03:002009-11-06T12:36:07.933+03:00Хорошая тема :)
У нас микс 2 и 3. Раньше было мног...Хорошая тема :)<br />У нас микс 2 и 3. Раньше было много 3 - были команды, которые разрабатывали компоненты и поддерживали их.<br />Как ты и написала - это вызывает проблемы с моралью, а также батлнэки - когда 1 человек поддерживает очень большую или глючную базовую компоненту - он просто не справляется и всех тормозит.<br />Так что начали использовать больше 2, когда каждый может залезить куда угодно и сделать что угодно.<br />Соответственно сразу полезли проблемы с качеством и реюзом - проще свое написать, чем искать и разбираться в чужом.<br />Процесс идет дальше и в след. году опять частично вернемся к 3, но примерно в том стиле, про который Александр в предпредыдущем комменте написал - базовые компоненты будут фрики-фанаты поддерживать и разрабатывать :)<br />Посмотрим, что из этого получится.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-10303035.post-27435922743461120372009-11-06T12:24:25.079+03:002009-11-06T12:24:25.079+03:00Из интервью с Дональдом Кнутом:
I also must confe...Из интервью с Дональдом Кнутом:<br /><br />I also must confess to a strong bias against the fashion for reusable code. To me, "re-editable code" is much, much better than an untouchable black box or toolkit. I could go on and on about this. If you’re totally convinced that reusable code is wonderful, I probably won’t be able to sway you anyway, but you’ll never convince me that reusable code isn’t mostly a menace.<br /><br />http://www.informit.com/articles/article.aspx?p=1193856&rll=1gavenkoahttps://www.blogger.com/profile/04788714574575512630noreply@blogger.com