Результати пошуку
ITVDN: курси програмування
Відеокурси з
програмування
Підписка

300+ курсів за популярними IT-напрямками

Вибери свою IT спеціальність

Підписка
Підписка

300+ курсів за популярними IT-напрямками

Результати пошуку за запитом: Обучение c
Вступ до NUnit

Автор: Редакция ITVDN

Введение Статья рассказывает об NUnit – открытой среде юнит-тестирования приложений для .NET. В данной статье мы рассмотрим, что такое NUnit, как его загрузить и установить, создание классов тестов , а также запуск теста. NUnit - открытая среда юнит-тестирования приложений для .NET, которая позволяет создавать автоматические тесты. Даный вид тестов обладает рядом преимуществ: Высокое качество программы; Снижение стоимости; Безопасность регрессии сети Чем выше качество программы, тем меньше средств затрачивается на устранение недостатков проекта. То есть, если найти недостатки в проекте на раннем этапе, решить их будет дешевле. Загрузка и установка NUnit Вы можете скачать NUnit с сайта http://www.nunit.org/ После завершения загрузки, разархивируйте файл и запустите программу. Создание проекта библиотечного класса Теперь создадим простой класс теста, используя C#, который добавляет два показателя, и протестируем его. Чтобы создать тест класса в Visual Studio, используя С#, выполните следующие шаги: Шаг 1: Создание проекта библиотечного класса Откройте Visual Studio. Для создания проекта библиотечного класса сначала нажмите File -> New -> Project, выберите Visual C # в установленном шаблоне, выберите Class Library. Введите подходящее название (мы используем IntroNUnitTest), нажмите "OK". После того, как Вы кликнули кнопку "OK", Вы увидите Ваш проект в Solution Explorer (в правом верхнем углу Visual Studio). Шаг 2: Добавьте ссылки к Вашему проекту. Чтобы добавить ссылку NUnit к Вашему проекту, кликните правой кнопкой мыши на ссылку, выберите Add reference-> Browse, затем nunit.framework.dll и «OK». Шаг 3: Создание тестового класса. Кликните правой кнопкой мыши на Вашем проекте, выберите Add -> Class, введите имя (используем MyNUnitTestClass) и далее "Add". После того, как Вы кликнули на кнопку Add, Вы увидите класс. После того, как Вы создали класс, добавьте using NUnit.Framework. Следует соблюдать некоторые условия и понятия: Каждый класс должен содержать атрибут [TestFixure] и должен быть общедоступен. В каждом методе должен присутствовать атрибут [Test]. Оператор подтверждения об отсутствии ошибок: Булевские значения, описывающие, что должно быть ключевым словом, когда выполняется действие. Ожидаемое исключение: один из типов исключения, который мы ожидаем во время выполнения тест-метода. Установка: программа, которая запускается перед выполнением каждого тест-метода (например, регистрация в системе конкретного пользователя или инициализация одноэлементных классов). Демонтаж: программа запускается после окончания каждого тест-метода (например, удаление строк из таблицы, которые были вставлены во время теста). На примере мы постараемся сравнить две переменные х и у. Каждой переменной присвоили значение 20. В общей сложности написали 4 теста (PositiveTest, NegativeTest, ExpectedExceptionTest и NotImplementedException). Запуск тестов После написания всех тестов в тестовом классе необходимо запустить тесты, чтобы проверить, проходят ли они успешно. Для запуска тестов перейдите в папку NUnit, выберите NUnit Application (.exe) и дважды кликнике по ней, выберите команду File-> Open Project, выберите проект (в нашем случае это IntroNUnitTest.dll), затем кликаем Run. Далее Вы увидите количество тестов, которые не сработали, и количество невыполненных тестов. Если Вы хотите запустить какой-то определенный тест, кликните правой кнопкой мыши в тесте, который Вы хотите запустить, и выберите Run test(s). Другие настройки Вы также можете использовать другие настройки для запуска тестов: Testdriven.net ReSharper Jetbrains  Источник: http://www.c-sharpcorner.com/UploadFile/18fc30/introduction-to-nunit-test-driven-development-using-nunit-a/
400+ питань на співбесіді щодо С++

