Выбрать главу

Типичный предмет, который преподается, называется «Программирование» или «Информатика». И обучают на этих курсах азам программирования на каком-либо языке из семейства C++/Pascal. Дают базовый синтаксис, учат натягивать на форму объекты и писать обработчики. Иногда рассказывают о быстрых методах сортировки. А затем студенты, прослушавшие такие курсы (а особо одаренные еще и написали несколько простеньких программок), считая себя гуру в указанном вопросе, приходят на работу. И оказывается, что ничего-то они не знают, а то, что знают, совершенно не годится с точки зрения бизнеса. И приходится опять в них вкладывать и обучать элементарным вещам. Причем, как ни удивительно, эти элементарные вещи имеют всеобъемлющий характер и могут быть распространены гораздо дальше общепринятых рамок «Программирования». О чем же идет речь?

Прежде всего при составлении программы следует понимать, что количество информации вокруг нас, равно как и ее генераторов, непрерывно возрастает. И главное – научиться эффективно структурировать эту информацию, находить взаимосвязи и выделять необходимое. Поэтому занятие частностями, как-то: изучение интерфейса Word, детальное объяснение ООП на примере С++ и пр. на протяжении большей части курса слишком расточительно. Нужно искать инварианты в существующем мире и давать их студентам вместе с инструментарием для дальнейшего познания.

Какие инварианты я бы выделил в настоящий момент? В первую очередь – искусство совместной работы. Не каждый сам по себе что-то пишет в своей норке, а группа создает нечто, что одному человеку не осилить (из-за сложности, нехватки времени или большого объема). А совместная работа подразумевает разделение кода и текста, версионность документов; формирование различных баз знаний, систем багтрекинга и увязку их с системой контроля версий; использование форумов и досок объявлений, проведение телеконференций. Необходимо рассказать о таких возможностях, показать лучшие практики, продемонстрировать продукты и для закрепления знаний устроить лабораторные работы. Причем все это нельзя давать сухо, конспективно. Желательно привнести популяризаторскую изюминку, далеко ходить не надо – откройте книги Перельмана. Возможно, полезной будет установка одного-другого продукта на лабораторном занятии. Можно, например, разделить группу на две команды, каждая из которых ставит и настраивает свой продукт, а потом сравнить результаты и сделать выводы. И после этого предложить сделать те же самые вещи при помощи Excel-файлов. Как ни смешно, однако ситуация, когда при помощи одного Excel-файла пытаются собрать информацию от нескольких десятков сотрудников и поддерживать ее в актуальном состоянии (делегируя актуализацию самим сотрудникам) – ужасающе типична для российских компаний. То есть снова и снова возникает одна и та же идея использования бинарного файла закрытой структуры для совместной работы, хотя постановка задачи вопиет о необходимости использования элементарной 3-звенной CRM-системы [CRM (customer relationship management) – управление взаимодействием с заказчиками. 3-хзвенная архитектура представляет собой решение в котором существуют 3 уровня: уровень данных (база данных), уровень бизнес логики (сервер приложений) и презентационный уровень (тонкий или толстый клиент на машине пользователя)].

Поскольку в настоящий момент существует масса продуктов с открытым кодом, очень неплохо было бы дать о них информацию и использовать их в программе. Грядущее вступление в ВТО может сильно ударить по карману любителям проприетарного ПО. В качестве следующего инварианта я бы выделил знакомство с паттернами программирования (чтобы знать, что велосипеды изобретены и ждут седоков [Шаблоны проектирования (паттерн, pattern) – это эффективные способы решения характерных задач проектирования, в частности проектирования компьютерных программ. Паттерн не является законченным образцом проекта, который может быть прямо преобразован в код, скорее это описание или образец для того, как решить задачу, таким образом, чтобы это можно было использовать в различных ситуациях. Объектно-ориентированные паттерны зачастую показывают отношения и взаимодействия между классами или объектами, без определения того, какие конечные классы или объекты приложения будут использоваться. Алгоритмы не рассматриваются как паттерны, так как они решают задачи вычисления, а не проектирования.]).В качестве наиболее понятного паттерна, чье влияние может быть распространено и на массу различных задач, выходящих за рамки разработки ПО, я предложил бы MVC [Шаблон MVC широко признан как один из самых хорошо разработанных и зрелых шаблонов проектирования которые используются в данное время. При использовании шаблона MVC, обработка разбивается на три различных части, а именно на Модель(Model), компоненты представления (View) и контроллер (Controller). Модель – это объект приложения. Контроллер описывает, как интерфейс реагирует на управляющие воздействия пользователя. Вид должен гарантировать, что внешнее представление отражает состояние модели. Такой подход позволяет присоединить к одной модели несколько видов, обеспечив тем самым различные представления. Более того, можно создать новый вид не переписывая модель. (Ист.: «Приемы объектно-ориентированного проектирования. Паттерны проектирования», Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес, М., 2007;«Введение в Struts», Кевин Беделл, 2002).]. Даже элементарная задача набора красивого документа должна осуществляться именно через этот паттерн. Статики давно нет, надо учиться оперативно и быстро реагировать на изменения во внешнем мире. Касательно документов – содержание и внешнее представление должны быть разделены! Тогда любые новые требования к оформлению (статья для журнала, включение части документа в объемлющий документ, изменение требований…) удовлетворяются достаточно просто. При этом исходный текст совершенно не затрагивается. Если взять за точку отсчета именно такой подход (а он идет из «программирования» – один первоисточник информации, данные и представление обособлены), то обучение системам а-ля WYSIWYG (Word, OO, FrameMaker, PageMaker, Writer…) является танцем бульдозера, вырвавшегося на городской газон. После работы с Word восприятие студента необратимо искорежено. Начинать надо с систем типа LaTeX, Docbook или обучения CSS (прелесть CSS для веб-страниц можно оценить на www csszengarden com). Только после того, как идея MVC (или стилей) будет принята, можно переходить к Word. Тогда уже можно доходчиво объяснить, ссылаясь на полученный на предыдущем шаге опыт, назначение стилей и пользу от их применения. Можно развивать идею дальше и искать аналогии для других паттернов. В частности, паттерн Facade может быть перенесен как в область построения экспериментальных установок, так и в области сложной обработки данных. Упрощение системы, локализация знаний о специфичных данных, будь то формат картинки или протокол обмена с устройством управления шаговым двигателем – суть одно и то же.