Непрерывность мысли

Jul 20, 2010 16:48

Попробую сформулировать такой термин: "дискретность стиля программирования", который всецело зависит от возможностей конкретного языка ( Read more... )

continuous, programming, code, discrete, idea, language

Leave a comment

Comments 13

7ocb July 20 2010, 13:15:43 UTC
С другой стороны чем прямолинейнее язык, тем сложнее будет на нем сказать "а вот там две недели назад мы сгенерили вот такую вот штуку, надо бы ее прикрутить". Я не уверен что корректно говорить о том, что мысль все время движется только вперед основываясь только на том, что она непрерывна.

Reply

swizard July 20 2010, 13:28:26 UTC
Я специально уточнил, что речь о прототипировании и проверке идей. Понятно, что в отделе на пять тысяч индусов и проекте на двадцать гигабайт заархивированных исходников правила будут несколько иными :)

Reply

7ocb July 20 2010, 14:05:34 UTC
Хм, в случае совсем-совсем прототипирования да, но идея идее рознь.

С другой стороны возможно же, что идея подлежащая прототипированию сама по себе не будет прямолинейной. Хорошо если мы говорим о прототипе чего то небольшого и абстрактного. Но это таки и в голове просчитать можно не тратя время на собственно набор кода в редакторе (:

Reply

swizard July 20 2010, 14:16:06 UTC
Ну почему же небольшого и абстрактного...

Под идеей я понимаю что-то типа такого: "Интересно, что для поиска в этих данных будет быстрее: тупо перебрать подряд параллельно на четырех ядрах, или сначала построить обратный индекс и искать в один поток?"

По-моему, быстрее и надежней накидать, замерить и посмотреть глазами на гнуплотовский график, чем пытаться прикинуть в уме :)

Единственно, "быстро накидать" не получается на "дискретных" языках, потому как твоей основной мысли (проверить идею) начинают мешать второстепенные, касаемые собственно реализации (а где что мне надо объявить сначала).

Reply


potan July 20 2010, 13:15:44 UTC
Макросы делают язык еще непрерывнее. Даже статическую типизацию замазывают - не отрывая курсора пишешь макрос, который описание типа на этапе компиляции подправит/добавит.

Reply

swizard July 20 2010, 13:32:55 UTC
Мне кажется, основной паттерн использования макросов другой:
  • пишешь код напрямую
  • как только возникает смутное ощущение копи-паста, отыскиваешь похожий участок и заворачиваешь в макрос
  • как ощущение возникает повторно: преобразуешь макрос под DSL и шпаришь уже дальше на нем
Тоесть, итеративный рефакторинг, а он подразумевает прыжки курсором :)

Reply

potan July 20 2010, 13:41:19 UTC
Это в прошлом, когда не было концепции непрерывного/дискретного языка.
Теперь мы сможем использовать всю мощь этого средства :-).

Reply

swizard July 20 2010, 13:49:31 UTC
Ну, кстати, сарказм-сарказмом, но macrolet вполне себе используется для локальных dsl, и курсора отрывать не надо ;)

Reply


metaclass July 20 2010, 13:36:04 UTC
А по моему мысль как раз прерывна. Во всяком случае, проще над сложными вещами работать не водопадной моделью "сел и подряд от начала и до обеда все сделал", а сначала обдумать общую структуру, потом ее как-то прототипировать, потом понемногу развивать-рефакторить, пока не получится результат.

Reply

swizard July 20 2010, 13:48:25 UTC
Здесь "Мысль" != "Проект"

Например,
Проект -- GPS-трекер для n900
Мысль -- "раз в час отсылать координаты по sms на заданный номер"

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

Reply


thesz July 20 2010, 19:47:50 UTC
С "курсором" не согласен.

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

Без смены места приложения усилий много не наработаешь.

Проще определять по "сопротивлению улучшениям в необходимом направлении".

В этом отношении типизированные ЯП могут ухудшать работу (внесение типов замедляет работу), а могут улучшать (типы задают полезные ограничения).

Reply


Leave a comment

Up