Автор: Влад Сверчков

Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 5 апреля 2021 года. Оригинальная версия на украинском языке доступна по ссылке. Junior 1.1 Общие вопросы 1.2 Метапрограммирование 1.3 Препроцессор и компиляция 1.4 Язык C 1.5 Язык С++ и ООП 1.6 STL / Algorithms 1.7 Многопоточность 1.8 Networking 1.9 OS/Linux 1.10 SCM / CI / CD 1.11 Практические задания Middle 2.1 Общее 2.2 Препроцессор и компиляция 2.3 Язык С 2.4 Язык С++ 2.5 Паттерны проектирования 2.6 Метапрограммирование 2.7 OOP/OOD 2.8 STL / Algorithms 2.9 Многопоточность 2.10 Networking 2.11 SCM / CI / CD 2.12 Практические задания Senior 3.1 Общее 3.2 Препроцессор и компиляция 3.3 C/C++ 3.4 OOP/OOD 3.5 STL / Algorithms 3.6 Многопоточность 3.7 SCM / CI / CD 3.8 Практические задания Предлагаем список технических вопросов, которые, вероятно, вам поставят на собеседованиях по C++. Вопросы предоставили специалисты, принимающие участие в проведении технических интервью по этому языку. Учтите, что есть широкий спектр специализаций, поэтому выбирайте свое направление и готовьтесь.   Junior   Общие вопросы   1. В чем заключаются основные принципы ООП? 2. Что такое сложность алгоритма? 3. Код работает неправильно. Что делать? 4. Объясните такие структуры данных, как стек и очередь. 5. Какие книги, связанные с программированием, читали? Чему с них научились? 6. Что интересного нашли в новых стандартах С++17, С++20? 7. Что такое таблица ASCII? 8. Что такое Unicode? 9. Что такое паттерны проектирования и для чего их используют? 10. Патерны Singleton, Strategy, Template-Method, Decorator? 11. Для чего нужны модульные тесты? 12. Какая разница между модульными и интеграционными тестами? 13. Что такое TDD?   Метапрограммирование   14. Что такое шаблонный класс и шаблонная функция? 15. Что такое конструкторы? Какие типы знаете? 16. Может ли конструктор быть шаблонной функцией? 17. Может ли виртуальная функция быть шаблонной? 18. Что такое инстанциация шаблона? 19. Что такое специализация шаблона? Частичная специализация шаблона? 20. Расскажите об имплементации шаблонных классов в срр-файле?   Препроцессор и компиляция   21. Как проходит процесс компиляции срр-файлов в бинарный файл? 22. Что такое препроцессор? 23. Как работает препроцессор? 24. Какие знаете команды препроцессора? 25. Как работает директива include? 26. Как работает директива define? 27. Что именно линкует линкер? 28. Что такое оптимизация компилятора? 29. Что такое флажки компиляции? 30. Как защитить хедер от повторного включения? 31. Что делает директива include? 32. Как работают макросы?   Язык C   33. Как static влияет на глобальные/локальные переменные? 34. Как сonst влияет на переменную? 35. Какие варианты использования extern знаете? 36. Какие варианты использования volatile знаете? 37. Какие есть битовые операции? 38. Что такое булевая алгебра? 39. Расскажите об этапах разработки библиотеки или программы. 40. Что такое алгоритмы сортировки и какие вы знаете? 41. Какие алгоритмы работы со строками знаете? 42. Какие алгоритмы на графах знаете? 43. Где может храниться переменная? 44. Какая разница между calloc и malloc? 45. Для чего используют realloc? 46. Что такое указатель? 47. Каков размер указателя и от чего он зависит? 48. Какие есть операции с указателями? 49. Что такое struct? 50. Как определить размер структур? 51. Что такое выравнивание в структурах? 52. Что такое union? 53. Какой размер union?   C++/OOP   54. Что такое класс? 55. Какие есть основные типы данных в C++? 56. Что такое инкапсуляция? Как она реализуется в C++? 57. Какие есть встроенные типы в С++? 58. Что такое enum? 59. Как соотносится класс и объект? 60. Какая разница между структурой и классом? 61. Разница между private/protected/public и где они используются? 62. Какие методы класса являются стандартными для класса? 63. Что такое абстрактный класс и зачем он? 64. Сколько памяти занимает объект пустого класса class A {}; ? 65. Что случится с функцией, если к ней добавить ключевое слово static? В контексте члена класса? В контексте метода класса? 66. Какие особенности статических полей класса? 67. Какая особенность константных методов-членов класса? 68. Как изменить поле класса в константном методе класса? 69. Какие методы можно вызвать из константных объектов? 70. Что такое куча и стек? Различия, принцип работы. 71. В чем разница между указателем и ссылкой? 72. Для чего нужен указатель на функцию? Как его объявить? 73. Что будет, если забыть вызвать delete? Когда освободится эта память? 74. Что такое умный указатель? Какие умные указатели есть в стандартной библиотеке? 75. Как работает std::unique_ptr? 76. Как работает std::shared_ptr? 77. Расскажите о константности переменной, ссылки, указателя. Что такое константный указатель и указатель на константу? Размер указателя в памяти? 78. Расскажите о передаче аргументов по значению, по ссылке и по указателю. 79. Расскажите о порядке вычисления аргументов функции? 80. Что произойдет, если вернуть ссылку на временный объект? 81. Что такое перегрузки функции? Виды перегрузки. 82. Что такое явное и неявное приведение типов в С++? Расскажите о функциях явного приведения типов в C++. 83. Что такое инициализация переменной в if? 84. Что такое ленивые вычисления в С++? 85. Расскажите о циклах for и range-for. 86. Что делает ключевое слово auto? auto-определение return-типа, аргументов функции? 87. Чем отличаются delete и delete [ ] ? Что случится, если вызвать delete у объекта, созданного через new [ ] ? 88. Обработка ошибок в С++. Какие конструкции используют при обработке exception? 89. Можно ли выбрасывать exception из конструктора? Какие поля будут сконструированы, какие поля будут разрушены? 90. Что такое memory leak? 91. Можно ли выбрасывать exception из деструктора? 92. Как отловить деление на 0 в С++? 93. Как работают константные методы? 94. Что такое лямбда-функция в С++? Как получить доступ к переменным во внешней области видимости? 95. Для чего использовать namespace, anonymous namespace? 96. Как вызвать объект из nested namespace? 97. Как работают inline-функции? Может ли такая функция быть рекурсивной? 98. Что такое полиморфизм? 99. Для чего используется наследование? 100. Какие бывают типы наследования? 101. Для чего используют виртуальное наследование? 102. Как можно решить проблему ромбовидного наследования без использования виртуального наследования? 103. Что случится, если класс-наследник передать по значению в функцию, которая принимает базовый класс? 104. Что случится, если пронаследоваться от базового класса, который не имеет виртуального конструктора? 105. Что случится, если вызвать переопределенную virtual function из конструктора? Может ли конструктор быть виртуальным? 106. Может ли pure virtual function иметь имплементацию? Что случится, если вызвать pure virtual function из конструктора? 107. Какие методы генерируются для класса по умолчанию? В каком случае такие методы не будут генерироваться? Как заставить компилятор добавить/удалить эти методы? 108. Как запретить наследовать класс? 109. Какой порядок конструирования и разрушения классов в иерархии? Порядок инициализации полей класса? 110. Какие есть способы инициализации полей класса? 111. Может ли деструктор быть виртуальным? 112. Что делает ключевое слово virtual? 113. Для чего используют виртуальный деструктор? 114. Что такое глубокое копирование? 115. Что такое виртуальные функции и зачем они нужны? 116. Как защитить объект от копирования? 117. Что такое семантика перемещения?   STL / Algorithms   118. Из чего состоит STL? 119. Какие алгоритмы применяли с STL? В чем преимущество использования алгоритмов перед собственноручно написанными функциями? 120. Расскажите о контейнерах стандартной библиотеки vector, list, map, unordered_map. 121. Какие знаете типы итераторов? Чем они отличаются? В каких контейнерах используются? 122. Какая разница между std::set, std::map, std::unordered_multimap? 123. Что такое идиома remove-erase? 124. Как получить наименьшее значение типа? 125. Какая разница между std::map и std::hashmap? 126. Как подсчитать количество элементов в std::list? 127. Что такое сложность алгоритма и от чего она зависит? 128. В чем разница между vector и list и в каких случаях их лучше использовать?   Многопоточность   129. Что вам известно о многопоточности? 130. Что общего и различного в процессах и потоках? 131. Как синхронизировать передачи информации между потоками? 132. Какая разница между мьютексом и семафором? 133. Что такое deadlock? 134. Является ли С++ thread-safe? 135. Что такое race-condition? 136. Как избежать состояния гонки? 137. Что такое атомарная операция? 138. Как работать с std::mutex?   Networking   139. Что такое сокет? 140. Какие операции можно делать с сокетом? 141. Какая информация нужна, чтобы создать сокет? 142. Какие бывают модели сетей? 143. Расскажите об уровнях модели OSI. 144. Расскажите об уровнях модели TCP/IP. 145. Что такое IP-адрес? 146. Для чего используется маска подсети? 147. Какая разница между IPv4 и IPv6? 148. Сколько памяти необходимо для хранения IPv4? 149. Для чего нужен порт? 150. Сколько максимально может быть портов? 151. Какая разница между TCP и UDP? 152. Для чего такой ненадежный UDP-протокол?   OS/Linux   153. Что такое менеджер пакетов? 154. Какие бывают менеджеры пакетов? 155. Какие бывают дистрибутивы Linux? 156. Что такое PID? 157. Для чего используют файловые дескрипторы? 158. Расскажите о стандартных файловых дескрипторах процесса. 159. Что такое Pipe? 160. Что такое Named Pipe? 161. Что такое UID? 162. Расскажите о командах bash.   SCM / CI / CD   163. Какие есть виды SCM? 164. Для чего используют системы контроля версий? 165. Какие есть команды git? 166. Какие этапы во время комита изменений? 167. Разница между git fetch и git pull? 168. Какие есть этапы решения merge conflict?   Практические задания   169. Посчитайте количество единиц в произвольном числе. 170. Есть структура по типу «односвязный список». Напишите функцию, которая разворачивает список. То есть, первый элемент становится последним, а последний - первым. 171. Напишите реализацию функции int atoi (const char *str); преобразования строки в число. 172. Для структуры типа односвязный список напишите функцию вставки элемента. 173. Реализуйте класс vector. 174. Реализуйте бинарный поиск в массиве. 175. Реализуйте любую сортировку. 176. Реализуйте макрос для сравнения двух строк. 177. Реализуйте реверс строк. 178. Реализуйте перевода числа из строки в int. 179. Реализуйте подсчет слов в предложении. 180. Реализуйте подсчет чисел Фибоначчи. 181. Найдите такие элементы двух массивов, которые попадаются только в каждом из них. Желательно использовать STL. 182. Удалите из unordered_map элементы, которые делятся на 2 и выведите ключи этих элементов. 183. Напишите класс для логирования, который мог бы логировать к консоли или файлу. 184. Напишите функцию для определения, является ли определенный год високосным. 185. Напишите функцию для определения, является ли определенное слово палиндромом. 186. Напишите реализацию паттерна Singleton. 187. Напишите реализацию std::vector с операциями: push_back, push_front, pop_back, pop_front, size, clear. 188. Напишите рекурсивный поиск значения в дереве бинарного поиска. 189. Напишите функцию, которая проверяет, является ли дерево сбалансированным. 190. Напишить функцию для поиска уникального элемента в массиве.   Middle   Общее   1. Какие курсы прошли или книги прочитали за этот год? Чему научились? 2. Что нравится и не нравится в С++? Чего не хватает? 3. Что интересного нашли в новых стандартах С++17, С++20 (конкретные фичи)? 4. Расскажите о фичах, которые появились в разных версиях языка. 5. Расскажите о модели памяти, которая появилась в С++11 стандарте. 6. Что такое сериализация? Какие библиотеки знаете? 7. Какие знаете паттерны проектирования? 8. Что такое операционная система? Какие существуют типы по назначению? 9. Назвать основные составляющие и принципы работы ОС Linux в качестве примера системы общего назначения. 10. Что такое SFINAE и PIMPL? 11. Назовите порождающие, структурные и поведенческие паттерны программирования и приведите примеры их использования.   Препроцессор и компиляция   12. Расскажите о системах автоматизации билд-процесса. 13. Какая разница между статической и динамической библиотеками? 14. Какая разница между исполнительным файлом и динамической библиотекой? 15. Что такое DLL hell? 16. Что такое флажки компиляции (fPIC)? 17. В чем разница между дебаженной и релизной сборкой? 18. Что нужно для использования сторонней библиотеки? 19. Что такое internal linkage?   C   20. Что будет, если дважды вызвать free? 21. Как происходит вызов функции? 22. Как происходит передача параметров в функцию? 23. Как прорабатывается константа переменных? 24. Что означает ключевое слово inline? 25. Для чего используют выравнивания, можно ли его контролировать? 26. Расскажите о битовых полях. 27. Для чего нужен extern "C"? 28. Что будет, если в двух файлах сделать функцию с одинаковым именем и параметрами? На каком этапе возникнет ошибка? 29. Как экспортировать/импортировать функции из динамической библиотеки? 30. Какая разница между С-style приведением типов и C++ приведением?   C++   31. Что такое явное и неявное приведение типов в С++? Зачем делать explicit-конструктор? 32. Что такое Uniform initialization? Aggregate initialization? 33. Что такое Reference to temporary object? Как продлить время жизни временного объекта? 34. Что такое делегирующий конструктор? 35. Что такое список инициализации? 36. Какой порядок инициализации полей класса? Что случится, если конструктор инициализирует поля в другом порядке? 37. Что случится, если инициализировать поле другим полем? 38. Что такое copy elision? Сколько раз будет вызван конструктор/деструктор у объекта, которого возвращают по значению? 39. Что такое move-семантика? 40. В каких случаях не будет сгенерирован конструктор копирования? 41. Чем отличается конструктор копирования от оператора присваивания? 42. При каких условиях в конструкторе можно выбросить exception? 43. Что такое конструктор по умолчанию? Для чего нужны default и delete? 44. Чем отличается интерфейс от абстрактного класса? 45. Какие виды полиморфизма в С++? 46. Как реализовано наследование в большинстве компиляторов? 47. Множественное наследование: за и против? 48. Виртуальное наследование и порядок конструирования? 49. Зачем использовать override? 50. Какие есть правила вывода типа при использовании auto? В каких случаях auto может привести к нежелательному копированию объекта? 51. Расскажите обо всех возможных способах использования ключевого слова static в С++. Что такое static initialization order fiasco? 52. Что делает вызов throw; в блоке catch? 53. Чем отличается constexpr от const? 54. Что такое const correctness? 55. В каком случае можно использовать const_cast? 56. Что такое ключевое слово mutable и когда его нужно использовать? 57. Что такое ключевое слово friend и когда его нужно использовать? 58. Расскажите о лямбда-выражениях в С++ и доступ к переменным во внешней области видимости, захват this в лямбду и время жизни лямбды и захваченных переменных? 59. Что такое функтор? Напишите пример. 60. Что такое специализация шаблона? 61. Что такое dynamic_cast и run-time type identification? 62. Что такое exception? Как бросить и поймать? 63. Что будет, если бросить exception из конструктора? А из деструктора? 64. Что будет, если не поймать exception? 65. Что произойдет, если exception выйдет за пределы блока noexcept функции? 66. Для чего можно использовать приватное наследование? 67. Что такое контракт функции? 68. Что такое vptr и vtable? 69. Где содержится vptr? 70. Где содержится vtable? 71. Какая разница между overload and override? 72. Как компилятор различает члены класса и обычные переменные в функциях? 73. Зачем используют exceptions? 74. Что такое блоки try-throw-catch? 75. Расскажите о логике catch-блоков. 76. Что такое move constructor? 77. В чем разница между константным методом и неконстантным? 78. Что такое В-нотация и как определить сложность любого алгоритма? 79. Что такое таблица виртуальных методов? 80. Какие функции класса автоматически генерирует компилятор, если их не определить? 81. Что такое выравнивание данных? 82. Что такое exception? 83. Какие есть стандартные контейнеры и на основе каких структур они построены? 84. Что такое Undefined behavior? Приведите примеры. 85. Как определить, что в программе есть memory leak? 86. Для чего нужен std::make_shared? Чем он лучше создания std::shared_ptr через конструктор? 87. Что будет, если выделить один объем памяти, а записать больше? 88. Что такое переполнение stack?   Паттерны проектирования   89. Зачем нужны паттерны? Какие типы паттернов различают? 90. Недостатки паттерна Singleton? Когда он уместен? 91. Преимущества и недостатки PIMPL? 92. В чем разница между паттерн-фабрикой и фабричным методом? Когда использовать какой из них? 93. Что такое паттерн Observer? 94. Як контролировать состояние программы? Машину состояний? Паттерн состояние? 95. Что такое паттерн Visitor?   Метапрограммирование   96. Какие есть правила вывода типа в шаблоне? 97. Чем отличается using от typedef? 98. Сколько памяти занимает произвольная структура? Что такое выравнивание объекта? 99. Почему пустая структура занимает 1 байт? Какая минимальная единица адресации в С++?   OOP/OOD   100. Что такое SOLID? Что означает каждый из этих принципов? 101. Расскажите о паттернах проектирования. 102. Что такое Dependency Injection? Приведите пример. 103. Какие преимущества и недостатки функционального подхода? 104. Что такое принцип RAII? 105. Что такое принцип DRY? 106. Что такое принцип KISS? 107. Какие преимущества композиции перед наследованием?   STL / Algorithms   108. Какие алгоритмы с STL использовали? Каких не хватает? 109. Какими особенностями должен обладать класс, чтобы он был итератором? 110. Какие бывают итераторы? 111. Расскажите об инвалидации итераторов. 112. Как оптимизировать удаление элемента со средины вектора? 113. Как реализован vector? 114. Как реализован list? 115. Как расширить STL-контейнеры? 116. Какие есть алгоритмы в STL? 117. В чем разница между vector, deque, list, set e STL? 118. Когда надо использовать map? Когда - unordered_map? Какая сложность поиска и вставки в этих контейнерах? 119. Как проверить, есть ли в контейнере элементы? Почему вызов container.size() является плохой практикой? 120. Что такое exception safety guarantee? Какую exception safety guarantee имеют STL-контейнеры? 121. Расскажите о типах умных указателей и о подсчете ссылок в них.   Многопоточность   122. Является ли С++ thread-safe? 123. В чем разница между многопоточностью и асинхронностью? 124. Что такое многопоточность? Какую функциональность предоставляет С++ для разработки многопоточных приложений? Какие основные проблемы многопоточных приложений? 125. Как передать информацию между несколькими процессами? 126. Как синхронизировать между собой несколько процессов? 127. Какие есть особенности работы с shared memory? 128. Как работает spinlock? 129. Какие вы знаете особенности использования recursive mutex? 130. Расскажите о read-write mutex. 131. Что такое race-condition? Взаимная блокировка? Что такое критическая секция? 132. Как избежать состояния гонки? 133. Чем отличается мьютекс от семафора? 134. Какие примитивы синхронизации реализованы в C++? Преимущества lock_guard? 135. Что случится, если exception выйдет за пределы потока? Какие инструменты есть для безопасной асинхронности в С++? 136. Чем отличается std::launch::async от std::launch::deferred? 137. Что такое атомарная операция? std::atomic? 138. Как работать с std::conditional_variable? 139. Как создать поток с помощью std::thread? 140. На сколько потоков лучше разбить задачу? От чего это зависит? 141. Как работать с std::async? 142. Thread-safe гарантии контейнеров в С++? В чем недостаток интерфейса front() + pop_front()?   Networking   143. Что такое TCP handshake? 144. Какая разница между TCP и UDP? 145. Расскажите о протоколах верхнего уровня. 146. Какая разница между HTTP и HTTPS? 147. Расскажите об SSL/TLS handshake.   SCM / CI / CD   148. Расскажите о процессах CI. 149. Как отредактировать комит? 150. Расскажите об интерактивном rebase. 151. Какие могут быть способы дебаггинга кода? 152. Для чего нужны Unit test? Чем отличается от Functional Test? 153. Как тестировать код? Какой используете фреймворк? 154. Какие библиотеки знаете для написания тестов? 155. Что такое mock? 156. Сколько тестов нужно написать на одну функцию? 157. Что такое побочный эффект, идемпотентность и чистые функции? 158. Что такое контейнеризация и в чем преимущества и недостатки? Что такое Docker или иной инструмент контейнеризации? 159. Что такое CI/CD и какие преимущества приносит для разработчика? 160. Какие принципы итеративных методологий? 161. Какие преимущества и недостатки code-convention?   Практические задания   162. Напишите максимально корректную реализацию класса string с конструктором копирования и оператором присваивания. 163. Напишите реализацию очереди. 164. Реализуйте функцию, которая за один проход найдет уникальный элемент в контейнере. 165. Напишите thread-safe пул потоков. 166. Напишите игру жизни в ООП стиле. 167. Напишите класс, который достает из базы список товаров по фильтру и показывает на консоли. Напишите тесты для него. 168. Любая задача на написание кода, чтобы проверить умение проектировать интерфейсы и придерживаться принципов SOLID, DRY, KISS. 169. Напишите свою реализацию std::atomic. 170. Напишите программу для анализа графов: нахождение циклов, deadlock-состояний, циклов, недоступных состояний. 171. Напишите программу, которая бы проверяла, что в системе запущен только один ее экземпляр. Решение должно быть cross-platform. 172. Проанализируйте C++ код с точки зрения качества: выявить потенциальные memory leak, нерациональное использование STL-контейнеров, алгоритмов, неоптимальные конструкции и тому подобное. 173. Напишите код для решения судоку. 174. Напишите код, который найдет зацикливание в односвязном списке.   Senior   Общее   1. Как вы понимаете SOLID? 2. Как разработать систему плагинов на С++? 3. Что такое RPC? Какие библиотеки знаете? 4. На что обращать внимание при проведении code review? 5. Какие есть проблемы при написании кроссплатформенного кода? На что обращать внимание? 6. Что делать, если код работает медленно? 7. Какие есть способы и методологии измерения быстродействия кода? Как можно устранить/уменьшить влияние замеров на быстродействие? 8. Что такое SFINAE? Для чего используется? 9. Что такое метапрограммирование? С помощью чего реализуется на С++? 10. Как использовать variadic templates? 11. Как тестировать закрытые методы? 12. Как считать покрытие тестами? Нужно ли это делать? 13. Что такое cache miss и как это выявить? 14. Что такое SIMD-инструкции? Какие необходимые условия и способы их использования? 15. Что такое покрытие кода и как обеспечивается? 16. Опишите принципы lock-free структур данных и свой опыт работы с ними.   Препроцессор и компиляция   17. Расскажите о построении билд-системы. 18. Как работать с билд-системами: Make, CMake. 19. Как интегрировать third-party в проект? 20. Что такое барьеры памяти? 21. Расскажите о работе с сырыми указателями и о ручном управлении памятью. 22. Что такое статический анализатор кода? Какие знаете? 23. Что такое динамический анализатор кода? Какие знаете? 24. Проект медленно собирается. Как можно ускорить?   C/C++   25. Расскажите об использовании realloc в контейнерах. 26. Как работают шаблоны? 27. Расскажите о специализации шаблонов. 28. Как работает RTTI? 29. Можно ли использовать exception в конструкторе/деструкторе? 30. Что такое rvalue и lvalue? 31. В чем особенности контейнеров std::set, std::map, std::unordered_map, std::hash? 32. Что такое placement new? Для чего используют? Как сделать placement delete? 33. Как размещается в памяти класс со множественным наследованием и виртуальными функциями? 34. Как работают точки остановки? 35. Что такое уязвимости? Каков механизм их работы? 36. Как написать собственный std::shared_ptr? 37. Что такое curiously recurring template pattern? 38. Опишите назначение и принцип работы std::shared_ptr, std::unique_ptr и std::weak_ptr. 39. Какое назначение и отличия использования std::variant и std::any? 40. Какие улучшения получил std::search в С++17 ? 41. Что такое copy elision и когда он становится возможным? Какие особенности для разных стандартов? 42. Что такое Return Value Optimization?   OOP/OOD   43. Объясните принципы SOLID. 44. Объясните принципы KISS. 45. Объясните принципы YAGNI. 46. Какие есть подходы к оптимизации кода? 47. На что стоит обращать внимание при code review? 48. Какие есть паттерны проектирования? Почему не советуют использовать Singleton? 49. Что такое статический полиморфизм?   STL / Algorithms   50. Когда std::vector может использовать std::move? 51. Расскажите о своем любимом алгоритме поиска. 52. Что такое lock-free и wait-free алгоритмы? В чем их отличия и способы реализации? 53. Опишите назначение execution policy для параллельных алгоритмов.   Многопоточность   54. Расскажите о построении API, рассчитанных на многопоточное использование. 55. В чем разница между kernel-level и user-level потоками? 56. Что такое coroutine? 57. Что делает спецификатор thread_local? 58. Как реализовать синхронизацию в задаче producer-consumer? 59. Як синхронизироваться между различными процессами?   SCM / CI / CD   60. Расскажите о настройке процесса менеджмента ветвей репозитория. 61. Расскажите о стратегии разветвления (branching).   Практические задания   62. Напишите базовую реализацию std::shared_ptr. 63. Реализуйте алгоритм сортировки. 64. Реализуйте алгоритм хеширования. 65. Реализуйте shared_ptr с расширением для weak_ptr. 66. Реализуйте простейший producer-consumer, используя условные переменные. 67. Опишите как можно подробнее, что происходит в системе, когда приложение делает сетевой запрос. 68. Детально описать дизайн программного компонента, например, системы голосования; учесть при этом высокую нагрузку и сделать ее расширяемой и отказоустойчивой.   Выражаем благодарность за участие в статье Александру Жакуну, Ярославу Пушко, Назару Семенишину, Сергею Подоброму, Владимиру Кочуну, Владимиру Новикову, Сергею Кривоносу, Марку Цирульнику, Кириллу Пшеничному, Виктору Шуму, Сергею Братусю.    
Как подготовиться к собеседованию в IT на английском

Автор: Влад Сверчков

Английский в IT. Для каких задач нужен? English в школе. Опыт автора. Какой английский необходим для разработчиков и тестировщиков? Что не работает. Что реально работает в изучении English. Как это организовать. Глоссарий. Рекомендации по изучению английского + бонус! Заключение.     Друзья, предлагаем вашему вниманию занимательную статью, написанную на основании интервью одного IT-специалиста из Кремниевой долины. В своё время ему потребовался английский для работы над крутыми международными проектами, однако камнем преткновения стал разговорный English. Это краткая и поучительная история о том, как наш герой перепробовал множество вариантов, но таки смог найти тот самый, который помог ему «заговорить» и добиться желаемого в IT. Приятного чтения!     Приветствую! Сегодня мы поговорим о том, как быстро прокачать английский для собеседований в IT-компанию. Я буду рассказывать на примере своего опыта, когда решения на базе искусственного интеллекта ещё не были распространены. Немного о себе. Меня зовут Александр, сейчас я работаю аналитиком в EPAM в Калифорнии, проект у нас в компании Google. В прошлом у меня уже был опыт управления проектами. Сам я из цеха программистов, но сейчас занимаюсь бизнес-анализом. Эта статья будет полезна в первую очередь для тех, кто хочет подтянуть свой английский для работы в информационных технологиях. Данный способ подходит не только для IT, но и для любой другой сферы. Когда говорим про обучение, нужно понимать, что есть множество способов и вариантов. Я помогу выбрать лучший способ именно в контексте работы в IT. После прочтения статьи вы поймете, как сэкономить время на изучение английского языка. Время – это самый драгоценный ресурс, поэтому думаю, что вам будет полезно. Английский в IT. Для каких задач нужен? Пару слов об IT и какой английский нужен. Приведу свой пример: когда я был разработчиком, English сводился к тому, что я читал мануалы на английском языке, первоисточники, использовал Stack Overflow, читал на форумах. В основном это была текстовая информация, то есть беглое чтение больших объемов информации. Если говорим про какую-то документацию, протоколы и т. д., я выделяю это как первичный уровень знания языка. Также упомяну про английский для резюме. Сталкивался с тем, что у людей прекрасный инглиш, и у них в резюме указано, что уровень B2 или TOEFL. Но касаемо работы это не приносило бенефитов. Нужно четко разделить английский в плане работы, особенно в IT, на два уровня. Английский для различных ролей в IT Английский, который нужен тестировщикам и разработчикам, является первым входным порогом. Следующий порог – это там, где требуется коммуникация, например, для ролей бизнес-аналитика или проектного менеджера, которые общаются с англоговорящими заказчиками или стейкхолдерами. Если говорить о разработчиках, тестировщиках, архитекторах, то один из важных аспектов – это техническое интервью. Оно может быть для собеседования в компанию или внутренним. В моем случае, чтобы подтвердить свою компетентность, я проходил assessment – экзамен, на котором присутствовало пять человек из разных стран с разным уровнем знания языка и акцентами. Нужно было отвечать на профессиональные вопросы и приводить примеры из прошлого опыта. Говоря о техническом интервью, важно отметить, что английский язык необходим не только для понимания вопросов, но и для передачи своего опыта и знаний. Кроме того, есть понятие поведенческого интервью, где тоже важно владеть языком. Английский в школе. Опыт автора Расскажу про свой опыт изучения английского в школе. У нас English был со второго класса, это были базовые буквы и слова. В пятом классе начался обычный школьный английский: много грамматики, сложные слова, которые нужно было заучивать наизусть. Произношению уделялось меньше внимания, особенно если говорить не о гимназиях и школах с углубленным изучением языка. Мы делились на группы по уровню знаний. В одной группе были ученики с более сильным английским, куда попал и я. В другой группе учительствовал профессиональный переводчик без преподавательского образования: ученики слушали песни, общались только на английском – обучение было больше в игровой форме без особого упора на грамматику. Баллы во второй группе, соответственно, были ниже. В итоге, несмотря на хорошие оценки в школе и институте, в реальной жизни, при поездках в Европу, я убедился, что мой английский был недостаточно хорош для повседневного общения – я не понимал людей, равно как и они меня. Чему не учат в школе: Простоте и понятности. В школе не дают базовые потребительские фразы, которые можно заучить и использовать в повседневной жизни. Беглости и плавности. Школьная программа не учит беглому чтению и пониманию общего смысла текста или речи без детального перевода каждого слова. Также не учат говорить плавно и непринужденно, как и пониманию живой речи собеседника. Практическим навыкам. Научиться говорить естественно и понимать собеседника в реальном времени – это то, что приходит с практикой и чего в школе не преподают. Английский, необходимый для разработчиков и тестировщиков Первый и важнейший ресурс – это время. Все хотят быстро выучить язык, но в реальности это требует времени и усилий. Для того чтобы подтянуть английский, нужно им регулярно заниматься, а также использовать на практике. Второй ресурс – деньги. В идеале, чтобы всё было бесплатно. Однако даже если у вас есть средства, нужно понимать, сколько вы отдадите и какое качество получите взамен. Порог входа Для тестировщиков и разработчиков начальным порогом является базовое владение английским, чтобы понимать и использовать техническую документацию, писать простые отчеты о багах, взаимодействовать с другими членами команды. Однако, если вы претендуете на роль бизнес-аналитика или проектного менеджера, где требуется постоянное взаимодействие с англоязычными заказчиками и стейкхолдерами, уровень английского должен быть значительно выше. Технические и внутренние интервью Как я уже упоминал выше, английский пригодится для собеседований на работу в иностранную команду / работу с иностранным заказчиком, а также могут быть внутренние технические интервью (для подтверждения квалификации, например). Важно уметь отвечать на профессиональные вопросы и приводить примеры из своего опыта. Что не работает Учитель-академик. Академический подход с упором на грамматику и теорию мало помогает в развитии навыков свободного общения. Письма, чаты и статьи. Письменная практика не дает значительных результатов в развитии разговорных навыков. Голосовые сообщения. Запись голосовых сообщений создает иллюзию обучения, но не развивает навык быстрой реакции, схватывания на лету и понимания в реальном времени. Зазубривание теории и слов. Заучивание теоретических вопросов и слов не помогает в реальном разговоре, так как любое отклонение от заученного сценария вызывает замешательство. Просмотр фильмов и сериалов. Хотя это полезно для общего понимания языка, данный метод не способствует развитию активных навыков спикинга и понимания на высоком уровне. Что действительно работает при изучении английского Очень эффективным является ежедневное общение на английском языке по 45 минут либо по часу в день. Это может быть разговор с носителем языка или человеком с уровнем выше вашего. Важно, чтобы это была активная разговорная практика, а не пассивное восприятие информации. Практика в экстремальных условиях, когда нужно быстро реагировать и формулировать мысли, значительно улучшает спикинг-навыки. Как это организовать Найдите собеседников внутри компании. Отправьте письмо коллегам с предложением готовиться вместе к профессиональному интервью / экзамену либо чему-то в этом роде. Укажите список вопросов и предложите созваниваться раз в неделю. Таким образом, у вас будет постоянная практика. Используйте сервисы для общения. Как пример – сервисы вроде Conversation Exchange или Italki. Они помогут найти людей для практики, с которыми можно регулярно созваниваться и общаться на английском – как профессиональных преподавателей, так и простых энтузиастов, готовых заниматься за небольшую плату. Именно так я заполнял свой ежедневный часовой спринт. Платные преподаватели. В случае если коллег недостаточно или вы хотите повысить интенсивность занятий, можно обратиться к платным преподавателям на том же Italki. Глоссарий В моей практике словарный запас оказался особенно важен, поскольку необходимо было уверенно использовать профессиональные термины, специфичные для разработки, тестирования, архитектуры и бизнес-анализа. И чтобы свободно общаться я создал свой глоссарий. Как я создал свой глоссарий: Взял книги, которые считаются "библиями" в области управления проектами и бизнес-анализа: PMBOK (Project Management Body of Knowledge) для менеджеров проектов. BABOK (Business Analysis Body of Knowledge) для бизнес-аналитиков. Скачал эти книги в формате PDF, затем скопировал их содержимое в текстовый файл. Заменил все пробелы на переносы строки, чтобы сформировать одну колонку текста. Для анализа текста и выделения наиболее часто используемых слов – Excel. В Excel я создал сводную таблицу (pivot table), чтобы определить частоту встречаемости слов. Из тысячи слов я выбрал 40 самых употребляемых и заучил их. Это позволило мне быстро расширить свой профессиональный словарный запас и начать активно использовать эти термины в своей речи. При построении глоссария важно использовать проверенные и авторитетные источники. Книги, такие как PMBOK и BABOK, предоставляют стандартизированные термины, которые часто употребляются в профессиональных кругах. Это гарантирует, что глоссарий будет достоверным и актуальным. Можете выбрать другие авторитетные книги. Главное — следовать методике: создайте колонку с текстом, проанализируйте частотность слов и выберите наиболее часто встречающиеся термины для заучивания. Рекомендации по изучению английского Ежедневная практика. Первая и самая важная рекомендация — ежедневно уделять не менее одного часа на общение на английском языке. Хотите хорошо говорить и проходить собеседования на английском? Просто говорите и слушайте. Уже через месяц-два регулярной практики вы увидите результаты. Определение канала восприятия. Важно определить, как вы лучше всего воспринимаете информацию: через аудио, текст или визуальные материалы. Экспериментирование. Пробуйте разные методы изучение языка и найдите то, что работает именно для вас. Не бойтесь делать ошибок! Поддержание языковой среды. Окружите себя источниками английского языка для улучшения восприятия и запоминания: текстовый формат: книги, статьи и новости на английском языке; аудио: подкасты, аудиокниги; используйте стикеры с новыми словами и расклейте их на видных местах, чтобы легче запоминать; переведите интерфейсы телефонов и компьютеров на английский язык. Бонус: бесплатный сервис для практики английского языка А теперь я хочу поделиться с вами действительно полезным бонусом — это бесплатный сервис под названием Pramp. Он позволяет вам находить собеседников со всего мира, имеющих разный уровень подготовки. Вы можете выбрать тему для интервью, будь то техническое или поведенческое собеседование. Алгоритм использования Pramp прост: Найдите человека для общения: на выбор множество стран, собеседники с разным уровнем английского. Выберите тему для интервью: FrontEnd, системный дизайн, поведенческое интервью и т. д. Организация созвона, который длится около 30 минут. У вас есть заранее подготовленный набор вопросов. Задаете вопросы своему собеседнику, делаете заметки о том, что понравилось и что можно улучшить. Меняетесь ролями: ваш собеседник задает вам вопросы. В сервисе есть множество готовых наборов вопросов для каждой тематики. Вы можете следовать им или использовать свой собственный список. Так же может поступить и собеседник. Повторюсь: сервис бесплатный. Вы сможете общаться с людьми из разных стран и с различным профессиональным опытом; вопросы и темы максимально приближены к реальным собеседованиям. Вы не только улучшите свои языковые навыки, но и получите ценные советы по прохождению интервью. Я использовал этот сервис для подготовки и могу сказать, что это великолепная возможность. Общался с менеджерами проектов, инженерами из Америки, Азии и Индии. Pramp идеально сочетает в себе все необходимые элементы для успешной подготовки к прохождению собеседований. Заключение Самое главное в изучении английского – это регулярность и интенсивность практики. Ежедневные занятия по часу в стрессовых условиях с различными собеседниками помогут быстро повысить уровень английского языка, улучшить беглость и плавность речи, а также развить навыки понимания собеседника. В своё время мне очень помогли Conversation Exchange, Italki, Pramp. В моём случае я перепробовал много различных вариантов: тексты, статьи, аудиокниги, сериалы, подкасты, преподаватели английского. Наблюдал увеличение словарного запаса, совершенствование грамматики, но «заговорить» так и не мог. В итоге, именно регулярный живой разговорный формат и помог мне достичь успеха на англоязычном собеседовании и осуществить свои карьерные амбиции. Уверен, что мой опыт окажется ценным для многих из вас. Успехов в изучении английского!  
.NET Core 2.1, 2.2 та 3.0: що нас чекає у нових версіях?

