программная инженерия что это простыми словами

Компьютерная инженерия: что это, для чего нужна программная инженерия

Компьютерная инженерия — это отрасль, которая связана с производством компьютерных систем. При этом в компьютерную инженерию входят:

Что такое программная инженерия и кто такой программный инженер?

Компьютерная инженерия — что это?

проработку устанавливаемого программного обеспечения,

возможность усовершенствовать устройство,

вариации по мощности, производительности и комплектующим,

Компьютерная инженерия «продумывает»:

чтобы пользователи могли подключать к устройств у различное периферийное оборудование от разных производителей ;

чтобы пользователи могли устанавливать различные операционные систем ы и программное обеспечение ;

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

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

Если сравнить со строительством дома, тогда компьютерный инженер — это как архитектор-проектировщик. Архитектор-проектировщик не просто чертит план дома, но и указывает:

какие материалы для его строительства можно использовать ;

как реализовать вентиляцию и отопление ;

как в дальнейшем можно поменять планировку ;

мебель каких размеров можно будет использовать ;

в какие цвета можно все покрасить ;

На практик е к омпьютерная инженерия занимается:

проектирование м компьютерных устройств ;

написанием программного обеспечения и прошивок для спроектированных устройств ;

проектирование м микросхем ;

проектирование м плат ;

разработкой операционных систем для произведенных устройств ;

проектированием и исследованием в сфере робототехники ;

Заключение

В этой статье вы познакомились с двумя понятиями:

что такое программная инженерия,

что такое компьютерная инженерия.

Мы будем очень благодарны

если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.

Источник

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

Программная инженерия

Содержание

История

Методология в программной инженерии

С этого момента программирование «обрастает» дополнительными видами деятельности: разработкой требований, планированием, тестированием, конфигурационным управлением, проектным менеджментом, созданием различной документации (проектной, пользовательской и пр.). Разработка программного кода начинается анализом ( создание функциональной модели будущей системы без учета реализации, для осознания программистами требований и ожиданий заказчика ) и проектированием ( предварительный макет, эскиз, план системы на бумаге ). Все эти и другие дополнительные виды деятельности, выполняемые в процессе промышленного программирования и необходимые для успешного выполнения заказов и стали называть программной инженерией. Получается, что так обозначают, во-первых, некоторую практическую деятельность, а во-вторых, специальную область знания, другими словами, научную дисциплину. Для облегчения выполнения каждого отдельного проекта, для возможности использовать разнообразный положительный опыт, достигнутый другими командами и разработчиками, этот самый опыт подвергается осмыслению, обобщению и надлежащему оформлению. Так появились различные методы и практики (best practices) – тестирования, проектирования, работы над требованиями и пр., архитектурных шаблонов и пр., а также стандарты и методологии, касающиеся всего процесса в целом. Вот эти-то обобщения и входят в программную инженерию как в область знания. Таким образом методологии в программной инженерии являются одной из самых динамично развивающихся составляющих области знаний, т.к. несут в себе практическую составляющую.Современная классификация методологий управление проектом или моделей жизненного цикла проекта согласно SWEBOK выглядит следующим образом.

Традиционные методологии построены на последовательном выполнении всех фаз проекта и конечный продукт будет получен только после выполнения всех этапов. Возвращение на предыдущий этап не предусмотрено и при появлении критических ошибок весь проект начинается сначала. Основным примером является каскадная модель или модель Водопад. Источником принято считать статью Уинстона Ройса вышедшею в 1970 году. Он описывал эту модель как пример противопоставленный итеративной модели, применимый только для очень простых проектов и сам пользовался итеративными методологиями. Так же Ройс писал, что в особо сложных местах проекта и при применении новых, ранее не используемых технологий, промежуточные этапы можно повторить дважды и заказчик по окончанию проекта получает вторую версию продукта. Такой подход нельзя назвать итеративным, но и однозначно последовательным тоже. На начальном периоде она сыграла ведущую роль как метод регулярной разработки сложного ПО. В 70x — 80x годах XX века модель была принята как стандарт министерства обороны США. По мере развития методологий каскадная модель подвергалась жесткой критики со стороны всех исследователей, предлагавших свои методологии. Последовательное выполнение этапов разработки не дает изменить требования к программному продукту до самого релиза. Чем больше проект тем больше накапливается проблем в процессе проектирования. И реализация изменений в следующей версии продукта иногда становится не целесообразной. Продукт необходимо писать с 0. Таким образом стоимость работоспособной версии не оправдано сильно растет. А процент успешно завершенных проектов слишком мал. Однако, можно ли назвать традиционные методологии разработки отжившими свой век? Не совсем. Для проектов затрагивающих безопасность жизнедеятельности строго поставленные требования и высокая степень формализации является основополагающим и необходимым фактором. Кроме того, несмотря, на критику традиционной модели, она играет важную роль, потому что налагает на процесс разработки требование крайне необходимой для него дисциплинированности, с помощью которой удается благополучно обходить неструктурированные процессы. Данная модель внесла фундаментальный вклад в понимание процессов разработки ПО.

