Какие технологии разработки программ используются в современном программировании

Накопленный к настоящему времени опыт создания систем ПО показывает, что это сложная и трудоемкая работа, требующая высокой квалификации участвующих в ней специалистов. Однако до настоящего времени создание таких систем нередко выполняется на интуитивном уровне с применением неформализованных методов, основанных на искусстве, практическом опыте, экспертных оценках и дорогостоящих экспериментальных проверках качества функционирования ПО. По данным Института программной инженерии (Software Engineering Institute, SEI) в последние годы до 80% всего эксплуатируемого ПО разрабатывалось вообще без использования какой-либо дисциплины проектирования, методом «code and fix» (кодирования и исправления ошибок).

Проблемы создания ПО следуют из его свойств. Еще в 1975 г. Фредерик Брукс, проанализировав свой уникальный по тем временам опыт руководства крупнейшим проектом разработки операционной системы OS/360, определил перечень неотъемлемых свойств ПО: сложность, согласованность, изменяемость и незримость [1]. Что же касается современных крупномасштабных проектов ПО, то они характеризуются, как правило, следующими особенностями:

Учить/Не учить. Вся База Программирования.

Характеристики объекта внедрения:

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

Технические характеристики проектов создания ПО:

  • различная степень унифицированности проектных решений в рамках одного проекта;
  • высокая техническая сложность, определяемая наличием совокупности тесно взаимодействующих компонентов (подсистем), имеющих свои локальные задачи и цели функционирования (транзакционных приложений, предъявляющих повышенные требования к надежности, безопасности и производительности, и приложений аналитической обработки (систем поддержки принятия решений), использующих нерегламентированные запросы к данным большого объема);
  • отсутствие полных аналогов, ограничивающее возможность использования каких-либо типовых проектных решений и прикладных систем, высокая доля вновь разрабатываемого ПО;
  • большое количество и высокая стоимость унаследованных приложений (существующего прикладного ПО), функционирующих в различной среде (персональные компьютеры, миникомпьютеры, мэйнфреймы), необходимость интеграции унаследованных и вновь разрабатываемых приложений;
  • большое количество локальных объектов внедрения, территориально распределенная и неоднородная среда функционирования (СУБД, операционные системы, аппаратные платформы);
  • большое количество внешних взаимодействующих систем различных организаций с различными форматами обмена информацией (налоговая служба, налоговая полиция, Госстандарт, Госкомстат, Министерство финансов, МВД, местная администрация).

Организационные характеристики проектов создания ПО:

Какие технологии используется в Web разработке, как стать разработчиком сайтов

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

В конце 60-х годов прошлого века в США было отмечено явление под названием «software crisis» (кризис ПО). Это выражалось в том, что большие проекты стали выполняться с отставанием от графика или с превышением сметы расходов, разработанный продукт не обладал требуемыми функциональными возможностями, производительность его была низка, качество получаемого программного обеспечения не устраивало потребителей.

Аналитические исследования и обзоры, выполняемые в течение ряда последних лет ведущими зарубежными аналитиками, показывали не слишком обнадеживающие результаты. Так, например, результаты исследований, выполненных в 1995 году компанией Standish Group, которая проанализировала работу 364 американских корпораций и итоги выполнения более 23 тысяч проектов, связанных с разработкой ПО, выглядели следующим образом:

  • только 16,2% завершились в срок, не превысили запланированный бюджет и реализовали все требуемые функции и возможности;
  • 52,7% проектов завершились с опозданием, расходы превысили запланированный бюджет, требуемые функции не были реализованы в полном объеме;
  • 31,1% проектов были аннулированы до завершения;
  • для двух последних категорий проектов бюджет среднего проекта оказался превышенным на 89%, а срок выполнения — на 122%.

В 1998 году процентное соотношение трех перечисленных категорий проектов лишь немного изменилось в лучшую сторону (26%, 46% и 28% соответственно).

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

В числе причин возможных неудач, по мнению разработчиков, фигурируют:

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

Объективная потребность контролировать процесс разработки сложных систем ПО, прогнозировать и гарантировать стоимость разработки, сроки и качество результатов привела в конце 60-х годов прошлого века к необходимости перехода от кустарных к индустриальным способам создания ПО и появлению совокупности инженерных методов и средств создания ПО, объединенных общим названием «программная инженерия» (software engineering). В основе программной инженерии лежит одна фундаментальная идея: проектирование ПО является формальным процессом, который можно изучать и совершенствовать. Освоение и правильное применение методов и средств создания ПО позволяет повысить его качество, обеспечить управляемость процесса проектирования ПО и увеличить срок его жизни.

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

Невозможно достичь удовлетворительных результатов от применения даже самых совершенных технологий и инструментальных средств, если они применяются бессистемно, разработчики не обладают необходимой квалификацией для работы с ними, и сам проект выполняется и управляется хаотически, в режиме «тушения пожара». Бессистемное применение технологий создания ПО (ТС ПО), в свою очередь, порождает разочарование в используемых методах и средствах (анализ мнений разработчиков показывает, что среди факторов, влияющих на эффективность создания ПО, используемым методам и средствам придается гораздо меньшее значение, чем квалификации и опыту разработчиков). Если в таких условиях отдельные проекты завершаются успешно, то этот успех достигается за счет героических усилий фанатично настроенного коллектива разработчиков. Постоянное повышение качества создаваемого ПО и снижение его стоимости может быть обеспечено только при условии достижения организацией необходимой технологической зрелости, создании эффективной инфраструктуры как в сфере разработки ПО, так и в управлении проектами. В соответствии с моделью SEI СММ (Capability Maturity Model), в хорошо подготовленной (зрелой) организации персонал обладает технологией и инструментарием оценки качества процессов создания ПО на протяжении всего жизненного цикла ПО и на уровне всей организации.

Одна из причин распространенности «хаотического» процесса создания ПО — стремление сэкономить на стадии разработки, не затрачивая времени и средств на обучение разработчиков и внедрение технологического процесса создания ПО. Эти затраты до недавнего времени были довольно значительными и составляли, по различным оценкам (в частности, Gartner Group), более $100 тыс. и около трех лет на внедрение развитой ТС ПО, охватывающей большинство процессов жизненного цикла ПО, в многочисленной команде разработчиков (до 100 чел.). Причина — в «тяжести» технологических процессов. «Тяжелый» процесс обладает следующими особенностями:

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

Альтернативой «тяжелому» процессу является адаптивный (гибкий) процесс, основанный на принципах «быстрой разработки ПО», интенсивно развиваемых в последнее десятилетие.

В начале 2001 года века ряд ведущих специалистов в области программной инженерии (Алистер Коберн, Мартин Фаулер, Джим Хайсмит, Кент Бек и другие) сформировали группу под названием Agile Alliance. Слово agile (быстрый, ловкий, стремительный) отражало в целом их подход к разработке ПО, основанный на богатом опыте участия в разнообразных проектах в течение многих лет. Этот подход под названием «Быстрая разработка ПО» (Agile software development) [10] базируется на четырех идеях, сформулированных ими в документе «Манифест быстрой разработки ПО» (Agile Alliance’s Manifesto) и заключающихся в следующем:

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

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

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

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

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

  • C — дефекты вызывают потерю удобства;
  • D — дефекты вызывают потерю возместимых средств (материальных или финансовых);
  • E — дефекты вызывают потерю невозместимых средств;
  • L — дефекты создают угрозу человеческой жизни.

Масштаб определяется количеством разработчиков, участвующих в проекте:

  • от 1 до 6 человек — малый масштаб;
  • от 6 до 20 человек — средний масштаб;
  • свыше 20 человек — большой масштаб.

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

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

Одним из наиболее известных примеров практической реализации подхода быстрой разработки ПО является «Экстремальное программирование» (Extreme Programming — XP) [10]. Этот метод предназначен для небольших компактных команд, нацеленных на получение как можно более высокого качества и продуктивности, и достигает этого посредством насыщенной, неформальной коммуникации, придания на персональном уровне особого значения умению и навыкам, дисциплине и пониманию, сводя к минимуму все промежуточные рабочие продукты.

Источник: citforum.ru

Технологии программирования

Основы программирования 2.0

Для начала разберёмся с тем, что такое технология. Постараюсь изъясняться простым языком, пусть даже это будет не очень точно. Зато понятно.

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

Технологии программирования — это способы создания программ. Эти способы включают в себя как определённые знания (например, знание языка программирования), так и определённые инструменты (например, средства разработки программ).

Технологии программирования

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

Различают также технологию программирования и методологию программирования. Но мы в эти дебри лезть не будем — оставим это удовольствие лютым теоретикам.

Развитие технологий программирования

Развитие технологий программирования — это эволюция способов разработки программ. Эту эволюцию можно разбить на следующие этапы (на текущий момент — в будущем может быть придумают что-то ещё):

  1. Стихийное программирование. То есть “как Бог даст”, как получится. Можно сказать, что на этом этапе какие-либо технологии отсутствовали. На этом этапе случился переход от машинных кодов к ассемблерам. А затем к алгоритмическим языкам программирования. На этом этапе обычно сначала создавали кучу подпрограмм, а потом пытались объединить их в одну программу. Первое время это удавалось. Но по мере усложнения задач, решать их в разумные сроки становилось всё труднее. Поэтому возникла необходимость перехода на второй этап.
  2. Структурное программирование. Появились структурированные языки программирования. Изначально Паскаль был именно таким языком. А язык С, можно сказать, таким языком и остался. Структурный подход представлял собой технологию, когда большая задача разбивалась на несколько относительно небольших, и представлялась в виде некой иерархической (древовидной) структуры.
  3. Модульное программирование. Эта технология рождалась почти одновременно со структурным программированием. Идея заключалась в том, чтобы разбивать программы на модули. В модули включали подпрограммы, близкие по своему назначению.
  4. Объектно-ориентированное программирование (ООП). Технология объектно-ориентированного программирования — это уже современный подход, хотя начиналось это ещё с середины 80-х годов 20-го века. Суть ООП заключается в представлении программы в виде совокупности объектов. Каждый из объектов имеет свои свойства (характеристики) и методы (функции). При этом программисту часто не обязательно знать, как устроен объект. Достаточно только общего описания свойств и методов. Объектно-ориентированные языки программирования — это С++, Object Pascal, Delphi и т.п.
  5. Компонентый подход и CASE-технологии. Развиваются с середины 90-х прошлого столетия. Программы создаются из отдельных компонентов. Большинство из этих компонентов уже имеются в средствах разработки. CASE-технологии позволяют не только создавать, но и сопровождать программное обеспечение от “рождения до смерти”, то есть на всём жизненном цикле ПО. Компонентный подход в совокупности с ООП на сегодняшний день и является наиболее используемой технологией программирования.

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

Например, к компонентным технологиям можно отнести технологию OLE, разработанную всем известной компанией Microsoft. И к ним же можно отнести технологию CORBA.

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

И в каждом из этих видов есть немало конкретных технологий, таких как OLE, API или .NET. Так что тема эта очень обширная и очень интересная. Как говорится — не переключайтесь ))))

А мы прервёмся на короткую рекламу )))

Источник: info-master.su

Лучшие тренды и технологии в программировании

Лучшие тренды и технологии в программировании

Технологический прогресс усиливается и вводятся технологии для упрощения жизни и работы программиста. Мы расскажем про лучшие тренды в программировании.

Изучение современных трендов и технологий – это прямая обязанность хорошего программиста, так как это поможет всегда быть наплаву и хорошо маневрировать в активном ритме жизни. Такая информация сделает программиста более развитым, а соответственно востребованным, как следствие – высокооплачиваемым. Статья содержит ТОП-7 лучших трендов и направлений в сфере программирования.

Новый подход от Apple — Swift

С недавних пор Apple вывела Swift за пределы собственного применения и открыла доступ для изучения всем желающим. С 2015 года язык может изменяться и дополняться поместно. С того момента язык превратился в хит для всех разработчиков на платформе iOS и MacOS благодаря повышенному уровню безопасности (ближайшие конкуренты — C++ и Objective-C ). Пока достоверно не известно насколько Swift сможет ужиться в жестком мире JavaScript -фреймворков, а также остальных языков. Прогноз многообещающий, так как в сфере Apple популярность возрастает и в скором времени ему не будет равных, этот фактор позволяет делать ставку на язык в сфере крупного программирования.

Читайте также:
Андроид установка программ разрешение

Повсюду лишь контейнеры и программисты

Разработаны сервисы на подобии Docker и Packer , которые стали полезны разработчикам благодаря оперативному созданию и дублированию контейнеров с софтом – запуск, инструменты системы, библиотеки и т.д. для любой среды разработки. Благодаря сервисам упрощается и ускоряется создание прототипа проекта.

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

  • Vagrant – отличается простым интерфейсом и широкими возможностями настройки;
  • Chef , Puppet и Ansible – способствуют работе с конфигурацией управления;
  • Go приобретает популярность благодаря доступности и элеметарности использования контейнеров.

Большая потребность в языках благодаря ИИ

Влияние искусственного интеллекта на разработку программ и программирование постепенно усиливается. Алгоритмы работы компьютера, манипуляции на уровне человеческого языка, функция распознания речи, обучение на машинном или глубинном уровне и многое другое – это результат внедрения ИИ .

2016 год для Amazon отметился созданием помощника для дома – Alexa, который поддерживает голосовое управление. Для компании цель показалась достигнутой, так Amazon выразила предложения использования интерфейса для других корпораций. Сегодня приложение можно встретить в устройстве бытовой техники, Wi-Fi маршрутизаторов , вплоть до увлажнителей воздуха.

Формирование ИИ требует задействование многочисленных фреймворков, среди известных предложений от Google – OpenAI , TensorFlow .

Для программирования ИИ приходится задействовать множественные фреймворки, а наибольшую популярность приобрёл Apache Spark. Рынок открыт для внедрения новых игроков и продуктов от них, например, Neon или Theano – это разработки Nervana Systems , теперь ставшей частью корпорации Intel.

Нельзя отрицать влияние искусственного интеллекта на ландшафт и поведение рынка программирования. В связи с этим многие разработчики занялись изучением Python , по причине наилучшего соединения функционала языка и требований ИИ. Трендовыми языками признаны Java , R и Scala .

Стандарт ECMAScript задает свой тренд

Летом 2015 года была выпущена версия 6 встраиваемого языка программирования ES6 , а также JavaScript/ECMAScript . В следующем году технология была установлена и принята, хотя до этого стандарты не изменялись 7 лет.

Большинство ключевых браузеров и Node.js (платформа на основании JavaScript, изготовленная на основании открытого кода источника) более чем на 90% совмещаются с ES6. Сегодня синтаксис в ECMAScript встречается за пределами программирования систем с низким уровнем и утилит для внутреннего использования. Часть внешних систем, которые ориентируются на взаимодействие с пользователем также разрабатываются с учетом технологии. Ещё до введения внутренних стайлгайдов был внедрён ES6 у известных компаний Google и Airbnb.

Частично платформы остаются на более старой технологии JavaScript, так как она имеет повсеместное распространение. Для использования возможностей ES6 сегодня разработаны специальные транспалеры, способные к конвертации кода в устаревший синтаксис. Нельзя говорить, что JavaScript отомрёт в один момент, но лучше удостовериться в совместимости платформы с современным стандартом.

Бэкенд на основе BaaS

Ожидания, возлагаемые на 2016 год, оправдались и сильно возросла востребованность в использовании бекэнда в качестве сервиса ( BaaS ). Сегодня задачи, которые выполняются повседневно и имеют приблизительно одинаковые механизмы хранения на серверах облачных-сервисов, а также настройки уведомлений, присылаемые в push , изначально пересылаются на сторонние ресурсы. Благодаря методике удаётся достичь максимальной концентрации на необходимостях проекта с профильной точки зрения.

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

Java 8 vs Java (JVM)

Продолжительный период разработчики использовали языки JVM, например, Clojure и Scala вследствие недостатка функциональности Java и накладывания границ на объектно-ориентированный подход. Из-за всплеска востребованности Apache Spark было замечено кратковременное возрастание заинтересованности Scala. Сегодня JVM-языки могут полностью отмереть по причине ввода технологии Java 8. Современная версия содержит ключевой компонент для программирования по функциональному подходу – лямбда-выражения, способные упростить задачи, связанные с параллелизмом. Каждый год проходит съезд OSCON , так в текущем году речь о Clojure и Scala даже вестись не планируется, так как спикеров с необходимым интересом к языкам просто не нашли.

Языки, набирающие популяртность

  • Rust – это высокоскоростное программирование систематическим методом с приемлемым уровнем безопасности;
  • Elixir – это функциональный, активно развивающийся и стабильный язык, в процессе масштабирования, возникновение неисправностей является редкостью;
  • Elm – это простой и доступный язык, разработанный преимущественно для веба. Сравнивая с JavaScript Elm более фановый;
  • Kotlin – это язык с высоким уровнем безопасности и с встроенной статической типизацией. Отличительной особенностью является совместимость с Java и JVM;
  • Perl 6 – это перспективный язык с заложенным значительным потенциалом. Весьма выраженная позиция делает его успешным.

Больше интересных новостей

Искусственный интеллект: чего ожидать в 2023 году

Искусственный интеллект: чего ожидать в 2023 году

Chrome стал наиболее уязвимым браузером 2022 года

Chrome стал наиболее уязвимым браузером 2022 года

Почему Python отлично подходит для начинающих?

Почему Python отлично подходит для начинающих?

Даркнет: продажа конфиденциальной информации?

Даркнет: продажа конфиденциальной информации?

Источник: itproger.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru