Обучение
- AI. Работа с нейросетями
- Подготовительные курсы
-
Программирование
- Промышленная разработка программного обеспечения на Java
- Промышленная разработка ПО на ASP.NET
- Разработка игр на Unity
- Курсы создания сайтов и Front-end разработки
- Разработка мобильных приложений под iOS
- Разработка мобильных приложений на Android
- Разработка веб-приложений на PHP
- Разработка веб-приложений на Python
- Разработка на C++
- Разработка игр на С++
- Разработка на Node.js
- Программирование на Go (Golang)
- Реляционные базы данных и SQL
- Веб-разработка на Ruby on Rails
- 1С программирование
- Fullstack
- Наука о данных
- Тестирование ПО
- Центр профессионального развития
- IT Bootcamp
- Гуманитарные и экономические дисциплины в IT
- Управление проектами и продуктами
- Бизнес- и системный анализ
- Веб-дизайн и компьютерная графика
- Системное и сетевое администрирование
- Информационная безопасность
- Маркетинг и продажи
- Английский язык для IT
Обучение
- AI. Работа с нейросетями
- Нейросети: практическое применение
- Искусственный интеллект в управлении командами и процессами
- Программирование
- Промышленная разработка программного обеспечения на Java
- Промышленная разработка ПО на ASP.NET
- Разработка игр на Unity
- Курсы создания сайтов и Front-end разработки
- Разработка мобильных приложений под iOS
- Разработка мобильных приложений на Android
- Разработка веб-приложений на PHP
- Разработка веб-приложений на Python
- Разработка на C++
- Разработка игр на С++
- Разработка на Node.js
- Программирование на Go (Golang)
- Реляционные базы данных и SQL
- Веб-разработка на Ruby on Rails
- 1С программирование
- Тестирование ПО
- Ручное тестирование ПО
- Мобильное тестирование приложений
- Автоматизированное тестирование на Python
- Автоматизированное тестирование на Java
- Автоматизированное тестирование на JavaScript
- Автоматизированное тестирование на C#
- Тестирование безопасности
- Гуманитарные и экономические дисциплины в IT
- Technical writing
- IT HR
- PR в IT
- Управление финансами в IT
- Управление проектами и продуктами
- Project management
- Product management: Основы управления IT-продуктом
Нужно ли учить Computer Science, если ты уже в IT?
Учить или нет Computer Science? Сергей Семенцов, Group Manager iTechArt, считает этот вопрос риторическим, и на OPEN IT Minsk он подробно разъяснил свою позицию.
Мы взяли ключевые выдержки из авторского доклада, а также дополнили их пояснениями Сергея к нашим уточняющим вопросам. Получившийся материал поможет понять, как подступиться к изучению Computer Science и зачем это нужно состоявшимся разработчикам.
Наш собеседник
Сергей Семенцов
Group Manager iTechArt
Имеет свыше 10 лет практического опыта разработки. Является ментором и преподает
Что такое Computer Science (CS)?
CS – это широчайший диапазон теоретических знаний. Сюда входит практически всё, что разработчики знают в той или иной степени.
Для меня CS начинается с алгоритмов и структур данных, дискретной математики, парадигм программирования и заканчивается операционными системами, компьютерными сетями, архитектурой компьютера.
Computer Science на пальцах
Давайте рассмотрим, что такое CS, на простом примере – оценке сложности алгоритмов.
Возьмем для наглядности график, который показывает зависимость роста времени обработки данных от количества самих данных. Эти цветные кривые и показывают приблизительную сложность алгоритма. Итак, зеленым обозначен редкий и идеальный для нас уровень, жёлтым – хорошо, синий – нормальный, красный – похуже.
Но далеко не всегда зависимость будет выглядеть как O(nlog n) или O(n). Может получиться и O(n!) – вы видите, насколько меняется сложность алгоритма.
Или давай возьмем сортировку как классический пример. Каждый, кто занимается программированием, сталкивался с этим и наверняка знает «сортировку пузырьком».
Если взять массив из 10 элементов, то при сортировке пузырьком сортировка элементов будет происходить примерно за 85 перестановок, а при Quick Sort – всего за 29.
Если чуть усложнить задачу и взять в массиве 50 элементов, получится куда более интересная картина: при сортировке пузырьком потребуется почти 2000 перестановок, при Quick Sort – всего 262. Отличие в количестве перестановок уже идет на порядок.
Поиграться с алгоритмами вы можете тут: sorting.at
А что, если количество элементов будет равно 100? Снова впечатляющий разрыв: при сортировке пузырьком потребуется порядка 10 000 операций, а при quick sort – всего 664.
И это мы разобрали только 2 алгоритма сортировки. Бывают и другие варианты, где сортировка может идти быстрее или медленнее в зависимости от самих данных. А ведь ещё есть структуры данных: массив, список, граф, стэк и многие другие. И у всех у них есть свой показатель по Time Complexity и Space Complexity:
Роль Computer Science в систематизации знаний
Приведу простую аналогию. Михаил Васильевич Ломоносов говорил: «Математику уже затем учить следует, что она ум в порядок приводит». Computer Science – эта та же математика, но не для школьников, а для действующих программистов.
До изучения CS у вас, скорее всего, будет большое количество разрозненных знаний, взятых из различных источников, без должной систематизации, целостности. После изучения CS у вас в голове будет «дерево» знаний – вы будете знать, что и как искать, и даже если вы не будете чего-то знать, вы будете четко понимать, где и какими путями добыть недостающие сведения.
Связь Computer Science и ваших зарплатных ожиданий
Если вопрос систематизации знаний для вас вторичен, давайте обратимся к другим причинам изучения CS.
Сейчас в IT многие приходят во многом из-за денежного аспекта. IT-специалисты уже на старте работы рассчитывают получить 500$ и выше (хотя ещё 10 лет назад о таких зарплатах джуны не могли и мечтать). Согласно данным Бюро трудовой статистики США, число профессий, связанных с Computer Science к 2028 году увеличится на 12%, что более чем в 2 раза превышает средний темп роста для всех профессий, составляющий всего 5%.
Обратите внимание на примере статистики по американскому рынку на то, насколько профессии, связанные со STEM (естественными науками, технологиями, инжинирингом и математикой), оцениваются выше, нежели в остальных областях.
И ещё немного цифр, тоже с американского рынка труда. Если взять рандомно вакансии на сайте Glassdoor, то вы увидите запрос работодателей на знание CS не только для опытных разработчиков, но и для новичков.
Вот несколько реальных описаний вакансий для начинающих – все они содержат требования о наличии образования (степени) в CS.
А вот требования для профессионалов с опытом. Зарплатный уровень здесь повыше, но требование знать CS никуда не делось.
Не секрет, что IT-сфера в Беларуси сейчас переживает бурный качественный и количественный рост. Так, экспорт ПВТ в 2020 году превысил 2,7 млрд $, а в самой сфере сейчас заняты более 70 тыс человек, что сравнимо с населением целого города, например, Жлобина.
Возникает логичный вопрос: может ли это продолжаться бесконечно? Прогноз «на коленке» даст нам 2 варианта. Первый – да, рост продолжится. В таком случае, количество людей в этой сфере будет расти, вместе с ним будет расти и конкуренция. Тот, кто будет знать больше и разбираться в чём-то лучше (в т.ч. в Computer Science) будет на вершине, остальные будут менее конкурентны на рынке труда. А значит, нужно продолжать учиться, чтобы быть среди тех, кто более востребован.
Второй вариант – всё, что сейчас происходит, на самом деле является мыльным пузырем, который рано или поздно лопнет. При таком варианте развития событий проектов будет становиться всё меньше, компании начнут сокращать людей. И – как логичный вывод – те, кто будет обладать большей широтой знаний, в частности и Computer Science, будут более ценными кадрами.
Таким образом, не важно, куда будет идти отрасль – вы должны оставаться конкурентоспособными на рынке труда.
Computer Science на Job Interview
Как мы можем использовать CS, когда проводит интервью? Для оценки обучаемости человека, широты его знаний и умения рассуждать.
Например, приходят ребята и говорят: «Я умею в JS/C#/Java/etc». Чтобы быстро проверить мастерство владения этим языком программирования как инструментом, а также проверить общие знания в CS, можно дать однотипное задание, с описанием сути того, что нужно выполнить, и с примерами входных и выходных параметров.
Далее вы как кандидат садитесь, начинаете решать и рассуждать с интервьюером. Описываете как ваше решение работает, можно ли его оптимизировать. Обсуждаем time и space complexity, пробуем улучшить решение, если это возможно. Это может выглядеть примерно вот так:
В итоге вы пишете пример кода, который вроде как и правилен, но при знании CS задачу можно будет решить гораздо проще и быстрее, ведь в арсенале CS есть много вещей, которые можно использовать – и рекурсии, и поиск, и строки, и большое количество алгоритмов.
В Беларуси есть достаточно большое количество классных компаний, в которых можно работать (в т.ч. iTechArt), но есть и мировые компании, в которых многие мечтают оказаться, тот же FAANG (Facebook, Apple, Amazon, Netflix, Google). Сюда же я бы отнес крупные компании типа LinkedIn, Twitter, Yandex и eBay – они тоже задают тренды в сфере.
Посмотрим на Google: по статистике, которую я нашел (данные на 2014 год), всего 1 из 130 претендентов получал работу (для сравнения: в Гарварде – 1 из 14). Как Google среди огромного количества кандидатов выявляет лучших? Как правило, кандидат проходит серию из 5 интервью, которая занимает 37 дней. При этом поиск заточен на так называемых T-shaped people – когда основанием буквы Т является твоя глубокая экспертиза в какой-либо области, а «верхней палочкой» – массив знаний по другим областям, кругозор и начитанность. Именно поэтому возможность обучаться для Google важнее IQ, и компания проводит интервью, где вы пишете код не чтобы проверить вас на ошибки, а чтобы выяснить, как вы мыслите.
Кстати, по моему мнению CS актуален не только для разработчиков. Да, это не нужно маркетологам, но какие-то общие основы для бизнес-аналитика - вполне могут пригодиться. На многих проектах у бизнес-аналитика есть возможность работы с базами данных (которые могут быть реляционными и нереляционными), аналитику нужно проанализировать эти данные, найти взаимосвязи - всё это гораздо проще делать при наличии базовых основ в CS. И даже PM, у которых я преподаю в IT-Academy, учат CSО как одну из дополнительных дисциплин.
Вместо резюме
Да, учить CS может быть сложно. Кого-то отталкивает большое количество литературы, которое нужно перелопатить, различные интерпретации тех или иных понятий. Многие не видят в этом вообще смысла. Кому-то банально не хватает понимания, с чего начать. Как простая рекомендация с чего можно было бы начать изучение тех же алгоритмов, то это книжка «Грокаем алгоритмы», которая написана довольно простым языком и хорошо иллюстрирована. Она сможет дать вам основу, на которой можно строить дальнейший фундамент.
Никто не говорит, что будет легко. Но давайте задумаемся вот о чём: приходя на приём к доктору, мы ожидаем, что он не только отучился 6 лет в университете и 1 год в интернатуре, но и продолжает обучаться, чтобы понимать, как функционирует тело человека в целом. Почему же тогда для программиста приемлемо изучить, к примеру, JavaScript или любой другой язык программирования и не обращать внимания на другие аспекты, которые окружают разработчика каждый день? Если делать себе такое послабление, то нужно быть честными: мы не сможем быть инженерами, а будем всего лишь «кодонабирателями». Может быть кого-то это вполне и устроит, судить явно не мне, но всегда хочется работать с профессионалами в своей сфере.
Учить или не учить? Для меня ответ очевиден. А для вас?..
Материал опубликован на itechart.by, дата публикации: ноябрь 2021.
Курс по основам Computer Science