Профессиональные компетенции разработки программного обеспечения
Дмитрий Николаевич Черемнов
Одного знания языка программирования недостаточно для профессиональной разработки программного обеспечения. Нужны ряд компетенций – знаний, методик, навыков владения инструментами. Ключевая информация и рекомендации для будущих разработчиков программного обеспечения и других информационно-технологических специалистов. Лайфхаки для ИТ юниоров, желающих значительно повысить свою квалификацию и зарплату. ИТ "кухня" – технологии, процессы и методологии, необходимые для создания качественного программного продукта.
Введение
Программисты учатся на ошибках других программистов, а потом обучают новых программистов тем же ошибкам.
Я фанат разработки программного обеспечения…
У меня интересная работа технического лидера в компании, разрабатывающей программное обеспечение на заказ для зарубежных и отечественных клиентов.
За долгие годы путем обучения, проб, ошибок, дошел до уровня, когда мне доверяют начинать разработку проекта и доводить его с командой до продакшена.
Я поделюсь своими мыслями, знаниями и опытом в разработке программного обеспечения.
Почему…?
Я задумался, почему несмотря на множество людей с горящими глазами, изучающими или знающими какой-либо язык программирования, остается острая нехватка программистов (например, в нашей и других компаниях дают бонус за успешную рекомендацию кандидата)?
Почему, несмотря на большой объем информации в интернете, сложно понять, что требуется для того, чтобы тебя приняли на работу в компанию, разрабатывающую программное обеспечение?
Почему сейчас, когда компании лояльно относятся к сотрудникам (в нашей компании десяток человек работают удаленно), которые находятся за сотни километров в маленьких городках и успешно работают на ключевых позициях, остается кадровый голод?
Злосчастный круг
К сожалению, проблема студентов и молодых специалистов известна – компании не хотят рисковать и брать на работу людей без опыта, без нужных компетенций.
А без работы невозможно (а точнее очень трудно) получить необходимый опыт.
Злосчастный круг замыкается и его сложно разорвать.
Тебя интересуют информационные технологии?
Ты изучаешь язык программирования и уже пишешь (пусть и простые) программы?
Ты хочешь связать свою профессиональную жизнь с ИТ?
А может ты уже работаешь в ИТ, но тебе нужно значительно повысить свою квалификацию?
Ты сможешь получить концентрат знаний и опыта, тебе не придется блуждать в дебрях интернета и собирать все по крупицам. Ты сможешь за год усвоить и понять основное, что в ином случае достигается годами. Но не обещаю, что это будет легко.
Стремись к профессиональной цели!
Если тебя интересует программирование, информационные технологии и ты находишься в начале профессионального пути – стремись к своей цели!
Получи Чек лист по профессиональным компетенциям (https://info.asvoip.com/pro-sd-check-list.rtf), требуемыми для разработки программного обеспечения.
Чек лист поможет оценить навыки, наметить векторы по развитию профессиональных компетенций разработчика программного обеспечения, которые значительно повысят ИТ квалификацию и помогут открыть дверь в компанию твоей мечты или получить повышение на текущей должности.
Определив свой текущий уровень, сформируй карьерный план и определи ближайшие и долгосрочные цели. Не трать на планирование много времени! План – это список намерений, но не более того.
Профессиональные компетенции разработки программного обеспечения помогут достичь поставленные цели при любой текущем уровне – для уровня курсанта, юниора или разработчика с опытом. Наибольший эффект получите на начальных уровнях, но разработчики среднего уровня, специализируясь на определенных технологиях и уделяя внимание отстающим компетенциям, могут достичь экспертного уровня.
Путь до юниора может занять много времени – от полугода до 2 лет, в зависимости от начального уровня и интенсивности подготовки. Нужно много изучать и практиковать, не менее 10 часов и нескольких дней в неделю (например, 2-3 дня в неделю по 2 часа вечером в будни и 4-6 часов в выходной теории и практики). Такой график сложно, но можно соблюдать по совместительству для учащегося, студента или занятого на основной работе. Естественно, у каждого человека своя скорость усвоения материала и получения практических навыков, кто-то достигнет цели ранее, а кому-то потребуется больше времени.
Звезд с неба не хватал
Может у тебя возникают сомнения, сможешь ли ты достичь своей профессиональной цели – начать работу в ИТ или повысить свою квалификацию?
Может ты думаешь, что многим все дается легко и просто? Вероятно, такие люди есть, но я не из их числа…
Знания мне даются непросто, свой опыт я набирал долго с "кровью и потом" – на работе, вечерами дома, а если меня посетит вдохновение, то иногда и ночью :)
Многие задают вопрос – есть ли польза в книгах, курсах и наставниках? Курсы, книги и учебные материалы, менторы – это ускорители, мотиваторы и тотализаторы, но все зависит от вас самих – вы должны изучать и практиковать!
Первый опыт я получил в школе, кодируя алгоритмы на микрокалькуляторе “Электроника МК-52”, программируя простые игры на микрокомпьютерах “БК-0010” и “ZX Spectrum” на языке Basic. Помимо этого, я провел много времени за компьютерными играми. В университете работал с системой управления базой данных dBase, создавая программу расчета полезных веществ в продуктах питания.
Моя первая работа на должности программист-инженер была в маленьком закрытом городке Казахстана в Курчатове в Институте Атомной Энергии в Национальном Ядерном центре. Курчатов расположен недалеко от ядерного полигона, на полигоне я видел огромные скрюченные, погнутые железобетонные столбы и “атомное” озеро – последствия наземных термоядерных испытаний. Первая реализованная мною база данных, ушедшая в продакшен – “Система учета радиоактивных материалов” для Международного агентства по атомной энергии. Ценным источником знаний по языку программирования С в 1996 году, являлась бумажная распечатка руководства “Язык программирования С” Брайана Кернигана и Денниса Ритчи, по ней я обучался с моим другом и коллегой Цай Евгением. Нашими наставниками по разработке были Инков Александр, Петренко Андрей (передаю им персональный привет!). Позже по документации и книгам изучали C++ и Delphi. В дальнейшем мы работали на С, C++ и Delphi в основном над созданием информационно-управляющих систем для эксперементальных стендов Ангара (http://www.nnc.kz/facilities/angara.html) и EAGLE (http://www.nnc.kz/facilities/eagle.html).
В 2006 году выиграл грант и в Омске в компании Luxoft прошел 4 месячный интенсивный курс по методикам разработки Rational Unified Process, языку программирования Java, Java EE технологиям и базе данных Oracle. После этого сменил специализацию с С++, Delphi на Java стек. Большинство ребят после курса также стали работать Java разработчиками. Переехал в кремневую долину Сибири – в Новосибирск. (Передаю всем знакомым и друзьям из Курчатова, Омска и Новосибирска пламенный привет!).
Начало карьеры может быть сложным, но вам должно нравиться программировать, чтобы получать удовольствие от ИТ учебы в настоящее время и в будущем от работы в ИТ! Чертовски приятно иметь работу, которая интересна и захватывает словно хобби! Иначе, возможно имеет смысл вам найти другое занятие по душе…
Естественно, каждый человек рано или поздно имеет тенденцию терять мотивацию. Практически каждый из нас нуждается периодически в “волшебном пенделе” ;) Рекомендую найти сообщество единомышленников среди изучающих ИТ и ментора из числа опытных разработчиков, которые могут оказать как моральную поддержку, так и дать практические подсказки, советы и помощь в освоении информационных технологий. Разработчики с опытом в свою очередь, оказывая помощь курсантам, могут избежать “выгорания” и прокачать свои навыки по управлению командой и проектом и вырасти до Лидера команды.
Через много лет я достиг своей цели – разработка программного обеспечения в классной ИТ компании в профессиональной команде!
А какова твоя цель?
Я знаю, что ничего не знаю
Оглядываясь назад, я начал обобщать и фиксировать свой опыт.
Теперь я понимаю, что могу указать более короткую дорогу к твоей профессиональной цели, передать свои знания и опыт – это моя новая цель!
Почему я точно знаю, какие знания и опыт требуется в ИТ?
Почему я смог выделить самое важное для юниоров из огромного количества информации?
Потому что я писал программы (Delphi, C, C++) и кодирую сейчас (Java, JavaScript, SQL) на нескольких языках программирования.
Потому что проектировал, программировал, тестировал, внедрял и поддерживал системы с различными технологиями:
REST Services, Web Services, Micro services, JSON, XML…
Для хранения данных использовал различные базы данных:
Oracle, MySQL, MariaDB, PostgreSQL, MongoDB, Cassandra, Redis…