Компьютерные науки и программная инженерия: устранение путаницы

В области программного обеспечения часто можно услышать такие термины, как ученый-компьютерщик, разработчик, программист, инженер-программист, инженер-компьютерщик и многие другие. По своему опыту я заметил, что есть два термина, которые люди часто путают: компьютерные науки (CS) и программная инженерия (SE). Я часто слышу, как люди используют их как синонимы; однако это неверно. Я получил степень бакалавра в области компьютерных наук и степень магистра в области разработки программного обеспечения, и по собственному опыту могу сказать, что это не одно и то же. Не поймите меня неправильно, и CS, и SE относятся к области вычислений, и оба важны для разработки программных систем. Фактически, люди из каждой области обычно соревнуются за одни и те же должности. Тем не менее, фокус CS отличается от внимания SE.

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

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

Различия

Если вы не знакомы, алгоритм - это набор правил, которым компьютер следует для решения данной проблемы. С учетом сказанного, компьютерные науки - это область вычислений, которая фокусируется на изучении, реализации и анализе алгоритмов. Компьютерный ученый заинтересован в изучении теоретических аспектов алгоритмов, их эффективности и способов их реализации в компьютерном оборудовании [1]. Кроме того, информатика также фокусируется на структурах данных и на том, как алгоритмы управляют и обрабатывают данные.

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

Учебный план

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

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

Мое мнение

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

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

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

Заключение

CS и SE - это отрасли разработки программного обеспечения. Очень важно, чтобы люди в каждой области знали основы вычислений, алгоритмов, архитектуры и качества. Хотя CS и SE используются как синонимы, их направленность различна. Я считаю, что для хорошего понимания программных систем важно иметь знания в обеих областях. Итак, что лучше? Никто. Это разные области вычислений, которые дополняют друг друга и обе необходимы для разработки программных систем.

● ● ●

Если вам понравилась эта статья, порекомендуйте и поделитесь. Не забудьте подписаться и подписаться на меня в Twitter, чтобы быть в курсе моих последних сообщений. Увидимся в следующем.

использованная литература

[1] https://www.techopedia.com/definition/592/computer-science

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

Подпишитесь на нашу публикацию, чтобы увидеть больше историй о продуктах и ​​дизайне, представленных командой Journal.