Re[12]: Корреляция между стилем и качеством кода
От: Maxim S. Shatskih Россия  
Дата: 30.11.07 14:11
Оценка:
B>более сложные чем a+b. А через doxygen с LaTeX формулы и оформлять
B>более-менее удобно можно, и читать это нормально после обработки.

И что — кому-то не лень пропускать код через 2 лишних тула, после чего его якобы читать удобнее?
Занимайтесь LoveCraftом, а не WarCraftом!
Re[6]: Корреляция между стилем и качеством кода
От: Maxim S. Shatskih Россия  
Дата: 30.11.07 14:14
Оценка:
MSS>>Если "интересненькое" сделано под винды, не в конкуренцию одному из продуктов Microsoft, и, таким образом, ворованный код использовался только для того, чтобы лучше понимать, как работает платформа у тебя под ногами — то расслабьтесь. Никто на вас в суд подавать не будет, как не подают в суд на тех, кто сделал reverse engineering каких-то кусков ядра виндов и опубликовал результаты.

Pzz>Вы собираетесь всю жизнь писать драйвера для виндов?


Личная жизнь человека и жизнь компании — вещи разные. Я вполне допускаю, что моему работодателю _никогда_ не будет интересно программирование не под винды. Как и многим другим работодателям.

В судебную разборку в данном случае влипнет именно компания.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[13]: Корреляция между стилем и качеством кода
От: binarin Россия  
Дата: 30.11.07 14:37
Оценка:
"Maxim S. Shatskih" <29705@users.rsdn.ru> writes:

>> более сложные чем a+b. А через doxygen с LaTeX формулы и оформлять

>> более-менее удобно можно, и читать это нормально после обработки.

> И что — кому-то не лень пропускать код через 2 лишних тула, после чего

> его якобы читать удобнее?

Через одну, doxygen всё сам сделает. Просто читать таким образом сложные
формулы не "якобы", а действительно удобнее.
Posted via RSDN NNTP Server 2.1 beta
Re[7]: Корреляция между стилем и качеством кода
От: SkyDance Земля  
Дата: 30.11.07 17:06
Оценка:
MSS>P.S. В список подсистем не вошел TCP/IP, и к тому есть причины. Его перетащили за уши из OS/2 LAN Manager 1.x, он даже в другом стиле кодирования написан, чем все остальное ядро, и не переделывался аж до Висты (в Висте как минимум поменяли интерфейсы верхнего края — был TDI transport, стал WSK provider).

Ух ты. А ведь Microsoft утверждает, что OS/2 там вовсе не при чем. Утверждает официально в лице Рихтера в его знаменитой зелёной книжке про внутренности Виндов.
Стек TCP/IP, однако, там из FreeBSD. Был. До висты...
Re[11]: Корреляция между стилем и качеством кода
От: Pzz Россия https://github.com/alexpevzner
Дата: 30.11.07 17:18
Оценка: 1 (1) +1
Здравствуйте, Maxim S. Shatskih, Вы писали:

Pzz>>Мой point заключается в том, что писание документации — это такая же вдумчивая работа, как писание кода.


MSS>На деле она нужна практически только при раздаче кода _без исходников_, бинарями, внешним людям. Т.е. она нужна только авторам фреймворков, тулкитов и платформ. Причем фреймворков и тулкитов, раздаваемых наружу без исходников.


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

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

MSS>Второе, зачем нужна документация — краткое описание общей архитектуры продукта, базовых принципов, обязательных к соблюдению (скажем, инвариантов базового класса, которые обязаны остаться инвариантами в потомках), и так далее.


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

Все это не выводится из исходников, и не раскладывается на описания функций и методов. И это гораздо более насущная документация, чем референс по функциям.
Re[5]: Корреляция между стилем и качеством кода
От: Pzz Россия https://github.com/alexpevzner
Дата: 30.11.07 17:40
Оценка:
Здравствуйте, Maxim S. Shatskih, Вы писали:

Pzz>>Если параметров просто много, значит функция просто продумана плохо.


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


Что такого содержательного делает эта функция, что не делает ее посиксный аналог?

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


MSS>Конкретику можно? какое именно действие, какие шаги, как размазано.


Да можно и конкретику.

Ну вот, например, bus driver от тостера. Он работает с 2-мя видами девайсов, PDO и FDO, и у каждого своя логика обработки запросов. Нормальный человек записал бы в Device Extensions табличку указателей на обработчики, а в MajorFunction[] засунул бы указатели на функции, которые достают указатель на нужный обработчит из Device Extensions конкретного DEVICE_OBJECT, и передают туда управление. Раз уж в венде таблица обработчиков одна на драйвер, а не на каждый девайс, порожденный этим драйвером.

Нет, в сампле каждый обработчик по-отдельности разбирается с тем, PDO или FDO ему дали, и по-разному с ними работает.

Я понимаю, что там 3 обработчика и 2 типа девайсов, кода мало, и поэтому неправильность такого подхода не очень видна. А представляете, если бы там было 15 обработчиков и 5 типов устройств, и Вам надо добавить 6-й? Это же весь драйвер перелопатить только чтобы воткнуться.

И так там все. Я привел первое, что вспомнил.

MSS>Есть такое подозрение, что после приведения вами примеров станет ясно, что причина этого не в стиле кодирования DDK, а в архитектуре ядра NT.


Плохому кодеру, как известно, и ядра мешают

Pzz>>Тех, кто учился программировать по DDK, надо долго и мучительно переучивать.


MSS>Смотря что разработчикам предстоит разрабатывать. Если что угодно в ядре виндов — то не нужно переучивать, DDK есть истина в последней инстанции.


Да ну, перестаньте. Я в DDKных самплах и настоящие ошибки находил, которые могут систему порушить, если не повезет. Лень просто сейчас вспоминать, где это было, но в каком-то из простых примеров — синхронизация вокруг IRP cancellation была с ошибкой. Пример этот я, кстати, читал именно что бы разобраться в этом самом cancellation'е

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

MSS>Причина делать такое утверждение очень проста: программируют, в частности, под платформу. Я понимаю, что программируют еще и под требования, и под соображения о красоте программирования — но если платформа достаточно сложна, то соображения "правильно воткнуться в платформу" уж точно перевешивают ЛЮБЫЕ (еще раз all caps — ЛЮБЫЕ) соображения красоты кода из любой литературы.


Вы лукавите. На самом деле, Вы ставите задачу не "правильно воткнутся в платформу", а "правильно воткнуться в платформу, не понимая, что Вы делаете". Только этим непониманием может объясняться столь священно-трепетное отношение к DDK.

MSS>Ядро НТ — достаточно сложная платформа с кучей тонких нюансов, которые могут породить кучу неприятных сложных в поиске багов именно в месте стыка "ваш код-платформа". Потому именно это место стыка начинает становиться _главным_ в вашем коде, а вовсе не его внутренняя красота.


Памилте. В одном из моих драйверов было 60 тышш строк кода, и работал он кроме венды еще на 2-х платформах. Вы правда думаете, что стык с платформой был главным в этом коде? На самом деле, все платформенное было аккуратно загнано в специально отведенное для него место, а большая часть кода знать не знала, на какой платформе она крутится.

Просто Вы сложных драйверов не писали. В простых драйверах, конечно, почти весь драйвер и есть стык железа с платформой.
Re[7]: Корреляция между стилем и качеством кода
От: Pzz Россия https://github.com/alexpevzner
Дата: 30.11.07 17:55
Оценка:
Здравствуйте, Maxim S. Shatskih, Вы писали:

Pzz>>Вы собираетесь всю жизнь писать драйвера для виндов?


MSS>Личная жизнь человека и жизнь компании — вещи разные. Я вполне допускаю, что моему работодателю _никогда_ не будет интересно программирование не под винды. Как и многим другим работодателям.


MSS>В судебную разборку в данном случае влипнет именно компания.


Для компании, интересы которой пересекаются с мелкософтом, держать в штате человека, который копался в исходниках ядра, может быть опасно. Одно дело, если человек про это молчит, компания не обязана его допрашивать с пристрастием при приеме на работу (расписочку, впрочем, могут и попросить). Совсем другое дело, если человек хвастается этим на каждом углу.
Re[8]: Корреляция между стилем и качеством кода
От: Pzz Россия https://github.com/alexpevzner
Дата: 30.11.07 17:59
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>Ух ты. А ведь Microsoft утверждает, что OS/2 там вовсе не при чем. Утверждает официально в лице Рихтера в его знаменитой зелёной книжке про внутренности Виндов.

SD>Стек TCP/IP, однако, там из FreeBSD. Был. До висты...

Не очень он похож на стек из BSD. Ни по поведению, не по видимым простому человеку интерфейсам (например, управление буферами в NDIS'е совсем не похоже на BSD'ное).
Re[10]: Корреляция между стилем и качеством кода
От: The Lex Украина  
Дата: 30.11.07 20:48
Оценка:
Здравствуйте, Pzz, Вы писали:

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


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

Pzz>Назначение комментариев в исходниках — быть именно пояснением к исходникам, а не заменой документации. Именно из этого и следует исходить, выбирая стиль, в котором пишутся комментарии.


Ну, примерно это оно и есть.

Pzz>Ковырянием же доксигена можно, наверное, повлиять на стиль, в котором он форматирует свой output. Но я говорю совсем не об этом.


Лично я доксиген не прочувствовал: там в исходниках такие развесистые комментарии писать (а може я его не понял?) что имхо проще самому документацию вести и поддерживать в актуальном состоянии — благо "буквы писать" можно и отдельного специального человечка без глубокий знаний программирования посадить.
Голь на выдумку хитра, однако...
Re[7]: Корреляция между стилем и качеством кода
От: The Lex Украина  
Дата: 30.11.07 20:53
Оценка:
Здравствуйте, Maxim S. Shatskih, Вы писали:

MSS>Исторически ядро было написано группой единомышленников человек в 30-40 (это если считать авторов драйверов под главнейшее железо и авторов основных кернел-модулей типа NTFS, NDIS, SMB клиента и сервера и тому подобного).


MSS>Люди давно работали вместе еще в Digital, хорошо сработаны, и при возникновении тех или иных вопросов просто спрашивали друг друга лично.


История известная — и было это ядро NT чтобы не соврать 3.5 (специально смотреть NT 3.x не полез, а "наизусть" вроде как 3.5 было...) — и когда это было? И осталось ли что-нибудь из того ядра в современном хотя бы XP (нет, я не говорю что мол не осталось ничего — привда интересно осталось ли и что именно) и остались ли кто-нибудь из тех "30-40 единомышленников" до сих пор "кодить ядро"?
Голь на выдумку хитра, однако...
Re[11]: Корреляция между стилем и качеством кода
От: Pzz Россия https://github.com/alexpevzner
Дата: 30.11.07 20:56
Оценка: +1
Здравствуйте, The Lex, Вы писали:

TL>Почему же — лично я люблю (ну хорошо: подсмотрел в одной из комманд в которой когда-то работал) писать по исходникам замечания и ссылки на номера багов в системе учета оных — по крайней мере на этапе доводки текущего релиза это как минимум не вредно — а потом, после выпуска релиза, можно эти замечания и удалить все сразу автоматом. А то как еще сказать "бак такой-то был исправлен в таком-то месте"?


А зачем это говорить в исходниках? У вас что, нет системы контроля версий? Вот в ее логах и скажите.

Кстати, бывает еще, что система контроля версий интегрирована с багтракером. Т.е., вы закрываете багу и чекините изменения одним движением. Мне, правда, не попадалось удобной реализации, но идея хорошая.
Re[12]: Корреляция между стилем и качеством кода
От: The Lex Украина  
Дата: 30.11.07 21:00
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Все это не выводится из исходников, и не раскладывается на описания функций и методов. И это гораздо более насущная документация, чем референс по функциям.


А вот ее-то по большому печальному и повсеместно распространенному опыту фиг добьешься — зато непреходяща масса менеджеров всех уровней, "вдруг открывших для себя доксиген и решивших что это хорошо" (к) — мол "теперь у нас будет документация по проекту! всем срочно писать в коде комменты для доксигена!" (к) — повбывав бы!
Голь на выдумку хитра, однако...
Re[12]: Корреляция между стилем и качеством кода
От: The Lex Украина  
Дата: 30.11.07 21:01
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Все это не выводится из исходников, и не раскладывается на описания функций и методов. И это гораздо более насущная документация, чем референс по функциям.


Тут как раз вспомнилась классика: "угадал все буквы, но не смог назвать слово." (к)
Голь на выдумку хитра, однако...
Re[8]: Корреляция между стилем и качеством кода
От: i_van  
Дата: 30.11.07 21:26
Оценка:
Здравствуйте, SP_, Вы писали:

SP_>Здравствуйте, Unmanaged, Вы писали:


U>>Разжёвывать мне сейчас лень, кому надо — правильно поймут, что я имел в виду.


SP_>Батенька, складывается впечатление, что круче вашей фирмы только яйца. Озвучте пожалуйста название вашей конторы.

+1
Re[12]: Корреляция между стилем и качеством кода
От: The Lex Украина  
Дата: 01.12.07 11:15
Оценка:
Здравствуйте, Pzz, Вы писали:

TL>>... А то как еще сказать "бак такой-то был исправлен в таком-то месте"?


Pzz>А зачем это говорить в исходниках? У вас что, нет системы контроля версий? Вот в ее логах и скажите.


Мысль! Т.е. я-то так и делаю — почему-то не подумал сопоставить... Хех! Надо теперь защищать "коментарии в исходниках"...

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


Да не очень, имхо. Во-первых, функции сильно разные. Ну, и этого достаточно — остальное уже следствия первого.
Голь на выдумку хитра, однако...
Re[5]: Корреляция между стилем и качеством кода
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 01.12.07 21:01
Оценка:
Здравствуйте, Maxim S. Shatskih, Вы писали:

Pzz>>Если нет, то что за радость от того, что они механически чекинятся одновременно с функцией?

MSS>Не запускать отдельные тулы для чтения документации. Это раз. Документация обязательно видна и мозолит глаза при работе с кодом, это два.

А зачем ей именно мозолить глаза?

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

MSS>А что за радость в отдельной документации вне комментов?


MSS>>>Если параметров просто много — то есть смысл, чтобы четче понимать, где какой параметр.

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

Ну если говорить именно об этом примере, то как минимум 4 параметра (dwDesiredAccess, dwShareMode, dwCreationDisposition, dwFlagsAndAttributes) частично или полностью входят во второй параметр open(), и проблем я от этого ни разу не видел. То есть вместо 7 параметров можно было бы спокойно сделать 4-5. А это уже значительно ближе к возможности легко помнить их состав, порядок и назначение (особенно если lpSecurityAttributes унести в конец, и расширить её тем, что относится к security, но напихано в dwFlagsAndAttributes).
Итого, пример я считаю достаточно неудачным.;)

И непонятно, какой смысл в сравнении именно с юниксом (у Вас, кажется, это слегка больное место). Есть специфические библиотеки (например, GTK) где бывает и 15 параметров в функции.:)

MSS>Ядро НТ — достаточно сложная платформа с кучей тонких нюансов, которые могут породить кучу неприятных сложных в поиске багов именно в месте стыка "ваш код-платформа". Потому именно это место стыка начинает становиться _главным_ в вашем коде, а вовсе не его внутренняя красота.


Угу — для очень большого количества применений можно было бы обойтись значительно более простым построением.
The God is real, unless declared integer.
Re[13]: Корреляция между стилем и качеством кода
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 01.12.07 21:32
Оценка:
Здравствуйте, The Lex, Вы писали:

TL>Здравствуйте, Pzz, Вы писали:


Pzz>>Все это не выводится из исходников, и не раскладывается на описания функций и методов. И это гораздо более насущная документация, чем референс по функциям.


TL>А вот ее-то по большому печальному и повсеместно распространенному опыту фиг добьешься — зато непреходяща масса менеджеров всех уровней, "вдруг открывших для себя доксиген и решивших что это хорошо" (к) — мол "теперь у нас будет документация по проекту! всем срочно писать в коде комменты для доксигена!" (к) — повбывав бы! :maniac:


