Специальность «программная инженерия» (бакалавриат)

Design patterns

Шаблоны проектирования являются более высоким уровнем абстракции после структур данных и алгоритмов и представляют собой устоявшиеся подходы к решению общих проблем проектирования системы. Основной плюс знания шаблонов проектирования — возможность общаться с коллегами на одном языке в разрезе подходов к решению той или иной проблемы проектирования. Однако следует понимать, что использование шаблона в коде ради шаблона является worst practice. Здесь необходимо знать:

  • GoF patterns (singleton, prototype, …)

  • J2EE patterns (intercepting filter, context object, …)

  • Architectural pattens (layed pattern, client-server pattern, …)

Два основных мифа о профессии

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

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

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

Быстрый осмотр пациента

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

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

Преимущества и недостатки профессии

Как и любая другая профессия, множество недостатков и преимуществ содержит в себе и программная инженерия. Что это за профессия? Открытие системы, которая получила соответствующее наименование, произошло совсем недавно. И все же, основные плюсы и минусы рассматриваемой специальности очень четко можно проследить уже сейчас. О том, чего же все-таки больше — преимуществ или недостатков, будет рассказано далее.

Стоит начать с преимуществ профессии. К ним относятся:

  • Хорошая заработная плата. Конечно же, все зависит от предприятия, региона, и даже государства. Например, в европейских странах качественный специалист в сфере программной инженерии получает около 10 тыс. $, в России — от 25 тыс. до 60 тыс. рублей.
  • Высокая востребованность. Как минимум, на протяжении еще пары десятков лет сфера программной инженерии останется очень востребованной. Выпускники ВУЗов смогут с легкостью найти себе рабочее место.
  • Творческая составляющая в профессии. Этот пункт для некоторых людей, наверное, самый важный. Ведь действительно: что может быть лучше работы, в которой можно проявить себя с самой положительной стороны?

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

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

Таким образом, программная инженерия — это престижная, высокооплачиваемая, и, самое важное, очень интересная работа

Предметы по выбору

Третья, но тоже важная часть — дополнительные предметы. Темы специфичные, всем подряд скорее не нужны, но заинтересованные студенты могут попробовать их на вкус. На старших курсах таких предметов большинство: база есть, остаётся расширять кругозор в интересном студенту направлении. Взять все предметы, к сожалению, физически не хватает времени. Иногда набор курсов меняется, вот те, которые предлагались мне:

Альтернативные языки для JVM. Курс из двух модулей: в одном рассказывают про Kotlin, в другом — про Scala. Для Kotlin разбираем и Java interop, и написание своих DSL, и корутины. Последняя опциональная домашка — добавить в интерпретатор игрушечного языка (написанный в предыдущих домашках) отладчик при помощи корутин. Что же касается Scala… Язык большой, но implicit’ы всех видов разобрать успеваем 🙂

Программирование в ядре Linux. Шаг за шагом разрабатывается модуль ядра, который эмулирует виртуальное устройство хранения данных: mmap, буферы, конкурентный доступ, неблокирующий ввод-вывод. По дороге можно вспомнить прерывания и вытесняющую многозадачность из курса операционных систем и изучить внутренние структуры Linux (например, wait queue).

Компиляторы. Пишем свой компилятор микроязыка на OCaml. Промежуточная стековая машина, компиляция в x86 без всякого LLVM, интеграция с libc. Удивлённые возгласы студентов «почему у меня падает только на выражении длины сто?» (вероятно, потому что баг в аллокации регистров). Кстати, похожий курс тоже есть в Computer Science Center.

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

Построение СУБД. Внутреннее устройство баз данных. Всякие алгоритмы соединений, формальные модели, колоночные СУБД. На практике можно реализовать несколько алгоритмов поблочной обработки в игрушечной СУБД на плюсах (например, doublу-pipelined hash join).

Контейнерная виртуализация. Детальное изучение контейнеров в Linux. Namespaces и cgroups, скажем — и API, и как устроено. Всякие вспомогательные инструменты для сети. В процессе пишем свой контейнер вроде Docker, а это не так просто — надо корректно ограничить кучу всего, настроить сеть, пробросить в контейнер нужные файлы… Впрочем, высокоуровневая оркестрация на примере Kubernetes тоже рассматривается.

