вторник, 24 апреля 2007 г.

Специализация

Продолжение. Начало "Молоко на губах"

Часто встречается в Интернет-форумах такой вопрос: "Чем перспективней и интересней заниматься: 1С, Oracle, C++…?" Ясно, что никто кроме вас самих на него не ответит. Ответ зависит в первую очередь от ваших личностных качеств, вашего опыта (как жизненного, так и в одной из областей специализации), а также от того, в каком регионе вы проживаете, планируете ли вы переезжать и т.п. В деле выбора специализации можно обрисовать их общие черты в виде справочной информации, на которую вы можете опереться в вашем выборе. В Интернете достаточно информации по этой теме, например http://computery.ru/upgrade/numbers/2006/269/likbez_269.htm. Но я позволю все-таки себе большее, чем общее описание, и в конце статьи дам конкретный ответ на вопрос: "Куда податься?".

Программист
Выделяют две крупные группы программистов: прикладные программисты и системные программисты.
Системные программисты пишут программы, обслуживающие работу аппаратных блоков, как компьютера, так и устройств к нему подключенных. Например, это может быть разработка драйверов устройств (звуковой карты, видеокарты и т.д.), либо, например, написание сервисов (почтовый сервер, web-сервер). На этапе стажера можно не понимать еще четких различий между этими двумя группами программистов, проще уяснить внешнее различие. Системный программист не работает с конечным пользователем. Для него конечным пользователем является прикладной программист, системный администратор. Бухгалтера, экономисты, секретари при возникновении проблем в работе с компьютером никогда не общаются с системными программистами. Они даже не знают, что такие существуют. Конечная задача системного программиста – обеспечить связь прикладных программ с различными устройствами. Например, когда текст набирается в Word’e на клавиатуре, то буковки сначала из клавиатуры «извлекаются» драйвером клавиатуры, а потом уже Word отображает нам их на экране. Вот как раз эту программу ‑ драйвер клавиатуры, и разрабатывает системный программист. Особенностью "системщика" является низкоуровневая работа вплоть до программирования напряжения на отдельных выводах микросхем. Навыки разработки интерфейсов взаимодействия с пользователями (всякие кнопочки, формочки, подготовка отчетов) здесь не нужны. Работа "системщика" требует тщательной отладки программы и немалой изобретательности в отладке, так как отладочные средства для "системщиков" развиты куда менее чем для "прикладников".
Основные языки программирования: C, C++, Delphi, Assembler. Самые используемые здесь языки программирования ‑ C, C++. Это самые трудно осваиваемые языки программирования. Их языковые конструкции менее выразительны, чем у других современных языков программирования. Но это в данном случае не является важным параметром. Для "системщиков" важнее, чтобы язык программирования позволял программировать не только высокоуровневые функции, но и напрямую программировать аппаратуру, а также генерировал компактный бинарный код.
Вакансий "системщиков" количественно меньше, чем прикладников. Следовательно, трудоустроиться труднее. Уровень подготовки требуется очень высокий. Подготовка одного "системщика" занимает много времени, не менее 3 лет. Поэтому среди системных программистов очень большой разброс в оплате труда – работодателю сложнее найти замену опытному "системщику", и для удержания специалиста платится ему большая зарплата, в то время как начинающий, малоопытный системщик практически бесполезен. Бесполезен потому, что поднять его квалификацию на должный уровень ‑ это длительный по времени процесс. Дешевле данное время потратить на то, чтобы найти нужного по уровню квалификации специалиста. Но сколь ни была бы привлекательна зарплата "системщика" и его статус незаменимости в своем кругу, все же зарплата прикладного программиста соответствующего уровня подготовки выше.
Работа "системщика" увлекательна и, наверное, самая интересная из всех остальных специализаций. Именно "системщики" занимаются инновациями, которые потом подхватывают "прикладники". Именно системщики стоят на переднем рубеже развития информационных технологий. Если описать это направление IT кратко, то получится что-то вроде: "Жутко интересно, но очень сложно".
Прикладные программисты работают на конечного пользователя. Именно они занимаются настройкой у бухгалтеров 1С, пишут самопальные программы складского учета, скрин-сейверы, милые маленькие программки (типа "аськи"). У прикладных программистов можно выделить три большие группы: собственно, прикладные программисты, программисты баз данных и программисты скриптов. Часто "прикладники" работают на оба "фронта": и как "прикладник" и как программист БД.
Основные языки программирования "прикладников": C++, Delphi, Java, C#, Visual Basic. Java и C# появились позже, чем C++ и Delphi и реализуют самые современные модели программирования. Программировать на них легче, чем на C++ и Delphi и быстрее. Поэтому для новых проектов, как правило, выбираются либо C#, либо Java.
Если сравнивать эти языки программирования, то C++ для прикладного программирования весьма тяжел, и разработка на нем занимает существенно больше времени. Заказные системы на нем, как правило, не делаются – заказ клиент отдает тому, кто выполнит работу быстрее, а как я уже говорил, на C++ быстро не получится. Его используют софтверные компании для разработки коробочных продуктов. Например, такие именитые софтверные компании как Microsoft, Intel, Oracle и т.д. Это мощный язык программирования, позволяющий разработать систему любой сложности.
Delphi особенно популярен в России, но позиции свои сдает языкам программирования Java, C#. За границей он мало известен из-за неудачной маркетинговой политики его производителя. Программировать на нем проще и гораздо быстрей, чем на C++, при этом Delphi позволяет разрабатывать не менее сложные системы, чем C++. Чаще всего его можно встретить в отделах АСУ предприятий. Там он используется для автоматизации внутренних процессов предприятия.
Visual Basic в среде российских программистов воспринимается как "несерьезный" язык, хотя в мире является весьма распространенным языком программирования. Писать на нем программы легко, быстро. Используется такой язык для автоматизации бизнес-процессов на предприятиях и занимает ту же нишу, что и Delphi. Однако по гибкости конструкций, маштабируемости сильно уступает последнему. Часто именно плохая маштабируемость приводит к тому, что предпочтение отдается Delphi. Ведь в ситуации, когда заказчик хочет что-то дописать к системе или в процессе автоматизации надо добавить пару функций характеристика маштабируемости языка программирования начинает играть ключевую роль, наравне со сроками реализации.
Языки программирования Java и C#, как молодые языки программирования, по сравнению с C++, Delphi, Visual Basic явно выделяются тем, что в них учтены современные требования к языкам прикладного программирования. Сразу скажу, что это языки программирования ТОЛЬКО для прикладных задач, не для системных. Данные языки программирования очень выразительны, красивы, они легко расширяемы, т.е. дописать новую функциональность на них легче, чем на других языках программирования.
"Прикладники" ‑ самая многочисленная группа программистов. Наиболее ценятся те "прикладники", которые умеют также разрабатывать базы данных. Для подготовки "прикладника" требуется 1-2 года. Рынок труда "прикладников" весьма текуч, вакансий много и зарплаты на очень хорошем уровне, уступая лишь зарплатам программистов баз данных и некоторым специализациям программистов скриптов. Выбор направлений деятельности самый широкий среди всех групп программистов. Работа предполагает немало креатива.
Стоит отметить, что "прикладники" могут узко специализироваться на каком-либо одном виде деятельности: разработка игр, разработка интерфейсов, разработка многопоточных систем, серверных систем и т.п. Тут уж что называется "…выбирай на вкус!".
Программисты баз данных занимаются разработкой баз данных, их структуры и интерфейса работы с данными (в виде хранимых процедур, просмотров, таблиц). Наибольшее распространение получили СУБД: Oracle, Microsoft SQL Server, MySQL, Interbase, MS Access, FoxPro.
Oracle наиболее почитаема среди вышеупомянутых СУБД. По функционалу она значительно превосходит другие СУБД. Использование Oracle в новом проекте гарантирует, что со временем, при разрастании функциональных возможностей проекта, БД "хватит", чтобы удовлетворить потребности заказчиков. Это очень важно, т.к. неверный выбор СУБД вначале потом больно ударит по проекту. Нет более тяжелой задачи, чем переделать ВЕСЬ накопленный годами код под другую СУБД, а также перевести на новую СУБД клиентов, уже использующих вашу систему (иначе вам придется пожизненно поддерживать две ветки проекта). Поэтому очень часто можно встретить использование Oracle даже в тех проектах, где его мощи и функционала и подавно не надо – авторы проектов по привычке перестраховываются. Основное использование Oracle – крупные заказные системы, внутренняя автоматизация предприятий.
Другим распространенным сервером БД является MS SQL Server. Он менее распространен, чем Oracle и функционал у него меньший. Однако в мире существует не так много задач, которые не "по зубам" этой СУБД. Предпочтение этому серверу часто отдается из-за того, что производитель – компания Microsoft, что гарантирует хорошую совместимость с другим ПО этой компании. А это немаловажный фактор при выборе СУБД. То, насколько красиво MS SQL Server сопрягается с другими пакетами этой компании, например, MS Access, MS Office, .NET вызывают у разработчика восторг. Очень мощно, просто, изящно и гладко! Самое "то" для метода "лоскутной" автоматизации на предприятиях, где MS SQL Server успешно и используют.
На Интернет-серверах подавляющее превосходство у MySQL. Это маленький и высокопроизводительный SQL-сервер. Своей производительностью он обязан очень скромной функциональности. Но в данном применении производительность важнее функциональности. Именно поэтому этот сервер прочно обосновался на Интернет-серверах.
Большинство не знают, что многие из программ функционируют на базе Interbase. Этот SQL-сервер часто применяется для небольших систем автоматизации, в коробочных продуктах используется как встроенная БД. Сервер имеет небольшую функциональность по сравнению с MS SQL Server и Oracle, но вполне достаточную для задач среднего уровня сложности. При этом он весьма скромен в требованиях к аппаратуре и неприхотлив в эксплуатации. Именно поэтому многие коробочные и заказные системы делаются с использованием Interbase.
MS Access и FoxPro относятся к файл-серверным БД. Часто они встречаются в старых системах автоматизации. Новые системы все же предпочитают сейчас делать на базе Oracle, MS SQL Server. В силу особенностей файл-серверной архитектуры, их используют на небольших предприятиях. Несомненным плюсом MS Access, FoxPro для малых предприятий является то, что они имеют очень простой интерфейс, кучу "мастеров", так что развернуть систему автоматизации "по-быстрому" с их помощью может и стажер.
Программисты баз данных являются одними из самых высокооплачиваемых групп программистов. Выше оплачиваются только некоторые "скриптовики". Вакансий много, текучка кадров высокая. Работа, как правило, связана с какими-либо учетными системами и требует тщательности, внимания. Элемент творчества у программистов БД практически отсутствует.
Программисты скриптов ‑ это весьма разнородная группа программистов. Название условное. Сюда относятся web-программисты, программисты 1С, Галактики, Axapta, SAP, программисты VBA. Это узкоспециализированные группы со своей спецификой, сильно отличающей их от других групп прикладных программистов.
Web-программисты занимаются программированием сайтов. Основные их языки программирования: HTML, Javascript, Perl, PHP. Программирование высокоуровневое и гораздо проще, чем программирование на C++, Delphi и др. языках программирования прикладных программистов. Легкость HTML свое дело сделала и сейчас оплата web-программиста в 1.5-2 раза ниже, чем у типичного "прикладника" из-за того, что в этой области прикладного программирования очень много молодежи, студентов. Они используют эту работу как подработку и сильно сбивают цену профессиональным web-программистам. Сама специализация web-программиста интересна и креативна.
Программисты 1С, Галактики, Axapta, SAP, программисты VBA представляют собой весьма разнородную по составу группу, с очень разными уровнями зарплат. Область деятельности у них одна и та же – автоматизация предприятий. Здесь встречаются и масштабные проекты с большими гонорарами, и скучные мелкие текущие задачи (подготовить отчет, добавить поле, запрограммировать формочку) автоматизации на предприятии. Уровень оплаты может колебаться от 0.5 до 2 раз от зарплаты среднего "прикладника". Но для всех этих систем автоматизации действует одно правило: опытный специалист со стажем работы от 5 лет смело может рассчитывать на зарплату не менее чем в два раза выше, чем у прикладного программиста. Вакансий по этим системам много, одно плохо – как и у web-программистов, здесь много студентов и молодежи, сильно сбивающей цену своей готовностью работать буквально "за хлеб и воду".
Кроме знания языка программирования и своей предметной области от программиста часто требуют умение пользоваться системой контроля версий, знание различных методологий программирования, умение работать в команде, а также знание иностранных языков, хотя бы на уровне понимания технической литературы.