Спиральная модель стала следующим этапом развития методологий, поскольку она решает основную проблему традиционной модели. Каждая фаза традиционного процесса разработки в спиральной методологии завершается этапом прототипирования и управления рисками. Этап прототипирования после каждой фазы проекта позволяет определить, насколько текущее состояние проекта соответствует первоначальному плану. По итогам прототипирования выполняется либо переход к следующей фазе, либо возвращение на одну из предыдущих фаз. Однако фазы и последовательность фаз остаются линейными. Автором данной модели является Барри Боэм, опубликовавший в 1988 году статью «A Spiral Model of Software Development and Enhancement». Не смотря на то, что в SWEBOK данная модель выделена отдельно от итеративной, при описании моделей напрашивается вывод об отнесении спиральной методологии к семейству итеративных. Это обуславливается и возможностью изменения требований между этапами и выпуска прототипов продукта после каждого цикла. Возможно такое разделение связано с авторской принадлежностью методологий.

Итеративная модель предполагает разбиение жизненного цикла проекта на последовательность итераций, каждая из которых напоминает “мини-проект”, включая все фазы жизненного цикла в применении к созданию меньших фрагментов функциональности, по сравнению с проектом, в целом. Упоминания о данной методологии начали появляться задолго до статьи У. Ройса и появления самой программной инженерии. Истоки концепции итеративной разработки прослеживаются в относящихся к 30-м годам работах эксперта по проблемам качества продукции Уолтера Шеварта из Bell Labs. Важной вехой в истории является осуществленный в 50-е годы проект по разработке сверхзвукового реактивного самолета X-15. По мнению участников этих работ, применение данной методологии в значительной степени определило успех проекта. В настоящее время наиболее популярны гибкие методологии, они относятся именно к итеративным моделям ЖЦ. При описании любой из гибких методологий упоминается принцип разделения на итерации. Однако, особенность данных методологий это упор на человеческий фактор, а не на документацию проекта, что никак не обозначается в описании итеративной и инкрементной методологии. Гибкие методологии разработки начали появляться на фоне быстрорастущего усложнения технологий и всеобщей информатизации. Теперь заказчиком в большинстве случаев является лицо далекое от информационных технологий. Для такого заказчика главным является готовый продукт, а не фолианты документации. При экспоненциально растущем темпе развития информационных технологий сроки на разработку ПО сократились и стали жестче. Теперь нет времени на долгое планирование, написание документации и полновесное тестирование. Программный продукт может устареть еще до релиза. В противовес традиционным методологиям разработки итеративные методологии делят выполнение проекта на короткие итерации, ограниченные по времени. После каждой итерации заказчику продукта предоставляется результат. Предусмотрен откат на предыдущие итерации. Появление гибких методологий не привязано к конкретной дате, так как начиная с середины 90х годов начали появляться и внедряться практически параллельно. Это были методологии разработки такие как: Scrum (1995), экстремальное программирование (1996), Crystal Clear, Lean, Kanban и другие. Созданный в феврале 2001 года, Agile-манифест, провозгласил философию гибких методологий разработки и задал вектор развития данных методологий..

Отличие программной инженерии от информатики

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

