Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2008-06-15

Практики LP

Программист - эссэист 60

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

LP увеличивает качество продукта требуя от программеров исследования и обьяснения их кода. Архитектура и дизайн разьясняются на концептуальном уровне. Диграммы моделирования включаются (UML). Длинные процедуры реструктурируются сворачиваемыми порциями кода в секции. Инновационные идеи, решающее техзнание, алгоритмические решения и необычные конструкции кода ясно документированы.

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

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

Производство листингов книжного качества. LP языки (CWEB) используют комбинации типографский языков (TeX) и языков программирования (C++). Типографский язык позволяет все доступные в книгах полезняшки вроде картинок, диаграмм, схем, таблиц, формул, ссылок, оглавлений, индексов. Типографская обработка LP выдает листинги с элегантно отформатированной документацией и исходным кодом. Листинги генерируемые в PDF формате включают гипертекстовые ссылки.

Помните основы. Есть много факторов вовлеченных в разработку превосходного софта. LP это только простая техника для использования вместе с всеми другими принятыми в софтинжиниринге практиками. Вот несколько практик связанных с документированием программ:

  • * Прорабатывайте структуры, процессы и "выход" (см. Luke Holman).
  • * Создавайте требования и описания дизайна (см. IEEE standards).
  • * Практикуйте ОО дизайн.
  • * Выбирайте имена классов, имена функций и имена переменный с умом.
  • * Избегайте дублирования кода созданием общих функций.
  • * Перерабатывайте код трудный для понимания.
  • * Разрабатывайте малые классы и маленькие функции когда это возможно.
  • * Стремитесь к простоте и целеустремленности по мере сил.
  • * Организуйте большие файлы исходников используя редакторы с поддержкой оконтуривания (Leo).
  • * Комментируйте исходники эффективно через хидеры и инлайн каменты.
  • * Документируйте исходники используя стандарты API документирования (doxygen).
  • * Выполняйте пост и пре проверки используя assertions.
  • * Предоставляйте формальные или неформальные доказательства корректности кода.
  • * Проводите практику обзоров (софта, документации, кода).
  • * Внедряйте автоматизированное тестирование модулей как форму документации.
  • * Проверяйте метрики кода (кол-во строк, сложность,etc).
  • * Выполняйте статический анализ на общие ошибки кодирования.

Некоторые из моих любимых инструментов - CWEB и Leo для оконтуривания исходников, doxygen для API документирования, CCCC и LocMetrics для измерений кода, PC Lint для статического анализа ошибок, и cppunit для автоматизированного тестирования модулей.
..


literateprogramming.com
Daniel Mall. "Recommendation for Literate Programming"

А я вот думаю - где бы найти пару сотен тыщ уев, чтобы прикупить фазенду на Майорке?

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) Java (22) humor (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)