Злобный план по покорению галактики.

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

Итак, вот он план…

Я очень давно задумывался о создании идеального самоучебника по программированию с нуля.

Думаю, не нужно сильно вдаваться в то, что значит «учебник программирования с нуля». То есть он должен быть рассчитан на то, чтобы по нему мог обучиться любой человек не знающий ничего о программирование, но уже имеющих достаточно опыта с компьютером.

Идем дальше. Насчет «Самоучителя» . Идея в том, чтобы можно было научиться без того, чтобы дергать кого-то постоянно за рукав и спрашивать: «Дядечка, а что значит эта фраза и как сделать то и другое?».

Ну и последнее и самая любимая часть «идеальный» 😉 Ну, как же может программист (и злобный властелин по совместительству) собираться сделать что-то меньше, чем идеальное?

Что меня убивает во всех учебниках это фразы «а-ля»:

«Выражение присваивания — этот нетерминальный символ используется в Справочном руководстве по C++ для обозначения элементов списка выражений. Не следует особо смущаться по поводу этого нового обозначения. Это всего лишь частный случай выражения.»

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

Собственно говоря, основная идея в постоянном feedback’е. Самоучитель предполагается быть onlin’овым и ключевой возможностью будет пометка абзацев/глав и т.п. Их можно будет помечать в стиле «Не фига не понял», «Скучно/нудно и уже сто раз было до этого написано» и т.п.

И само собой, плохие абзацы постепенно будут заменяться, поясняться и улучшаться.

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

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

А по сему, я хочу найти братьев по разуму, которым было бы интересно поучаствовать в этом проекте.

Заранее оглашу, проект будет бесплатный (во всех пониманиях это слова). То есть платить за помощь, увы, я не буду, но и взымать деньги за использование, кем то ни было учебника тоже не собираюсь. В общем, в конечном итоге, это будет книга в стиле open source (c определенными ограничениями).

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

Я искренне надеюсь, среди сотен постоянных читателей найти хотя бы 5-7 человек, которым хочется поучаствовать в моем злостном плане.

Кстати и если вам не составит труда и вы знаете, кому может быть интересна эта идея – киньте им ссылочку или поставьте у себя в блоге ссылочку на этот пост.

Подкинули интересную ссылочку. http://www.djangobook.com/en/1.0/chapter01/. Где-то так я это и вижу.

P.S. Я создал две начальные страницы проекта. Одна содержит описание идеи проекта, вторая содержит ответы на часто задаваемые вопросы.

