Систематическое программирование

 

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

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

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

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

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

 

CF (Character&File) Pascal

 

В части I данного курса программирование рассматривается как деятельность по решению задач с помощью языка CF Pascal. CF Pascal (Character&File Pascal) – язык программирования, являющий подмножеством языка программирования Pascal, использующий один тип данных - символьный и одну структуру данных – текстовый файл.

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

CFP прост, но это не главная причина, по которой мы будем его использовать. Символы и файлы – фундаментальные понятия в программировании. Простые и легко формулируемые задачи в программировании требуют умения мыслить и организованности, чтобы решить их с помощью символов и файлов. К тому же программирование на CF Pascal является полной моделью программирования на любом языке программирования. Это значит, что на CF Pascal можно решать те же задачи, что и на полном Pascal. Отличие в том, что Pascal позволит решать те же задачи более эффективно.

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

Компьютеры подчиняются законам физики и электроники, но не законам арифметики. Арифметика в компьютерах - следствие продуманного инженерного проектирования, которые заставили электронные приборы моделировать вычислительные операции, которые необходимы пользователям. Фактически, компьютер читает и пишет только символьные последовательности – его интерфейс с человеком. Цифра 7 и число 7 для человека то же самое, что символ 7 для компьютера. Ограничение до символов в CF Pascal не исключает операции с числами, оно просто делает основы для операций с числами более явными.

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

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