Что, как и зачем предлагается изучать
Раздел 1. "Программист дилетантствующий"
Раздел 2. "Программист продвинутый"
Раздел 3. "Программист системный"
Раздел 4. "Программист объектно-ориентированный"
Большинство изданий по языками и системам программирования путают две вещи : язык и практика программирования на нем. Общепринятая система погружения в язык - описание лексики, синтаксиса, напоминает изучение английского языка с помощью учебника грамматики и русско-английского словаря. Читающего же, в первую очередь интересует конечный результат - когда же он, наконец, начнет сам писать программы. Вопросы же технологии программирования, вообще "здравого смысла" при написании программ благополучно были отражены в книжках двадцатилетней давности и после этого забыты. Считается, что нынешние поколения программистов работают на столь высоком уровне, что неприлично напоминать о таких общеизвестных вещах, как списки, деревья, рекурсия.
Основная идея предлагаемого материала - не стоит, хотя бы при изложении столь открытого языка, как Си, начинать все валить в кучу - классы, объекты, структуры, функции, и прочая, и прочая, и прочая... Если задаться целью овладения навыками профессионального программирования на Си, то стоит делать это, как минимум, в несколько шагов, а именно :
- программирование на уровне Бейсик (l дилетантское) - простые переменные и массивы, основные алгоритмы решения арифметических задач, обработки текста, приближенных вычислений, законы информатики (простой и линейный поиск, сортировка), простые структуры данных - стек, очередь, модульное программирование (процедура, параметры), основы анализа программ путем разложения на стандартные фрагменты, основы технологии программирования ;
- программирование на уровне Паскаль (l продвинутое) - типы данных, иерархия типов данных и модулей (процедур) в сложный программах, производные типы данных - структуры, указатели, функции, динамическая память, общие вопросы организации памяти в программе ;
- организация данных - традиционный раздел, в котором Си предстает "во всей своей красе" (l системное).
Массивы указателей, списки, деревья, статические и динамические структуры данных. Указатели на функции и динамическое связывание, текстовые файлы и двоичные файлы произвольного доступа вплоть до физической организации баз данных (таблицы и индексы) ;
- технология объектно-ориентированного программирования и Си++ (l профессиональное). Классы и объекты. Иллюстрация возможностей Си++ средствами "классического" Си. "Эпизодическое" объектно-ориентированное программирование : определение классов, переопределение операций, объекты с динамическими данными. "Тотальное" объектно-ориентированное программирование - "от класса к классу". Наследование, полиморфизм. Технологии организации системы объектов в программе - объекты, управляемые сообщениями.
Отметим еще несколько принципиальных моментов, которые отслеживаются при изложении материала :
- если умение разрабатывать программы - это навыки " письма" , то не менее важными являются навыки " чтения" , то есть анализа уже готовых " хороших" программ. Поэтому в каждом параграфе должно быть 10-15 тестов - фрагментов программ и отдельных функций, которые составляют "Вопросы без ответов". Они также могут использоваться и как заготовки программ. Аналогично для самостоятельной работы должны предусматриваются 10-15 вариантов заданий.
- на каждом уровне погружения рассматриваются одни и те же алгоритмы, которые "вызывают чувство узнавания" - например, поиск минимума в массиве, массиве структур, дереве, и в том же дереве, представленном объектом класса.
- навык программирования в значительной степени приобретается по принципу "делай, как я", поэтому предпочтение отдается некоторому шаблону в решении поставленных задач. Импровизацию предлагается проявлять обучаемому.