Автор: João Carrasqueira

Во время конференции Microsoft Ignite было сделано довольно много заявлений. Значительная часть из них относится к .NET Core. На презентации компания выделила некоторые основные фичи .NET Core 2.1, которые сейчас может опробовать любой желающий. Также она выделила грядущие изменения релизов 2.2 и 3.0. Говоря об изменении версии 2.1, вы можете заметить повышение производительности  в сравнении с версией 2.1. Согласно бенчмаркам TechEmpower, новый релиз в среднем на 15 процентов быстрее при работе с чистым текстом, на 18 процентов быстрее при обработке JSON и порядка 147 процентов — при взаимодействии с Fortune, обрабатывая 240 000 запросов за секунду (при 97 000 запросов версии 2.0). Версия 2.1 также привносит целую серию новых инструментов, таких как Global Tools и Windows Compatibility Pack, позволяющий использовать API более старых приложений в рамках .NET Core. Также в рамках Entity Framework (EF) Core поставляются такие вкусные вещи, как lazy loading, конверсия типов и более. В дополнение, теперь ASP.NET Core поддерживает HTTPS-протокол и такие вещи, как SignalR. К слову, теперь Azure SignalR является встроенной технологией, позволяющей ощутить все ее прелести в режиме реального времени. Microsoft поделилась информацией о новшествах версии 2.2. Как заявляет компания, разработка сфокусирована на трех пунктах: улучшение работы с Web API, микросервисы и Azure, а также улучшение производительности. Помимо прочего, также идет поддержка многоэтапной JIT-компиляции и поддержка расширений SQL Server и SQLite для EF Core. ASP.NET Core будет обладать обновленными шаблонами Bootstrap и Angular, версий 4 и 6 соответственно. Microsoft также улучшает Web API, добавляя поддержку API Security + включая HTTP/2 для всех соединений ASP.NET Core. Забегая наперед, можно сказать, что .NET Core 3.0 сосредоточится на настольных приложениях, AI и IoT-устройствах. Если вы опасаетесь, что Microsoft желает заметь .NET Framework на IoT, можем заверить вас, что поводов для беспокойства нет. Более традиционный стандарт будет по-прежнему доступен для backward-поддержки, просто .NET Core будет постепенно развиваться, становясь основным стандартом для работы. В рамках этого обновления также будут включены некоторые фичи, такие как XAML Islands и XAML Controls для WPF и WinForms, что были анонсированы ранее в этом году в числе других правок для WinForms с высокой нагрузкой на DPI. Также .NET Core-приложения получат доступ ко всем Windows 10-API в версии 3.0. Плюс в релизе будет включен Application Bundler – приложение, помещающее все выходные файлы в один исполняемый файл, который можно будет запустить везде, не важно, установлен .NET Core или нет. Помимо прочего, в версии 3.0 Microsoft также намерена реализовать Razor Components, интегрирующие Blazor в ASP.NET Core, тем самым позволяя запускать их на сервере в связке с .NET Core. Подобное нововведение хорошо помогает совместимости веб-приложений, так как при помощи WebAssembly один и тот же код может быть запущен на разных устройствах. Дата релиза .NET Core 3.0 еще не анонсирована, но, скорее всего, он будет доступен уже в этом году. Также компания напомнила, что фреймворк машинного обучения для .NET-приложений ML.NET недавно обновился к версии 0.5, добавился TensorFlowTransform, что позволит разработчикам использовать существующую модель TensorFlow в рамках ML.NET. Автор перевода: Евгений Лукашук Источник
ТОП-10 лучших видео по FrontEnd

