В данной статье собрана краткая информация о том, что должен знать IT-специалист: парадигмы программирования, шаблоны проектирования, тестирование, технологии разработки и многое другое.
Основное для IT-специалиста
- Английский язык
- Архитектура компьютерных систем
- Алгоритмизация и структуры данных
- Математика (алгебра/геометрия): математический анализ, теория вероятности и математическая статистика, дискретная математика, теория чисел, линейная алгебра, численные методы etc
- Технологии разработки программного обеспечения
- Методологии: Waterfall, Scrum, MSF, RUP, Agile, Kanban, XP, TDD, BDD
- Парадигмы программирования
- Шаблоны (паттерны) проектирования
- Безопасность информационных систем
- Методики тестирования программного обеспечения
- Основы эргономики (юзабилити)
- Используемый язык программирования
- Возможности используемых средств разработки
- Знание предметной области
Языки программирования
- Объектно-ориентированные: C#, C++, Java
- Языки разметки: HTML, CSS
- Веб-программирование: JavaScript, PHP, Python
- Язык запросов: SQL
Frontend-разработка
- Методологии (SuitCSS, BEM, OOCSS, SMACSS, Sestematic CSS)
- HTML
- CSS (Responsive, SVG)
- Dive Deep CSS3 (Flexbox, Rotate, Scale, Grids, Skew, Gradients, Transform, Transitions)
- JavaScript (ES6, TypeScript, Flow)
- Понимание клиентских технологий
- HTML фреймворки (Bootstrap, Foundation, Semantic UI, Uikit, Materialize CSS)
- CSS-препроцессоры (LESS, SASS, Styles, PostCSS)
- Фреймворки (Angular.js, Backbone.js etc)
- Библиотек (React, Vue, jQuery etc)
- Понимание UX и UI
- Адаптивная/отзывчивая верстка из графических макетов
- Кросс-браузерная и кросс-платформенная верстка и тестирование
- IDE или редактор (Atom, NotePad++, NetBeans etc)
- Управление пакетами (nmp, yorn)
- Контроль версий (Git, GitHub, CVS etc)
- DOM, Ajax, SVG-объектами
- HTML5 API (canvas, geolocation, video etc)
- Знание WebGL
- Работа с веб-шрифтами
- Умение пользоваться графическими редакторами (Photoshop etc)
- Опыт работы с сборщиками (Gulp, Webpack, Grunt, Bower etc)
- Опыт работы с веб-форматами (JSON, JSONP, XML)
- Инструменты тестирования (Jest, Mocha, Jasmine, Enzyme)
Backend-разработка
- Понимание Internet, Ethernet, DNS, OSI, TCP, IP, Socket
- PHP (ООП, MVC/HMVC)
- DataBase (MySQL, Postgresql, MongoDB, NoSQL etc)
- Понимание серверных технологий
- PHP фреймворки (Codeigniter, Yii, Laravel, Symphony etc)
- CMS (WordPress, Drupal, PrestaShop, Magento, InstantCMS etc)
- Unix/Linux, Windows
- Nginx и Apache
- CGI/FastCGI
- ORM(объектно-реляционное отображение): Doctrine/Propel
- WebSockets
- IDE или редакторы (Atom, NotePad++, NetBeans, Eclipse, PhpDesigner etc)
- Контроль версий (Git, GitHub, CVS etc)
- Знание Composer - пакетного менеджера
- Тестирование программного кода
- Знание вопросов безопасности (XSS,CSRF, SQL, Injection)
Парадигмы программирования
Название парадигмы | Описание |
Императивное программирование: |
|
Декларативное программирование: |
|
Процедурное программирование: |
|
Структурное программирование: |
|
Аспектно-ориентированное программирование: |
|
Объектно-ориентированное программирование: |
|
Агентно-ориентированный подход: |
|
Компонентно-ориентированное программирование: | компоненты для повторного использования в программе |
Прототипное программирование: |
|
Обобщённое программирование: |
|
Функциональное программирование: |
|
Аппликативный язык программирования: | написание программы состоит в систематическом осуществлении применения одного объекта к другому |
Комбинаторное программирование: | не требует явного упоминания аргументов определяемой функции, использует вместо переменных комбинаторы и композицию функций |
Модульное программирование: | организация программы как совокупности небольших независимых блоков |
Логическое программирование: |
|
Программирование в ограничениях: | отношения между переменными указаны в форме ограничений, определяют не последовательность шагов для исполнения, а свойства искомого решения |
Метапрограммирование: | создание программ, которые порождают другие программы как результат своей работы |
Языково-ориентированное программирование: | заключается в разбиении процесса разработки программного обеспечения на стадии разработки предметно-ориентированных языков (DSL) и описания собственно решения задачи с их использованием |
Автоматное программирование: | программа или её фрагмент осмысливается как модель какого-либо формального автомата (теория автоматов). |
Динамическое программирование: | способ решения сложных задач путём разбиения их на более простые подзадачи. |
Программирование потоков данных: | программа моделируется в виде ориентированного графа потока данных между операциями, подобного диаграмме потока данных. |
Событийно-ориентированное программирование: | выполнение программы определяется событиями — действиями пользователя (клавиатура, мышь), сообщениями других программ и потоков, событиями операционной системы (например, поступлением сетевого пакета). |
Реактивное программирование: | ориентировано на потоки данных и распространение изменений. Это означает, что должна существовать возможность легко выражать статические и динамические потоки данных, а также то, что нижележащая модель исполнения должна автоматически распространять изменения благодаря потоку данных. |
Шаблоны проектирования
Основные
Название | Оригинальное название | Описание | Описан в Design Patterns |
---|---|---|---|
Основные шаблоны (Fundamental) | |||
Шаблон делегирования | Delegation pattern | Объект внешне выражает некоторое поведение, но в реальности передаёт ответственность за выполнение этого поведения связанному объекту. | Н/д |
Шаблон функционального дизайна | Functional design | Гарантирует, что каждый модуль компьютерной программы имеет только одну обязанность и исполняет её с минимумом побочных эффектов на другие части программы. | Н/д |
Неизменяемый интерфейс | Immutable interface | Создание неизменяемого объекта. | Н/д |
Интерфейс | Interface | Общий метод для структурирования компьютерных программ для того, чтобы их было проще понять. | Н/д |
Интерфейс-маркер | Marker interface | В качестве атрибута (как пометки объектной сущности) применяется наличие или отсутствие реализации интерфейса-маркера. В современных языках программирования вместо этого могут применяться атрибуты или аннотации. | Н/д |
Контейнер свойств | Property container | Позволяет добавлять дополнительные свойства для класса в контейнер (внутри класса), вместо расширения класса новыми свойствами. | Н/д |
Event Channel | Event channel | Расширяет шаблон Publish/Subscribe, создавая централизованный канал для событий. Использует объект-представитель для подписки и объект-представитель для публикации события в канале. Представитель существует отдельно от реального издателя или подписчика. Подписчик может получать опубликованные события от более чем одного объекта, даже если он зарегистрирован только на одном канале. | Н/д |
Порождающие шаблоны (Creational) — шаблоны проектирования, которые абстрагируют процесс инстанцирования. Они позволяют сделать систему независимой от способа создания, композиции и представления объектов. Шаблон, порождающий классы, использует наследование, чтобы изменять инстанцируемый класс, а шаблон, порождающий объекты, делегирует инстанцирование другому объекту. | |||
Абстрактная фабрика | Abstract factory | Класс, который представляет собой интерфейс для создания компонентов системы. | Да |
Строитель | Builder | Класс, который представляет собой интерфейс для создания сложного объекта. | Да |
Фабричный метод | Factory method | Определяет интерфейс для создания объекта, но оставляет подклассам решение о том, какой класс инстанцировать. | Да |
Отложенная инициализация | Lazy initialization | Объект, инициализируемый во время первого обращения к нему. | Нет |
Пул одиночек | Multiton | Гарантирует, что класс имеет поименованные экземпляры объекта и обеспечивает глобальную точку доступа к ним. | Нет |
Объектный пул | Object pool | Класс, который представляет собой интерфейс для работы с набором инициализированных и готовых к использованию объектов. | Нет |
Прототип | Prototype | Определяет интерфейс создания объекта через клонирование другого объекта вместо создания через конструктор. | Да |
Получение ресурса есть инициализация | Resource acquisition is initialization (RAII) | Получение некоторого ресурса совмещается с инициализацией, а освобождение — с уничтожением объекта. | Нет |
Одиночка | Singleton | Класс, который может иметь только один экземпляр. | Да |
Структурные шаблоны (Structural) определяют различные сложные структуры, которые изменяют интерфейс уже существующих объектов или его реализацию, позволяя облегчить разработку и оптимизировать программу. | |||
Адаптер | Adapter / Wrapper | Объект, обеспечивающий взаимодействие двух других объектов, один из которых использует, а другой предоставляет несовместимый с первым интерфейс. | Да |
Мост | Bridge | Структура, позволяющая изменять интерфейс обращения и интерфейс реализации класса независимо. | Да |
Компоновщик | Composite | Объект, который объединяет в себе объекты, подобные ему самому. | Да |
Декоратор или Wrapper/Обёртка | Decorator | Класс, расширяющий функциональность другого класса без использования наследования. | Да |
Фасад | Facade | Объект, который абстрагирует работу с несколькими классами, объединяя их в единое целое. | Да |
Единая точка входа | Front controller | Обеспечивает унифицированный интерфейс для интерфейсов в подсистеме. Front Controller определяет высокоуровневый интерфейс, упрощающий использование подсистемы. | Нет |
Приспособленец | Flyweight | Это объект, представляющий себя как уникальный экземпляр в разных местах программы, но по факту не являющийся таковым. | Да |
Заместитель | Proxy | Объект, который является посредником между двумя другими объектами, и который реализует/ограничивает доступ к объекту, к которому обращаются через него. | Да |
Поведенческие шаблоны (Behavioral) определяют взаимодействие между объектами, увеличивая таким образом его гибкость. | |||
Цепочка обязанностей | Chain of responsibility | Предназначен для организации в системе уровней ответственности. | Да |
Команда, Action, Transaction | Command | Представляет действие. Объект команды заключает в себе само действие и его параметры. | Да |
Интерпретатор | Interpreter | Решает часто встречающуюся, но подверженную изменениям, задачу. | Да |
Итератор, Cursor | Iterator | Представляет собой объект, позволяющий получить последовательный доступ к элементам объекта-агрегата без использования описаний каждого из объектов, входящих в состав агрегации. | Да |
Посредник | Mediator | Обеспечивает взаимодействие множества объектов, формируя при этом слабую связанность и избавляя объекты от необходимости явно ссылаться друг на друга. | Да |
Хранитель, Token | Memento | Позволяет не нарушая инкапсуляцию зафиксировать и сохранить внутренние состояния объекта так, чтобы позднее восстановить его в этих состояниях. | Да |
Null Object | Null object | Предотвращает нулевые указатели, предоставляя объект «по умолчанию». | Нет |
Наблюдатель, Dependents, Publish-Subscribe,Listener | Observer илиPublish/subscribe | Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии. | Да |
Слуга | Servant | Используется для обеспечения общей функциональности группе классов. | Нет |
Спецификация | Specification | Служит для связывания бизнес-логики. | Нет |
Состояние, Objects for States | State | Используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния. | Да |
Стратегия | Strategy | Предназначен для определения семейства алгоритмов, инкапсуляции каждого из них и обеспечения их взаимозаменяемости. | Да |
Шаблонный метод | Template method | Определяет основу алгоритма и позволяет наследникам переопределять некоторые шаги алгоритма, не изменяя его структуру в целом. | Да |
Посетитель | Visitor | Описывает операцию, которая выполняется над объектами других классов. При изменении класса Visitor нет необходимости изменять обслуживаемые классы. | Да |
Простая политика | Simple policy | Нет | |
Event listener | Нет | ||
Одноразовый посетитель | Single-serving visitor | Оптимизирует реализацию шаблона посетитель, который инициализируется, единожды используется, и затем удаляется. | Нет |
Иерархический посетитель | Hierarchical visitor | Предоставляет способ обхода всех вершин иерархической структуры данных (напр. древовидной). | Нет |
Design Patterns
- Порождающие шаблоны проектирования
- Abstract Factory — Абстрактная фабрика
- Builder — Строитель
- Factory Method — Фабричный метод
- Prototype — Прототип
- Singleton — Одиночка
- Структурные шаблоны проектирования
- Adapter — Адаптер
- Bridge — Мост
- Composite — Компоновщик
- Decorator — Декоратор
- Facade — Фасад
- Flyweight — Приспособленец
- Proxy — Заместитель
- Поведенческие шаблоны проектирования
- Chain of responsibility — Цепочка обязанностей
- Command — Команда
- Interpreter — Интерпретатор
- Iterator — Итератор
- Mediator — Посредник
- Memento — Хранитель
- Observer — Наблюдатель
- State — Состояние
- Strategy — Стратегия
- Template method — Шаблонный метод
- Visitor — Посетитель
Шаблоны параллельного программирования (concurrency)
Используются для более эффективного написания многопоточных программ, и предоставляет готовые решения проблем синхронизации.
Название | Оригинальное название | Описание |
---|---|---|
Active Object | Active object | Служит для отделения потока выполнения метода от потока, в котором он был вызван. Использует шаблоны асинхронный вызов методов и планировщик. |
Balking | Balking | Служит для выполнения действия над объектом только тогда, когда тот находится в корректном состоянии. |
Binding properties | Комбинирует несколько наблюдателей для обеспечения синхронизации свойств в различных объектах[7] | |
Обмен сообщениями | Messaging design pattern (MDP) | Позволяет компонентам и приложениям обмениваться информацией (сообщениями). |
Блокировка с двойной проверкой | Double-checked locking | Предназначен для уменьшения накладных расходов, связанных с получением блокировки. |
Event-based asynchronous | Адресные проблемы с Асинхронным паттерном, которые возникают в программах с несколькими потоками. | |
Охраняемая приостановка | Guarded suspension | Используется для блокировки выполнения действия над объектом только тогда, когда тот находится в корректном состоянии. |
Half-Sync/Half-Async | ||
Leaders/followers | ||
Lock | Один поток блокирует ресурс для предотвращения доступа или изменения его другими потоками. | |
Монитор | Monitor object | Объект, предназначенный для безопасного использования более чем одним потоком. |
Reactor | Reactor | Предназначен для синхронной передачи запросов сервису от одного или нескольких источников. |
Read write lock | Read-write lock | Позволяет нескольким потокам одновременно считывать информацию из общего хранилища, но позволяя только одному потоку в текущий момент времени её изменять. |
Планировщик | Scheduler | Обеспечивает механизм реализации политики планирования, но при этом не зависящих ни от одной конкретной политики. |
Thread pool | Thread pool | Предоставляет пул потоков для обработки заданий, представленных обычно в виде очереди. |
Thread-Specific Storage | Thread-specific storage | Служит для предоставления различных глобальных переменных для разных потоков. |
Однопоточное выполнение | Single thread execution | Препятствует конкурентному вызову метода, тем самым запрещая параллельное выполнение этого метода. |
Кооперативный паттерн | Cooperative pattern | Обеспечивает механизм безопасной остановки потоков исполнения, используя общий флаг для сигнализирования прекращения работы потоков. |
Шаблоны архитектуры системы
- Model-View-Controller (MVC) Модель-представление-контроллер.
- Model-View-Presenter
- Model-View-View Model
- Presentation-Abstraction-Control
- Naked objects
- Hierarchical Model–View–Controller
Enterprise
- Active Record — способ доступа к данным реляционных баз данных в объектно-ориентированном программировании.
- Business Delegate
- Composite Entity/Составная Сущность
- Composite View
- DAO (Data Access Object) Объект Доступа к Данным
- Dispatcher View
- Front Controller
- Intercepting Filter
- Registry
- Service Activator
- Service Locator/Локатор Службы
- Service to Worker
- Session Facade/Фасад Сессии
- Transfer Object Assembler
- Transfer Object/Объект Перемещения
- Value List Handler/Обработчик Списка Значений
- View Helper
- Unit of Work
Прочие
- Repository/Хранилище
Другие типы шаблонов
Также на сегодняшний день существует ряд других шаблонов:
- Carrier Rider Mapper описывают предоставление доступа к хранимой информации
- Аналитические шаблоны описывают основной подход для составления требований для программного обеспечения (requirement analysis) до начала самого процесса программной разработки
- Коммуникационные шаблоны описывают процесс общения между отдельными участниками/сотрудниками организации
- Организационные шаблоны описывают организационную иерархию предприятия/фирмы
- Антипаттерны (Anti-Design-Patterns) описывают, как не следует поступать при разработке программ, показывая характерные ошибки в дизайне и в реализации
Тестирование
- Функциональное тестирование
- Тестирование производительности
- Нагрузочное тестирование
- Стресс-тестирование
- Тестирование стабильности
- Конфигурационное тестирование
- Юзабилити-тестирование
- Тестирование интерфейса пользователя
- Тестирование безопасности
- Тестирование локализации
- Тестирование совместимости
По знанию системы
- Тестирование чёрного ящика
- Тестирование белого ящика
- Тестирование серого ящика
По степени автоматизации
- Ручное тестирование
- Автоматизированное тестирование
- Полуавтоматизированное тестирование
По степени изолированности компонентов
- Модульное тестирование
- Интеграционное тестирование
- Системное тестирование
По времени проведения тестирования
- Альфа-тестирование
- Дымовое тестирование
- Тестирование новой функции
- Подтверждающее тестирование
- Регрессионное тестирование
- Приёмочное тестирование
- Бета-тестирование
По признаку позитивности сценариев
- Позитивное тестирование
- Негативное тестирование
По степени подготовленности к тестированию
- Тестирование по документации (формальное тестирование)
- Интуитивное тестирование
0 комментариев