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

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

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

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

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

Результати пошуку за запитом: mvc4 5*
250+ питань з Java для Junior, Middle, Senior

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

Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 1 февраля 2021 года. Оригинальная версия на украинском языке доступна по ссылке Редакция DOU.ua обратилась к СТО и опытным специалистам, которые проводят интервью  по направлению Java, о том, какие теоретические вопросы задают и какие задачи и задания предлагают решить кандидатам. Ведь, готовясь к техническому собеседованию, важно иметь четкий план. На основе полученных ответов составлена эта подборка вопросов с градацией по уровню специалиста. Надеемся, этот список вопросов станет своеобразным путеводителем, который поможет получить желаемую должность. Junior Общие 1. Какие знаете шаблоны проектирования? Расскажите о двух шаблонах, которые использовали в работе.   Java Core 2. Какие есть типы данных в Java? 3. Чем отличается объект от примитивных типов данных? 4. В чем разница передачи параметров по ссылке и по значению? 5. Что такое JVM, JDK, JRE? 6. Зачем используют JVM? 7. Что такое bytecode? 8. Какие признаки JavaBean? 9. Что такое OutOfMemoryError? 10. Что такое стектрейс? Как его получить? 11. Назовите все методы класса object. 12. В чем отличие между try-with-resources и try-catch-finally при работе с ресурсами? 13. Что такое конструкторы? Какие типы знаете? 14. Что такое побитовые операции? 15. Объекты каких стандартных классов immutable в Java? 16. Дайте краткую характеристику immutable object. Зачем они нужны? 17. Как создать immutable object? 18. Какие преимущества immutable object перед обычными объектами? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Стартовый (урок 1, урок 2, урок 5), Java Базовый (урок 1, урок 2, урок 8, урок 9).   ООП 19. Что такое ООП? Назовите принципы с примерами. 20. В чем преимущества ООП перед процедурным программированием? 21. В чем заключается главная особенность ООП? 22. Расскажите, какие преимущества мы получаем при использовании ООП? 23. Расскажите, какие есть недостатки в ООП? 24. Расскажите о принципе наследования в ООП? Зачем он нужен? 25. Дайте определение принципа полиморфизма в ООП? Как работает полиморфизм? 26. Что такое статический и динамический полиморфизм? 27. Дайте определение принципа абстракции в ООП. 28. Какие элементы языка отвечают за инкапсуляцию? 29. Какие элементы языка отвечают за наследование? 30. Какие элементы языка отвечают за полиморфизм? 31. Что такое SOLID? Приведите примеры. 32. Что такое перегрузки (overloading) метода? 33. Что такое переопределение (override) метода? 34. Что такое класс, объект, интерфейс? 35. Что такое класс POJO? Приведите пример такого класса. 36. Какие элементы могут содержать класс? 37. Дайте определение объекта. 38. Расскажите о наследовании в Java. Какие особенности использования ключевого слова super? 39. Что такое сигнатура метода? Приведите примеры правильных и неправильных сигнатур. 40. Можно ли в конструкторе применять return? 41. Можно ли в конструкторе выкинуть исключение (exception)? 42. Из каких элементов состоит заголовок класса? Напишите пример. 43. Из каких элементов состоит заголовок метода? Напишите пример. 44. Создайте в объекте-наследнике конструктор по умолчанию, если в базовом классе он не определен (но определен другой конструктор). 45. Когда применяется ключевое слово this? 46. Что такое инициализатор? 47. Для наследования класса public class Child extends Parent напишите порядок инициализации объекта. 48. Какие знаете отношения между классами (объектами)? 49. Какие ассоциативные связи между объектами вы знаете? 50. Что такое модификаторы доступа в Java? Назовите их. Для чего используются? 51. Назовите основную особенность статических переменных и методов. 52. Какие основные ограничения действуют на статические переменные и методы? 53. Что означает ключевое слово static? Может ли статический метод быть переопределенным или перегруженным? 54. Может ли метод быть статическим и абстрактным одновременно? 55. Можно ли использовать статические методы внутри обычных? Наоборот? Почему? 56. Что означает ключевое слово final? 57. Что такое abstract? Абстрактный класс? Абстрактный метод? 58. Что такое interface? Может ли быть final interface? 59. В чем разница между абстрактным классом и интерфейсом в Java? 60. Где можно инициализировать статические поля? 61. Что такое анонимные классы? 62. Что такое примитивные классы? 63. Что такое класс «обертка» (wrapper)? 64. Что такое Nested class? Когда используется? 65. Какие модификаторы доступа могут быть у класса? Ответы на некоторые из этих вопросов вы можете найти в видео курсах Java Базовый (урок 1-4, урок 6, урок 7, урок 9), SOLID принципы в Java.   Библиотеки и стандарты 67. Что такое Hibernate? В чем разница между JPA i Hibernate? 68. Что такое каскадность? Как она используется в Hibernate? 69. Может ли entity-класс быть абстрактным классом? 70. Что такое entity manager? За что отвечает? 71. Что такое класс Assert? Зачем и как его использовать? Ответы на некоторые из этих вопросов вы можете найти в видео курсе JDBC & Hibernate.    String 72. Дайте характеристику String в Java. 73. Какие есть способы создания объекта String? Где он создается? 74. Как сравнить две строки в Java и/или отсортировать их? 75. Предложите алгоритм преобразования строки в знак. Напишите соответствующий код. 76. Как превратить строку в массив байтов и обратно? Напишите соответствующий код. 77. Что такое строковый пул и зачем он нужен? 78. Какие GOF-шаблоны применяются в строковом пуле? 79. Как разделить строку на части? Напишите соответствующий код. 80. Почему массив символов лучше, чем строка для хранения пароля? 81. Какая разница между String, StringBuffer и StringBuilder? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 5).   Enum 82. Дайте краткую характеристику Enum в Java. 83. Может ли Enum реализовывать (implement) интерфейс? 84. Может ли Enum расширить (extends) класс? 85. Можно ли создать Enum без экземпляров объектов? 86. Можем ли мы переопределить метод toString() для Enum? 87. Что будет, если не будем переопределять метод toString() для Enum? 88. Можем ли мы указать конструктор внутри Enum? 89. В чем разница между == и equals()? 90. Что делает метод ordinal() в Enum? 91. Можно ли использовать Enum с TreeSet или TreeMap в Java? 92. Как связаны методы ordinal() и compareTo() в Enum? 93. Напишите пример Enum. 94. Можно ли использовать Enum в switch case? 95. Как получить все имеющиеся значения в экземпляре Enum? Ответы на некоторые из этих вопросов вы можете найти в видео курсах Java Базовый (урок 7), Java Углублённый (Урок 3).   Stream API 96. Что такое Stream в Java? 97. Назовите основные свойства транзакций. 98. Какие есть уровни изоляции транзакций? 99. Какая разница между Statement и PreparedStatement? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 15).   Collections 100. Расскажите об итераторах и об их применении. 101. Какая иерархия коллекций в Java Collection Framework? 102. Какое внутреннее строение ArrayList? 103. Какое внутреннее строение LinkedList? 104. Какое внутреннее строение HashMap? 105. Чем отличается ArrayList от LinkedList? 106. Чем отличается ArrayList от HashSet? 107. Зачем в Java такое многообразие имплементации динамического массива? 108. Зачем в Java такое многообразие имплементации key-value storage? 109. Как отсортировать коллекцию элементов? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Базовый (урок 5), Java Углублённый (урок 3, урок 15).   Class Object. Equals and HashCode 110. Дайте краткую характеристику class object в Java. 111. Для чего используют Equals and HashCode в Java? 112. Расскажите о контракте между Equals and HashCode в Java? 113. Какие условия выдвигаются касательно переопределения соглашения при переопределении Equals? 114. Что будет, если не переопределить Equals and HashCode? 115. Какие значения мы получим, если у нас не перераспределены Equals and HashCode? 116. Почему симметричность выполняется, только если x.equals(y) возвращает true? 117. Что такое коллизия в HashCode? Как с ней бороться? 118. Что будет, если элемент, участвующий в контракте с HashCode, меняет свое значение? 119. Напишите методы Equals and HashCode для класса Student, который состоит из полей String name и int age. 120. В чем разница применения if (obj instanceof Student) и if (getClass() == obj.getClass())? 121. Дайте краткую характеристику метода clone(). 122. В чем заключается особенность работы метода clone() с полями объекта типа-ссылки? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Базовый (урок 9).   Exceptions 123. Дайте определение понятию exception (исключительная ситуация). 124. Какие знаете особенности использования оператора try ... catch? 125. В чем разница между error и exception? 126. Какая разница между checked и unchecked, exception, throw, throws. 127. Какой есть иерархия исключений? 128. Что такое checked и unchecked exception? 129. Нужно ли проверять checked exception? 130. О чем говорит и как использовать ключевое слово throws? 131. Какие возможные способы обработки исключений вы знаете? 132. Напишите пример перехвата и обработки исключения в блоке try-catch метода. 133. Напишите пример перехвата и обработки исключения в секции throws-метода и передачи вызывающему методу. 134. Напишите пример перехвата и обработки исключения с использованием собственных исключений. 135. Какие есть правила для проверки исключений при наследовании? 136. Могли бы ли вы написать код, если блок finally не будет выполнен? 137. Напишите пример обработки нескольких исключений в одном блоке catch. 138. Какой оператор позволяет принудительно выбросить исключение? Напишите пример. 139. Может ли метод main выбросить throws-исключение? Если да - куда передаст? 140. Напишите пример try with resources. Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Базовый (урок 8).   Многопоточность 141. Какие средства для работы с многопоточностью знаете? 142. Что такое процесс и поток? Чем отличается процесс от потока? 143. Расскажите о синхронизации между потоками. Для чего используют методы wait(), notify() - notifyAll(), join()? 144. Как остановить поток? 145. Как между потоками обмениваться данными? 146. В чем заключается отличие класса Thread от интерфейса Runnable? 147. Есть потоки Т1, Т2 и Т3. Как реализовать их последовательное выполнение? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 13, урок 14).   Практические задания 148. Matrix Diagonal Sum (задача с Leetcode). 149. Move Zeroes (задача с Leetcode). 150. Дан List <String> names. Удалите первую букву из каждого имени и верните отсортированный список. 151. Перевернуть массив. 152. Проверить, является ли строка палиндромом. 153. Написать простой алгоритм сортировки (Bubble, Selection или Shuttle). Как его можно улучшить? 154. Напишите алгоритм (последовательность действий) составления литерала типа int и литералов типа byte. Объясните, что происходит с памятью.   Middle Общие 1. В чем преимущества и недостатки ООП, если сравнивать с процедурным/функциональным программированием? 2. Чем отличается агрегация от композиции? 3. Какие паттерны GoF вы использовали на практике? Приведите примеры. 4. Что такое прокси-объект? Приведите примеры. 5. Какие нововведения анонсировано в Java 8? 6. Что такое High Cohesion и Low Coupling? Приведите примеры. Лучше всего тема шаблонов в Java раскрыта в видео курсе Паттерны проектирования в Java.   ООП 7. Каким образом можно реализовать множественное наследование в Java? 8. Какая разница между методами final, finally и finalize()?   Java Core 9. В чем разница между статическим и динамическим связыванием в Java? 10. Можно ли использовать private или protected переменные в interface? 11. Что такое Classloader и для чего используется? 12. Что такое Run-Time Data Areas? 13. Что такое immutable object? 14. В чем особенность класса String? 15. Что такое ковариантность типов? 16. Какие есть методы в классе Object? 17. Приведите примеры удачного и неудачного использования Optional. 18. Можно ли объявлять main method как final? 19. Можно ли импортировать те же самые package/class дважды? Какие последствия? 20. Что такое Casting? Когда можем получить исключение ClassCastException? 21. Почему современные фреймворки используют в основном только unchecked exceptions? 22. Что такое static import? 23. Какая связь между методами hashCode() и equals()? 24. Когда используют BufferedInputStream и BufferedOutputStream классы? 25. Какая разница между классами java.util.Collection и java.util.Collections? 26. Какая разница между Enumeration и Iterator? 27. В чем разница между итераторами fail-fast и fail-safe? 28. Зачем нужен модификатор transient? 29. Как влияют на сериализацию модификаторы static и final? 30. Какие особенности использования интерфейса Cloneable? 31. Какие особенности использования интерфейса AutoCloseable? 32. Что такое FunctionInterface и чем он отличается от обычного интерфейса? 33. Что такое Atomic types и зачем они нужны? 34. Что такое Happens-before? Какие особенности использования ключевого слова volatile? 35. Расскажите о Heap и Stack память в Java. В чем разница между ними? Где хранятся примитивы? 36. Чем отличается stack от heap памяти? Когда и какая область памяти резервируется? Зачем такое разделение нужно? 37. Какие принципы работы и области памяти Garbage Collector? 38. Как работает Garbage Collector? Расскажите о Reference counting и Tracing. 39. Расскажите о механизме работы autoboxing в Java. 40. Как реализована сериализация в Java? Где мы можем ее увидеть? 41. Расскажите, в чем разница между WeakReference и SoftReference? 42. Что такое generics? Для чего они нужны? Какую проблему решают? 43. Что такое PECS и как используется? Приведите примеры. 44. Зачем на практике могут понадобиться immutable объекты? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Базовый и Java Углублённый.   Библиотеки и инструменты 45. Чем полезны инструменты Maven, Ant, Gradle? 46. Что такое Unit Tests? Чем класс JUnit.Assert отличается от ключевого слова assert? 47. Что такое и зачем нужен Spring core? Раскройте понятие Inversion of Control и Dependency Injection. 48. Как «под капотом» работает @Transactional? 49. Как «под капотом» работает Spring? 50. Что такое и зачем нужен Hibernate? Раскройте понятие ORM. 51. Что такое и когда возникает LazyLoadingException? 52. Как «под капотом» работает Hibernate? Как бы вы написали собственный Hibernate? Ответы на некоторые из этих вопросов вы можете найти в видео курсах JDBC & Hibernate, Unit тестирование в Java с JUnit, Spring, Spring MVC.   Многопоточность 53. Какие преимущества и недостатки использования многопоточности? 54. Расскажите о четырех способах работы со многими потоками и чем отличается wait ... notify ... notifyAll от synchronized? От Future? 55. Что такое и зачем нужен ThreadLocal? 56. В чем разница между Thread.sleep() и Thread.yield()? 57. Как работает Thread.join()? 58. Что такое deadlock? 59. Что такое race condition? 60. Для чего использовать volatile, synchronized, transient, native? 61. Расскажите о приоритетах потоков. 62. Что такое потоки-демоны и для чего их устанавливать? 63. Почему нежелательно использовать Thread.stop()? 64. Как реализовать пул потоков? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 13, урок 14).   Collections 65. Чем отличается List от Set? 66. В чем разница между HashSet, LinkedHashSet и TreeSet? 67. Какая внутренняя структура HashMap? 68. Какое время поиска элемента в ArrayList, HashSet? 69. Как реализовать свой Stack? 70. Как работает метод put в HashMap? Почему нам нужно высчитывать позицию бакета? В чем преимущества такой операции? 71. В чем разница между HashMap и TreeMap? Когда и где их нужно использовать? 72. Какое внутреннее строение TreeMap? Рассказать об RBT. Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 1, урок 2, урок 3).   Stream API 73. Какие есть методы в интерфейсе Stream? 74. Чем отличается метод map от flatMap? 75. Какой функциональный интерфейс использует метод filter? Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Углублённый (урок 15).   Базы данных 76. В чем разница между реляционными и нереляционными базами данных? 77. Как хранятся соотношения one-to-one, one-to-many и many-to-many в виде таблиц? 78. Что такое нормализация БД? Приведите примеры из реального проекта. 79. Какие есть виды индексов в БД? Ответы на некоторые из этих вопросов вы можете найти в видео курсе SQL Базовый.   Практические задания 80. Valid parentheses (задача с LeetCode). 81. Reverse Linked List (задача с LeetCode). 82. Дано String s, найти длину максимального substring без повтора символов. 83. Определить, является ли односвязный LinkedList палиндромом.   Senior Общие 1. Когда лучше использовать наследование, а не агрегацию? 2. Расскажите о принципах работы Kubernetes.   Java Core 3. В чем разница между Java NIO и Java IO? 4. Чем отличается Lambda от анонимного класса? 5. Расскажите о Java Memory Model. 6. Какие есть типы памяти в JVM? 7. Опишите жизненный цикл Java-объекта. Каким образом объект переходит из одной области памяти Garbage Collector в другую? Что является триггером такого перехода? 8. Каким образом можно заставить JVM запустить Garbage Collector? 9. Какие существуют Garbage Collectors в JVM и зачем их столько? 10. Какие виды Garbage Collector есть в HotSpot? Как работают? 11. Что будет с Garbage Collector, если finalize() будет долго выполняться или в процессе выполнения получим исключение? 12. Чем ForkJoinPool отличается от ScheduledThreadPoolExecutor и ThreadPoolExecutor? 13. Какая разница между HashMap, WeakHashMap, Hashtable, IdentityHashMap? 14. Что такое LinkedHashMap? 15. Что такое EnumSet? Для чего использовать? Как реализовать? 16. Расскажите об особенностях сериализации в Java. Зачем serialVersionUID и InvalidClassException? 17. В чем проблема сериализации Singleton? 18. Какие бывают алгоритмы обхода деревьев и почему они разные? 19. Что такое deadlock? Какие типы существуют? Нарисуйте схематично, как может произойти. Ответы на некоторые из этих вопросов вы можете найти в видео курсе Java Базовый и Java Углублённый.   Базы данных 20. Что такое ACID? 21. Что означает CAP-теорема? 22. Какие есть уровни изоляции транзакций? 23. Есть ли смысл отказываться от использования ORM? 24. Что такое n+1 проблема? 25. Что такое cartesian product проблема?   Библиотеки и инструменты 26. Каким образом построить monitoring в Java? Расскажите об особенностях использования Java micrometrics или DropWizard, или Prometheus frameworks. 27. Опишите механизм работы ORM. 28. Какие способы выборки данных в Hibernate вы знаете? 29. Какие изоляции транзакций существуют в Hibernate?   Spring 30. Что такое IoC и DI? 31. Каков жизненный цикл объектов, которые создает Spring? 32. Какие есть виды контекстов? 33. Как создать и поднять контекст с целью тестирования приложения? 34. Какие возможности Spring предоставляет для коммуникации с базой данных? 35. Какие признаки того, что класс - Java Bean? Чем POJO отличается от Java Bean? 36. Опишите механизм инъекции зависимости в Spring. 37. Почему все зависимости Spring являются Java Beans? Возможно ли использовать Spring для управления зависимостями между не Java Beans классами? 38. Чем Spring singleton отличается от prototype? 39. Есть ли смысл отказываться от использования Dependency Injection? Ответы на некоторые из этих вопросов вы можете найти в видео курсах Spring, Spring MVC.   Многопоточность 40. Что такое race-condition? 41. Какие элементы есть в java.util.concurrent пакете? 42. Что такое optimistic и pessimistic locking? 43. Какие особенности многопоточности в Java EE и Spring?   Stream API 44. Какие основные принципы Stream API?   Практические задания 45. Реализовать сервис, который на вход принимает url и возвращает короткую версию (вроде bit.ly/86gfr3).   Редакция DOU.ua благодарит за помощь в подготовке статьи Александра Редька, Антона Наумова, Богдана Чупика, Максима Ляшенко, Александра Навка, Сергея Маленко, Андрея Петрика, Сергея Громового, Дениса Душина, Ивана Чуба. Смотрите также статьи с вопросами на собеседовании по Python, .NET и JavaScript.
Найкращі сайти для пошуку роботи в IT: Україна, Білорусь, Росія

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

Здравствуйте, друзья! Все, кто выбирает для себя путь IT-разработки, проходят через традиционную последовательность действий: Выбор конкретной специальности. Определение необходимых к изучению языков и технологий. Непосредственное обучение + практика. Составление портфолио, в котором демонстрируется весь набор знаний и навыков, которым вы обладаете. Поиск работы согласно специальности. Последний, пятый пункт, является не менее важным, чем предыдущие. В наше время поиск работы ведется в основном с помощью сети Интернет. Следовательно, возникает потребность в использовании проверенных веб-сайтов, на которых вас не введут в обман. Также, ресурс должен быть дружелюбным к пользователю, иметь интуитивно понятные механизмы поиска работы и выдавать вам те вакансии, которые вы ищете. Мы подготовили для вас список самых эффективных ресурсов поиска работы в IT секторе, которым можно доверять, и которые при этом удобны в использовании. Информация о каждом сервисе будет структурирована в следующем виде: особенности сервиса; аналитика уровня зарплат определенных специалистов и частота ее обновления; возможность подписки и отслеживания вакансий по определенной категории; наличие дополнительной информации о компаниях, которые размещают вакансии; наличие вакансий для начинающих и стажеров; количество открытых вакансий на текущий момент; контингент работодателей (отечественные/зарубежные); предложения на релокейт; удобство использования сервиса. Этих показателей должно быть достаточно, чтобы по максимуму раскрыть возможности каждого рассматриваемого ресурса. Начнем!   DOU   Профессиональное сообщество разработчиков, запущеное Максимом Ищенко в 2005 году. Один из главных IT-ресурсов Украины, на котором публикуются новости, аналитические статьи и другая информация, связанная с IT индустрией. Также, ДОУ располагает форумом, где любой зарегистрированный пользователь может задать свой вопрос и получить развернутые ответы от множества IT-специалистов. Данный сервис имеет специальный раздел “Работа”, где каждый желающий может просмотреть список опубликованных вакансий как для программистов, так и для нетехнических специалистов, задействованных в IT. Заглавная страница с вакансиями выглядит следующим образом (на рисунке лишь ее часть):     Справа изображено ведущие компании и количество их вакансий (лишь часть компаний):     Перейдя к вакансии, вы увидете типичное описание компании и требования к кандидату. Откликнуться на предложение предлагают через Google, Facebook, GitHub, LinkedIn, Вконтакте, Twitter.     Как можно видеть из рисунка, каких-либо механизмов помощи в создании резюме на ДОУ нет — его оформление полностью и целиком возлагается на плечи соискателя работы. Перейдем к анализу ресурса согласно нашим пунктам. Аналитика уровня зарплат определенных специалистов и частота ее обновления. ДОУ имеет собственный зарплатный виджет, который составляется на основании зарплатного опроса. Результаты опроса публикуются раз в полгода (в декабре и июне-июле)     В виджете указываете город, интересующую вас должность и применяющийся язык программирования (если вакансия связана с программированием), затем имеете возможность наблюдать I квартиль, медиану и III квартиль заработной платы: I квартиль - это значение з/п, ниже которого в упорядоченном по возрастанию массиве находится 25% данных о заработных платах; III квартиль - значение з/п, выше которого в упорядоченном по возрастанию массиве находится 25% данных о заработных платах; медиана - значение з/п, расположенное в середине изучаемого массива, который упорядочен по возрастанию. На вкладке “Динамика” можно наблюдать, как менялись зарплаты по самым популярным направлениям. К примеру, вот такая ситуация наблюдалась у JavaScript:      Вкладка ”По городам” отображает статистику зарплат по всем главным направлениям в крупнейших городах Украины (Киев, Львов, Харьков, Днепр, Одесса).     Последняя вкладка демонстрирует различного рода демографические показатели: пол разработчиков (в процентном соотношении), их возраст, опыт работы, уровень знания английского, город проживания, образование, размер и тип компании.    Также, ДОУ каждый год составляет портрет украинского IT-специалиста, в который входят такие показатели, как: город проживания, пол, опыт работы, профессиональный уровень разработчиков, количество компаний, в которых работали, причины выбора IT-специальности, самое важное при выборе работы, удовлетворенность зарплатой, оформление трудоустройства и другие показатели. Если вам интересно, можете ознакомиться с портретом украинского IT-специалиста за 2020 год. Дополнительная информация о компаниях, которые размещают вакансии. У каждой вакансии помечена компания-работодатель, нажав на иконку которой можно перейти на профиль этой компании на ДОУ и ознакомиться с ним. Таким образом вы без проблем можете просмотреть рейтинг этой компании (он есть не у всех), прочесть информацию о работодателе, просмотреть фотографии сотрудников, узнать расположение офиса, контактные данные и отзывы других людей о данном месте работы.  Возможность подписки на рассылку вакансий. Отсутствует, однако частично реализуется при помощи телеграм-канала “Junior дайджест dou.ua”, речь о котором пойдет ниже. Наличие вакансий для начинающих и стажеров. Сервис DOU располагает специальным разделом “Первая работа”, который находится на странице “Работа” в соответствующей вкладке. Он обновляется каждый месяц и содержит список актуальных курсов и вакансий для новичков, а также стажировки. Во внимание принимаются все крупные города Украины. Имеется в наличии и специальный телеграм-канал, который помогает следить за новинками на ресурсе.     Количество открытых вакансий. На момент написания статьи на сайте ДОУ размещено более 7000 вакансий. Карантинные меры довольно ощутимо ударили по количеству предложений от работодателей в 2020, но сейчас количество предложений не то что достигло уровня начала 2020-го года, а даже перепрыгнуло его. Контингент работодателей. Точной информации нет, однако подавляющее большинство работодателей из Украины. Также присутствуют и иностранные компании. Предложения на релокейт. На странице вакансий в ДОУ в самом верху можно найти фильтр быстрого перехода “Работа за рубежом”. Удобство использования сервиса. В целом, данный ресурс достаточно информативен и комфортен в использовании. Полноценный сервис, на котором украинский разработчик может найти практически все необходимое: различные статьи, портрет и зарплаты разработчиков, вакансии, опросы, рейтинги IT-компаний и многое другое. Можно создать свою тему и узнать мнение других разработчиков касательно какого-либо вопроса. При первых посещениях сайта разбегаются глаза от его насыщенности информацией, однако, со временем к этому привыкаешь и начинаешь быстро находить искомое.   Djinni     Djinni (он же “Джинни”, “Джинн”) - ресурс, позиционирующий себя как сервис анонимного поиска работы для программистов, тестировщиков, UI/UX дизайнеров, специалистов DevOps, PM-ов и всех тех, кто работает в сфере IT. Был запущен в 2012 году в качестве части ресурса dou.ua, однако затем обрел собственный домен. Как Джинн работает. Соискатель размещает заявку на сайте, не раскрывая при этом своей личности. В ней указываются такие параметры, как: категория (специализация), имеющийся опыт работы, зарплатные ожидания, желаемая должность, уровень владения английским языком, варианты занятости, города для поиска работы, ключевые слова для рекрутера. После заполнения и публикации профиля просто ждёте, пока на вас выйдет работодатель. Получается эдакий поиск работы наоборот — ищете не вы, а вас. Однако, рекрутеры также могут размещать вакансии, на которые вы вольны отзываться, не раскрывая своей личности. Сам соискатель ничего никому не платит, в то время, как работодатель в случае успешного найма обязан заплатить 25% от месячной зарплаты кандидата, по факту выхода на работу. Оплата не требуется лишь в том случае, если на работу принимается специалист уровня Junior. Аналитика уровня зарплат определенных специалистов и частота ее обновления. Джинн располагает собственным виджетом зарплат, который собирает необходимую статистику автоматически путем подсчета, сколько предложений получил кандидат и на какую зарплату. К примеру, если FrontEnd разработчик в Киеве с з/п $2500 получил 10 предложений, то он будет посчитан 10 раз. Если предложений не было, то и в статистику он не попадет. Сама статистика обновляется раз в сутки и наочно демонстрирует динамику рынка.     Рассмотрим рисунок выше (с изображением статистики по .NET разработке). Над каждым столбиком диаграммы показано общее количество предложений. Это не количество вакансий, а показатель уровня спроса. Чем больше предложений, тем больше компаний пытаются нанять такого специалиста. На диаграмме приведены данные за последние 6 месяцев активности на Джинни. Сам виджет имеет несколько фильтров: город, категория (специализация), опыт работы и уровень знания английского, что позволяет настраивать и просматривать статистику согласно личным предпочтениям. Также данный сервис способен отправлять вам на почту статистику по выбранной специальности и городу — так называемая зарплатная рассылка. Это позволит быть в курсе з/п в IT и понимать, во сколько примерно оценивается специалист из той или иной области. Дополнительная информация о компаниях, которые размещают вакансии. Сам Джинн не размещает дополнительную информацию о работодателях, однако в предложенных рекрутерами вакансиях зачастую можно отыскать ссылки на веб-сайты компаний.  Возможность подписки на рассылку вакансий. Раз в месяц Джинн присылает статистику зарплат и наймов по выбранной вами технологии и городу. Наличие вакансий для начинающих и для стажеров. Вакансии для начинающих имеются в небольшом количестве. Однако на Джинне новичкам будет тяжело. Таких людей очень много, а рекрутеры редко ищут неопытных разработчиков, поэтому надо составить хороший профиль, быть активным и откликаться на вакансии самостоятельно.  Чтобы не быть голословными, вот пример хорошо составленных профилей:     Количество открытых вакансий. На момент написания статьи на сайте Djinni размещено 14 417 вакансий. Контингент работодателей. Согласно данным 2017-го года, примерно 80% работодателей — украинские компании, остальные 20% — зарубежные (Европа, США). Предложения на релокейт. Джинн имеет телеграм-канал Трактор на Джинне, который специализируется на поиске relocate-вакансий, предусматривающих переезд в другую страну. На данный момент канал заморожен, а вместо него запущен бот для подписки на вакансии. С его помощью можно получать уведомления о подписках и новых сообщениях на Джинне, создавать подписки на вакансии, изучать статистику вакансий и зарплат. Удобство использования сервиса. Djinni — достаточно комфортный сервис, который имеет приятный современный интерфейс, лишенный ненужных деталей. Также в наличии удобная система фильтров, позволяющая определять зарплатную статистику и предложения от работодателей эффективно и быстро. Главная особенность Джинна — анонимность, что дает возможность искать работу не беспокоясь о раскрытии вашей личности, если вы в этом нуждаетесь. Несмотря на то, что главный акцент данный ресурс ставит именно на соискателей работы и их комфорт, он также будет полезен и работодателям. Дополнительно можете ознакомиться с бесплатным вебинаром “Джинн - сервис анонимного поиска работы для программистов”, в котором участвует сам создатель платформы Djinni — Максим Ищенко.   LinkedIn     Социальная сеть для делового общения, которая ориентирована на поиск сотрудников и вакансий. На данный момент в ней зарегистрировано более 645 млн пользователей из разных уголков планеты. Основные функции LinkedIn заключены в следующем: поиск контактов (знакомые, коллеги, рекрутеры, HR-ы, интересующие вас личности и т. д.) и установление с ними связи (расширение своей сети); отслеживание новостей по вашим интересам путем использования хештегов; непосредственный поиск работы; отслеживание вакансий путем подписки на интересующие вас компании; гибкое управление системой настроек различных уведомлений; публикация информации о деловых поездках, предстоящих профессиональных мероприятиях и другого профессионального контента; получение подтверждения ваших профессиональных навыков вашими коллегами; общение с другими пользователями сети; настройка собственного профиля, где указывается ваш карьерный путь, места обучения, профессиональные достижения и т. д.; возможность генерировать резюме на основании вашего профиля.   Аналитика уровня зарплат определенных специалистов и частота ее обновления. LinkedIn запустил собственную службу под названием LinkedIn Salaries. На данный момент она работает лишь для США, поэтому вы сможете посмотреть только американские зарплаты.  Дополнительная информация о компаниях, которые размещают вакансии. Данная социальная сеть, подобно сети Facebook, имеет странички компаний, на которых публикуются различные мероприятия, фотографии и новости. Возможность подписки на рассылку вакансий. Отслеживание вакансий возможно путем подписки на интересующие вас компании, а также при помощи хэштегов (#dotnet, #backend и т. д.). Наличие вакансий для начинающих и для стажеров. LinkedIn на странице поиска вакансий имеет фильтр “Должностной уровень”, в нем - опцию “Стажер”. После ее выбора вы сможете просматривать все вакансии, предусматривающие стажировку.  Количество открытых вакансий. На момент написания статьи количество открытых вакансий - более 12 млн. Количество открытых вакансий в регионе Украина — 155 301, Республика Беларусь — 34 329, регион Россия — 21 504, Казахстан — 12 974. Контингент работодателей. LinkedIn имеет многонациональное сообщество, которое включает в себя пользователей из 200 государств. Соответственно, работодателей можно найти практически в любой стране, где пользуется спросом данный ресурс. Предложения на релокейт. Поскольку данная социальная сеть с огромным мультинациональным сообществом, она в естественном порядке содержит вакансии, предусматривающие смену места проживания. Однако совершать поиск таких предложений необходимо вручную. Удобство использования сервиса. Несмотря на свою многофункциональность и обилие различных инструментов, LinkedIn все очень компактно совмещает и предоставляет солидный, а также удобный интерфейс. Каких-либо недостатков замечено не было. LinkedIn имеет все, что только может пожелать IT-разработчик, ищущий работу. Единственный нюанс — необходимо знание английского языка — сеть-то интернациональная. Также, существует мобильное приложение под Android и iOS, которое позволяет оперативно использовать LinkedIn с вашего гаджета. Напоследок козырь в рукаве этой соцсети: если вы программист уровня Middle+ и имеете более 400 контактов, можете забыть о других сайтах поиска работы, ведь вы не останетесь без внимания рекрутеров.   HeadHunter (Россия) / GRC (Украина)     HeadHunter (HH) — международный кадровый портал, разработанный в России в 2000 году. Несколько лет спустя было открыто украинское представительство компании. В 2019 году в связи с трансформацией бренда было принято решение о переименовании украинского сегмента ресурса на GRC (grc.ua). Согласно заявлениям владельцев, отличительной чертой GRC является то, что он создан усилиями профессионалов по подбору персонала. Также, ресурс дает возможность создать детализированное резюме при помощи специально разработанной формы. На самом деле по своему внешнему виду, функционалу и возможностям HH и GRC почти идентичны. Поэтому здесь мы будем говорить об обоих ресурсах сразу. Если они будут иметь какие-то различия, сделаем на этом акцент. Аналитика уровня зарплат определенных специалистов и частота ее обновления.  Отсутствует. Дополнительная информация о компаниях, которые размещают вакансии. Подобно ДОУ, данные ресурсы имеют странички компаний, публикующих вакансии. Перейдя по ссылке, можно прочесть краткую информацию о компании, а также подписаться на нее, тем самым постоянно отслеживая новые предложения от выбранного работодателя. Возможность подписки на рассылку вакансий. GRC и HH обладают такой возможностью. Для того чтобы получать по email-у новые вакансии, необходимо авторизоваться на сайте под своим логином и паролем. С помощью функции «Автопоиск» при поиске вакансий можно сохранять параметры запроса, а затем ежедневно отслеживать интересующие вакансии. Также можно подписаться на обновление предложений определенной компании, которая вас интересует. Наличие вакансий для начинающих и для стажеров. Ресурсы имеют фильтр “Нет опыта”, который выбирает для соискателя только те предложения, которые ориентированы на новичков с определенным уровнем знаний, но не имеющих опыта работы.  Количество открытых вакансий. HeadHunter. На момент написания статьи было отмечено 821 657 открытых вакансий. При этом количество оставленных резюме — 49 097 833. GRC. На момент написания статьи — 8201 открытая вакансия. При этом количество оставленных резюме — 1 594 886. Контингент работодателей. Если рассмотреть оба ресурса в совокупности, то наибольшее количество вакансий исходит из России. На втором месте по численности идет Украина и страны СНГ. За ними — множество стран из Азии, Африки, Южной и Северной Америки, Европы, однако количество их вакансий очень мало. Предложения на релокейт. GRC и HH не имеют специального фильтра для нахождения вакансий, предусматривающих смену жительства. Однако, можно выполнять фильтрацию по интересующим вас странам/областям/городам. Удобство использования сервиса. HH и GRC имеют приятный интерфейс и удобную систему поиска вакансий. Помимо айтишных там можно найти и множество других вакансий, что дает ресурсам большей универсальности и массовости.   Work.ua     Work.ua — один из лучших украинских ресурсов для поиска работы, который был запущен еще в 2006 году. В 2013 году была разработана удобная мобильная версия сервиса. Свою цель создатели Work.ua обозначают следующим образом: “Предоставлять самый лучших сервис поиска работы, чтобы помогать людям быть счастливее и развивать Украину ”. Ресурс содержит вакансии, ориентированные на широкий круг соискателей. Также на сайте публикуются новости рынка труда и небольшие информативные статьи — как аналитические, так и те, что носят рекомендательный характер. Новоприбывшему на Work.ua очень пригодится гайд по использованию сервиса, хотя и сам по себе сервис интуитивно понятен. Аналитика уровня зарплат определенных специалистов и частота ее обновления.  Данный сервис имеет собственную аналитику уровня зарплат по городам и профессиям. К примеру, по запросу “программист” вы можете увидеть следующую статистику:     Также, можно просмотреть среднюю зарплату, исходя из выбранной специальности:     Ознакомиться с более подробной статистикой можно здесь. Дополнительная информация о компаниях, которые размещают вакансии. Практически каждая вакансия закреплена за определенной компанией. Нажав на логотип компании, вы попадаете на небольшую страничку внутри сервиса Work.ua, которая содержит краткое описание работодателя, количество сотрудников, сферу предоставления услуг, контактные данные, ссылку на сайт компании и список вакансий. Возможность подписки на рассылку вакансий. Work.ua предоставляет рассылку вакансий на почту, а также в Telegram (бот @jobs_workua_bot). Обе достаточно удобны и информативны. К примеру, в телеграме вы получаете регулярные сообщения с новыми вакансиями, которые включают название должности, компанию-работодателя, город, зарплату (если такова заявлена) и ссылку на само предложение. Наличие вакансий для начинающих и для стажеров. На Work.ua есть специальный фильтр “Без опыта”, который выводит только те вакансии, которые ориентированы на новичков и стажеров. Также есть специальный раздел “Для студентов”, что может помочь найти подработку либо полноценную работу учащимся в вузе (даже с возможностью смены места проживания!).    Количество открытых вакансий. На момент написания статьи было отмечено 47 576 открытых вакансий. Также, согласно статистике сайта, его посещают 450 тыс. человек в день, он имеет 2.8 млн резюме и 100 тыс. работодателей. Контингент работодателей. Среди опубликованных 47 576 вакансий 926 ориентированы на работу за рубежом (в основном это Польша, Чехия, Словакия, Германия, балтийские страны и другие европейские государства). Предложения на релокейт. Некоторые вакансии из раздела “Работа в других странах” предусматривают смену места жительства, однако поиск таких предложений необходимо осуществлять вручную, ведь множество вакансий могут просто предлагать удаленную работу. Удобство использования сервиса. Work.ua имеет хороший дизайн в синих и голубых тонах. Он сразу дает понять, что здесь все заточено под пользователя. Использовать сервис приятно и удобно — ничто не вызывает диссонанса, как и в мобильной версии. Ресурс имеет гибкую систему поиска, которая предусматривает поиск вакансий по: категориям, городам, компаниям, должностям. Естественно, присутствует и расширенный поиск (фильтрация по опыту, категории, виду занятости, наличия инвалидности и т. д.). Work.ua подходит всем, кто ищет работу - как айтишникам, так и другим соискателям. В целом — хороший сервис для поиска работы с новостями, статьями, аналитикой и рассылкой вакансий на email и Telegram.   Хабр Карьера     Проект известного в СНГ сервиса под названием Хабр. Будучи запущенным в 2017 году, сегодня Хабр Карьера находится в фазе активного развития. Достаточно удобный ресурс, который позволяет находить как вакансии соискателям, так и специалистов работодателям. Аналитика уровня зарплат определенных специалистов и частота ее обновления. Аналитика присутствует во вкладке “Зарплаты”. Однако, она не позволяет произвести сегментацию по конкретным профессиям, а подается в виде среднего показателя по всем IТ специализациям за первое или второе полугодие, начиная со второго полугодия 2017 года.     Также присутствует опция “Диаграммы зарплат”. Как заявляют создатели, это инструмент для работы со статистикой по всем зарплатам в IT, которые были накоплены с момента запуска зарплатного калькулятора на Хабр Карьере. Здесь вы найдете готовые отчеты по основным IT-специализациям, квалификациям, языкам программирования и группам городов. Данные можно смотреть отдельно по полугодиям и в динамике с 2017 года. Единственный нюанс — просматривать диаграммы зарплат могут только зарегистрированные пользователи с созданным профилем компании, у которых есть размещенная вакансия или приобретен доступ к базе резюме. Дополнительная информация о компаниях, которые размещают вакансии. Сервис в удобной форме предоставляет всю важную информацию. Таким образом, вы можете узнать рейтинг компании на Хабр Карьера, просмотреть открытые и архивные вакансии, изучить информацию о сотрудниках компании, узнать о подписчиках и тех, кто хочет работать в данной компании, расположение офисов, контакты, полезные ссылки и общую информацию о компании. Возможность подписки на рассылку вакансий. Вы можете подписаться на интересующие вас компании и следить за их новостями. Также, есть возможность получать вакансии на почту в соответствии с заданным вами фильтром. Наличие вакансий для начинающих и для стажеров. Сервис имеет специальный фильтр “Квалификация” во вкладке “Вакансии” — для начинающих как раз подойдут пункты “Intern” и “Junior”.   Количество открытых вакансий. На момент написания статьи было зафиксировано 2022 размещенные вакансии. Контингент работодателей. В подавляющем большинстве работодатели из России. Также, есть небольшая украинская и белорусская диаспора. Предложения на релокейт. Имеются, но такие вакансии необходимо искать вручную. Удобство использования сервиса. Сервис очень удобен и приятен в использовании. Пользовательский интерфейс располагает всей необходимой информацией как для работодателя, так и для соискателя работы. Ничто не подвисает, любой фильтр обрабатывается достаточно быстро. Заметно, что создатели сервиса проделали хорошую работу для предоставления максимального комфорта своим юзерам.   dev.by   Сервис для белорусских айтишников, который является своеобразным братом украинского DOU. Является важным сервисом Беларуси, на котором распространяются новости, ведутся корпоративные блоги, публикуются вакансии, собирается аналитика зарплат в отечественном IT, а также предоставляется другая информация, связанная с данным сектором. Во вкладке “Зарплаты” заявляется, что на jobs.dev.by 1732 компании, 132 123 пользователя и 586 вакансий. Аналитика уровня зарплат определенных специалистов и частота ее обновления. На уже упомянутой вкладке “Зарплаты” присутствует хорошая аналитика зарплат со множеством фильтров: можно указать должность, промежуток времени, опыт работы, город, используемые в работе технологии и языки программирования. Согласно заданным критериям вы и получите информацию о заработной плате.     К примеру, выборка с критериями “2020 год”, “Software Engineer”, “Опыт от 3 до 7 лет”, “Минск” выдала такой результирующий график:   Также, вы можете просмотреть средний показатель зарплаты в IT практически за любой интересующий вас месяц. Дополнительная информация о компаниях, которые размещают вакансии. Компании имеют свои собственные “странички” на jobs.dev.by, где вы можете узнать такую информацию, как: общие сведения о компании, ее рейтинг согласно определенным параметрам, кол-во сотрудников и их отзывы, год основания компании, просмотреть фотогалерею (если работодатель размещал фото), контактные данные, официальные представители (со ссылками на их аккаунты), адрес, компании-соседи.  Возможность подписки на рассылку вакансий. Такая возможность присутствует. Вы можете описать свой опыт, ожидания от работы, пожелания по зарплате, а затем получать подходящие предложения и вакансии на электронную почту.   Наличие вакансий для начинающих и для стажеров. Сервис имеет фильтр “Junior”, который производит выборку вакансий, подходящих для потенциальных интернов и джунов. Количество открытых вакансий. На момент написания статьи было зафиксировано 586 размещенных вакансии. Контингент работодателей. В подавляющем большинстве работодатели из Беларуси. Предложения на релокейт. Необходимо искать вручную. Также, можно указать этот пункт в качестве пожелания во время оформления подписки на рассылку вакансий. Удобство использования сервиса. Сервис достаточно удобен, помимо вакансий и зарплатной аналитики предлагает различные новости и истории от разработчиков Беларуси. Интерфейс понятен, хотя и содержит много информации. Однако, к нему очень быстро привыкаешь и в краткие сроки начинаешь отлично в нем ориентироваться.   Заключение   В данной статье были рассмотрены самые лучшие ресурсы для поиска работы в IT в Украине, Беларуси, Россие. Затрагивались как локальные сервисы, так и один интернациональный. Мы постарались пройтись по всем самым важным пунктам и показать, насколько удобен и функционален тот или иной job-ресурс. Если вы опытный разработчик, то регистрируйтесь на LinkedIn, заполняйте профиль, расширяйте свою сеть общения и ждите предложений от рекрутеров. Если же вы новичок, то вам не помешает искать работу на всех отечественных ресурсах сразу, ведь кандидатов без опыта много, и каждый хочет свое место под солнцем. Надеемся, статья была полезной для вас. Пишите в комментариях свое мнение и задавайте интересующие вас вопросы!   Желаем вам здоровья и успехов! Оставайтесь с ITVDN!
300+ запитань щодо JavaScript на співбесіді

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

Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 21 декабря 2020 года. Оригинальная версия на украинском языке доступна по ссылке. На этот раз предлагаем ознакомиться с актуальными вопросами, которые задают на технических интервью по JavaScript. Естественно, мы говорим о широком спектре специализаций, поэтому выбирайте свое направление и готовьтесь.   Junior Общие: 1. Какие методы HTTP-запросов вы знаете? 2. Какие версии HTTP-протокола вам известны? 3. Какие знаете коды ответа (состояния) HTTP? 4. Что такое Cross-Origin Resource Sharing? Как устранить проблемы с CORS? 5. Что такое cookie? 6. Какой максимальный размер cookie? 7. Что означает директива use strict? 8. Чем JS отличается при работе на front-end и back-end? 9. Что такое статическая и динамическая типизации? 10. Как клиент взаимодействует с сервером? 11. Что такое REST? 12. Объяснить понятие мутабельность/иммутабельность? Какие типы являются мутабельными и наоборот? 13. Как искать ошибки в коде? Используете ли вы дебаггер? 14. Каких известных людей из мира JS знаете?   JS Core 15. Какие существуют типы данных в JS? 16. Как проверить, является ли объект массивом? 17. Как проверить, является ли число конечным? 18. Как проверить, что переменная равна NaN? 19. Чем отличается поведение isNaN() и Number.isNaN()? 20. Сравните ключевые слова var, let, const. 21. Что такое область видимости? 22. Что такое деструктуризация? 23. Для чего предназначены методы setTimeout и setInterval? 24. Сравните подходы работы с асинхронным кодом: сallbacks vs promises vs async / await. 25. Можно ли записывать новые свойства / функции в прототипы стандартных классов (Array, Object и т. д.)? Почему нет? В каких случаях это делать можно? Как обезопасить себя, если нужно расширить прототип? 26. Назовите методы массивов, какие помните, и скажите, для чего они нужны. 27. Какие методы перебора массива знаете? В чем их отличие? 28. Как работают операторы присваивания / сравнения / строчные / арифметические / битовые и т. д.? 29. Опишите назначение и принципы работы с коллекциями Map и Set. 30. Что означает глубокая (deep) и поверхностная (shallow) копия объекта? Как сделать каждую из них? Ответы на некоторые из этих вопросов вы можете найти в видео курсе JavaScript Стартовый (урок 3, урок 5, урок 10), JavaScript Базовый (урок 3, урок 13, урок 19), ECMAScript 6 (урок 6).   Функции: 31. Какая разница между декларацией функции (function declaration) и функциональным выражением (function expression)? 32. Что такое анонимная функция? 33. Расскажите о стрелочных функциях (arrow function). В чем заключаются отличия стрелочных функций от обычных? 34. Что такое и для чего используют IIFE (Immediately Invoked Function Expression)? 35. Что такое hoisting, как он работает для переменных и функций? 36. Что такое замыкание (closure) и какие сценарии его использования? 37. Как вы понимаете замыкания? Что будет выведено в консоли в этом случае? var f = function() {   console.log(1); } var execute = function(f) {   setTimeout(f, 1000); } execute(f); // что выведет в консоль и почему f = function() {   console.log(2); } 38. Что такое рекурсия? 39. Что означает ключевое слово this? 40. Что такое потеря контекста, когда происходит и как ее предотвратить? 41. Методы функций bind / call / apply - зачем и в чем разница? Ответы на некоторые из этих вопросов вы можете найти в видео курсе JavaScript Стартовый (урок 11, урок 12) и JavaScript Базовый (урок 13, урок 14).   Front-end 42. Что такое DOM? 43. Сравните атрибуты подключения скрипта async и defer в HTML-документе. 44. Какая разница между свойствами HTML-элементов innerHTML и innerText? 45. Опишите процесс всплытия (bubbling) событий в DOM. 46. Как остановить всплытие (bubbling) события? 47. Как остановить дефолтную обработку события? 48. Чему равен this в обработчике событий (event handler)? 49. Что такое LocalStorage и SessionStorage? Какой максимальный размер LocalStorage? 50. Как получить высоту блока? Его положение относительно границ документа? 51. Что такое webpack? 52. Чем отличается dev-сборник от prod? Ответы на некоторые из этих вопросов вы можете найти в видео курсе JavaScript Базовый (урок 1, урок 6, урок 7, урок 8, урок 17) и ECMAScript 6 (урок 1).   Верстка 53. Что такое блочная модель CSS? 54. Какие способы центрирования блочного контента по горизонтали и вертикали знаете? 55. Какие подходы в верстке вам известны (float, flex, grid, etc.)? 56. Как сделать приложение responsive? 57. Какие есть принципы семантической верстки? 58. Зачем нужны префиксы для некоторых CSS-свойств (-webkit-, -moz- и т. д.)? 59. Как упростить написание кросс-браузерных стилей? 60. Практические задачи: прокомментировать и исправить пример плохого CSS или HTML. 61. Что такое CSS-препроцессоры? С какими работали? Что нового они приносят в стандартный CSS? Ответы на некоторые из этих вопросов вы можете найти в видео курсе HTML5 & CSS3 Стартовый (урок 5, урок 6), HTML5 & CSS3 Углубленный (урок 4). Курсы Верстка сайта на CSS Grid и Верстка сайта на FlexBox CSS дадут комплексные знания и практические навыки применения технологий FlexBox и Grid.   Angular 62. Перечислите основные компоненты фреймворка (модуль, роут, директива и т .п.). 63. В чем разница между компонентом и директивой? 64. Расскажите о жизненном цикле компонента. 65. Перечислите часто используемые хуки жизненного цикла компонента и расскажите, для чего они нужны? 66. В чем разница между конструктором и ngOnInit-хуком? 67. Как защитить роут от несанкционированного доступа? Какие механизмы предоставляет для этого фреймворк? 68. Что такое Lazy loading, как и для чего используется? 69. Какое назначение RouterOutlet? 70. Как компоненты могут взаимодействовать друг с другом? 71. Как создать two-way binding свойство для компонента? 72. Какие типы форм у фреймворка? В каких случаях и что лучше использовать? 73. Какие состояния у формы и как это можно применить? 74. Зачем нужны сервисы? Как с ними работать? 75. Что такое singleton-сервисы? Каково их назначение? Способ создания? 76. Какие есть способы объявления сервисов? 77. Для чего нужны модули? Сколько их должно быть в проекте? 78. Зачем нужны общие модули (shared)? 79. Какие преимущества типизации в TypeScript? 80. Какие возможности TypeScript можно использовать для типизации (здесь имеются в виду интерфейсы, типы, enum и т. д.)? 81. Какая разница между интерфейсом и классом? 82. В чем разница между интерфейсом и абстрактным классом? 83. Какая разница между интерфейсом и типом? 84. Что такое RxJS? Как он используется во фреймворке? Какие компоненты фреймворка тесно связаны с ним? 85. Чем отличаются Observable и Promise? 86. Для чего нужны Subjects? Какие типы Subjects существуют? 87. Как сделать несколько последовательных запросов к API с помощью HTTP-сервиса и RxJS? 88. Какая разница между switchMap, concatMap, mergeMap? 89. Как можно конфигурировать Angular-приложение? 90. Зачем нужны environment-файлы? Когда их лучше не использовать? 91. В чем разница между «умным» (smart) и «глупым» (dumb) компонентами? В каких случаях применяется каждый из них? 92. В чем разница между NgForm, FormGroup и FormControl и как их применяют для построения форм? 93. Зачем нужен и как работает async pipe? 94. Как следить за развитием фреймворка? Каких известных людей, связанных с Angular, знаете / читаете? Ответы на некоторые из этих вопросов вы можете найти в видео курсах Angular Базовый и Angular Углублённый.   React 95. Работали ли вы с классовыми компонентами? В чем их особенность? 96. Какие данные лучше хранить в состоянии компонента, а какие передавать через пропсы? Приведите пример. 97. Ознакомлены ли вы с хуками? В чем их преимущества? Приходилось ли делать свои и с какой целью? 98. Знакомы ли вы с фрагментами и порталами? Зачем они нужны? 99. Когда и для чего используют рефы? 100. Какие вы знаете методы жизненного цикла компонента? 101. В каком методе жизненного цикла компонента лучше делать запросы на сервер? Почему? 102. В каком методе жизненного цикла компонента лучше делать подписку и отписку от листенера? Почему? Зачем отписываться? 103. Был ли опыт работы с контекстом? Когда его стоит использовать? 104. В чем особенность PureComponent? 105. Работали ли вы с мемоизоваными селекторами (memoized selectors)? Для чего их используют и какой принцип работы? 106. В чем видите преимущества библиотеки React? 107. Почему библиотека React быстрая? Что такое Virtual DOM и Shadow DOM? 108. Зачем в списках ключи? Можно ли делать ключами индексы элементов массива? Когда это оправдано? 109. В чем основная идея Redux? 110. Работа со стилями в React. 111. React - это библиотека или фреймворк? Какая разница между этими двумя понятиями. 112. Можно ли использовать jQuery вместе с React? Почему да / нет? 113. Что такое codemod? 114. Приходилось ли вам настраивать проект React с нуля? С помощью каких инструментов вы это делали? 115. Перечислите все библиотеки, которые использовали в связке с React. 116. Что самое сложное вам приходилось реализовывать с помощью React? Ответы на некоторые из этих вопросов вы можете найти в видео курсах React Базовый и React Углублённый.   Back-end 117. Что такое REPL? 118. Что такое streams в Node.js? 119. Что такое middleware? 120. Для чего используют функцию setImmediate? 121. Зачем нужен app.param() в express? 122. Что такое token based authentication?   Базы данных 123. Напишите простой запрос для вычисления трех авторов, у которых больше всего книг. 124. Напишите запрос, который выбирает последние три комментарии для конкретного пользователя для двух таблиц: комментарии и пользователи. 125. Спроектируйте простую схему базы данных для библиотеки. 126. Для чего используют SQL-оператор HAVING? 127. Зачем используют SQL-оператор LEFT JOIN? 128. Чем отличается embed- от reference-связи в MongoDB? 129. В одном проекте программисты сохраняют данные в MongoDB-коллекции комментариев, используя такие типы данных (смотрите ниже). Что плохого в этом решении? id: ObjectID text: string author_id: string created_at: Date 130. В проекте понадобилось внести изменения в структуру таблиц, добавить несколько полей и индексы. Как программисты будут делать это на продакшене? Ответы на некоторые из этих вопросов вы можете найти в видео курсе SQL Базовый.   Инструменты 131. Каждый раз, когда вы делаете pull, почему-то случается конфликт в последней строке во всех файлах, которые вы редактировали. Что происходит? 132. Что делает команда git fetch? 133. Какой git hygiene подходы вы знаете? 134. Что такое CI / CD? Для чего это нужно?   Практические задания 135. Расскажите, какие есть способы копирования простого объекта типа obj = {a 1, b 2, c 3} 136. Напишите deep clone для объекта. 137. Назовите различные способы, как поменять местами значения двух переменных. 138. Менеджер попросил в задаче поменять статусы из «active, inactive» на «active, removed», но в коде фигурируют только цифры и непонятно, какой статус соответствует какой цифре. Как помочь будущим программистам не лезть в документацию по коду? Вопрос ставят на конкретном примере с кодом. 139. Необходимо сделать мини проект - список пользователей с формой создания / редактирования пользователя: Для хранения пользователей используйте Firebase (это бесплатно). Для стилизации используйте Bootstrap. Минимальный набор полей пользователя: имя; фамилия; электронная почта; телефон (в формате +380 (XX) XXX-XX-XX) дата рождения; будет плюсом - добавление аватара и возможность crop-картинки. Пользователи должны иметь возможность фильтрации и пагинацию. Проект должен содержать README-файл с шагами для запуска.   Middle Общие 1. Расскажите о пирамиде тестирования. 2. Какие типы автоматизированных тестов выпадала возможность писать? Какие библиотеки при этом использовали? Каким инструментам отдаете предпочтение и почему? 3. Что такое unit-тесты? Какое место в пирамиде тестирования занимают unit-тесты? 4. Что такое code coverage? Обязательно 100% покрытие тестами кода? 5. Как запретить браузеру отдавать кэш на HTTP-запрос? 6. Что такое XSS (Cross-Site Scripting)? 7. Расскажите о паттернах Observer, Pub / Sub. Какая между ними разница? Приведите примеры реализации этих паттернов в известных фреймворках / библиотеках / браузерных API. 8. С какой целью может быть использован event listener события fetch self.addEventListener ( 'fetch', event => {})? 9. Что такое Event loop и как он работает? Расскажите о микрозадачах и макрозадачах.   JS Core 10. Какие типы данных бывают в JavaScript? Какой будет результат выполнения кода? let firstObj = { name: 'Hello' }; let secondObj = firstObj; firstObj = { name: 'Bye' }; console.log(secondObj.name); 11. Что такое temporal dead zone? 12. Как работает boxing / unboxing в JavaScript? 13. В чем разница между оператором in и методом hasOwnProperty? 14. Опишите, с помощью чего в JS реализуются такие ООП-парадигмы, как инкапсуляция, полиморфизм, абстракция? 15. Что такое прототип? Как работает прототипное наследование в JS? Объясните работу кода. function Main () {} Main.prototype = { protected: true }; const obj = new Main(); Main.prototype = { protected: false }; console.log('Object protection: ', obj.protected); 16. Какая разница между композицией и наследованием? 17. Почему не стоит использовать конструкторы типа new String? 18. Расскажите о базовом устройстве и механизме работы Event loop. 19. Что такое записи (records) и кортежи (tuples)? Чем они отличаются от обычных объектов? 20. Какие различия в поведении ES5 функции-конструктора и ES2015 класса? 21. Как реализовать паттерн «Модуль»? 22. Почему typeof null возвращает object? 23. Что такое приведение (преобразование) типов в JS? 24. Что такое явное и неявное приведение (преобразование) типов данных в JS? Как происходит преобразование типов в следующих примерах: {}+[]+{}+[1] !!"false" == !!"true" ['x'] == 'x' 25. Что такое Garbage Collector? 26. Опишите основные принципы работы «сборщика мусора» в JS-движках (engines). 27. Опишите назначение и принципы работы с коллекциями WeakMap и WeakSet? Чем они отличаются от коллекций Map и Set соответственно? 28. Чем отличается Observable от Promise? 29. Что такое Promise? Назовите порядок выполнения then и catch в цепочке. Promise.resolve(10)   .then(e => console.log(e)) // ??   .then(e => Promise.resolve(e))   .then(console.log) // ??   .then(e => {     if (!e) {       throw 'Error caught';     }   })   .catch(e => {     console.log(e); // ??     return new Error('New error');   })   .then(e => {     console.log(e.message); // ??   })   .catch(e => {     console.log(e.message); // ??   }); 30. Расскажите о последовательном и параллельном выполнении асинхронных функций. В чем разница между Promise.all() и Promise.allSettled()? 31. Что такое дескрипторы свойств объектов? Расскажите об их практическом применение. 32. Назовите несколько способов создания постоянного (неизменного) объекта в JavaScript. 33. Как создать свойство у объекта, которое нельзя будет изменить? 34. Зачем нужен конструктор Proxy? Приведите пример использования. 35. Что такое ArrayBuffer? В чем разница между Uint32Array и Float32Array? Каков результат выполнения кода? const uint32Array = new Uint32Array(); Array.isArray(uint32Array); 36. Каким будет результат сравнения? const url = “HTTPs://xyz.com/path<to>page.html”; encodeURI(url) == encodeURIComponent(url); 37. Расскажите о генераторах и итераторах. 38. Объясните, что делает приведенный ниже код: function * fn(num) {   for (let i = 0; i < num; i += 1) {     yield console.log(i);   } } const loop = fn(5); loop.next(); loop.next(); 39. Расскажите о типе данных Symbol и его практическом применении. Как перевести число с 10-разрядной системы в 16 (2,8) разрядную систему счисления? Ответы на некоторые из этих вопросов вы можете найти в видео курсе JavaScript Стартовый (урок 3, урок 4, урок 13, урок 14) и JavaScript Базовый (урок 18, урок 19),  ECMAScript 6 (урок 6).   Функции 40. Объясните, что означает currying. Приведите пример использования на практике. 41. Приведите пример функции с мемоизацией. Когда следует применять эту технику? 42. Что такое чейнинг функций? Напишите пример с использованием этого подхода. 43. В чем разница между function и arrow function? Каким будет результат выполнения кода? const pluckDeep = key => obj => key.split('.').reduce((accum, key) => accum[key], obj) const compose = (...fns) => res => fns.reduce((accum, next) => next(accum), res) const unfold = (f, seed) => {   const go = (f, seed, acc) => {     const res = f(seed)     return res ? go(f, res[1], acc.concat([res[0]])) : acc   }   return go(f, seed, []) }   Front-end 44. В чем принципиальная разница между событиями mouseleave и mouseout? 45. В каком порядке обрабатываются пользовательские события в DOM (click, mouseover и т .д.)? FIFO или LIFO? 46. Что такое Event bubbling и Event capturing? 47. Сравните методы объекта event stopPropagation и stopImmediateProparation. 48. Какие есть подходы оптимизации производительности веб-страницы? 49. Как реализован механизм same-origin policy в браузере? На какие браузерные API он распространяется? 50. Назовите способы хранения данных в браузере. Сравните их. 51. Web worker`ы. Опишите особенности передачи данных между worker`амы и основным потоком, между разделенными worker`амы. 51. Что такое Transferable-объекты? 52. Расскажите о способах оптимизации выполнения ресурсоемких операций JS для улучшения производительности рендеринга контента на странице. 53. Почему ResizeObserver вызывает события изменения размера до воспроизведения элемента, а не после? 54. Расскажите, как вы понимаете Web Accessibility? 55. Опишите алгоритм создания функционала, который обеспечивает чтение содержимого .txt файла при перетаскивании его из файловой системы в окно браузера. 56. Что такое Virtual DOM? Ответы на некоторые из этих вопросов вы можете найти в видео курсе HTML5 & CSS3 Углубленный (урок 3), JavaScript Базовый (урок 1, урок 2, урок 3).   Верстка 57. Объясните разницу между единицами измерения px, em, rem. 58. Для чего нужны CSS-переменные? Приведите несколько примеров использования. 59. Что произойдет при добавлении следующего селектора? * {Box-sizing: border-box; } 60. Как адаптировать страницу для печати? 61. Опишите особенности кастомизации стилей стандартных элементов форм. 62. Что такое progressive рендеринг? Какие подходы используются? 63. Назовите несколько способов реализации lazy-loading медиаресурсов на странице. 64. Назовите популярные шаблонизаторы для фронтенд-разработки. Опишите особенности их использования. 65. Назовите популярные CSS-методологии и их различия. 66. Как работает CSS Grid? 67. Какие форматы изображений поддерживают анимацию? 68. Как отследить прогресс / окончание CSS @keyframes анимаций или плавных переходов, реализованных с помощью transition, в JS? 69. Какие CSS-свойства могут быть обработаны непосредственно через GPU? Что такое композитные слои и почему большое их количество может привести к аварийному завершению работы браузера на мобильных устройствах? 70. Как переиспользовать Инлайн SVG-элементы на странице? 71. Опишите способы оптимизации SVG-файлов. 72. Как реализовать иконочный шрифт из определенного набора SVG-файлов? 73. Что такое ложное жирное или ложное курсивное (Faux) начертание шрифтов? 74. Что такое #shadow-root в инспекторе HTML-страницы? 75. Зачем нужны Custom Elements? 76. Почему удаление лишних символов пробелов / символов переноса в HTML не отражается на конечной производительности загрузки страницы? 77. Что такое контекст отображения canvas? Какие существуют типы контекста для рендеринга двумерной и трехмерной графики? Ответы на некоторые из этих вопросов вы можете найти в видео курсе HTML5 & CSS3 Углубленный.   Angular 78. Как работает Dependency injection? Зачем это нужно? Расскажите об использовании кастомных инжекторов. 79. Что такое zone.js? Для чего Angular использует зоны? С какой целью можно использовать NgZone-сервис? 80. Как работает Change detection? Как можно оптимизировать компонент с помощью схем Change detection? Какие еще есть приемы для оптимизации рендеринга (связанные с Change detection)? 81. Как выполнить конфигурацию HTTP-сервиса? Зачем она нужна? Обработка HTTP-ошибок? 82. Какие есть подходы к организации работы с данными? 83. Как подготовить сборник к деплою? 84. Что такое NgRx? Когда стоит использовать? 85. В каких случаях лучше использовать Renderer-сервис вместо нативных методов? И наоборот? 86. Как работают и для чего нужны резолверы? Как получить данные, загруженные резолверами? 87. Как работают и зачем нужны динамические компоненты? Приведите примеры их целесообразного использования. 88. Какая разница между @ViewChild и @ContentChild? 89. Что делает код и как иначе можно связать класс компонента с переменной? @HostBinding ( 'class.valid') isValid; 90. Как можно кэшировать данные, используя сервисы или RxJS? 91. Что такое асинхронная валидация форм? Когда применяется и как реализуется? 92. Зачем нужна forRoot-функция модуля? 93. Какая разница между декларированием и экспортом компонента из модуля? 94. Почему плохо «провайдить» сервис с shared-модуля в lazy-loaded модуль? (Вопрос о scope модулей.) 95. Что такое :: ng-deep и для чего используется? 96. Какие тесты можно запустить для Angular-программы? Какие инструменты используют для тестирования Angular-программы? 97. Как протестировать API-сервис? Ответы на некоторые из этих вопросов вы можете найти в видео курсах Angular Базовый и Angular Углублённый.   React 98. Что такое JSX? Что лежит в его основе? 99. Как работает алгоритм Virtual DOM? 100. Для чего нужно свойство key во время рендеринга списков? 101. В чем разница между функциональными и классовыми компонентами? 102. Зачем и когда нужно передавать props в super() при использовании классовых компонентов? 103. Почему нужно использовать setState() для обновления внутреннего состояния компонента? 104. В чем заключается принцип «подъема состояния»? 105. Какие библиотеки менеджмента состояния React-приложения вы знаете? Зачем они нужны? 106. Когда следует использовать Redux? Какие есть альтернативы? 107. Redux vs Mobx? 108. Расскажите о базовом принципе работы React Hooks. 109. В чем разница между createRef и useRef? 110. Когда следует использовать React refs? Когда не стоит? 111. Какие недостатки библиотеки React видите? 112. Какие паттерны используете вместе с React? 113. Как относитесь к типизации вместе с React? 114. Как построить хорошую архитектуру React-проекта? 115. Оптимизация React-приложений? Как измерить производительность программы? 116. Можно ли приложение на React встроить в другое приложение на React? Ответы на некоторые из этих вопросов вы можете найти в видео курсах React Базовый и React Углублённый.   Back-end 117. Почему Node.js однопоточный, а не многопоточный? 118. Что такое event driven development? 119. Сравните fork() и spawn() методы. 120. Расскажите о Node.js фреймворках, которые использовали. Какая между ними разница? 121. Опишите словам код ендпоинта, который должен сохранить с клиента файл размером 4 гигабайта и положить его на S3 или другой CDN. 122. Что такое микросервисы, зачем их используют? 123. В каких случаях вы бы выбрали монолит, а в каких - микросервисы? 124. Как понять, что приложение в определенный момент работает исправно? 125. Как понять, что приложение за последние три дня работал исправно? 126. Как происходит проверка правильности пароля при использовании bcrypt? 127. Что такое JWT? 128. Джуниор прислал код на ревью. Что здесь не так? Как исправить? router.post ( '/ users', async (req, res, next) => {   const user = await db.createUser (req);   if (user) {     return res.json (users);   }   res.json ({error: "can not create user"}) })   Базы данных 129. Что такое Redis и для чего его используют? 130. Какие базы данных использовали? Какая разница между SQL и NoSQL? 131. Для двух таблиц - комментарии и пользователи - напишите запрос, который выбирает последние три комментария для каждого пользователя. 132. Я как заказчик прошу выбрать вас базу данных для нового проекта. Ваши действия?   Инструменты и другое 133. Для чего нужен package-lock.json? 134. В чем разница между npm install и npm ci? 135. Для чего нужны бандлеры? 136. Расскажите о модульном подключении скриптов. Приведите пример использования загрузчиков / бандлеров модулей. 137. Чем различаются git merge и git rebase? 138. Что такое staging area в git? 139. Опишите процесс code review. Назовите основные правила, способы разрешения конфликтов и споров во время его проведения.   Практические задания 140. Напишите функцию Sleep (ms), которая останавливает выполнение async-функции на заданный промежуток времени. 141. Реализуйте один из методов массива (например, splice). 142. Напишите функцию с RegExp для нахождения всех HTML-ссылок в строке. 143. Реализуйте функцию, которая исполнит callback для всех элементов определенной ветви DOM-дерева. 144. Реализуйте таблицу с виртуальным скролом. 145. Реализуйте функцию преобразования URL query строки в JSON.   const inData = "user.name.firstname=Bob&user.name.lastname=Smith&user.favoritecolor=Light%20Blue"; function queryObjectify(arg) { // ?? } queryObjectify(inData) /* Результатом виконання для вхідного рядка, повинен бути наступний об’єкт {   'user': {     'name': {       'firstname': 'Bob',       'lastname': 'Smith'     },     'favoritecolor': 'Light Blue'   } }; */ 146. Реализуйте функцию нахождения пересечения двух массивов. const first = [1, 2, 3, 4]; const second = [3, 4, 5, 6]; function intersection (a, b) { // ?? } intersection(first, second) // -> [3, 4] 147. Реализуйте функцию / класс для генерации HTML. const HTMLConstruct = {}; HTMLConstruct.span('foo'); // -> <span>foo</span> HTMLConstruct.div.span('bar'); // -> <div><span>bar</span></div> HTMLConstruct.div.p( HTMLConstruct.span('bar'), HTMLConstruct.div.span('baz') ); // -> <div><p><span>bar</span><span>baz</span></p></div> 148. Если есть проект с ограниченными сроками и некритичной производительностью, чем будете руководствоваться при выборе библиотек, подходов? Или все же будете обращать внимание на производительность? Или наоборот: сроки нелимитированные, производительность важна. Ваши действия?   Senior Общие 1. Расскажите о функциональном программировании. 2. Что такое TDD (Test Driven Development) / BDD (Behaver Driven Development)? 3. Расскажите подробно о работе HTTPS. 4. Какой стек технологий можно выбрать для реализации клона какого-нибудь известного проекту и почему? 5. Имеется проект на старых технологиях, необходимо в него вносить изменения. Как это сделать лучше всего? 6. Если у кандидата есть опыт работы с несколькими фреймворками: какой будете использовать для следующего проекта? Какие факторы будут влиять на выбор? 7. Что такое V8 Engine?   JS Core 8. Реализация паттерна Class Free OOP (HTTPs://observablehq.com/@bratter/class-free-oop). 9. Патерн async disposer (HTTPs://advancedweb.hu/what-is-the-async-disposer-pattern-in-javascript). 10. использование регулярных выражений. Когда приемлемо / неприемлемо? Как они работают? Как можно сделать читабельный код?   Front-end 11. Как браузер определяет, можем ли мы общаться между вкладками? 12. Что такое Content Security Policy? 13. Как избежать загрузки кэшированных файлов скриптов и стилей? 14. Что такое requestAnimationFrame? 15. Расскажите о микросервисной архитектуре Front-end App. 16. Что такое Shadow DOM? 17. Сравните nextElementSibling и nextSibling. 18. Какие знаете метрики веб-сайта?   Angular 19. Как проводится конфигурация NgZone-модуля? Когда это необходимо? 20. Что раздражает в фреймворке? Что бы вы изменили? 21. Если бы вы решали, что добавить в следующем релизе фреймворка, какая фича это была бы? 22. Писали ли вы кастомные декораторы? Если да, то зачем? 23. Сделать ревью кода и дать замечания по архитектуре. 24. Расскажите, как бы вы делали такие фичи. Опишите архитектуру фичи в приложении.   Back-end 25. Сравните Common.js с AMD Modules и ES6 Imports. 26. Какой фреймворк выбрали бы для бэкенда, почему? 27. Опишите своими словами, как работает OAuth v2. 28. Есть проект с источниками памяти, как их обнаружить, устранить и предотвратить это в будущем? 29. Есть проект с performance issues, как их обнаружить, устранить и предотвратить в будущем?   Базы данных 30. Какие альтернативные виды баз данных используете? 31. Что такое RDS и почему он иногда не подходит? 32. Что такое SQL Injections и как их избежать? 33. Почему для запросов в БД надо использовать плейсхолдеры? 34. Как спроектировать кластер на MongoDB? 35. Для чего используют MongoDB Aggregation framework? 36. Расскажите о GraphQL.   Инструменты 37. Можете ли вы описать суть методологии git flow в двух словах? 38. Что означает требование делать squash commits во время rebase? 39. Каково ваше мнение об альтернативных системы контроля версий (Version Control System)? 40. Какие конвенции знаете и используете для git? 41. Расскажите о своем опыте использования / внедрения CI / CD. 42. Необходимо настроить деплой проекту на несколько сред. Расскажите, как бы вы построили процесс? Какие инструменты использовали бы?   Практические задания 43. Реализуйте асинхронный метод filter для Array (должны работать await). 44. Реализуйте функцию reduce при помощи рекурсии. 45. Как можно было бы сделать toggle-компонент, как в iPhone, без использования JS?   Благодарим за помощь в подготовке статьи Вячеславу Колдовскому, Ивану Рыженку, Николаю Галкину, Александру Бурмистрову, Владу Балабашу, Андрею Шумаде, Ивану Кувацкому, Андрею Кладочному.
100+ питань з Python для Junior, Middle та Senior

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

Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 30 сентября 2020 года. Оригинальная версия на украинском языке доступна по ссылке. Редакция DOU пообщалась с разработчиками, которые проводят технические собеседования Python-специалистов для различных уровней, и собрала примерный список вопросов к кандидатам. Конечно, он не является исчерпывающим, однако содержит типичные вопросы.   Вопросы для Junior   От джуниоров требуют знать и уметь применять базовые структуры данных и модули, простейшие запросы к базам данных, знать простейшие команды системы контроля версий и тому подобное. Общее по Computer Science и Web Development: 1. Что такое инженерия и процесс разработки в целом? 2. Какие знаете принципы программирования? 3. Чем отличаются процедурная и объектов-ориентированная парадигмы программирования? 4. Какие основные принципы ООП (наследование, инкапсуляция, полиморфизм)? 5. Что такое множественное наследование? 6. Какие есть шесть этапов разработки продукта в Software Development lifecycle и какая разница между Agile и Kanban? 7. Какие есть методы HTTP-запросов и какая между ними разница? 8. Как выглядят HTTP-request / response? 9. Что такое авторизация и как она работает? 10. Что такое cookies? 11. Что такое веб уязвимость? 12. Какие знаете классические базы данных? 13. Как читать спецификацию в конкретном языке (например, PEP8 в Python)? 14. Как происходит взаимодействие клиента и сервера? 15. Какие есть подходы к проектированию API? 16. Как использовать паттерны программирования? 17. Что такое Acceptance Testing и зачем его используют? 18. Что такое модульные и интеграционные тесты, API-тесты? 19. Как писать unit-тесты? 20. Какие есть best practices в написании автотестов? 21. Какие базовые команды системы контроля версий? 22. Как использовать Git? 23. В чем разница между хешированием и шифрованием? Ответы на некоторые из этих вопросов вы можете найти в видео курсах Python Базовый, Python Углублённый, Основы работы с Git.   Python: 24. Python - интерпретируемый язык или компилируемый? 25. Какие есть меняющиеся и постоянные типы данных? 26. Что такое область видимости переменных? 27. Что такое introspection? 28. Разница между is и ==? 29. Разница между __init __ () и __new __ ()? 30. В чем разница между потоками и процессами? 31. Какие есть виды импорта? 32. Что такое класс, итератор, генератор? 33. Что такое метакласс, переменная цикла? 34. В чем разница между итераторами и генераторами? 35. В чем разница между staticmethod и classmethod? 36. Как работают декораторы, контекстные менеджеры? 37. Как работают dict comprehension, list comprehension и set comprehension? 38. Можно ли использовать несколько декораторов для одной функции? 39. Можно ли создать декоратор из класса? 40. Какие есть основные популярные пакеты (requests, pytest, etc)? 41. Что такое lambda-функции? 42. Что означает *args, **kwargs и как они используются? 43. Что такое exceptions, <try-except>? 44. Что такое PEP (Python Enhancement Proposal), какие из них знаете (PEP 8, PEP 484)? 45. Напишите hello-world сервис, используя один из фреймворков. 46. Какие есть типы данных и какая разница между list и tuple, зачем они? 47. Как использовать встроенные коллекции (list, set, dictionary)? 48. В чем заключается сложность доступа к элементам dict? 49. Как создается объект в Python, для чего __new__, зачем __init__? 50. Что знаете из модуля collections, какими еще built-in модулями пользовались? 51. Что такое шаблонизатор и как в нем выполнять базовые операции (объединять участки шаблона, выводить дату, выводить данные с серверной стороны)? 52. Как Python работает с HTTP-сервером? 53. Что происходит, когда создается виртуальная среда? Ответы на некоторые из этих вопросов вы можете найти в видео курсах Python Стартовый (урок 2, урок 4-8), Python Базовый (урок 1, урок 6, урок 7, урок 9), Python Углублённый (урок 1, урок 4).   Базы данных: 54. Какие есть базовые методы работы с SQL- базой данных в Python? 55. Что такое SQL-транзакция? 56. Как сделать выборку из SQL-базы с простой агрегацией? 57. Как выглядит запрос, который выполняет JOIN между таблицами и к самим себе? 58. Как отправлять запросы в SQL-базу данных без ORM? Ответы на некоторые из этих вопросов вы можете найти в видео курсе SQL Базовый.   Алгоритмы: 59. Что такое алгоритмы (например, Big-O notation)? 60. Какие есть базовые алгоритмы сортировки? 61. Что такое Bubble Sort и как это работает? 62. Что такое линейная сложность сортировки?   Вопросы для Middle   Если джуниору все надо подсказывать и помогать, то мидл может самостоятельно взять что-то новое и быстро его изучить и понять. У него накоплено достаточно знаний и опыта, чтобы быстро овладевать новым. Он может прийти и обсудить с опытным разработчиком, проконсультироваться, но окончательных решений не принимает. Обычно у мидлов спрашивают: 63. Ориентируетесь ли в *nix, можете ли написать скрипты/автоматизацию для себя и коллег? 64. Что такое многопоточность? 65. Что такое архитектура веб сервисов? 66. Как работает современное нагруженное веб приложение (нарисовать и обсудить примерную архитектуру, например, Twitter или Instagram)? 67. Что нужно для сайта / сервиса среднего размера (redis \ celery \ кэш \ логирование \ метрики)? 68. Как написать, задеплоить и поддерживать (микро) сервис? 69. Как масштабировать API? 70. Як проводить Code review? 71. Что такое абстрактная фабрика, как ее реализовать и зачем ее применяют? 72. Что такое цикломатическая сложность?   Python: 73. Async Python: как работает, зачем, что под капотом? 74. Сравнить асинхронные web-фреймворки. 75. Что такое модель памяти Python? 76. Что такое SQLAlchemy (Core и ORM частей) и какие есть альтернативы? 77. Принципы работы и механизм Garbage collection, reference counting? 78. Как работает thread locals? 79. Что такое _slots_? 80. Как передаются аргументы функций в Python (by value or reference)? 81. Что такое type annotation? 82. Для чего используют нижние подчеркивания в именах классов? 83. Статические анализаторы: Flake8, Pylint, Radon. Ответы на некоторые из этих вопросов вы можете найти в видео курсе Python Углублённый (урок 3).   Базы данных: 84. Разница между SQL и NoSQL? 85. Как оптимизировать SQL-запросы? 86. Какие есть уровни изоляции транзакций? 87. Какие есть виды индексов? 88. Точечные вопросы по выбору БД, движков БД? 89. Front-end: есть ли опыт работы с «современным» JS (Babel, Webpack, TS, ES)? 90. DevOps: работали ли с Docker-контейнерами, объяснить основные термины K8s (кластер, pod, node, deployment, service), что такое Kibana? 91. Алгоритмы: что такое временная сложность алгоритма (time complexity)? 92. Углубленные знания Linux: как зайти на внешний сервер, работать с пакетами, настроить среду и выполнять операции? 93. Специфично для Data Science: как работать с пакетами для обработки и визуализации данных (NumPy, Pandas и другие)? Ответы на некоторые из этих вопросов вы можете найти в видео курсе SQL Базовый.   Вопросы для Senior   На собеседованиях с Senior`ами обычно мало говорят о теоретической стороне технологии, больше обсуждают конкретный опыт разработчика. Поэтому формализованных вопросов здесь нет. Однако, примером могут быть: 94. Что такое @property? 95. Каким образом можно запустить код на Python параллельно? 96. Как работать с stdlib? 97. Какие задачи решали с помощью метаклассов? 98. Что такое дескрипторы? 99. Знания других языков, кроме Python (опыт). 100. Какие технологические особенности реализации распределенных систем? 101. Какие есть низкоуровневые особенности языков и фреймворков? 102. Способы и методы управления памятью.   Бонус. Практические задания   1. Спроектировать клон Instagram. Это сервис, который понятен практически любому кандидату, даже если у него нет аккаунта. На высоком уровне он очень прост: картинки, описания, комментарии. Поэтому что-то минимальное сможет описать и джуниор. Если кандидат претендует на высшие позиции, можно бесконечно копать вглубь, касаясь API, тротлинга запросов, защиты от фрода, построения фидов пользователя и тому подобное. 2. Дано рекурсивное определение чисел Фибоначчи, надо написать функцию, которая реализует это определение. 3. Есть база данных из трех таблиц — стандартная many-to-many схема. Нужно написать запрос, который объединяет три таблицы и возвращает определенный результат. 4. Даем ТЗ какого-то полезного микросервиса (сокращалка url-ов, поиск дубликатов картинок, поиск тегов в текстах) или функции (rate limiter). Просим кандидата рассказать, как бы он его реализовал. Это дает возможность узнать, что привык использовать специалист, насколько глубоко он знает и понимает различные технологии. 5. Написать какой-то несложный декоратор (выводит аргументы функции на экран или, например, измеряет сколько времени выполнялась функция). 6. Junior`у можно предложить реализовать задачу FizzBuzz test. 7. Для Middle+ я люблю давать несложные задачки на рекурсию. Например, есть вложенный список чисел и нужно что-то на нем посчитать (скажем, найти максимум). Также, можно предложить написать аналог deepcopy для конкретной структуры данных (tree, graph). 8. Для Senior - игра «спроектировать за 5 минут...». Это может быть Google, FB, Twitter, высоконагруженный интернет-магазин, сервис поиска, продажи и бронирования билетов, сайт новостей и тому подобное. Такая задача помогает понять, как кандидат решает проблемы, ход его мыслей, умеет ли он отделять главное от второстепенного, понять, какого он типа ( «в глубину» или «в ширину»). 9. Игра «у юзера что-то не работает». На примере спроектированной системы собеседователь придумывает ошибку с «дикими симптомами», которую очень сложно понять, воспроизвести. Но нужно быстро решить проблему. 10. Задание, которое демонстрирует знание и понимание list и dict comprehensions. Looking at the below code, write down the final values of A0, A1, ...An.             A0 = dict(zip(('a','b','c','d','e'),(1,2,3,4,5)))             A1 = range(10)             A2 = sorted([i for i in A1 if i in A0])             A3 = sorted([A0[s] for s in A0])             A4 = [i for i in A1 if i in A3]             A5 = {i:i*i for i in A1}             A6 = [[i,i*i] for i in A1]             A7 = [i if i%2 else 0 for i in A1 if 2 < i < 8]             ','.join(str(j**2) for j in range(10)) – what is this object ?   11. Задача, в которой есть три функции, в них выполняются базовые операции (сортировка, фильтрация, поднесение массива к квадрату). Нужно упорядочить эти три функции в порядке возрастания времени, которое уходит на их выполнение. Place the following functions below in order of their efficiency. They all take in a list of numbers between 0 and 1. The list can be quite long. An example input list would be [random.random () for i in range (100000)]. How would you prove that your answer is correct? - profiling? def f1 (lIn):             l1 = sorted (lIn)             l2 = [i for i in l1 if i <0.5]             return [i * i for i in l2] def f2 (lIn):             l1 = [i for i in lIn if i <0.5]             l2 = sorted (l1)             return [i * i for i in l2] def f3 (lIn):             l1 = [i * i for i in lIn]             l2 = sorted (l1)             return [i for i in l1 if i <(0.5 * 0.5)]   То есть, на входе все функции имеют одинаковые данные, на выходе выдают одинаковый результат. Но из-за того, что внутри операции выполняются в разном порядке, время выполнения будет отличаться. Здесь нужно разбираться в алгоритмах и понимать, что происходит с твоими данными в процессе. Эту задачу может решить Junior, а может не решить и Middle. Казалось бы, такая мелочь, но когда мы работаем с большим количеством данных, важно, чтобы код был оптимизирован и программа выполнялась максимально быстро.   12. Простые задачи на статистику или логику. Например, определить угол между стрелками часов, которые показывают 8:40. За подготовку материала редакция DOU выражает благодарность Михаилу Кашкину (Founder в Okumy и курсов по Python), Руслану Скире (Python Developer в CodeIT LLC), Бориславу Ларину (Python Developer в Prom.ua), Владимиру Обризану (Director в Design and Test Lab), Виктору Свирскому (Senior Developer в DataArt), Николаю Зорину (CTO в Jiji, проект Genesis), Владимиру Селюху (Team Lead в Prom.ua), Сергею Галабурде (Software Engineer в N-iX), Алексею Чуприкову (Lead Python Engineer в EPAM), Ивану Лучку (TL Data Science Specialist в Boosta), Олегу Новикову, Владимиру Щербинину, Роману Могилатову (Technical Leader в SoftServe), Вадиму Рудю, Натальи Кушнир, Андрею Лейцюсю, Роману Луцю и другим. Перевел на русский язык Владислав Сверчков
150+ питань з .NET для Junior, Middle та Senior

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

Дорогие друзья! Предлагаем вашему вниманию перевод статьи, опубликованной на DOU.ua 10 ноября 2020 года. Оригинальная версия на украинском языке доступна по ссылке. На DOU размещено более 450 вакансий для .NET-разработчиков, что свидетельствует о популярности этой технологии. Редакция DOU собрала вопросы, которые .NET-разработчики задают своим коллегам на технических собеседованиях. Готовьтесь на здоровье :) Вопросы для Junior Общее 1. Назовите основные принципы ООП. 2. Что такое наследование, инкапсуляция, абстракция, полиморфизм: приведите примеры (желательно из собственного опыта). От какого класса неявно наследуются все классы в .NET? Разрешено ли множественное наследование в C#? 3. Что такое рекурсия? 4. Что такое лямбда-выражение? 5. Что такое параллельное программирование (многопоточность) и его назначение? Какие классы используются? 6. Что такое JSON? 7. Как вы понимаете REST? 8. Расскажите о SPA concept. 9. Какие GoF-паттерны использовали? 10. Какая разница между GET и POST HTTP методами? 11. Какую проблему решает Docker? Каковы его плюсы и минусы? 12. Чем принципиально отличаются unit-тесты от интеграционных тестов?   Обработка исключений 13. Что такое Exception? 14. Для чего служат try, catch, finally? В каком случае может не выполниться блок finally? 15. Что такое call stack? Какие ключевые слова вы знаете?   Платформа .NET 16. Что такое ASP.NET? 17. Какие существуют типы Action filters? 18. Что такое Web Service? 19. Что такое CLR? 20. Что такое сборщик мусора (Garbage Collector) на базовом уровне? 21. Что такое делегат? 22. Отличается ли Delegate от Action? 23. Что такое LINQ и для чего используется? Приведите несколько примеров применения LINQ. 24. Что такое пространство имен (namespace) и зачем это нужно?   Типы данных, коллекции и структуры данных 25. Какие типы данных вы знаете? 26. Какие примитивные типы знаете? 27. Что такое Nullable-тип? 28. Что такое тип значения, а что такое тип ссылки? Что из этого class, а что struct? В каком участке памяти они хранятся? 29. Чем отличаются value от reference type? String - это reference или value? 30.В чем отличие между string builder и string? 31. Что такое дженерики? Какие проблемы они решают? 32. Что такое boxing / unboxing? 33. Что такое Array, List, HashSet, Dictionary? Приведите примеры использования этих структур данных. Какая сложность операций с ними (поиск, вставка, удаление)? 34. Какие знаете коллекции? 35. Что делает оператор yield?   Классы, структуры и интерфейсы 36. Что такое класс? 37. Чем отличается класс от абстрактного класса? 38. Чем отличается абстрактный класс от интерфейса? Для чего нужны интерфейсы и какие задачи они выполняют? 39. Какие вы знаете модификаторы доступа? 40. В чем разница между обычным классом и статическим? 41. В чем разница переопределения метода между ключевыми словами new и override? 42. Какое различие между const и read only? 43. Разница между структурой и классом. Приведите примеры структур. 44. Может ли экземпляр структуры храниться в куче (heap)? Как это сделать?   Асинхронность 45. Что такое асинхронность и чем она отличается от многопоточности? 46. Какие есть ключевые слова для использования асинхронности в коде? 47. Что означают ключевые слова async / await?   Базы данных 48. Разница между реляционными и нереляционными базами, плюсы и минусы использования обоих вариантов. 49. Что такое индексы в RDBMS? 50. Какие типы JOIN существуют в SQL?   Тестирование 51. Для чего нужны unit-тесты? 52. Какие преимущества и недостатки использования unit-тестов? 53. Из каких трех логических блоков состоит unit-тест?   Вопросы для Middle   Общее 54. Вы набираете google.com в браузере. Расскажите как можно подробнее, что происходит в это время на HTTP-уровне? 55. Как работает HTTPS? 56. Как вы понимаете SOLID? 57. Какие протоколы сериализации вы знаете и где они применяются? 58. Что такое в вашем понимании чистая функция? Какие у нее преимущества? 59. Что такое dependency injection и зачем оно нужно? 60. Что такое cohesion и coupling (связанность и связность)? 61. Что такое IaaS, PaaS, SaaS и каковы различия между ними? 62. Какие способы отладки программы вы используете? 63. Какие знаете паттерны? Объясните суть перечисленных. 64. В чем суть паттерна Singleton? Почему его еще называют антипаттерном? 65. Для чего нужен паттерн Strategy? 66. Какие ключевые различия между распределенными системами и монолитными? 67. Какие паттерны проектирования распределенных систем вы знаете? 68. Какие есть принципы работы Message bus? Почему могут возникать дубликаты в очередях? 69. Какие принципы построения идемпотентных сервисов знаете? 70. Расскажите, как работают асинхронные методы? Чем асинхронность отличается от параллелизма?   Платформа .NET 71. Какие исключения нельзя остановить в блоке catch? 72. Какая разница между .NET Standard Class Library и .NET Core Class Library? 73. Объясните разницу между отложенным и немедленным исполнением в LINQ. Приведите примеры. 74. Для чего нужен метод ConfigureServices в Startup.cs? 75. Какая разница между services.AddTransient и services.AddScope в ASP.NET Core? 76. Что такое Kestrel? 77. Опишите ASP.NET MVC request pipeline. 78. Как в ASP.NET WebAPI настроить кэширование ответов на HTTP-запросы?   Управление памятью 79. Что такое куча и стек? Различия, принцип работы. 80. Как работает сборщик мусора? 81. Зачем нам зарезервированное слово using в C#, если в .NET есть автоматическое управление памятью? Как с этим связан disposable-паттерн и зачем такой сложный паттерн для managed и unmanaged ресурсов? 82. Какие особенности работы с Large Object Heap?   Типы данных, коллекции и структуры данных 83. Когда генерируется дженерик-класс конкретного типа - при выполнении программы или во время компиляции? 84. Что такое рефлексия? 85. Расскажите о коллекции LinkedList <T>. Чем она отличается от других коллекций? 86. Что такое индексатор? 87. Что такое immutable object? Какие преимущества дает использование immutable object? Предложите способ реализации его в .NET. 88. Когда использовать StringBuilder, а когда string? Как работает StringBuilder? 89. Что такое балансирование деревьев? 90. Что такое Key-value структуры? 100. Что такое хэш-функция и зачем нужны хэш-таблицы? 101. Какими свойствами должна обладать идеальная хеш-функция? 102. Что такое коллизии и как с ними бороться? 103. В чем заключается сложность CRUD-операций в Dictionary <K, V> в .NET? 104. Где хранятся массивы? Массивы примитивных типов? 105. В чем отличие между массивом (T [ ]) и списком (List <T>)? 106. В чем разница между IList <T> и IEnumerable <T>? 107. Зачем нужны Enumerable, Observable, AsyncEnumerable и какие модели получения данных они реализуют? 108. В чем разница между IEnumerable и IQueryable? 109. Что такое enum flags?   Базы данных 110. Расскажите о нормальных формах в СУБД. 111. Что такое индекс в БД? 112. Когда следует использовать индексы? Преимущества и недостатки. 113. Какие типы индексов существуют? Чем они отличаются? 114. Что такое ACID? 115. Какие вы знаете уровни изоляции транзакций? 116. Что такое план выполнения запроса (execution plan) в MS SQL? 117. Проблема: запрос долго выполняется. Какие есть методы ее диагностики и решения? 118. Как ORM (Entity Framework или Entity Framework Core) транслируют C# код в язык запросов базы данных? Что для этого используется?   Параллелизм 119. Для чего использовать Task.ConfigureAwait? 120. Например, есть веб-сервер, который по HTTP-запросу делает выборку из базы данных. Всего на сервере 16 тредов (threads). Каждый HTTP-request выполняет запрос в базу и ожидает результатов, в этом случае тред блокируется. Можно ли оптимизировать эту работу средствами .NET? 121. Зачем нужен ThreadPool? Опишите механику работы: как поток выделяется и возвращается обратно в ThreadPool.   Вопросы для Senior   Общее 122. Какие ещё практики, кроме ООП, использовали (AOP, FP и т. д.)? 123. Назовите три самые сложные проблемы, которые вам приходилось решать. Как вы это сделали, как пришли к этому решению? 124. Что такое слабосвязанный код? Чем он лучше сильносвязанного кода? Как бы вы достигали более слабой связности кода? 125. Использование статических классов повышает или понижает связность кода? 126. Как можно измерить performance кода? Влияет ли факт замеров на производительность? 127. Для чего используются и как работают multi-stage билды в Docker? 128. Как понять, что какая-то часть кода утилизирует много памяти или долго выполняется? Что может быть ботлнеком в разных случаях? Какие есть способы уменьшения памяти и трафика памяти? 129. Как бы вы реализовали cross-cutting concern (например, логирование, валидация, транзакции)? 130. Расскажите о Rest Maturity Model. 131. Что такое CPU и IO-bound задачи? 132. Что такое маршалинг? 133. Как работает async / await (подробно)? Почему нельзя использовать async void методы?   Платформа .NET 134. Как работает lock? Можно ли использовать структуры внутри выражения lock? 135. Что такое Expression Tree? 136. Как работает сборщик мусора (подробно)? Почему в GC три поколения, а не, скажем, пять, десять или два? 137. Как бы вы организовали трассировки Web API сервисов? 138. Как в .NET Core можно настроить хранение секретов на компьютерах разработчиков и на рабочих средах? 139. Как бы вы организовали процесс CI/CD .NET Core сервисов для их деплоймента в облачную инфраструктуру? 140. Как включить CORS в AspNetCore?   Типы данных, коллекции и структуры данных 141. Как реализованы дженерики? 142. Как создать собственный immutable-тип? 143. Как работает IEnumerable <T> (подробно)? 144. Какой алгоритм использует коллекция STACK? 145. Какие структуры данных вы реализовывали сами для платформы .NET? Расскажите, чем они отличались от стандартных реализаций. 146. Чем отличается интерфейс от абстрактного класса? В каких случаях вы использовали бы и то, и другое? 147. Почему в структуре нет конструктора по умолчанию?   Базы данных 148. Как БД сохраняет данные? 149. Какие типы БД вы знаете? 150. Как и когда БД лучше использовать? 151. Что такое денормализации? 152. Когда и какие уровни изоляции транзакций можно использовать? 153. Как в популярных СУБД реализованы принципы ACID (SQL Server, PostgreSQL и т. д.)? 154. Приходилось ли вам оптимизировать запрос в БД? Если да, то как? 155. Опишите, какие вы знаете потенциальные проблемы, связанные с параллельными запросами к БД. 156. Какую базу данных вы бы использовали для реализации distributed lock механизма? Расскажите детали реализации.   Микросервисы 157. Какую проблему решают микросервисы? 158. Какие есть способы коммуникации микросервисов? 159. Расскажите варианты реализации распределенных транзакций в микросервисах. 160. Что такое circuit breaker? 161. Каким образом вы будете налаживать систему, состоящую из множества микросервисов, если нужно отследить полный путь обработки запроса? 162. Что такое брокеры сообщений? Что такое at-least-once, at-most-once семантика? Есть ли какие-то брокеры, которые гарантируют exactly-once семантику? 163. Как должен работать код клиента брокера в зависимости от выбранной семантики? 164. Какие инструменты для работы с очередями вам известны (как в .NET, так и отдельные продукты), какой инструмент/продукт вы бы выбрали и почему?   MS Azure 165. Какие виды сервисов бывают в Service Fabric? 166. Какие особенности и ограничения Azure Table Storage? 167. Как бороться с проблемой холодного старта в Azure Functions? 168. В чем отличие очередей и топиков в Azure Service Bus?   Практические задания   Junior only Опишите, как бы вы реализовали калькулятор. Если понадобится добавить поддержку для римской системы счисления, что будете делать? Напишите программу, чтобы проверить, является ли число простым или нет. Найдите наименьший элемент в массиве. Упорядочите структуры папок в файловой системе. Напишите программу, которая симулирует fizz-buzz. Расскажите, что делает этот код, и предложите, как его улучшить. а) public bool IsArrayEmpty(string[] array) {   if (array.Length > 0)     return false;   else     return true; }   б) protected string GetClass(object url) {   string result = string.Empty;   if (SiteMap.CurrentNode != null && SiteMap.CurrentNode.Url == url.ToString())     result = "class=\"active\"";   return result; }   Middle Напишите программу для тиражирования последовательности Фибоначчи для заданного числа. Спроектируйте базу данных врачей и пациентов в SQL. Создайте stored procedure или запрос в SQL, который вернет врачей, имеющих больше, чем N пациентов. Проверьте коллекцию на наличие дубликатов. Спроектируйте thread-safe класс Singleton в C#. Надо записать некую сущность в базу данных и отправить событие в брокер сообщений. Как это сделать с минимальным риском потери данных? Имеются три сервиса. Выполняется HTTP-запрос на первый. Первый должен записать данные во второй, а второй - в третий. Как гарантировать, что данные при такой сложной коммуникации не потеряются? Как предотвратить записи дубликатов данных? Будет ли работать этот код и почему? a) SomeClass myClass = null; myClass.SomeMethod();   б) var table = GetTable(); table.Draw(); … private SomeClass GetTable() {   using(var table = new SomeClass())   {     table.ID = "www";     table.Width = "95%";     table.Controls.Add(tr);     return table;   } } Расскажите, что делает этот код, и предложите, как его улучшить: а) Shape shape = GetNextShape(); if(shape is Circle) Console.WriteLine(((Circle)shape).Radius);   б) public int Quantity {   get   {     try     {       return int.Parse(TxtQuantity.Text);     }     catch (Exception)     {       return 0;     }   } }   Что не так с кодом?   try {   SomeMethod(); } catch(Exception e) {   Log(e.Message);   throw e; }   Senior Как бы вы спроектировали FTP-сервер? Web-сервер? Хостинг картинок с разделением прав доступа? Систему, состоящую из front- и back-офисов? Создайте клон любой популярной социальной сети (Instagram, Facebook и т.д.) Допустим, есть сущность сделки (Bid). И в сделке есть список партнеров, с которыми эта сделка заключается. Сами сделки хранятся в сервисе сделок (bidding service), а партнеры - в своем сервисе (partners service). И когда показывается список сделок, на начальном скрине нужно отразить количество партнеров. Как бы вы спроектировали хранение и изображение этого счетчика? Задача на знание LINQ: с исходной коллекции данных необходимо получить новую коллекцию по определенным требованиям (например, отсортированную, без дубликатов и т. д.). Напишите программу, которая проверяет, является ли поле судоку 9×9 правильно заполненным. Реализуйте свой Select, Where, SelectMany со всеми характеристиками LINQ (отложенное исполнение, одномоментная (eager) проверка входных данных). С помощью LINQ напишите метод, который вернет такие элементы коллекции, которые делятся на N без остатка, отсортированные от наибольшего значения к наименьшему. Сигнатура метода: List <int> Filter (IEnumerable <int> collection, int n) ;. Напишите функцию, которая вернет сумму всех четных элементов массива, который передается в функцию (JavaScript).   Выражаем благодарность за подготовку статьи Алексею Краевому, Максиму Шнуренку, Андрею Ткаченку, Владу Медведовскому, Сергею Селецкому, Андрею Губскому, Сергею Мащуренку, Александру Скриннику, Андрею Соболю, Богдану Нановскому, Святославу Аксёнчикову, Ивану Корнелюку, Михаилу Пивоварову, Алексею Дерке, Евгению Гуреву, Михаилу Меркулову, Юрию Воронину.
Міфи про програмування та програмістів

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

Миф 1. Без знания математики дверь в программирование закрыта Миф 2. “Прочту книгу — стану программистом” Миф 3. Чтобы освоить программирование, необходимо быть очень умным Миф 4. Необходимо обладать талантом к написанию кода Миф 5. Программисты — замкнутые и необщительные люди Миф 6. Программирование — скучное занятие Миф 7. Программисты всё пишут с нуля Миф 8. Чтобы устроиться на работу в качестве программиста, необходимо очень долго учиться Миф 9. После курсов у вас сразу высокая ЗП Миф 10. “Выучи язык программирования… за 1 час!” Миф 11. Нельзя освоить программирование самостоятельно Миф 12. Программисты разбираются во всём, что связано с техникой Миф 13. Программирование — мужское занятие Миф 14. Существует самый-самый лучший языка программирования Миф 15. Разработчики компьютерных игр — самые богатые и счастливые люди в IT Миф 16. Начинающим айтишникам устроиться на работу невозможно Миф 17. Пойду в ВУЗ, там меня научат программированию Миф 18. Программирование имеет возрастные ограничения Миф 19. Программист — вымирающая профессия: роботы заменят этих специалистов Итоги   Приветствуем вас, друзья! При своей относительной молодости программирование успело обзавестись приличным количеством мифов. Время, когда писателей кода считали дикими отшельниками, потихоньку уходит. Однако, и по сегодняшний день многие имеют ложные представления о программировании. Некоторые считают, что программист - это человек, который взламывает компьютерные системы, банкоматы и совершает прочие несогласованные с буквой закона действия. Другие уверены: программист и компьютер тебе починит, и Windows переустановит, и ТВ-каналы настроит, и новый Фейсбук за ночь напишет, и покажет, как генерировать содержание документа в Ворде.  Более того, некоторые стереотипы настолько прижились, что стали отпугивать новичков в IT и мешать их профессиональному дебюту в данной сфере. Мы подготовили для вас рейтинг самых главных мифов, которые необходимо развеять в первую очередь. Давайте же приступим к их разрушению.   Миф 1. Без знания математики дверь в программирование закрыта Одно из самых распространенных заблуждений. Как мы уже упоминали в статьях “Нужно ли программисту высшее образование?” и “FAQ начинающего программиста”, важно не столько знание математики напрямую, сколько само математическое мышление. Сейчас мы все объясним. Для того, чтобы начать изучение любого популярного языка программирования (ЯП), с головой хватит знаний школьной алгебры. Согласно опросу Stack Overflow Developer Survey 2020, более 50% разработчиков-респондентов написало свою первую строку кода до 16 лет, а в этом возрасте никто еще не изучает высшую математику. Значит, сделать старт в программировании может любой, кто учился/учится в обыкновенной среднестатистической школе. Это первая ступенька на пути к качественному овладению ЯП. Когда вы начнете более-менее ориентироваться в языке и поднабьете руку на практических задачках, вам необходимо будет изучить смежные с математикой дисциплины: теорию множеств, графов, автоматов, алгоритмов, базовую логику. Это программа первых курсов технических вузов по IT-направлению, однако и самостоятельное ее освоение — вполне подъемная задача. При этом наименее зависимыми от математики являются такие специальности, как верстальщик и FrontEnd разработчик. Хорошие знания в области высшей математики необходимы тем, кто хочет реализовать себя в таких направлениях: научная область, шифрование, машинное и глубокое обучение, Data Science, разработка искусственного интеллекта и все, что связано с большими данными. Именно там находит широкое применение тот мат. аппарат, которым славятся технические вузы. Математика в программировании — это, прежде всего, о математическом и аналитическом мышлениях, которые тесно связаны с критическим мышлением и позволяют абстрагироваться, развязывать задачи с умелым применением логики. Именно правильный взгляд и рациональный подход к решению задач является главным оружием программиста, поскольку программирование — это динамика, в то время, как формулы, теоремы и аксиомы статичны. С развитием мат. мышления вам помогут различные книги, а также практика — кодинг, решение математических задачек и прочие упражнения, которые можно найти на просторах интернета. Кстати, критическое мышление отлично развивают шоу с фокусниками. Посмотрите их, подумайте над тем, как маэстро смог провернуть тот или иной трюк (затем посмотрите соответствующие разоблачения). Также будут полезны детективные игры в стиле “Шерлока Холмса”, где, казалось бы, мистическим событиям находяться вполне логические объяснения. Умение не принимать всю информацию как чистую правду, а смотреть на нее со всех возможных углов — очень полезный навык не только в кодинге, но и в повседневной жизни.   В любом случае, данный миф о математике разрушен, а это означает, что начать программировать вы можете прямо сейчас.   Миф 2. Можно стать программистом, просто прочтя одну или несколько книг (“Прочту книгу — стану программистом”) Программирование — это в большей степени практика. Теория здесь обязательно должна подкрепляться добротным кодингом. Это обеспечит закрепление полученной информации, а также будет гарантировать понимание вами материала и способствовать развитию ваших навыков написания кода. Поэтому чтение книг начинающими программистами должно обязательно сопровождаться соответствующими отработками (практикой), иначе получите ноль пользы от литературы и только зря потратите свое время, не достигнув желаемого.    Миф 3. Чтобы освоить программирование, необходимо быть очень умным Миф, который отпугивает множество потенциальных программистов. Появился он из-за ложного убеждения, мол, программисты — это сверхразумы, которые видят мир, как в “Матрице” — в форме бесконечно бегущих зеленых символов. На самом деле они обыкновенные люди. Просто они горят кодом. Программистам нравится создавать компьютерные программы, веб-сервисы, игры, мобильные приложения. Точно так же экстремалам-байкерам нравится выделывать различные трюки на железном коне, знатокам поварского дела — готовить вкусные и красивые блюда, летчикам — поднимать в воздух многотонные крылатые гиганты, водителям — колесить по бескрайним просторам, психологам — помогать людям понимать себя. Если посмотреть на каждую профессию со стороны, в каждой можно найти свои сложности. И каждое препятствие преодолевается прежде всего большим трудом и упорством. А мозги — это часть организма, которая поддается прокачке, как и мышцы тела. Поэтому если вы чувствуете, что “недостаточно умны” для программирования, начинайте ломать этот барьер, работайте над собой и ни в коем случае не позволяйте каким-либо предубеждениям вставать у вас на пути. Никто этот шаг за вас не предпримет, так что все в ваших руках.       Миф 4. Необходимо обладать талантом к написанию кода Успех программиста как такового обусловлен его заинтересованностью выполняемой задачи, количеством специализированных знаний, степенью владения ЯП и математическим мышлением, а также прилагаемыми усилиями. Таланта или какого-то дара в перечне нет. Так что программирование — это 95% усердной работы. Не ожидайте манны небесной — работайте, трудитесь и тогда вы сможете преуспеть в создании кода.   Миф 5. Программисты — замкнутые и необщительные люди Возможно, в далеком прошлом это и было правдой, однако сейчас все совершенно по-другому. Более того, одними из главных требований к личным качествам программистов сегодня являются коммуникабельность, открытость и умение работать в команде. Время компьютерных гиков-одиночек кануло в Лету. Различные конференции, хакатоны, совместный отдых и развлечения — эти вещи как-то мало совместимы с замкнутостью и необщительностью, вы не находите? Такой спектр коммуникабельности не всегда можно встретить в фирмах, которые специализируются на коммуникациях с клиентами, а тут целые мероприятия, куда разработчики приходят пообщаться, заиметь новые связи, обменяться опытом и просто отдохнуть.    Миф 6. Программирование — скучное занятие На первый взгляд это правдоподобно: человек сидит перед монитором (или несколькими), набирает строчки кода и так целый день напролет. Ну что тут может быть интересного? Даже как-то страшно становится... Однако, это очень урезанный взгляд на то, чем занимается программист. Прежде всего, в рассматриваемой ситуации он может: разрабатывать одну из механик компьютерной/мобильной игры; создавать мобильное приложение; реализовывать привлекательный внешний вид веб-сайта; разрабатывать программу для какого-то “умного” устройства; работать над автоматизацией каких-то рутинных процессов, которые обыватели проделывают чуть ли не каждый день; писать программное обеспечение для космического аппарата, самолета, машины; и многое другое. Поверьте, кто-кто, а программисты не скучают — для них всегда есть работа, которая требует и знаний, и навыков, и творческого подхода к решению. К тому же, у каждого человека свой спектр интересов. Кто-то программирование считает скучным вследствие своего гиперактивного способа жизни, а кто-то просто поддается влиянию когнитивного искажения, прислушиваясь к собственному ложному суждению, обусловленному субъективными предубеждениями и стереотипами, социальными, моральными и эмоциональными причинами, то есть, вырабатывает свое отношение к программированию на основе искаженной информации.   Миф 7. Программисты всё пишут с нуля Современные сложные программы состоят из сотен тысяч строк кода. Если бы программисты писали всё с нуля, то на разработку одной такой программы уходило бы очень много времени, особенно, если говорить про игры — там и вовсе приходилось бы для каждого нового экземпляра и движок свой создавать, и физику свою писать и делать много других лишних движений. А это и время, и деньги, и лишние нервы. Поэтому в среде программистов принято не заниматься разработкой “велосипедов”, а использовать проверенные наработки. Разработчики часто применяют сторонние библиотеки, а также код, который был написан ими самими либо другими кодерами для других проектов. Это существенно упрощает и ускоряет создание проектов любой сложности и любого объема.   Миф 8. Чтобы устроиться на работу в качестве программиста, необходимо очень долго учиться В каждом человеке это утверждение находит различное отображение. Кто-то может освоить ЯП и необходимые технологии за месяц. Кому-то на это потребуется пол года. Некоторые и за год не управятся. Все зависит от вашего желания и стремления изучать ЯП, а также от времени, выделяемого вами на теорию и практику. Поставьте перед собой четкую цель и не сворачивайте с выбранного пути. Максимально быстрого обучения можно достичь, выбрав хорошие курсы, разбавляя их большим количеством самостоятельной практики.    Миф 9. После курсов у вас сразу высокая ЗП Один из самых распространенных мифов, который делает программистов в глазах других, незнакомых с данной сферой занятости людей, буквально миллионерами. Мол, “вот мой знакомый недавно листовки раздавал, потом походил на курсы 2 месяца и теперь деньги лопатой гребет”. На самом деле все не так. Те, кто только окончил курсы по освоению той или иной IT-специальности, по своему уровню знаний и умений могут претендовать на должность разработчика-джуниора (младший разработчик, Junior Developer). Конечно, все зависит от выбранного направления и конкретного места работы, однако джуниоры не срывают куш и первое время имеют довольно невысокую зарплату, которая не всегда доходит до пятизначной отметки (если говорить об украинских гривнах). Приблизительно на третий год работы можно говорить о действительно хорошей заработной плате. Так что запомните: высокая ЗП — даже в IT — результат не курсов, а усердной и ответственной работы.     Миф 10. “Выучи язык программирования… за 1 час!” Миф касается различных видео уроков на YouTube, которые пестрят подобным названием и тем самым обманывают вас. Ни один язык программирования не учится за час. Большое количество опытных программистов утверждают: сколько лет они программируют, столько они изучают ЯП. Языки взаимодействия с электронно-вычислительными устройствами настолько же компактны и многогранны, как и те, которыми мы пользуемся в повседневности. Таким образом, во время изучения ЯП вы осваиваете основной синтаксис языка и то, как с ним работать. Затем во время профессиональной деятельности вы углубляетесь в язык и открываете для себя новые техники кодинга и решения различных задач. Но даже процесс овладения языком (синтаксис + основы работы с ним) — небыстрый процесс. У опытного программиста изучение нового ЯП может занять несколько дней. У новичка могут уйти месяцы — все зависит только от вас. Но на всевозможные “Выучи язык… за 1 час!” и подобные вещи не ведитесь; такие видео ролики создают иллюзию того, что вы знаете ЯП, в то время, как на самом деле вы толком ничего и не умеете.   Миф 11. Нельзя освоить программирование самостоятельно Можно. Просто на это уйдет больше времени, чем на обучение при помощи специализированных курсов. Причины тому очень просты: отсутствие ментора, который бы мог направлять вас в нужное русло, давать советы и отвечать на вопросы; отсутствие предельно четкого понимания о знаниях и умениях, которыми необходимо обладать, чтобы в будущем занять соответствующую должность; отсутствие четкой программы обучения, которая покроет весь необходимый профильный материал; отсутствие стимула и достаточной мотивации, которые обычно присутствуют в коллективной среде (тренер, другие учащиеся, домашние задания и т. д.). Главная проблема самостоятельного обучения в силе воли, которая зачастую быстро испаряется и в итоге изучение ЯП сводится к нулю. А программирование вещь серьезная — на недельку-другую все забросил и вот ты уже ничего не помнишь. Так что самостоятельно обучаться программированию можно, главное — запастись упорством, терпением, силой воли и мощной мотивацией, которая должна постоянно подпитываться.   Миф 12. Программисты разбираются во всём, что связано с техникой Как вы поняли из вступления статьи, это тоже миф, причем один из самых распространенных. Разработчик мобильных приложений специализируется на создании программ под мобильные устройства. Он знает соответствующие ЯП и смежные технологии, которые позволяют ему выполнять свою работу качественно и без лишних затрат времени, однако, с какой стати этот специалист должен уметь чинить телевизоры и устанавливать Windows? Или, например, человек увлекается программированием микроконтроллеров. Почему он должен уметь создавать веб-сайты, если это абсолютно другая отрасль в IT? Вы же не требуете от педиатра вылечить вам зуб, а от стоматолога — избавить вас от кашля? Хотя и тот и тот специалист — врач. Каждый является специалистом в своей области и не следует это забывать. Сюда же относится и миф о хакерах, согласно которому программисты приравниваются к людям этого рода деятельности. Опять-таки, сторонники данной теории слишком плохо знают IT-сферу, поэтому все равняют под одну гребенку. То, что человек разбирается в определенном ЯП и смежных технологиях не делает его хакером. Хакерство — это специфический род деятельности, который предусматривает достаточно глубокие знания компьютерных сетей, операционных систем, социальной инженерии, криптографии и множества других IT-ответвлений. Если хотите узнать больше подробностей, не пожалейте своего времени — совершите поиск по специализированным ресурсам и тогда сможете расставить все точки над “i“ — кто кем является и какой спектр знаний-умений какому IT-специалисту свойственен.     Миф 13. Программирование — мужское занятие Безусловно, мужчин в программировании больше, чем женщин. По данным исследования Stack Overflow Developer Survey 2020, женщин среди разработчиков 8%. В Украине процент женщин в IT в 2020 году достиг уровня 25%, согласно исследованиям DOU.ua. Однако, это связано, скорее, с определенными социальными и психологическими явлениями. Дело в том, что женщины по своей природе более “социальны”, чем представители мужского пола. Соответственно, они чаще выбирают те сферы занятости, которые предусматривают общение и социум. В то же время парни и мужчины увлечены преимущественно техническими науками, поскольку достаточно распространенная среди них интровертивность позволяет посвятить необходимое количество времени цифрам, формулам и вычислениям. Плюс детская любовь к конструкторам, машинам, компьютерным играм и всему, что связано с техникой, с экспериментами. Ну и стереотипы, привитые обществом — куда же без них. Однако, это ни в коем случае не означает, что женщинам путь в программирование заказан. С каждым годом все больше и больше представительниц прекрасного пола покоряют IT в различных его секторах. Не ведитесь на предубеждения — программирование абсолютно открыто для всех полов, народов и возрастов.    Миф 14. Существует самый-самый лучший языка программирования Очень часто в интернете можно наткнутся на неутихающие дискуссии касательно того, какой ЯП лучше. Однако “лучшего” не существует. ЯП подбирается под задачу, а не задачи под ЯП. Если вы хотите максимально быстро развернуть свой сайт, лучше обратить внимание на Python и фреймворк Django. Хотите самостоятельно запрограммировать, допустим, сигнализацию с инфракрасным датчиком? Выбирайте C/C++ либо низкоуровневый Assembler. Те же С/С++ подойдут под разработку тяжеловесных игр, а для более простых идеальным выбором будет среда разработки Unity вместе с языком C#. FrontEnd разработка немыслима без языков верстки HTML & CSS, а также языка программирования JavaScript. Определитесь с тем, какая сфера разработки вам интересна и тогда выбирайте тот язык, который вам по душе.    Миф 15. Разработчики компьютерных игр — самые богатые и счастливые люди в IT Казалось бы: ты посвящаешь себя тому, о чем мечтал, наверное, каждый ребенок девяностых и нулевых — компьютерным играм. Ну что может быть прекраснее этого? Воплощаешь в жизнь все свои детские задумки: создаешь героев, работаешь над их характерами, занимаешься реализацией собственного геймплея, придумываешь уникальные квесты, сюжет не хуже “Игры престолов”, открытый и насыщенный игровой мир… Да вот только одна проблема — это так не работает; на деле все получается совсем иначе. Чтобы стать разработчиком игр, необходимо ими “гореть”, причем “гореть” так, чтобы ни время, ни вода, ни песок, ни отсутствие кислорода не смогли потушить ваше пламя. Во-первых, богатство гейм девелоперов преувеличено. Если игра “выстреливает”, либо вы работаете на плюс-минус солидную студию, то тогда можно говорить о деньгах. Однако, приличное количество разработчиков занимаются инди-играми, то есть, разрабатывают игры без финансирования крупных компаний (в одиночку, либо небольшими группами энтузиастов). Естественно, пока вы работаете над своим продуктом, единственным источником внешних доходов могут быть лишь пожертвования (донаты) от потенциальной аудитории, которая заинтересована в вашем творении. Также, важно знать, что разрабатывать игры и играть в них — две абсолютно разные вещи. Игростроение — сам по себе трудоемкий и комплексный процесс, который сильно отличается от того, что мы себе воображали в детстве.   Подробнее о пути гейм-мейкеров вы можете прочесть в нашей статье “Как стать разработчиком игр”. В ней мы постарались собрать максимальное количество информации с отечественных и зарубежных информационных ресурсов, чтобы подать вам все самое вкусное в одном компактном виде.      Миф 16. Начинающим айтишникам устроится на работу невозможно Действительно, если брать на рассмотрение популярные направления в IT, то конкуренция достаточно большая. И это на фоне растущих с каждым годом требований от работодателей. Однако, это не означает, что IT-отрасль закрыла свои двери перед новичками. Как раз таки наоборот. Сегодня функционирует множество программ стажировок от известных компаний, занимающихся созданием программного обеспечения. Например, EPAM, GlobalLogic, SoftServe и другие открывают вакантные места для тех, кто хорошо знает предметную область, но не имеет опыта работы. Конечно, необходимо будет пройти тестирование и/или собеседование, однако, это уже упрощает процесс внедрения в рабочую среду желанной IT-секции.      Миф 17. Пойду в ВУЗ, там меня научат программированию В ВУЗе не обучают программированию в соответствии с теми требованиями и ожиданиями, которые предъявляют к соискателям IT компании. Хоть вам и будут преподавать алгоритмы и различные ЯП, но нагрузка в вузе будет настолько объемной и пёстрой, что вы физически не сможете нормально научиться программировать. Все равно вы будете вынуждены самостоятельно учить/доучивать тот или иной язык. Если бы вы поступали на факультет, допустим, прикладной математики, вы бы туда шли с сильными знаниями по математике, правда? Так же само и с айтишными факультетами: если вы туда идете, у вас УЖЕ должен быть опыт программирования на любом ЯП. Иначе вам будет очень тяжело и мучительно больно.   Миф 18. Программирование имеет возрастные ограничения Языки программирования, как и любые иностранные языки, вы можете начать изучать в любом возрасте. Возрастные рамки отсутствуют. Самое главное — это ваше желание учиться, развиваться и познавать. Как показывает практика, уже с 8-9 лет дети способны понимать основные концепции ЯП и успешно создавать собственные программы. Если говорить об относительно великовозрастных людях, с ними работает то же правило — никогда не поздно учиться и узнавать нечто новое. Более того, активная мозговая деятельность (как такая, которая происходит в процессе программирования) является отличной профилактикой многих заболеваний мозга, связанных со старением. Так что программирование и юных развивает, и взрослых прокачивает + помогает держать в тонусе свои мысли. Однако, при трудоустройстве возрастные ограничения могут иметь место. Это зависит от политики компании, которая ищет специалиста.   Миф 19. Программист — вымирающая профессия: роботы заменят этих специалистов Очень распространенное мнение, имеющее право на жизнь. С одной стороны, все верно: программ становится все больше и больше, а значит, потребность в программистах должна потихоньку отпадать (ведь скоро будет нечего программировать!); при этом активно развивается искусственный интеллект, способный перенимать определенные функции человека, включая написание кода, на себя. Поговорим о первом тезисе. Вроде бы все логично, но есть одно НО. Рассмотренная выше мысль будет абсолютно верна в том случае, когда мы говорим об информационных технологиях, как об области, которая находится в некоем вакууме, причем вакуум этот ограничен, то есть, имеет свой “потолок”, выше которого не прыгнешь. Наш же мир не является ограниченным, по крайней мере, человечество еще не смогло определить его грани. Да, человеческие возможности упираются в определенные физические ограничения (невозможно поднять руками или ногами самолет, самостоятельно прыгнуть на высоту 5 метров, проглотить целиком кокос и т. д.), однако в нашем мозгу пока что не было замечено четких ограничений. Более того, с его помощью мы научились обходить естественные физические преграды: придумали и реализовали специальный транспорт, который может перевозить тяжелые объекты; изобрели джамперы, джетпаки (реактивные ранцы) для совершения высоких прыжков и полетов в воздух на относительно небольшие высоты; специальные предметы для разделывания экзотических фруктов и т. п. Пока что ученые не смогли выжать максимум из нашего мозга и разглядеть границы нашего сознания. Если сложить вместе безграничность наших мыслей и безграничность мира, можно прийти к выводу, что любая сфера нашей жизни поддается совершенствованию и всегда есть, куда дальше двигаться. Все области нашей жизнедеятельности неразрывно связаны между собой, хотим мы того или нет. Особенно сфера IT — сейчас она находит свое отображение везде: музыка; киноиндустрия; компьютерные игры; банковская сфера; транспортная инфраструктура; сфера безопасности (физическая и кибербезопасность); СМИ; медицина; аграрная отрасль; все, что связано с космическими разработками; научные исследования любых направлений; сфера образования... Так можно продолжать, пока не будут перечислены все отрасли человеческой деятельности. Давайте обратимся к сухим фактам и посмотрим на то, как “умерли” некоторые профессии в результате их совершенствования: человечество уже научилось создавать искусственные фрукты и овощи, но фермеры никуда не пропали; более того — некоторые страны имеют острую нехватку профессионалов в аграрном деле; существуют дистанционно управляемые боевые машины, дроны и другие приспособления для ведения боевых действий, но никто не говорит о роспуске армейских подразделений; набор призывников и добровольцев продолжается и приветствуется во всех странах; в супермаркетах появились терминалы самообслуживания, однако продавцов никто не уволил; посмотрите вакансии на данную должность — их пруд пруди; пассажирские самолеты обустроены очень надежными и серьезными компьютерными системами, которые выполняют много работы за человека и даже имеют функцию автопилота, но никто не спешит увольнять самих пилотов; более того, в мире острая нехватка данных специалистов, а их зарплаты считаются одними из самых высоких в мире; такая же ситуация и с поездами — сегодня не надо кидать уголь в печь и разгонять поезд (как в XIX веке), но водители поездов никуда не испарились; беспилотные автомобили уже разъезжают по улицам некоторых городов, однако водители государственных и коммерческих предприятий тоже никуда не делись, вакансии пестрят предложениями для водителей; множество других примеров. Примерно та же ситуация и у программистов. Правда, сфера IT настолько многогранна, что профессии в результате развития данной области будут просто эволюционировать. Например, веб-мастер двухтысячных стал современным FullStack девелопером, а само направление сайтостроения поделилось на два лагеря — FrontEnd и BackEnd. На границе программирования и системного администрирования образовалась DevOps инженерия. IT-специальности будут попросту перерождаться и образовывать новый виток с новыми должностями. Для осознания системности нашего мира советуем прочесть книгу “Введение в системный анализ” (Ф. И. Перегудов, Ф. П. Тарасенко). Прекрасный труд, который очень хорошо демонстрирует взаимосвязанность всего, что нас окружает. Воспитывает системное мышление и заставляет смотреть на вещи более адекватно и трезво, находить логические связи между всевозможными событиями и процессами в нашем мире.  Поговорим о втором тезисе. Он касается искусственного интеллекта (ИИ). Сюда же добавим системы генерации кода, существующие в наше время. К примеру, взглянем на сервисы, которые позволяют создавать собственные сайты без знания IT технологий. Действительно, сегодня существуют подобные системы, использование которых исключает необходимость владения языками верстки и программирования, однако они предоставляют достаточно шаблонные решения. В них вы не сможете воплотить все свои задумки — это сможет сделать только живой специалист. Системы генерации кода хорошо справляются с типичными задачами, однако в реальных ситуациях, где не всегда всё просто и зачастую необходимо импровизировать, сохраняя при этом код “в чистоте”, они бессильны. Возвращаясь к разработчикам сайтов: верстальщики, FrontEnd и BackEnd разработчики не исчезли и спрос на них является одним из самых высоких среди направлений в IT. ИИ уже давно разрабатывается и ученые демонстрируют потрясающие результаты: системы, которые обыгрывают шахматных гроссмейстеров и легенд покера, робот София, системы по распознаванию образов и т. д. Однако, какого-то обвала рынка программистов не последовало, массовые увольнения специалистов замечены также не были. Все спокойно.  Посетите, например, такие ресурсы по поиску работы, как https://jobs.dou.ua/, grc.ua,  hh.ru — вакансий для сайтостроителей много, равно как и для других айтишных специальностей. Не похоже на упадок эпохи программирования. Несмотря на то, что сфера IT и без того находится на пике популярности, она испытывает дефицит рабочих кадров. Так что вы сможете прекрасно себя реализовывать в IT еще несколько десятилетий как минимум. Главное — следите за тенденциями в IT и ловите попутный ветер.   Итоги Большинство мифов, касающихся IT, рождены обыкновенным незнанием предметной области и изрядной долей ложных предубеждений. Сегодня мы постарались разрушить некоторую часть из них и показать вам, что программирование — не башня из слоновой кости, а вполне реальная и податливая сфера человеческой деятельности, в которой кипит жизнь и которая нуждается в пополнении своих рядов. Не бойтесь делать шаги навстречу программированию. Разрушайте стены незнаний и непониманий. Если вы в чем-то неуверенны,  интересуйтесь у знакомых-программистов, пишите на форумах, спрашивайте на стримах. Все зависит только от вас!   Желаем вам всевозможных успехов и профессиональных свершений! Оставайтесь с ITVDN!
Чи потрібна програмісту вища освіта?

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

Статистика DOU та Stack Overflow Що відбувається у технічних ВНЗ на “айтішних” напрямках? Вага диплому Чому навчають у вишах? Чи потрібна математика в програмуванні? Рейтинг українських ВНЗ Вартість навчання у ВНЗ Підсумки Вітаємо вас, дорогі читачі блогу ITVDN! Сьогодні ми розглянемо дуже важливу тему, яка має багато гострих кутів. Стосуватиметься вона вищої освіти, а саме – її необхідності для програмістів. Відразу зазначимо – тема наповнена багатьма нюансами. Ми намагатимемося охопити всі важливі моменти, які допоможуть скласти максимально цілісну картину та дати розгорнуту відповідь на головне питання цієї статті. Давайте не зволікатимемо з ліричним відступом і відразу приступимо до пошуку інформації, а також до розстановки всіх точок над “i” в обговореннях “чи потрібна програмісту вища освіта?” і що потрібно для програміста у виші взагалі. Статистика DOU та Stack Overflow Насамперед дізнаємося, як справи з вищою освітою у тих, хто зараз займається розробкою. Для цього звернемося до опитування Stack Overflow Developer Survey 2022, яке цього року зібрало 70 000 анкет. Якщо вірити цьому джерелу, 80% респондентів мають певну форму вищої освіти. Виходить, 4 з 5 розробників мають диплом. Що цікаво, 38% з тих людей, що тільки навчаються програмуванню і ще не мали досвід комерційної розробки, мають диплом. Це свідчить про те, що навчатися ніколи не пізно – навіть якщо у вас є наукова ступінь не за ІТ-фахом і ви тільки зараз почали вивчати кодинг. Відповідно до опитування Stack Overflow Developer Survey 2020 (65 000 анкет), майже 85% опитаних з числа професійних розробників вважають, що формальна освіта хоча б більш-менш є важливою. Проте майже 16% вірять, що вища освіта і зовсім зайва. Тепер звернемося до портрета IT-фахівця за підсумками 2020 року від DOU. Вся інфографіка складена на підставі 12419 анкет. Аналізуючи розділ “Освіта та саморозвиток”, можна сказати таке: хто б що не говорив про вищу освіту, але більшість IT-фахівців мають повну вищу освіту, а деякі — навіть дві. Дві вишки переважно у Senior PM, а максимальна кількість кандидатів наук у фахівців Data Science, яким потрібна сильна математична база для виконання посадових обов'язків (її вони й отримують у ВНЗ). Найменша кількість тих, хто закінчив вищий навчальний заклад, припадає на Junior розробників ПЗ. Це й не дивно — більшість отримують свою першу посаду в IT ще на студентській лаві. Таким чином, як вітчизняна, так і зарубіжна статистики показують, що переважна кількість професійних розробників таки має диплом. Це зовсім не означає, що на роботу в галузі IT вони потрапили виключно завдяки знанням, отриманим у ВНЗ. Те ж опитування від Stack Overflow, тільки за 2019 рік (90 000 респондентів), показало, що понад 86% опитаних самостійно вивчали необхідну їм мову, фреймворк або інший інструмент розробки. Хоча в опитуванні 2022 року не було такого ж пункту, ми впевнені, що статистика самоучок на поточний рік не сильно змінилася і плюс-мінус той же відсоток зберігся до сьогодні. Виходить цікава колізія: якщо переважна більшість закінчувала (або закінчує в даний момент) вузи, то чому ці студенти/випускники самостійно вивчають те, що їм треба в роботі? Чому навчають в університетах у такому разі? Давайте розбиратися. Що відбувається у технічних ВНЗ на “айтішних” напрямках? Сучасні вищі навчальні заклади несуть мало радості тим, хто має намір стати програмістом. Безумовно, студентська романтика та пригоди чекають на вас у будь-якому місці здобуття вищої освіти. Проте ми ведемо мову саме про цільове призначення цих закладів. Відповідаємо на запитання цього розділу: в університетах досить неоднозначний стан речей. Усі суперечливі моменти ми представимо у вигляді списку: З одного боку, у ВНЗ справді вивчається програмування, алгоритми, структури даних, дискретна математика та інші важливі для програмістів речі. З іншого боку, багато предметів є зайвими, або такими, які студентам не до душі. Ми не порушуватимемо тему, які дисципліни справді важливі для програмістів, а які мають сумнівну цінність, проте факт залишається фактом: дуже часто студенти обурені наявністю філологічних предметів, таких, як історія, філософія, менеджмент, правознавство, історія культури та інші. Подібні ситуації виникають і з технічними напрямками. Припустимо, студент очікував вивчення програмування на C# та інших високорівневих мовах; насправді ж на "шарпи" припадає 3 семестри, а на наступних курсах доводиться працювати з низькорівневим Асемблером і писати програми під логічні контролери за допомогою ST, FBD і SFC, які часто використовуються для автоматизації виробничих процесів. Кожен університет має свої навчальні програми, але подібні розбіжності очікувань та реальності зустрічаються скрізь. Окрему увагу варто приділити якості освіти. Вище ми говорили, що в університетах все ж таки викладають те, що необхідно програмісту, хоч і частково. Але і тут є кілька проблем. Перше, що варто мати на увазі: у жодному вітчизняному ВНЗ із вас не зроблять, наприклад, сучасного .NET розробника, або DevOps інженера. Окрім того, що самі програми навчання застарілі років на 10 (у кращому випадку), їх іноді ведуть сивочолі старожили кафедр, які зачитують матеріал із книг епохи Горбачова. І вони не мають наміру оновлювати навчальну програму, оскільки вникати в нові технології для них не комільфо. Також іноді буває, що такий викладач не проти повчити вас життя, або просто нівелювати вас як особистість. Чули історії про те, як студенти до ночі захищали свої лабораторні / розрахункові роботи? А про те, як деяким просто неможливо здати предмет, який навіть близько не потрібний програмістам? Безумовно, зустрічаються і цілком лояльні, добрі та приємні викладачі, але на кожній кафедрі ви знайдете таку людину, від якої вас хапатиме Кіндратій. Чи хотіли б ви кілька семестрів (а то й весь термін навчання) провести в компанії такої людини і вимотати свої нерви? Відносно молоді програмісти-викладачі, які займаються розробкою на комерційній основі, звичайно, зустрічаються, і з кожним роком їх все більше і більше, проте і серед них знайти тямущих лекторів — ще те завдання. Найчастіше такі викладачі просто сідають за ноут, включають проєктор, пишуть код (проєктуючи все на дошку) і щось коментують, поки інші сидять і півтори години дивляться. Так, це краще, ніж ті ж викладачі похилого віку з крейдою в руках. Але просто кодингу недостатньо. Студенти також люди; їм потрібна жвава подача матеріалу від цікавого лектора, який вміє приковувати до себе та свого коду увагу. Крутий програміст, який уміє кодити, але не вміє зрозуміло доносити до решти те, що він робить, далеко не найкращий варіант. Якщо нас читають лектори-програмісти більш-менш відомих ВНЗ, які при цьому не користуються популярністю у своїх студентів, закликаємо їх замислитись над своїми методами подачі матеріалу. Гарний програміст – не те саме, що гарний викладач. Якщо людина вміє грамотно подавати матеріал, у неї буде менше проблем із відвідуваністю та дисципліною, а також більше позитивного фідбеку від студентів. Викладання (від слів “викладати”, “викласти”) – це навичка донесення інформації, і її необхідно розвивати, над нею треба працювати. Обираючи навчання в університеті, варто враховувати, що він орієнтований на самостійну роботу самих студентів. Вважається, що 80% навчального часу студенти повинні приділяти самостійному вивченню предмета, а решта 20% покладаються на лекції викладачів. Ті абітурієнти, котрі вважають, що в універі їх вивчать на програмістів, помиляються. Ніхто нікого вчити не збирається, адже це не школа. І студент повинен це усвідомлювати. Також часто буває так, що на лекціях вам розповідають одне, а на лабораторних ви робите зовсім інше. Тонни лабораторних та розрахунково-графічних робіт — постійні супутники кожного студента-технаря, зокрема й студента-програміста. Головні рушійні сили технічного університету – "корочка", яка необхідна для роботи, очікування та надії членів сім'ї, а також уникнення армії. Щире бажання отримати професію, якою ти “палаєш”, є далеко не у всіх, оскільки у 17 років дуже складно визначити майбутній фах всього свого життя. А у щасливчиків таке щире бажання швидко згасає, коли вони зіштовхуються з реаліями і розуміють, що просто виконуючи навчальний план протягом 4-6 років в університеті особливо нічого не досягнеш на поприщі ІТ. Хтось скаже, що така ситуація у ВНЗ — чудова школа життя. З одного боку, це справді так. Але якщо подивитися на систему навчання вітчизняних ВНЗ з точки зору "як має бути" і "як є насправді", ви помітите, що досвід та знання, з якими студенти закінчують навчання, отримуються не завдяки, а всупереч цим самим вишам. На жаль. Вага диплому Чи потрібна вища освіта у сфері IT для успішного працевлаштування? В українських IT-компаніях часто вимагають хоча б диплом незакінченої вищої освіти або щоб кандидат був на шляху до його отримання. Однак це не означає, що без диплому вас не приймуть до лав розробників – просто у кожної компанії своя політика, а чим більша компанія, тим солідніші запити щодо претендентів. Більше того, диплом на співбесіді – це формальність, галочка. Насправді ж ви будете проходити тестові завдання та відповідати на технічні запитання, тож навіть червона “корочка” фактично нічого не вирішує. Якщо говорити про розвинені країни, то там все серйозніше. Навчання у вищих навчальних закладах важче і диплом справді відіграє більш значиму, ніж у нас, роль. На тих, хто закінчив виш, роботодавець і дивиться по-іншому – з повагою та визнанням. Досить часто іноземні компанії, незалежно від навичок та досвіду, вимагають наявність диплома бакалавра або, як мінімум, щоб ви на момент розгляду резюме перебували на старших курсах ВНЗ. Більше того, диплом спрощує процес отримання робочої візи, без якої ви не зможете вирушити працювати програмістом, наприклад, у європейські країни або США. А ось на які посади вас із максимальною вірогідністю не візьмуть без диплому як у рідній країні, так і за кордоном — це керуючі позиції в ІТ. Їх займати має право лише людина з повною вищою освітою. Маємо дві сторони медалі. Якщо глянути на аверс — диплом для “галочки”, який при цьому вистражданий потом, кров'ю та вашим часом. Але реверс говорить нам про зарубіжжя та керівні посади, а також про незабутню школу життя, зрештою. Чому навчають у вишах? У кожному вищому навчальному закладі є своя навчальна програма. Однак якщо підсумувати, то можна виділити такі дисципліни: Алгоритми та структури даних Алгоритмічне програмування Програмування популярними мовами (C/C++, C#, Java, Python) Вебпрограмування Комп'ютерна графіка Дискретна математика Вища математика Комп'ютерні мережі Бази даних Теорія інформації та кодування Криптографія Операційні системи інші дисципліни Крім цього, у вузах студентам також читають предмети, які напряму не пов'язані з програмуванням та інформаційними технологіями: економіка, правознавство, історія, психологія, охорона праці, філософія та інші. На стику філологічного та технічного розташуємо англійську мову, оскільки вона надважлива для успішної взаємодії із зарубіжними навчальними матеріалами, статтями, відеороликами, професійними книгами. Також вона знадобиться для вільного спілкування з іноземними колегами та роботодавцями. Інгліш знадобиться і для написання грамотного коду (без спотворених, “кривих” назв). При всьому багатстві вибірки дисциплін, у вітчизняному виші ви можете розраховувати лише на ази будь-якої айтішної спеціальності. Вам дадуть все поверхнево – цих знань вистачить для розуміння того, що відбувається в тій чи іншій сфері. Все інше ви повинні будете доучувати, самостійно практикуватися, відвідувати відповідні курси, проходити інтернатуру в IT-компанії і таким чином добирати знання, яких вам бракує. Звичайно, на Заході існують такі виші, де ви зможете пройти гарне профільне навчання. Наприклад, факультет Informatics, Games Engineering in Technical University Of Munich (Німеччина). За кордоном усвідомлюють важливість IT-індустрії та намагаються відповідати новим тенденціям, а не просто пхати у вас “вічну класику”. Тому факультет розробки комп'ютерних ігор – норма для розвинених країн. Однак у таких державах і ставлення до вищої освіти зовсім інше. Наприклад, у Чехії випускників ВНЗ дійсно цінують роботодавці, оскільки і навчання складніше, і саме викладання на голову вище за вітчизняні аналоги. Іноземна освіта враховує технологічний прогрес і намагається йти нога в ногу з ним. Чого не скажеш без грудки у горлі про навчання у більшості вишів пострадянського простору. Є один бонус від ВНЗ, про який ми мало не забули. Багато вітчизняних університетів мають програми співпраці із закордонними університетами. Таким чином, навчаючись на батьківщині, у вас є можливість стати учасником такої програми та перебратися за кордон заради здобуття європейської освіти. Круто, чи не так? =) Чи потрібна математика в програмуванні та в якому обсязі? Одна з головних переваг будь-якого технічного вишу — математична база. Зазвичай, лише у вищому навчальному закладі можна отримати гарні знання з вищої математики. Тут ми порушимо ще одне популярне питання, яке часто задається тими, хто хоче йти в IT: кому потрібна математика і чи потрібна вона взагалі для програміста? Відповідь – потрібна. Однак є один приємний момент: кожному розробнику математика потрібна по-різному. Якщо ви хочете працювати у якості FrontEnd розробника (створення клієнтської сторони вебдодатків), то математика вам буде потрібна меншою мірою, ніж для C# / .NET розробника, який, наприклад, зайнятий розробкою корпоративних рішень. Вузівський матан незамінний для тих, хто збирається пов'язати свою професійну діяльність з наукою, шифруванням, Data Science, машинним навчанням, штучним інтелектом та всім, що пов'язано з великими обсягами даних. Для криптографічних завдань вам знадобиться загальна та лінійна алгебра. У 3D-моделюванні не обійтися без геометрії та механіки. Для роботи з великими масивами даних необхідні статистика, теорія ймовірностей, лінійна алгебра. Біоінформатика потребує знань у галузі дискретної математики та статистики. Так можна перераховувати безліч IT-напрямків. Однак переважна більшість людей бере не той орієнтир. У програмуванні важлива не стільки математика, скільки саме математичне мислення. Найчастіше IT не вимагає глибоких знань, і необхідний мат. апарат обмежується початковими курсами університету (теорія множин, графів, автоматів, алгоритми, базова логіка) + стандартна шкільна програма (куди ж без неї?). Василь Кобзар, викладач GeekBrains, який спеціалізується на адмініструванні Linux, має чудову відповідь на запитання "Наскільки програмісту потрібне знання математики в роботі?" (джерело): “Якщо математика буде являтися предметною областю, то знати її потрібно настільки добре, наскільки це потрібно для вирішення завдання. Однак питання, мабуть, поставлене для загального випадку і пов'язане з існуючою думкою. Програмістові добре було б розібратися з логікою та абстрактною алгеброю, які не викладаються ні в школі, ні у більшості вишів. Також не завадять матстат і дискретка. Матан здебільшого марний, так само як і, скажімо, тригонометрія. Загалом, корисна та частина математики, що «розум у порядок приводить», а знання будь-яких формул напам'ять тільки забиває голову”. Підводячи підсумки цього розділу, скажемо наступне. Математика в програмуванні – це насамперед про математичне та аналітичне мислення, які допомагають критично мислити, абстрагуватися та розв'язувати задачі, вміло використовуючи логіку. Саме раціональний підхід до вирішення завдань, що забезпечується мат. мисленням – головний інструмент програміста. З його розвитком вам допоможуть спеціалізовані книги, а також практичні вправи – написання коду, вирішення математичних завдань та інші вправи, які можна знайти на вебресурсах. Рейтинг українських ВНЗ Розглянемо рейтинг за 2019 рік від dou.ua. Чому саме за 2019? Бо рейтинг того року був максимально “народним” – окрім традиційної статистики він містив додаткові відповіді респондентів, які вже мають вищу освіту, на деякі і донині актуальні запитання: в якому виші краще вчитися (український/зарубіжний), чи корисним було навчання, чи радили б ви отримувати вищу освіту і т. д. У наступні роки ні dou.ua, ні інші українські інформаційні ресурси не робили подібного опитування, тому будемо вдовольнятися даним. Отже, до першої десятки топових технічних освітніх закладів, в яких є IT-спеціальності, у 2019-му році потрапили: Національний університет "Києво-Могилянська академія" (НаУКМА). Український католицький університет. Чорноморський національний університет імені П. Могили (ЧНУ ім. Петра Могили). Харківський національний економічний університет імені С. Кузнеця (ХНЕУ ім. Кузнеця). Донецький національний університет імені В. Стуса (ДонНУ ім. В. Стуса). Харківський національний університет радіоелектроніки (ХНУРЕ). Сумський державний університет (СумДУ). Київський національний університет імені Т. Шевченка (КНУ ім. Шевченка). Чернівецький національний університет імені Ю. Федьковича (ЧНУ ім. Федьковича). Львівський національний університет імені І. Франка (ЛНУ ім. Франка). В опитуванні взяло участь 3038 студентів та випускників українських вишів. Рейтинг був складений на основі різних аспектів навчання в університеті. Відповідно до даної публікації, 69.2% опитаних все ж таки радять здобути вищу освіту в українському виші. З них майже 16% рекомендували б відучитися в іншому вітчизняному закладі, відмінному від того, де респонденти самі отримують/отримували вишку, а 12% воліли б обрати іншу спеціальність/факультет. При цьому майже кожен четвертий (24%) вважає, що отримувати диплом треба лише за кордоном. На думку цих респондентів, за межами країни якість освіти краща. Також їх приваблює досвід життя та роботи в іншій країні. При цьому 5.6% опитаних були категоричними і виступили проти здобуття вищої освіти в принципі. Які предмети потрібно здавати на програміста у ВНЗ – в кожному закладі можуть бути свої критерії, проте зазвичай обов'язковими є рідна мова, математика, англійська, а іноді й фізика. Вартість навчання у ВНЗ Для з'ясування цього питання пройдемося найпрестижнішими українськими закладами, а потім вишами, які займають другорядні позиції. Спочатку візьмемо вартість контрактного навчання в КПІ на IT-напрямках. Найдешевшими за ціною є спеціальності “Комп'ютерні науки”, “Системний аналіз” та “Кібербезпека” — 35 000 грн за рік очного навчання на бакалавраті. 42 000 грн коштує навчання за спеціальностями “Інформаційні системи та технології” і “Комп’ютерна інженерія”, а 45 000 доведеться віддати за “Інженерію програмного забезпечення”. Візьмемо на розгляд НаУКМА. "Комп'ютерні науки" та "Інженерія програмного забезпечення" коштують по 55 000 грн за рік навчання на бакалавраті. У КНУ ім. Шевченка ситуація така: ті самі спеціальності, що були перераховані вище, оцінюються у 38 000 грн за рік очного навчання на бакалавраті. Перейдемо до вузів, які досягли менших висот, ніж розглянуті попередники. На черзі маємо НАУ. "Комп'ютерні науки", "Кібербезпека", “Інформаційні системи та технології” – 26 000 грн, "Інженерія програмного забезпечення" – 29 000 грн, "Комп'ютерна інженерія" – 28 000 грн. Національний транспортний університет. За "Інженерію програмного забезпечення" та "Комп'ютерні науки" доведеться віддати 25 750 грн. Рік навчання на очному відділенні, звісно. У СумДУ за "Кібербезпеку" та "Комп'ютерні науки" за перший рік навчання з вас візьмуть 13 440 грн. Наступні курси навчання коштуватимуть 15 365 грн, 20 370 грн та 23 660 грн відповідно. Цінова вилка досить непогана — приблизно від 13 до 55 тисяч. Причому це не обов'язково граничні значення. Ми розглянули лише декілька університетів, адже їх сотні й у кожного свої особливості. Але навіть із цього списку можна робити відповідні висновки. Якщо порівнювати вартість навчання у ВНЗ із курсами програмування, то виходить, що курси набагато вигідніші. На курсах ви витратите приблизно 15-25 тисяч на опанування IT-спеціальності, зате через півроку зможете працювати на посаді Junior розробника і з легкістю відіб'єте всю ту суму, яка була витрачена на навчання. В університеті ж ви витратите щонайменше 4 роки і на виході отримаєте такий набір знань, який недостатній для роботодавця. Все одно доведеться звертатися до сторонніх ресурсів (книги, курси, онлайн-ресурси тощо) і займатися самоосвітою, щоб дотягнутися до вимог тієї чи іншої компанії. Підсумки Отже, під час пошуків відповіді на питання “Чи потрібна програмісту вища освіта?” нам вдалося багато чого з'ясувати. Розіб'ємо головні тези на “за” та “проти”. “За” навчання у ВНЗ: більшість професійних програмістів мають вищу освіту, а також рекомендують іншим отримати диплом; деякі компанії вимагають наявність диплома у кандидатів на обов'язковій основі; це ж стосується деяких видів IT-професій (біоінженерні розробки і т. д.); ВНЗ з айтішних напрямів навчають основам майже всього, що пов'язано з IT; вища математика у ВНЗ дуже важлива для тих, хто збирається пов'язати свою професійну діяльність з наукою, шифруванням, Data Science, Big Data, машинним навчанням, штучним інтелектом та всім, що пов'язано з великими обсягами даних; диплом допомагає в отриманні візи та керівних посад в IT; навчаючись у вітчизняному виші, можна стати учасником програми обміну студентами та виїхати на навчання до іншої країни; навчання на курсах не можна назвати дешевим відстрочка від армії ВНЗ - непоганий вибір, якщо ви хочете йти в науку наявність ярмарок вакансій, де ви можете познайомитися з різними роботодавцями – навіть з інших країн мережа корисних знайомств у ІТ, яка сприятиме працевлаштуванню і зануренню в айті "Проти" навчання у ВНЗ: диплом швидше потрібен для “галочки”, все одно вас тестуватимуть на співбесіді та перевірятимуть ваші вміння та навички головні рушійні сили технічного університету – не навички та знання, а необхідна для роботи "корочка", очікування та надії членів сім'ї, а також армія багато навчальних програм в освітніх установах на IT-напрямках є застарілими ВНЗ з айтішних напрямів навчають лише основам за рік очного навчання у більш-менш пристойному виші треба буде заплатити не менше 25 тисяч щоб влаштуватися програмістом в IT-компанію, вам необхідно доучуватися після університетської освіти Нейтральне, але не менш корисне висловлювання: математичне та аналітичне мислення важливіше, ніж знання формул, проте варто враховувати, що знати математику потрібно настільки добре, наскільки це потрібно для вирішення робочих завдань. Якщо заплющити очі на безліч суперечливих моментів, університет — це справді своєрідна школа життя. Найважливіше, що можна собі винести з вишу — це зв'язки, досвід від універу та досвід, отриманий під час проживання в гуртожитку. Ви можете отримати гарні знайомства і дізнатися дуже корисні поради щодо перспектив в IT з перших вуст. Через знайомих можна навіть рекомендацію на посаду в IT-компанії отримати. Тож чи варто отримувати вищу освіту програмісту? На жаль, як засіб вивчення конкретного IT-ремесла університет не можна розглядати, зате все побічне, що пов'язано з ним, зроблено на пристойному рівні. Студентська романтика, незабутнє життя в гуртожитку, ярмарки вакансій, програми співпраці універів із престижними IT-компаніями (курси та інтернатури), програми співпраці з іноземними вузами, знайомства тощо. Саме ці плоди ви повинні збирати під час навчання у ВНЗ. Якщо ви наважилися здобути вищу освіту, вам не завадить наступна порада. Більшість колишніх студентів рекомендують відучитися перші рік-два, а потім шукати роботу (проходити курси, влаштовуватися до інтернатури). Як підсумок — після закінчення бакалаврату ви маєте і університетську базу, і диплом, і досвід роботи. Час даремно не втратили і при цьому університетське життя скуштували. Але якщо ви не готові витрачати стільки часу заради сумнівних привілеїв, робіть вибір у сторону курсів. Там вас не навчатимуть нічому зайвому і ви в максимально короткі терміни зможете опанувати бажану спеціальність, а потім отримати свою першу роботу на посаді програміста. Якщо у вас виникли зауваження або побажання до статті, сміливо залишайте їх у коментарях. Залишайтеся з ITVDN!
Яку IT-спеціальність обрати у 2021 році?

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

