Три специалиста и три вида направлений программирование – Профессия программист (должностные обязанности, заработная плата, как стать программистом, требования) | чем занимается инженер-программист

Содержание

Направления в программировании

На данный момент существует множество направлений в программировании. Каждый сможет найти занятие по душе, но для этого нужно знать, чем именно ты будешь заниматься в своей сфере.

Разработка web-приложений

Это направление ориентировано на разработку веб-приложений (проще говоря, сайтов, но в настоящее время сайты обладают таким богатым функционалом, что их можно назвать полноценными приложениями).

Web-программирование можно разделить на backend (написание серверных скриптов – PHP, Python, Ruby) и frontend (разработка юзерского интерфейса – Javascript, HTML, CSS).

Разработка desktop-приложений

Разработка программного обеспечения для различных операционных систем. Все разнообразие софта, что мы используем в повседневности. Хотите написать свой обработчик фотографий, аудио-плеер или текстовый редактор, тогда вам сюда.

Разработка серверных приложений

Это различные игровые сервера (ваша любимая Дотка, CS: GO), IM-сервисы (серверная часть Skype, ICQ, MSN), банковские базы данных.

Разработка мобильных приложений

Множество Java-приложений. VK, Viber, Яндекс.Карты, переводчики, электронные читалки.

Программирование встраиваемых систем

Интересная отрасль программирования для различной домашней техники: пылесосы, холодильники, стиральные машины, плееры, навигаторы, электронные весы. Здесь задействованы научные разработки с использованием специализированных языков, типа MATLAB.

Системное программирование

Написание различных драйверов для оборудования, программирования «ядра» операционных систем. Кстати, создание компиляторов и интерпретаторов для языков программирования относятся сюда же.

Разработка игр

Гигантская отрасль. Сюда включается разработка игр и для ПК, и для консолей, и для мобильный устройств.

Олимпиадное программирование и решение задач

Программирование на различных «непрактичных» и не распространенных языках (Pascal, Delphi) для решения каких-то оригинальных задач, требующих нестандартного подхода, смекалки и IQ выше 160.

Программирование для бухгалтерских и финансовых продуктов

«1С: Предприятие». Вся бухгалтерия в России завязана на этом продукте. Но недостаточно знать лишь сам язык, важно понимать основы бухгалтерского учета. Плюс в том, что работы очень много, и без хлеба вы не останетесь.

Программирование баз данных

Серьезное направление. Хотите разрабатывать базы данных, способных хранить миллиарды строк информации о всех пользователях VKontakte или Facebook и при этом не тормозить – вам сюда.

Science

Наука и этим все сказано. Нейронные сети, моделирование структуры ДНК, запуск спутников, моделирование Большого Взрыва.

Кстати, недавно на сайте NASA была опубликована новость о поиске программиста на «древнем» языке Fortran, которому уже более 60 лет. Требовался программист для разработки программ по управлению автоматическими зондами Вояджер-1 и Вояджер-2, программное обеспечение для которых было написано на Ассемблере, Фортране и языке COBOL еще в 1970-х годах. Никогда не знаешь, какие знания могут пригодиться.

moeobrazovanie.ru

Какие существуют направления в программировании? — Toster.ru

В общем, ситуация такая — я школьник, через год буду студентом. Хочу поступать учиться на программиста, ну и сам пока учусь потихоньку и на курсы хожу. И сейчас читаю про разные направления, пробую всё — пытаюсь понять, чем именно мне нравится больше всего и будучи студентом уже стараться искать работу в конкретной области. Но не хватает некоторой систематизации знаний о направлениях в программировании. Поэтому буду весьма благодарен, если программисты помогут составить более-менее полный список направлений с краткими описаниям. Чтобы сократить область поиска, напишу, о каких областях мне бы хотелось узнать в первую очередь:

1. Встраиваемые системы. Насколько это перспективно? Видел на одном форуме мнение, что embedded в будущем станет менее востребованным, хотя самому мне так не кажется — ведь это и смартфоны, и роботы, и ip камеры и много чего ещё

2. Вирусная аналитика. Совсем недавно это направление попало в моё поле зрения. Хотелось бы просто больше узнать о навыках и знаниях, нужных вирусному аналитику и о том, какие существуют смежные направления.

3. Шифрование, криптография, ЦОС. Насколько практично изучение этих вещей? Я имею ввиду, для того, чтобы работать в крупной компании, а не в каком-нибудь НИИ.

4. Поиск уязвимостей на сайтах (а вообще может быть и, например, в онлайн играх и проч.). В частности, пробую находить XSS, пока ни на одном крупном сайте не нашёл, только на паре не сильно известных сайтов

5. Функциональное программирование. Ну там, Haskell, Erlang. С одной стороны, видел много статей, в которых этот самый хаскель и ФП вообще расхваливались, да и самому мне идеи их нравятся, да только много кто считает, что в теории-то они хороши, но на практике никуда с ними не устроишься. Неужели всё так плохо? И ещё, в каких конкретно направлениях использование ФЯ действительно оправдано?

