|
lqp - По поводу программистской премудрости.
[Recent Entries][Archive][Friends][User Info]
03:02 pm
[Link] |
По поводу программистской премудрости. Читаю эти тексты, и понимаю, что они мне как-то не близки. Хотя лет десять назад я от подобного повизгивал от удовольствия и ощущения какой-никакой, а сопричастности.
Чем дальше, тем больше я понимаю, что от чего мне надо всеми силами избавляться при написании кода - так это как раз от програмистского образа мышления. От ощущения текста программы как своей безраздельной вотчины, в которой можно хозяйничать по своему усмотрению, не оглядываясь особо ни на физический смысл, ни на математическую модель. От привычки решать задачи в окошке xemacs-а, а не на листке бумаги. От привычки любой ценой подгонять работу программы под правильный результат. От обыкновения заменять доказательство алгоритма тестовыми примерами. И упаси меня бог вносить оптимизации или улучшения в алгоритм, если у меня нет формального доказательства его правильности и эффективности.
К стыду своему, я и посейчас весьма и весьма всем этим грешен.
|
|
| |
![[User Picture]](http://lj.rossia.org/userpic/67499/12247) | | From: | gevor |
| Date: | July 21st, 2009 - 08:24 am |
|---|
| | | (Link) |
|
Текст про Тао Программирования вспоминается
| From: | lqp |
| Date: | July 21st, 2009 - 08:32 am |
|---|
| | | (Link) |
|
Да, именно его я и имел в виду. Да и автор баек, умаю, тоже.
Но сейчас он видится по другому.
| From: | (Anonymous) |
| Date: | July 21st, 2009 - 10:21 am |
|---|
| | | (Link) |
|
А вы попробуйте писать "человеческими" методами. Мне, например, ужасно понравилась идея "Literate Programming" Доналда Кнута. Я нашел самое простое её воплощение - "noweb" bu Norman Ramsey - и приделал к ней "сворачивание документов" в html разметке.
Пишу и радуюсь.
Можете попробовать (незаконченную, но вполне рабочую) версию скрипта http://github.com/unixtechie/Literate-Molly/
Возьмире файл "MOLLY.html" и прочитайте - как образец самого формата, и как объяснение что надо делать (слишком, к сожалению, многословное пока что -- это из-за того, что я пытался пробовать на файле разные приемы работы с таким подходом).
Взять один файл с github'а легко и без Git'а (which is a distributed version control tool) если открыть его на чтение в "raw" виде (справа над окошком) и сохранить на своей машине.
| From: | (Anonymous) |
| Date: | July 21st, 2009 - 10:32 am |
|---|
| | | (Link) |
|
P.S. И если попробуете - напишите сюда ваше мнение, мне бы хотелось его знать.
Или даже мнение о полезности "свёрнутого html" как формата для работы с длинными документами. С одной стороны, ничего особо нового, но с другой так никто не делает, а мне показалось, что "folding html" резко облегчает нагрузку на память и "расширяет горизонт видения" при программировании длинных программ.
| From: | lqp |
| Date: | July 21st, 2009 - 11:02 am |
|---|
| | | (Link) |
|
Это все на самом деле не имеет отношения к языку.
| From: | (Anonymous) |
| Date: | July 21st, 2009 - 12:41 pm |
|---|
| | .. как не имеет отношения к языку сайт с притчами. | (Link) |
|
.. как не имеет отношения к языку ваш сайт с притчами. Программирование вообще не имеет отношения к языку (программирования) в удивительно большой степени. Оно имеет отношение к "управлению мышлением", когда количество деталей на порядки больше возможности человека за ними следить.
Лучший язык программирования - и лучший подход к нему - равно применимы для создания любых кропотливых документов, где надо увязывать абстракции на микро- и макро-уровнях.
Этим и занимается Literate Programming, система создания иерархий макро на естественном человеческом, которые лишь в самом низу воплощены в конструкциях языка машинного кодирования - и система расширения горизонта внимания который обеспечивает folding
>От привычки любой ценой подгонять работу программы под правильный результат.
Это в какой предметной области?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | July 25th, 2009 - 05:19 am |
|---|
| | | (Link) |
|
да в любой почти. попробуй скажи, например, что прогон юнит-тестов и последующая правка кода с матами и воплями — это не подгонка кода.
а я бы тоже предпочёл подогнать юнит-тесты под новый код, ага…
Кажется, ты не понял автора.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | July 26th, 2009 - 10:20 am |
|---|
| | | (Link) |
|
ровно так, как написано…
| From: | lqp |
| Date: | August 3rd, 2009 - 08:50 pm |
|---|
| | | (Link) |
|
Да, разумеется.
Откуда ты знаешь, что твои тесты верны, что они тестируют то что надо тестировать и что правильный результат не получается в результате сложения четного числа взаимно противоположных ошибок? Случаи, когда ты можешь во всем этом хоть сколь-нибудь быть уверенным, в реальной жизни редки и малоинтересны.
Хотя в программизме да, это фундаментальное представление.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | August 3rd, 2009 - 08:56 pm |
|---|
| | | (Link) |
|
тесты потому и «юнит», что проверяют только одну фичу. правильно сконструированный юнит-тест проверяет граничные условия, ошибочные, корректные. поскольку тестируемая фича одна и небольшая, то вполне можно точно знать, что именно ожидается на выходе. если выход другой — с вероятностью 90% как минимум баг не в тесте.
я, конечно, беру нормальный тест, а не нечто, сляпаное «абы было».
а если простые тесты проходят — из них уже можно конструировать более сложные, на взаимодействие фич. тут несколько сложнее, но зная, что фичи прошли первые тесты, и зная результаты — опять таки получаем немалую вероятность верности тестов.
не панацея, но лучше пока ничего не придумали, увы.
| From: | lqp |
| Date: | August 6th, 2009 - 11:59 am |
|---|
| | | (Link) |
|
Кака бы, выделить "одну фичу" - это три четверти всего решения задачи. Хорошо, если до тебя это кто-то сделал.
Но если до тебя это кто-то сделал - то ты сам, скорее всего будешь заниматься какой-нибудь другой задачей. Ведь смысла повторно решать уже решенную задачу - немного.
а в реальной жизни у меня этих фич несколько тысяч (реально - пара сотен групп похожих), а времени на разработку - существенно меньше, чем несколько лет. и все фичи более менее слабые, потому что задача - реально сложная. ну и как тут по уму??
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | August 3rd, 2009 - 08:58 pm |
|---|
| | | (Link) |
|
в реале, кстати, тоже до какой-то степени оно так. если тесты достаточно «юнит» и их хватает терпения проводить без халатности. |
|