Добрый день! Сегодня мы попробуем разобраться с тем, какие IT-специальности сейчас в тренде и какие прогнозы можно строить на 2021 год. IT-отрасль привлекательна со всех сторон - и для тех, кто выбирает профессию, и для бизнесменов, это один из самых динамично развивающихся секторов экономики. Такая ситуация не удивительна, ведь IT — достаточно молодая и перспективная сфера, чьи плоды существенно упрощают нашу жизнь. При всем этом, информационная сфера снижает порог вхождения и с каждым годом становится искушением для всё бо́льшего количества людей. Каждый, кто интересуется IT — будь то новичок, желающий освоить IT-специальность, либо опытный разработчик, следящий за тенденциями — хочет знать, какие направления и профессии будут востребованы в следующем году. Но даже внутри столь многогранной отрасли есть как те профессии, которые теряют актуальность, так и те, которые возникают на ровном месте. Поэтому мы изучили респектабельные аналитические ресурсы и готовы рассказать вам, какие направления и специальности с наибольшей вероятностью будут популярны в ближайшем будущем. Начинаем!   Особенности 2020 года и их влияние на IT отрасль   Наибольшим сотрясением 2020-го года для мировой экономики стала эпидемия коронавируса, из-за которой множество стран ввели жесткие карантинные ограничения, чем и был нанесен ощутимый удар по всем отраслям. Это явление не обошло стороной и IT-сферу. Если говорить об Украине, то помимо массовых сокращений на рабочих местах мы получили заметное проседание по количеству вакансий. Как пример, информационный ресурс для украинских разработчиков DOU с апреля 2020-го года начал проводить кризисную аналитику и показал, как менялась кривая количества опубликованных вакансий на данном ресурсе в Украине.       На графике бросается в глаза существенное проседание по вакансиям в апреле. Два месяца спустя кривая не смогла достичь ни одного из минимальных показателей как минимум с марта 2019-го года. Только в июле удалось получить предкризисное количество вакансий. Потеря предложений была вызвана не только карантинными ограничениями внутри страны, но и тем, что украинский IT-рынок в подавляющем большинстве ориентирован на аутсорс (заказчики в основном с Запада), а не на производство собственного ПО. Следовательно, наши разработчики сильно зависят от иностранного бизнеса, который также вынужден был остановиться вследствии введенных ограничений. А нет заказчиков — нет и работы. Однако, не все так плохо. Аутсорс означает зависимость от иностранных компаний. А поскольку большинство клиентов из развитых стран, где бизнес быстро восстанавливается, проседание украинского IT-сектора не такое и страшное. Более того, карантинные ограничения постепенно смягчаются, люди начинают привыкать и адаптироваться под новые условия работы. Дистанционный режим работы хоть и не самый продуктивный, однако он максимально подходит большинству IT-работников, чего нельзя сказать о тех, кто занят в других секторах экономики. Также, текущие осложнения экономической ситуации в мире отличаются от тех, которые были прежде — в 2001 и 2008 годах. Сейчас отсутствует разочарование инвесторов — все готовы вернуться не прежнюю колею, как только уйдут карантинные ограничения. Поэтому, последствия эпидемии не должны сыграть решающую роль в определении ориентиров IT-сферы в 2021 году.   О чем говорят аналитические обзоры    Давайте воспользуемся ежегодным опросом от Stack Overflow и взглянем на то, какие профессии были наиболее популярны в 2019 году и каких изменений они претерпели к августу 2020 года. Будем руководствоваться данными из Stack Overflow Developer Survey 2020 и  Stack Overflow Developer Survey 2019. Небольшая ремарка для тех, кто не знаком с данным сервисом. Stack Overflow (произносится как “стэк оверфлоу”) — специальный интернет-ресурс для IT-специалистов различных направлений, где каждый может задать свой вопрос и получить профессиональный ответ от других участников сервиса. Другими словами, это интернациональная система вопросов-ответов для айтишников. Итак, взглянем на статистику, собранную Stack Overflow за 2019 год, в которой указано, с какой должностью себя ассоциируют участники данного сервиса. В опросе приняло участие около 90 000 разработчиков. В среднем, каждый респондент идентифицировал себя с тремя должностями сразу, что и отразилось на необычном процентном соотношении на картинке ниже:       Вот та же статистика, только уже за февраль 2020 года (65 000 опрошенных):     Как можно видеть, лидирующие специальности за последние годы принадлежат Full Stack и BackEnd направлениям. За ними прочно закрепились FrontEnd девелоперы, энтерпрайз разработчики (создают ПО для бизнес-заказчиков) и разработчики мобильных приложений. Также, на несколько позиций вверх пробился и DevOps специалист, который синхронизирует все этапы разработки программного продукта — от написания кода до тестирования и релиза. В целом, резкие и непредсказуемые перемены в профессиональной деятельности разработчиков не наблюдаются. Из этого можно сделать вывод, что примерно та же тенденция в профессиях сохранится и на следующий год. Также, посмотрим на популярность используемых языков и технологий. Из опроса 2019-го года и 2020-го, соответственно:       На первом месте обоих рейтингов от Stack Overflow язык программирования JavaScript, который находит широкое применение в веб-разработке (как BackEnd, так и FrontEnd). За ним следуют языки верстки — HTML & CSS, без которых немыслим уже упомянутый фронтенд. Далее идет уклон в сторону баз данных. Если мы говорим о реляционных БД, то без языка запросов SQL не обойтись. Их используют различные IT-специалисты — от разработчиков ПО до тестировщиков и системных администраторов. Python, Java, C# — универсальные языки программирования, которые используются во множестве сфер разработки. Последние годы они не покидают ни один ТОП-10 языков, и у них достаточно серьезные аргументы, чтобы гарантировать себе пик славы на многие годы вперед. Инструменты Bash/Shell/PowerShell применяются зачастую системными администраторами и DevOps инженерами, поскольку позволяют автоматизировать большинство рутинных процессов, благодаря чему они и оказались на высоких местах в опросе от Stack Overflow. Также рассмотрим рейтинг языков согласно индексу TIOBE, который оценивает популярность языков программирования каждый месяц и является респектабельным показателем — на него ссылается множество аналитиков в ходе своих исследований:     Рейтинг индекса TIOBE отличается от аналогичных на Stack Overflow. Это связано с тем, что TIOBE-рейтинги основаны на количестве квалифицированных инженеров по всему миру, а также количестве курсов и сторонних поставщиков. Популярные поисковые движки, такие как Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube и Baidu, используются для расчета рейтингов. Важно отметить, что индекс TIOBE — не о лучшем языке или языке, на котором было написано наибольшее количество строчек. Он может быть использован, чтобы узнать, соответствуют ли ваши навыки современным запросам, либо, чтобы принять стратегическое решение касательно того, какой язык должен быть использован в разработке новой программной системы. Подробнее с методами определения индекса вы можете ознакомиться по ссылке. Итак, в данном рейтинге появились языки программирования C/C++, которые известны даже большей универсальностью, чем Java, Python, C# и JavaScript вместе взяты, поскольку помимо прочего они могут работать с памятью, что очень важно в ресурсоемких задачах — играх, тяжеловесных ПО, микроконтроллерах и т. д. Также, C/C++ часто изучаются во многих технических ВУЗах. PHP до сих пор остается классическим языком серверной разработки и не собирается покидать эту нишу, что и обеспечивает ему 9-е место в рейтинге. Рассмотрим список популярных веб-технологий согласно Developer Survey за 2019-й и 2020-й годы соответственно:           Как видно из диаграмм, главные позиции принадлежат FrontEnd-библиотекам и фреймворкам — jQuery, React.js, Angular, а также технологиям .NET платформы — ASP.NET и ASP.NET Core. Наряду с ними библиотека Express, которая используется в бекенде на Node.js (JavaScript). Только после них идут фреймворки Spring (Java) и Django (Python). Список других фреймворков, библиотек и инструментов разработки:       Максимальный процентный отрыв у платформы Node.js (веб-разработка), за ней идут .NET и .NET Core. Технологии компании Майкрософт удерживают хорошие позиции. Далее идут библиотеки Python: Panda (анализ данных) и TensorFlow (платформа для машинного и глубокого обучения). За ними — React Native (фреймворк для кроссплатформенной разработки под iOS и Android) и движок Unity 3D (разработка игр под различные устройства и платформы). Полученные сведения уже дают достаточное представление о том, что сейчас происходит на рынке IT-услуг и позволяют делать определенные прогнозы касательно востребованности IT-профессий.   Какие IT-специальности будут востребованы?   FrontEnd Developer   Как мы выяснили в ходе анализа Stack Overflow Developer Survey и индекса TIOBE, фронтенд-триада HTML, CSS и JavaScript по сей день востребована и используется множеством разработчиков. Эти языки находят широкое применение в разработке клиентской стороны веб-приложений (визуальная часть + пользовательская логика). Также, ресурсы по поиску работы имеют множество вакансий FrontEnd Developer. Как пример, на украинском ресурсе для IT-разработчиков DOU на момент написания статьи было опубликовано 564 вакансии по данному направлению, в то время, как на Java, Python и .NET специальностям припадало 266, 179 и 268 предложений соответственно. Фронтенд разработчики востребованы, и у нас нет никаких сомнений, что данная тенденция сохранится в 2021-м году.   BackEnd Developer   Разработчик серверной стороны веб-приложений. В своем арсенале имеет один из популярных языков программирования — C# / PHP / Python / Java / JavaScript / Ruby / Perl либо иной. Также, бекенд-разработчик знает множество серверных технологий и техник разработки. Данные специалисты ответственные за все, что происходит по ту сторону любого приложения в вебе. Если сравнить FrontEnd и BackEnd направления с айсбергом, то FrontEnd — его верхушка, которая выглядывает над поверхностью, а BackEnd — все то, что скрыто от наших глаз под водой.   Mobile Developer (Android / iOS)   Мобильная разработка как таковая появилась буквально два десятка лет назад. За это время она прошла серьезную трансформацию и сегодня занимает одну из доминирующих позиций в IT-сфере. При этом, наработками специалистов из этой отрасли пользуется чуть ли не каждый человек — это не только смартфоны и планшеты, но и фитнес-браслеты, наручные часы, электронные книги, компоненты “интернета вещей” и другие гаджеты. Наиболее популярные языки мобильной разработки: Java / Kotlin под Android разработку и Objective-C / Swift под iOS.   DevOps Engineer   DevOps — это методология, которая совмещает в себе разработку (Development) и системное администрирование (Operations) с целью увеличения частоты выпуска релизов. Данные специалисты также должны обладать навыками использования облачных технологий и автоматизации инфраструктуры. DevOps инженеры в качестве основного языка программирования выбирают Python за его простоту, мощность, надежность, многозадачность, поддержку большого количества специальных пакетов, которые повышают эффективность данного языка программирования и за другие преимущества. Python используют, в основном, вместе с командной оболочкой Bash для упрощения процессов развертывания ПО и автоматизации различных задач системного администрирования (написание скриптов). Можно сказать, что DevOps инженеры — это смесь программиста и системного администратора. Бизнес очень любит универсальных игроков, так что данная профессия очень актуальная и престижная.   CyberSecurity   IT индустрия растет, а значит, растет и спрос на тех, кто должен ее оберегать. Этим и занимается специалист по кибербезопасности. На самом деле, данное направление также имеет несколько ответвлений и вы можете как защищать программные системы от проникновения (направление “защиты”), так и быть пентестером — специалистом по выявлению уязвимостей в подобных системах (направление “атаки”). Можете уйти в анализ и риски (должность Security Analyst и Risk Compliance Specialist, соответственно), заниматься поиском компьютерных вирусов и выстраиванием линии защиты от них (Malware Researcher), а также испытать себя во многих других CyberSecurity-специальностях — сфера кибербезопасности дает большие возможности для самореализации.   Database Administrator (DBA)   Нормальное функционирование современного мира невозможно без баз данных и тех, кто умеет их грамотно обслуживать. С каждым годом спрос на таких специалистов растет пропорционально разрастанию IT-инфраструктуры. Помимо обслуживания в обязанности DBA входит выработка требований к базам данных, их проектирование, реализация, эффективное использование и поддержание целостности БД, включая управление учетными записями пользователей БД и защиту от несанкционированного доступа. Тут не обойтись без знаний языка запросов SQL, одной из СУБД (PostgreSQL, например), а также различных технологий и приемов системного администрирования.    PM (Project Manager)   В мире IT ощущается сильный дефицит хороших проектных менеджеров — управленцев, которые руководят IT-проектом в целом. В большинстве случаев это бывшие программисты или тестировщики. Однако, чтобы стать PM-ом необязательно иметь за плечами кодерское прошлое. Ключевыми обязанностями этих специалистов являются: проектирование и расстановка приоритетов, планирование выполнения задач, контроль, коммуникации, а также оперативное решение проблем внутри проекта. Ну а самая главная задача — сделать так, чтоб идея заказчика была реализована в срок в условиях ограниченности ресурсов. Конечно, это очень обобщенный список обязанностей PM-а. На самом деле данные специалисты часто работают сверх нормы и их рабочее состояние можно описать как “белка в колесе”. Однако послевкусию успешно выполненного проекта тяжело что-либо противопоставить. Загвоздка этой профессии в том, что должность PM-а предусматривает большую конкуренцию. Согласно данным, в июле 2020-го года на сайте DOU на одну вакансию проджект менеджера откликнулось почти 30 кандидатов (всего 183 вакансии). Поэтому, чтобы заполучить желаемую позицию, необходимо обладать не только необходимым опытом и знаниями, но и хорошими организаторскими способностями, а также другими важными для этой профессии личностными качествами.     QA Engineer (Quality Assurance)   Специалист по обеспечению качества, он же — тестировщик. Призван выявлять неисправности в ПО, которые допустили разработчики. Востребованность данных специалистов тяжело оспорить, ведь каждый программный продукт перед выходом в свет может пройти не одну итерацию тестирования, где выявляется приличное количество багов. Выходит, без QA мы бы имели очень недоработанное ПО, а производитель — провал продукта на рынке и падение репутации. Тестировщиков делят на два вида — Manual QA Engineer и Automation QA Engineer. Первый выполняет всю работу вручную, а второй использует инструменты автоматизации, в том числе и языки программирования (Java, Python) что влияет на заработную плату и ценность такого сотрудника. Конкуренция за место тестировщика довольно высока, а потому получить первую должность может быть не таким простым заданием.     Data Scientist   Ученый-эксперт, главные задачи которого — извлечение из большого массива данных полезной информации, которая потом может использоваться в различных сферах; в основном, это бизнес и наука. Данный специалист должен иметь прекрасное аналитическое мышление, владеть математическим аппаратом (включая мат. статистику и мат. моделирование), знать программирование (Python, R) и базы данных (как SQL, так и NoSQL). С начала 2010-х годов профессия Data Scientist считается одной из самых привлекательных, высокооплачиваемых и перспективных в IT.   Data Analyst   В то время, как Data Scientist ориентируется на предиктивную аналитику, Data Analyst работает с информацией постфактум. У данного профессионала менее техническая роль — он работает с уже готовыми данными, а именно: проводит дескриптивный анализ, интерпретирует и визуализирует результаты, а также презентует отчет своим заказчикам.   Заключение   В данной статье мы постарались дать ответ на вопрос “Какую IT-специальность стоит выбрать в 2021 году?”. Такие ресурсы, как Stack Overflow, DOU и TIOBE помогли нам проанализировать текущую ситуацию в IT и проследить взаимосвязь с прошлым, 2019 годом. В целом, уклон на веб, энтерпрайз и мобильную разработку сохранился и каких-то кардинальных изменений не ожидается. Также, никуда не исчезла востребованность тестировщиков и специалистов, которые работают с данными. Естественно, карантинные ограничения из-за распространения коронавирусной инфекции отразились и на IT-секторе (снижение ЗП, увольнения, переход на дистанционную форму работы), но мировое население привыкает и адаптируется под новые условия — все постепенно приходит в норму, а сами инвесторы готовы ринуться в бой, как только все ограничения будут сняты. Зачем ждать подходящего момента? Берите момент и делайте его подходящим! ITVDN - это образовательная платформа для онлайн обучения программированию и информационным технологиям. Наш портал насчитывает более 190 видео курсов и имеет собственные программы обучения по 12 самым популярным IT-профессиям, среди которых:   Верстальщик сайтов FrontEnd Developer Java Developer Python Developer C# / .NET Developer Android Developer iOS Developer Unity / Game Developer Database Developer и другие   Формат обучения - записанные видео курсы, по которым можно обучаться в любое удобное время. Таким образом, вы сможете освоить IT-профессию не выходя из дома. Со всеми специальностями можно подробно ознакомиться, перейдя на страницу специальностей ITVDN. Помимо записанных видео курсов, наша образовательная платформа предоставляет обучение в новом формате - Live Online. Он предусматривает регулярные онлайн занятия с ментором в небольших группах из 6-15 человек, на которых объясняется новый материал, обсуждаются нюансы выполнения практических заданий, есть проверка ДЗ и чат для общения с одногруппниками, а также доступ к видео курсам ITVDN. В процессе обучения учащиеся также разрабатывают собственный курсовой проект, который в конце защищают и добавляют в свое портфолио. На данный момент Live Online обучение проводится по четырем самым популярным IT-специальностям:   C#/.NET Developer Frontend Developer Java Developer Python Developer   Если вас заинтересовал формат Live Online, переходите по ссылкам и ознакомьтесь с подробностями предложений по каждой из четырех специальностей. Надеемся, что наша статья была полезной для вас. С радостью примем любые пожелания и замечания. Выбирайте IT-профессию вашей мечты и пускай ничто не останавливает вас на пути к ней! Изучайте программирование на ITVDN 
Як стати Android розробником

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

