|
||
|
||
Надо ли учить программированию?Владимир Ясинский (yas@inbox.ru) Бытует мнение, что собственно программированию учить не надо. Дескать, достаточно разобраться с языком (средой) программирования и дело пойдет (!) само. Что ж, если кому-то этого достаточно, то "флаг ему в руки …". А если недостаточно? Как быть в этом случае? И, вообще, надо ли? В не очень-то и далеком прошлом, когда электронные вычислительные машины занимали огромные залы, а обслуживающий персонал походил своей униформой на хирургов, профессия программиста была окутана ореолом таинства и мистики, отделявшего их от простых смертных. Слова FORTRAN, ALGOL, PASCAL, COBOL, LIPS, BASIC были не менее узнаваемыми, чем "мама" и "папа". Изучение языков программирования вошло в школьные программы. Прошло время. Залы опустели. ЭВМ превратились в компьютеры и переместились на столы, в кейсы и в карманы пиджаков. С программистов спал налет таинственности. Появился термин "пользователь". Программные среды (они стали называться так) все больше и больше стали походить на редакторы, в которых процесс программирования сродни конструктору "LEGO": вам предлагается список возможных действий и готовых блоков, а вы выбираете. На первый план вышла скорость написания программ, а не их качество. Громоздкость программ и малоэффективные алгоритмы компенсируются аппаратными возможностями. Именно эти цели и преследовали создатели Visual-систем, предназначенных для облегчения работы программистов при разработке приложений для работы в Windows. Появились понятия — модульная, компонентная и объектно-ориентированная технологии программирования. Мало того, представляя первую версию Visual Basic, глава Microsoft Corporation Билл Гейтс сделал громкое заявление, что "… Отныне можно создавать программы, не написав ни строчки кода …". Надо отдать должное Биллу, красиво сказал. Но одно "но...", и довольно большое, всё же осталось. Да, в современных программных средах многое можно сделать без написания кода (например, красивый интерфейс) — честь им за это и хвала. Но ведь это только часть программы. Пусть необходимая, но все же часть. А дальше? Сам ведь по себе красивый интерфейс работать не будет! Дальше же надо объяснить компьютеру, что от него хотят при нажатии на ту или иную кнопку, что делать, если вызванное приложение не отвечает и так далее и тому подобное. А вот тут-то современные технологии и дают сбой. Нет, они не бросают нас на произвол судьбы. Нам снова предлагают воспользоваться готовыми рецептами. Однако стоит отойти от стандартной схемы и… уже надо или что-то придумывать самому или вносить изменения в предложенный вариант. Вот тут-то и начинается самое интересное. Оказывается, создать серьезную программу "не написав ни строчки кода" ну никак не получается. Причем до глубинных причин даже и докапываться не надо. Истина оказывается не "где-то рядом", а просто лежит на поверхности — не взирая на все громкие заявления, Visal-системы явно или неявно подразумевают операторно-процедурную технологию программирования. С этим можно соглашаться или отрицать, но так или иначе, именно на процедурном подходе основываются многие из используемых сейчас на практике технологий программирования: модульная, компонентная, объектно-ориентированная, событийно-ориентированная. Впрочем, иначе и быть не могло. Представьте себе, что в один не очень прекрасный день мы все вдруг забыли азбуку и грамматику и стали оперировать засевшими в памяти готовыми фразами, а то и целыми абзацами. Причем изменить что-то в них мы были бы не в состоянии — ну, не умели попросту. Представили? Нравится? Не знаю как вам, а мне лично — нет. Так вот, точно такая же ситуация складывается сейчас и в программном мире. Как это не покажется странным, но выход в том, чтобы вспомнить старое. То есть вновь обратиться к некогда популярным и теперь почти забытым DOS- версиям операторно-процедурных языков. К этому есть несколько причин. Дело в том, что написание хороших программ кроме знания самого языка программирования (умения писать код) требуется наличие особого типа мышления — так называемого программистского мышления. Любой язык программирования — это в первую очередь именно язык, со всеми вытекающими из этого последствиями. Это и специальные правила, и грамматика, и синтаксис. Однако даже усвоение всех особенностей языка программирования отнюдь не является синонимом умения писать программы. Если Вы изучаете какой-либо иностранный язык, то можете сказать, что Вы им овладели только тогда, когда начали ловить себя на том, что думаете на нем. То же самое наблюдается и в программировании. Особенность процесса написания программ заключается в том, что он основан на, если можно так выразиться, нечеловеческой логике. Эта "нечеловечность" заключается в том, что надо отбросить все привычки обыденной жизни и как бы "влезть в шкуру компьютера". Думаете, что я перегибаю палку. Хорошо, смотрите сами. Элементарная задача — строку из нескольких произвольных чисел расположить в порядке их возрастания. Если чисел не больше десяти, то на решение задачи вам потребуется несколько секунд. А вот теперь попробуйте объяснить компьютеру как это сделать. Слабо? Вот то-то же. Дело в том, что в процессе решения этой задачи вы неосознанно использовали имеющийся у вас опыт и знания. Причем вы не задумываетесь, как вы это делаете. Компьютеру же надо объяснить абсолютно все и очень подробно расписать всю последовательность операций. А для этого надо уметь расчленить любое действие на элементарные шаги и предельно детально описать последовательность их выполнения. То есть надо написать подробную инструкцию для компьютера, иначе говоря — составить алгоритм процедуры сортировки чисел по возрастанию. Алгоритм, переведенный на язык, понятный компьютеру, и будет программой, с помощью которой он и сможет повторить ваши действия. Разумеется, для десятка чисел писать такую программу не имеет смысла. Однако теперь уже ничего не мешает попросить компьютер повторить ту же операцию с несколькими сотнями, тысячами или миллионами чисел. Если программа написано правильно, то (в зависимости от быстродействия компьютера) эта процедура также займет от долей секунды до нескольких секунд. Причем вы можете ошибиться при сортировке, а компьютер при хорошо отлаженной программе всегда будет выдавать точный результат. В этом и заключается предназначение компьютерной техники — облегчать и ускорять выполнение каких-либо операций. Нетрудно видеть, что подобное "расчленение" требует наличия специально выработанных навыков. Вы же, поднимая руку, не даете отдельно команду каждой мышце и сухожилию и не определяете последовательность их выполнения. Вы просто её поднимаете. Ну, нет у человека таких навыков, не нужны они ему в обычной жизни! А вот если вы хотите писать программы, причем, хорошие программы, то подобные навыки придется приобрести. Приобрести же их проще всего опять же на примере операторно-процедурного алгоритмического языка. Принципы организации программ, методы построения и реализации алгоритмов мало зависят от выбора языка программирования. Несмотря на явную зависимость алгоритмов от степени формализованости языка, сама логика программирования инвариантна по отношению к языку, на котором реализуются разработанные алгоритмы. Поэтому в качестве базового языка, на основе которого надо проводить обучение, целесообразно использовать одну из DOS-версий BASIC — Quick BASIC 4.5. Разумеется, в роли такого "базового тренажера" может выступить и PASCAL. Но, в той или иной мере именно с BASIC знаком практически каждый, из окончивших школу. Кроме того, в пользу такого выбора говорит и уникальный по логике и естественности процесс написания и отладки кода. Quick BASIC 4.5 позволит легко освоить обязательные для программиста элементы (циклы, работу с файлами, портами, регистрами и т. д.). Но главное в том, что, разбирая готовые и разрабатывая свои алгоритмы, человек научится думать на языке, понятном компьютеру. Если этого не делать, а начинать сразу с оболочек типа Visual Basic, Visual C+ и C++, Visual FoxPro, Delphi и т. д., то, несмотря на все преимущества, которые дают такие системы, научиться что-то делать самому, кроме использования готовых методов и оператора IF, будет крайне сложно. А если учесть, что именно процедурная технология лежит в основе программистского мышления, то становится понятным, что BASIC — как раз то, что сейчас и нужно. Кстати, нелишне отметить, что программные конструкции Quick BASIC 4.5 аналогичны тем, которые применяются в Visual Basic всех версий и Visual Basic for Application (VBA), входящего в состав пакета Microsoft Office. О распространенности последнего даже можно и не говорить. Освоение основных положений процедурной технологии — это обязательный этап в подготовке программиста. Когда он пройден, то можно приступать к серьезным вещам на вышеназванных оболочках. В этом случае КПД производительности будет гораздо выше, поскольку не придётся вручную создавать интерфейс, процедуры открытия стандартных типов файлов и т. п. - достаточно просто знать, как это на самом деле делается. Разумеется, для решения такой задачи нужны и соответствующие учебники. А вот здесь-то и лежит тот камень преткновения или те грабли, о которые многие (и не единожды) спотыкаются. Можно сказать, что настоящих учебников, способных помочь обучению именно программированию, нет. Не хочу проводить подробный анализ причин такого положения, но об одной, на мой взгляд, основной, все же упомяну. Практически вся современная литература (не только в СНГ), посвященная программированию (отдельные "всплески" не в счет), описывает исключительно работу с программными средами с микрореверансами в сторону детализации самого процесса написания программ. К этим "всплескам" можно, например, отнести книгу Рода Стивенса "Алгоритмы для Visual Basic". Очень хорошая книга. Но она ориентирована на тех, кто уже далеко не новичок в программировании, и посвящена разработке высокоэффективных и сложных алгоритмов сортировки данных. Есть и ряд других, но опять же - их очень мало, они не являются учебниками в полном смысле этого слова, а относятся скорее к разряду справочников. Такой подход к компьютерной литературе широко популярен на западе. Причина достаточно очевидна: любые знания — это, в первую очередь, деньги, а они бывают только своими. Компании и фирмы, разрабатывающие программное обеспечение, всегда смогут найти или купить себе программистов из тех, кто "с флагом в руках" дошел до всего сам — мир большой и на их век таких хватит! Зачем тогда заботиться о ком-то, кого еще надо учить? Время — деньги! Опираясь именно на такую политику разработчиков и полностью от них завися, компьютерные издательства гонят исключительно литературу для пользователей. Сработал и закон обратный связи — пользователь, обработанный мощной пропагандисткой машиной, диктует своим спросом предложения. Точно такую же политику ведут и наши издательства. Понять их можно. Книги, это то, за счет чего они живут. Если раньше существовали государственные программы и заказы для издания учебной литературы, был план, который — закон, то теперь каждый выживает самостоятельно. К тому же и в "компьютерных" издательствах решения, наверняка, принимаются теми, кто в силу своей профессиональной ориентации достаточно далек от понимания неординарности сложившейся ситуации. Не думаю, что удастся сдвинуть такую махину. Хотя, попробовать все же стоит. По приведенным выше причинам даже наиболее мобильные издательства компьютерной литературы, входящие в состав мощных холдингов, не рискуют издавать книги, спрос на который надо организовывать. Никто не хочет инвестировать средства в проекты, которые не принесут немедленной прибыли. Мне могут возразить, что интерес у молодежи к программированию сейчас резко вырос и нечего пороть горячку. Что ж, кривая куда-нибудь и вывезет. Не спорю. Однако далеко ли можно уехать на голом энтузиазме? Его же надо и подкармливать. А еще лучше — управлять.
За рубежом это уже поняли и начинают браться всерьез за подготовку программистов. Одним из таких примеров может служить израильский сайт http://www.interface.co.il/ school/index.html фирмы, организованной, кстати, нашим бывшим соотечественником. Чтобы высказанное мной не было принято за сотрясание воздуха, могу направить желающих на свою страницу, с которой можно скачать электронный вариант одного из написанных мной в стиле изложенной концепции учебников программирования для начинающих. Хотя эта книга была написана пять(!) лет назад, на мой взгляд, она сегодня даже больше актуальна, чем раньше. Конечно, в ней надо сменить акценты, изменить название и кое-что добавить (короче, переделать). Но общий стиль построения учебника очень созвучен нынешнему положению. Если то, что высказано в этой статье созвучно Вашим мыслям или Вы имеете другое мнение, поделитесь. Буду рад любым откликам.
| ||
Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com |