Обязанности программного инженера

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

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

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

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

Что это за профессия, где на одного работника ложится столько функций? Многих людей мучает именно этот вопрос, а также проблема трудоустройства. Об этом и пойдет речь далее.

Обучение профессии

В настоящее время все больше молодых людей решают пройти обучение по специальности «программная инженерия».

Что это за работа, считающаяся одной из самых актуальных и востребованных? Именно этим вопросом задается почти каждый человек, желающий освоить рассматриваемую профессию. Конечно же, получить должное для работы образование будет не так уж и просто. Обо всех тонкостях обучения специальности «программная инженерия» будет рассказано далее.

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

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

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

Довольно много неясных моментов содержит в себе программная инженерия. Что это за профессия? Кем можно работать? Насколько эта сфера престижна? На большинство из представленных вопросов будут даны ответы при получении должного образования.

Власть

Институт инженерии программного обеспечения Карнеги-Меллона — это финансируемый из федерального бюджета центр исследований и разработок со штаб-квартирой в кампусе Университета Карнеги-Меллона в Питтсбурге , штат Пенсильвания , США . SEI также имеет офисы в Вашингтоне, округ Колумбия, и Лос-Анджелесе , штат Калифорния . SEI работает при основном финансировании Министерства обороны США . SEI также работает с промышленностью и академическими кругами в рамках сотрудничества в области исследований.

14 ноября 1984 г. Министерство обороны США выбрало Университет Карнеги-Меллона местом размещения Института программной инженерии. Институт был основан с первоначальным выделением 6 миллионов долларов, еще 97 миллионов долларов будут выделены в последующие пять лет. Контракт SEI с Министерством обороны подлежит пересмотру и продлению каждые пять лет.

Программа работы SEI проводится в нескольких основных областях: кибербезопасность, обеспечение безопасности программного обеспечения , разработка и приобретение программного обеспечения , а также возможности компонентов, критически важных для Министерства обороны.

Должностные обязанности

Рассмотрим подробно, что входит в компетенцию инженера-программиста, на каких предприятиях он востребован и какие навыки делают его высококвалифицированным работником. Обычно должностные обязанности таких специалистов различаются в зависимости от типа компании или предприятия. В одних организациях инженер-программист создает особые управляющие программы для станков с ЧПУ (числовым программным управлением). Их разработка требует особых навыков в программной инженерии. На других предприятиях его деятельность связана с разработкой и тестированием программного обеспечения.

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

Кроме того, данная инструкция предусматривает:

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

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

  • Самый начальный уровень – стажер, это новичок в данной профессии, который ни за что не отвечает и только учится у более опытных сотрудников.
  • Младший программист – обладает уровнем знаний, достаточным для решения несложных задач. Результат его работы также проверяется старшими коллегами.
  • Программист – имеет хороший опыт разработок, способен самостоятельно справляться практически с любым заданием. Отвечает за проверку результатов работы младших сотрудников, а также за реализацию своих проектов.
  • Старший программист, Ведущий программист – самые высокие уровни специалистов профессии «инженер-программист», оба глубоко знают несколько языков программирования, принимают ключевые решения о технологиях разработки. Однако Старший программист больше специализируется на технических моментах, например, на разработке кода, а Ведущий программист, кроме всего прочего, еще занимается управлением коллективом и общается с заказчиками.

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

Созданы специальные инструкции по охране труда, их основные положения таковы:

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

Особенности профессий

Технология 3D-печати позволяет создавать уникальные изделия, которые используются в медицине и промышленности. Специалистов, которые желают освоить эту профессию, пока мало. Зато появилось множество молодых и развивающихся компаний, которые занимаются строительством с помощью 3D-технологий.

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

  • протезы;
  • анатомические и архитектурные модели;
  • искусственную человеческую кожу и органы;
  • сувениры для дома.

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

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

Практики

Вторая важная часть обучения — практики. С первого же курса студент делает какие-нибудь практически полезные задачи под руководством опытного коллеги. Например, очередное приложение для управления календарём или заметками. Или новая функциональность в существующем приложении. Или изучает сложность вычислимости какого-нибудь семейства формул, если его занесло в направление Computer Science.

На первых курсах мы не требуем новизны или практичности (всё-таки цель — дать поиграться), однако к диплому требования к качеству проектов и защиты повышаются

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

А вот «там жёсткие диски умирают каждую секунду, поэтому вот такой open-source не подходит, вот эта статья чисто теоретическая, а вот у Google решение есть, но закрытое» — вполне. Защитить ненужное упражнение со второго курса в качестве диплома не выйдет — на защите (и некоторых предзащитах) сидят любопытные разработчики с ноутбуками и гуглом наготове. «Такого ещё никто не делал» — практически самое опасное, что можно произнести. Кстати, защищаем не только дипломы, но и практики, регулярно с первого курса.

Вот несколько фотографий с типичной защиты. Фотограф: Дима Дроздов.

Практики позволяют научиться работать «в долгую» с большими проектами, иногда частично написанными другими разработчиками. Не всегда можно угадать с темой проекта: скажем, попробовав низкоуровневую разработку студент может заречься заниматься ей в будущем. В этом и смысл практик: понять, что нравится, а что нет, не на работе, а в условиях со ставками поменьше. Хотя последняя практика должна перерасти в содержательный бакалаврский диплом. «Содержательный» — это когда по диплому можно как минимум написать статью на Хабр и не уйти в минуса. Или, если работа совсем хороша, опубликоваться в научном журнале, выступить на конференции или хотя бы собрать плюсов.

Карьерный рост

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

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

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

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

Стажеры начинают работать под контролем опытных специалистов. Они продолжают обучаться своей профессии, приобретают новые знания и навыки. За своевременное выполнение обязанностей, инициативность и творческие идеи они получают повышение. А через несколько лет работы и сами начинают обучать стажеров.

Минимальная зарплата проектировщиков составляет 25 000 рублей даже в небольших поселках. Это высокооплачиваемая профессия, но она требует много знаний и опыта. В Москве и других крупных городах доход может достигать 100 000 р., столько могут получать руководители отделов по 3D-дизайну и строительству.

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

Обязанности специалиста

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

Основные обязанности:

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

Специалист не только строит 3D-модели, но и следит за строительством реальных объектов на их основе. Он строго контролирует все этапы трехмерного проектирования, чтобы никто из команды не допустил ошибок.

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

Уровни квалификации тестировщиков

Trainee

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

Junior QA Engineer

Младший специалист с опытом работы от 1 до 8 месяцев. Он примерно понимает, что такое тест-план, тест-кейс, тест-сьют, тест-степ, тест-дизайн, Definition of Done. Junior QA Engineer имеет представление о дефектах Severity и Priority, также обладает базовыми навыками работы с SQL.

Middle QA Engineer

Уверенный среднячок с опытом работы до 3-4 лет. Мидл тестировщик умеет работать самостоятельно, может обучать Trainee и Junior. 

Senior QA Engineer

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

QA Team Lead 

Ведущий QA-тестер, который отлично разбирается в технической стороне тестирования и умеет работать с командой. Он принимает участие в написании технической документации, набирает людей в команду проекта, координирует и контролирует её. 

QA Functional Manager

Функциональный менеджер управляет тестированием конкретного проекта и командой тестировщиков.

Если сильнее углубиться в профессию QA Engineer, можно выделить у тестировщиков несколько разновидностей:

  • Automation QA Engineer. QA-автоматизатор делает тесты по скриптам для автоматизации тестирования. 
  • Manual QA Engineer. Выполняет тестирование вручную. Он не пользуется программами, а самостоятельно воспроизводит все действия, которые будет делать пользователь в приложении. 
  • Quality Control Specialist. QC-специалист проводит анализ результатов тестов и следит за выявлением и удалением багов в приложении.

Критика

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

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

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

Эдсгер Дейкстра , основатель многих концепций, используемых в настоящее время в разработке программного обеспечения, отвергал идею «программной инженерии» вплоть до своей смерти в 2002 году, утверждая, что эти термины являются плохой аналогией того, что он называл «радикальной новизной» информатики. :

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector