О настоящих программистах
АрхивЯ не знаю, что побудило меня писать эту статью, мучиться поздними вечерами, многократно набирая и стирая текст. Наверное, желание подвести какие-то итоги, осмыслить результаты, родить что-то новое даже для себя.
Программирование - это очень интересное и увлекательное занятие. Однажды занявшись им, я уже не мог остановиться. Это стало как болезнь. Я думал о программах, языках, операторах все время - в автобусе, перед телевизором, в постели. Один из вопросов, который мучил меня постоянно: "Когда я смогу считать себя настоящим программистом?" В самом деле, как отличить настоящего программиста от опытного пользователя? В нашей стране программистом могут назвать кого угодно. Например, оператора, вводящего информацию в базы данных, или администратора, следящего за работой купленной задачи. И, уж тем более, каждый может назвать себя программистом, если ему это выгодно. Написав однажды незабываемую "Hello world!", любой может заявить о том, что он уже знаком с C++.
Когда этот вопрос встает перед человеком? Я считаю, что обычно в двух случаях.
- Для настоящих программистов это всегда актуально. За прогрессом нужно бежать бегом, а не почивать на лаврах.
- При поступлении на новую работу.
Именно во время трудоустройства работодатель пытается выяснить, кто вы на самом деле, а вы пытаетесь доказать, что являетесь самым лучшим. Разумеется, в глазах любого хозяина человек, только что окончивший вуз и не имеющий опыта работы, автоматически попадает в разряд "учеников". Какой бы красивый диплом (красный, золотой и т. д.) вы ни показали, это говорит только о расположенности к данному предмету и способностях к обучению. Но не более того. Опыт в написании программ для лабораторных работ лучше не упоминать. Не произведет впечатления и длинный список изученных языков программирования и использованных аппаратных платформ. Обычно он начинается с ЕС ЭВМ и заканчивается станциями Sun, а также от фортрана до Java. Чем больше этот список, тем меньше шансов у вас получить работу. Обычно фирме не требуется столь широкий специалист с поверхностными знаниями, ей нужен человек глубоко и полно разбирающийся в своей узкой области. На Западе студенты получают свой первый опыт, устраиваясь волонтерами в какой-либо бесплатный проект. Из таких проектов потом часто вырастают всемирно известные программы (например Navigator), а сотрудники могут купить себе по "Порше".
Нанимателю достаточно сложно самому выяснить квалификацию работника. Он может и сам не обладать нужными знаниями, или у него нет на это времени. В настоящее время широко распространена практика сертифицирования. Большинство ведущих компьютерных компаний выдают сертификаты, свидетельствующие об освоении своих продуктов. В мировом масштабе этим занимается корпорация Sylvan Prometric, которую софтверные компании наделили полномочиями принимать тесты и выдавать сертификаты. Sylvan имеет представительства в большинстве стран мира, в том числе и в России. Кроме того, она сертифицирует местные центры по обучению и тестированию специалистов. Microsoft, Novell, Oracle предлагают обычно несколько уровней сертификатов. У Microsoft их три вида.
- MCP - пользователь программных продуктов Microsoft. Нужно сдать всего один экзамен. Говорят, что за рубежом такой сертификат требуется даже для секретарш. Сдали экзамен по Word - пожалуйста, работайте. Знаете английский - покажите результаты теста TOEFL.
- MCSE - инженер по программным продуктам Microsoft. Необходимо сдать шесть экзаменов (если MCSE+Internet - семь). Фактически, это администратор сети. Требуется уметь устанавливать, конфигурировать ОС Windows (95, NT, NT-сервер), понимать сетевые протоколы, службы и т. д.
- MCSD - разработчик (developer) на базе программных продуктов Microsoft. Сдается четыре экзамена. Три обязательных по архитектуре программных средств, планированию, созданию приложений на языках Visual C++, Visual Basic и один по выбору (SQL, FrontPage, MFC, OLE и др.)
Казалось бы, все четко. Получил сертификат MCSD - значит настоящий программист. Но так ли это на самом деле? Ведь и дрессированного медведя можно заставить на барабане играть. Имея энную сумму денег и поступив в хороший учебный центр, можно вполне сдать экзамены, не написав ни одной большой программы. К тому же, и это подтверждают сами экзаменующие, упор в этих тестах часто делается на полное освоение предмета. Примерно как в школе: вызубрил эту цифру - значит, ответил; нет - значит, не судьба. На практике часть ответов может не потребоваться никогда. Результат очень похож на ситуацию, как если бы вы только что получили водительские права и устроились работать таксистом. Полным полно теоретиков, которые могут долго и много рассуждать на самые заумные темы, но которые никогда не пробовали начать проект и довести его до конца. А если мне не нравятся средства разработки Microsoft? Ну, привык я к компиляторам Borland (пардон, Inprise), и все тут.
Тем не менее, для работодателя сертификат очень важен и удобен. Раз вас протестировала всемирно известная фирма, значит знания вы имеете, а что касается прочих качеств - так их все равно разглядеть сразу невозможно. Для работника сертификат означает уменьшение количества вопросов со стороны нанимателя и повышение начального уровня зарплаты.
Опыт работы. Этот показатель обычно ставится на первое место. Опыт не купишь, его можно только приобрести, занимаясь своей профессией. К сожалению, зарубежным компаниям интересен опыт работы в известной фирме в "цивилизованной" стране (США, Канаде и т. п.) "Опыты" в России, Турции, Индии мало что значат. Отсутствие рекомендаций означает, что вы темная лошадка, а в такой "дикой" стране сертификат, может, и вообще можно купить. Безусловно, и у российского босса могут возникнуть вопросы о том, чем вы занимались три года в коммерческом банке. Лучше всего о людях говорят их дела. Сколько программ написали лично вы? Где ваш кусок кода в этой системе? Если есть, что показать, то скрывать этого не стоит. Любой человек может оценить, поработав с вашей программой, стиль программирования и профессионализм. Ведь и художников оценивают, глядя на их картины, а не слушая рассказы, каких волков они умеют рисовать.
Настоящий программист умеет придумать, как выполнить поставленную задачу, задействовать нужные инструментальные средства и пройти весь путь от альфа-версии до окончательного варианта. Созданный продукт должен предназначаться не для домашнего применения, на нем должны работать другие люди. В связи с этим, я никогда не назову программистом автора вирусов или взломщика программ. Это другие профессии, хотя они и связаны компьютерами и программами. Если ваш продукт используют десять, сто, тысячи людей, значит это не просто так. Они могут и умеют выбирать, а следовательно, и оценивать. Человеку с такой репутацией не требуется обивать пороги, ему предлагают места и варианты. Доказательств этого не требуется.
Настоящий программист обладает большими знаниями и умениями. Он может трезво взглянуть на проблему и дать единственно правильное решение. Его "слушаются" компьютеры. Вы не наблюдали этого ни разу? В любой незнакомой программе он сможет разобраться за десять минут. Пара нажатий на клавиши, и задача, над которой другие бились два часа, решена. Корни этих способностей растут в отточенном логическом мышлении. Ознакомившись с проблемой, нужно представить в уме блок-схему ее решения. Среди нагромождения фактов нужно выбрать ключевые пункты, от которых зависит дальнейший ход рассуждений. На слова "у меня компьютер (программа) не работает" можно или сказать "не знаю", или же задать несколько вопросов, от ответов на которые и зависит возможность лечения больного. Вам не кажется, что это похоже на методы Эркюля Пуаро и Шерлока Холмса? Эти способности помогают не только в программировании. Та же схема работает и при починке автомобиля или пылесоса. Не хватает только сопутствующих знаний, но схема выстраивается аналогично.
Настоящий программист всегда учится. Для него интересно читать толстенные тома руководств с малопонятными названиями (COM, DCOM, OLE). Ему приятно копаться в программах, вылавливая свои (а еще лучше чужие) ошибки. Мерцающая иконка на экране может привести его в восторг. Выход новой версии своего любимого компилятора значит для него больше, чем отставка правительства. Но не надо думать, что он одержимый. Просто, это любимое дело, которому посвящаются время и мысли.
Количество используемых языков программирования совершенно не важно. Настоящий программист рассматривает язык лишь как удобный инструмент для выполнения своих планов. Какой лучше всего подходит, тот и используется. Выучить новый язык не составляет большого труда, но никто не впадает в религиозный экстаз от новшества. Если для выполнения задачи достаточно bat файла, используется он, если нужна программа для базы данных - SQL, и т. д. Рациональное использование многообразных средств говорит о широком кругозоре в своей предметной области. В софтверном мире технологии рождаются и умирают ежедневно. Просто невозможно охватить все и вся, но направления и тенденции, опыты и открытия должны быть известны.
В России профессия программиста - определенно творческая. Так ее оценивают люди в обществе и сами программисты. Лет до тридцати пишутся программы, потом человек вырастает и занимает руководящий пост в своей или чужой компании. Много ли вы видели людей, которым под пятьдесят и которые продолжают активно писать? На Западе эта профессия считается такой же заурядной, как и другие. Часто встречаются люди перед пенсией, которые осваивают программирование на Visual Basic. Скорее, это происходит потому, что занимаются они, в основном, кодированием программ. В связи с разделением труда каждому выдается свое задание, и он пишет свой кусок кода и ничего более. Настоящий же программист - это менеджер, который генерирует идеи и распределяет задания.
Настоящих программистов не очень много, но именно они создают этот восхитительный компьютерный мир.
Если у вас появится желание написать мне - пишите на ds@yarobl.tax.yaroslavl.su и заходите на мою страничку в Интернет www.chat.ru/~dsokolov (или http://dsokolov.da.ru).