zbkm
Участник
- Регистрация
- 9 Янв 2021
- Сообщения
- 99
- Реакции
- 170
Наверное, никто лучше не сможет описать книгу, чем сам автор. Это отрывок из предисловия первого тома, взят с официального сайта автора:
Научившись пользоваться компьютером так, как это должно быть, а не так, как нас заставляет коммерческий мейнстрим, можно начать обучение программированию — с Паскаля (например, использовать FreePascal), при этом ни в коем случае не использовать никакие «интегрированные среды», скрывающие от пользователя как раз всё то, что следует знать и понимать. Тексты программ следует набирать в каком-то из множества доступных в Unix'е редакторов, для начала это может быть nano или joe, позже, возможно, vim; компилятор следует запускать вручную, дав соответствующую команду. Что касается самого Паскаля, то изучать следует не «язык Паскаль», а программирование. Нет совершенно никакого смысла в настойчивом вдалбливании ученику формального синтаксиса, таблиц приоритетов операций и прочей подобной ерунды: на выходе нам нужно получить не знание языка Паскаль (который, возможно, ученику никогда больше не понадобится в жизни), а умение писать программы. Наиболее высокими барьерами на пути ученика здесь оказываются, во-первых, пресловутые указатели (и автору этих строк не известно никакого другого языка, который был бы столь же удачен как учебное пособие на эту тему), и, во-вторых, рекурсия, с которой тоже можно научиться работать на примере Паскаля. Отметим, что модуль CRT (нежно любимый нашими педагогами настолько, что uses crt; встречается в программах, не использующих никакие возможности из него, причём даже в учебниках) во FreePascal'е под Linux и FreeBSD замечательно работает, позволяя создавать полноэкранные терминальные программы; на Си это сделать гораздо труднее, автор этих строк в своё время, будучи уже опытным программистом, потратил несколько дней на то, чтобы более-менее разобраться с библиотекой ncurses.
Прежде чем переходить к Си, стоит спуститься уровнем ниже и попробовать освоить язык ассемблера. Заодно можно осознать, что такое ядро операционной системы, зачем оно нужно и как с ним взаимодействовать; системный вызов перестаёт быть чем-то магическим, когда делаешь его вручную на уровне машинных команд. Поскольку цель здесь — опять же, не освоение конкретного ассемблера и даже не программирование на уровне ассемблера как таковое, а исключительно понимание того, как устроен мир, не следует, разумеется, снабжать ученика уже готовыми библиотеками, которые сделают за него всю работу (в частности, по переводу числа в текстовое представление); наоборот, написав на языке ассемблера простенькую программу, которая считывает из стандантного потока ввода два числа, перемножает их и выдаёт полученное произведение, ученик поймёт и прочувствует гораздо больше, чем если ему предложить написать на том же ассемблере что-то сложное и развесистое, но при этом перевод из текста в число и обратно выполнить за него в какой-нибудь библиотеке макросов. Здесь же следует посмотреть, как организуются подпрограммы с локальными переменными и рекурсия (нет, не на примере факториала, который высосан из пальца и всем уже надоел, скорее на примере сопоставления строки с образцом или ещё на чём-то подобном), как строится стековый фрейм, какие бывают соглашения о связях.
Следующим этапом может стать изучение Си (разумеется, чистого Си, причём даже не C99, а скорее ANSI C; всё, что было позже, со всеми VLA и _Complex — это результат террористической деятельности так называемого комитета по стандартизации, и влиять на образование вся эта муть не должна). Наконец, когда ученик окажется к этому готов, можно попытаться рассказать ему объектно-ориентированное программирование на примере C++, но для начала — строго без использования средств стандартной библиотеки этого языка, в противном случае как раз ООП и вообще сам язык C++ (при всех его странностях — один из самых интересных языков программирования среди всех существующих) останется за кадром.
В дополнение ко всему этому стоит, разумеется, в какой-то момент сделать шаг в сторону и освоить альтернативные парадигмы программирования, изучить Лисп, Пролог, возможно, Haskell. Ну а дальше всё зависит от ученика и его склонностей; базовое обучение программированию можно на этом этапе считать состоявшимся.
Чего во всём это море не хватает — так это правильной книги для начинающих. Школьные учебники информатики обычно написаны так, что лучше бы их вовсе не писали. Чего стоит одно только упорство, с которым во всех таких учебниках даются определения алгоритма (отметим на всякий случай, что любые попытки дать определение алгоритма противоречат современным научным представлениям, согласно которым понятие алгоритма не просто не имеет определения, но и не может его иметь). Авторы таких учебников тратят целые главы на описание работы с конкретными версиями конкретных коммерческих программ, так что их творения мгновенно устаревают с выходом следующей версии той же программы. Когда же дело доходит до собственно предмета программирования, становится очевидно, что авторы такого учебника, мягко говоря, имеют весьма странные представления о предмете.
Учебники для ВУЗов иногда (но далеко не всегда) пишутся людьми, предмет понимающими. К сожалению, в большинстве своём эти учебники несут на себе «проклятье мейнстрима» — они написаны в предположении, что в учебном процессе используются компьютеры c Windows, причём до сих пор издаются учебники, ориентированные на программирование под MS-DOS. Немногие ВУЗовские учебники, ориентированные на Unix, посвящены отдельным дисциплинам и не создают целостной картины предмета. Все прочие книги по программированию, не являющиеся ни школьным, ни ВУЗовским учебником, обычно расчитаны на профессионалов и для начального самообучения годятся слабо.
Книга под рабочим заглавием «ПРОГРАММИРОВАНИЕ: ВВЕДЕНИЕ В ПРОФЕССИЮ» должна, согласно замыслу автора, заполнить эту брешь.
Краткий список изучаемых тем:
• История вычислительной техники
• Необходимые программисту области математики
• Теория вычислимости и алгоритмов
• Командная строка Unix/Linux
• Внутреннее устройство Unix/Linux и в принципе операционных систем
• Pascal
• Си
• Си++
• Ассемблер и основы для i386
• Компилятор gcc от отладчик gdb
• Системы контроля версий
• Основы сетей
• Подробности различных парадигм программирования
Эта серия книг даст достаточно прочные основы для понимания происходящего в мире IT, а с этими основами - все дороги открыты
Если бы мир был идеален
С моей точки зрения, идеальная последовательность этапов в обучении будущего программиста могла бы выглядеть так. Прежде всего ученика следует убедить в том, что с компьютером следует по возможности общаться через команды, а не через иконки и кнопочки. Это можно было бы сделать, например, предоставив удалённый терминальный доступ к серверной Unix-машине с возможностью сделать там свой веб-сайт, работать с почтой и т.п. Делать это следует как можно раньше, во время учёбы в школе, причём желательно не тянуть с этим до выпускных классов.Научившись пользоваться компьютером так, как это должно быть, а не так, как нас заставляет коммерческий мейнстрим, можно начать обучение программированию — с Паскаля (например, использовать FreePascal), при этом ни в коем случае не использовать никакие «интегрированные среды», скрывающие от пользователя как раз всё то, что следует знать и понимать. Тексты программ следует набирать в каком-то из множества доступных в Unix'е редакторов, для начала это может быть nano или joe, позже, возможно, vim; компилятор следует запускать вручную, дав соответствующую команду. Что касается самого Паскаля, то изучать следует не «язык Паскаль», а программирование. Нет совершенно никакого смысла в настойчивом вдалбливании ученику формального синтаксиса, таблиц приоритетов операций и прочей подобной ерунды: на выходе нам нужно получить не знание языка Паскаль (который, возможно, ученику никогда больше не понадобится в жизни), а умение писать программы. Наиболее высокими барьерами на пути ученика здесь оказываются, во-первых, пресловутые указатели (и автору этих строк не известно никакого другого языка, который был бы столь же удачен как учебное пособие на эту тему), и, во-вторых, рекурсия, с которой тоже можно научиться работать на примере Паскаля. Отметим, что модуль CRT (нежно любимый нашими педагогами настолько, что uses crt; встречается в программах, не использующих никакие возможности из него, причём даже в учебниках) во FreePascal'е под Linux и FreeBSD замечательно работает, позволяя создавать полноэкранные терминальные программы; на Си это сделать гораздо труднее, автор этих строк в своё время, будучи уже опытным программистом, потратил несколько дней на то, чтобы более-менее разобраться с библиотекой ncurses.
Прежде чем переходить к Си, стоит спуститься уровнем ниже и попробовать освоить язык ассемблера. Заодно можно осознать, что такое ядро операционной системы, зачем оно нужно и как с ним взаимодействовать; системный вызов перестаёт быть чем-то магическим, когда делаешь его вручную на уровне машинных команд. Поскольку цель здесь — опять же, не освоение конкретного ассемблера и даже не программирование на уровне ассемблера как таковое, а исключительно понимание того, как устроен мир, не следует, разумеется, снабжать ученика уже готовыми библиотеками, которые сделают за него всю работу (в частности, по переводу числа в текстовое представление); наоборот, написав на языке ассемблера простенькую программу, которая считывает из стандантного потока ввода два числа, перемножает их и выдаёт полученное произведение, ученик поймёт и прочувствует гораздо больше, чем если ему предложить написать на том же ассемблере что-то сложное и развесистое, но при этом перевод из текста в число и обратно выполнить за него в какой-нибудь библиотеке макросов. Здесь же следует посмотреть, как организуются подпрограммы с локальными переменными и рекурсия (нет, не на примере факториала, который высосан из пальца и всем уже надоел, скорее на примере сопоставления строки с образцом или ещё на чём-то подобном), как строится стековый фрейм, какие бывают соглашения о связях.
Следующим этапом может стать изучение Си (разумеется, чистого Си, причём даже не C99, а скорее ANSI C; всё, что было позже, со всеми VLA и _Complex — это результат террористической деятельности так называемого комитета по стандартизации, и влиять на образование вся эта муть не должна). Наконец, когда ученик окажется к этому готов, можно попытаться рассказать ему объектно-ориентированное программирование на примере C++, но для начала — строго без использования средств стандартной библиотеки этого языка, в противном случае как раз ООП и вообще сам язык C++ (при всех его странностях — один из самых интересных языков программирования среди всех существующих) останется за кадром.
В дополнение ко всему этому стоит, разумеется, в какой-то момент сделать шаг в сторону и освоить альтернативные парадигмы программирования, изучить Лисп, Пролог, возможно, Haskell. Ну а дальше всё зависит от ученика и его склонностей; базовое обучение программированию можно на этом этапе считать состоявшимся.
При чём тут книга
К сожалению, ни одно учебное заведение не предложит вам ничего сколько-нибудь похожего на вышеописанную программу; остаётся лишь пойти тем же путём, каким уже прошли, судя по всему, все программисты высокой квалификации — учиться самому. Книг по программированию вокруг — хоть отбавляй, и в принципе, если удачно выбирать, что читать, а что проигнорировать, вполне можно самостоятельно стать программистом (собственно, именно так они и появляются).Чего во всём это море не хватает — так это правильной книги для начинающих. Школьные учебники информатики обычно написаны так, что лучше бы их вовсе не писали. Чего стоит одно только упорство, с которым во всех таких учебниках даются определения алгоритма (отметим на всякий случай, что любые попытки дать определение алгоритма противоречат современным научным представлениям, согласно которым понятие алгоритма не просто не имеет определения, но и не может его иметь). Авторы таких учебников тратят целые главы на описание работы с конкретными версиями конкретных коммерческих программ, так что их творения мгновенно устаревают с выходом следующей версии той же программы. Когда же дело доходит до собственно предмета программирования, становится очевидно, что авторы такого учебника, мягко говоря, имеют весьма странные представления о предмете.
Учебники для ВУЗов иногда (но далеко не всегда) пишутся людьми, предмет понимающими. К сожалению, в большинстве своём эти учебники несут на себе «проклятье мейнстрима» — они написаны в предположении, что в учебном процессе используются компьютеры c Windows, причём до сих пор издаются учебники, ориентированные на программирование под MS-DOS. Немногие ВУЗовские учебники, ориентированные на Unix, посвящены отдельным дисциплинам и не создают целостной картины предмета. Все прочие книги по программированию, не являющиеся ни школьным, ни ВУЗовским учебником, обычно расчитаны на профессионалов и для начального самообучения годятся слабо.
Книга под рабочим заглавием «ПРОГРАММИРОВАНИЕ: ВВЕДЕНИЕ В ПРОФЕССИЮ» должна, согласно замыслу автора, заполнить эту брешь.
Краткий список изучаемых тем:
• История вычислительной техники
• Необходимые программисту области математики
• Теория вычислимости и алгоритмов
• Командная строка Unix/Linux
• Внутреннее устройство Unix/Linux и в принципе операционных систем
• Pascal
• Си
• Си++
• Ассемблер и основы для i386
• Компилятор gcc от отладчик gdb
• Системы контроля версий
• Основы сетей
• Подробности различных парадигм программирования
Эта серия книг даст достаточно прочные основы для понимания происходящего в мире IT, а с этими основами - все дороги открыты
Для просмотра скрытого содержимого вы должны войти или зарегистрироваться.
Последнее редактирование: