Достижения во всех областях не были бы возможны без мощного развития вычислительной техники. Целые армии электронщиков и программистов изо дня в день работают над дальнейшим усовершенствованием компьютеров, улучшая уже привычные их функции и внедряя и распространяя совсем новые.
Сфера применения компьютеров значительно расширяется. Это требует все большего объема работ по программированию. В результате расходы на него достигают более 90% от общей стоимости вычислительной техники – и доля их продолжает расти, а профессия программиста в наши дни стала одной из самых популярных.
Какими же качествами нужно обладать, чтобы стать признанным профессионалом в этой сфере? Чему научат в вузах? Что придется осваивать самостоятельно?
Часто приходится слышать, что человек, увлекающийся компьютерами, прочитав несколько книг, посвященных вопросам программирования, успешно пишет несколько программ на одном-двух языках. После чего считает себя профессионалом в этой сфере и недоумевает: чему же еще его могут научить?
Где и чему учат
Остановимся на специальности «Прикладная математика», так как она дает общие теоретические принципы программирования, обширную математическую базу для решения поставленных задач, а другие специальности все-таки готовят специалистов по их автоматизации. После окончания института студент получает квалификацию «инженер-математик». Студенты изучают практически все распространенные языки программирования (высокого и низкого уровня), уделяют внимание специальным языкам (предназначенным для решения узкопрофильных задач), а также знакомятся с пакетами готовых программ, которые в дальнейшем могут использовать в своих разработках (графические системы, СУБД, САПР и т. д.). Изучение этих предметов вырабатывает системное мышление, позволяет оценить проблему в комплексе – и подобрать наилучший вариант ее решения, применяя все полученные навыки.
Этапы работы
1. Любой процесс программирования начинается с постановки задачи.
Хорошо, когда программист – работник крупной фирмы или член группы разработчиков, таких же профессионалов, как он сам, а задачу перед ним ставит его коллега. Они будут разговаривать на одном языке и достаточно быстро поймут друг друга. Но если с заказчиком придется общаться самостоятельно, то надо приготовиться к длительной работе. Клиент чаще всего не в состоянии внятно объяснить, чего он хочет от новой программы, что должно в ней быть и как этому следует выглядеть на экране и в печатном документе. Наоборот, очевидное для заказчика программисту даже в голову не приходит. Так что на этом этапе последнему приходится выступать в какой-то степени в роли психолога, так как надо прояснить все непонятные вопросы, а потребитель, для которого они уже ясны, просто не считает нужным на них останавливаться – и раздражается, когда снова и снова уточняются непонятные формулировки. Кроме того, если люди друг друга поняли неправильно, вся остальная работа будет просто впустую затраченным временем. Этап завершается составлением технического задания, в котором максимально подробно описывается вся дальнейшая работа программиста.
В рамках этого этапа программисту часто приходится быстро освоить предметную область, о которой он раньше в лучшем случае только слышал. Сегодня надо рисовать географические карты, завтра придется моделировать биологические процессы, послезавтра – автоматизировать бухгалтерию и т. д. Да, узкопрофильными задачами чаще занимаются выпускники соответствующих вузов, в которых сейчас почти во всех есть специальность по информационным системам и автоматизации для конкретной области. Но неизвестно, где придется дальше работать. Поэтому человек, готовящийся стать программистом, должен уметь быстро находить необходимую для себя информацию в книгах.
Тут важно, чтобы не получилось как в известной шутке.
2. Далее следует определить, какая техника понадобится для автоматизации поставленной задачи.
Возможно, что мощности оборудования, имеющегося в распоряжении заказчика, не хватит для нормальной работы программы. Тогда надо дать рекомендации о закупке новых компьютеров с требуемыми характеристиками. Для чего, даже если вы уже давно закончили учебу, вам обязательно быть в курсе всего происходящего в области компьютерной техники, которая обновляется со скоростью, не виданной в других областях. Таким образом, непрерывное самообразование опять выходит на первый план.
3. Все вопросы прояснены – можно приступать, собственно, к написанию программы.
Этот процесс требует смирения и предельной точности. Команды компьютера формулируются абсолютно полно и четко. Машины могут делать только то, что им сказано, и потому выдаваемые им приказы не должны содержать ни малейшей двусмысленности. Поэтому этот этап начинается с разработки алгоритма, где излагается вся последовательность действий машины. При этом хорошенько продумайте все возможные варианты развития событий, опишите все возникающие ситуации: для этого и была предварительно внимательно изучена предметная область. Чем полнее алгоритм отслеживает стандартные и нестандартные ситуации, тем лучше будет работать программа в дальнейшем – и не зависать при каждом «удобном» (непредусмотренном) случае.
Не говоря о стандартных математических методах, для рационального написания алгоритма надо применить все свои навыки логического мышления, которое вырабатывается за годы решения математических задач. Почему все? Ведь вы не просто лично решаете задачу, а планируете такую последовательность команд, которая позволит компьютеру самому искать решение в каждом конкретном случае.
На этом же этапе программист определяется и с языком программирования, если это уже не сделано до него. Разные языки приспособлены для решения разных задач и при этом имеют свои достоинства и недостатки. Получив в процессе учебы представление о них, специалист должен выбрать оптимальный вариант как для себя лично, так и для других (программу, возможно, придется изменять и дорабатывать другому человеку) – а также не забыть о возможностях техники.
4. После написания программы начинается, как ни странно, самый трудоемкий этап – ее отладка.
В 90% случаев программа сработает не так, как задумывалось изначально. Обязательно найдется что-то непредусмотренное ситуация – и чтобы понять, в чем дело, приходится, задавая различные исходные условия, проходить все этапы шаг за шагом десятки раз, выявляя в лучшем случае непредвиденные ситуации, а в худшем – неправильное решение задачи. Человек, занимающийся такой работой, должен обладать завидной усидчивостью, терпением, спокойствием. Если этих качеств у вас нет, подумайте, стоит ли вам браться за программирование. Ведь вам будет очень сложно доводить дело до конца. Или вы остановитесь в своей профессиональной деятельности на маленьких задачках, заниматься которыми, конечно, тоже нужно – однако они не дадут интереса для ума и не принесут большой материальной отдачи.
5. Пусть все шаги успешно сделаны – останется последний: объяснить заказчику, что написанная программа – как раз то, что тот хотел.
В лучшем случае, если вы справились с постановкой задачи и на всех этапах работы контактировали с заказчиком (или постановщиком задачи), замечаний будет немного. Маленькие доработки – и программа готова.
В худшем… Придется привлечь все свои спокойствие и терпение и, набравшись горького опыта, начать сначала. При условии, если с вами захотят иметь дела.
Так что если вы решили, что программирование – это дело вашей жизни, то вас ждут МИРЭА, МГИЭМ и другие вузы. Но не забывайте, что высокооплачиваемым профессионалом вы сможете сделать себя только сами и учиться придется всю оставшуюся жизнь (или по крайней мере до пенсии).