Re: Кто как пишет код
От: nikov США http://www.linkedin.com/in/nikov
Дата: 16.12.09 10:07
Оценка: 32 (4) +2 :)
Здравствуйте, Lonely Dog, Вы писали:

LD>2. Как вы пишите код? Я предпочитаю написать кусочек (законченный), протестить его и двигаться дальше. Мне так удобнее. Знаю, что есть люди, которые могут неделю писать код, а потом его начинают отлаживать.


Я предпочитаю сначала писать тесты. Затем начинаю писать код. Если в процессе написания кода я обнаруживаю, что мне не хватает какой-то инфраструктуры, я откладываю текущую задачу, и начинаю писать тесты для инфраструктуры.
Re: Кто как пишет код
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.12.09 13:26
Оценка: +6
Здравствуйте, Lonely Dog, Вы писали:

LD>2. Как вы пишите код? Я предпочитаю написать кусочек (законченный), протестить его и двигаться дальше. Мне так удобнее. Знаю, что есть люди, которые могут неделю писать код, а потом его начинают отлаживать. Эти люди говорят, что им тяжело переключаться с задачи разработки (дизайна) на отладку.


Все предпочитают простые, мелкие задачи. Но бывают задачи которые бессмысленны в упрощенном варианте. Вот тогда и приходится неделями писать код.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Кто как пишет код
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.12.09 14:02
Оценка: +3
Здравствуйте, Lonely Dog, Вы писали:

VD>>Все предпочитают простые, мелкие задачи. Но бывают задачи которые бессмысленны в упрощенном варианте. Вот тогда и приходится неделями писать код.

LD>И вам это не доставляет проблем или неудобств?

Решение сложных задач? Конечно доставляет. Но неудобства компенсируются удовольствием от решения сложной задачи.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Кто как пишет код
От: minorlogic Украина  
Дата: 16.12.09 11:29
Оценка: 5 (2)
На первом этапе пишу псевдокод и функциональную декомпозицию.
На втором обычно определяю необходимые данные их видимость и время жизни.
Затем псевдокод начинаю наполнять реализацией.

псевдокод выглядит примерно так.

void optimize()
{

   Estimation bestEstimation;
   initialize(bestEstimation);
   

   while( !exitCriteriaReached())
   {
      Estimation newEstimation;
      suggestParams(newEstimation);
 
      if( newEstimation > bestEstimation)
      {
         bestEstimation = newEstimation;
      }
   }
}
Ищу работу, 3D, SLAM, computer graphics/vision.
Re: Кто как пишет код
От: McSeem2 США http://www.antigrain.com
Дата: 18.12.09 07:35
Оценка: +2
Здравствуйте, Lonely Dog, Вы писали:

LD>2. Как вы пишите код? Я предпочитаю написать кусочек (законченный), протестить его и двигаться дальше. Мне так удобнее. Знаю, что есть люди, которые могут неделю писать код, а потом его начинают отлаживать. Эти люди говорят, что им тяжело переключаться с задачи разработки (дизайна) на отладку.



Все зависит от области решаемых задач. У меня, например, на выходе — процентов 5 хорошего, годного программного кода. Все остальное — эксперименты и тесты, которые в итоге без мелейшего сожаления идут в мусорку. Это как листочки бумаги, которые накапливаются на столе, а потом сгребаются и выкидываются. И я честно скажу, совершенно не понимаю, как можно целую неделю дубасить текст программы, и только потом его начинать отлаживать. Уверен, что получается криво и глючно. Но с точки зрения быдлокодинга я наверное рекордсмен по неэффективности. Мой средний норматив — 5-10 строк в день. Иногда получается -1000, это означает, что найдено более изящное решение в замен старому. Как оценить стоимость строки кода, если я за сегодня написал минус тысячу строк? Мнимое значение за действительные деньги.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[7]: Кто как пишет код
От: FR  
Дата: 23.12.09 10:00
Оценка: 4 (1)
Здравствуйте, yumi, Вы писали:

MS>>new/delete в прикладном коде — это вообще моветон. Надо пользоваться контейнерами.


Y> я что-то пропустил? Можете подробнее раскрыть тему?


Умные указатели + контейнеры для прикладного кода практически полностью исключают необходимость
в delete, new конечно используется но только в конструкторах этих самых умных указателей.
Ну и основная причина (кроме сложности следить за временем жизни вручную) это то что такой
стиль позволяет автоматически писать безопасный и корректный в отношении исключений код.
Re: Кто как пишет код
От: akarinsky Россия  
Дата: 18.12.09 11:14
Оценка: 1 (1)
Здравствуйте, Lonely Dog, Вы писали:

Когда занимаюсь одной и той же задачей больше N дней (где N зависит от интересности задачи, от 1 до 5-7), то мотивация сильно падает, и, как следствие, эффективность.
Поэтому стараюсь делать несколько дел сразу, по очереди на них переключаясь.

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


А если все хорошо и спешки особой нет, то:

1. описываю задачу в рамках пользовательских требований
2. прикидываю архитектуру в общих чертах
3. пишу приемочные тесты по требованиям
4. потихоньку пишу код, проходящий тесты
5. если появились еще требования (например, для кода нужна еще подсистема какая-то), то сначала пишу заглушки и mock`и, откладывая реализацию
6. иногда декомпозировать не удается, тогда злюсь Потому что не умею удерживать в голове "макаронный" код с высокой связанностью.
На опушке за околицей мужики строили коровник.
Работали споро и весело. Получалось х**во.
Re: Кто как пишет код
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 20.12.09 21:18
Оценка: 1 (1)
Здравствуйте, Lonely Dog, Вы писали:

LD>Привет!


LD>Есть пара вопросов по предпочтениям к организации своего труда:

LD>1. Как вы относитесь к многозадачности? Есть люди, которые не могут делать больше одной задачи одновременно. Есть те, кто могут.

Как делать больше одной задачи непрерывно-параллельно во времени, я хз, это выше моего понимания. Если речь о частом переключении (несколько раз за час) между различными нетривиальными задачами, то долгое время считал это для себя невозможным, т.к. при переходе к новой задаче приходилось долго и мучительно въезжать в ее суть и вспоминать, на чем я там остановился последний раз. Ну и времени в итоге уходило куда больше, чем с последовательным подходом. Относительно недавно подумал (начитавшись GTD), почему бы не реализовать у себя оператор yield и не сохранять состояние задачи при переключении, где-нибудь вне своей головы. Как ни странно, но для меня это сработало. Применительно к коду, перед тем, как переключиться на другую задачу, я оставляю коммент там, где закончил до точки с запятой, типа:

//YIELD: представлять каждый параметр HTTP-запроса в виде списка со всеми возможными вариантами его декодирования в каноническую форму


Место это коммента однозначно говорит мне о том, где я закончил писать, а суть — что именно я должен тут написать, когда вернусь к этой задаче. Что-то типа "следующих действий" по GTD в микромасштабе, короче. Теперь, вернувшись к этой задаче, я буду точно знать где и что мне необходимо сделать.

Хотя лично для меня комфортнее все же не переключаться между задачами до тех пор, пока имеет место необходимость в подобнои комментарии (т.е. пока задача не решена целиком).

LD>2. Как вы пишите код? Я предпочитаю написать кусочек (законченный), протестить его и двигаться дальше. Мне так удобнее. Знаю, что есть люди, которые могут неделю писать код, а потом его начинают отлаживать. Эти люди говорят, что им тяжело переключаться с задачи разработки (дизайна) на отладку.


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

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[2]: Кто как пишет код
От: FR  
Дата: 18.12.09 08:00
Оценка: :)
Здравствуйте, McSeem2, Вы писали:


MS> Как оценить стоимость строки кода, если я за сегодня написал минус тысячу строк? Мнимое значение за действительные деньги.


По модулю комплексного числа
Re[8]: Кто как пишет код
От: yumi  
Дата: 23.12.09 12:04
Оценка: :)
Здравствуйте, FR, Вы писали:

Y>> я что-то пропустил? Можете подробнее раскрыть тему?


FR>Умные указатели + контейнеры для прикладного кода практически полностью исключают необходимость

FR>в delete, new конечно используется но только в конструкторах этих самых умных указателей.
FR>Ну и основная причина (кроме сложности следить за временем жизни вручную) это то что такой
FR>стиль позволяет автоматически писать безопасный и корректный в отношении исключений код.

А, всего-то А то я подумал, нечто новое и клевое появилось
Lisp is not dead. It’s just the URL that has changed:
http://clojure.org
Re[6]: Кто как пишет код
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 27.12.09 20:28
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S> Как избавиться от ref, помимо генерации кучи структур/классов только для передачи параметров —


ref очень сильно загаживает использующий код. Так что, если метод вызывается хотя бы в паре мест, таки лучше объявить класс. Либо использовать анонимные типы.
... << RSDN@Home 1.2.0 alpha 4 rev. 1324 on Windows 7 6.1.7600.0>>
AVK Blog
Кто как пишет код
От: Lonely Dog Россия  
Дата: 16.12.09 10:04
Оценка:
Привет!

Есть пара вопросов по предпочтениям к организации своего труда:
1. Как вы относитесь к многозадачности? Есть люди, которые не могут делать больше одной задачи одновременно. Есть те, кто могут.
2. Как вы пишите код? Я предпочитаю написать кусочек (законченный), протестить его и двигаться дальше. Мне так удобнее. Знаю, что есть люди, которые могут неделю писать код, а потом его начинают отлаживать. Эти люди говорят, что им тяжело переключаться с задачи разработки (дизайна) на отладку.
Re: Кто как пишет код
От: Hobot Bobot США  
Дата: 16.12.09 10:09
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

LD>Есть пара вопросов по предпочтениям к организации своего труда:

LD>1. Как вы относитесь к многозадачности? Есть люди, которые не могут делать больше одной задачи одновременно. Есть те, кто могут.

Мне сложно работать в многозадачном режиме, очень много времени уходит на "переключение контекста".

LD>2. Как вы пишите код? Я предпочитаю написать кусочек (законченный), протестить его и двигаться дальше. Мне так удобнее. Знаю, что есть люди, которые могут неделю писать код, а потом его начинают отлаживать. Эти люди говорят, что им тяжело переключаться с задачи разработки (дизайна) на отладку.


Обычно тоже "кусочничаю", хотя, в зависимости от проекта и от стадии реализации, куски могут быть довольно крупными.
What a piece of work is a man! how noble in reason! how infinite in faculty! in form and moving how express and admirable! in action how like an angel! in apprehension how like a god! the beauty of the world! the paragon of animals!
Re: Кто как пишет код
От: avishnyakov  
Дата: 16.12.09 10:20
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

LD>1. Как вы относитесь к многозадачности? Есть люди, которые не могут делать больше одной задачи одновременно. Есть те, кто могут.

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

LD>2. Как вы пишите код? Я предпочитаю написать кусочек (законченный), протестить его и двигаться дальше. Мне так удобнее. Знаю, что есть люди, которые могут неделю писать код, а потом его начинают отлаживать. Эти люди говорят, что им тяжело переключаться с задачи разработки (дизайна) на отладку.

Дроблю на маленькие части, идем от малого к большему — или тестами, или сразу кодом.
Или наброски какие то делаю — будет работать или нет, можно сделать или нет. Потом выкидываю и пишу нормально.
Re: Кто как пишет код
От: любой  
Дата: 16.12.09 10:24
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

LD>1. Как вы относитесь к многозадачности? Есть люди, которые не могут делать больше одной задачи одновременно. Есть те, кто могут.

Если нужно переключаться, то приходится. Но это понижает КПД.

LD>2. Как вы пишите код? Я предпочитаю написать кусочек (законченный), протестить его и двигаться дальше. Мне так удобнее. Знаю, что есть люди, которые могут неделю писать код, а потом его начинают отлаживать. Эти люди говорят, что им тяжело переключаться с задачи разработки (дизайна) на отладку.

Предпочитаю отлаживать сразу, если это не требует ощутимых затрат на имитацию незаконченных модулей. А поскольку часто требует, то порой и неделю, да хоть месяц, могу не запускать то, что пишу. Конечно, такой подход предполагает использование широкого спектра средств отладки (аппаратные точки останова на изменения переменных, контроль выхода за пределы блока памяти). Иначе тяжело распутать всю цепочку от причины до проявления бага.
художников никогда не обижал
Re: Кто как пишет код
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 16.12.09 11:53
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

LD>1. Как вы относитесь к многозадачности? Есть люди, которые не могут делать больше одной задачи одновременно. Есть те, кто могут.


Одну задачу делать скучно. Это должна быть действительно достойная интересная трудная задача. Обычные рутинные задачи обычно совмещаю с просмотром видео, чатом по ICQ, иногда чтением. Мониторы широкие, все помещается.

LD>2. Как вы пишите код? Я предпочитаю написать кусочек (законченный), протестить его и двигаться дальше. Мне так удобнее. Знаю, что есть люди, которые могут неделю писать код, а потом его начинают отлаживать. Эти люди говорят, что им тяжело переключаться с задачи разработки (дизайна) на отладку.


От задачи зависит, иногда законченный кусочек надо писать неделю. Иногда пишу через пилотный вариант. Но в целом кусочки (и тесты) больше одного метода.
Re[2]: Кто как пишет код
От: Lonely Dog Россия  
Дата: 16.12.09 13:37
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Все предпочитают простые, мелкие задачи. Но бывают задачи которые бессмысленны в упрощенном варианте. Вот тогда и приходится неделями писать код.

И вам это не доставляет проблем или неудобств?
Re[3]: Кто как пишет код
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 16.12.09 14:14
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

LD>И вам это не доставляет проблем или неудобств?


А шо делать???
Re: Кто как пишет код
От: Sinix  
Дата: 17.12.09 01:48
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

LD>Есть пара вопросов по предпочтениям к организации своего труда:

LD>1. Как вы относитесь к многозадачности?
В принципе легко — опыт работы в хроническом дедлайногенераторе с вытесняющими приоритетами. Но ничего хорошего в этом нет: переключение контекста — дорогая операция.

LD>2. Как вы пишите код?

Максимально быстро пишется прототип + теоретические сценарии использования. Изредка прямо во время обсуждения, гораздо чаще — карандашик + бумажка. Затем пишется рабочий код и проверяются все требования, потенциально влияющие на дизайн, костыли выносятся в библиотеку компонент и т.п. И напоследок — тщательное вылизывание кода, StyleCop, FxCop, если есть свободное время — xml-комментарии. Всё.

Главное, что я для себя выяснил — никогда не откладывать последний этап "на потом". Так и останетесь с горой неподдерживаемого кода.
Re: Кто как пишет код
От: Pavel Dvorkin Россия  
Дата: 17.12.09 06:27
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

LD>Привет!


LD>Есть пара вопросов по предпочтениям к организации своего труда:

LD>1. Как вы относитесь к многозадачности? Есть люди, которые не могут делать больше одной задачи одновременно. Есть те, кто могут.

Отношусь нормально, при условии. что этим не придется заниматься в течение одного и того же рабочего дня. Завтра можно. А вообще это вопрос о приоритетах.

LD>2. Как вы пишите код? Я предпочитаю написать кусочек (законченный), протестить его и двигаться дальше. Мне так удобнее.


Мне тоже. Но далеко не всегда так возможно. Серьезный фрагмент может потребовать большого времени на написание, лишь только когда он будет готов, можно его отлаживать.


>Знаю, что есть люди, которые могут неделю писать код, а потом его начинают отлаживать.


Вполне возможно, хоть и не люблю я этого.

>Эти люди говорят, что им тяжело переключаться с задачи разработки (дизайна) на отладку.


Ну уж это нет. Пока алгоритмы и структуры данных я не продумал до мельчайших деталей, я и строчки не напишу. Себе дороже выйдет.
With best regards
Pavel Dvorkin
Re[2]: Кто как пишет код
От: jenyavb  
Дата: 18.12.09 08:44
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Все зависит от области решаемых задач. У меня, например, на выходе — процентов 5 хорошего, годного программного кода. Все остальное — эксперименты и тесты, которые в итоге без мелейшего сожаления идут в мусорку. Это как листочки бумаги, которые накапливаются на столе, а потом сгребаются и выкидываются. И я честно скажу, совершенно не понимаю, как можно целую неделю дубасить текст программы, и только потом его начинать отлаживать. Уверен, что получается криво и глючно. Но с точки зрения быдлокодинга я наверное рекордсмен по неэффективности. Мой средний норматив — 5-10 строк в день. Иногда получается -1000, это означает, что найдено более изящное решение в замен старому. Как оценить стоимость строки кода, если я за сегодня написал минус тысячу строк? Мнимое значение за действительные деньги.


У меня та же проблема. Но с увеличением опыта количество выброшенного кода уменьшается.
... << RSDN@Home 1.2.0 alpha 4 rev. 1325>>
Re[3]: Кто как пишет код
От: Sinix  
Дата: 18.12.09 09:58
Оценка:
Здравствуйте, jenyavb, Вы писали:

J>У меня та же проблема. Но с увеличением опыта количество выброшенного кода уменьшается.


Не везде и не всегда. Для библиотечного кода — точно. Приходится писать гору прототипов, следить чтобы кодом было удобно пользоваться и чтобы он не был сложен для использования.

Вот вам практический пример.
Есть регулярная задачка "обойти структуру папок и сгенерить аналогичную структру, но с другими данными".
При этом
а) некоторые папки надо пропустить.
б) имена папок/файлов в папке назначения могут различаться и об этом надо знать вызывающему коду.

А вот как оно выглядит сейчас (см код и пример ниже, убраны проверки, на практике лучше не использовать).

Страшно? Так вот этот код с марта
1) существовал как один метод
2) был вынесен в библиотеку компонентов
3) параметры были объединены в структуру
4) был вынесен в отдельный класс, унаследованный от Component (раздулся втрое и стал вообще неподдерживаемым)
5) приведён к текущему виду и отмечен как // DONTTOUCH. Кстати, такие комментарии в Task List window — великое дело.

Придумаете как это написать красивее?

    public delegate void DirectoryCallback(
      string source, ref string destination,
      ref bool newDestinationContainer, out bool skipSubitems);

    public delegate void FileCallback(
      string source, ref string destination,
      bool newDestinationContainer);

    public static void VisitAll(
      string source, ref string destination,
      DirectoryCallback directoryCallback, FileCallback fileCallback)
    {
      if (source.EndsWith("\\") || source.EndsWith("/"))
      {
        VisitAllInternal(
          source, ref destination,
          directoryCallback, fileCallback,
          !Directory.Exists(Path.GetDirectoryName(destination)));
      }
      else
      {
        fileCallback(
          source,
          ref destination,
          !Directory.Exists(Path.GetDirectoryName(destination.TrimEnd('\\','/'))));
      }
    }

    private static void VisitAllInternal(
      string source, ref string destination,
      DirectoryCallback directoryCallback, FileCallback fileCallback, bool newDestinationContainer)
    {
      bool skip = false;
      if (directoryCallback != null)
      {
        directoryCallback(source, ref destination, ref newDestinationContainer, out skip);
      }

      if (!skip)
      {
        if (fileCallback != null)
        {
          foreach (string fileName in Directory.GetFiles(source))
          {
            string destFile = destination + fileName.Substring(source.Length);
            fileCallback(fileName, ref destFile, newDestinationContainer);
          }
        }

        foreach (string dir in Directory.GetDirectories(source))
        {
          string sourceDir = dir + "\\";
          string destDir = destination + sourceDir.Substring(source.Length);
          VisitAllInternal(sourceDir, ref destDir, directoryCallback, fileCallback, newDestinationContainer);
        }
      }
    }


Пример использования (хотя для такой простой задачи это оверкилл):
    public static void Copy(string source, string destination)
    {
      VisitAll(source, ref destination,
        delegate(string dir, ref string destDir, ref bool newDestinationContainer, out bool skip)
        {
          if (newDestinationContainer || !Directory.Exists(destDir))
          {
            Directory.CreateDirectory(destDir);
            newDestinationContainer = true;
          }
          skip = false;
        },
        delegate(string file, ref string destFile, bool newDestinationContainer)
        {
          File.Copy(file, destFile, !newDestinationContainer);
        });
    }
Re[4]: Кто как пишет код
От: jenyavb  
Дата: 18.12.09 12:37
Оценка:
Здравствуйте, Sinix, Вы писали:

J>>У меня та же проблема. Но с увеличением опыта количество выброшенного кода уменьшается.

S>Не везде и не всегда. Для библиотечного кода — точно. Приходится писать гору прототипов, следить чтобы кодом было удобно пользоваться и чтобы он не был сложен для использования.

Эло не противоречим моему утверждению.

S>Вот вам практический пример.

S>Придумаете как это написать красивее?

Избавился бы от делегатов в пользу лямбд и от ref-параметров в пользу возврата звачений. Ну и вообще может быть стоило бы придумать универсальный алгоритм для обхода деревьев со значением-аккомулятором. Хотя я не очень вникал.
... << RSDN@Home 1.2.0 alpha 4 rev. 1325>>
Re[3]: Кто как пишет код
От: McSeem2 США http://www.antigrain.com
Дата: 19.12.09 00:26
Оценка:
Здравствуйте, jenyavb, Вы писали:

J>У меня та же проблема. Но с увеличением опыта количество выброшенного кода уменьшается.


А у меня увеличивается, поскольку все больше ухожу в экспериментальные области. Ну, конечно же никакой код я не удаляю, он просто скапливается в неком отстойнике, но продакшен идут только тщательно отполированные вещи. Года полтора назад ездил на интервью в Autodesk и беседовал с ихним CTO. Так он тоже очень любит программировать и отрабатывать всяческие идеи. Но конечно же, ни одной строчки из его кода не идет в продукты — если что-то и получается, то все тщательно передизайнивается и переписывается другими людьми. В общем-то, я стремлюсь к тому же, то есть, фактически к нулевой производительности.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[5]: Кто как пишет код
От: Sinix  
Дата: 19.12.09 04:00
Оценка:
Здравствуйте, jenyavb, Вы писали:

S>>Вот вам практический пример.

S>>Придумаете как это написать красивее?

J>Избавился бы от делегатов в пользу лямбд и от ref-параметров в пользу возврата звачений.

WTF??? Вы имеете в виду использовать сокращённый синтаксис без слова delegate?
(есть ref-параметры — надо явно указывать типы всех параметров). Как избавиться от ref, помимо генерации кучи структур/классов только для передачи параметров —

J>Ну и вообще может быть стоило бы придумать универсальный алгоритм для обхода деревьев со значением-аккомулятором.

Универсальный алгоритм... это будет хелпер для хелпера для хелпера. Нафиг-нафиг.
Re[4]: Кто как пишет код
От: yumi  
Дата: 19.12.09 13:16
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>А у меня увеличивается, поскольку все больше ухожу в экспериментальные области. Ну, конечно же никакой код я не удаляю, он просто скапливается в неком отстойнике, но продакшен идут только тщательно отполированные вещи. Года полтора назад ездил на интервью в Autodesk и беседовал с ихним CTO. Так он тоже очень любит программировать и отрабатывать всяческие идеи. Но конечно же, ни одной строчки из его кода не идет в продукты — если что-то и получается, то все тщательно передизайнивается и переписывается другими людьми. В общем-то, я стремлюсь к тому же, то есть, фактически к нулевой производительности.


Кстати, у меня сейчас нечто похожее. В данный момент пишем на С++ и своем DSL, я свои идеи пишу на С++ и отдаю своим коллегам (хотя пишу я уже редко), а они уже все это дело доводят до ума. И только недавно заметил, что в С++ я вообще, ни разу не использую оператор delete Зато оператор new использую с избытком. И garbage collector никакой не нужен
Lisp is not dead. It’s just the URL that has changed:
http://clojure.org
Re[6]: Кто как пишет код
От: jenyavb  
Дата: 19.12.09 14:14
Оценка:
Здравствуйте, Sinix, Вы писали:

J>>Избавился бы от делегатов в пользу лямбд и от ref-параметров в пользу возврата звачений.

S>WTF??? Вы имеете в виду использовать сокращённый синтаксис без слова delegate?

И ещё использовать Func/Action вместо создания типов-делегатов.

S>(есть ref-параметры — надо явно указывать типы всех параметров).


В лямбдах типы можно указывать явно.

S>Как избавиться от ref, помимо генерации кучи структур/классов только для передачи параметров —


Ну вот над этим я бы и подумал, ref в публичном методе, это имхо не хорошо.

J>>Ну и вообще может быть стоило бы придумать универсальный алгоритм для обхода деревьев со значением-аккомулятором.

S>Универсальный алгоритм... это будет хелпер для хелпера для хелпера. Нафиг-нафиг.

Так это наоборот же хорошо.
Re[5]: Кто как пишет код
От: McSeem2 США http://www.antigrain.com
Дата: 19.12.09 15:37
Оценка:
Здравствуйте, yumi, Вы писали:

Y>Кстати, у меня сейчас нечто похожее. В данный момент пишем на С++ и своем DSL, я свои идеи пишу на С++ и отдаю своим коллегам (хотя пишу я уже редко), а они уже все это дело доводят до ума. И только недавно заметил, что в С++ я вообще, ни разу не использую оператор delete Зато оператор new использую с избытком. И garbage collector никакой не нужен


new/delete в прикладном коде — это вообще моветон. Надо пользоваться контейнерами.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re[4]: Кто как пишет код
От: VoidEx  
Дата: 19.12.09 17:27
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Вот вам практический пример.

S>Есть регулярная задачка "обойти структуру папок и сгенерить аналогичную структру, но с другими данными".
S>При этом
S>а) некоторые папки надо пропустить.
S>б) имена папок/файлов в папке назначения могут различаться и об этом надо знать вызывающему коду.

S>
S>// skipped
S>


Ух. А чем банальный фильтр + отображение не угодил?

data Tree a = Leaf a | Branch a [Tree a] deriving (Read, Show)

-- А вот и тот самый универсальный алгоритм обхода.
foldTree leaf _ (Leaf v) = leaf v
foldTree leaf branch (Branch v vs) = branch v $ map (foldTree leaf branch) vs

getDirectoryTree path = liftM (Branch path) subPaths where
    subPaths = do
        cts <- liftM (map (path </>) . filter (`notElem` [".", ".."])) $ getDirectoryContents path
        (files, dirs) <- mapM doesFileExist cts >>= return . (map fst *** map fst) . (filter snd &&& filter (not . snd)) . zip cts
        dirTrees <- mapM getDirectoryTree dirs
        return $ map Leaf files ++ dirTrees
filterDirectories f = foldTree (return . Leaf) (\d subs -> sequence subs >>= filterM f_ >>= return . Branch d) where
    f_ path = case path of
        Leaf file -> f file False
        Branch dir _ -> f dir True
mapDirectories f = foldTree (\file -> liftM Leaf (f file)) (\dir subs -> liftM2 Branch (f dir) (sequence subs))
eachFilePath f = foldTree f (\dir subs -> f dir >> sequence_ subs)

withDirectoryTree :: FilePath -> (FilePath -> Bool -> IO Bool) -> (FilePath -> IO FilePath) -> (FilePath -> IO ()) -> IO ()
withDirectoryTree path filterPath mapPath actPath = getDirectoryTree path >>= filterDirectories filterPath >>= mapDirectories mapPath >>= eachFilePath actPath


Использование:
withDirectoryTree "c:\\some\\folder" (\path b -> return (b || path =~ ".mp3")) (\path -> return $ replaceExtension path "exe") putStrLn
Re[5]: Кто как пишет код
От: Sinix  
Дата: 21.12.09 01:12
Оценка:
Здравствуйте, VoidEx, Вы писали:

VE>Ух. А чем банальный фильтр + отображение не угодил?


Тем, что фильтр шарит состояние с обработкой. Можно конеш, но придётся гаранировать ленивую обработку.
Re[6]: Кто как пишет код
От: yumi  
Дата: 22.12.09 10:43
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>new/delete в прикладном коде — это вообще моветон. Надо пользоваться контейнерами.


я что-то пропустил? Можете подробнее раскрыть тему?
Lisp is not dead. It’s just the URL that has changed:
http://clojure.org
Re: Кто как пишет код
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 27.12.09 20:18
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

LD>1. Как вы относитесь к многозадачности? Есть люди, которые не могут делать больше одной задачи одновременно. Есть те, кто могут.


Я наоборот, не могу заниматься единственной задачей долго. Основная проблема — глаз замыливается. Стоит отойти от кода, постоять недельку в сторонке, и уже начинаешь недоумевать местами, как такую простую и очевидную вещь не заметил.
Вторая задача помогает периодически от задачи отходить без простоя.

LD>2. Как вы пишите код?


Сам понимаешь, на такой общий вопрос ответить невозможно.

LD>Я предпочитаю написать кусочек (законченный), протестить его и двигаться дальше. Мне так удобнее.


ИМХО вопрос опыта. Чем больше опыт, тем больше такие кусочки. А так все правильно, только это лишь один аспект из множества. В agile, к примеру, подобный подход трактуется несколько более специфично.

LD> Знаю, что есть люди, которые могут неделю писать код, а потом его начинают отлаживать.


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

LD> Эти люди говорят, что им тяжело переключаться с задачи разработки (дизайна) на отладку.


ИМХО, это опять вопрос опыта.
... << RSDN@Home 1.2.0 alpha 4 rev. 1324 on Windows 7 6.1.7600.0>>
AVK Blog
Re[2]: Кто как пишет код
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 27.12.09 20:28
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Главное, что я для себя выяснил — никогда не откладывать последний этап "на потом". Так и останетесь с горой неподдерживаемого кода.


А что мешает сразу писать хорошо?
... << RSDN@Home 1.2.0 alpha 4 rev. 1324 on Windows 7 6.1.7600.0>>
AVK Blog
Re: Кто как пишет код
От: _FRED_ Черногория
Дата: 28.12.09 07:58
Оценка:
Здравствуйте, Lonely Dog, Вы писали:

LD>Есть пара вопросов по предпочтениям к организации своего труда:

LD>1. Как вы относитесь к многозадачности? Есть люди, которые не могут делать больше одной задачи одновременно. Есть те, кто могут.
LD>2. Как вы пишите код? Я предпочитаю написать кусочек (законченный), протестить его и двигаться дальше. Мне так удобнее. Знаю, что есть люди, которые могут неделю писать код, а потом его начинают отлаживать. Эти люди говорят, что им тяжело переключаться с задачи разработки (дизайна) на отладку.

Вспоминал. Действительно, от задачи зависит: при багфиксинге за небольшое время удаётся исправить много кода из самых разных мест за совсем небольшое время.

При проектировании бывает, неделю можно писать, ни разу не запустив даже компилятор.
Бывает что наоборот, говорю, что "эта задача должна отлежаться, не напрягайте пока с ней, я посмотрю на неё через пару деньков" и берусь за что-то другое. Это позволяем по-свежему взглянуть на что-то долгоделающееся.
Когда-то наоборот приходится просить, что бы ничем не отвлекали от той задачи, что делается сейчас, а то ничего хорошего не получится — мысль упущу.
Некоторые задачи получается решить наоборот — не долгими экспериментами и проектированиями, а множеством мелких разноплановых, но направленных на одно решение изменений. Это проведение рефакторинга, когда из множества изменений каждое не слишком велико, но множество их позволяет существенно "внутри" переделать код.

То же самое и с отладкой и тестированием. Когда-то, что бы двигаться дальше надо сначала убедиться, что всё сделанное сейчас работает правильно, а когда-то это не важно — нужно набросать общую картину, потом докорректировать её, довести до ума и тогда уже тестить.

ИМХО, более интересный вопрос — не то, "как вы решаете задачи", а "как вы принимаете решение, каким образом лучше решить данную задачу в данном проекте в данное время (за назначенный срок :о) )"
Help will always be given at Hogwarts to those who ask for it.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.