Цель современной программной инженерии

Основная цель современных технологий программной инженерии состоит в обеспечении эффективности всего жизненного цикла комплексов программ для ЭВМ в различных проблемно-ориентированных областях. В понятие современной технологии включается совокупность методов и инструментальных средств автоматизации, а также технологические процессы, обеспечивающие жизненный цикл сложных ПС с заданными функциональными и конструктивными характеристиками качества. Для этого рекомендуется использовать наиболее эффективные и совершенные методы проектирования и проводить комплексную автоматизацию ЖЦ ПС. Целеустремленная деятельность разработчиков-поставщиков должна быть направлена на удовлетворение требований заказчиков и пользователей программных продуктов при их применении по прямому назначению. Эта деятельность регламентируется рядом методов и стандартов, которые являются компонентами технологического обеспечения сложных ПС в течение их жизненного цикла. Их применение предполагает высокую дисциплину коллектива специалистов, использование им методик, стандартов, типовых нормативных документов и средств автоматизации разработки, которые регламентируют порядок организации и проведения работ по выполнению технологических операций, направленных на получение, в имеющихся организационно-технических условиях, готового программного продукта с заданными функциями и качеством. [Источник 2]

Источник

Программная инженерия

Вы будете перенаправлены на Автор24

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

Определения терминов программной инженерии

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

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

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

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

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

Готовые работы на аналогичную тему

Основные составляющие программной инженерии

Основополагающими составляющими программной инженерии являются:

В ходе предварительного ознакомления и при уточнении задач перед началом создания продукта программный инженер ставит следующие вопросы и ищет на них ответы:

В ходе проведения тестирования возникают уже совершенно непохожие на ранее сформулированные вопросы с поиском ответов:

Цель и процессы программной инженерии

Из всего вышесказанного можно сделать вывод: программная инженерия непосредственно связана напрямую со всеми процессами жизненного цикла любого программного обеспечения.

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

Сам термин процесса программной инженерии («Software Engineering Process») может характеризоваться обсуждением, поиском и реализацией на практике реальных последовательностей действий по правильным и эффективным способам выполнения поставленных задач.

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

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

Источник

Кто ты по професии: Разница между «Programmer», «Software Engineer» и «Computer Scientist»

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

Меняется ли от этого суть работы? Мы в 1cloud попробовали разобраться в том, какую работу подразумевают такие специализации как «Programmer», «Software Engineer» и «Computer Scientist».

Терминология

Изучение сути вопроса логично начать с понимания терминов. Самым понятным является «Programmer», который в Оксфордском словаре определяется как человек, ответственный за написание программы. И с переводом все просто: программист – он и в Африке программист. И даже в России. Сложности начинаются дальше.

«Software Engineer» (SE) (согласно статье в webopedia) — это дипломированный профессиональный инженер, имеющий достаточно знаний и навыков для применения инженерных дисциплин при создании программного обеспечения. Главное отличие — SE занимается разработкой, руководством проектов, а программист их реализует путем написания кода. На русский название должности переводится как «инженер-программист» или просто «программист».

Теперь разберемся с тем, кто такой «Computer Scientist» (CS). Если верить словарю, то речь идет о работе в области теории вычислений и проектирования компьютеров. Разные словари дают разный перевод на русский: «учёный, работающий в области теории вычислительных машин и систем (в области ВТ, в области компьютерных наук)» или «программист».

Итого, имеем три очень разных определения в английском и три «программиста» в русском.

Как сами программисты понимают эту разницу

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

Для обеспечения полноценной разработки ПО/кода программист должен быть сконцентрирован на своей работе и обеспечить последующее использование и интеграцию программных компонентов друг с другом. Энтони Щерба (Anthony Scherba), президент и основатель студии разработки Yeti, сравнивает этот процесс с решением сложной алгебраической задачи.

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

Необязательные компетенции: математический анализ, коммуникативные навыки и умение работать в команде — подробнее в блоге Алана Скоркина (Alan Skorkin).

