April 27th, 2012

vit_r

Про живое и мёртвое

juan_gandhi пишет в своём блоге вот такое

ResourceRepositoryManager rrm = new ResourceRepositoryManagerImpl(resourceRepository, databaseManagementFuckingShit, remoteAccessRemoteControl, remoteAccessLocalControl, localAccessRemoteControl, localAccessLocalControl, userId, customerId, itemIdContainerImpl)


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

Да, так учат писать Гугл и Микрософт (у них дофига бабла), так учат писать авторы умных книжек, код которых можно использовать, если к нему прикреплено две введения и три страницы разбора, так пишут гуру новейших языков, чтобы удивить и поразить начинающих адептов, так повторяют за ними миллионы леммингов, которым главное скормить код компилятору, чтоб потом ухватиться за очередную «сложную задачу»

Дюжину лет назад я начал писать «The Dragon of The Source Code». Кое-кто даже видел черновик. Потом я забросил, потому как это оказалось никому не нужно. Людям нужна магия. И, желательно, с очень дорогим тулом.

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

Та же строчка в промышленной разработке выглядит вот так
ResourceRepositoryManager rrm 
  = new ResourceRepositoryManagerImpl(  
                                                // 
           resource_repository                  //
         , database_management_fucking_shit     //FIXME: does not work 4 test
                                                //       if customerId == 0 

                                                //== Remote
         , remote_access_remote_control         // 
         , remote_access_local_control          //

                                                //== Local
         , local_access_remote_control          // 
         , local_access_local_control           //       4 test or 4 production

                                                //== IDs
         , user_ID                              // 
         , customer_ID                          //     ! may be 0

                                                // WTF?
         , item_ID_Container_Impl               //     !? optional
         ) ; 


Я не буду тут объяснять, почему. Что-то просто для красоты, вроде //== У чего-то есть важные причины. Та же запятая в начале не просто маркирует колонку, продолжает блок и останавливает взгляд, но и позволяет с наименьшей болезненностью произвести манипуляции вроде
         //TEST  , item_ID_Container_Impl               //     !? optional


Какие процессы, какие lean и kanaban, какая инженерия и конвейер, если хитромудрейшие из программистов не в состоянии писать живой код.

Ладно, в последнее время чего-то слишком много про программизм. Сейчас будут картинки.
vit_r

Про сплав Европы и Азии

The image is full of passion and energy - it's also joyful and refreshing.
Wenjun Lin о картине ниже в интервью «Imagine FX» номер 77

Это я продолжаю рыть Imagine FX. На этот раз купил рождественский номер с дальневосточными темами.
Хотел вставить эту картинку в пост Про советскую карательную медицину и заметил интересный феномен. Полез смотреть - подтвердилось.
Collapse )