
- •Введение
- •Жизненный цикл it-проекта
- •Концепция проекта
- •Определение проекта
- •Выполнение проекта
- •Завершение проекта
- •Стандарты жизненного цикла
- •Выбор методологии
- •Жесткие и гибкие методологии Модель водопада
- •Итеративная разработка
- •Спиральная модель
- •Архитектура Вычислительные системы
- •Операционные системы
- •Выбор языка и среды программирования
- •Краткий обзор распространенныхпромышленных языков программирования и программных платформ
- •Разработка программного обеспечения Парадигмы программирования
- •Структурное программирование
- •Процедурное программирование
- •Функциональное программирование
- •Событийно-ориентированное программирование
- •Объектно-ориентированное программирование
- •Аспектно-ориентированное программирование
- •Визуально-ориентированное программирование
- •Метапрограммирование
- •Качество кода. Критерии качества кода
- •Форматирование и оформление
- •Комментарии
- •Читаемость
- •Обработка исключений
- •Документирование
- •Рефакторинг
- •Архитектура программного обеспечения
- •Отличие архитектуры по от детального проектирования по
- •Примеры архитектурных стилей и моделей
- •Паттерны проектирования
- •Адаптер (adapter, wrapper)
- •Абстрактная фабрика (abstractfactory, kit)
- •Стратегия (strategy, policy)
- •Менеджмент Проекта
- •Проектный менеджмент
- •Команда менеджмента проекта Команды в проекте
- •Соотношение между различными командами в проекте
- •Цели кмп в проекте
- •Создание и развитие кмп Сущность и характеристики кмп
- •Управление трудовыми ресурсами проекта и менеджмент человеческих ресурсов проекта
- •Интегрированная культура кмп
- •Оценка деятельности кмп Что такое эффективная кмп?
- •Команда Менеджмента Проекта – критический фактор успеха проекта
- •Структура проекта Определение проекта
- •Основные признаки проекта
- •Направленность на достижение целей
- •Координированное выполнение взаимосвязанных действий
- •Ограниченная протяженность во времени
- •Уникальность
- •Структура проекта
- •Разработка программного обеспечения Виртуальная реальность
- •Виртуальная реальность в играх.
- •Виртуальная реальность и 3d.
- •История виртуальной реальности.
- •Что такое виртуальная реальность?
- •Миры с различными потенциально-возможными сценариями хода событий
- •Студии виртуальной реальности на телевидении
- •Имитационное моделирование
- •Искусственный интеллект
- •Предпосылки развития науки искусственного интеллекта
- •Подходы и направления
- •Тест Тьюринга
- •Символьный подход
- •Логический подход
- •Накопление и использование знаний
- •Суть процесса искусственного мышления
- •Применение
- •Перспективы
- •Искусственный интеллект в играх
- •Распределённые и облачные вычисления Распределённые вычисления
- •История
- •Участие в проектах распределенных вычислений Общая схема участия
- •Привлечение и мотивация участников
- •Критика проектов распределенных вычислений
- •Организации, участвующие в проектах распределенных вычислений
- •Список проектов распределённых вычислений
- •Биология и медицина
- •Математика и криптография
- •Естественные науки
- •По для организации распределённых вычислений
- •Облачные вычисления
- •Терминология
- •Критика
- •Примеры
- •Потребность
- •Внешние и внутренние облака
- •Стоимость
- •Надёжность
- •Проблемы облачных технологий
- •Нейронные сети
- •Возможные способы применения и реализации
- •Категории аппаратного обеспечения инс
- •Цифровое исполнение
- •Аналоговое исполнение
- •Гибридное исполнение
- •Области применения нейронных сетей
- •Аутсорсинг
- •Мировой рынок экспортного программирования
- •Прогноз развития мирового и российского рынка
- •Белорусскиекомпании
- •Типы аутсорсинга
- •Развитие cad технологий
- •Исправление ошибок
- •Системы старшего класса
- •Большие сборки
- •Зачем нужны сборки
- •Стратегии упрощения
- •Моделирование
- •Параметризация
- •Гибридное моделирование
- •Практические результаты
- •Проектная база: технология моделирования
- •Переход к гибридному моделированию
- •Электронная сборка
- •Модель акторов
- •История
- •Фундаментальные концепции
- •Формальные системы
- •Применения
- •Семантика передачи сообщений
- •Локальность
- •Безопасность
- •Актуальность в настоящий момент
- •Социальный компьютинг
- •Сферы применения
- •С чего начать
- •Тестирование программного обеспечения Уровни тестирования
- •Модульное тестирование
- •Интеграционное тестирование
- •Системы непрерывной интеграции
- •Системное тестирование программного обеспечения
- •Функциональное тестирование
- •Регрессионное тестирование
- •Виды тестов регрессии
- •Нагрузочное тестирование
- •Тестирование «белого ящика» и «чёрного ящика»
- •Серый ящик. Комбинация предыдущих.
- •Права автора Личные неимущественные права:
- •Личные имущественные права:
- •Способы защиты авторского права
- •Защита при помощи компьютерных компакт-дисков
- •Методы взлома/обхода технических мер защиты
- •Нарушение авторских прав
- •Типы лицензий
- •Проприетарные лицензии
- •Свободные и открытые лицензии
- •Пиратское по
- •Взгляд в будущее
- •Взлом информации и защита от взлома Классы атак Аутентификация (Authentication)
- •Авторизация (Authorization)
- •Атакинаклиентов (Client-side Attacks)
- •Выполнение кода (Command Execution)
- •Разглашение информации (Information Disclosure)
- •Логические атаки (Logical Attacks)
- •Компьютерные вирусы
- •Классификация вирусов
- •Антивирусные программы
- •Методы обнаружения вирусов
- •Метод соответствия определению вирусов в словаре
- •Метод обнаружения странного поведения программ
- •Метод обнаружения при помощи эмуляции
- •Метод «Белого списка»
- •Эвристический анализ
- •Классические hips
- •Экспертные hips
- •Жизненный цикл вируса.
- •Стратегии развития крупнейших it-компаний
- •Перспективы развития Microsoft
- •Секреты успеха
- •Крупнейшие производители современных операционных систем и их продукты
- •Основные заблуждения по поводу Macintosh
- •Технические подробности операционной системы
- •Причины успеха и будущее компании
- •История создания Linux
- •Свободное программное обеспечение
- •Графические интерфейсы Linux
- •Дистрибутивы Linux
- •Безопасность Linux
- •Краткая история FreeBsd и unix
- •Рождение системы bsd
- •Bsd на платформах Intel х86
- •Рождение FreeBsd
- •Преимущества FreeBsd
- •Различия между FreeBsd и Windows
- •Мобильные ос
Краткий обзор распространенныхпромышленных языков программирования и программных платформ
Java
Объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (ныне OracleCorporation). Создан на основе идеи WORA – WriteOnceRunAnywhere. Приложения Java компилируются в так называемый байт код. Это язык абстрактной вычислительной машины, он не является специфичным для какой-то одной аппаратной платформы. Инструкции байт-кода исполняются программой – Виртуальной Машиной Java (JavaVirtualMachine, JVM).
Результат такого подхода – приложение выполняется (причем идентично) на любой аппаратной и программной платформе, на которой установлена JVM. На сегодняшний день количество реализаций JVM под всевозможные платформы очень много и достаточно трудно произвести подсчеты общего количества.
Язык приобрел невероятную популярность и на данный момент является одним из самых востребованных (если не самым) в среде промышленного программирования 1.
Основная область применения – встраиваемые системы (JavaME), требовательные к масштабируемости и нагрузке веб- и enterprice- приложения (JavaEE) , мобильные системы на базе ОС Android.
Язык Java в разработке используют такие компании, как IBM, Google, E-Bay и многие другие.
Примерпрограммына Java:
1 (http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html)
C#
C# — это типизированный, объектно-ориентированный, простой и в то же время мощный язык программирования, который позволяет разработчикам создавать многофункциональные приложения. При использовании возможностей .NET Framework Visual C# 2008 позволяет создавать приложения Windows, веб-службы, инструменты, компоненты и элементы управления баз данных, а также многое другое 1 .
Создавался с оглядкой на язык Java и, как следствие, имеет некоторые унаследованные от него черты. Основная – компиляция исходных текстов приложения в так называемый промежуточный язык (MSIL – MicrosoftIntermediateLanguage), аналог байт-кода. Достигается платформенная независимость, но только в семействе ОС Windows - таковая политика компании Microsoft. Впрочем, активно разрабатывается OpenSource реализация платформы .NET и для *nix семейств ОС (т.н. Mono).
На данный момент является наиболее стремительно развивающимся языком. В попытке разработчиков языка «сделать хорошо всем и сразу» язык стал обладать очень объемным синтаксисом. Является ли такой подход правильным или нет? Время покажет. Однако число приверженцев этого языка огромно и продолжает расти.
Значительным плюсом данного языка является обширный инструментарий для разработки, документированность и наличие большого сообщества.
Основная область применения – разработка настольных и enterprise программ, веб-приложений (ASP.NET), мобильных приложений на базе WinPhone. В перспективе – программирование для Windows 8.
Пример программы на С#:
По мнению самой компании Microsoft (http://msdn.microsoft.com)
Ruby
Динамический, интерпретируемый, объектно-ориентированный open-source язык программирования с ориентацией на простоту и продуктивной работы. Имеет достаточно простой синтаксис.1
Вообще говоря, универсален в плане разработки приложений, однако наибольшую популярность приобрел благодаря фреймворку Rails для разработки веб-приложений. По этой же причине зачастую при упоминании языка Ruby подразумевают RubyonRails (или просто RoR).
Является интерпретируемым языком. В производительности проигрывает своим конкурентам в лице Java и C#, однако выигрывает в скорости разработки программ (в примере кода это будет видно).
На данный момент основной областью применения является разработка веб-приложений (пример – http://www.twitter.com).
Существуют реализации в виде JRuby – языка, который позволяет интегрировать код с Java.
Пример программы на Ruby:
(http://www.ruby-lang.org)
Python
Высокоуровневый язык программирования общего назначения с акцентом на производительность разработчика и читаемость кода.
Действительно, программы на языке Python настолько легко читаются, что во всем мире этот язык по праву считается одним из самых лучших в плане обучения программированию.
Однако, язык хорош не только своим синтаксисом, но и большим количеством библиотек и фреймворков.
Существуют различные реализации языка – Jython (реализация на Java), Cython (реализация на C), IronPython и т.д.
Достаточно популярен в разработке небольших программ, используется в веб-программировании – Django. Так же как и Ruby делает акцент не на скорости выполнения программы, но на скорости ее разработки.
Пример программы на Python:
PHP
Интерпретируемый язык программирования общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков программирования, применяющихся для создания динамических веб-сайтов.
Хотя и утверждается, что на php можно разрабатывать и настольные приложения, это скорее теория, чем данность. Основная (и по совместительству единственная) область применения – веб-приложения. Впрочем, этот язык настолько широко распространен в среде разработки веб-сайтов, что даже породил изрядную долю юмора в сторону php-программистов по поводу их зарплаты (которая, разумеется, зачастую невысокая по сравнению с программистами на других языках из-за огромного количества самих php-программистов).
Очень простой в освоении. К сожалению, разработка фреймворков и библиотек к этому языку не была ограничена практически никакими стандартами даже в плане оформления кода, а низкий порог вхождения обеспечил массу неквалифицированных кодировщиков.
Тем не менее, как язык сам по себе, является отличным инструментом для веб-разработки.
Яркий тому пример – http://www.facebook.com.
Пример программы на PHP:
Scala
Мультипарадигмальный язык программирования, спроектированный кратким и типобезопасным для простого и быстрого программирования. В нем органично сочетаются возможности функционального и объектно-ориентированного программирования. Основной целью разработки был язык, обладающий хорошей поддержкой компонентного ПО.
Стремительно набирает популярность, в основном по совокупности двух причин:
Достаточно прост в использовании.
Реализован как для платформы Java, так и для платформы .NET.
Не так давно стало известно, что разработчики http://www.twitter.comнамерены переписать всю логику с Ruby на Scala.
Пример программы на Scala:
C++
С++
Компилируемый, статически типизированный язык программирования общего назначения. Поддерживая разные парадигмы программирования, сочетает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником — языком C, — наибольшее внимание уделено поддержке объектно-ориентированного и обобщённого программирования. Название «C++» происходит от названия языка C, в котором унарный оператор ++ обозначает инкремент переменной.
C++ оказал огромное влияние на другие языки программирования, в первую очередь на Java и C# (которые относятся к семейству языков с так называемым C-образным синтаксисом).
Возможности как низкоуровневого, так и высокоуровневого программирования делают его очень мощным инструментом, с которым, однако, следует обращаться очень аккуратно. Имеет высокий порог вхождения (впрочем, востребован и оплачивается соответственно).
Область применения – практически всё, что угодно, связанное с разработкой ПО, однако скорость разработки наихудшая из всех представленных здесь языков.
Пример программы на С++:
В заключение заметим, что с профессиональной точки зрения не так важно на каком языке и в какой среде работает программист, сколько как он выполняет свою работу. Меняется аппаратура и операционные системы. Возникают новые задачи из самых различных предметных областей. Уходят в прошлое и появляются новые языки. Но остаются люди - те, кто пишет и те, для кого пишут новые программы и чьи требования к качеству остаются теми же вне зависимости от этих изменений.