Работа «Software Engineer» подразумевает комплексный подход и иногда ее можно сравнить даже с процессом создания произведения искусства, которое программист старается постоянно усовершенствовать. Так считает и Дэниел Каплан (Daniel Kaplan), опытный программист и сотрудник Pivotal Labs.

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

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

«Computer Scientist» — математик и технический специалист в равной степени. Он обладает математическими знаниями и объясняет, как и почему работает тот или иной инструмент, решение или алгоритм. Его работа имеет большое значение для развития программирования в целом. Также CS свойственна специализация в одной или нескольких сферах — ИИ, нейронные сети, теория языков программирования, базы данных.

Представления профессионалов в принципе соотносятся со словарными статьями, что естественно: на то они и профессионалы, чтобы разбираться в своей работе. Сбой в коммуникации и подмена понятий явно происходит на каком-то другом уровне, но на каком?

Какую разницу видят учебные заведения и работодатели

Начнем опять с «программиста». Еще одно его важное отличие от всех остальных: как правило, отучившись в профильном ВУЗе, вчерашний студент становится не просто «программистом», а «инженером/бакалавром/магистром по специальности/направлению…».

Для западной образовательной системы это тоже характерно — взгляните, к примеру, на разнообразие специальностей в направлении «Software Development and Programming» Сиднейского Технологического Университета. Ни одна из них не содержит в своем названии слова «programmer» или «programming».

Нет, конечно, многие университеты предлагают курсы по программированию (даже бесплатные), но редко когда в дипломе написано просто «программист». А что хотят видеть работодатели?

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

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

Образовательные программы по профилю «Software Engineering» подразумевают, подход к разработке ПО с научной и инженерной точки зрения, разработку собственных проектов, аналитическую и управленческую деятельность. Помните, в предыдущем разделе эксперты говорили, что SE должен уметь реагировать на изменяющиеся требования? На магистерской программе помимо этого объясняют, как укладываться в бюджет и сроки.

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

Что касается точки зрения работодателей, то по их мнению в обязанности инженера-программиста входит написание кода, проверка технической реализации UI/UX, оптимизация работы приложений, разработка внутренней методологии и стандартов, контроль и управление требованиями. Кроме того, соискатель должен обладать лидерскими качествами. Технические требования не сильно отличаются от требований к «обычным» программистам: их примеры можно посмотреть тут: 1, 2 и 3.

Университетские программы по направлению «Computer Science» включают больше математических предметов, изучение теории алгоритмов, а также такие темы как машинное обучение, нейронные сети и облачные вычисления. Студенты изучают больше теории, но должны успешно применять на практике полученные математические знания, выявлять, формулировать и решать инженерные проблемы. Таким образом, у этого типа специалистов формируется наибольшая «широта взглядов» — в теории он может работать и программистом, и SE, и непосредственно по специальности.

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

Идеальный соискатель на должность «Computer Scientist» должен обладать знаниями по теоретической информатике, теории алгоритмов, проектированию баз данных, компьютерному моделированию, при необходимости выполнять задачи аналитика и проводить исследования, знать весь процесс от проектирования до внедрения ПО… Список можно продолжать долго (подробнее читайте тут и тут).

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

Что в итоге

Да, действительно программисты, SE и CS — специальности близкие, но не одинаковые, и готовят таких профессионалов на разных университетских специальностях. Наибольшую путаницу в трактовке терминов вносят работодатели – для них, например, разница между «программистом» и Software Engineer может быть совершенно не очевидна.

Судя по требованиям работодателей, от «просто программиста» ждут творческого подхода, универсальных знаний и soft skills, а «computer scientist» может решать важные, но при этом сугубо прикладные, узконаправленные задачи — говорить о том, что одна специальность «по умолчанию» лучше или «сильнее» другой тут не приходится.

О чем еще мы пишем в блоге 1cloud на Хабре:

Источник

Понравилась статья? Поделиться с друзьями:

Не пропустите наши новые статьи:

  • Программная инженерия что это за профессия
  • программная инженерия что это за профессия кем работать
  • Программная инженерия что это за профессия кем работать зарплата
  • Программная инженерия что сдавать
  • программная инженерия что изучают в вузах

  • Операционные системы и программное обеспечение
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии