Обучение
- 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?
Computer Science – это наука, которая помогает окунуться в мир информационных технологий и дает понимание, каким образом эти технологии функционируют. Сегодня Computer Science делает возможности безграничными, поэтому знания в ней – основа специалиста в IT.
О Computer Science нам рассказали Артем Перевозников, Director of Engineering @IDT Corporation (Минск) и Сергей Семенцов, Group Manager @iTechArt (Гомель) – практики со стажем более 10 лет в разработке. У обоих специалистов есть опыт преподавания, поэтому они с легкостью обозначили необходимый бэкграунд, который должен быть у каждого программиста, и поделились секретом, почему на Западе даже опытные разработчики изучают этот курс. Но обо всем по порядку…
Давайте начнем с основ: что вкладывается в понятие Computer Science?
Артем Перевозников, Director of Engineering @IDT
Computer Science, или, попросту говоря, информатика – наука, которая изучает компьютер и способы взаимодействия с ним. Сюда относится теория вычислений, проектирование аппаратного и программного обеспечения, алгоритмы и способы взаимодействия людей с технологиями.
Приведу пример: в повседневной жизни мы играем, работаем, учимся, просматриваем Instagram на своем компьютере или смартфоне. Многие даже не задумываются, как все это работает, как реализуется то, о чем раньше люди только мечтали. А это как раз-таки описывает именно Computer Science.
Сергей Семенцов, Group Manager @iTechArt
Для меня CS – это широчайший диапазон теоретических знаний. Он начинается с алгоритмов и структур данных/дискретной математики/парадигм программирования и заканчивается операционными системами/компьютерными сетями/архитектурой компьютера. Эти знания используются и применяются для решений практических задач при разработке ПО.
Получается, что Computer Science – это must have? Или все-таки можно построить карьеру в IT без глубоких знаний в этой области?
Артем: Только на начальном этапе можно обойтись без познания Сomputer Science, так как от начинающего специалиста еще мало требуют. Однако по мере продвижения по карьерной лестнице возрастают и требования.
Специалисты, которые изучали Computer Science, без особого труда создают набор правил или инструкций для компьютера, чтобы решить проблему бизнеса. Поэтому эта наука – бэкграунд, который должен быть у каждого программиста.
Сергей: Согласен. На начальном этапе построить карьеру можно и без знаний Computer Science. Таких примеров становится все больше. Однако знание основ формирует инженерный подход к решению задач.
Проблема, на мой взгляд, заключается в том, что некоторые разработчики даже не слышали о таком понятии, как O (n) или не понимают разницу в компиляции и интерпретации, однако в CV почти у каждого указан опыт работы на коммерческих проектах и красивый тайтл Middle Software Developer.
Чтобы понять широту знаний специалиста, помогает анализ его теоретической подкованности. Из этого следует вывод, что построить успешную карьеру можно гораздо быстрее и эффективнее при наличии знаний CS.
А можно ли начинать изучать язык программирования, не зная основ Computer Science? Или все равно придется сделать шаг назад и вернуться за базой.
Артем: База есть база, от ее изучения все равно никуда не деться. При изучении языков программирования косвенно затрагивается и Computer Science, ведь множество учебных задач построены на алгоритмах. Так, во время изучения языков программирования происходит неосознанное освоение и Computer Science, построенное на любопытстве и логике.
Здесь хочу подчеркнуть важный момент – знание базы значительно ускоряет изучение языка программирования.
Сергей: Верно, фундаментальные труды по CS точно не создавались впустую. Я думаю, что правильно начать изучать любой язык программирования именно как инструмент, который позволит параллельно осваивать алгоритмы и структуры данных, а также практиковаться в них. Ведь, овладев JS, специалист может усилить свои позиции в React/ VueJS/ Angular.
Если представить ситуацию, что на работу устраиваются два специалиста с равными знаниями по определенному языку, то выбор будет в пользу того кандидата, который владеет основами CS. Поэтому моя рекомендация для начинающих специалистов: учите инструменты для работы (языки, фрэймворки, библиотеки), но не забывайте о базовых понятиях. Старайтесь расти как вглубь, так и вширь.
Что происходит, если программист не изучает Computer Science?
Сергей: Во-первых, это автоматически может сильно усложнить путь входа в компании GAFAM или FAANG (Facebook, Microsoft, Amazon, Apple, Netflix и Google). Из-за большого наплыва людей таким компаниям приходится делать определенный первичный отсев. Отсев оказалось удобно производить, как раз выявляя недостатки знаний в основах CS, особенно в части алгоритмов и структур данных. Сейчас это считается минимальным базовым порогом, который должны знать все специалисты без исключения. Во-вторых, это может затруднить обучение новым технологиям в будущем.
Артем: Хочу добавить, что без изучения CS развитие программиста притормаживается. Он превращается в «кодера» – человека, который выполняет работу строго по инструкции других людей.
Также программисту поручают более рутинную и монотонную работу. Это сказывается и на зарплатных ожиданиях, потому что таких специалистов много и они легко заменяемые.
Как незнание Computer Science может сказаться в работе?
Сергей: Это зависит от конкретной задачи. Допустим, когда речь идёт о верстке или любой другой активности разработчика, где задействованы монотонные и механические действия, то незнание CS никак не скажется. Но если говорить о сложных и масштабных задачах, то их успешное выполнение попросту невозможно без CS.
Часто есть задачи, которые немного сложнее обычного чтения и сохранения файлов, хотя и там могут быть свои нюансы. К примеру, когда речь идёт про одновременный доступ к информации от нескольких процессов. Потому такие задачи автоматически порождают сразу много вопросов.
В качестве небольшой рекомендации здесь может выступить книга Э. Таненбаума «Современные операционные системы», где такие темы, как «Процессы/Потоки», «Память», «Файловая система» и др. разобраны достаточно подробно. Плюс в книге приведены примеры с наиболее популярными ОС на данный момент.
Если подытожить, то незнание основ Computer Science с большей вероятностью приведет к не оптимальному и даже опасному решению конкретной проблемы. Изучая и углубляя свои знания в CS, специалист накапливает определенный страховочный капитал для себя и своих реализаций в коде.
Правда ли, что даже профессиональные разработчики идут изучать Computer Science? Почему так происходит?
Артем: Чем больше человек знает, тем больше он понимает, сколько еще предстоит узнать.
Конечно, профессионалы тоже изучают Computer Science, особенно эта тенденция распространена на Западе. Вот почему так происходит:
-
Профессиональные программисты понимают, что они должны быть конкуренты на рынке. Сопутствующие знания будут только в плюс. Мир меняется, а основы остаются основами. Например, изучение нового языка программирования не станет проблемой со знанием основ CS.
-
Это возможность изучить что-то новое, посмотреть на проблемы с другой стороны, а значит – предложить новые идеи для бизнеса. То, что практикуется ежедневно, – приедается. Тут и приходит на помощь Computer Science c ее многогранностью попробовать себя в разных сферах.
Сергей: Мне кажется, что с ростом технической экспертизы профессиональные разработчики всё чаще возвращаются к CS. Отчасти потому, что что-то забывается. С другой стороны, мы находим новые разделы, с которыми раньше активно не работали. К тому же это бывает жутко интересно!
Каждый из разработчиков решает свои поставленные цели в изучении CS:
-
Кто-то решает задачи, чтобы держать себя в тонусе.
-
Кто-то любит различные соревнования и поэтому активно погружается в эту область.
-
Часть из разработчиков таким образом готовятся к собеседованиям. Причем как те, кто идет на собеседование, так и те, кто их проводит.
-
У кого-то это связано с текущей позицией, и он участвует в разработке чего-то нового.
-
Самые счастливчики это те, для кого изучение CS это хобби, и они совмещают приятное с полезным.
Нужно ли изучать эту науку тестировщику, пиэму, бизнес-аналитику или техническому писателю?
Артем: Для программистов Computer Science является приоритетом в изучении. Для тестировщиков, пиэмов, бизнес-аналитиков или техписов знание этой науки на общем уровне будет дополнительным преимуществом: это позволяет вести коммуникацию с программистами на более понятном языке.
Сергей: Я бы сказал, что для всех специальностей изучение CS актуально. Просто разница в глубине проработки материала. У меня на курсе «Project Manager в IT» я стараюсь максимально расширить текущую программу для слушателей, чтобы передать им как можно больше технических моментов.
Не могу не согласиться, что понимание принципов разработки ПО, а также CI/CD, System Control Version – все это Must Have для инженеров. Такая же ситуация будет справедлива и для бизнес-аналитика, но в меньшей степени, так как у них упор больше в сторону бизнеса.
Что касается дизайнеров, то тут тоже бывают сложности, если у специалиста развито только чувство прекрасного, но нет представлений, как работает веб-разработчик или «мобильщик». Это вносит определенный рассинхрон в команду. Поэтому более тесная интеграция UI/UX специалиста в команду – это важный момент для успешного завершения проекта.
Какие знания можно получить на курсе Computer Science?
Артем: На курсе можно понять принципы работы компьютерных систем. Изучить, как устроен компьютер на практике, и написать простейшие программы. Также можно узнать, на каких современных языках программирования создаются web-приложения, сервисы, игры, базы данных и др.
Что вы можете посоветовать тем, кто еще не определился с направлением?
Сергей: Если стоит задача найти наиболее полный курс по CS и у специалиста неплохо с английским, то имеет смысл посмотреть курсы на Udemy или Coursera, а также Pluralsight. Особенно могут быть полезны курсы от технологических университетов США.
При слабом английском стоит поискать аналогичные видеокурсы в сети, но уже на русском. Также обратите внимание, с привязкой к какому языку программирования позиционируется курс. Если он идёт без привязки к конкретному языку, это даже будет полезнее. Как говорил мой преподаватель: «Не учите языки программирования, учитесь программировать».
Если стоит задача понять, «моё это или нет», то посмотрите в сторону курса от IT-Academy. У меня лично есть желание поработать с материалом этого курса и расширить его в будущем, чтобы самому принять участие как преподаватель на курсе.
Артем: Добавлю, что Computer Science может помочь определиться, если специалист будет задавать себе вопрос «Что мне интересно?». Скорее всего, он будет заниматься этим делом много времени, и я очень хочу, чтобы специалист занимался тем, что ему действительно нравится!
25 сентября в Минске пройдет конференция Open IT, где участники статьи – Артем Перевозников и Сергей Семенцов – выступят в качестве приглашенных спикеров.