Автор: Влад Сверчков

Здравствуйте! Друзья, сегодня мы подготовили для вас подборку лучших вебинаров от ITVDN по направлению FrontEnd. В рейтинг были включены как познавательные вебинары с актуальной информацией, так и вебинары прикладного характера, которые нацелены на совершенствование ваших навыков написания кода. Давайте приступим к их рассмотрению. Как стать FrontEnd разработчиком? Пошаговая инструкция для начинающих Автор — Тысячный Влад, Middle React.js / React Native Developer. FrontEnd Developer — это разработчик, который создает клиентскую сторону веб-сайтов. Ваши любимые сервисы — социальные сети, видеохостинги, интернет-магазины — любой интернет-продукт необходимо преподнести пользователю в привлекательном и удобном для него виде. В такой задаче никак не обойтись без фронтенд специалиста. Какие требования выдвигают работодатели к FrontEnd-разработчику? Что нужно знать и уметь, с чего начать и как лучше спланировать обучение. На вебинаре, вы получите ответы на все интересующие вас вопросы и составите целостное представление о профессии FrontEnd разработчика. Адаптивная верстка на FlexBox и Grid Автор — Ткаченко Анастасия, FrontEnd Developer. Flexbox и Grid – технологии, которые широко используются в верстке сайтов и существенно упрощают реализацию их адаптивности. Что они являют собой? CSS Flexbox (Flexible Box Layout Module) — модель макета гибкого контейнера — представляет собой способ компоновки элементов, в основе лежит идея оси. Flexbox состоит из гибкого контейнера (flex container) и гибких элементов (flex items). Гибкие элементы могут выстраиваться в строку или столбик, а оставшееся свободное пространство распределяется между ними различными способами. CSS Grid Layout — система двухмерного макета, оптимизированного для дизайна пользовательского интерфейса. Главная идея, лежащая в основе макета сетки, заключается в разделении веб-страницы на столбцы и строки. В образовавшиеся области сетки можно помещать элементы сетки, а управлять их размерами и расположением можно с помощью специальных свойств модуля. В ходе вебинара были продемонстрированы возможности этих технологий и преимущества их комбинации на практике (в каком случае какую технологию стоит использовать) для создания адаптивных страниц. Создание игры Тетрис на JavaScript | Часть 1, 2, 3 Автор — Ростислав Силивейстр, FrontEnd Developer. Отличный вебинар, который подойдет даже тем, кто имеет нулевой уровень знаний языка JavaScript. Обучение программированию путем реализации культовой игры Тетрис — это тот самый случай, когда вы совмещаете приятное с полезным, а результаты могут с гордостью быть презентованы своим знакомым, друзьям и родственникам.  Каждая часть вебинара затрагивает определенные автором темы: Первая часть включает в себя постановку задачи, ознакомление с правилами игры, реализацию поля, падения и перемещения фигур в стороны. Вторая часть ориентирована на реализацию вращения фигур, ускорение их падения, исчезновение заполненных рядов, начисление очков, перехода на следующий уровень, а также базовые игровые опции (старт, пауза, начать заново, game over). Третья часть заключительная — происходит тестирование и исправление недочетов, оптимизация кода и подведение итогов.    После старательного изучения всех трёх частей вебинара и упорной практики вы научитесь: разбираться в структурах, типах данных, функциях JavaScript; работе с DOM в JavaScript; работе со средствами HTML/CSS для расположения элементов на странице; систематическому подходу к решению задач, не упуская деталей; пониманию логики создания игр; пониманию основ алгоритмов. Memory Game на JavaScript за 2 часа Автор — Ярослав Вовченко, FrontEnd Developer. Чтобы начать писать на JavaScript, не обязательно сразу углубляться в изучение документации. На примере написания простой Memory Game вы узнаете, как выбирать элементы в DOM, проходиться по спискам и массивам, добавлять, убирать элементы и слушатели действий. На вебинаре вы вместе с автором погрузитесь в практическую разработку на JavaScript. Для этого необходимо иметь базовые знания HTML, CSS и JavaScript. Вебинар организован следующим образом: Создание структуры проекта, написание первых файлов. Разметка и стилизация игрового поля с помощью HTML и CSS. Основы работы с перспективой в CSS. Сохранение и сравнение выбранных карточек. Написание дополнительного функционала. Итоги, вопросы и ответы. Данный вебинар будет интересен тем, кто хочет изучить основы JavaScript в легкой и доступной форме без многочасового чтения документации. 5. Объектно-ориентированное программирование в JavaScript | ООП в JavaScript Автор — Георгий Клюковкин, Lead Software Engineer. Это видео поможет вам понять, в чем отличие ООП подхода к разработке в мультипарадигменном языке JavaScript от ООП подхода в классических объектно-ориентированных языках, как, например, Java. Вы узнаете, какими плюсами и минусами обладает ООП в JavaScript, а также, какие правила ООП мы можем в нём применять. Автор затрагивает следующие темы: Главные принципы ООП. Наследование vs Композиция. Объектно-прототипное наследование в JS. Функции-конструкторы и классы. Single responsibility principle. Вебинар будет полезен начинающим JavaScript разработчикам, либо тем, кто работает в другом направлении и при этом желает разобраться в особенностях ООП на JavaScript. 6. Пять обязательных алгоритмов для JavaScript разработчика. Автор — Тысячный Влад, Middle React.js / React Native Developer. Если Вы начинающий JavaScript разработчик и хотите разобраться в том, насколько глубоко нужно вникать в изучение алгоритмов и структур данных, как часто и какие алгоритмы нужно будет использовать в работе, хотите понять, как от правильного выбора алгоритма зависит скорость работы сайта, а также узнать, как оптимальность алгоритма влияет на скорость загрузки информации на сайте — тогда этот вебинар для Вас. В нем рассматриваются следующие темы: Что такое алгоритмы и структуры данных. Как правильно считать сложность алгоритма. Нужно ли знать все алгоритмы и как это влияет на ваш кошелёк (примеры из реальной жизни). 5 самых важных алгоритмов. Практика написания алгоритмов сортировок. Ответы на вопросы. 7. Подготовка к собеседованию по JavaScript в 2021. Автор —  Дмитрий Моисеев, Software Engineer at EPAM Systems. В вебинаре затрагиваются основные вопросы на собеседовании по JavaScript, которые вызывают больше всего непонимания, особенно у тех, кто перешел с другого языка программирования, а также у тех, кто не знаком с его “сложными” частями, такими как замыкания, прототипное наследование и особенности асинхронного выполнения кода. Автор затрагивает следующие темы: Типы данных и их преобразования. Области видимости и замыкания. Прототипное наследование. Асинхронное выполнение кода. Ответы на вопросы участников вебинара. Данный вебинар будет интересен тем, кто планирует проходить собеседование на позицию FrontEnd разработчика на уровень Junior или Middle Developer. Начинающим он не подойдет, так как в вебинаре не будут рассматриваться основы языка, а лишь его “острые углы”. 8. React и Redux на примере реального приложения. Автор — Александр Краковский, Software Engineer at EPAM. Данный вебинар поможет вам на реальном примере разобрать, как взаимодействуют и работают современные инструменты разработки — React и Redux. Вы сможете написать свое приложение, которое будет работать с реальным API. В ходе реализации программы будут выполнены следующие пункты: Установка зависимостей, настройка проекта; Создание базовых компонентов и подключение Redux; Настройка зависимостей для работы с запросами к серверу; Создание запросов и обработка данных через Redux; Запуск приложения, исправление возникших ошибок; Анализ проделанной работы. 9. Создание первого проекта на Angular Автор — Генрих Коваленко, FrontEnd Developer. В этом вебинаре вы познакомитесь со структурой и компонентами фреймворка Angular, а также создадите первый проект с использованием Angular CLI. На вебинаре рассматриваются следующие темы: Что такое Angular и в чем его отличие от других популярных фреймворков и библиотек. Angular CLI, его установка и использование в создании первого проекта. В чем назначение компонентов и как их применить для удобства поддержки кода в дальнейшем. Сервисы в Angular. Модули. Пайпы и их применение создание своих пайп. Директивы *ngFor и *ngIf Итоги. Вопросы ответы. Данный вебинар будет интересен тем, кто владеет языком JavaScript на базовом уровне и при этом хочет познакомиться с Angular для последующей работы с данным фреймворком. 10. Как стать React разработчиком Автор — Олег Мельничук, Full Stack JS Developer. React — библиотека JavaScript, которая уверенно держит позиции в мире веб-разработки на ряду с самыми востребованными фреймворками. На вебинаре затрагивается история возникновения React.js, после чего идет его сравнение с другими популярными веб-технологиями. Автор рассказывает, почему React — это хороший выбор для входа во FrontEnd. Вы узнаете, насколько нужен чистый JS и можно ли сразу учить React. Будет детально разобран Roadmap React разработчика: что можно пропустить на первых этапах, что лучше изучить детально, а на что не стоит тратить силы. Также, автор предоставляет перечень знаний и навыков, с которыми можно найти первую работу в качестве React Developer`a. Будет затронут вопрос дальнейшего развития — как с Frontend разработчика на React можно стать Full Stack или Mobile разработчиком. Данный вебинар будет интересен начинающим Frontend разработчикам, а также веб-разработчикам, которые планируют перейти на React или изучить его в качестве дополнительной технологии. Изучайте FrontEnd разработку на ITVDN!
10 крутих англомовних подкастів для програмістів

Автор: EnglishDom

80% всей информации в интернете, которая хоть немного касается программирования, написана на английском. И самые свежие новости и тренды всегда сначала выходят на английском, а уже потом переводятся на остальные языки. Хотите всегда быть в курсе? Онлайн-школа английского языка EnglishDom собрала для вас топ-10 англоязычных подкастов для программистов. Максимум полезной информации, интересные темы и обсуждение нюансов и секретов, о которых многие не знают. Итак, не будем долго рассусоливать. Поехали! Code Newbie   Частота публикаций: 1 эпизод в неделю Запущен в 2014 году Требуемый уровень английского: advanced Замечательный подкаст для тех, кто интересуется программированием, но не знает, с чего начать. В этом подкасте большое количество интервью с различными известными программистами и их историями успеха. Подкаст больше общеобразовательный, чем узконаправленный. Его будет интересно послушать и тем, кто просто интересуется, но не собирается заниматься программированием профессионально. Каждый эпизод знакомит новичка с разными особенностями разработки и анализа данных. Здесь вы найдете огромное количество советов, которые помогут определиться со сферами дальнейшего изучения языков программирования. Правда, английский здесь довольно сложный. Интервью дают носители языка, которые говорят быстро и не всегда внятно. Так что придется напрячься, чтобы понять абсолютно все. Software Engineering Daily   Частота публикаций: 1 эпизод в день Запущен в 2015 году Требуемый уровень английского: intermediate   Просто must have для разработчиков программного обеспечения. Здесь просто огромное количество полезной информации как для новичков, так и для Senior-разработчиков.  В среднем подкасты длятся полчаса-час и очень детально раскрывают один или несколько нюансов разработки. Кроме подкастов на сайте есть большое количество специализированных статей. Английский у лекторов почти сценический. Фразы проговариваются очень четко, темп вполне нормальный. Есть, конечно, большое количество специфической лексики, но даже для Junior’ов все вполне понятно. Talk Python To Me   Частота публикаций: 1 эпизод в неделю Запущен в 2015 году Требуемый уровень английского: upper-intermediate   Если вы изучаете Python, то этот подкаст снабдит вас огромным количеством полезной информации. Здесь вы узнаете, как правильно изучать Python, чтобы не упустить ничего важного, как использовать все нюансы архитектуры. Это огромная база знаний с более чем 260 часами записей на тему Python. Особенно рекомендуем подкаст разработчикам с уровнем Middle. По лексике английского никаких сложностей, но нужно привыкнуть к речи лекторов. Они говорят довольно бегло, так что здесь потребуется высокий навык восприятия речи на слух. The Cynical Developer   Частота публикаций: 2 эпизода в месяц Запущен в 2016 году Требуемый уровень английского: advanced   «Циничный разработчик» — это отличный подкаст, где о разработке рассказывают с юмором и иронией. Он будет полезен не только кодерам, но также менеджерам проектов и тимлидам. Очень много информации о комплексном процессе разработки, ведению проектов, работе в команде. Также авторы рассказывают о популярных тенденциях и трендах в разработке. Что касается английского, то здесь очень беглый язык. Некоторые слова и фразы произносятся слитно, редуцируются отдельные звуки, темп речи очень высокий. Полезной информации просто куча, но чтобы ее получить, нужен уровень английского не ниже advanced. Coding Blocks   Частота публикаций: 2 эпизода в месяц Запущен в 2013 году Требуемый уровень английского: intermediate-advanced   Еще один хороший подкаст для разработчиков ПО. Широченный архив полезных материалов буквально по всем темам: от анализа big data до всех тонкостей разработки приложений на iOS и Android. Также есть подкасты на темы личной эффективности программиста, обзоры полезных каналов, конференций и материалов для обучения. Очень удобная система тегов, по которой можно найти все эпизоды на интересующую вас тему. Английский здесь несложный, но все зависит от конкретного лектора. Одни говорят предельно понятно, а другие — бегло и смазано. Поэтому нужно смотреть по каждому конкретному эпизоду. Front End Happy Hour   Частота публикаций: 3 эпизода в месяц Запущен в 2016 году Требуемый уровень английского: intermediate   А вот и полезности для фронтенд-разработчиков подъехали. Авторы обсуждают новые инструменты, полезные для верстальщика, делятся новыми библиотеками, рассматривают распространенные проблемы и их решения. Тонны информации для веб-разработчиков. Кстати, недавно они отпраздновали свой 100-й выпуск, с чем их и поздравляем. Речь авторов довольно быстрая, но у них очень четкая артикуляция, поэтому в целом подкаст воспринимается очень хорошо. Test and Code   Частота публикаций: 1 эпизод в неделю Запущен в 2015 году Требуемый уровень английского: upper-intermediate   Авторы цепляют большое количество тем, среди которых тестирование, разработка программного обеспечения, программирование на Python и много связанных вопросов и проблем. Базы данных, автоматизация, постоянная интеграция, пирамида тестирования, TDD — и это только небольшая часть информации, которую вы сможете получить. Очень годный подкаст, который особенно хорошо зайдет Python-разработчикам. Но иногда бывает ужасный звук, который жутко мешает восприятию. Лексика английского довольно специализирована, поэтому для абсолютных новичков не подойдет. Learn to Code With Me   Частота публикаций: 2 эпизода в месяц Запущен в 2016 году Требуемый уровень английского: intermediate   Еще один подкаст для новичков. Авторы канала реально позаботились о них, потому что здесь собрана уйма действительно полезных материалов для Junior’ов в разных отраслях программирования. Будет очень полезным для самоучек, которые изучают программирование или веб-дизайн самостоятельно. Язык подкаста довольно понятный, но самое главное — вместе с каждым выпуском есть ключевые моменты в текстовом формате, которые можно проработать после или прямо во время прослушивания. Так можно ознакомиться с основной лексикой и терминологией. Fragmented   Частота публикаций: 1 эпизод в день Запущен в 2015 году Требуемый уровень английского: intermediate   Отличный подкаст для разработчиков мобильных приложений на Android, в котором обсуждают возможности и особенности самой платформы, ее инструментов, паттернов и практик, с помощью которых можно превратить хорошее приложение в идеальное. Авторы сами активно занимаются разработкой приложений, поэтому обсуждают только те моменты, которые успели оценить на практике. Большинство лекторов говорят с акцентом, что усложняет понимание материала. НО лексика вполне понятная и если привыкнуть к акцентам, можно почерпнуть много полезного. Soft Skills Engineering   Частота публикаций: 1 эпизод в неделю Запущен в 2016 году Требуемый уровень английского: intermediate   Этот подкаст больше не про разработку или отдельные инструменты программиста. В нем рассказывают, как развиваться, чтобы быть грамотным специалистом. Тут много полезной информации про методики обучения программированию, организацию времени и рабочего пространства. Рекомендуем этот подкаст всем разработчикам, вне зависимости от сферы и уровня знаний. Английский подкаста просто отличный. Несложный, вполне себе понятный и хорошо артикулированный. Так что можно его попробовать понять даже с уровнем pre-intermediate, но лучше все же intermediate.   Конечно, еще есть большое количество полезных подкастов, которые мы здесь не упомянули. Выбирайте, какие нравятся вам больше всего, и слушайте с удовольствием. Учите английский вместе с EnglishDom и пусть код всегда будет идеальным. 
Гарний код: чому він такий важливий?

Автор: Редакция ITVDN

Красивый код — не просто абстрактное понятие, а вполне реально существующая вещь в среде программистов. Научившись писать красивый код, вы значительно сэкономите своё (и чужое) время, а ваши программы станут работать быстрее и стабильнее. Как научиться писать красивый код и каким нюансам стоит уделить внимание — узнаете в этой статье. Почему так важно писать красивый код? Код — штука тонкая, в которой эстетика и полезность тесно связаны, как в архитектуре. Полезный, но не эстетично выглядящий код будет трудночитаемым и в результате менее эффективным, чем мог бы быть. Каким образом? Трудночитаемый код сложно корректировать и тестировать возможные решения, поэтому он отнимает больше времени на корректировку, чем обычный код. Чистый код создан для людей, поэтому другие программисты, которые будут читать его, будут вам очень благодарны за красивый код. Благодаря чистому коду поиски одного бага могут сократиться с нескольких часов до нескольких минут, а программа будет работать стабильнее и не выдавать сюрпризов. Однако овладеть мастерством написания чистого кода с наскока не получится — до момента написания первого элегантного кода, вызывающего восхищение коллег, вы напишите ещё десяток не самых красивых кодов, от которых будут плеваться. Впрочем, если вы немного измените мышление и овладеете несколькими навыками, то успехи у вас будут значительно лучше, и к написанию красивого кода вы придёте значительно быстрее. Для начала определимся, как вообще научиться писать красивый код, и какие знания нужны для этого, а затем — с навыками, которые необходимо будет развить. Как научиться писать чистый код?  Прежде чем приступить к написанию красивого кода, запомните два основных принципа, которые вытекают из прошлой части статьи: Красивый код должен быть легко читаемым и понятным для других программистов. Красивый код должен работать, а если он не работает — легко фикситься. Для того, чтобы соответствовал этим требованиям, он должен быть коротким, а функции — линейными. Таким образом, при написании чистого кода вы должны ориентироваться на эти принципы. И постоянно практиковаться: пишите код каждый день, и каждый раз пытайтесь написать наиболее лучший вариант. Со временем у вас начнёт получаться. Не забудьте почитать книгу Clean Code под авторством Роберта Мартина. Эта книга — настольная библия для программистов, которые стремятся к совершенному коду. На 900 страницах расписано всё, что следует знать программисту, который стремится к чистому коду. Во время чтения книги можете также зайти на Хабру или другие сайты с полезными для прогеров статьями. Так вы сможете узнать ещё больше о чистом коде и позже закрепить свои знания практикой. Также вы можете пройти обучение по видео курсам ITVDN. Авторы видео курсов – сертифицированные разработчики. Они помогут вам научиться писать хороший код. Нужно ли изучать алгоритмы и паттерны? Изучение алгоритмов — дело ваше, но запоминание паттернов является обязательным для программистов, как изучение таблицы умножения для детей. Без паттернов найти решение типичной проблемы будет трудно, поскольку не будет готового решения. Впрочем, это не значит, что вы всегда должны использовать паттерны в каждой непонятной ситуации, иногда они не смогут помочь и вам придётся продумывать самостоятельное нестандартное решение, или обращаться за помощью к старшим коллегам. Но само изучение паттернов существенно упростит вам жизнь. Для желающих начать изучение паттернов рекомендуем великолепный курс Александра Шевчука. Изучение алгоритмов — чуть более глубокая сторона программирования. Сам алгоритм — это записанные в определённой последовательности команды, которые должны решить стоящую перед ними задачу. Если вы решили взяться за их изучение, то вам нужно не только знать сами алгоритмы, но и уметь их выводить, иначе от знаний не будет толку. Если вы решили изучать алгоритмы, то рекомендуем обратиться к школьному курсу информатики и статьям для программистов, где подробно рассказывают об алгоритмах. Если в статье вы встретили упоминания как минимум трёх основных видов алгоритмов (линейный, разветвлённый и циклический) — то вы на верном пути. Хорошим вариантом для старта будет статья Ворожцова А. В. «Что такое алгоритм?», затем знания можно углубить изучив курс Алгоритмы и структуры данных. С общими требованиями к красивому коду и необходимыми знаниями определились, теперь перейдём к навыкам. Какие полезные привычки необходимо завести? Для написания чистого кода необходимо развить следующие навыки: 1) Уделять внимание форматированию кода и стараться делать его как можно более линейным. Это сделает код более понятным и элегантным. Не стоит гнаться только за производительностью, если не хотите получить знаменитый «индусский код»: 2) Короткие методы и функции. Чем короче — тем понятнее, чем понятнее — тем лучше. Слишком длинные функции запутают любого программиста и он потратит кучу времени, пытаясь разобраться в функциях. Запомните золотое правило: одна функция — одно действие. 3) Удобные названия для функций. Это кажется нелепым, но придумать действительно хорошее название для функции — та ещё задачка, по сложности сравнимая с придумыванием имени для вашего персонажа в MMORPG. Совет, который может помочь, — при наименовании классов используйте существительные, а для методов используйте глаголы. Это сильно упростит понимание кода. Для примера можете взглянуть на два кода ниже и сказать, какой из них выглядит более понятно: первый (до переделывания) или второй (после).   До После Как видно на примере, в первом варианте код не так плох, но из-за непонятных названий труден для понимания. Во втором варианте он разбит на более мелкие блоки, а правильно придуманные названия («sendTOmAILsERVER, Client, Message) помогают понять его с первого взгляда.   4) Грамотная обработка ошибок. Даже если вы по каким-либо причинам не можете написать короткие функции и красивый код, вы всё ещё можете исправить ошибки. Ни одна программа не застрахована от сбоев, поэтому создать идеально работающую прогу не получится. Однако вы можете воспользоваться методом try-catch-finally. Сущность этого метода заключается в эдакой «страховке» от ошибок. При использовании этого метода, вы должны будете создать 3 блока: try, catch и finally. Затем, при запуске команды, она будет выполняться в блоке Try. Если что-то пойдёт не так, то она попадёт в блок catch, где вы сможете поймать ошибку и исправить её. Если же ошибки не было, или вы её исправили, то команда продолжит выполнение в блоке Finally, где и будет завершена. Такой метод является универсальным для поиска и исправления ошибок и его может написать даже джун. Это, кстати, будет лучше и элегантнее, чем грузить код лишними функциями и превращать его в лапшу. Написание красивого кода — дело непростое и требующее практики, но освоив эту методику, вы станете ещё на один шаг ближе к совершенству и завоюете больше уважения от коллег, а также сможете считаться уже более опытным программистом. Если вы хотите овладеть искусством написания красивого кода, изучайте программирование на ITVDN. Опытные наставники разложат всё по полочкам и после окончания обучения вы научитесь писать красивый чистый код. При условии конечно, если будете прикладывать и свои усилия.
Огляд елементів у HTML5

Автор: Редакция ITVDN

Введение HTML5 – последняя версия языка разметки. У HTML5 есть семантическая структура. В пятой версии языка ввели определенные средства для управления – они дают возможность сэкономить Ваше время при разработке веб-сайтов. В этой статье мы рассмотрим упомянутые средства управления, а также функции в HTML5. Прежде чем начать, необходимо установить Visual Studio. Мы можем включить опцию HTML в целевом разделе: Tools -> Options -> Text Editor -> HTML. Разметка HTML5          Объявление DOCTYPE: <!DOCTYPE html> Объявление кодировки символов: <meta charset="utf-8" /> <!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title>Sibeesh Passion wish you a happy new yeartitle> head> <body> Welcome to Sibeesh Passion body> html> Структура HTML5 Как уже говорилось, у HTML5 есть семантическая структура. Это уменьшает усилия UI-разработчика. На изображении объясняется эта структура. До применения HTML5: После: Исходя из рисунка, понятно, что в HTML5 доступны такие элементы: Header Nav Section Aside Article Footer Добавление собственных элементов Вы можете создать собственный элемент, используя стили. Разметка должна выглядеть таким образом: <!DOCTYPE html> <html> <head>     <title>Your own element title>     <script>document.createElement("yourelement")script>     <style>         yourelement {             display: block;         }     style> head> <body>     <div>         Normal element     div>     <yourelement>My elementyourelement> body> html> Вы создали новый элемент «yourelement». Новый синтаксис Атрибута В HTML5 введен новый синтаксис атрибута: Empty Unquoted Double Quoted Single Quoted Можно присвоить текстовое значение тега input type таким образом:   <input type="text" value="Sibeesh" disabled>     <input type="text" value=Sibeesh>     <input type="text" value="Sibeesh">     <input type="text" value=’Sibeesh’> Примените CSS Так же, как  к обычным элементам HTML, так и к новым семантическим элементам можно применять стили. footer{border:1px solid;} Предыдущий стиль будет применен ко всем footer, доступным на странице. Не рекомендуется использовать верхний регистр (Footer, FOOTER) в названии элементов. Обзор элемента Canvas Если Вы хотите создать определённый графический контент, элемент Canvas,  то Вам нужно: Объявление Canvas     <canvas id="canvasExample" width="200" height="100"             style="border:1px solid #ccc;">         Bad Luck, It seems your browser won't support :(     canvas> Реализация Canvas var c = document.getElementById("canvasExample"); //Get the element var ctx = c.getContext("2d"); // Get the context for the element var grd = ctx.createLinearGradient(0, 0, 200, 0); //Create the line grd.addColorStop(0, "blue"); // Apply the colors grd.addColorStop(1, "white"); // Apply the colors ctx.fillStyle = grd; //apply the style ctx.fillRect(10, 10, 150, 80); // Fill Здесь мы применили градиент к canvasExample. Введение в SVG Масштабируемая векторная графика (Scalable Vector Graphics) – графика для web типа canvas. Одно из различий между canvas и SVG  то, что SVG поддерживает обработчик событий, а элементы canvas – нет. Объявление SVG     <canvas id="canvasExample" width="200" height="100"             style="border:1px solid #ccc;">         Bad Luck, It seems your browser won't support :(     canvas> Полный вариант HTML-документа: <!DOCTYPE html> <html> <body>     <table style="border:1px solid #ccc;">         <tr style="border:1px solid #ccc;">             <td style="border:1px solid #ccc;">                 <h2 style="text-align:center;">Canvash2>                 <canvas id="canvasExample" width="200" height="100"                         style="border:1px solid #ccc;">                     Bad Luck, It seems your browser won't support :(                 canvas>             td>             <td style="border:1px solid #ccc;">                 <h2 style="text-align:center;">SVGh2>                 <svg width="200" height="200">                     <circle cx="100" cy="100" r="50"                             stroke="green" stroke-width="4" fill="yellow" />                     Bad Luck, It seems your browser won't support :(                 svg>             td>         tr>     table>     <script>         var c = document.getElementById("canvasExample"); //Get the element         var cctx = c.getContext("2d"); // Get the context for the element         var grd = ctx.createLinearGradient(0, 0, 200, 0); //Create the line         grd.addColorStop(0, "blue"); // Apply the colors         grd.addColorStop(1, "white"); // Apply the colors         ctx.fillStyle = grd; //apply the style         ctx.fillRect(10, 10, 150, 80); // Fill     script> body> html> Источник: http://www.c-sharpcorner.com/UploadFile/65794e/html-5-elements-in-a-look-part-1/         http://www.c-sharpcorner.com/UploadFile/65794e/html-5-elements-in-a-look-part-2/
Що таке патерни проєктування у програмуванні

Автор: Влад Сверчков

Що таке патерн (шаблон) проєктування. Коли використовують шаблони. Якими бувають патерни проєктування. Породжуючі. Структурні. Патерни поведінки. Як обрати шаблон? Висновки. Програмісти-початківці завжди приходять до точки, коли їхній код перетворюється на “спагеті”. Його важко читати, він містить масу самоповторень, зайвих функцій, а додавання нового функціоналу перетворюється на десяте коло пекла. Один із найкращих засобів запобігання цьому – використовувати патерни проєктування (Design Patterns). Чи є це срібною кулею, які переваги та недоліки патернів існують, і які з них необхідно знати розробникам? Відповіді розбираємо нижче. Що таке патерн (шаблон) проєктування? Патерни – це типові архітектурні рішення проблем, котрі часто зустрічаються під час розроблення ПЗ. Їхня інша назва – шаблони, і що цікаво – людство дуже часто оточує себе шаблонами у повсякденному житті: однакові гнізда розетки та форми вилок у приміщеннях – універсальне рішення для електроживлення; виделки та ложки – інструменти споживання майже будь-якої їжі; чашки – ємності для розміщення будь-якої рідини і так далі. Людина завжди прагне спростити традиційну діяльність, і це не могло обійти стороною програмування. Ідеї створення універсальних правил для якісної розробки існували ще до 90-х років минулого століття, але дійсно проривною стала праця "Design Patterns: Elements of Reusable Object-Oriented Software" (1994) авторства Еріха Ґамма, Річарда Гелма, Ральфа Джонсона та Джона Вліссідеса, які іменують себе як "Банда чотирьох" (Gang of Four, GoF). У книзі описано 23 патерна та їхнє застосування в об'єктно-орієнтованому дизайні. Ця праця стала фундаментальною і тепер патерни gof складають кістяк багатьох обговорень якісного коду. Коли використовують патерни В розробці шаблони використовують при необхідності приведення коду до наступних критеріїв: Читабельність – інші розробники мають без складнощів розуміти написане. Масштабованість – легкість у створенні нового функціоналу. Підтримуваність – оновлення кодової бази має проходити якомога плавніше. Також вони здатні підвищити швидкість і продуктивність розробника – патерни це дійсно дозволяють. Вони гарно справляються і з наступними задачами: зменшення кількості потенційних помилок та вузьких місць; спрощення рефакторингу; зменшення технічного боргу; покращення комунікації девелоперів з іншими програмістами, проєктними менеджерами, власниками тощо. Необхідність використати шаблони проектування зростає разом зі збільшенням кодової бази, особливо при комерційному розробленні – коли створюване ПЗ має приносити прибуток. Важливо пам’ятати, що використання патернів інколи є геть недоречним. Подекуди воно може значно ускладнити читабельність, громіздкість і масштабованість коду. Наприклад, нескладний функціонал, який нечасто використовується і займає мало місця в коді, не потребує pattern-втручання. А от репетативний код, що вирішує класичні задачі (сортування, перебір даних тощо) – ідеальний претендент на застосування шаблону. Аби не помилитися спершу з’ясуйте контекст вашої проблеми, а вже потім обирайте патерни програмування, які найкраще задовольняють вимогам. Якими бувають патерни проєктування У своїй книзі GoF виділяють три великі сімейства: Сімейство Короткий опис Породжуючі патерни або Creational Patterns Надають найкращі способи створення об'єктів. Вони абстрагуються від процесу конкретизації і роблять вашу систему незалежною від створення, компонування та представлення її об'єктів. Популярні приклади: “Абстрактна фабрика” (Abstract Factory), “Одинак” / “Одиночка” (Singleton), “Прототип” (Prototype), “Фабричний метод” (Factory Method). Структурні патерни або Structural Patterns Фокусуються на композиції об’єкту. Допомагають переконатися в тому, що зміна частини системи не потягне за собою необхідність змін в інших її складових. Популярні приклади: “Проксі” (Proxy), “Адаптер” (Adapter), “Компонувальник” (Composite), “Фасад” (Facade). Патерни поведінки або Behavioral Patterns Зона відповідальності – алгоритми та обмін інформацією між об’єктами. Популярні приклади: “Відвідувач” (Visitor), “Ітератор” (Iterator), “Ланцюжок обов’язків” (Chain of Responsibility), “Стратегія” (Strategy). Розглянемо більш детально деякі з них. Породжуючі Породжуючі патерни – це надійні помічники у створенні об’єктів таким чином, аби в майбутньому з ними було максимально легко працювати. Дамо короткий опис деяких шаблонів: Патерн Одинак / Сінглтон забезпечує наявність лише одного екземпляру класу з глобальною точкою доступу. Singleton поширений в задачах конфігурацій або логування в застосунках, де потрібен єдиний контрольований доступ. Шаблон Прототип дозволяє створювати нові об'єкти шляхом копіювання існуючих екземплярів. Використовується Prototype в ситуаціях, коли створення об'єкта надто дороге, наприклад, при клонуванні складних або ресурсоємних об'єктів. Фабричний метод визначає інтерфейс для створення об'єктів, але дозволяє підкласам самостійно визначати тип створюваних об'єктів. Fabric Method корисний у багатофункціональних застосунках, де класи повинні мати можливість вибирати тип об'єктів, наприклад, при роботі з різними форматами документів, системами онлайн платежів тощо. Абстрактна фабрика визначає інтерфейс для створення сімейств пов'язаних об'єктів без вказівки їх конкретних класів. Використовують Abstract Factory для створення різних компонентів інтерфейсу користувача, які повинні працювати разом і забезпечувати єдиний стиль (світла / темна тема вебсайту тощо). Розглянемо приклад на патерні Singleton. Уявіть собі просту програму – музичний плеєр. Він дозволяє користувачам відтворювати музичні файли. Однак водночас має працювати лише один екземпляр плеєра – можливість відкриття декількох одночасно повинна бути недоступна. Цього можна досягти за допомогою шаблону Singleton. Простий приклад коду мовою C#: public class MusicPlayer {             private static MusicPlayer _instance;             private MusicPlayer()             {              // Ініціалізуємо музичний плеєр (наприклад, завантажуємо плейлисти)             }             public static MusicPlayer Instance             {             get             {             if (_instance == null)             {                        _instance = new MusicPlayer();             }             return _instance;             }             }             public void PlaySong(string songPath)             {             // Запустити пісню             }             public void PauseSong()             {             // Поставити на паузу             }             public void StopSong()             {             // Зупинити відтворення пісні             } } // Отримуємо екземпляр MusicPlayer MusicPlayer player = MusicPlayer.Instance; // Використовуємо функціонал MusicPlayer player.PlaySong("C:\\Users\\yourUsername\\Music\\mySong.mp3"); player.PauseSong(); player.StopSong(); Щоразу як в різних ділянках проєкту вам треба буде створювати екземпляр плеєру для відповідної взаємодії, ви завжди працюватимете лише з одним і тим самим екземпляром, уникаючи дублікації. Якщо ви програмуєте мовою сі шарп, детально розібрати популярні патерни проєктування C# з прикладами ви можете за посиланням. Структурні З короткого опису в таблиці легко дійти висновку, що структурні патерни дозволяють сформувати надійну, масштабовану та підтримувану архітектуру проєкту. Коротке знайомство: Проксі забезпечує об'єкт-посередник для контролю доступу до іншого об'єкта. Зазвичай шаблон Proxy використовують для реалізації “лінивого” завантаження, коли об'єкт створюється або ініціалізується лише при зверненні до нього (наприклад, завантаження картинок з високою роздільною здатністю). Адаптер дозволяє об'єктам з несумісними інтерфейсами працювати разом. Застосовується патерн Adapter для інтеграції нових компонентів в існуючу систему без зміни її коду. Підходить для використання нової бібліотеки у старому застосунку. Компонувальник використовується для ієрархічного компонування об'єктів для подальшої роботи з ними як з єдиним об'єктом. Використовується для створення деревоподібних структур, як-от файлові системи або GUI, де кожен вузол може бути як простим, так і Composite об'єктом. Фасад (Facade) надає спрощений інтерфейс для взаємодії зі складною системою або набором класів. Він зменшує складність роботи з підсистемами і надає користувачам єдиний вхідний інтерфейс для виконання рутинних операцій. Вивчити саме структурні патерни проєктування C# (з прикладами) ви можете за посиланням. Поведінкові Патерни поведінки в першу чергу визначають зв’язки між об’єктами і те, як вони здійснюють обмін інформацією. Наприклад: Патерн Відвідувач (Visitor) дозволяє додавати нові операції до об'єктів без зміни їхніх оригінальних класів. Використовується для взаємодії з об’єктами зі складною структурою, коли внесення додаткової логіки в оригінальні класи невиправдано ускладнює код. Ітератор / Iterator надає зручний механізм послідовного та простого доступу до елементів колекції, незважаючи на складність її побудови. Даний патерн поведінки популярний при обході елементів контейнерів, як-от списки або масиви – він надає універсальний інтерфейс для різних типів колекцій. Ланцюжок обов’язків або ж патерн Chain of Responsibility дозволяє передавати запит ланцюжком обробників, поки один з них не обробить запит. Незамінний при обробці запитів на сервері, де кожен обробник може передати запит наступному обробнику в ланцюжку: перевірка при авторизації на сайті, оброблення подій у GUI тощо. Для входу в патерни проєктування книга від Gang of Four буде гарною точкою відліку. Ви познайомитеся з класикою та академічним розкриттям теми, використовуючи патерни gof. Якщо ж ви хочете збагатити свої знання шаблонів, але віддаєте перевагу мові Java, рекомендуємо відео курс “Патерни проектування Java”. Як обрати патерн? Спочатку ви маєте проаналізувати задачу – для більшої зрозумілості виконайте її декомпозицію, розбивши на декілька складових. При цьому використовуйте системний підхід: прорахуйте, як ваше рішення вплине на весь проєкт, які елементи воно зачепить зараз, і який вплив воно матиме на додавання нового коду. Якщо ви вже працюєте в ІТ-компанії, ваші колеги, тімлід або архітектор можуть підказати вам доцільність використання того чи іншого патерну, розкрити нюанси вже існуючої архітектури, кодового стилю та багато іншого. Лише після ретельного аналізу можна переходити до підбору шаблону, зважаючи на усі переваги та недоліки. До речі, в цих задачах гарними помічниками будуть безкоштовні AI-асистенти на кшталт ChatGPT, Gemini та ін. Також не забувайте про використання інших методик покращення кодової читабельності, масштабування й чистоти: SOLID принципи – вони регламентують 5 основних засад створення структурованого, якісного коду. Нещодавно ми проводили вебінар, на якому розбирали кожен принцип в деталях, запрошуємо до перегляду! А якщо вас цікавить прикладний характер SOLID принципів на Java, можете пройти даний відео курс. GRASP (General Responsibility Assignment Software Patterns) – патерни для об’єктно-орієнтованого проєктування. Вони не мають вираженої структури і носять більш абстрактний характер, аніж патерни gof. DRY (Don’t Repeat Yourself) – головна ідея даного принципу полягає у створенні коду, який не матиме дублікацій в проєкті. KISS (Keep It Simple, Stupid) – регламентує написання якомога простішого коду, аби його можна було легко читати і розуміти. Рефакторинг – повернення до вже написаного коду з метою його покращення без зміни функціональності. Інші техніки, що залежать від проєктів. Висновки Патерни грають ключову роль в сучасному розробленні. Вони акумулюють в собі найкращі практики створення кодової бази таким чином, аби досягнути максимальної легкості та ефективності розроблення, особливо на великих проєктах. Звісно, не завжди їхнє використання є доречним – потрібно аналізувати задачі і продумувати наслідки застосування того чи іншого шаблону, аби не отримати величезну валізу без ручки. Розвивайте вашу експертизу в області патернів – це win-win стратегія. З одного боку перед працедавцями ви постанете як досвідчений та висококваліфікований спеціаліст, а з іншого – ваші програмні рішення матимуть елегантний характер і відзначатимуться легкістю в читанні, підтримці та масштабуванні. Чи використовуєте ви патерни в своїй розробницькій діяльності? Можливо, тільки вивчаєте? Залишайте в коментарях ваші відповіді!
Найкращі відео курси, статті та вебінари ITVDN у 2023 році

Автор: Влад Сверчков

Привіт, друзі! Бурхливий та насичений подіями 2023 рік вже позаду. Багато українськомовних курсів, статей та інших активностей на ITVDN вже у фазі активного створення, а поки можна поглянути на все найкраще, що було опубліковано в минулому році! Пропонуємо до вашої уваги ТОП-10 відео курсів ITVDN, вебінарів та статей за 2023 рік. Найкращі курси У 2023 році ми випустили цілих 30 нових відео курсів українською мовою за такими напрямками, як FrontEnd, Python, Java, C#/.NET, PHP, Unity / Game розробка, мобільна розробка на Android тощо.  ТОП-10 найкращих нових відео курсів у 2023 (за кількістю переглядів): Python Базовий. JavaScript Стартовий. HTML5 & CSS3 Стартовий. React Базовий. Python Стартовий. Docker. Основи використання Git. SQL Базовий. TypeScript. Основи адміністрування Windows Server. Найкращі вебінари У 2023 році ми провели 73 вебінари, серед яких були огляди ІТ-спеціальностей, поради з підготовки до співбесіди та отримання першої роботи в ІТ, а також практичні вебінари з різних мов програмування та технологій. ТОП-10 вебінарів 2023 року за кількістю переглядів та вподобайок: Kotlin – мова Full Stack розробника. Автор – Григор Артем, інженер-дослідник. Пишемо веб-сайт на Django за допомогою ChatGPT. Автор – Лазорик Михайло, Software developer. Пишемо гру Танки 2D на Pygame. Автор – Догонов Дмитро, Python Developer. Spring Cloud: інтеграція з зовнішніми веб-сервісами на прикладі Feign Client. Автор – Боговик Максим, консультант з Java стеку технологій. Математика для програміста (Частина 1 та Частина 2). Автор – Ольга Задорожна, Software Engineer у Meta (Facebook). Microsoft Azure – що це? Огляд можливостей і приклади застосування. Автор – Олег Заревич, DevOps інженер. Redux vs React Query. Що краще обрати для проєкту? Автор – Тисячний Влад, Middle React.js / React Native Developer. Розробляємо блог на Django з нуля. Автор –  Окаль Юрій, Senior BackEnd Developer at TanSoft Canada. PyCharm з нуля. Найкраща IDE для Python розробки. Автор – Костянтин Зівенко, BackEnd Developer з Чорногорії (світчер у 35+ років), має 3 вищі освіти та досвід роботи на керівних посадах у великих компаніях (максимальна кількість підлеглих – близько 10 000 осіб). Як стати розробником після 35 років. Автор – Валевський Андрій, Java Software Engineer, ментор з Java. Найкращі статті У 2023 році ми опублікували 8 статей, ось п’ятірка, яка користується найбільшою популярністю серед читачів: Що повинен знати FrontEnd розробник у 2023 році. Яку мову програмування варто вчити першою. Як стати тестувальником, QA, QC у 2023 році? Що варто знати та вміти, аби отримати роботу в ІТ-компанії? ТОП-10 телеграм-каналів для пошуку роботи в IT. Хто такий DevOps інженер? Обов’язки, інструменти та ЗП. Збагачуйте себе знаннями та навичками на ITVDN! Нехай щастя буде вашим вірним супутником у новому році!
Notification success