45 комментариев to “Злобный план по покорению галактики.”

  1. На Озоне в разделе Основы программирования есть 91 книга (http://www.ozon.ru/context/catalog/id/1071081/). Чем ваша книга будет отличатся от материала уже написанного и изданного?

    Я не ставлю под сомнение саму идею, но давайте начинать с изучения существующих аналогов.

    • panda:

      Честно попытался представить себе новичка, который вместо того, чтобы читать в интернете «Learn to Program» купит «Программиста-прагматика». Не смог.

    • Victor Ronin:

      Количество не обозначает качество. Читать все книги я вряд ли буду.
      То, что я видел в разнообразной мере бестолковое

      а) Начинается не с нуля (что явно усложняет и так непростой процесс изучения)
      б) Авторы фактически напрочь лишены feedback’а (в бумажных изданиях).

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

      • SergeyKish:

        Все люди разные — последнее время в книгах как раз смущает «начинание с нуля» — то есть ни как не учитываются текущие знания.

        Как пример — на сайте ruby есть разделы «Ruby для программистов C++ / Java / Python».

        Что если включить вводные анкету / тест или предлогать информацию на основании заинтересовавших / незаинтересовавших разделов (кнопочка «знаю!»)? Появится еще одно отличие от бумажной книги — направленность на определенного человека.

        В дальнейшем можно выделить категории по уровню знаний (senior / middle / junior), языкам (c++. python, etc), фреймворкам (QinAPI, Qt, django, etc)

        Еще развитие — тесты. Или можно использовать стороннее тестирование.

        • Victor Ronin:

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

          Но вот база для этого всего должна быть железобетонной.

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

          • SergeyKish:

            Согласен — фреймворки это отдельная тема.
            Каждый фреймворк имеет свою архитектуру и соглашения, Но нигде не видел «таблицы преобразований», попытаюсь объяснить на примерах.

            Совсем недавно — диалог выбора файла:
            — WinAPI, Qt: что-то с «OpenDialog»
            — Symbian: CAknSelectionDialog() (!!!) 🙂
            Symbian конечно не показатель — у них все не как у людей.
            — rails: f.file_field (тут еще и с аплоадом связано)

            Конвертирование str => int
            — C: atoi
            — Net: Converter.toInt()
            — Symbian: TLex (подобие регулярных выражений + ковертер )

            То есть имеем различное именование + различное использование. Таблица переводов очень помогла бы при портировании на другую платформу.
            Как это себе представляю — в терминах источника портирования (язык, фреймворк) находим функционал, выбираем платформу назначения и получаем результат 🙂

            Красиво получилось, будет свободное время сделаю прототип 😀

            PS: если такие ресурсы есть — буду рад ссылкам

            • Victor Ronin:

              Ну, если честно это все очень спецефические знания.

              Это скорее надо с помощью справочников разбираться, чем по учебнику.

              Ведь, если вдуматься есть наверно добрых десятка три языков, штук десять платформ. Так, что даже str => int уже можно будет штук пятьдесят разных привести.

              Насчет Symbain’а… Блин, они просто моральные уроды. Все сделано через жопу. Задумки были хорошие, реализация ужастная. Но это опять же отдельная тема.

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

              Естественно где-то будет и о фрейморках и о операционках. Просто, чтобы показать разницу и с чем ее едят.

              Но невозможно объять необъятное. Ну, никакая книга не вместит и SQL для Oracle и Python для Symbian.

              • SergeyKish:

                Смущают следующие моменты:
                1. Программирование в отрыве от языка (если верно понял)
                А как же практическое приложение материала? Всегда начинаю изучение с print «Hello World!» 🙂

                Языки изучал по следующим книгам:
                с — Керниган и Ричи «Язык С»
                с++ — Страуструп «Язык программирования С++»
                python и ryby — неплохие руководства в составе дистрибутива

                Навскидку из понравившихся книг:
                «C++ GUI Programming with Qt 4»
                «Refactoring: Improving the Design of Existing Code»
                «Design Patterns — Elements of Reusable Object-Oriented Software»
                «Test-Driven Development By Example»

                Все эти книги содержат примеры и упражнения. Первыми шагами в программировании были basic и pascal (названия книг не помню), но и там были примеры.

                В книгах «Язык С» и «Язык программирования С++» нравилось решать упражнения.

                А если выбрать язык то какой? Или выбрать множество поддерживаемых языков?

                Наверно снова не в ту степь ударился. 🙂

                2. Преподование не программистам программистами
                Знаю по себе — ораторскими способностями не обладаю, при обяснении работы часто приходится объяснять естественные для меня вещи, искать аналогии.

                • Victor Ronin:

                  Мне кажется нужно по стадиям разбивать обучение

                  а) До языковое обучение

                  Просто объяснить, что такое программирование. С чем его едят.

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

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

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

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

                  б) Дальше лучше объяснять чуть более сложные конструкции и для чего они используются.

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

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

                  Кстати, в этом смысле Hello World хорош для изучения синтаксиса языка, но абсолютно не хорош, для изучения основ программирования.

                  в) Дальше идет слегка изучение синтаксиса какого-то языка. Я не уверен, какой язык хорош для этого. Если быть честным, то C/C++, да и большинство современных языков очень сложны для изучения.

                  Даже минимальная программа состоит из 10 достаточно странных строк.

                  Так что, я еще не уверен какой язык хорошо применить в книге первым.

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

                  Да, кстати, естественно, в каждой части, примеры, задача, тесты и т.п.

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

                  е) Ну и дальше должны идти темы приближенные к реальной работе

                  — пользование системами контроля версий, багтрекинг
                  — построение архитектуры
                  — работа с большим кодом

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

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

  2. Sapiens:

    Меня больше интересует подача материала:) Идея в принципе интересная

    • Victor Ronin:

      В смысле, подача материала?

      • Sapiens:

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

        • Victor Ronin:

          Разница с википедеей в нескольких нарпалениях

          Однако
          а) Википедия — скорее энциклопедия, а не учебник
          б) Как я понимаю в википедии совсем полный доступ к редактированию (я бы сказал, что для учебника опять же это не выход).

          Схожесть в том, что материал редактируют несколько людей и читатели могут делать пометки.

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

    • Георгий:

      Неужели домохозяйке не получится примкнуть к вашей высшей касте избранных? Даже если очень хочется?

    • Victor Ronin:

      Целевая аудитория
      а) Школьники
      б) Студенты младших курсов

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

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

  4. На отличиях электронных и печатных документов я не хочу останавливаться. У обоих подходов есть и плюсы и минусы.

    «Программиста-прагматика» новички конечно читать не будут, но этой книжкой список не исчерпывается.

  5. Аноним:

    Есть скажем SICP. Чем ваша книга может быть лучше? Не забывайте, что качество будет видно после нескольких лет после выхода и нескольких переизданий.

    • Victor Ronin:

      Надо на нее поглядеть.

      У нее кстати перевод на русский есть?

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

      Опять же, чего была лишена книга пошагового feedback’а. Да, качество будет видно после некоторого времени. Однако, так как книга будет не бумажной, то качество будет двигаться не прыжками а планомерно.

      Хотя безусловно, бороться против SICP — это восходящая битва 🙂

      • panda:

        На русском: «Структура и интерпретация компьютерных программ» — http://is.ifmo.ru/download/abelson.pdf
        Подготовка для этой книги нужна, действительно, серьезная.

        • Victor Ronin:

          Собственно в этом я и вижу проблему, которую хотелось бы решить.

          Очень много книг, которые вроде рассчитаны на обучение с нуля, стартуют вовсе не с нуля.

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

  6. У любой авторской идеи должен быть один автор. Коллективом такие вещи не сделать. В смысле, когда все равны — может быть много людей, но должно быть ясно, кто босс.

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

    • Victor Ronin:

      Ну, вероятнее всего я конечно объявлю себя главным злобным властелином. Так как, как вы точно заметили, управление в любом проекте нужно.

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

      Feedback читателю нужен для того, чтобы проверять результат. (И я с этим полностью согласен)

  7. Две ошибки:
    1. Все люди (в данном случае — читатели) — разные. Поэтому «Идея в том, чтобы можно было научиться без того, чтобы дергать кого-то постоянно за рукав и спрашивать» — невыполнимая идея.
    2. «проект будет бесплатный» — а значит длительный, кустарный, непопулярный и очень рисковый. Успешные open-source проекты в основном рождаются после (или в дополнение к) коммерческих проектов с большими бюджетами. У вас есть такой проект?

    • panda:

      2. Как насчет Wikipedia? 😉

    • Victor Ronin:

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

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

      Если есть самоучителю по естественным языкам, то самоучитель по программированию вполне выполнимая идея.

      Насчет «бесплатный проект». Да он будет длительный, кустарный и вероятно не слишком популярный. Риск в основном состоит в времени.

      Я собираюсь его делать для развлечения, так что для меня уж точно риска никакого не будет.

      • Если нет риска и ограничений по времени, то это скорее не проект, а увлечение (хобби).

        • Victor Ronin:

          Да, это хобби с элементами проекта.

          Хобби — это в том смысле, что вероятнее всего денег оно не принесет и жестких рамок нет.

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

  8. Санитар:

    http://www.pcmag.ru/issues/detail.php?ID=9972

    Отличая история, как человек писал компилятор.

    Во многом глубинно перекликается с постановкой задачи даного случая 😉

    • Victor Ronin:

      Интересная статья.
      Хотя если честно прочел ее по диагонали, уж очень длинная. Скорее рассказ, а не статья.

  9. именно. а вам импонирует звание дилетанта ?

  10. vansickle:

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

    • Victor Ronin:

      Ну, книга (в электронном виде тоже) и не предназначена переделывать человека. Она предназначена просто нести информацию.

  11. Как пример онлайн книги, которая постоянно дорабатывается (повишается качество)

    http://www.djangobook.com/en/1.0/chapter01/

    Используя коментарии, авторы могут сразу править конкретные места в книге.

  12. Roman:

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

  13. Pak:

    Мне эта идея кажется порочной. Я занимался преподаванием информатики в дополнение к основной работе и довольно скоро с удивлением обнаружил, что к сожалению (к счастью?) не все люди могут воспринимать базовые понятия программирования, например, цикл или ветвление, не говоря уж о такой изящной и интересной конструкции, как рекурсия. И люди при этом не глупые, с высшим образованием в другой области, но просто не укладывается это у них в сознании и все.
    Ориентация на массового и неподготовленного читателя приведет к тому, что каждое изначальное предложение будет развертываться на целый абзац, потом на главу, потом – это станет бессмысленно. Всегда можно будет найти человека, которому что-то из написанного будет не понятно и он, в соответствии с концепцией, не применет об этом сообщить. Где будет пролегать граница после которой дальнейшие разъяснения будут заканчиваться? Если эта граница будет, то чем это будет отличаться от уже написанных книг? Будет меньший процент людей которым эта книга непонятна? Ну тогда это будет “Программирование для чайников” 🙂
    Ну и немного по поводу коммерциализации. По моему это очевидно – при хорошем качестве продукта он просто издается в бумажном виде. Заработанная сумма будет небольшой, но она будет 🙂

    • Victor Ronin:

      Разберемся по частям:

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

      Согласен. Тем более нужны книги, которые пошагово это объяснят.

      Те книги которые я видел, просто бросают в середины речки читателя — выплывет, значит станет программистом. Не выплывет — не дано.

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

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

      Да, кое что развернется и это значит, что как раз это базы людям и не хватает, чтобы понять.

      Однако никто не говорит, что книга должна охватить 100% аудитории.

      Насчет программирования для чайников. Да вероятнее всего первые пару глав и будут для чайников. Если человек никогда не программировал, то ему как раз на пальцах и нужно объяснять. Когда он на пальцах понял, то переходит к следующей главе, где уже более сложные понятия и уже на более абстрактном уровне.

      • А вы не читайте советские учебники 🙂 Лично у меня одним из первых учебников программирования была переводная книга, советская еще правда, издательство «Мир», названия не помню, непримечательное, что-то вроде «Основы программирования». Автора тоже не помню, к сожалению. Брал в библиотеке. Про языки мало, про структуры и алгоритмы много, все нужные понятия, плюс общие подходы к решению задач, плюс интересные задачи, вроде задачи коммивояжера — отличная книга. Уровень совершенно обыкновенный.

        Программирование — популярнейшая профессия и написано на эту тему множество хороших книг, просто отличных. А вы, похоже, исходите из мысли, что и книг-то нет. Это не так.

        Второе, насчет некоммерческости, простите за корявое слово 🙂 Лично меня крайне смущает принципиальная некоммерческая направленность. Деньги — не только зло, но и добро 🙂 Во-первых, это знак нужности труда, tokens of appreciation, соответственно, если неясно, кому это продать, то нужен ли это труд вообще? Во-вторых, there’s no such a thing as a free lunch, и если за какую-то (не саму собой растущую) вещь кто-то один не платит, то значит за нее платит кто-то другой. В вашем случае не платят читатели, значит будут платить авторы. Не деньгами, так усилиями. Раз они платят, значит они что-то получают взамен? Что?

        • Victor Ronin:

          >А вы не читайте советские учебники 🙂

          Да я их и не читаю. 😉

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

          >Программирование — популярнейшая профессия и написано на эту тему множество хороших книг, >просто отличных. А вы, похоже, исходите из мысли, что и книг-то нет. Это не так.

          Порядка 60% опрошенных в опросники написали, что толковых книг нехватает.

          >Второе, насчет некоммерческости, простите за корявое слово 🙂 Лично меня крайне смущает >принципиальная некоммерческая направленность. Деньги — не только зло, но и добро 🙂

          Я не против коммерческости. Я даже за нее. Но я за нее только в разрезе работы/бизнеса.
          Для меня этот проект должен стать хобби. Как только к еще неразвившемуся хобби добавляется коммерческий оттенок, то хобби очень быстро скисает.

          Плюс, то что я видел. Если толку не выходит, то будь оно хоть коммерческое, хоть не коммерческое — все равно толку нет. Если толк начинает выходить, то даже если хобби не приносит впрямую денег, то начинают появляться разные интересные возможности (финансовые) вокруг этого хобби.

  14. Идея интересная, но …

    Большинство программистов не в состоянии изложить тему понятным для домохозяйки языком. Это большого таланта требует — описать сложные вещи простым языком.

    Мне более реальным представляется проект вида «программисты для программистов». Что-то похожее Джев Атвуд и Джоэл Споэльски затевают: http://blog.stackoverflow.com/

    • Victor Ronin:

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

      Согласен. Это собственно наиболее сложный пункт в проекте.

      Единственное, что я могу ответить — это то, что feedback для этого и расчитан. Те вещи, которую будут плохо написаны должен постепенно выпасть.

      Насчет «проргаммисты для программистов». Гораздо проще и реальнее, но с другой стороны, гораздо больше всего написано и создать что-то интересное для программистов (особо более менее профессиональное) тоже сложно.