Вообще интересно ещё низкоуровневое программирование, ковыряние с железом (с паяльником дружу, обжимать умею 🙂

Сразу оговорюсь, не особо интересна разработка мобильных приложений и фронтенда в вебе. Ну и 1С-ки всякие.

На счёт опыта и навыков:

Python (писал программку для автоматической настройки ip-камеры, сейчас пишу программу ля отправки видео с камеры на сервер, параллельно разбираясь с Django, чтобы писать для этой программы серверную часть)

C++ (ничего готового пока не сделал, сейчас начал писать кейлоггер и простенького сетевого червя — исключительно в (само)образовательных целях, распространять не буду)

Pascal/Delphi (писал программку-переводчик с английского на русский, которая брала слова и их перевод из текстового файла и ещё одну — тест с выбором ответа, берущий вопросы и ответы из текстового файла, спрашивающий у пользователя фамилию и имя, вычисляющий оценку и записывающий в другой файл фамилию, результат и дату — но это давно было, сейчас паскаль как-то подзабросил)

Потихоньку начал учить fasm под Linux, поверхностно знаком с HTML/CSS, очень поверхностно с JavaScript.

Чуть не забыл — интересны в первую очередь свободные технологии — поэтому .NET и Flash, например, не сильно привлекают. Но это не самый важный критерий.

P. S. Изначально хотел попросить более общий список направлений, но так вышло, что в процессе формулирования вопроса пронял, что просить перечислять вообще все направления — слишком нагло, поэтому постарался определить, в направлениях в каких областях мне бы хотелось больше всего узнать.

toster.ru

где учиться, где работать, зарплата

Программист — это специалист, который занимается разработкой алгоритмов и компьютерных программ на основе специальных математических моделей.

В программировании на первое место ставятся не только практические навыки, но и идеи специалиста. Программистов можно условно разделить на три категории в зависимости от специализации:

  1. Прикладные программисты занимаются в основном разработкой программного обеспечения прикладного характера — игры‚ бухгалтерские программы‚ редакторы‚ мессенджеры и т.п. К области их работы также можно отнести создание программного обеспечения для систем видео- и аудио-наблюдения‚ СКД‚ систем пожаротушения или пожарной сигнализации и т.п. Также в их обязанности входит адаптация уже существующих программ под нужды отдельно взятой организации или пользователя.
  2. Системные программисты разрабатывают операционные системы, работают с сетями, пишут интерфейсы к различным распределенным базам данных. Специалисты этой категории относятся к числу самых редких и высокооплачиваемых. Их задача состоит в том‚ чтобы разработать системы программного обеспечения (сервисы)‚ которые‚ в свою очередь‚ управляют вычислительной системой (куда входит процессор‚ коммуникационные и периферийные устройства). Также в список задач входит обеспечение функционирования и работы созданных систем (драйвера устройств‚ загрузчики и т.д.).
  3. Web-программисты также работают с сетями, но, в большинстве случаев, с глобальными – Интернет. Они пишут программную составляющую сайтов, создают динамические веб-страницы, web-интерфейсы для работы с базами данных.

 

Особенности профессии

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

Читайте также:

7 причин стать программистом

Определяет совокупность данных, обеспечивающих решение максимального числа включенных в данную программу условий. Проводит отладку разработанных программ, определяет возможность использования готовых программ, разработанных другими организациями. Разрабатывает и внедряет методы автоматизации программирования, типовые и стандартные программы, программирующие программы, транслятора, входные алгоритмические языки.

Выполняет работу по унификации и типизации вычислительных процессов, участвует в создании каталогов и карточек стандартных программ, в разработке форм документов, подлежащих машинной обработке, в проектных работах по расширению области применения вычислительной техники.

Плюсы и минусы профессии

Плюсы:

  • высокая заработная плата;
  • сравнительно высокий спрос на специалистов;
  • иногда можно получить работу не имея высшего образования;
  • по преимуществу является творческой профессией.

Минусы:

  • приходится часто и много объяснять одно и то же, так как то, что понятно и очевидно программисту, совсем не всегда понятно и очевидно пользователю;
  • работа в режиме аврала (иногда) в стрессовой ситуации;
  • профессия накладывает специфический отпечаток на характер, который нравится далеко не всем окружающим.

Место работы

  • IT-компании и web-студии;
  • научно-исследовательские центры;
  • организации, которые подразумевают в своей структуре штатную единицу или отделы программистов.

Важные качества

Программирование является бурно развивающейся областью, поэтому программист должен уметь быстро адаптироваться к текущему состоянию технологии и постоянно изучать новые технологии. Поэтому способность к самообучению — один из главных навыков, которым должен обладать программист. В противном случае через несколько лет его ценность как специалиста окажется заметно ниже.

Владение английским языком на уровне чтения технической документации является еще одним обязательным требованием, предъявляемым к представителям этой профессии. Для таких специалистов очень важно умение работать в команде, над большими проектами, со средствами коллективной разработки, с крупными финансовыми системами (бюджетными, банковскими, управленческого учета). Для претендентов на позицию ведущего программиста желательны навыки управления проектами и коллективом, самостоятельность, инициативность, а также способность нести личную ответственность за поставленную задачу.

Обучение на программиста

Читайте также:

На какого программиста учиться?


Оплата труда

Программист – одна из самых востребованных и высокооплачиваемых профессий в России. Даже не самый продвинутый специалист может найти работу в соответствии со своим уровнем знаний, а затем постепенно учиться и набираться опыта. Зарплата стажера — около $1000. Штатный программист в компании среднего уровня (не IT) получает до $1500-1800, чуть больше — в организации, связанной с массовой разработкой ПО. Зарплата ведущего программиста — $2500—3000. Следующая ступень — руководитель IT-отдела. К необходимым знаниям добавляется обязательный опыт работы, владение иностранным языком, навыки управления персоналом и др., а заработок может достигать $4000. Хороший программист может стать руководителем крупного проекта по разработке ПО, и тут уровень доходов достигает $5000 и выше.

Ступеньки карьеры и перспективы

Хорошим стартом карьеры может стать присоединение к группе программистов при разработке какого-либо проекта. Крупные проекты часто привлекают внимание западных компаний, которые «перекупают» российских программистов. К примеру, когда-то группа наших молодых ученых разрабатывала процессор «Эльбрус» для Минобороны, а в итоге их всех перекупила корпорация Intel, и теперь наши ученые и программисты работают за рубежом, а сам проект «Эльбрус» потихоньку закрылся. Проблема «утечки мозгов» в этой профессии — одна из самых острых.

Программист может сделать карьеру до руководителя группы программистов (тим-лидер), IT-директора предприятия, менеджера IT-проекта и т.п. В ходе работы программист может перемещаться в рамках своей специальности, совершенствуясь профессионально.

Знаменитые и великие программисты

Кнут Дональд Эрвин
Мацумото Юкихиро
Таненбаум Эндрю
Рэймонд Эрик Стивен
Фаулер Мартин
Хоппер Грейс
Столлман Ричард Мэттью
Кей Алан
Мейер Сид
Страуструп Бьёрн

Интересные факты

Возникновение программирования как рода занятий и, особенно, как профессиональной деятельности трудно датировать однозначно.

Часто первым программируемым устройством принято считать жаккардовый ткацкий станок, построенный в 1804 году Жозефом Мари Жаккаром, который произвёл революцию в ткацкой промышленности, предоставив возможность программировать узоры на тканях при помощи перфокарт.

Первое программируемое вычислительное устройство, Аналитическую машину, разработал Чарлз Бэббидж (но не смог её построить). 19 июля 1843 года графиня Ада Августа Лавлейс, дочка великого английского поэта Джорджа Байрона, как принято считать, написала первую в истории человечества программу для Аналитической машины. Эта программа решала уравнение Бернулли, выражающее закон сохранения энергии движущейся жидкости. 

Читайте также:

Кем были первые программисты?

В своей первой и единственной научной работе Ада Лавлейс рассмотрела большое число вопросов. Ряд высказанных ею общих положений (принцип экономии рабочих ячеек памяти, связь рекуррентных формул с циклическими процессами вычислений) сохранили свое принципиальное значение и для современного программирования. В материалах Бэббиджа и комментариях Лавлейс намечены такие понятия, как подпрограмма и библиотека подпрограмм, модификация команд и индексный регистр, которые стали употребляться только в 1950-х годах.

Однако ни одна из программ написанных Адой Лавлейс никогда так и не была запущена.

Аду Августу, графиню Лавлейс, принято считать почётным первым программистом (хотя, конечно, написание одной программы по современным меркам не может считаться родом занятий или профессиональной деятельностью). История сохранила её имя в названии универсального языка программирования «Ада».

Первый работающий программируемый компьютер (1941 год), первые программы для него, а также (с определёнными оговорками) первый язык программирования высокого уровня Планкалкюль создал немецкий инженер Конрад Цузе.

Имена людей, впервые начавших профессионально выполнять работу собственно по программированию (в отрыве от наладки аппаратуры компьютера), история не сохранила, так как поначалу программирование рассматривалось как второстепенная наладочная операция.

Законы Мерфи для программистов

1. Ничто не работает так, как планировалось запрограммировать. 

2. Ничто не программируется так, как должно работать.

3. Хороший программист характеризуется умением доказать почему задачу невозможно выполнить, когда ему просто лень её выполнять.

4. На решение проблемы уходит в три раза меньше времени, чем на обсуждение всех “за” и “против” её решения.

5. Обещанный срок сдачи – это аккуратно рассчитанная дата окончания проекта плюс шесть месяцев.

6. Программисту всегда известна последовательность действий, которыми пользователь может повесить его программу, но он никогда не чинит эту проблему, надеясь на то, что никому никогда не придёт в голову эту последовательность исполнять.

7. Настоящие программисты любят Windows — все ошибки, сделанные по собственной тупости, можно свалить на Microsoft.

8. Следствие — 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.

9. В приступе злости все почему-то молотят по невинному монитору, вместо системного блока.

10. В случае голодовки настоящий программист ещё месяц сможет питаться едой, выковырянной из-под кнопок клавиатуры.

11. Настоящий программист уже как минимум поменял три залитых пивом клавиатуры.

12. Все, кто испытывает проблемы с настройкой кодировки, автоматически считаются неандертальцами.

13. Дилетантские разговоры о компьютерах вызывают резкую тошноту вплоть до приступов рвоты. Вопрос о том как поменять “обои” в Windows вызывает желание перерезать горло вопрошающему.

14. У большинства людей, нуждающихся в твоей помощи, причина ошибки в работе программы чисто генетическая.

15. HTML, HTTP, FTP, SMTP, TCP/IP, RTFM и т.д. – это слова, а не аббревиатуры.

16. Словосочетание “мышка-норушка” не несёт никакого смысла.

17. Самые мистические проблемы, широко раздуваемые и афишируемые, в конце концов оказываются твоими глупейшими ошибками.

18. Следствие – если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое.

19. Самое плохое ощущение для программиста – когда вокруг тебя стоят десять человек и все пытаются найти причину проблемы в твоей программе, а ты уже понял, в чём проблема, но боишься сказать, потому что это что-то вопиюще глупое…

20. Решение всех жизненных проблем находится в интернете. Надо только уметь хорошо искать.

21. Конфликт логических указаний в жизни вызывает фатальную ошибку в работе мозга программиста – возможно повышение температуры и сильное головокружение вплоть до рвоты или потери сознания.

22. Тех, кто презирает программистов, программисты презирают сильнее, чем те, кто презирает программистов, презирают программистов, которые презирают тех, кто их презирает.

23. Если ты понял предыдущее — то ты программист.

На этом свете 10 типов людей – те, кто понимает двоичную систему счисления, и те, кто не понимает ее.

Видео: ты ж программист

Читайте также:

Читайте также:

Почему научиться программировать так чертовски тяжело?

 

www.profguide.ru

Четыре типажа программистов / Хабр

Привет.

Я впервые пишу в поток об управлении и найме персонала. Речь пойдет об одном из способов классифицировать ваших будущих или действующих программистов. Мой основной тезис: все разработчики, грубо говоря, делятся на 4 больших типажа и каждому из этих типажей есть своя область применения. Попытка направить неправильный типаж на решение неподходящих для него задач ведет к провалу (неэффективная работа, или сотрудник покидает команду). Хотите знать почему так — добро пожаловать под кат. Приготовьтесь, текста много.

Некогда, забавы для и пользы ради, я подрабатывал в одном неплохом кадровом агентстве — собеседовал приходящих программистов на предмет знания C#/.NET. В мои обязанности не входило полное техническое интервью — скорее, начальный скрининг кандидатов чтобы понять who is who, отфильтровать совсем уж ужас и в случае чего дать советы что почитать и как усовершенствовать навыки. И был у того кадрового агентства один интересный клиент. Он у всех на слуху, но тогда мне про него мало что сказали — я только понял, что вроде как ищет он rock stars — высококвалифицированных разработчиков, при том независимо от используемых технологий. После того, как я порекомендовал для них несколько человек — со мной связалась заместитель ген. директора и пригласила на встречу, ибо мои рекомендации не совсем устраивали заказчика. Так я познакомился с учредителем. Там мне была рассказана очень интересная история о том, зачем им нужны rock stars и как это всё вместе работает. Оказалось что вовсе не rock stars нужны. Нужны, как дал мне понять руководитель — люди с крепкими фундаментальными знаниями (алгоритмы, проектирование, операционные системы, сетевые технологии), которые будут готовы к росту и развитию. И вот они их берут и развивают, а затем отправляют реализовывать довольно сложные аутсорс-проекты. Заодно мне рассказали какие проблемы в этом плане испытывает компания. Я ушел в раздумьях и довольно долго катал в голове эту бизнес-модель, равно как и мысли о российской IT-индустрии в целом и политике работы с кадровым составом в частности.

В конечном итоге, через несколько лет я, наконец, утряс всю имеющуюся у меня в голове информацию и уложил её в модель, которая согласуется с окружающей реальностью. Это дало ответ на вопрос почему кадровый пайплайн упомянутой выше компании идеологически не может работать, а заодно и много другой интересной побочной информации. Так родилась моя классификация разработчиков по типажам.

Важно понимать что нет “плохих” типажей. Если какой-то из типажей вам кажется плохим, то вы просто не умеете его готовить. Помним: каждой задаче — подходящий инструмент. Я расскажу про все 4 типажа в виде карточек, давая краткую характеристику, указывая бэкграунд, цели и мотивацию, а так же рассказывая про сильные и слабые стороны. Особенно стоит уделить внимание бэкграунду, так как в конкретный типаж люди вырастают из своего бэкграунда. Начнем мы с чего по-проще.


Линейный программист

Соль индустрии IT-шной. На таких людях, говорят, мир держится. Он же “хомячок”. Он же “гребец на галере”, но я предпочитаю избегать таких ярлыков, поэтому просто — “линейный программист”. Он не хватает звезд с неба, не пишет своих компиляторов и СУБД. Ну максимум — сделает пару инструментов, чтобы облегчить себе жизнь, в остальном — просто решает рабочие задачи. Редко меняет место работы. Усидчив. К работе относится как к работе, без особого энтузиазма. В меру ленив. Дисциплинирован (но бывают исключения), однако без надлежащего управления быстро “расхлябывается” и теряет фокус. Управлять такими людьми можно по стандартным методикам — описанным например в книге Дж. Рейнвотера — Как пасти котов. Квалификация может варьироваться и определяется исключительно опытом и количеством проектов, в которых линейный программист принял участие. Иногда квалифицированные линейные программисты попадают на минимальные управленческие должности — их нарекают team lead и тут-то вышеуказанная книга им и пригождается. Но самая главная особенность линейного программиста — весьма частое отсутствие желания развиваться и экспериментировать. Он прекрасно решит даже очень нудную задачу, которую вы ему предложите, если та не будет слишком сложной. Он выберет как можно более быстрый и прямолинейный инструмент из тех, что знает. Развитие для этих людей носит спорадический характер и в основном идет “вширь”: изучить новый фреймворк или новый инструмент, который поможет лучше решать повседневные рабочие задачи. Или “пришел заказчик, который использует вот такую штуку — ну что уж, будем разбираться”. Примечательно, что знания полученные в результате спорадического развития отдельных линейных программистов как раз и составляют опыт аутсорс-компании. Однако, двигать горы и исследовать окружающий мир “вглубь” самостоятельно линейного программиста чаще всего просто не тянет. Например изучать новый, хайповый язык программирования ему просто не интересно. Только если новый язык помогает в решении повседневных задач. И уж тем более разрабатывать свой язык — увольте. И это — нормально. Хуже всего то, что линейные программисты “каменеют” когда долго сидят на одном месте. То есть если у вас есть человек, который стабильно занимается концептуально одними и теми же проектами на протяжении 3-5 лет — то очень маловероятно, что он сменит типаж и будет развиваться “вглубь”. Но вот раньше этого эмпирического срока — все возможно и зависит от бэкграунда.

Бэкграунд: разный. В “линейных программистах” могут оказаться и люди, прошедшие онлайн-курсы, и выпускники ВУЗов, некоторые олимпиадники, бывшие ученые технических направлений и даже люди из концептуально другой профессии (известны случаи когда дальнобойщики становились разработчиками на PHP). Важно понимать, что линейный программист — само по себе является бэкграундом и почвой для прыжка в другой типаж. Но! Прыгнет человек или нет — зависит прежде всего от его личных желаний, а не от навыков. Наличие того или иного бэкграунда определяет лишь направление потенциального прыжка, а не его вероятность! А вот вероятность прыжка с течением времени резко падает. Однако если вам нужен верный сотрудник на долгосрочный контракт — научитесь выявлять желающих “прыгнуть” заранее. Сбежит с проекта — будет неприятно.

Ценит: стабильность, среднюю, но 2-раза-в-месяц-стабильную зарплату, покой и личные отношения в коллективе, нормированный рабочий день, офисные плюшки вроде бильярдной, фруктов по выходным, оплаты проезда или тренажерного зала, мед. страховку и (возможно нудную, но) ненапряжную работу.

Сильные стороны: усидчивость, ответственность, коммуникабельность (раз на раз), полная контролируемость, спокойное поведение в стрессовых для проекта ситуациях

Слабые стороны: сложные и/или нестандартные задачи, абстракции, поведение в стрессовых для компании ситуациях, говнокод опять же

Собеседование: стоит уделить внимание психологии: усидчивость, дисциплинированность, коммуникативные навыки, стремления, вот это всё. Так же имеет смысл поговорить о предыдущем опыте и посмотреть в резюме. Дать стандартное тестовое задание а-ля “написать чат на web sockets”, смотреть на сроки выполнения, “вылизанность” задачи и адекватность подобранных инструментов. Хорошо идут технические вопросы на знание языков, протоколов, паттернов и стандартных бибилотек. Плюсом будет если соискатель уже имеет опыт конкретно с вашим набором фреймворков, но если нет — не беда. Если все остальное в порядке — разберется. Это его работа.

Чего спрашивать не стоит: не спрашивайте почему люки круглые (вообще ни у кого это не спрашивайте), не просите его развернуть красно-черное дерево маркером на доске, дать оценку сложности алгоритма, произвести топологическую сортировку или спроектировать высоконагруженную систему. От этого линейному программисту нехорошо, хочется врезать вам по тыкве и убежать.


Rock star (Software Scientist)

Концентрированный исследователь. Такие больше похоже на классических ученых, но только от IT. Им интересны алгоритмы, теоретические исследования, концептуально новые направления в индустрии, но прежде всего — им интересно экспериментировать. Ради этих экспериментов их и нанимают, собственно. Они готовы часами копаться в сложных штуках и решать задачи, постановка которых другим людям даже не понятна. Они — эксперты в сложных вопросах. Они точно знают в каких случаях q-sort стоит заменить на heap sort и чем они отличаются, или может быть какие алгоритмы кластеризации подойдут для анализа потока биржевых котировок, а иные знают какие оптимизации используются внутри g++ и как они помогают жить. Костяк таких людей, например, способен разработать новый язык программирования и компилятор к нему. Или значительно улучшить какую-бы то ни было существующую систему. Еще они часто предрасположены к функциональному программированию. Ни на что не намекаю — просто статистическая закономерность. Кстати, говнокодить rock stars могут (особливо на стадии прототипирования идей), но в массе своей не допускают плохой код до финальных версий разрабатываемых ими вещей, стараются сделать все красиво, с комментариями и удобными программными интерфейсами.

Но.

Как всегда есть “но”, которое все портит. Важно понимать что ни при каких условях эти люди не будут решать ваши задачи. То есть да — rock stars будут решать те задачи, которые интересны им. За ваши деньги. И при том — за большие деньги. И при том — не факт что будет какой-то результат. То, что ваши задачи совпали с задачами, которые интересны rock star — очень и очень большая удача и счастливое стечение обстоятельств, не более. Но если завтра rock star-у взбредет в голову контрибьютить в GHC вместо улучшения вашей сборки MySQL — то у вас будет ограниченное количество времени чтобы быстро и решительно его уволить. При попытке заставить оного вернуться к своим задачам — получите, в зависимости от темперамента и ваших soft skills, или конфликты или тихий провал сроков. Ну хорошо хорошо, чтобы людей так капитально разворачивало — это бывает редко и происходит постепенно, да. А вот обратная ситуация — если пересадить rock star с улучшения вашей сборки MySQL на улучшение GHC против его желания — бывает достаточно часто. И, как нетрудно заметить, приводит к аналогичным последствиям. И именно это обстоятельство делает rock star категорически неприемлемым для аутсорса.

Именно поэтому rock stars лучше всего чувствуют себя в продуктовых компаниях (например JetBrains), где им дают полную свободу в рамках одного продукта и полностью исключают внезапную смену скоупа задач (разве что только через увольнение). Люди получают возможность заниматься теми задачами, которые им интересны, самореализовываться, раскрываться и их при этом особо никто не дергает. Получается хорошая штука — окей, идет в релиз. Нет? Ну и черт с ним. В таких условиях rock stars пускают корни, живут весьма долго (до десятка лет) и им хорошо.

Со стороны менеджмента здесь требуется легкий и ненавязчивый контроль — так, чтобы rock star не разбредались и их не “заносило” в бесперспективные эксперименты. Ну и так же мягко доносить, что та или иная интересная ему разработка нерелевантна.

Есть другой замечательный пример работы с rock stars — это Google, в котором rock star-у дают возможность заниматься тем, что он хочет. Google их кормит, поит, одевает и защищает от внешних угроз. Взамен — все, что rock star наизобретает — будет принадлежать и продвигаться Google, превращаясь в его продукты. Fair enough. Эдакие посевные инвестиции в отдельно взятой компании.

Бэкграунд: лицей или другая хорошая школа, высшее образование в хорошем ВУЗе по IT-специальности или же математике. Круглый (хотя бы овальный) отличник. Вероятно, участие в серьезной научно-исследовательской деятельности (научные публикации как плюс) и/или олимпиадное программирование прямо со школы.

Ценит: покой (пока решает задачу), свободный ненормированный график с возможностью удаленной работы, адекватность менеджмента, возможность поработать с другими rock stars, сложные, интересные и нестандартные задачи, стабильное финансирование. Офисные плюшки или воспринимает как должное или игнорирует напрочь, но в целом не испытывает к ним особого пиетета.

Сильные стороны: сложные задачи, исследовательская деятельность, нередко проектирование.

Слабые стороны: зачастую наличествуют проблемы в коммуникации, отсутствует стрессоустойчивость, нестабильность в компании или проекте легко спугивает rock stars, жестко поставленные сроки превращаются в стресс, невозможность переключаться по предметным областям — только разве что по своему желанию. Не смотря на всю творческость, несамостоятелен за пределами своих задач.

Собеседование: алгоритмы и структуры данных, оценки сложности, олимпиадные задачи — ваши надежные друзья. Можно заставить разворачивать дерево на доске (но зачем?) — но гораздо лучше дать несложную математическую задачу. Главное не спешите и не торопите: дайте человеку подумать столько, сколько ему нужно. Творческие задачи, задачи на соображалку (ну только не про люки же!) и задачи на проектирование в формате “давайте порассуждаем” и “предложите решение” так же неплохи. В резюме смотрите на образование и публикации. Поспрашивайте про участие в олимпиадах, научно-практических конференциях, поинтересуйтесь темой дипломной работы. Если рассказывает с горящими глазами — вы нашли то, что нужно. Так же стоит удостовериться, что соискатель знает в совершенстве какой-нибудь язык программирования (любой), иначе не очень понятно как он будет реализовывать свои эксперименты.

Чего спрашивать не стоит: не задавайте глупых вопросов. К глупым вопросам относится: детали реализации чего-либо а-ля “а что делает HTTP-заголовок Content-Length?”, вопросы про коммуникативные навыки и прочая психология (да, rock stars могут обладать абсолютно мерзким характером — но что поделаешь, такова плата за них), и уж тем более не заикайтесь и даже не думайте проверять стрессоустойчивость. Пунктуальность проверяйте только на уровне “не пропадает на неделю и ладно”.


Делец (Software Engineer)

Редкий зверь в наших краях. Его иногда называют “ориентированный на результат”, “любой каприз за ваши деньги”. Эдакий линейный программист, который неожиданно (а на самом деле — предсказуемо) обзавелся самостоятельностью, самомотивацией и начавший расти туда, куда считает нужным. Это не rock star, потому что его не интересуют глубокие и абстрактные задачи. Его интересуют работающие инструменты, приносящие конкретную, ощутимую пользу, которую можно потрогать руками здесь и сейчас (зачастую — в виде хрустящих купюр в кармане, но об этом позже). Если работающего инструмента нет — делец делает его для себя сам. Очень любит конкретику в постановках задач, в технологиях и — что самое важное — в общении. Про таких еще говорят “строгий, но справедливый”. Коммуникативные навыки хорошие. Политкорректен, дружелюбен, не тяжел, хотя бывает грубоват и склонен к занудным формальностям. Делец таков не от хорошей жизни, потому как грубиянов и молчунов суровая реальность дельца быстро ставит на место. Будешь грубить — угрохаешь репутацию. Будешь молчать — не получишь заказы. Не будешь избегать и разрешать конфликты, лезть на рожон — останешься без денег. Материалист. Работает с теми задачами, которые ставит для него объективная реальность. Если чего-то не понимает — спрашивает и добивается конкретного ответа. Его хлеб — тщательно подобранный или разработанный собственноручно инструментарий, опыт, умение разбираться во всякой гадости в приемлемые сроки и работа на скорость и на качество. Инструментарий подбирает сам или посоветовавшись с другими дельцами — и не дай вам б-же дать ему совет в этот момент. Ответственный. Хороший делец не срывает сроки и обеспечивает рабочий и поддерживаемый продукт. К говнокоду относится как к одному из инструментов. Может занять технического долга, если это уместно и полезно в конкретной ситуации, учитывая специфику проекта. Сведущ в менеджменте. Нередко понимает в нем больше, чем непосредственный начальник. На основании этого может рекомендовать ad-hoc управленческие решения. Из профессиональных изъянов стоит отметить невнимательность к мелочам, но и это у хороших дельцов лечится.

Крутое описание — не правда ли? В чем же подвох? Подвоха тут два. Первый заключается в том, что делец не терпит над собой никакого начальства, особенно если оно менее квалифицированно чем сам делец. Во многом это обусловлено той самой осведомленностью о способах менеджмента. Ну еще и тем, что делец сам прекрасно понимает как делаются деньги в IT-индустрии. Как следствие — делец не подчиняется приказам. Делец сотрудничает в рамках контрактов. Любая попытка заставить дельца делать что-либо за пределами контракта (если не формально подписанного — то хотя бы устно оговоренного) — ведет к вежливому отказу в лучшем случае или к расторжению контракта в худшем. Если делец не подписывался отсылать вам ежедневные отчеты — он этого делать не будет. Если не подписывался тратить на вас 8 часов в день (при наличии сроков сдачи задания) — то он этого делать не будет. Если не подписывался на правки по проекту — ну вы поняли. Однако если вы выкупаете оптом какое-то кол-во рабочего времени дельца (без конкретных сроков и конкретных задач), то он с радостью будет выслушивать ваши стенания, невнятные требования, поддакивать и участвовать в любой корпоративной шизе — ну а что? Уплочено же. Любой каприз за ваши деньги.

Второй подвох заключается в самом отношении дельца к деньгам. Делец не подвержен нематериальной мотивации. На ваши “компания будет оплачивать вам тренажерный зал, обеды и котиков по пятницам” скорее всего ответит “давайте лучше деньгами”. А денег делец любит много. И не просто много, а очень много. Да, он лоялен к нестабильности выплат, к переработкам и к оплате за результат, однако эта оплата должна быть большая.

Долгосрочными контрактами на маленькие ежемесячные суммы его не заманишь. Только на большие — выкупайте рабочее время оптом, да. Как следствие — делец часто меняет место работы (в той мере, в которой для него существует это понятие). Засидишься — станешь линейным программистом. Как следствие — квалифицирован решать довольно широкий спектр задач. Помните — хороший делец всегда стоит своих денег. А если вы не дадите ему достаточно денег — делец попытается реквизировать рычаги управления. Разными способами — от наглого увода заказчика и команды (если у него есть такие полномочия), до честного разговора по душам. Если это не удастся — он вас быстро и решительно покинет, потому как а зачем? Хорошие дельцы заканчивают открытием собственных компаний, но, как было сказано выше, дельцов в нашей стране в принципе мало.

Бэкграунд: часто самоучка. Занимается программированием потому что интересно. Высшее образование наличествует, но стоит смотреть на репутацию учебного заведения. Если учебное заведение серьезное — то троечник. Ибо как работает с первого курса. Да и вообще изучению всяких наук предпочитает по-скорее добраться до реальной работы. Очень часто фрилансит. У некоторых дельцов проблемы с фундаментальными знаниями. Однако если это точно делец — то эти проблемы легко решаются.

Ценит: высокую оплату своих услуг (именно в такой формулировке), соблюдение договоренностей, качественные решения проблем. График и плюшки — по договоренности, но обычно предпочитает свободный график, не привязанный к месту работы с фиксированными целями, а плюшки — да выдайте лучше деньгами.

Сильные стороны: широкая и в меру глубокая квалификация, самостоятельность, ответственность, ориентированность на результат, толерантность к нестабильности в компании (пока соблюдаются его контракты), толерантность к недолгосрочным контрактам и внезапным их расторжениям (не нарушениям, а расторжениям я сказал!), слоновья стрессоустойчивость.

Слабые стороны: высокая стоимость (в 2 раза выше чем у линейных программистов и это только начало), могут и сами нарушать обязательства договора (это если делец плохой и ни на что не годный — или просто начинающий), неуправляемость в режиме “я начальник-ты дурак” (если не уплочено), краткосрочность планов, непунктуальность если иного не предусмотрено договором.

Собеседование: хорошего дельца найти трудно. Ваш друг — репутация. Посмотрите резюме, не поленитесь связаться с человеком, который сотрудничал с соискателем ранее. Если речь идет об удаленной работе — посмотрите что у соискателя с доступностью. Как быстро он отвечает на почту и сообщения, телефонные звонки. Если лично — насколько пунктуален по назначенным встречам. Дальше расспросите о знаниях требуемой технологии. Но только так — без фанатизма. Конечно неплохо если делец точно знает какой адрес в памяти у функции закрытия подключения в проприетарной библиотеке, которую вы используете — но поверьте, это не то, что следует спрашивать. Неплохо будет попросить примеры проектов, которые делец уже реализовал на вашем стеке/с использованием вашей технологии. У хорошего дельца всегда найдется что показать и рассказать. Задачи на проектирование и “как решить вот эту проблему с заданной технологией” идут на ура, особенно если приправлять проектными деталями (например решить задачу в условиях когда заказчик требует релиза каждую неделю и т.п.).

Чего спрашивать не стоит: алгоритмические вопросы, математика, задачки на внимательность и прочая чепуха, которую спрашивают у rock stars. Разве что только на уровне концепции. Ну то есть делец может в общих чертах знать что такое, скажем, бикубическая интерполяция, но не заставляйте его реализовывать её на бумаге или на компьютере без интернета — будете справедливо (но вежливо) посланы. Отдельным пунктом следует упомянуть тестовое задание. Не давайте стандартных тестовых заданий: хороший делец таких заданий за всю жизнь переделал столько, что вам и не снилось и еще одно ему вот вообще не нужно. Далее. Смиритесь с тем фактом, что тестовое задание — это трата рабочего времени дельца. Приготовьтесь к тому, что оно будет платным. Предложите заключить NDA, временный контракт и сделать, например, коммит с фиксом бага для какого-нибудь вашего продукта или какой-либо системы с условием оплаты по выполнению и оговоренными требованиями к качеству. Это — самый эффективный метод. Не забудьте рассказать как настроить окружение. У хорошего дельца это не займет много времени, но бывают казусы.


Пассажир (business bullshitter)

У этого типажа много “ласковых” названий в народе. Наименее квалифицированные коллеги ему подчиняются, более квалифицированные его не любят. Начальники таких обожают и дальше я объясню почему. Кратко: пассажир харизматичен. Всё. Много и красиво говорит, но катастрофически мало (или некачественно) делает. Повышенная коммуникабельность — его хлеб и зачастую пассажир попадает на менеджерские должности, так как не знает как сделать самому, но обладает достаточным ораторским талантом чтобы заставить работать кого-то вместо себя, и — более того — убедить начальника что именно он и должен руководить проектом. Во всем он демонстрирует серьезность, рвение и уверенность в себе, стремится порешать любую проблему, организовать совещание и обсудить, обязательно учитывая мнение команды. Со стороны может показаться что у него шило в известном месте. Он почти всегда на связи, всем отвечает на письма, показательно вежлив (так, что врезать порой хочется извините вырвалось) и может найти подход хоть к самому дьяволу. Один только минус — техническая квалификация. По правде говоря, ему не очень нравится программирование (вплоть до отвращения), но очень нравится покомандовать. Поэтому слабую техническую квалификацию (или её полное отсутствие) он часто “замазывает” красивыми словами, показным участием, заинтересованностью, дружелюбием и коммуникабельностью. Одна из самых страшных ошибок — ставить таких людей на средние менеджерские должности в командах. Как только вы это сделали — всё. Вы больше не получите достоверных данных о том, что происходит внутри команды с технической точки зрения. У вас будет красиво представленный бриф по происодящему, но те места, которые пассажир не понимает на техническом уровне будут из него исключены. А это в 90% случаев — скрытые проблемы и разнообразные детонаторы.

Тем не менее, грамотно подобранный пассажир может помочь команде общаться с заказчиком. Например, для пассажира ничего не стоит убедить заказчика перенести дату релиза — и при этом последний еще и будет думать что это наилучшее решение. Использовать пассажиров в роли дипломатов для заказчиков — одно удовольствие. Однако помните: харизматичные пассажиры — это как токсичный анестетик широкого спектра действия. Имеет смысл периодически опрыскивать им заказчиков, однако утечка бочки анестетика внутри команды приводит к весьма плачевным последствиям.

Бэкграунд: “лидер класса”, “альфа-самец” в университете (жалко что не проверишь никак). Мистер обаяние. Образование может быть разным. Однако имейте в виду, что оценки могли получаться так же через ораторский навык. Программированием мог начать заниматься потому что интересно, но с таким обаянием у него были вещи в жизни и по-важнее. Нередко имеет свой персональный web-сайт на отдельном домене. Сделал его сам.

Ценит: все то же, что и линейный программист минус работа, плюс возможность поруководить.

Сильные стороны: коммуникабельность, способность убеждать, способность доносить информацию красочно, с шутками-прибаутками, про стрессоустойчивость лучше спрашивать отдельно

Слабые стороны: техническая квалификация. Многие технические вещи способен понимать лишь тезисно. Активен, но быстро теряет интерес и концентрацию на сложных и средних технических задачах. А в худшем случае — и вообще на любых задачах.

Собеседование: определитесь с тем нужен вам пассажир или нет. Если нет — при повышенной общительности и дружелюбности соискателя — держать ухо востро. Настоящие специалисты ведут себя спокойно. Старайтесь отсеивать красивые слова, общие утверждения, а выделять суть сказанного. Поинтересуйтесь достижениями в техническом плане. Попросите показать свой домашний проект, объяснить как он работает. Хорошо помогают те же вопросы что и для линейных программистов. Следите за тем, чтобы там, где соискатель не знает — честно говорил “не знаю”, а не пускался в пространные рассуждения. Ну и тестовое задание как всегда. Если к тестовому заданию будет объемное пояснение, в коде — не продраться от комментариев и соискатель рвется объяснить как он это сделал — перед вами пассажир. Ежели пассажир вам все-таки нужен, то поинтересуйтесь как бы он объяснил заказчику срыв сроков релиза. Так же душевный разговор на предмет знания методик управления — SCRUM, PMBOK и разбор управленческих кейсов — могут возыметь положительный эффект. Но это уже история не про программирование.

Чего спрашивать не стоит: в случае с пассажиром — запретных тем нет (в рамках приличия). Если возникли подозрения на то, что перед вами пассажир — попробуйте вот что: задайте какой-нибудь вопрос, на который технический соискатель бы отказался отвечать по причине нерелевантности. Поговорите… Ну я даже не знаю. Про то, какую музыку любит соискатель, или фильмы, или игры. Или куда он ездил путешествовать. Если перед вами пассажир — то будет длинный рассказ. Если вы ошибаетесь — то вам ответят кратко и тезисно.


Выводы

Отдельной строкой стоит заметить, что четкой границы между этими типажами нет. Человек вполне может находиться где-то между дельцом и rock star, или rock star может дрейфовать в сторону пассажира. А прямо сейчас какой-нибудь линейный программист может перепрыгивать в дельца, увольняясь с уютной галеры и заводя аккаунт на UpWork. Поздравим же его с этим! Однако концептуально я склонен считать, что стабильно и в долгосрочной перспективе любой программист плотно обосновывается в одном из этих четырех типажей.

Возвращаясь к описанной первоначально ситуации. Если вы набираете и растите потенциальных rock stars, то использовать их на аутсорсных проектах — это как забивать микроскопом гвозди. Если же вы выращиваете дельцов — будьте готовы делиться деньгами и полномочиями. А для решения задач аутсорса вполне подходят крепкие линейные программисты. Если это сложный аутсорс — то с добавлением одного rock star или дельца в команду на “птичьих правах”. В противном случае, если вы культивируете rock stars в своей компании, но у вас аутсорс — то смиритесь с тем, что единственный возможный способ на этом заработать — забирать себе промежуточные артефакты их работы. После того, как они вырастают — их надо отпускать. При том отпускание должно быть встроенно в саму бизнес-модель и кадровый пайплайн компании. Так вижу.

Именно это я бы и хотел объяснить учредителю компании из начала статьи. Но сейчас для него, боюсь, эти знания уже нерелевантны.

Спасибо за внимание! Хороших вам кадров!

habr.com

Какое перспективное направление в программировании для фриланса и иммиграции?

Во-первых, хотел бы порекомендовать книгу Чеда Фаулера “The Passionate Programmer: Creating a Remarkable Career in Software Development” (на русском: “Программист-фанатик”, Питер, февраль 2015). Несмотря на свое название, она не столько о программировании, сколько о личностном росте, саморазвитии и прагматичном стремлении к совершенству, читать рекомендуется всем и каждому.
Во-вторых, есть масса аналитических исследований в области IT, в последне время их особенно много из-за “кризиса”, например …о стагнации, образовании и востребованных профессиях.

Если думаете об эмиграции (а выезд заграницу на ПМЖ это именно эмиграция), то тут есть 2 нюанса.
Первый заключается в самой сложности переезда в другую страну с другими законами, налогами, климатом, языком, культурой, и тд, а тёплых мест хватает и в России (об этом миллион статей на том же Хабре).
Второй – переезжать в другие страны имеет смысл в том случае, если вы собираетесь работать на окладе в офисе, например в крупной европейской/азиатской компании на высокой должности на территории работодателя. Фрилансеру же реальная польза от пеерезда весьма сомнительная (опять же, налоги в России – одни из самых низких).

По поводу трендов и языков могу сказать следующее: если вы собираетесь жить и работать со стратегическим расчетом на карьерный рост, развитие и прибыльную должность в отдаленном будущем, то стоит задуматься о сложных, но актуальных технологиях, нацеленных в первую очередь на крупный бизнес (биржи, банковский сектор, системы аналитики и прогнозирования, ИИ, инетрнет вещей, etc.).

Сейчас мир программирования равивается в двух основных полярных направлениях: низкоуровневое – ПЛИС и самодостаточные микроконтроллеры (“умная железка в каждую вещь”), и, противоположное ему – высокоуровневое проектирование и ФП. В первом случае много физики, во втором – матана, дискрета, теории категорий и всего такого.
Лично мне ближе второй вариант, поэтому я для себя выбрал технологии, основанные на Java (почему именно Java – пояснил ниже в комментарии): Scala, Lift, ФП, функционально-ориентированное проектирование, мета-программирование, DSL, вот это всё.

По поводу “готовых решений” лично я наблюдаю обратный процесс: люди стараются отказываться от универсальных готовых решений в пользу гибких, компактных и заточенных под конкретную бизнес-логику (опять же DSL и DDD).
Но начать всё же рекомендую с Фаулера. Затем Р. Мартин “Clean coder” (на русском “Идеальный программист. Как стать профессионалом разработки ПО”), само собой МакКонелл, Крэг Ларман, и прочие бестселлеры.
Да, и не забудьте книгу Грега МакКоена “Эссенциализм…”, очень полезная вещь в наше время. Личностный рост и саморазвитие сейчас не менее важно (а иногда и важнее) просто “программирования”.

toster.ru

Ранги в профессии программист или профессиональный рост в IT карьере

Jт Junior до Senior не минуя Middle и с прицелом на TeamLead… Статья о рангах и ступенях IT карьеры разработчиков и некоторых других IT специалистов. Субъективный, но безпристрастный взгляд на развитие IT специалистов…

Ранги в профессии программист или рост IT специалистов в IT карьере. 

Данный материал представляет собой очерк вакансий-позиций, доступных разработчику программного обеспечения, которые в результате упорного труда продвигают его по карьерной лестнице. Автор статьи сам разработчик Middle класса (уже не Junior, но ещё не Senior, согласно спецификации, приведенной в статье – просто Developer) попытался привести описания основных позиций в карьере программиста и произвести краткий анализ способностей и амбиций, особенностей, свойственных тем или иным рангам, как и росту прав и обязанностей согласно занимаемой должности.

Надеемся, что этот материал понравится и будет полезен Вам.

Итак, как известно, программисты или разработчики имеют свои ступени профессионального роста. Обычно это Junior, Middle (или, как говорят куда чаще – просто Developer) и Senior. Ученик, подмастерье и мастер, если хотите. Для каждой из этих позиций характерны свои особенности, каждая из них влияет на обязанности и права разработчика, занимающего эту позицию и влияет на его характер, амбиции и способы решать рабочие вопросы. Написать данную статью, не опасаясь обвинений в необъективности, автору позволили некоторые наблюдения, сделанные в результате многолетней работы в IT компаниях, а также соединение собственных наблюдений с массой тематических материалов, прочитанных как в украинских, так и в зарубежных IT изданиях.

Таким образом, получилось, что о позиции Junior developer можно сказать следующее:   

Позиция – Junior Developer

Младший программист – Junior Developer, это молодой разработчик с малым количеством опыта или вовсе без такового, только начавший работу в избранной технологичной области. Обучается, как правило, по видеокурсам и видеоурокам, причём постоянно ведь опыта разработки у него так мало, что он очень много времени тратит на советы с более опытным разработчиком и понимание того как команда работает  над проектом. Накопив достаточно опыта и реализовав несколько проектов, junior переходит на middle уровень – становясь полноценным разработчиком. Но всё же, Junior разработчики находятся в постоянном, непрерывном и самостоятельном образовательном процессе. Обучение для junior разработчика –  это все. Испытывая постоянную необходимость в выполнении задач, поставленных по работе над проектом, идеальная схема обучения для Junior разработчика – это видео обучение программированию в рамках избранной технологии. Опираясь на просмотренные видео уроки по программированию, онлайн консультации и советы более опытных коллег, junior разработчик растёт достаточно быстро для того чтобы уже через 1-1,5 года занять позицию полноценного разработчика. Требования, обычно выставляемые к Junior разработчику, приблизительно таковы, как и у Developer и Senior.

 Это следующие знания:

 Основы программирования (системы исчисления, разница между оператором и операцией, понимание алгоритмов, методик ООП)

Языки: С#, C++, Java, PHP, JavaScript (синтаксис, ООП возможности, многопоточность, стандартные библиотеки, паттерны проектирования)

OOP и OOD (парадигмы)

Умение обучаться по видеокурсам и видеоурокам по программированию, не прибегая к дополнительным разъяснениям. Такой навык очень помогает Junior разработчикам вырости до Middle.

Работа с базами данных (JDBC, язык SQL, MSQL, SQL lite и т.п.)

Базовое знание какого-либо конкретного фреймворка (например, веб-сервисов или Spring).

 По субъективным заметкам программистов, за Junior Developerами замечено:

Нуждается в постоянном контроле, должен отвечать за написанный им код. Для Junior разработчиков важно показать, что они умеют учиться и при этом решать поставленные задачи. Развиваться в области постижения нескольких языков программирования, знании основных конструкций, алгоритмов, используемых наиболее часто, использовании фреймворков. Мыслит в рамках используемых технологий, читает литературу, проходит видеокурсы и видеоуроки, быстро пишет прототипы, но очень долго доводит до реальной работоспособности из-за малого количества опыта, грешит ложной инициативой.

 Ресурсы для Junior разработчиков:

 Видео портал ITVDN.com – Видеокурсы и видеоуроки для начинающих и опытных программистов.

MSDN.com – Технологии Microsoft

97 Things Every Programmer Should Know (список)

Other Things Every Programmer Should Know (список)

Channel9.com – Форум Microsoft разработчиков

Следующий шаг в карьерном и профессиональном росте программиста – Программист или Developer

Developer или Middle Dev

Программист или Developer или Middle dev (англ. разработчик) – это человек, ответственный за качественное и своевременное исполнение разработки информационно-программных систем, основанных на применении современных программных технологий. Программист выполняет задачи по написанию и базовому тестированию порученных ему компонентов системы, работает developer по внешним спецификациям. Поддерживает Junior разработчиков, занимается как архитектурой проектов, так и модульной реализацией, производит реализацию работоспособности прототипов, постоянно занимается самообразованием, понимает алгоритмы, Software Engineering Process, обладает знаниями в следующих областях: языки разметки, понимание технологии web-серверов и серверов приложений, знанием клиентских и серверных технологий , работы браузера, СУБД, операционных систем, офисных пакетов, сред разработки, профильных языков программирования, технического английского. Как правило, имеет высшее образование, хотя случается и что не имеет, это не критичный показатель, критичный –  наличие знаний и опыта.

 По заметкам программистов за developerами замечено:

 Любит поучать Junior developers, прямые вопросы от Juniors нередко вызывают у Middle developers раздражение, контроля над выполнением работ, как правило, не требует – отвечает за отдельные функции и модули и сам контролирует их работу, осознавая, что выполняемая им работа определяет рабочий процесс коллег. Это ответственные люди, которых редко нужно учить, так как они постоянно занимаются самообразованием в форме просмотра видео курсов по программированию, посещения семинаров и участия в вебинарах, чтения профильной литературы и ресурсов. Умеет решать поставленные задачи самостоятельно, понимает основы построения архитектуры проектов, мыслит не категориями языка, от которых, наконец, отвязался, но понятиями предметной области, умеет писать структурно и последовательно, думает о будущей поддержке продукта. К концу первого года работы в команде перестаёт писать плохой код.

 Ресурсы для developers:

 Github.com – Профессиональный ресурс для разработчиков.

ITVDN.com – Портал видео IT обучения 

MSDN.com – Продукты и технологии Microsoft

Codefor.com – Форум разработчиков

habrahabr.ru – Крупнейшее профильное IT сообщество рунета

 И вот, наконец, мы добрались и до позиции Senior developer.

 Senior developer (Ведущий разработчик)

 Ведущий программист – человек ответственный за качество и своевременность работ по разработке информационно-программных систем, основанных на применении новейших программных технологий. Обладает глубокими, структурированными знаниями и работает внутри проектной команды, совершенно не имея необходимости контактировать с представителями менеджмента заказчика. Выполняет такие работы, как: детальное проектирование и создание спецификаций проектов, полностью контролирует и зачастую и самостоятельно выполняет проектирование мелких проектов и внутренних под-проектов (модулей), программирование и базовое тестирование компонентов. Как правило, имеет законченное высшее образование, реже незаконченное, стаж от 3х лет в качестве developer, умеет комментировать программы, не прибегая к использованию словаря, разрабатывать документацию, свободно общаться на английском языке, владеет методами и инструментами анализа и проектирования, Software Engineering Process, языками разметки, глубоким пониманием клиент-сервер технологии, работ браузера, web серверов, серверов приложений, БД, ОС, офисными пакетами, может контролировать других разработчиков и ставить им задачи.

 По заметкам коллег-программистов, за Senior Developers замечено:

 Отвечает за проект, умеет подготовить  инфраструктуру, занимается решением сложных задач. Является наставником для developers и junior. Обладает набором конкретных решений в области тех или иных наиболее часто возникающих задач, за счёт чего демонстрирует бешенную производительность в сравнении с middle developers. Делает на порядок меньше ошибок, ошибки допущенные Senior, как правило, им же легко устраняются и связаны обычно со спешкой или постоянным недосыпом. Забавно, но нередко знает конкретные языки хуже, чем junior, что компенсируется знанием того, как обходить скользкие места и тремя-пятью решениями на каждую задачу, которые держит в голове, также за счёт того, что превосходно концентрируется на главном, игнорируя несущественные детали. Собственно, за это и держат – способен увидеть суть, нередко даже не дочитав до конца ТЗ.

Ресурсы для senior разработчиков:

Знают и не с кем ими не делятся. Можно разве что подсмотреть через плёчо, сидя рядом.

На этом первую часть нашей статьи о Рангах в карьере программиста и составляющих профессии от А до Я, можно читать завершённой. Надеемся, что данная статья была интересна Вам и следующий её выпуск, рассказывающий о Team Lead, Architect и CIO будет, ожидаем Вами.

***

А в качестве бонуса и вместо послесловия вот некоторые наблюдения о представителях профессий, описанных в данной статье, лично от автора.

Junior Developer

  • Всегда требует не только самообразования, но и контроля.
  • Всегда оптимист и всегда недооценивает сложности поставленных задач.
  • Жалуется только на нехватку времени, на остальное боится.
  • Не задаёт необходимые вопросы, так как опасается блеснуть незнанием.
  • Часто ошибается и потому завышает сроки, чтобы успеть переделать до сдачи.
  • В перманентной вражде с SEO и Тестировщиком – с Тестировщиком, так как тот находит баги, с SEO так как тот заставляет заниматься, по мнению любого разработчика несущественной ерундой, за которую тем не менее третирует начальство.
  • Менеджеров, совершенно не воспринимает всерьез, так как пока не понимает всей серьёзности их функций.
  • Даже самую рутинную работу считает сложной, хотя способен написать тысячи строк «одинакового» кода.

 Developer

  • Пессимист, недооценивающий себя, и живущий в страхе промаха и провала.
  • Всегда находит новинку, чтобы обсудить, время на перекур что бы обсудить, и время на чашечку кофе, чтобы узнать, что обсуждают другие.
  • Не стесняется и может даже эксплуатировать коллег, выманивая все возможные знания, умения, применяя которые о коллегах упомянуть забывает.
  • Наступая на грабли, молчит и скрипя зубами сам исправляет ситуацию, так чтобы никто даже и не знал.
  • Разделяет мнение Juniora о тестировщиках и SEO
  • Роль менеджера понимает, но тем не менее менеджеров недолюбливает как непонимающих элементарного.
  • Знает, сколько он стоит и при случае показывает, что знает это.
  • Старается работать только над тем, что интересно.
  • Нередко ухитряется вести по 2-3 проекта параллельно, чем очень удивляет Junior developers.

 Senior Developer

  • Реалист – всегда закладывает не только свои сложности, но и общие риски, при этом, не слишком завышая сроки. Как делает это, не знает сам, говорит,  при этом кратко – опыт.
  • Успевает всё. И митинги и work tasks и помогать коллегам.
  • Может легко, не стесняясь, сказать, что не знает чего-то. При этом так же легко помогает разобраться в том, что знает.
  • Грабли у Senior, как ядерное оружие, мощные и критичные – если уж ударят, то глобально. Бывают наверняка и простые грабли, но они их удачно скрывают, так, что о них не знает никто.
  • Любят работу – радуются успеху проектов как в детстве, причём даже когда те не слишком сказываются на благосостоянии.
  • Тестер – советник.
  • Менеджер – щит перед заказчиком.
  • Не стесняется требовать повышения ЗП, крайне не любит привлекать к работе посторонних или новичков, даже если те знают и умеют много и хорошо.
  • Ворчит, но работу делает и в зависящем от него всегда успешно.

Вот то немногое, что мы рассказали Вам о профессии Developer. О свойственном данной позиции карьерном росте, об обучении и самообразовании людей занимающих эту должность, а также пристрастиях и слабостях мужчин и женщин избравших для себя профессиональный путь разработчика. Надеемся этот субъективный, но безпристрастный материал был полезен Вам и принёс Вам несколько приятных минут, полученных во время чтения.

5 английских букв:

www.trn.ua

плюсы и минусы :: SYL.ru

В последнее время профессия «программист» стала очень востребованной и популярной. А всё благодаря развитию информационных технологий, ведь без компьютера и Интернета сейчас очень сложно обойтись. В этой статье мы подробно расскажем вам об этом перспективном виде деятельности.

История

Мало кто знает, когда появился первый программист. История профессии уходит корнями в начало 19-го века. В 1804 году Жозеф Жаккар построил ткацкий станок. Именно он считается первым запрограммированным устройством, позволившим создавать узоры на тканях с помощью перфокарт.

Первое же вычислительное устройство, или Аналитическая программируемая машина, была разработана Чарльзом Бэббиджем. Однако он так и не смог её построить. В середине 1843 года Ада Лавлейс (дочь поэта Джорджа Байрона) написала для неё первую в истории программу, решающую уравнение Бернулли.

В своей научной работе Ада рассмотрела много различных вопросов. Несколько высказанных ею положений (связь циклических процессов вычислений с рекуррентными формулами, принцип экономии действующих ячеек памяти) актуальны и для современного программирования. В комментариях Лавлейс и материалах Бэббиджа есть такие понятия, как индексный регистр, модификация команд и библиотека подпрограмм. Эти термины вошли в обиход лишь в 1950-х годах, когда профессия программист (плюсы и минусы можно прочесть ниже) только зарождалась. А широкое распространение они получили только спустя пару десятилетий.

Первый программист

Хоть ни одна программа Ады Лавлейс не была запущена, её принято считать первым программистом (хотя по современным меркам, написание только одной программы не считается профессиональной деятельностью). В честь неё был назван один из универсальных языков программирования – «Ада».

А самым первым был «Планкалкюль», созданный немецким инженером Конрадом Цузе в 1941 году. К сожалению, история не сохранила имен первых профессиональных программистов (в отрыве от настройки аппаратуры компьютера). Это произошло потому, что в то время данная деятельность рассматривалась всего лишь как второстепенная наладочная операция.

Определение

Программист – это специалист, занимающийся разработкой компьютерных программ и алгоритмов при активном использовании специальных математических моделей. В зависимости от специализации программисты делятся на три категории:

  • Прикладные. Пишут программы прикладного характера: мессенджеры, редакторы, бухгалтерия, игры и т. д. Создают драйвера для СКД, систем видеонаблюдения, пожаротушения и др. Также адаптируют уже существующие программы под нужды конкретного пользователя или организации.
  • Системные. Пишут интерфейсы к базам данных, работают с сетями, разрабатывают ОС. Специалисты этой категории самые редкие и высокооплачиваемые. Их главная задача – разработка сервисов (программного обеспечения) для управления вычислительной системой (периферийные, коммуникационный устройства и процессор).
  • Web-программисты. Работают с сетями, но в основном с глобальными (Интернет). Создают веб-страницы и пишут программную основу сайтов. Также в их обязанности входит работа с базами данных.

Образование

Профессия «программист» есть в списке специальностей множества вузов. Если рассматривать столицу нашей страны, то самыми авторитетными являются: МГУ, МАИ, МЭСИ, МИЭМ, МИРЭА, МГТУ, МИФИ и МФТИ. Получить профессию программиста можно и в других мегаполисах. Дефицита с институтами (или филиалами), обучающими этой специальности, нет даже в маленьких городах. Согласно статистике, российские вузы ежегодно выпускают около 100 тыс. программистов.

В процессе обучения лучше сосредоточиться не столько на прослушивании лекций, сколько на решении задач и участии в разнообразных учебных проектах. Будущий программист должен научиться думать и принимать верные решения. Так как развитие информационных технологий идёт бурными темпами, то специалисту этой сферы нужны навыки самообразования, которые после получения диплома позволят ему не терять квалификации и идти в ногу со временем.

Смежные карьеры

Для российских программистов (в отличие от зарубежных) допустимо наличие смежного образования. Они могут быть математиками, физиками, химиками и др. Кстати, очень популярной в последнее время стала профессия «инженер-программист».

Как показывает практика, получение смежного высшего образования не мешает быть им первоклассными IT-специалистами. Известно, что программистов из азиатских стран (Индонезии, Вьетнама, Китая) привлекают к массовому индустриальному программированию. А в тех областях, где нужны творческие решения, наиболее сильны российские специалисты. В первую очередь это обусловлено высоким качеством фундаментального образования.

На факультете кибернетики и высшей математики МГУ существует специальная программа двухлетнего обучения в вечернее время, позволяющая подготовить программистов с дипломом по смежным направлениям и специальностям. Помимо государственного диплома о дополнительной квалификации выпускники этой программы получают международные сертификаты. Также есть возможность дистанционного обучения через Интернет. Например, находясь в какой-нибудь провинции, можно получить престижную специальность «техник-программист» (профессия не очень популярная, но перспективная). Идём далее.

Функциональные обязанности

В России профессия «программист» (описание есть в разделе «Определение») не связана с разработкой новых приложений, операционных систем и программ по типу Adobe Photoshop или MS Office. Этим занимаются специалисты высокой квалификации из таких фирм как Oracle, Sun, Adobe, Microsoft и т. д. В отечественных компаниях подобные проекты большая редкость и почти все программы, которые ставят на свой ПК российские пользователи, созданы западными фирмами. Есть несколько отечественных фирм-разработчиков ПО, но их очень мало. Например, «Лаборатория Касперского», выпускающая антивирусные программы. Также созданием программного обеспечения занимается и ряд государственных структур: НИИ, конструкторские бюро космонавтики и военно-промышленного комплекса. Но опять же, их можно пересчитать по пальцам.

Большим спросом в России пользуются программисты-«прикладники»: сегодня любая компания нуждается в автоматизации бизнеса, в возможности вести учёт продукции, быстро обмениваться информационными сообщениями между подразделениями фирмы и работать по внутренней компьютерной сети. В соответствии с особенностями своего бизнеса, компании адаптируют, а если нужно, то и разрабатывают подходящие пакеты программ. Нужно понимать, что автоматизация бизнеса издательского дома и ресторана – это совершенно разные вещи. Помимо программного обеспечения некоторым фирмам необходим регулярный мониторинг налаженной системы и её модификация, на случай расширения бизнеса. Поэтому работодатели набирают программистов в свой штат. Но некоторые фирмы предпочитают заказывать автоматизацию бизнеса профессиональным IT-компаниям.

Сейчас на рынке труда растёт спрос на программистов 1C, которые адаптируют пакеты программ компании «1C» под нужды конкретного предприятия, а по большей части – его бухгалтерии. Проанализировав требования заказчика, они устанавливают ПО, облегчающее расчёты, оптимизирующее работу персонала и налаживающее документооборот.

Ещё одна популярная сфера деятельности – web-программирование: разработка, поддержка и модернизация сайтов. Эта сфера требует знания нескольких языков: XML, JavaScript, CSS, XHTML, MYSQL, PHP. Причём большинство работодателей желают получить специалиста, разбирающего как в дизайне, так и в программировании. То есть он будет заниматься не только техническими вопросами, но и оформлением, а также информационным наполнением сайта.

Важные качества

Любая профессия будущего (программист особенно), связанная с быстроразвивающимися областями, потребует от специалиста навыков быстрой адаптации и способности к самообучению. Если у работника их нет, то через несколько лет его квалификация заметно понизится.

Ещё один важный навык – знание английского языка. Особенно высокие требования к этому умению предъявляет профессия «инженер-программист», где необходимо чтение иностранной технической документации.

Претенденты на должность ведущего специалиста должны быть инициативными, самостоятельными, самоорганизованными и ответственными. Также необходимо умение управлять коллективом и проектами.

Плюсы профессии «программист»

Главный положительный момент специальности – это возрастающий спрос на её представителей. Темпы роста сферы информационных технологий в России составляют примерно 25% в год, что намного выше аналогичных показателей в США и Европе. Профессия «программист» пользуется настолько большим спросом, что даже выпускник института с минимальным набором знаний может сразу устроиться на работу. Ещё одно преимущество специальности – возможность работы за рубежом, где российские эксперты ценятся особенно высоко.

Минусы профессии «программист»

Конечно, у любой специальности есть и отрицательные стороны. Главный минус профессии – комплекс «козла отпущения». Например, вы устроились на работу в компанию, занимающуюся разработкой ПО. Нужно понимать, что заказчиков на эту услугу будет немного, и менеджеры будут пытаться ухватить любой дорогостоящий проект. При этом какими средствами и в какие сроки он будет выполнен, они не особо задумываются. Расплачиваться за такое «планирование» придётся программистам-разработчикам посредством ночных или вечерних «бдений» в офисе, а также работой в выходные дни. Это самый существенный минус, который имеет профессия «программист». Но нам кажется, что немалый размер заработной платы с лихвой его компенсирует. Ну, и не стоит забывать о хороших карьерных перспективах и возможности реализации творческих замыслов.

Оплата труда

Профессия «программист», описание которой давалось выше, считается одной из самых высокооплачиваемых в России. Даже начинающий специалист легко найдёт себе работу, соответствующую уровню его знаний. Зарплата стажёра составляет примерно $1000. Штатный программист в средней компании получает до $2000. Ведущий – $2500-3000. Следующая ступень в карьерной лестнице – руководитель IT-отдела. В этом случает, помимо обязательного опыта работы, необходимо знать английский язык, уметь управлять персоналом и т. д. Заработок может доходить до $4000. А если хороший программист возглавит крупный проект по разработке ПО, то зарплата может превзойти планку в $5000.

Карьера и перспективы

Хороший старт карьеры – присоединение к группе специалистов, разрабатывающих какой-то проект. Крупные проекты нередко привлекают внимание зарубежных компаний, которые могут «перекупить» талантливых российских работников.

Например, в прошлом веке группа наших учёных занималась разработкой процессора «Эльбрус» для Минобороны. Узнав об этом, корпорация Intel перекупила всех специалистов, а сам проект «Эльбрус» закрылся. Также очень ярким примером является Алексей Пажитнов, придумавший игру «Тетрис». Поначалу он работал в РАН, а после профессиональных успехов перешёл в Microsoft. Написанные им программы и игры до сих пор пользуются высоким спросом.

Профессия «программист» (плюсы и минусы указаны выше) предполагает определённый карьерный рост. О нескольких этапах карьерной лестницы, мы рассказали в разделе «Оплата труда». Высшими ступенями являются должности IT-директора компании, менеджера IT-проекта, руководителя проектной группы и т. п. Главное условие перемещения на более высокую позицию – совершенствование профессиональных навыков.

Великие и знаменитые программисты

Список их весьма обширен, поэтому мы назовем лишь наиболее известных:

  • Фаулер Мартин.
  • Рэймонд Стивен.
  • Таненбаум Эндрю.
  • Мацумото Юкихиро.
  • Кнут Дональд Эрвин.
  • Страуструп Бьёрн.
  • Мейер Сид.
  • Кей Алан.
  • Столлман Мэттью.
  • Хоппер Грейс.

Законы Мерфи для программистов

  • Вместо того чтобы в приступе злости молотить системный блок, все почему-то лупят по невинному монитору.
  • Настоящий программист поменял уже как минимум 3 облитых пивом клавиатуры.
  • В словосочетании «мышка-норушка» нет никакого смысла.
  • Программисты, испытывающие проблемы с настройкой кодировки, автоматически становятся неандертальцами.
  • Настоящий программист в случае голодовки может ещё в течение месяца питаться едой, выковырянной из клавиатуры.

www.syl.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *