Программирование и литература

Tolstoy
Задумывались ли вы когда-нибудь о том, как программисты создают программы?
Если говорить кратко и банально - они их пишут!
Пишут также, как авторы книг пишут свои сочинения - набирают текст, любуются им, читают его, думают об эффекте, который вызовет каждое слово в тексте.
По сути между литературой и программированием есть одно очень важное отличие - у программиста есть компилятор (или интерпретатор) и четкая задача (ну, это уже как повезет). Автор книги же не имеет практически никаких способов проверить “правильность” своей “программы”-книги.
Как же авторы книг тогда пишут свои произведения и чему мы - авторы-программисты, можем и должны научиться у литературных авторов?


Давайте для начала сравним культуру книгописания и книгочитания с культурой кодописания и кодочитания.
Очевидно, что литературные авторы тут в гораздо лучшей ситуации - им доступны любые книги любых авторов, созданные за последние несколько сотен лет. А с развитием интернета и цифровых книг ситуация еще больше улучшилась. Авторы могут читать лучшие и популярнейшие произведения своих “конкурентов” и предшественников, находить там гениальные места, черпать оттуда вдохновение, изучать сильные приемы признанных авторов и, главное - учиться у них!
Да-да. В этом вся соль - каждый новый автор может учиться у всех предшественников, ведь все их произведения открыты. Причем он заранее знает насколько удачное это произведение, как оно было воспринято читателями, может почитать обзоры и т.п. - получить полную информацию о произведении.



А теперь посмотрим на авторов-программистов. Что у нас есть почитать? Много ли кода из самых успешных проектов вы читали? Скажем, из MS Word. Или из Windows7. Или хотя бы из компилятора C++.
Все крупные компании закрывают свой код от внешних глаз, даже куски этого “ценнейшего кода” нельзя никому показывать. Глупо.
Проводя аналогию с литературой - представьте, что книги, которые издают авторы, могут читать только работники издательства. В итоге, книги Донцовой читают только в издательстве Эксмо, а книги Лукьяненко - только работники издательства АСТ. Хочешь прочесть новую книгу Лукьяненко? Хочешь приобщиться к “великому”? Иди работать в АСТ! В каком бы состоянии сейчас была литература в этом случае? Каждый автор бы изобретал свои велосипеды, придумывал бы свои “законы жанра”, создавал бы длинные, скучные и никому не интересные произведения. Или наоборот - изредка рождались бы короткие и гениальные произведения. Но кто бы их смог прочитать и у них поучиться?
Звучит знакомо? Ведь так сейчас и происходит. Софтверные компании хранят свой код под замком. Хочешь его увидеть - иди работать к ним.
Да и надо признать, что даже внутри одной компании никто не читает чужой код - это просто не принято. Как раз из-за того, что нас-программистов учат изначально быть индивидуалистами. Нас не учат читать чужой код, хотя должны бы. Нас вообще по сути не учат даже свой код читать - нас учат писать код для компилятора, а не для человека-читателя.


В университетах нет курса “Чтение кода”, хотя он бы не помешал - сейчас есть множество OpenSource кода, который можно было бы читать в рамках этого курса.
Например предмет литературы в школе - кому и зачем он нужен? Именно чтобы привить любовь к чтению хорошей литературы. Также надо прививать любовь и к чтению хорошего кода. С детства.
Чтобы по вечерам читать не только книги, но и заходить на SourceForge, выбирать там популярный проект и читать его код, учиться и запоминать.
Чтобы, придя в новую компанию, начинать не с чтения документации, а с чтения кода. Чтобы через месяц-два-шесть каждый новый сотрудник уже прочел весь код в компании! Весь. Это не так сложно, но очень полезно.


Да, последние годы ситуация меняется.
Программисты начинают понимать, что индивидуализм - это тупик. Некоторые участвуют в OpenSource проектах, но все еще очень малый процент программистов делает это. Да и читают ли они весь код такого проекта? Нет - они просто делают фикс или фичу, которую хотят, а на остальной код даже не смотрят. Ибо опять же - это не принято в нашей среде.
Важнейшей частью изменений, которые сейчас происходят - это то, что появляется очень много программерских блогов. Программисты начинают писать что-то, пытаться делиться друг с другом мыслями, подходами и способами работы, даже фрагментами кода. В чем плюсы такого общения?
Мы учимся писать не для компилятора, а для людей! И мы учимся читать других программистов и их код!
Это очень важно. Это совсем другой уровень обучения. Мы уже больше не индивидуалисты - мы делимся проблемами, идеями, исследованиями, даже программами и кусками кода.
А умение писать красиво и грамотно тексты для людей помогает также писать красивый и грамотный код.
Я привык, что мои тексты читает много людей, поэтому я и код теперь стараюсь писать красиво. Это получается само собой - мне не нравится некрасивый код, я представляю себе не только компилятор, который будет его “читать”, но и других людей, поэтому и пишу код немного по-другому. Проще и понятнее. Даже если другой человек - это буду только я через год-два, то это уже неплохо, не правда ли?


