Программная инженерия или информатика и вычислительная техника: в чем разница?

В наше время не обязательно иметь образование в области программирования – или вообще какое-либо высшее образование – чтобы устроиться на работу программистом. Наш опрос разработчиков 2022 года показал, что чуть более 70% участников опроса научились программировать с помощью онлайн-ресурсов. И около четверти профессиональных разработчиков не имеют высшего образования.

Конечно, многие разработчики все же имеют высшее образование в своих областях. Если вы тоже высматриваете вузы в надежде найти работу в сфере IT, вам, возможно, придется выбрать специальность: информатика и вычислительная техника или программная инженерия? Обе области отлично подходят для подготовке к карьере в сфере технологий, но в чем между ними разница?
Эти специальности имеют много общего, особенно в первой половине обучения. Обе требуют основных навыков программирования и твердых знаний в математике и логике. Однако с этого момента они существенно расходятся.
В этой статье мы рассмотрим предметы, которые изучаются по каждой из этих специальностей, в чем они пересекаются, и какую из них выбрать в зависимости от того, куда вы хотите направить свою карьеру.
Что такое информатика и вычислительная техника?
По направлению ИВТ изучают алгоритмы, теорию информации и автоматизацию. Это отдельная от программирования область; информатика основывается на теории вычислений, которая имеет глубокие корни в логике, математике и философии, возникшие за сотни лет до появления компьютеров. Первые кафедры информатики выросли на основе математики. Основатель первой такой кафедры, профессор Университета Пердью Сэмюэл Д. Конте, имел докторскую степень по математике.
Вы можете примерно представить, чему вас научит кафедра ИВТ, взглянув на вопросы, на которые вы должны будете уметь отвечать по учебной программе. Какой самый эффективный способ отсортировать список случайных чисел? Как передать информацию между двумя людьми конфиденциально, и как математически доказать, что это безопасно? Существует ли алгоритм, который с какой-то вероятностью даст ответ, а с другой – будет выполняться бесконечно? Так же, как материаловедение стремится понять фундаментальные свойства веществ, которые инженеры используют для строительства мостов – информатика исследуют организацию и обработку информации в качестве фундамента для разработки ПО.
Просмотрите вопросы на Computer Science Stack Exchange, чтобы составить представление о том, какие темы охватывает данная область. В то время как вопросы на StackOverflow.com касаются всех сторон использования языков программирования и инструментов разработки для написания ПО, раздел информатики почти полностью посвящен алгоритмам.
Что такое программная инженерия?
Умение выполнять вычисления не означает, что вы сможете создавать операционные системы и программы, которыми мы в современности пользуемся повсеместно. Программная инженерия – это как раз та специальность, которая затрагивает проектирование, разработку, тестирование и поддержку ПО. Как скоординировать работу тысячи программистов, чтобы создать новую версию мобильной ОС и обеспечить успешную установку обновления на телефоны миллионов людей? Как организовать код социальной сети так, чтобы люди могли использовать ее на десятках разных языков? Инженерам-программистам тоже нужно понимать алгоритмы, используемые в разработке, но они сосредотачивают свое внимание именно на проектировании и создании рабочего продукта для тысяч или миллионов людей.
На самом деле программная инженерия не столько связана с написанием кода, сколько с процессами, происходящими во время разработки. Качественное тестирование кода, надежный и автоматизированный деплой в production и совместная командная работа с использованием общих стандартов и практик имеют решающее значение для успешного программного проекта. У нас в Stack Overflow есть Гильдия Архитекторов, которая регулярно собирается для подготовки стандартизированных практик для всего состава разработчиков. Цель этих практик состоит в том, чтобы обеспечить максимально эффективное взаимодействие наших команд. Как однажды сказал Йоги Берра: "В теории между теорией и практикой нет разницы. На практике разница есть". Программная инженерия старается добиться, чтобы практика разработки была приближена к теории настолько, насколько это возможно.
В некоторых странах (например, в Канаде, но не только) существует особая разница между этими двумя специальностями. В Канаде действуют строгие законы, регулирующие, кто может называть себя инженером, а кто нет. Вы обязаны иметь лицензию местного инженерного совета, чтобы получить это звание. Это похоже на то, как во многих странах выдаются лицензии врачам и адвокатам. Хотя это требование изначально возникло из-за обрушения моста, оно распространяется на всех, кто называет себя инженерами, в том числе на инженеров-программистов. Если вы в Канаде претендуете на звание инженера-программиста (или кого-то еще со словом "инженер" в названии), вам нужно пройти соответствующую сертификацию; в противном случае вы рискуете быть оштрафованным.
Как и для ИВТ, для ПИнж существует сайт Software Engineering Stack Exchange. Взгляните на него, чтобы оценить сферу деятельности инженеров-программистов. Там вы увидите множество вопросов о таких вещах, как проектирование ПО, отслеживание багов и деплой кода.
Что еще я могу изучить, чтобы научиться программировать?
Одной только информатики и программной инженерии недостаточно для создания программного продукта. Например, компьютерная инженерия занимается проектированием CPU, GPU и устройств хранения данных, которые обеспечивают существование нашего цифрового мира, но ни одно из этих устройств даже не включится без инженеров электротехники. Математики формулируют теорию вычислений, которая лежит в основе криптографии, а статистика создает инструменты для обработки и исследования собираемых нами данных. Более новые направления, такие как data science, постепенно становятся отдельными специальностями, поскольку искусственный интеллект и продвинутое статистическое моделирование размывают границы между математикой, статистикой и информатикой. Многие другие области науки и инженерии используют сочетание информатики, программной инженерии, компьютерной инженерии и математики для проектирования самолетов, разработки вакцин и создания компьютерной анимации для ТВ и кино. На самом деле многие из лучших программистов, которых я знаю, имеют образование в области машиностроения или биоинформатики и используют свои навыки для разработки робототехнических систем или медицинских лекарственных средств. Даже медицинские специальности, такие как нейронаука и аудиология, требуют навыков программирования, потому что врачи должны уметь анализировать записи звука и результаты томографии мозга на научных языках программирования, таких как R или MATLAB.
Таким образом, информатика создает строительные блоки, которые программная инженерия использует для проектирования и создания программ. В Stack Overflow практики программной инженерии позволили нам создать сообщество, которое отображает пользователям около 500 миллионов страниц в месяц. Наша команда использует эти практики для координации работы более 200 программистов, чтобы поддерживать сайт, который вы видите сегодня. Большинство людей, возможно, даже не знают, что этот сайт работает всего на пяти серверах, которые вместе могли бы уместиться в вашей гостиной. Твердое понимание информатики позволяет нам эффективно хранить и обрабатывать данные, чтобы пользователи могли получать ответы на свои вопросы. Пока мы работаем над полным переходом компании в облако, мы полагаемся на принципы программной инженерии, чтобы так же плавно работать со всеми нашими сайтами, пока мы перерабатываем их архитектуру и перемещаем код с физических серверов в облачные сервисы.
Нет единого верного пути к профессии разработчика, поэтому продолжайте задавать вопросы, чтобы найти свой путь!
Материал подготовлен с ❤️ редакцией Кухни IT.