Компьютерная инженерия: путешествие без карты
Попробуйте объяснить «на пальцах» своим некомпьютерным знакомым, чем занимаются компьютерные инженеры и к чему их готовят в университете. Непросто, правда? То ли дело программисты. Они занимаются программированием. Именно к этому их и готовят. Всем понятно, что это сегодня круто :) Так хочется ясности и простоты! Только бы не спутать их с иллюзией. Так что давайте все-таки разберемся…В неизвестностьЭлектронные схемы, осциллографы, паяльник — вот первые ассоциации и наиболее актуальные… несколько десятилетий назад. Сегодня вы скорее застанете «системщика» перед монитором за удаленной настройкой сервера, возможно, находящегося на другом материке. Или за программированием микроконтроллера, который будет управлять… да чем угодно — от дискового накопителя до бытового прибора, от детской игрушки до промышленного робота. Ну и конечно за разработкой: структуры компьютерной сети, оптимальных настроек сетевого оборудования, конфигураций нового специализированного ПО...
Подобно мощному дереву, компьютерная инженерия непрерывно ветвится. Единственное, что можно с точностью предугадать — это факт появления новых побегов, о свойствах которых мы можем только догадываться. Позавчера «электронщик», вчера «системотехник», сегодня “сисадмин” (оптимизирующий работу компьютерных сетей) или «DevOps» (обеспечивающий оперативное взаимодействие с разработчиками, которые постоянно модифицируют свои продукты). Что завтра? Вам не кажется, что приобщаясь к этой профессии, вы отправляетесь на территорию, для которой нет карт. Какой же должна стать подготовка к такому путешествию?
Опора на принципыДа, учеба будущего компьютерного инженера обязана быть разноплановой. Ему не обойтись без знания «компьютерного железа», он должен быть «на ты» с технологиями компьютерных сетей, а еще при этом свободно программировать, в том числе и на уровне максимально приближенном к аппаратуре и средствам операционной системы. При этом ему постоянно предстоит поспевать за быстро меняющейся «средой», в которой необходимо досконально разбираться, чтобы ей управлять. Насколько реальны эти требования? Опыт подтверждает — безусловно реальны. И секрет здесь достаточно прост.
Дело в том, что при ближайшем рассмотрении новейшие технические решения, как правило, наследуют уже известные подходы. И если ты знаком с полудюжиной сетевых протоколов или аппаратных интерфейсов, то очередное решение сможешь «прочесть» без особого труда, а то и предвидеть, какие тенденции получат развитие завтра. Если продолжать аналогию с чтением, то ты будто листаешь книгу, написанную на знакомом языке: что будет на следующей странице, заранее не известно, но нет сомнений, что ты сможешь ее прочесть. При этом компьютерного инженера можно сравнить с полиглотом: языков, на которых нужно читать книги, ему приходится осваивать сразу несколько — и это непростой, но очень ценный навык.
«Я с этим разберусь...»Автору этих строк не раз приходилось слышать от наших выпускников — компьютерных инженеров разных поколений — одну и ту же фразу. «Мне пришлось полностью поменять профиль. Но я разобрался и я снова ok». Сменялись поколения компьютеров, которые были знакомы досконально. Кому-то приходилось вообще уходить в смежные области. Но срабатывал базовый навык — возможно самый ценный в нашей профессии: изучить необходимое с нуля - «освоить новый язык».
Да простят меня братья программеры: их замечательная профессия, мне кажется, не дает такой закалки. Потому, что если ты владеешь языком электронных схем, диалектами сетевых протоколов да еще языками программирования разного уровня впридачу, то тебе проще заговорить как-то совсем по-новому. А еще - легче понять и почувствовать, каково будет работать с твоими программами многослойному «компьютерному железу» и почему вдруг проявляется хитрый «глюк» в совершенно же на первый взгляд правильно написанном коде... Говорят, изучив новый язык, ты начинаешь по-новому видеть и полнее понимать мир. К нашей цифровой вселенной это точно относится.
Решения на миллионКак же все-таки ответить на вопрос, чем занимаются компьютерные инженеры? Максимально обобщая (и не согрешив против истины), можем сказать, что они создают и поддерживают техническую среду, в которой работают программы. А эффективность работы этих программ напрямую зависит от того, насколько такая среда оптимальна. Как сформулировал один талантливый технарь и одновременно успешный коммерсант, «Инженер — это человек, который способен за один миллион долларов сделать то, что любой дурак сделает за пять». Пожалуй, все-таки, внесем правку: хороший компьютерный инженер создаст для вас такую среду, в которой эффективность ваших программ может быть в разы выше.
Для этого, как мы уже знаем, он должен одинаково уверенно себя чувствовать в вопросах компьютерного железа, компьютерных сетей и собственно программирования. Именно к этому его и готовят. И универсальность такой подготовки дает ему важное преимущество в динамичном мире современных цифровых технологий. Компьютерный инженер лучше многих (если не лучше всех) приспособлен к изменениям. Именно поэтому мы часто видим наших выпускников на позициях разработчиков ПО, в современных ролях Data Scientist (специалистов по обработке «больших данных») и Machine Learning Engineer (инженеров в области искусственного интеллекта). И не сомневаемся, что увидим их на новых позициях, которые непременно появятся в ближайшем будущем.
Мы с вами действительно отправляемся в путешествие по территории, для которой часто не существует карт. Нужно быть готовым к неожиданным поворотам. Владеть разными «языками», чтобы при необходимости оперативно освоить новые. И стремиться создать за миллион решение, на которое людям менее квалифицированным и творческим понадобится пять :). Словом — готовимся стать настоящими компьютерными инженерами.