Поговорим о программировании. Размышления бывшего программиста
Программисты и все остальные
Программирование доставляет нам радость,
потому что позволяет удовлетворить стремление к творчеству,
глубоко заложенное в нас, и разделить это чувство радости с другими.
Фредерикс Брукс, «Мифический человеко-месяц»
Программисты: профессионалы и любители
О пользе изучения программирования
Программисты и профессионалы
Всего 15 лет назад в нашей стране практически 100% пользователей компьютеров составляли программисты. И абсолютное большинство из них занимались решением расчетных (научно-технических) задач, поэтому «обычные» люди их часто назвали «математиками», включая в эту категорию также инженеров-электронщиков, операторов и т.п. В общем, всех, кто имел доступ в вычислительный зал, который для простых смертных был terra incognita.
Вообще, для всех очевидно, что компьютеры нужны не для того, чтобы с их помощью можно было писать программы, а для того, чтобы эти готовые программы могли решать некоторые прикладные задачи: рассчитывать траекторию баллистической ракеты, зарплату, моделировать процесс термоядерной реакции и т.д. Однако даже с готовыми программами в те времена чаще всего работали или их разработчики, или специально подготовленные люди, но никак не специалисты из данной прикладной области. «Сам проектирую, сам пишу, сам использую...»
На рубеже 90-х годов — на Западе чуть пораньше — в развитии вычислительной отрасли произошел коренной перелом: к компьютеру получили доступ те, кого сейчас называют «конечные пользователи». Разумеется, это непосредственно связано с началом широкого внедрения ПК (снижение стоимости оборудования при росте мощности, интерактивный режим работы и пр.). Процесс этот был довольно болезненным для обеих сторон — и для разработчиков, и для пользователей. Многие специалисты категорически отказывались вообще садиться за компьютер: не царское, мол, это дело, да и, говорят, для здоровья вредно... Массовый переход разработчиков экономических программ в бухгалтеры на рубеже 90-х во многом объяснялся тем, что проще было самому изучить бухгалтерию, чем заставить последних осваивать компьютеры.
Одновременно резко возросли требования к качеству программ, поскольку появилась необходимость в отчуждаемых продуктах. Именно тогда стало очевидно, что поставить на стол компьютер — дело нехитрое. А написать такие программы, чтобы с ними легко мог работать любой человек, — та еще задача! В общем, проблем хватало.
Именно в то время при описании достоинств своей программы хорошим тоном считалась такая фраза: «Дружественный интерфейс позволяет легко освоить работу с системой даже непрофессиональному пользователю». И вот в начале в 90-х годов я вдруг столкнулся с такой ситуацией. Однажды директор института-заказчика, рассматривая техническое задание на нашу разработку, вдруг взял ручку, зачеркнул что-то в нашем тексте и написал: «... должен обеспечить освоение работы с программой профессионалу-гидрогеологу». И сказал, глядя на меня: «Это мы — профессионалы, а вы... — программисты».
... А мы с тех пор стали писать в своих документах: «Ориентирован на геофизиков (бухгалтеров, милиционеров, студентов и пр.), не имеющих специальной компьютерной подготовки». Правда, что сегодня понимается под термином «специальная подготовка», лично я не знаю. По крайней мере, даже классные программисты сейчас порой слабо разбираются в обыкновенном Microsoft Word.
Программисты: профессионалы и любители
В моем представлении «программист» — это человек, который не столько умеет писать, сколько пишет программы. (Известный афоризм: «Если человек говорит, что умеет играть в преферанс, но не хочет, то это — не преферансист».) Далее весьма полезно выделять профессиональных программистов, но тут необходимо подчеркнуть, что в общем случае понятие «профессия» подразумевает лишь то, что данная деятельность является для человека основным способом зарабатывания денег на жизнь. В то же время следует помнить, что «профессия» не является синонимом «квалификация», особенно сейчас в условиях разделения труда в среде разработчиков. Безусловно, в среднем профессионал должен быть более подготовленным специалистом, но в каждом конкретном случае все может быть наоборот.
Во все времена среди программистов было деление на профессионалов и непрофессионалов. В старые времена к первым относились те, кто кроме написания программ ничего делать не умел, а ко вторым — специалисты в прикладных областях (в основном связанных с математикой — гидрогеологи, физики, связисты и пр.), которые научились программировать для решения собственных задач. Кстати, многие прикладники были очень сильными программистами. Сейчас к программистам-«любителям» прибавилась еще одна большая категория людей, которые пишут приложения «для дома, для семьи» и число которых довольно быстро растет за счет широкого распространения VBA в MS Office.
Нельзя не сказать, что за последние годы барьер, разделяющий «профессионалов» и «любителей», сильно увеличился. Действительно, с одной стороны, чтобы стать хорошим клиент-серверным разработчиком, необходима серьезная подготовка, а с другой — сплошь и рядом деньги на программировании зарабатывают далеко не самые квалифицированные специалисты. Все смешалось...
Так или иначе, но эти заметки пишутся для программистов «вообще». В любом случае, полезно помнить, что многие профессионалы вырастают из любителей, а решение достаточно многих прикладных проблем требует не столько изощренного программирования, сколько знания конкретной предметной области. И если кто-то хочет стать профессиональным разработчиком, он в первую очередь должен научиться работать в коллективе, и готовиться к подчинению технологической дисциплине и постоянному повышению квалификации...
О пользе изучения программирования
Еще 10-15 лет назад считалось, что каждый технический специалист должен уметь худо-бедно делать программы для ЭВМ для решения каких-то своих задач. В такой постановке вопроса есть свой резон, ведь программирование — это прежде всего создание логического алгоритма для достижения желаемой цели (с помощью компьютера или без него). Кроме того, даже если вы будете передавать задачу профессиональному разработчику, то знание основ программирования поможет правильно формулировать задание и вообще понимать «смежника».
Однако итоги всеобщего обучения программированию той поры вряд ли можно назвать успешными. На практике получалось так, что тот, кто хотел практически делать программы, осваивал эту технологию самостоятельно. Абсолютное же большинство студентов забывали о программировании вскоре после сдачи зачета. Так было в 80-х годах, так происходит и сейчас (я имею в виду подготовку некомпьютерных специалистов).
Причин этому довольно много. В 80-е годы (и ранее) освоение программирования напоминало изучение теории плавания без практических занятий на воде. К этому нужно прибавить откровенно слабую методику преподавания, которое сводилось не к изучению программирования на примере некоторого языка, а к освоению синтаксиса языка без привязки к технологии построения алгоритмов и практической реализации программ.
Сейчас компьютеры стали существенно доступнее, но ситуация с изучением программирования практически не улучшилась. Одной из причин этого является принципиальное сомнение в целесообразности его освоения. Действительно, зачем учиться программированию, если можно воспользоваться многочисленными готовыми приложениями? Поэтому давайте просто обучать «компьютерной грамоте».
Да, такая постановка вопроса имеет рациональное зерно, но все же представляется довольно ограниченной.
- Программирование помогает лучше формулировать логику решения практически любой задачи (совсем не обязательно чисто вычислительной). Как говорили в старину, «арифметика мозги в порядок приводит».
- Расширение функциональности готовых программ с неизбежностью требует их более тонкой настройки и адаптации к нуждам конкретного пользователя. Использование методов программирования резко расширяет возможности решения этой задачи. Привлечение для этого профессиональных разработчиков часто просто бессмысленно: сделать самому — быстрее, чем идти в другое крыло здания для общения с коллегами.
- За последние 10 лет инструменты разработки и технология их освоения претерпели радикальное изменение. Эти средства стали существенно более понятными на чисто интуитивном уровне. Кроме того, радикально изменилась схема практической работы. Упрощенно говоря, раньше нужно было сначала изучить теорию программирования, чтобы написать даже простенькую программку, то сейчас серьезное освоение программирования начинается обычно после написания полезного приложения.
Современные средства позволяют ощутить эффект от программирования буквально с первых шагов, предоставляя возможность поэтапного наращивания своих знаний и навыков. Но при этом необходимо помнить одну важную истину: для перехода к серьезной профессиональной разработке одного опыта недостаточно — в какой-то момент потребуется изучение теории.