Проект “Самомучитель по программированию”.

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

И постепенно я собираюсь наполнить этот раздел и собрать информацию по тому поводу, что хочется сделать и как хочется сделать в рамках этого проекта.

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

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

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

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

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

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

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

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

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

Как пример онлайн книги, которая постоянно дорабатывается (повышается качество):
http://www.djangobook.com/en/1.0/chapter01/
Где-то в таком виде я и вижу движок книги (я не говорю о содержании).

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

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

Сейчас проект находится на самой при самой ранней стадии. Он еще плохо сформулирован и я нахожусь в процессе поиска людей, которые хотят мне помочь.

Вот примерные темы и их порядок, которые хочется описать в книге:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

Ну и пока формулировка проекта расплывчата я создал страницу с ответами на потенциально часто задаваемые вопросы :)