А ты с другой стороны посмотри.:) Хорошо, когда работает слаженная команда, годами обрабатывающая один код и знающая его наизусть. А теперь представь себе, что надо ускорить работу (в меру, конечно) и добавить людей на мелкие задачи. И вот одному из них задача — переделать десяток функций под новые условия. Времени мало. Сколько времени он затратит на поиск того, что надо переделывать, и поймёт, как переделывать, без документации по каждой функции и по каждому файлу и с такой документацией?

А ведь менеджеру в том числе нужно чтобы, если ты не дай бог попал под трамвай, или бросил всё и уехал в Шамбалу искать смысл жизни — чтобы заменить тебя было реально решаемой проблемой в течение максимум недель...
The God is real, unless declared integer.
Re[14]: Корреляция между стилем и качеством кода
От: The Lex Украина  
Дата: 02.12.07 11:39
Оценка:
Здравствуйте, netch80, Вы писали:

N>А ведь менеджеру в том числе нужно чтобы, если ты не дай бог попал под трамвай, или бросил всё и уехал в Шамбалу искать смысл жизни — чтобы заменить тебя было реально решаемой проблемой в течение максимум недель...


А теперь представь себе что все, кто начинал и продолжал писать эту программу, попали под трамвай и уехали в Шамбалу — и остался ты с программой один на один и есть у тебя описания всех функций и классов и даже названия у них очень даже "говорящие" и каждый отдельный алгоритм вполне понятен, но вот нет никаких данных а) что система делает вообще; б) что она должна делать в принципе. А проблемой замены "попавших под трамвай" в течение недели (после взятия на работу, да: поиск и найм — отдельный вопрос) я давно "озабочен" и определенные наработки имеются — в том числе, например, по динамическому переключенению имеющихся ресурсов на "горящие" участки. Так вот: доксиген там не только не помогает, а очень даже наоборот. А почему? А потому что писать много, а смысла — мало. Описывать хороший код по параметрам функций — смысла нет — описывать надо конкретные цели, которых добивались, конкретные решения, которые правили, и конкретные результаты, которых достигли. А для описания технической сути решения часто не только достаточно 2-3-х диаграмм — часто как эти 2-3 диаграммы дают гораздо более полное и полезное описание системы, модуля, etc., чем целый вагон доксигена. Знаем — плавали.
Голь на выдумку хитра, однако...
Re[8]: Корреляция между стилем и качеством кода
От: Maxim S. Shatskih Россия  
Дата: 02.12.07 15:49
Оценка:
Что говорил Рихтер, и какие байки ходят вокруг среди ненавистников Микрософта — мне не интересно, говорю то, что на самом деле:

— TCP/IP от NT3.5 и до Висты — из OS/2 LAN Manager 1.x
— в Win9x/Me он строился с тех же исходников с помощью макросов. Кое какие-то вещи обернуты в portability обертки — скажем, CTESignal у нас KeSetEvent на NT и какой-то VMMный вызов на Win9x/Me.
— что в Висте — не знаю.
— что было в NT 3.1. Был совсем другой TCP/IP, основанный на STREAMS, возможно, срисованный с Lachman TCP source из System V или чего-то вроде (нет, никоим образом не из FreeBSD). Выкинули на помойку в NT 3.5 из-за низкой производительности, да еще и весь STREAMS задепрекатили.
— утилиты типа PING и FTP — вот они действительно из BSD.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[8]: Корреляция между стилем и качеством кода
От: Maxim S. Shatskih Россия  
Дата: 02.12.07 15:51
Оценка:
TL>История известная — и было это ядро NT чтобы не соврать 3.5 (специально смотреть NT 3.x не полез, а "наизусть" вроде как 3.5 было...) — и когда это было? И осталось ли что-нибудь из того ядра в современном хотя бы XP (нет, я не говорю что мол не осталось ничего — привда интересно осталось ли и что именно)

Процентов 80 осталось. А именно — все основные функции и структуры данных остались. Главное изменение ядра было между NT4 и w2k — появление PnP & Power.

Кое-какие внутренние кишки переписали поумнее, например, реестр между w2k и XP (он теперь на memory mapped файлах стал).

TL>и остались ли кто-нибудь из тех "30-40 единомышленников" до сих пор "кодить ядро"?


Остались их преемники как минимум.
Занимайтесь LoveCraftом, а не WarCraftом!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.