vit_r (vit_r) wrote,
vit_r
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, какая инженерия и конвейер, если хитромудрейшие из программистов не в состоянии писать живой код.

Ладно, в последнее время чего-то слишком много про программизм. Сейчас будут картинки.
Tags: it, psychology, qa, ru, se, usability
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 19 comments