Операционная система Android Языки программирования Java и Kotlin. Принципы ООП Среда Android Studio и набор инструментов Android SDK Формат обмена данными JSON Архитектура REST API Реактивное программирование Библиотека Retrofit 2 Фреймворк Dagger 2 Данные и СУБД SQLite UI/UX дизайн Шаблоны проектирования Алгоритмы и структуры данных Unit тестирование Архитектурные шаблоны Git & GitHub Google Play Английский язык Как стать Android разработчиком? Итоги   Всем привет! С каждым годом смартфоны, планшеты и другие гаджеты приобретают все большую популярность. Нам уже трудно представить хотя бы один день без них. Каким образом мы так сильно приявязались к ним? Все дело в программном обеспечении, которое находит ключ к каждому из нас: общение (телефонная связь, видеозвонки, социальные сети), просмотр мультимедийного контента, прослушивание музыки, фото- и видеосъемка, игры на любой вкус и цвет, обучающие приложения и т. д. За всем этим стоят девелоперы, разрабатывающие программы, от которых тяжело оторваться. Каждое мобильное устройство работает с использованием одной из мобильных операционных систем. Cамыми популярными из них являются Android и iOS. В контексте данной статьи нас интересует именно первая ОС. Мы расскажем вам, какие инструменты используют разработчики в создании таких увлекательных приложений на Android и как стать специалистом в этой сфере. Но прежде хотим познакомить вас поближе с данной операционной системой. Уверены, что практически каждый ее использовал (а может, и сейчас ею пользуется), однако сейчас вы узнаете некоторые интересные факты об Android: Изначально Android разрабатывалась как ОС для фотоаппаратов. ОС Android основана на ядре Linux. Компания Samsung имела возможность приобрести стартап-компанию Android Inc. в 2004-м году, однако корейцы поставили под сомнение выгодность этого предложения. Через год корпорация Google купила Android Inc. не менее чем за $50 миллионов и смогла направить полученный потенциал в нужное русло. Число активированных устройств, использующих Android, более 2 миллиардов. Первая версия Android, как и первый пакет разработчика (SDK 1.0), вышла осенью 2008 года. Тогда эту ОС многие критиковали и не верили в успешность проекта. Google Карты вычисляют дорожные пробки на основе концентрации и скорости перемещения Android устройств. Android используется не только в смартфонах и планшетах, но также и в электронных книгах, наручных часах, фитнес-браслетах, игровых приставках, ноутбуках, нетбуках, смартбуках, очках Google Glass, телевизорах, бытовых роботах, научных аппаратах, компонентах исследовательских систем на базе гаджетов, компонентах IoT (Internet of Things — “интернет вещей”) и других устройствах.     Теперь перейдем ближе к сути. Андроид разработчик — это IT-специалист, который создает, поддерживает и совершенствует программное обеспечение для мобильных устройств, использующих популярную ОС Android. Вместе с этим он задействован в процессах поддержки, улучшения и обновления разрабатываемых продуктов. Если посмотреть на количество устройств, которые используют данную ОС, можно прийти к выводу, что разработчик под платформу Андроид — очень востребован в IT, а также имеет высокие доходы. Какие технологии использует в своей работе этот специалист?     Какие языки программирования и технологии используют Android разработчики Android Каждый Android девелопер обязан знать операционную систему, под которую разрабатывает софт, а также понимать назначение и жизненный цикл Android-компонентов. Чтобы создавать эффективные мобильные приложения, вы должны понимать все аспекты устройства и работы данной ОС. Java + ООП Java — это объектно-ориентированный язык программирования со строгой типизацией. Безусловно, в создании приложений под Андроид можно использовать другие языки (C#, C/C++, Python и прочие), однако, именно Java считается флагманским в Android разработке. Поэтому в данной статье мы будем делать уклон в Java-стек. Что являет собою этот язык? Не будем углубляться в его устройство, а скажем лишь, что все Java-приложения транслируются в специальный байт-код, выполняемый виртуальной машиной JVM (Java Virtual Machine), которая может быть установлена практически на любое устройство. Это делает программы, разработанные на Java, кроссплатформенными. Какими знаниями необходимо обладать? Прежде всего необходимо знать Java и владеть методологией объектно-ориентированного программирования (ООП). Если конкретизировать: Машинная математика, переменные и типы данных, условные конструкции, логические операции, циклические конструкции, методы, рекурсия, массивы, списки, обработка исключений, суперкласс Object, обобщения (Generics, дженерики), работа с памятью. Понимание и применение пакетов (Packages) в Java; ООП, понятия объектов и классов; Механизмы наследования, умение работать с интерфейсами; Коллекции и работа с ними; Параллелизм. Помимо теоретических знаний, новичок должен сформировать необходимые навыки написания кода. Для этого мы советуем вам как можно чаще практиковаться и решать прикладные задачки из интернета либо составленные самолично. Также, советуем использовать онлайн-тренажеры, например, интерактивный тренажер от ITVDN. С его помощью вы сможете потренироваться в кодинге на Java и проверить свои знания. Kotlin Молодой и перспективный язык программирования, который поддерживает как объектно-ориентированное, так и процедурное программирование. Отличается своей простотой, гибкостью, лаконичностью, и являет собой следующий этап развития Java. Kotlin-приложения компилируются в уже упомянутый JVM байт-код, что делает этот язык полностью совместимым с Java.  На конференции для разработчиков I/O 2017 компания Google расставила акценты в Android разработке, заявив, что язык программирования Kotlin отныне позиционируется как приоритетный язык для разработчиков приложений под ОС Android. Подкреплено это было тем, что теперь новые API и библиотеки будут выпускаться сперва под Котлин. Несмотря на возрастающую популярность данного языка и поддержку со стороны Google, Java не собирается уходить из мобильной разработки, удерживая там уверенные позиции и по сей день. Так что знание обоих языков будет предпочтительным для всех, кто собирается заниматься Андроид разработкой. В любом случае, зная Java, вы безпроблемно освоите и Kotlin. Все-таки классику надо знать и уважать. Среда Android Studio и набор инструментов Android SDK Android Studio — это интегрированная среда разработки (IDE) приложений под Android. В ней вы будете создавать проекты и работать над ними. В свою очередь, студия вам предоставит всевозможные удобности для облегчения разработки софта. Android Software Development Kit — кроссплатформенный комплект средств Android разработки, включающий в себя: отладчик, набор библиотек, телефонный эмулятор, набор документации по работе в данной среде и примеры приложений. Особенно интересен в этом перечне эмулятор — программа, которая создает виртуальный мобильный девайс, где можно тестировать написанные приложения и смотреть, как они будут выглядеть на том или ином Андроид-устройстве. JSON JSON (JavaScript Object Notation) — это общий формат обмена данными. Позволяет совершать обмен информацией между программными продуктами, написанными на разных языках. Таким образом, клиент, использующий Java, может легко передавать данные на сервер, который реализован с помощью Ruby/Java/PHP. REST API REST — популярный архитектурный стиль, содержащий определенные принципы организации взаимодействия приложения либо сайта с сервером через протокол HTTP. API — это прикладной программный интерфейс. С его помощью происходит определение, каким образом следует обращаться к программе и какие ответы она обязана предоставлять пользователям. К примеру, оплачиваете футболку в интернет-магазине или покупаете билет в кино — как только вы нажимаете соответствующую кнопку, подтверждающую ваши намерения на оплату, сайт соединяет вас с платежной системой с использованием API этой системы. Но даже если система не имеет никакой интеграции с другими, API все равно используется — для общения внутри системы.  RxJava Библиотека, которая позволяет реализовать принципы реактивного программирования для JVM. Используется для оперирования событиями и потоками данных, комбинируя лучшие идеи шаблонов проектирования Observer (Наблюдатель), Iterator (Итератор) и функционального программирования. В реальной жизни влияние реактивного подхода мы ощущаем, когда на нашем смартфоне высвечивается сообщение о новом посте человека, которого мы фолловим в социальных сетях или когда нам приходит уведомление о новом сообщении из мессенджера. То есть, вместо того, чтобы каждые 10 секунд лично перезагружать страничку объекта фолловинга или свой мессенджер, мы просто ожидаем уведомления о новом посте, занимаясь своими делами. Это очень полезная опция, позволяющая не только экономить наше время, но и упрощающая нагрузку на сервер. Куда без RxJava в мобильную разработку на Java? Retrofit 2 Популярная библиотека для сетевого взаимодействия — типобезопасный HTTP-клиент для Android и Java. Позволяет легко получить и загрузить JSON (либо иные структурированные данные) через веб-сервис на основе REST. Для работы с HTTP-запросами в Retrofit используется библиотека OkHTTP. Dagger 2 Фреймворк для работы с зависимостями в Java и Android. Позволяет уменьшить количество шаблонного кода, структурировать зависимости, упрощает работу при большом количестве зависимостей, а также позволяет делать код более читабельным. SQLite Structured Query Language (SQL) — декларативный язык структурированных запросов, разработанный для взаимодействия с базами данных. Особенностью SQL является то, что он лишь описывает необходимые компоненты и желаемые результаты, не указывая, как именно эти результаты должны быть получены. Любое ПО подразумевает работу с данными, будь то обыкновенная процедура приема данных от сервера (например, скачивание файлов) либо внесение в БД информации о новом пользователе, который только зарегистрировался — умение работать с данными одинаково важно во всех сферах разработки. Исключением является только FrontEnd. Также, изучите одну из систем управления базами данных (СУБД). В Андроид разработке по умолчанию используется SQLite. Благодаря своей компактности, легкости и надежности, эта СУБД идеально подходит для разработки в электронных устройствах и программах, где стратегическое значение имеет оперативная память. XML Extensible Markup Language - расширяемый язык разметки, с помощью которого можно структурировать и хранить данные для удобства их дальнейшей обработки. XML хорошо масштабируем, сочетает в себе простой и удобный синтаксис, а также базируется на кодировках Юникод для представления содержания документов. Также, в Андроид разработке XML используется для создания интерфейса посредством объявления элементов пользовательского интерфейса и задания их расположения. UI/UX дизайн UI/UX (User Interface — “интерфейс пользователя”, User eXperience — “опыт пользователя”) дизайн — это проектирование различных пользовательских интерфейсов, в которых удобство использования (UX) настолько же важно, как и внешний вид (UI). Android девелопер в ходе создания приложений также занимается и разработкой внешнего вида приложения, а потому, должен знать, как реализовывать интерфейс, который принесет юзеру максимальный комфорт во всех аспектах использования. Обычно в UI/UX разработке под Андроид используют Material Design — стиль графического дизайна интерфейсов программного обеспечения и приложений, разработанный компанией Google, делающий уклон на естественность графической составляющей. Для работы необходимо использовать инструменты Material Components for Android.  Шаблоны проектирования Паттерны (они же шаблоны) являют собой архитектурные конструкции, описывающие общепринятые способы решения задач, которые часто возникают в ходе проектирования программного обеспечения. Всего существует более двух десятков шаблонов, однако разработчику нет необходимости владеть ими всеми. Достаточно изучить самые популярные. Алгоритмы и структуры данных Понимание алгоритмов и структур данных — обязательное требование, которому должен соответствовать каждый программист. Это необходимый фундамент, который учит разработчика писать хороший исходный код через подбор оптимальных формы представления информации и последовательности действий. Изучив структуры данных, вы будете уметь управлять уровнем сложности своих программ, делая их более доступными для понимания, а также разрабатывать приложения с высокой производительностью, которые будут рациональнее взаимодействовать с памятью. Знание алгоритмов позволит вам создавать сложные конструкции для эффективного решения широкого спектра задач на Java и Kotlin. Unit тестирование Вид тестирования, который берет на себя программист, а не тестировщик. Его основная идея заключена в написании тестов под каждую нетривиальную функцию либо метод. Цель Unit (модульного) тестирования — изоляция отдельных частей программы, чтобы продемонстрировать, что по отдельности они являются работоспособными. Таким образом происходит проверка кода на регрессию, а вместе с этим — соответствующее обнаружение ошибок. Архитектурные шаблоны В зависимости от предпочтений работодателя, от вас могут потребовать знание одного или нескольких архитектурных паттернов. Это шаблоны наивысшего уровня, которые определяют архитектуру всей программной системы. Самыми популярными являются MVC (Model-View-Controller), MVVM (Model-View-ViewModel), MVP (Model-View-Presenter), Clean Architecture. Git & GitHub Git — это популярная система контроля версий, позволяющая вести историю разработки проекта с возможностью доступа к каждой сохраненной версии. Одним из самых известных антагонистов Git является SVN — централизованная система, в отличие от децентрализованной Git. Также, в работе вам пригодится и сервис онлайн-хостинга проектов, использующий систему контроля версий. В данном случае это GitHub. В паре с Git он позволяет разработчикам сохранять свой код онлайн, а затем взаимодействовать с другими разработчиками в разных проектах. Данные системы позволяют команде программистов работать над одним проектом одновременно, сохраняя внесенные изменения, а также отслеживать выполнение задач каждым членом группы. Google Play Магазин приложений, в котором можно размещать и скачивать приложения под Андроид. Умение его использовать — обязательно. Google Play имеет очень строгий набор политик, которым должно соответствовать ваше приложение. К слову, за аккаунт Android разработчика необходимо один раз раскошелиться на $25. Зато это дешевле, чем за аккаунт iOS девелопера — там с вас будут брать дань каждый год денежную сумму в размере $99.  Английский язык Наверное, единственный язык, которым обязаны владеть все разработчики без исключения. Его вы будете использовать во время поиска ответов как во время учебы, так и во время работы, ведь большинство новых сведений о технологиях, курсы, учебные и справочные материалы появляются в первую очередь на английском. Для работы в команде разработчиков обычно знаний языка на уровне чтения технической документации и комментирования кода вполне достаточно, однако если вы планируете вести переговоры и переписку с иностранным заказчиком, ваш уровень должен быть выше.   Как стать Android разработчиком   Как вы заметили, Android девелоперы должны знать множество различных технологий. Сейчас очень много разработчиков данного направления, но действительно хороших очень мало. Поэтому и требования к кандидатам высоки. Если вы пройдетесь по ресурсам поиска работы, то наверняка отметите, что вакансий Android Developer уровня Junior не так много, как хотелось бы, а потому за место под солнцем придется побороться. Давайте перейдем к советам касательно того, как сделать старт в Андроид разработке и начать “набирать массу”. В университетах никто не обучит вас искусству разработки на Android, поэтому вы можете: Учиться самостоятельно — по книгам или видео курсам. Записаться на соответствующие курсы для максимально эффективного обучения специальности. Второй вариант является лучшим, поскольку предусматривает более высокий уровень дисциплинированности на всем пути обучения, а также структурированную подачу необходимой информации, которой удобно пользоваться и которая отвечает современным требованиям рынка. Если вы выбираете обучение по видео курсам, то прежде всего определите подходящую для вас образовательную онлайн-платформу. Мы рекомендуем сделать выбор в пользу ITVDN. Почему именно эта платформа? Давайте мы познакомим вас с преимуществами обучения на ITVDN. ITVDN — образовательная онлайн-платформа, содержащая полноценные программы обучения по 12 самым популярным специальностям. В каталоге ITVDN свыше 180 видео курсов по различным языкам программирования и информационным технологиям. Учебная программа каждой специальности содержит:  тщательно подобранный пакет видео курсов; план обучения с нуля до уровня специалиста, который вы можете адаптировать под свой уровень; Интерактивный Тренажер навыков для формирования навыков написания кода; учебные материалы, исходники программного кода, опорный конспект, презентации к урокам; доступ к Форуму, где каждый учащийся может общаться с другими студентами, тренерами и единомышленниками; возможность персональной консультации с тренером согласно выбранному пакету подписки; возможность проходить тестирование для подтверждения знаний, полученных в результате прохождения видео курса; электронный сертификат об окончании курса после успешного завершения тестирования. Все видео курсы записываются опытными разработчиками, которые проходят соответствующую сертификацию, чем подтверждают свое мастерство владения той или иной технологией. Наши преподаватели работают в IT и в курсе всех современных тенденций в своей сфере разработки. Знакомство со специальностью мы рекомендуем начать с просмотра бесплатных вебинаров по специальности Android Developer, в частности, с одноименного вебинара Евгения Мыцы Как стать Android разработчиком, в котором отражены все самые актуальные тренды и требования. Если вы заинтересованы в изучении специальности Android Developer на ITVDN, у нас есть отличное предложение для вас. Наш образовательный портал содержит полноценную программу обучения Android разработке. Переходите по ссылке и делайте шаг навстречу желаемой профессии!  Какой бы способ обучения вы не выбрали — вначале нужно изучить язык программирования Java и довести владение им до высокого уровня. После каждой пройденной темы нужно решать практические задачи, чтобы закрепить полученные знания. В этом вам может помочь интерактивный тренажер от ITVDN, с помощью которого вы сможете проверить ваше владение навыками написания кода на Java. Продолжайте обучение и изучайте те технологии, которые мы перечислили в данной статье. Очень желательно, чтобы у вас был наставник, который мог бы следить за вашим прогрессом, отвечать на возникающие вопросы, давать полезные советы. Это может быть как преподаватель на ITVDN, так и один из ваших знакомых, который занимается Андроид разработкой и готов взять под свое крыло юного протеже. Знание английского на уровне не ниже Intermediate обязательно. Оно вам понадобится для комфортного поиска информации по Java, Kotlin и другим технологиям в интернете. Если ваши знания английского недостаточны как минимум для чтения технической литературы — обязательно подтяните их при помощи различных курсов либо интернет-материалов свободного пользования. Изучите Git, начните делать свой небольшой проект и опубликуйте его на GitHub — это даст вам ценный опыт работы с распределенной системой управления версиями и позволит проверить свои навыки в решении реальной задачи. Несколько хороших проектов, и полноценное портфолио готово. Не забывайте о Google Play, ведь именно сюда Android разработчики выкладывают готовый к использованию продукт. Актуальную информацию касательно языков и технологий, которыми необходимо владеть Android разработчику, вы можете узнать из нашего вебинара “Как стать Android разработчиком”, перейдя по ссылке. Резюмируя Android разработчик — специалист, который занимается созданием ПО под различные устройства — смартфоны, планшеты, ноутбуки, нетбуки и прочие девайсы, в основе которых лежит ОС Android. Востребованность этого разработчика очень высока, а на настоящих профессионалов то и дело ведут охоту HR-ы и рекрутеры. Изучайте все необходимые языки и технологии, практикуйтесь, а также всегда подпитывайте интерес к вашей будущей профессиональной деятельности. Не забывайте следить за новостями в мире Android. Просматривайте в YouTube видео, посвященные данной сфере разработки и впитывайте новую информацию. Для дополнительных очков мотивации подпишитесь на известных Андроид девелоперов. Пробуйте посещать различные мероприятия, посвященные разработке под Андроид, находите единомышленников и поддерживайте активность в их среде. Главное — быть целеустремленным и иметь желание развиваться в IT-сфере. Не останавливайтесь ни перед чем и тогда вас обязательно настигнет успех! Желаем вам побед в обучении! Обогащайтесь новыми знаниями и скиллами на ITVDN!
Хто такий Full-stack розробник

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

Суперечки навколо Full-stack Різновиди Full-stack розробників. Стек мов та технологій для кожного Плюси професії Full-stack Developer Мінуси професії Full-stack Developer Як стати Full-stack розробником? Зарплати Full-stack розробників Підсумки Оновлено 9 червня 2023 року Привіт, друзі! Full-stack розробник (вимовляється "фул стек") – це якийсь майстер на всі руки у світі веб-розробки. Йому під силу реалізувати як клієнтську, так і серверну сторону додатку, якими, зазвичай, займаються FrontEnd і BackEnd розробники окремо один від одного. Таким чином, Full-stack спеціаліст здатний одноосібно вести проєкт від початку до кінця. Ще в далеких нульових і раніше не існувало такого розподілу обов'язків між розробниками. Відносна простота ПЗ, що розроблялося, так само як і технології того часу дозволяли тримати процеси, які зараз виконують різні люди, в одних руках. Наприклад, у ті часи IT-фахівець, який називається веб-майстром, і зовнішній вигляд сайту створював, і серверну частину реалізовував, і розміщував сайт на хостингу. Тобто, Full-stack розробники існували і раніше, просто ніхто їх так не називав. Однак IT-сектор не стояв на місці. Вимоги до програмних продуктів зростали, з'являлися нові мови та технології, змінювалися підходи до розробки. Дерево IT почало ставати все більш гіллястим, породжуючи нові спеціальності. Разом із цим професія універсального бійця розбилася на два окремі напрямки, а потім знову відродилася з гордою назвою "Full-stack Developer". Суперечки навколо Full-stack Не все так гладко, як здається на перший погляд. Багато досвідчених програмістів та IT-фахівців вищої ланки не визнають цю посаду за визначенням. "Чому?" — спитаєте ви. Адже раніше були ті самі веб-спеціалісти, які успішно поєднували обов'язки сучасних напрямків — фронту та беку. Чому сьогодні поняття Full-stack викликає суперечки? Поширеною є думка, що Full-stack розробників не існує, а ті, хто такими називаються, насправді не відповідають вимогам цієї спеціальності. Наприклад, Сергій Немчинський — програміст з 20-річним стажем, керівник та власник навчально-виробничої компанії FoxmindEd — в опублікованому відео на YouTube відгукується про Web Full-stack розробників наступним чином (посилання): “В принципі, в ідеалі, Full-stack розробник – це класно та чудово. Проблема в тому, що... Таких немає. Фактично все, що ми маємо на ринку з тих людей, які називають себе Full-stack девелоперами – це приблизно 50% BackEnd девелоперів, які трошки вивчили FrontEnd і вже можуть Angular або React скомпілювати і, відповідно, зібрати-підключити, плюс трошки розуміють у верстанні – навіть не на рівні Junior верстальника. Вони у більшості випадків зробити добре, красиво не можуть ніяк. Максимум, що можуть – зробити так, щоб кнопка натискалася. Або ж Full-stack девелопери – це решта 50% FrontEnd розробників, які трошки вивчили BackEnd; в більшості випадків – якийсь Node.js. Можливо, PHP. Такий розробник мінімально вміє щось підрихтувати, але, знову-таки, говорити про те, що він сяде і напише вам нормальний Full-stack додаток – ні, ні і ще раз ні. (…) Чесно скажу, мені ідея з об'єднанням у Full-stack девелоперів здається, з одного боку, не дуже вдалою, тому що фактично ми отримуємо "ні риба, ні м'ясо". З іншого боку, ринок вимагає – отже, треба. Тому затребуваність у Full-stack девелоперів, за великим рахунком, трохи більша, ніж у чистих BackEnd або FrontEnd розробників. Однак ринок вже усвідомив, що вони (Full-stack розробники) у своїй більшості "ні риба, ні м'ясо", і тому термін "Full-stack" починає пропадати. Тепер просто вважається, що це BackEnd розробник з невеликим знанням фронту і, навпаки, FrontEnd розробник з невеликим знанням однієї з BackEnd мов. Мені здається, що так набагато правильніше”. Інші розробники схиляються більше до того, що Full-stack розробка – це ні що інше, як хитрощі бізнесу. Роботодавець не бажає переплачувати за двох різних фахівців, віддаючи перевагу більш дешевому аналогу, котрий вміє все те саме. По суті, вся суперечка щодо Full-stack розробника зав'язана на скептицизмі. Прихильники міфологічності цієї професії не вірять у існування розробника, здатного добре реалізувати як FrontEnd, так і BackEnd частини, оскільки за обома ховається безліч технологій і мов, а вивчити все і працювати не гірше за фронтендерів і бекендників — практично неможливо. Ті ж, хто займаються Full-stack девелопментом, парирують, вказуючи на велику кількість часу, проведеного за розробкою, в ході чого так чи інакше доводиться заглядати по інший бік барикад і розбиратися в усіх процесах, що супроводжують розробку всього проєкту від і до. Ну а далі справа техніки — вивчаєш необхідні інструменти, практикуєшся і можеш самостійно працювати над цілим проєктом. Звичайно, пізнання у всіх використовуваних мовах і технологіях у Full-stack спеціаліста будуть не такі глибокі, як у вузькоспеціалізованих побратимів по цеху, але зробити повноцінний робочий проєкт з нуля, реалізувавши як BackEnd, так і FrontEnd, йому буде під силу. Різновиди Full-stack розробників Варіацій Full-stack розробників насправді безліч: PHP Full-stack Developer, Node.js Full-stack Developer, Java Full-stack Developer і так далі. Назва, яка стоїть на початку спеціальності, говорить про те, яка мова/платформа береться за основу під час реалізації BackEnd частини. Стек технологій FrontEnd практично завжди однаковий і відрізняється лише використовуваними JavaScript-фреймворками / бібліотеками: Angular, React або Vue.js. А ось бекенд надає набагато більше можливостей для реалізації своїх амбіцій. Ще раз проговоримо, що Full-stack Developer – це розробник, який бере безпосередню участь у всіх етапах розробки веб-додатків: від створення клієнтської частини (візуальна частина + логіка користувача) до реалізації серверної (бази даних, серверна архітектура, програмна логіка). Який стек технологій та мов знаходиться у розпорядженні цього фахівця? Якщо говорити про FrontEnd складову (клієнтська сторона), то вона у всіх приблизно однакова: мова верстання HTML та мова стилів CSS; мови програмування JavaScript та TypeScript; препроцесори SASS та LESS; фреймворк Angular/Vue.js або бібліотека React; технології DOM, AJAX, REST API, знання про інтернет та веб-технології в цілому тощо; навички адаптивного та кросбраузерного верстання. А що потрібно знати full stack розробнику із серверного набору? Тепер розберемося з відгалуженнями в бекенді, які вказують на популярні мови та технології, що використовуються під час реалізації серверної сторони веб-додатків, котрі розробляються. Node.js Full-stack Developer BackEnd складова (серверна сторона) може мати різну начинку, на відміну від FrontEnd. Якщо говорити про Node.js Full-stack розробника, то в якості основної мови виступає JavaScript, а сам стек наступний: платформа Node.js; фреймворки Express.js, Nest.js; пакетний менеджер npm; Web Sockets; розуміння REST API; інші спеціалізовані технології. Java Full-stack Developer Головний акцент робиться на мову програмування Java та пов'язані з нею технології. BackEnd-стек у такого розробника має бути наступним: мова Java + Java Core; веб-сервер Apache; інструменти для комфортної взаємодії з БД – JDBC, Hibernate; веб-сервіси; фреймворк Spring та його популярні модулі (Spring MVC, Spring Boot, Spring REST, Spring Web тощо); ASP.NET Full-stack Developer .NET розробники мають широкий інструментарій для самореалізації у вебі. Як основну мову програмування вони використовують C#. Скарбничка знань BackEnd частини у ASP.NET Full-stack Developer-а повинна містити: мову C#; знання інфраструктури .NET. платформу ASP.NET MVC/ASP.NET Core (Web API); Entity Framework (Core); хмарний сервіс Azure; мову T-SQL; розуміння RESTful API. PHP Full-stack Developer PHP – класична мова веб-розробки. Типовий BackEnd-стек даного розробника відрізняється від інших своєю компактністю. РНР у вебі вже досить давно, а тому йому багато не потрібно; достатньо лише: власне, сама мова PHP; фреймворк Yii2/Symfony/Laravel. Python Full-stack Developer Універсальність Python не знає меж! Не стала винятком сфера веб-розробки. BackEnd-стек Python Full-stack спеціаліста наступний: мова Python; фреймворк Django/Flask; REST API; Web Sockets; навички роботи з ОС Linux та веб-сервером Nginx/Apache (можливо); досвід роботи із хмарними сервісами. Також окрім спеціалізованих технологій, усім Full-stack розробникам необхідно: знати систему керування версіями Git + сервіс для хостингу IT-проєктів GitHub; знати реляційні (SQL) та нереляційні (NoSQL) бази даних, вміти їх проєктувати; розумітися на протоколах HTTP, HTTPS та роботі FrontEnd + BackEnd загалом; вміти оперувати мовою запитів SQL та однією із СУБД – MySQL / PostgreSQL / SQLlite, або однією з NoSQL СУБД (MongoDB, Redis, Cassandra, наприклад); вміти проводити тестування додатків; здійснювати Code Review; використовувати Docker; володіти англійською мовою на рівні Intermediate та вище; знати популярні патерни програмування та вміти їх реалізовувати; мати гарне знання алгоритмів та структур даних. Також від Full-stack спеціаліста можуть вимагати навички мобільної розробки, якщо роботодавець має намір портувати веб-додаток на відповідні платформи. Як бачите, список необхідних мов і технологій для створення гарної серверної складової веб-додатків є досить значним. У наступному розділі ми розберемося, які переваги та недоліки чатують на тих, хто таки має намір пов'язати свою професійну діяльність з Full-stack розробкою. Плюси професії Full-stack Developer Можливість самостійно вести цілий проєкт Очевидна перевага розробника даної спрямованості полягає в об'єднанні двох течій – FrontEnd та BackEnd – в одному фахівці. Крім того, що такий професіонал здатний реалізувати обидві частини веб-додатку, він може безпроблемно налаштувати їхній взаємозв'язок, що є частим каменем спотикання між фронтендниками та бекендниками. Тим самим усуваються непорозуміння і протиріччя, які неминуче виникли б між декількома розробниками, які працюють над одним і тим самим продуктом. В'ячеслав Лобода, Senior Full-stack PHP Developer, про свою професію відгукується наступним чином: “Часто при вирішенні завдань веб-розробки виникає необхідність вносити редагування одночасно і до FrontEnd, і до BackEnd. Для цього можна найняти двох різних спеціалістів чи одного Full-stack розробника. Останній варіант дозволяє заощадити час на комунікацію” Даний відгук і всі наступні взяті зі статті на dou.ua "Кар'єра в IT: посада Full-stack розробник". Висока швидкість розробки, можливість приймати власні рішення, мінімальні витрати часу на зайву комунікацію Full-stack розробник – це вже фахівець досить високого рівня, який здатний приймати певні самостійні рішення, не витрачаючи час на зайві обговорення та узгодження з іншими розробниками, адже проєкт цілком перебуває під його крилом. “Подобається, що можу створювати веб-додатки одноосібно, менше затримок під час роботи. Наприклад, коли працюєш як FrontEnd і потрібно, щоб BackEnd віддавав нові дані, ти просиш колегу внести зміни, чекаєш. Full-stack розробнику чекати ні на кого не потрібно. Взяв і зробив як слід” – Геннадій Догаєв, Web Full-stack Developer Легкість пошуку роботи на фрілансі На біржах фрілансу замовники найчастіше шукають такого веб-спеціаліста, який зробить всю роботу самостійно без залучення додаткових розробників. Хто, як не Full-stack девелопер найкраще підійде на цю роль, маючи таку перевагу перед вузькоспеціалізованими побратимами? Отже, обравши цей шлях, ви не залишитеся без роботи і зможете користуватися всіма благами, які дарує фрілансерство. Великі кар'єрні можливості Широкоформатність професії Full-stack розробника дозволяє реалізувати себе в будь-якій сфері веб-девелопменту. Ви можете в будь-який момент перейти на більш вузький профіль – чисту FrontEnd або чисту BackEnd розробку (горизонтальний розвиток, поглиблення в конкретну сферу діяльності), а можете стати сильним тімлідом або архітектором, який чудово розуміється на всіх процесах створення веб-додатків і має багатий досвід за плечима (вертикальний розвиток, просування кар'єрними сходами). Також Full-stack розробник може знайти успішне застосування своїм здібностям у стартапах. Стартап-команди, як правило, мають дуже малий бюджет і їм набагато вигідніше мати тих, хто може взяти на себе обов'язки декількох людей. Таким чином ви і новий досвід отримаєте, і зможете попрацювати над чимось свіжим, цікавим, раніше не баченим. Ну а щодо потреб ринку в Full-stack розробниках навіть згадувати не варто – безліч компаній хоче отримати спеціаліста широкого профілю в свій штат. Кількість вакансій для них менша, ніж для фронтендників та бекендників, однак і конкуренції теж не так багато. Мало рутини та вигорянь Багата на різноманітність діяльність Full-stack розробників знижує ризики загрузнути в одноманітній роботі. Ви володієте великим арсеналом знань, що дозволяє вам періодично перемикатися між проєктами і менше втомлюватися від застосування одних і тих самих технологій. Легкість у розвитку свого продукту Ви маєте достатньо знань та вмінь, щоб самостійно створити власний проєкт. У майбутньому ви зможете організувати свою команду для вдосконалення та подальшого розвитку програмного продукту, проте вже на старті ви маєте все необхідне для того, аби реалізувати ваші ідеї. Мінуси професії Full-stack Developer Програш вузькоспеціалізованому розробнику на його полі бою Full-stack девелопер володіє багатьма інструментами, але не може знати кожен настільки ж добре, наскільки окремо взятий фахівець. Ця професія передбачає подібне розпилення і унеможливлює поглиблення в будь-яку мову або технологію. Виходить, ви вмієте все, але гірше за розробника конкретного напряму. Багато часу на навчання Технологій, які має опанувати Full-stack спеціаліст, багато. Під час вивчення, наприклад, бекенду легко забути те, що ти вчив по фронтенду. Щоб усі знання та вміння утримувати на гарному рівні, необхідно витрачати багато зусиль. Впоратися з цим можна наступним чином: вивчаєте одну спеціальність, влаштовуєтеся на роботу, а потім вивчаєте другий напрямок. Виходить, ви не тільки поточні знання зберігаєте, але й примножуєте їх, рухаючись до фул-стек розробки. “Нарощуйте компетенцію поступово, з невеликих завдань. Пройдіть курс із напрямку, якого вам бракує, щоб вникнути в базові принципи. А далі опановуйте знання на практиці за правилом Learning by doing” – Олексій Голубєв, Team Lead Full-stack Developer в GlobalLogic. Важко стежити за новими тенденціями Світ IT дуже гнучкий і мінливий. Наче імперії – виникають і руйнуються нові мови, технології, підходи в розробці ПЗ, техніки написання та ревізії коду. Вам, як фахівцю широкого профілю, необхідно знати всі новинки, адже, зрештою, цього і вимагатимуть від вас роботодавці — використання сучасних інструментів та підходів. Занадто багато обов'язків Роботодавці іноді починають висувати велику кількість вимог до фул-стек фахівця. Раніше згадуваний Full-stack розробник Геннадій Догаєв має таку думку щодо цього: “Замовники хочуть звалити на одну людину надто багато. Наприклад, вже зустрічаються оголошення Node.js+React.js+React Native, тобто до веб-стеку додається ще й мобільна розробка. Це впливає на якість знань та кінцевого продукту: чим більше технологій потрібно охопити, тим більш поверхнево знаєш кожну з них. Крім того, людині не можуть подобатися всі напрямки одночасно. Мені з цього набору не дуже цікава мобільна розробка”. Вами хочуть залатати дуже багато дірок Фул-стек розробнику можуть часто делегувати різноманітні завдання на робочому місці. Дописати за кимось код, щось переглянути, пофіксити, доробити. Працювати замість FrontEnd/BackEnd розробника, який пішов у відпустку, – мила справа. А якщо вас найняли як альтернативу 5-ти розробникам, то й взагалі будуть тримати як раба. Складні завдання Ви знаєте більше інших, а значить, вам під силу розібратися з тою чи іншою важкою задачею. Принаймні так думає той, хто вам їх роздаватиме. Велика завантаженість Як ви вже помітили за попередніми пунктами, Full-stack розробнику не дадуть відпочити. Справ по вуха – це точний опис його стану на кожний робочий день. Складнощі у заміні Цей пункт одночасно є і перевагою, і недоліком. З одного боку, вам важко знайти заміну і, відповідно, вас цінуватимуть. З іншого боку, вам буде проблемно піти у відпустку, адже де взяти заміну? Тут і почнуться дзвінки у будь-який час доби, неможливість перекладання деяких завдань на інших розробників та інше. Як стати розробником Full-stack? Відповідь проста – оберіть найбільш близький до вас варіант професії та вивчіть необхідні технології за допомогою різних ресурсів, або підіть на курси full stack розробників. Радимо зробити свій вибір на користь освітньої IT-платформи ITVDN – тут ви зможете знайти 90% усіх потрібних вам відео курсів за будь-яким із обраних напрямків. Наприкінці статті ми залишимо корисні посилання на всі спеціальності, які допоможуть вам у вивченні ремесла Full-stack. Наприклад, вам сподобався BackEnd-стек Python розробника – тоді вам підійдуть 2 курси за наступними спеціальностями: FrontEnd Developer. Python Developer. З кожною програмою навчання ви зможете ознайомитися докладніше, перейшовши за залишеними посиланнями. Зарплати Full-stack розробників Відповідно до липневої зарплатної аналітики від DOU.ua (опитано 6605 українських розробників), медіанна зарплата FullStack розробників наступна: Junior – 980 USD; Middle – 2475 USD; Senior – 4750 USD. При цьому ЗП у колег по цеху – FrontEnd та Mobile розробників – приблизно такі ж. Єдині, хто помітно виділяються – BackEnd девелопери рівня Middle та Senior. Їхня медіанна оплата праці становить 2800 USD і 5000 USD відповідно, що на кілька сотень доларів перевищує зарплату фулстеккерів. Якщо звернутися до міжнародного веб-сайту з пошуку роботи Jooble (має українське коріння), то станом на липень середня пропозиція щодо зарплати для FullStack Developer у Києві становить 114 183 грн (приблизно 3100 USD). Відповідно до міжнародного опитування Stack Overflow Developer Survey 2023 (понад 90 000 респондентів з усього світу), річна медіанна ЗП FullStack фахівця складає 71 140 USD (приблизно 5930 USD на місяць). Підсумки Full-stack Developer — універсальний веб-розробник, який поєднує у собі силу FrontEnd та BackEnd напрямків. Так, спеціалізовані девелопери зроблять всю роботу краще, ніж фул-стек фахівець, проте головний коник героя цієї статті – можливість розробляти повноцінні веб-додатки самостійно, доводячи їх до повністю готового стану. Як і будь-яке інше, Full-stack ремесло має свої переваги та недоліки. Шлях, яким повинен пройти full stack розробник з нуля досить тернистий і насичений. Проте недаремно казали класики — терпіння та праця все перетруть. Так що все у ваших руках! Можливо, нас читають розробники Full-stack? Із задоволенням прочитаємо вашу точку зору на позиції, викладені в цій статті. Також будемо раді будь-яким питанням та зауваженням від усіх читачів! Ну а тим, хто вирішив обрати професію Full-stack Developer, ми бажаємо бути впертими, оптимістичними і з незагасаючим вогником спраги знань в очах. Успіхів та кодерського натхнення на вашому шляху!   Корисні посилання Весь каталог спеціальностей: ІТ-спеціальності на ITVDN. FrontEnd складова: відео курс за спеціальністю FrontEnd Developer. BackEnd складова: Python Developer PHP Developer ASP.NET MVC Developer ASP.NET Core Developer Java Developer Онлайн навчання в групі з тренером за спеціальністю FullStack Node.js Developer.
Notification success