Вот такие мысли. Резюмируя:
- Время индивидуалистов прошло.
- Читайте чужой код.
- Пишите блог или статьи - учитесь писать для людей.
- Пишите код не только для компилятора, но и для людей, которые его будут читать.


Похожие записи:
За что я люблю программирование
Канбан в IT (Kanban Development)
Software Engineering is Dead?!
Исключения и goto

62 комментариев к Программирование и литература

  • Владимир

    Схожесть между Толстым и создателем STL библиотеки не очевидна. Интересно, смог бы он продать первые несколько глав на черновике? Но в общем - согласен: код который нельзя прочитать, это все равно что код скомпилированный - иногда разобраться в его дизассеблированной версии бывает проще.

  • vit_r

    > Да, последние годы ситуация меняется.

    Хорошо быть первопроходцем…

    Donald Knuth. “Literate Programming (1984)” in Literate Programming. CSLI, 1992, pg. 99.

    I believe that the time is ripe for significantly better documentation of programs, and that we can best achieve this by considering programs to be works of literature. Hence, my title: “Literate Programming.”

    http://www.literateprogramming.com/

    А теперь вопрос: почему это всё провалилось, провалится и будет проваливаться?

    • Да, Кнут - главный апологет и сторонник теории, что программирование - это искусство. Собственно, эта моя статья во многом основывается на статьях и выступлениях Кнута, которые я последнее время изучаю. Очень умный мужик и жалко, что так мало программистов изучают его работы.

      >>А теперь вопрос: почему это всё провалилось, провалится и будет проваливаться?
      А это мы еще посмотрим :) Если мне в работе это помогает, то я буду применять. Потом еще кто-то. Потом еще. И в итоге вдруг окажется, что большинство пишет красиво и хорошо.
      Ну и OpenSource развивается…

  • готовое литературное произведение не дает рецептов того, как можно структурировать свои идеи и мысли и получить хороший результат. штудирование Толстого не даст вам ключа к способу написания батальных сцен так же хорошо, как это сделано в Войне и Мире.

    и вывод о том, что время индивидуалистов прошло, из вашего текста не прослеживается

    • У писателей (наоборот конечно, но все же) есть аналоги “шаблонов проктирования”, “best practices”, “code review” и многого другого. В конце концов есть специальности в университетах, где учат как правильно писать и читать литературные произведения. А насчет батальных сцен - сколько Open Source проектов существует, и сколько из них могут приравниваться к “Войне и Миру” в мире ПО?

      • на sourceforge зарегистрированно более 150K проектов, но есть и другие площадки. приравнивать к Войне и Миру бессмыслено, это как сравнение теплого с мягким. важно другое — чтение программных проектов не научит вас программировать, так же, как и чтение Войны и Мира не научит вас писать. можно разве что взять отдельные готовые, чужие куски. поскольку из готового текста (литературного или программного) вы не поймете “почему”, этому нужно учиться (что и делают при обучении литературе и программированию). но делают это производя глубокий анализ и раскладывание по полочкам, в проведении которого используют как пояснения самих авторов, так и черновики произведений, так и исторический фон.

        • Я же не говорю про то, что чтение кода научит кого-то программировать!
          Я говорю только, что это поможет писать более качественный и понятный код. Более “ровный”, чтоли.

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

      • >> и сколько из них могут приравниваться к “Войне и Миру” в мире ПО?

        Если посмотреть число строк или слов в “Войне и мире” и сравнить это даже с небольшим проектом, то сравнение будет не в пользу первого. :) Вообще, программисты выдают больше текста, чем литераторы. И софтварные проекты много более сложны, чем литературные.

    • >> готовое литературное произведение не дает рецептов того, как можно структурировать свои идеи и мысли и получить хороший результат.

      Этому чужой пример не научит - факт. Поэтому читатель - не писатель. И поэтому не программист, прочитавший пару томов кода ядра Linux, не станет вдруг программистом.
      Но если автор книг не читает другие книги, ну вот вообще не читает - это уже патология.
      А вот программист, не читающий другой код - это почему-то не патология.

      >> и вывод о том, что время индивидуалистов прошло, из вашего текста не прослеживается

      Это как обобщение идеи “делитесь своим кодом и изучайте чужой”.

      • А вот программист, не читающий другой код - это почему-то не патология.
        не очевидно, что количество таких программистов сколько-нибудь существенно. практически всем приходится читать чужой код. особенно при использовании opensource компонентов у себя в проекте (поскольку они обычно хуже документированны).
        не говоря уже о том, что даже собственный код через полгода-год после написания уже чужой

        • >>практически всем приходится читать чужой код.

          Не верно. Читают только когда и что нужно. Это примерно, как читать счета и письма из налоговой, приходящие домой и не читать книг\статей\блогов.

          • Читают только когда и что нужно. Это примерно, как читать счета и письма из налоговой, приходящие домой и не читать книг\статей\блогов.

            интересно, а как вы себе это представляете? приходит человек с работы домой, и говорит сам себе — чтобы мне такое перед сном прочитать: код по построению конечного автомата из pcre или реализацию загрузки war-ов в jboss-е?

            • Именно так.
              Или даже можно организовать голосовалку за проекты на том же SouceForge - чтобы можно было выделять лучшие куски кода и голосовать за них. Пришел вечером, зашел на сайт, выбрать тему и там почитал лучшие реализации.

  • Что самое интересное - мир разработки ПО имеет довольно серьезные сдвиги в сторону Open Source, а вот мир литературы - http://www.openspace.ru/news/details/11900/

    • Я всё жду закона. Например, что любая программа, продающаяся на территории Европы или США должна иметь открытый код.
      Это будет шок вначале, но через несколько лет это выльется в прорыв - прорыв в технологиях, в скорости разработки, в качестве. Да и фирмам будет выгоднее - они смогут продавать куски своего кода. Ведь украсть его будет уже невозможно, т.к. укравший должен будет открыть и свой код тоже и кража станет заметна.
      Win-Win.

  • CrazyCoder

    - Видел книжки по чтению чужого кода, так что разработки методологий обучения идут. Хотя и очень медленно, имхо. :)
    - Если проводить параллель не с литературой, а с инженерией или с архитектурой то существование закрытых проектов совсем не удивительно. После Макконелла мне аналогия с литературой вообще не очень близка.
    - К опенсоурсу и необходимости писать красиво, имхо, каждый приходит в ходе личного развития. Ещё 2 года назад опенсорс казался мне чем-то странным и бессмысленным. Так же, до захода на gamedev.ru многие считают что у них есть гениальная и уникальная идея игры которую можно продать. Просто сначала ты мыслишь функцией, затем проектом, затем серией проектов и тут понимешь что и писать нужно так чтобы читать потом, и помощь бы сообщества не помещала бы и авторские права защитить неплохо бы. И публикация кода как опенсорс позволяет решить эти вопросы.

    • >>- Видел книжки по чтению чужого кода,

      Это как? Дай ссылку :)
      >>и помощь бы сообщества не помещала бы и авторские права защитить неплохо бы. И публикация кода как опенсорс позволяет решить эти вопросы.

      И я о том же! Большинство считае OpenSource проблемой, т.к. код смогут украсть. Но на самом деле же наоборот - ты свой код показываешь, получаешь бонусы в распределенном поиске багов и заодно получаешь некую защиту своих прав и копирайта от опенсорсников. Для мелких разрабов и фирм это очень даже неплохо.
      А для крупных тем более - их код больше на виду и легче найти копипастеров.

  • Lloyd

    Аналогия с литературой несколько натянута. Писатели “открывают” свой “код” исключительно потому, что именно “код” и является конечным продуктом. У программистов это все-таки не совсем так.
    Возьмем лучше другой пример - разработчики “железа”. Когда вы покупаете процессор, вам же на дают детальное описание того, как он работает и технологического процесса его изготовления. Эта информация очень тщательно охраняется.
    То же и с программами. Не обязательно копипастить код, чтобы “украсть” его у конкурента, достаточно позаимствовать идеи, а когда идея ясна, написать под нее код уже не так “дорого”.

    • >> Когда вы покупаете процессор, вам же на дают детальное описание того, как он работает и технологического процесса его изготовления. Эта информация очень тщательно охраняется.

      Это не совсем так. Intel на сайте предлагает всем подряд получить полную инфу о процессорах. Я как-то заказал и мне бесплатно доставили 6 томов!
      Другое дело, что производство процессоров - дорогое и элитарное занятие и никто это “копипастить” и изучать просто так для развития не будет - тут уже достаточно именно пойти работать в одну из пары конкурирующих фирм.

      >> Не обязательно копипастить код, чтобы “украсть” его у конкурента, достаточно позаимствовать идеи, а когда идея ясна, написать под нее код уже не так “дорого”.

      И это тоже неверно. Идеи мало чего стоят на самом деле. СтОит хорошая реализация.
      Смотря на программу, мы можем достаточно просто понять как она работает, но понять и повторить - разные вещи. Сделать хороший софт, даже клон другого - это непросто.

      • Lloyd

        >> >> Когда вы покупаете процессор, вам же на дают детальное описание того, как он работает и технологического процесса его изготовления. Эта информация очень тщательно охраняется.

        >> Это не совсем так. Intel на сайте предлагает всем подряд получить полную инфу о процессорах. Я как-то заказал и мне бесплатно доставили 6 томов!

        То, что вам доставили, это аналог user guide для обычных программ. Из этих томов вы не научитесь самостоятельно создавать процессоры.

        >> И это тоже неверно. Идеи мало чего стоят на самом деле. СтОит хорошая реализация.

        Идея идее рознь.
        Глядя на закрытую программу, мы видим лишь что она делает. Этой идее рействительно грошь цена.
        Но глядя на исходним, можно понять как именно она это делает. А это уже немалого стоит.

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

        С открытыми исходниками-то? Да проще простого.

        • >> С открытыми исходниками-то? Да проще простого.

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

          • Lloyd

            >> Нет.

            Да. Попробуйте, у вас получится.

            >> Во-первых, открытый код защищен лицензией - его нельзя скопипастить. Можно только попытаться повторить.

            Попытаться повторить имея перед собой оригинал - задача для второкурсника. Я что-то не въезжаю, в чем сложность?

            >> А тут второе. Вы пробовали что-то повторить?

            Конечно, пробовал. Иногда приходилось повторять небольшие куски .Net Framework-а, когда не было возможности задействовать код напрямую. Никаких особых затруднений это не вызвало.

            • Конечно, пробовал. Иногда приходилось повторять небольшие куски .Net Framework-а,

              Я имею в виду не небольшие куски, а полноценную программу.
              Например, повторите MS Office 2007, имея перед собой его исходники. Не скопипастив код при этом, т.к. MS засудит. Получится? И сколько времени это займет?

              • Lloyd


                Я имею в виду не небольшие куски, а полноценную программу.

                И в чем же принципиальная разница между повторением куска библиотеки и “полноценной программы”?


                Например, повторите MS Office 2007, имея перед собой его исходники. Не скопипастив код при этом, т.к. MS засудит. Получится? И сколько времени это займет?

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

                • >> И в чем же принципиальная разница между повторением куска библиотеки и “полноценной программы”?

                  Разница зависит от сложности “куска библиотеки” и “полноценной программы”. В крайних случаях разница может быть, как между “Hello, World” и игрой Quake3.

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

                  Не согласен, конечно. Пара порядков - это 100 раз!
                  То есть, имея код MS Office 2007 вы напишете его за несколько месяцев???
                  Я бы мог согласиться с “в 2 раза”, для некоторых программ может и с “в 3 раза”. Но даже “в 10 раз” - это уже перебор.

                  • Lloyd


                    Разница зависит от сложности “куска библиотеки” и “полноценной программы”. В крайних случаях разница может быть, как между “Hello, World” и игрой Quake3.

                    И все-таки хотелось бы услышать, в чем эта разница, а не от чего она зависит.


                    Не согласен, конечно. Пара порядков - это 100 раз!
                    То есть, имея код MS Office 2007 вы напишете его за несколько месяцев???
                    Я бы мог согласиться с “в 2 раза”, для некоторых программ может и с “в 3 раза”. Но даже “в 10 раз” - это уже перебор.

                    Офису 20 лет уже. Число человеко-лет, понадобившихся для разработки, думаю исчисляется сотнями. Может я и перегнул палку с двумя порядками, но думаю, что не очень сильно.

                    • >>И все-таки хотелось бы услышать, в чем эта разница, а не от чего она зависит.

                      Вы хотите услышать, в чем разница между небольшим проектом и большим?
                      Первое и самое главное - сложность проекта растет экспоненциально от его размера. И поэтому повторить “Hello world” и MS Office - это совершенно разные по трудозатратам. И отличие может быть в миллионы раз, даже если число строк кода отличается в тысячи раз.

                  • Lloyd


                    Вы хотите услышать, в чем разница между небольшим проектом и большим?

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


                    Первое и самое главное - сложность проекта растет экспоненциально от его размера. И поэтому повторить “Hello world” и MS Office - это совершенно разные по трудозатратам. И отличие может быть в миллионы раз, даже если число строк кода отличается в тысячи раз.

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

                    • >>В случае с портированием, эти все этапы погут быть пропущены, т.к. они уже были проделаны до вас разработчиками первоначального кода и могут быть взяты как есть. Останется только
                      >>достаточно банальое перписывание кода.

                      Это не так. Вам придется анализировать все эти взаимосвязи, проектные решения и т.п. по готовому коду. Врядли вместе с кодом будет отдана вся документация вместе с обоснованием принятых решений и их описанием. А если не так - вам придется всю эту документацию создавать самому. Просто по коду. Что-то вроде реверс инжиниринга, только из кода в документацию.
                      После этого можно зажать программистов “переписывать код” по готовой документации.
                      И тут уже встанет классическая проблема большого проекта - нужно много программистов. Начнутся проблемы во взаимодействии, проблемы с несовместимостью модулей, с ошибками в коде, с тестированием, с развертыванием - со всем. Вы не сможете избежать проблем больших проектов только потому, что имеете чей-то готовый код, который вы должны “всего-лишь переписать”.

                    • Lloyd


                      Это не так. Вам придется анализировать все эти взаимосвязи, проектные решения и т.п. по готовому коду. Врядли вместе с кодом будет отдана вся документация вместе с обоснованием принятых решений и их описанием. А если не так - вам придется всю эту документацию создавать самому. Просто по коду. Что-то вроде реверс инжиниринга, только из кода в документацию.

                      И это будет гораздо дешевле, чем проделывать все то же, самое базируясь исключительно на требованиях или пытаясь “восстановить” приложение по UI.


                      После этого можно зажать программистов “переписывать код” по готовой документации.

                      Существенная поправочка: по готовой документации и имеющемуся коду.


                      И тут уже встанет классическая проблема большого проекта - нужно много программистов. Начнутся проблемы во взаимодействии, проблемы с несовместимостью модулей,

                      Откуда? Интерфейсы модулей однозначно определены первоначальным кодом.


                      с ошибками в коде,

                      Которые гораздо легче пофиксать, когда у нас есть перед глазами правильно работающий код.


                      с тестированием, с развертыванием - со всем. Вы не сможете избежать проблем больших проектов только потому, что имеете чей-то готовый код, который вы должны “всего-лишь переписать”.

                      Мы можем значительно уменьшить размер этих проблем.
                      А теперь вопрос: на кой разработчикам оригинального кода надо открывать свой код, если это существенно поможет конкурентам в клонировании продукта?

                      P.S. А зачем вы отключили возможность отвечать на ваши посты?

                    • jet

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

  • Владимир

    > Или даже можно организовать голосовалку за проекты на том же SouceForge - чтобы можно было выделять лучшие куски кода и голосовать за них. Пришел вечером, зашел на сайт, выбрать тему и там почитал лучшие реализации.

    Сама идея - неплохая. Но не окажется ли, что лучший кусок кода будет черезчур узкоспециализирован, чтобы мог потребоваться кому-то еще. Или речь идет о типовых алгоритмах? Если нет, то нужно начинать с начертания семантического языка, что-то вроде UML - чтобы он мог задействовать все сильные стороны компилируемых языков со статической типизацией, так и скриптовых языков.

    Полагаю, что в какой-то отдаленной степени приближения под эту схему попадает topcoder.com и stackoverflow.com?

    • Да, код будет узкоспециализирован, но в этом и суть.
      Когда вам надо сделать какую-то задачу, вы зайдете на сайт и найдете там примеры реализации других людей, отсортированные по качеству и красоте. Изучите и сделаете тоже хорошо.
      Если же задачи нет, то можно просто выбрать тему, например, “поизучаю-ка я менеджеры памяти” или “шаблоны проектирования” и смотреть код на эту тему.

      >> topcoder.com и stackoverflow.com?

      Вроде как они совсем о другом. stackoverflow.com - это почти оно, только там вопросы и ответы оцениваются, а не код. Но подход правильный.

      • Владимир

        В topcoder.com как раз код оценивается (на небезвозмездной основе). Раньше там интересные задачи проскакивали. Сейчас ушли на прикладной уровень - заточка под определенный инструментарий все больше под .Net в ущерб Java и C++. Их внутренняя архитектура системы позволяет анализировать код на предмет исполнения в заданых граничных условиях (Business Rules), что заодно помогает избежать банальных ошибок связанных с компиляцией. Насчет авторства - чтобы его доказать, нужно (для России, где программа является эквивалентом литературного произведения), чтобы сайт имел статус электронного СМИ (было выдано свидетельство о регистрации электронного СМИ - http://proza.ru/about/pravo/). Это даже не верхушка айзберга того, с чем предстоит столкнуться при реализации подобного проекта.

        • Насчет авторства - чтобы его доказать, нужно (для России, где программа является эквивалентом литературного произведения), чтобы сайт имел статус электронного СМИ

          А что, если сайт будет только оценки выставлять и код искать? А сам код будет лежать на других сайтах - на том же sourceforge и будет защищен их лицензией?

          • Владимир

            >> А что, если сайт будет только оценки выставлять и код искать? А сам код будет лежать на других сайтах - на том же sourceforge и будет защищен их лицензией?
            Тут уже включается закон о международном авторском праве, к соглашению о котором подключилось множество стран. Поскольку в этом ключе наше законодательство произошло от западного, то думаю, что от тоже завязан на законе, аналогичным в российском законодательстве и sourceforge скорей всего обладает подобной лицензией.

      • Владимир

        Одна из отрицательных черт множества сайтов, связанных с программированием - англоязычная направленность. Для лучшего обучения желательно излагать мысль на языке того, для кого подготовлены обучающие примеры. Если же для изучения чего-то требуется изучить китайскую граммоту, то это становится еще одним тяжелым налогом на интелекуальную собственность. Знать язык желательно, но требовать этого от любого программиста, не кажется ли излишним для начала обучения? Видимо проблем по обучению “хорошему стилю программирования” - больше одной :)

  • > Вам придется анализировать все эти взаимосвязи, проектные решения и т.п. по готовому коду…Вы не сможете избежать проблем больших проектов только потому, что имеете чей-то готовый код, который вы должны “всего-лишь переписать”.

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

  • Я в какой-то книге уже читал сравнение программистов с писателями. И абсолютно с этим согласен.

  • Текст книги пишется именно для чтения.
    А текст программы создаётся не ради самого текста, а ради программы, чтобы она выполняла нужные действия.
    Поэтому текст программ пользователям не нужен. Им нужна программа.
    А текст книги читателю нужен.
    Потому что код - это команды, указания, а текст книги - нет.

    Писателем человек не станет, прочитав даже сто книг, если у него нет таланта. Ведь великие писатели ни у кого не учились, они были первыми.

    • CrazyCoder

      Большинство программ создаёться или ради денег или ради популярности (опен соурс).
      И то и другое подразумневает построение собственных активов (человека/организации/компании). А для этого нужно иметь возможность использовать код повторно (для этого нужно и через год свободно читать собственный код), документировать его(для этого важна разметка и аккуратность в форматировании), привлекать доп. специалистов для работы над ним (для этого код должен быть понятен всем).

      Писать код и никогда его повторно не использовать - надёжный путь к НЕ успеху.

      >Писателем человек не станет, прочитав даже сто книг, если у него нет таланта.
      Станет, обилие треша на книжних полках это подтверждает.

      >Ведь великие писатели ни у кого не учились, они были первыми.
      Доказательства?

      • > Большинство программ создаёться или ради денег или ради популярности (опен соурс).

        open source программы создаются ради популярности? оригинальная точка зрения.

  • Я думаю, чтобы красиво нужен талант.

  • SS

    //То есть, имея код MS Office 2007 вы напишете его за несколько месяцев???
    //Я бы мог согласиться с “в 2 раза”, для некоторых программ может и с “в 3 раза”.
    // Но даже “в 10 раз” - это уже перебор.
    поддерживаю Lloyd может даже потрачу в 1000 раз меньше времени!!!
    Потому что “написать” сворованный код это значит тупо построить релиз :)
    А давай те вспомним ситуацию когда Китай сказал MS, или Винда будет стоить для нас 50$(точную цифру не помню может и 30) вместо 300$ или мы будем использовать пиратскую версию :) И MS сделала их цену :) Конечно чтобы другие не клянчили че то там повырезала типа IE и т.п. что и так никому не нужно :) И думаю при открытых исходниках цифра 50$ стала бы сразу цифрой 15 или 20 :) Им вообще плевать сколько труда надо потратить на что то, они знают что просто надо больше людей сложность возросла в 1000 они найдут еще 50000 программеров :) “Их багато их неподолаты” :) И их правительство клало на Штаты :)
    Сотрудник расказывал как его отец строил в Китае аэродром… по плану 6 месяцев, Китайцы говорят надо за месяц… Наши подумали, даже с “выполним пятилетку за 4 года” и сдадим полуготовый объект все равно месяц, т.к. только часть техники доставили, и только насыпь сделать 2 недели минимум с техникой… Так и говорят им… Китайцы подумали, спрашивают если насыпь насыпим за месяц сделаете? Наши подумали, как они без техники в поле насыпь насыпят так еще щебень надо доставить, дорог нифига нет… Говорят ладно (думая все равно не реально насыпь сделать даже за месяц…) Китайцы нагнали со всей округи народ вплоть до бабок, дедок, детей которые за 1,5 недели на велосипедах привезли щебня для аэродрома… Вот так ребята работают!!! :)
    По поводу что программа даже переписанная будет ворованой … посмотрите на китйские клоны Офиса http://habrahabr.ru/blogs/soft/67565/ даже почти все иконки такие же :) И что вы слышали чтобы MS или США что там возмущалось что у них украли идею или еще что то? :)
    А ни дави MS антимонопольный коммитет или хуже того контролируй его MS, они задавили бы всех конкуретов на раз два выиграв все суды которые бы всегда бы подтверждали что MS первая использовала этот исходный код :)

    • поддерживаю Lloyd может даже потрачу в 1000 раз меньше времени!!!
      Потому что “написать” сворованный код это значит тупо построить релиз :)

      Всё не так просто. Если тупо построить релиз из тех же исходников, то MS мгновенно подаст в суд и ты не сможешь продавать или даже бесплатно отдавать свою программу.
      то, что кто-то смог повторить офис и сделать его клон, как китайцы - это не значит, что они “пересобрали релиз”, а то, что они заново все написали. Иначе МС давно бы их засудил. А патента на внешний вид офиса у MS нет, так что клоны писать можно. Тот же open office. Но попробуй тот клон - там багов небось раз в 100 больше, чем в офисе. Как и с open office ситуация.

      • SS

        Такая ситуация вероятна потому что MS такая, а не вовсе потому что я использовал чужой код ;)
        В одной из фирм в которой я работал, отдел разрабатывал определнную систему (какую впринципе не важно) так вот все шло до определнного момента, пока руководитель отдела с разработчиками не решили что их обманывают, обкрадывают или не дают “завоевать рынок” :) Причем весь написанный код был официально запатентован (не знаю точного юр. выражения могу ошибатся) фирмой, т.е. название куски кода и т.д. было отдано в гос. комиссию, и получены все документы о правах на ПО фирмы (причем фирма крупная с иностранными инвесторами и т.д.) но ребята собрались и ушли открыли свою фирму и продают свою систему и конечно на виду у бывшей фирмы так как увели лутших клиентов. Да, на них подали суд, да они переодически судятся… но прошло уже лет 6, и они успешно продают тот “краденный” софт причем довольно крупным и серьезным организациям. Мораль этой истроии думаю поймет каждый ;) что позволено Юпитеру то не позволено быку! :) Вот например ты если напишешь программу ты сможешь потом проанализировать все чужие программы и определить они используют твой код? :) А нанять юристов которые будут заниматся тяжбой? А платить этим юристам столько чтобы скажем фирма MS не заплатила им больше и они тебя просто не кинули, допустив кукую нибудь ошибочку, в результате которой ты проиграешь дело?
        Про ОО лутше не говори :) Наша комманда пыталась под него написать плугин и скрестить с нашей системой… Как говорится “вспомню вздрогну” :) Через 2 месяца плюнули, взяли MS офис и за две недели сделали все что нам требовалось.

        • Такая ситуация вероятна потому что MS такая, а не вовсе потому что я использовал чужой код ;)

          Естественно :)

          что позволено Юпитеру то не позволено быку!

  • SS

    А Open Source это конечно замечательно но пока мы будем жить в мире в котором экономика и все остальное завязано на деньгах и личной корысти (кто смотрел док. фильм “Дух времени”, обе части, тот меня поймет) он никогда не победит :(
    Если же общество уйдет от денег то конечно все научные направления в том числе относящиеся к программированию начнут буйное развитие и коллективы программеров больше НЕ БУДУТ гонятся за какими то тупыми проектами, слушать (как иногда приходится) тупых заказчиков потому что у них деньги, смогут потратить столько сколько необходимо времени на проет и т.д. Мда… а вы можете представить как бы это толкнуло вперед науку? Все заканчиваю :) А то руки сами начинают искать что то с помошью чего можно будет избавится от владельцев межконтинентальных копораций :)

  • SS

    Приведу еще один минус открытого ПО. Борьба со “взломщиками” программ для продажи или для кражи данных которые поставляются с софтом. При “закрытом” коде несколько примитивных приемов шифрования + несколько проверок лицензии находящиеся скажем в 2-3 dll-х софта содержащего много модулей, могут запросто заставить взломщиков бросить это дело, особенно если программа обнаружив “взлом” тихо продолжает работать некоторое время, а лишь потом реагирует. Открытость этого ПО даст взломщикам легко найти уязвимость и “поломать” программу…
    Соответственно, разработчики зная что их код будет открыт, потратят еще кучу времени на надежное шифрование и более сложную защиту… Вследствии чего, проект усложнится и разработчики будут тратить больше времени, больше необходимо времени тестерам, возможно больше ошибок, падение производительности, требование более производительного железа и за все это должен будет заплатить клиент. А что он от этого получит? Ровным счетом ничего :) Так какой смысл тогда в этом?

    • >>При “закрытом” коде несколько примитивных приемов шифрования + несколько проверок лицензии находящиеся скажем в 2-3 dll-х софта
      >>содержащего много модулей, могут запросто заставить взломщиков бросить это дело, особенно если программа обнаружив “взлом” тихо
      >>продолжает работать некоторое время, а лишь потом реагирует. Открытость этого ПО даст взломщикам легко найти уязвимость и “поломать”
      >>программу…

      Все как раз наоборот. Во всех книгах про написание секьюрного кода говорится, что самый неправильный подход - это полагаться, что хакеры не знают твоего кода. Майкросовт на это полагались и что в результате?
      Единственный способ обеспечить секьюрность алгоритма - это его открытость. Ибо тогда ты начнешь применять правильные алгоритмы, которые просто невозможно сломать - открытый и закрытый ключи, например.

      • SS

        Извиняюсь, но вы по моему не вникли в то что я написал :(
        Я очень даже плотно работал с шифрованием, как с тем что предоставляет MS так и всем известной PGP и ее SDK.
        И могу Вам авторитетно сказать, что алгоритмов которые нельзя “сломать” НЕТ! :) Точно так же заявляю что 99,99% людей и даже специалистов этого сделать не могут (или не хотят) и я в их числе.
        “Открытость” кода в этом случае тоже не панацея! Может вы не углублялись, посмотрите, если будет интересно PGP, она изначально шла с открытыми исходниками, и историю ее изменения… Номер версии 9.10.500. Ни на какие мысли не наталкивает? :) Из того что я точно знаю, что PGP полностью даже идеалогия менялась несколько раз, но все равно кто то умудрялся найти как получить закрытые данные.
        В книгах, про которые вы упоминаете, идет о методах криптозащиты в специализированных прграммах, которые должны защищать данные, а я говорил о ситуации когда создатель ПО защищает свои данные, т.е. о ситуации когда пользователю, наоборот выгоднее чтобы они были открыты и только пираты заставляют прятать данные.

      • SS

        Часть 2.(разбил чтобы не попасть на модерацию :) )
        А как вы себе представляете использование методов криптозащиты с открытым ключом если мы “вору” даем ключ тем или иным способом? :) В данном случае, вор не сможет подделать исходные данные, а “прочитать” он сможет и должен.
        Т.е. грубо две ситуации в обоих есть зашифрованные данные и есть ключ:
        1) Открытый код. Есть исходники на высокоуровневом языке программирования пусть 4 мегабайта, в нем конечно есть вполне логичные названия ф-ций, возможно даже с коментариями (если мы так любим открытость не будем же мы их удалять :) ).
        Ищем ф-цию с названием в стиле DeCrypt()(причем в IDE видим список ф-ций, даже больше, можем с помошью спец. инструментов построить дерево вызовов ф-ций, запустить поиск по подходящим названиям и т.д.). Собираем свою програмку с этой функцией даем ей известный ключ и зашифрованные данные и дешифруем их. Или как вариант есть заявление (или кто то вполне официально изучал исходники) что “мы используем метод шифрования X”. Вообще ничего не ищем берем библиотеку с реализацией метода Х и дешифруем.
        2) Закрытый исходный код. Есть бинарник, можно получить его исходный код на асемблере но размер будет несколько раз больше пусть даже в 4 раза, т.е 16 мегабайт (возможен конечно случай что бинарник будет со статической компоновкой используемых библиотек тогда еще в разы больше). Низкий уровень, нет названий ф-ций, нет комментариев, метод шифрования не известен.
        И где будет проще “поломать”? :) По моему ответ очевиден. :)

  • >> P.S. А зачем вы отключили возможность отвечать на ваши посты?

    Я не отключал. Возможно мы достигли максимального уровня вложенности комментариев - слишком долгая ветка обсуждения :) По сути предлагаю закончить спор - я согласен, что готовый код поможет в разработке. Не согласен, что в 100 раз, но готов согласиться, что в разы. Это много.
    Зачем тогда публиковать код?
    Чтобы и самому пользоваться таким же преимуществом чужого кода!

  • Lloyd


    Зачем тогда публиковать код?
    Чтобы и самому пользоваться таким же преимуществом чужого кода!

    Увы, в силу того, что такая ситуация - не равновесная, в жизни никто не будет ее придерживаться.
    Вот тут довольно интересно написано: Дилемма заключённого

  • SS

    Согласен с Lloyd, нам преподаватель (ученый и проффесор) в институте рассказывал поучительную историю, немножко по другому поводу, но это неважно… Все помнят наше (моя родина как не крути СССР) чудо техники, особенно на то время, катер на подводных крыльях из серии “метеор”, “ракета” и т.д. ? Так вот после испытаний, идеи используемые в этих катерах были запатентованы, т.е. разкрыты (это для аналогии с открытым ПО), но потентная заявка была составлена безграмотно :( Нет все в ней было точно и без ошибок. Безграмотна она была в плане патентования, в ней был указан самый оптимальный угол для крыла, сейчас уже не помню пусть будет скажем 30 градусов, но как вы все понимаете что и при 28, 29,31,32,33,34,35 градусах результат тот же… так вот “буржуи” посмотрели патент и запатентовали соседние диапазоны угла при которых катер “летал” ничуть не хуже… Вот вам и открытость… Не “открой” наши все мелочи в патенте пришлось бы “конкурентам” попотеть… А так они получили все бесплатно, а кто думал и работал не получил должное вознаграждение… Это же явно минус! Можно сказать зато мир получил знания, и люди получили еще одно благо, но это это не так они его купили и купили не у создателей а у воров вот и все… И скажите теперь что открытый код это хорошо в этом мире…

Ответить

 

 

 

Вы можете использовать эти HTML тэги

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>