Системный администратор
На сисадминов часто вешают обслуживание всех техники, имеющейся на предприятии, вплоть до электрочайника в столовой! Такое часто происходит на малых предприятиях. Хотя уже давно сформировались специализации в этой профессии:
  1. Help-desk.
  2. "сетевики".
  3. администраторы различных сервисов (домена, web-сервера, БД и т.п.).
Help-desk – это те самые "мальчики", которых зовут все, если вдруг что случается с компьютером. Их задачи – установка, настройка и обслуживание прикладного ПО на компьютерах пользователей; обучение пользователей и помощь в работе с программой. Работа нервная и мало оплачиваемая. В основном на нее идут студенты, которые потом дорастают до "сетевика" или администратора. От help-desk работника требуется умение работы со всем распространенным ПО на уровне опытного пользователя. Долго на такой работе не сидят. Из обязательного комплекта требований в вакансии help-desk’a: знание MS Office, 1С, Windows (клиентские ОС), Internet (имеется ввиду Интернет ПО).
"Сетевики" занимаются прокладкой кабелей (часто прокладку кабелей выделяют как отдельную специализацию) и организацией связи между компьютерами. При настройке сети их работа заканчивается, когда между узлами сети проходит "пинг". Наиболее ценны те "сетевики", которые специализируются на аппаратуре и ПО определенного производителя. Например, особенно ценны специалисты по аппаратуре Cisco, которая широко используется при развертывании информационных компьютерных сетей. Работа не несет в себе даже налета творчества, спокойная и рутинная. Зарплата ниже, чем у программистов и администраторов, но узкий специалист (например, по Cisco) по зарплате легко выходит на среднюю планку зарплат программистов. "Сетевики" должны уметь обжать кабель, установить хаб, свитч, маршрутизатор, коммутатор, модем, "поднять" VPN-канал, подключить клиентские места к хабам, свитчам и пр. настроить сетевое окружение на рабочем месте и командой ping удостовериться в наличии связи.
Администраторы различных сервисов. Здесь единой планки для оценки нет, как и у программистов скриптов все определяется конкретной специализацией. Можно выделить две крупные группы администраторов по типу обслуживаемых ОС: администраторы Unix-систем и администраторы Windows-систем. Зарплата у администраторов, как правило, меньше, чем у программистов. Самая верхняя планка зарплат выходит к верхней планке зарплат программистов, но это редкие случаи. Часто администраторам приходится заниматься администрированием нескольких сервисов сразу. Работа, в основном спокойная, как и у "сетевиков", творчества никакого. Типичный список требований к администраторам: настройка и обслуживание контроллера домена, почтового сервера, web-сервера, сетевых сервисов (DNS, WINS, DHCP), офисной АТС, сетевой печати. Для администратора есть множество курсов повышения квалификации, окончание которых способствует повышению зарплаты.
У остальных должностей (тестировщик, аналитик и выше) специализаций нет. Итак, описание специализаций закончено и мне осталось дать рекомендации, как я, и обещал сделать вначале, для тех, кто все же не может определиться, куда податься:
  1. Вы обладаете ярко выраженным математическим складом ума.
  • Если вы со школы увлекаетесь программированием, у вас на письменном столе сейчас стоит паяльник и канифоль, то наилучший выбор для вас – специализация системного программиста, изучайте C++.
  • Если вы со школы, Вуза увлекаетесь программированием, но паяльника у вас нет, и схемотехникой никогда не интересовались, то тогда вы прикладной программист. Изучайте Java и Oracle.
  • Вы не увлекаетесь программированием, но любите технику. Идите в системные администраторы. Изучайте серверные ОС Windows и настройку различных сервисов под ними.
  • В остальных случаях идите в программисты скриптов. Изучайте 1С.
  1. Вы обладаете менее выраженным математическим складом ума, в вас присутствует немалая доля гуманитария.
  • Если у вас есть дар ломать все вокруг, однозначно и безоговорочно идите в тестировщики.
  • В остальных случаях – идите в аналитики.
Как видите, алгоритм четкий, даются указания на изучение конкретных языков программирования и технологий. Не волнуйтесь по поводу других языков программирования, ПО и технологий (C#, Delphi, MS SQL server и т.п.). Я назвал беспроигрышные варианты, с которыми вы легко найдете работу, и сможете максимально коротким путем достичь в этом направлении значительного роста, как в карьере, так и в зарплате. Главное ‑ НАЧНИТЕ. А там, если вас заинтересуют другие специализации, вы уже сами все решите и без моих подсказок.