«Некоторые не понимают разницу компиляции/интерпретации». Зачем Computer Science?
Computer Science — это наука, которая помогает окунуться в мир информационных технологий и дает понимание, каким образом эти технологии функционируют. Сегодня Computer Science делает возможности безграничными, поэтому знания в ней — основа специалиста в IT.
О Computer Science нам рассказали Артем Перевозников, Director of Engineering @IDT Corporation (Минск) и Сергей Семенцов, Group Manager @iTechArt (Гомель) — практики со стажем более 10 лет в разработке. У обоих специалистов есть опыт преподавания, поэтому они с легкостью обозначили необходимый бэкграунд, который должен быть у каждого программиста, и поделились секретом, почему на Западе даже опытные разработчики изучают этот курс. Но обо всем по порядку…
Давайте начнем с основ: что вкладывается в понятие Computer Science?
Приведу пример: в повседневной жизни мы играем, работаем, учимся, просматриваем Instagram на своем компьютере или смартфоне. Многие даже не задумываются, как все это работает, как реализуется то, о чем раньше люди только мечтали. А это как раз-таки описывает именно Computer Science.
Получается, что Computer Science — это must have? Или все-таки можно построить карьеру в IT без глубоких знаний в этой области?
Артем: Только на начальном этапе можно обойтись без познания Сomputer Science, так как от начинающего специалиста еще мало требуют. Однако по мере продвижения по карьерной лестнице возрастают и требования.
Специалисты, которые изучали Computer Science, без особого труда создают набор правил или инструкций для компьютера, чтобы решить проблему бизнеса. Поэтому эта наука — бэкграунд, который должен быть у каждого программиста.
Сергей: Согласен. На начальном этапе построить карьеру можно и без знаний Computer Science. Таких примеров становится все больше. Однако знание основ формирует инженерный подход к решению задач.
Чтобы понять широту знаний специалиста, помогает анализ его теоретической подкованности. Из этого следует вывод, что построить успешную карьеру можно гораздо быстрее и эффективнее при наличии знаний 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? Почему так происходит?
Артем: Чем больше человек знает, тем больше он понимает, сколько еще предстоит узнать.
Конечно, профессионалы тоже изучают Computer Science, особенно эта тенденция распространена на Западе. Вот почему так происходит:
Профессиональные программисты понимают, что они должны быть конкуренты на рынке. Сопутствующие знания будут только в плюс. Мир меняется, а основы остаются основами. Например, изучение нового языка программирования не станет проблемой со знанием основ CS.
Это возможность изучить что-то новое, посмотреть на проблемы с другой стороны, а значит — предложить новые идеи для бизнеса. То, что практикуется ежедневно, — приедается. Тут и приходит на помощь Computer Science c ее многогранностью попробовать себя в разных сферах.
Сергей: Мне кажется, что с ростом технической экспертизы профессиональные разработчики всё чаще возвращаются к CS. Отчасти потому, что что-то забывается. С другой стороны, мы находим новые разделы, с которыми раньше активно не работали. К тому же это бывает жутко интересно!
Каждый из разработчиков решает свои поставленные цели в изучении CS:
Кто-то решает задачи, чтобы держать себя в тонусе.
Кто-то любит различные соревнования и поэтому активно погружается в эту область.
Часть из разработчиков таким образом готовятся к собеседованиям. Причем как те, кто идет на собеседование, так и те, кто их проводит.
У кого-то это связано с текущей позицией, и он участвует в разработке чего-то нового.
Самые счастливчики это те, для кого изучение CS это хобби, и они совмещают приятное с полезным.
Нужно ли изучать эту науку тестировщику, пиэму, бизнес-аналитику или техническому писателю?
Артем: Для программистов Computer Science является приоритетом в изучении. Для тестировщиков, пиэмов, бизнес-аналитиков или техписов знание этой науки на общем уровне будет дополнительным преимуществом: это позволяет вести коммуникацию с программистами на более понятном языке.
Сергей: Я бы сказал, что для всех специальностей изучение CS актуально. Просто разница в глубине проработки материала. У меня на курсе «Project Manager в IT» я стараюсь максимально расширить текущую программу для слушателей, чтобы передать им как можно больше технических моментов.
Не могу не согласиться, что понимание принципов разработки ПО, а также CI/CD, System Control Version — все это Must Have для инженеров. Такая же ситуация будет справедлива и для бизнес-аналитика, но в меньшей степени, так как у них упор больше в сторону бизнеса.
Что касается дизайнеров, то тут тоже бывают сложности, если у специалиста развито только чувство прекрасного, но нет представлений, как работает веб-разработчик или «мобильщик». Это вносит определенный рассинхрон в команду. Поэтому более тесная интеграция UI/UX специалиста в команду — это важный момент для успешного завершения проекта.
Артем: На курсе можно понять принципы работы компьютерных систем. Изучить, как устроен компьютер на практике, и написать простейшие программы. Также можно узнать, на каких современных языках программирования создаются web-приложения, сервисы, игры, базы данных и др.
Что вы можете посоветовать тем, кто еще не определился с направлением?
Сергей: Если стоит задача найти наиболее полный курс по CS и у специалиста неплохо с английским, то имеет смысл посмотреть курсы на Udemy или Coursera, а также Pluralsight. Особенно могут быть полезны курсы от технологических университетов США.
Если стоит задача понять, «моё это или нет», то посмотрите в сторону курса от IT-Academy. У меня лично есть желание поработать с материалом этого курса и расширить его в будущем, чтобы самому принять участие как преподаватель на курсе.
Артем: Добавлю, что Computer Science может помочь определиться, если специалист будет задавать себе вопрос «Что мне интересно?». Скорее всего, он будет заниматься этим делом много времени, и я очень хочу, чтобы специалист занимался тем, что ему действительно нравится!
Положа руку на сердце, мест, где за CS спрашивали бы не с целью понизить зарплатную планку перед приемом на условное формошлепство, а для реального использования в проекте -- на пальце одной руки пересчитать можно.
Таки да. И дело тут в том ИМХО, что разработка последовательно движется в сторону абстрагирования от устройства оборудования на котором разворачиваются приложения. Это существенно упрощает разработку. Несомненно, существуют достаточно многие классы задач, где от этого не уйти, но таких задач меньшинство, поэтому и ценность изучения CS не стоит переоценивать.
Понятие конечного автомата (которым является любая дискретная вычислительная система) ортогонально устройству оборудования.
Тут как с теорией нормальных форм: можно по наитию дойти (и до третьей формы обычно доходят эмпирически) до рационального проектирования структуры базы, но лучше, когда хотя бы есть знание о том, что у темы есть собственное название и теоретические построения.
Ребят, без знания как устроено ядро линукса можно построить шикарную карьеру.
Я понимаю что у всех кто тратил 4-5 лет жизни в бгуире регулярно нехило припекает от вайтишников которые не знают CS, залетают на реакт и ноду и через 3 года получают больше чем вы такие умные и серьёзные джависты со знанием крестов шарпов и тд...
Я этот хейт вижу на каждом шагу, если не прямой то слегка заувалированный. Не знаю сколько лет ещё должно пройти чтобы вы поняли суть коммерческой разработки и то что ваше виликолЭпное знание устройства машины Тьюринга не нужно в 80+% вакансий))
Вас никто не заставляет знать ядро линукса (его в универе уже особо и не учат на большинстве специальностях), однако тайтл "Software Engineer" лучше уберите из CV, если не знаете, что такое О(n). Замените тайтл на "HTML/CSS/React Coder". Так будет честнее хотя бы перед собой.
программист без лишний знаний старается тупо найти как это сделал кто-то другой и скопировать... и это зачастую наиболее быстрый и эффективный способ ... а те кто шибко образованные и умные любят все свои руками делать - все порываются улучшить и переписать... в то время как наверняка кто-то уже и фремворк какой или библиотеку сделал на эту же тему до них и все что нужно - просто ее и заюзать...
Anonymous
Developer в Horns and hooves Company
16 сентября 2021, 18:57
6
"Программист без лишних знаний" - это шедеврально, надо запомнить.
таки да... умный программист - ленивый программист. а кто работать будет когда нужно просто делать то что нужно без особых изысков а всего лишь что бы спеке соответствовало ? (=коммерческая разработка 80% ) :)
А потом разгребай эту натащенную отовсюду помойку библиотек и разрешай конфликты их совместной работы.
Намедни ровно такой кейс был: заказали индусам одну UI-библиотеку заменить на другую, более модную -- по итогу где-то рухнула бизнес-логика. Зато нашли быстро, на что готовое заменить.
Интересная особенность наших обучающих курсов, почти по любой тематике - они продаются как статусные. Их покупателям внушают статус. Статус внушают утверждениями о том, что приобретя какое-то знание покупатели станут чем-то лучше других людей. Такого рода подход к продажам привлекает людей, которых интересует статус, а не сами по себе инженерно-технические проблемы. В итоге эти люди страдают - они отвалили деньги за "статусное" знание и вынуждены страдать на "скучных работах".
Не однажды замечал, что "статусные люди", приобретя дипломы, даже помучавшись ради них, пытаются решать проблемы статусными способами, способами, которые поддерживают их самооценку, позволяют самоутвердиться за счет других людей. То есть проблема, которая в решении требует базовых знаний, скажем, статистики или теории вероятностей решается ими каким-то "статусным" способом. То есть для поддержания своего "высокого статуса" людям хочется решать проблемы так, как ее решают "настоящие программисты" или "настоящие проджект-менеджеры" из "настоящих серьезных компаний".
Интересно еще, что весь текст посвящен рекламе CS, но в нем нет упоминаний кейсов, примеров применения знания из личного опыта.
Чтобы понять широту знаний специалиста, помогает анализ его теоретической подкованности. Из этого следует вывод, что построить успешную карьеру можно гораздо быстрее и эффективнее при наличии знаний CS.
Как из первого следует вывод в виде второго, лично я так и не понял. Вообще всю статью можно свести к "Чем выше тайтл, тем больше на собеседованиях спрашивают по CS (зачем?), поэтому если хотите выше тайтл, нужно знать CS"
Базовая логика бесплатна, потому и низкостатусна. Как можно продать дорого и статусно нечто, сделанное из дешевого, даром доступного? Дорого и статусно можно продать только то, что сделано из недоступного. Так что чем меньше логики - тем недоступнее, и тем статуснее.
А вы, вероятно, придираетесь к словам потому что завидуете успешным людям. :)
Не знаю что в голове у людей говорящих что знания О-нотации не нужно (я каждый день его использую на самых скучных делах, да хотя бы выбирая между листом и хэш-таблицей).
Возможно вы просто не встречали людей которые её действительно не знают, я встречал, и это катастрофа. Как правило они много чего ещё не знают, например что такое колбэк или рекурсия
"нужное знание" это то, которое используется или то, которое не используется? :) Я вот давно забыл что такое О-нотация и рекурсию не использую именно потому, что знаю что это такое. Как же я работаю? Таки просто - пилю бизнес задачу пользователя. При грамотной архитектуре приложения, оно будет работать с приемлемой для заказчика скоростью в 90% случаев, а если где то выскакивает затык с производительностью, то такое место локализуется и переписывается используя подсказки Гугла, если нужно. И я счастлив, что прошли времена, когда всю эту справочную муть нужно было носить в голове из за малой доступности интернета (я застал времена диалапа) и с радостью выкинул из головы всю эту муть. Мне достаточно знать, что есть тот или иной подход, без влезания в дебри.
Однако знание основ формирует инженерный подход к решению задач
Computer Science формирует НАУЧНЫЙ подход к решению задач. А инженерный подход формирует Software Engineering.
В этом и заключается весь ответ. Если вы хотите заниматься НАУКОЙ - вам нужен Computer Science. Если вы хотите быть программистом - вам нужен software engineering.
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.
Положа руку на сердце, мест, где за CS спрашивали бы не с целью понизить зарплатную планку перед приемом на условное формошлепство, а для реального использования в проекте -- на пальце одной руки пересчитать можно.
Для гэтых мэтаў ёсць яшчэ пару класных пытанняў па SQL i HTTP.
ну эти хотябы могут пригодиться на практике)
Таки да. И дело тут в том ИМХО, что разработка последовательно движется в сторону абстрагирования от устройства оборудования на котором разворачиваются приложения. Это существенно упрощает разработку. Несомненно, существуют достаточно многие классы задач, где от этого не уйти, но таких задач меньшинство, поэтому и ценность изучения CS не стоит переоценивать.
Понятие конечного автомата (которым является любая дискретная вычислительная система) ортогонально устройству оборудования.
Тут как с теорией нормальных форм: можно по наитию дойти (и до третьей формы обычно доходят эмпирически) до рационального проектирования структуры базы, но лучше, когда хотя бы есть знание о том, что у темы есть собственное название и теоретические построения.
Тсссс! Это же реклама)
И что? Отсутствие неприятных комментов тоже пусть покупают! :)
Вось вырас ты ў шырыню і ў глыбіню такі, а табе кажуць: "Прабачце наша бізнес мадель не дазваляе вам плаціць Х".
Это все потому, что у кого-то слишком узкие вилки!
Идёшь в фаанг и с лёгкостью проходишь все интервью, профит
для фаанга все же надо быть уже немного нездоровым головой
Ребят, без знания как устроено ядро линукса можно построить шикарную карьеру.
Я понимаю что у всех кто тратил 4-5 лет жизни в бгуире регулярно нехило припекает от вайтишников которые не знают CS, залетают на реакт и ноду и через 3 года получают больше чем вы такие умные и серьёзные джависты со знанием крестов шарпов и тд...
Я этот хейт вижу на каждом шагу, если не прямой то слегка заувалированный. Не знаю сколько лет ещё должно пройти чтобы вы поняли суть коммерческой разработки и то что ваше виликолЭпное знание устройства машины Тьюринга не нужно в 80+% вакансий))
Ох уж эти любители кодить по наитию...
Ну можно построить шикарную карьеру, вообще не будучи программистом
Вас никто не заставляет знать ядро линукса (его в универе уже особо и не учат на большинстве специальностях), однако тайтл "Software Engineer" лучше уберите из CV, если не знаете, что такое О(n). Замените тайтл на "HTML/CSS/React Coder". Так будет честнее хотя бы перед собой.
Не ўсе факультэты БДУІР выпускаюць праграмістаў ;)
некаторыя не выпускаюць, і пакідаюць на кафедрах
Вон у современного процессора x86 тысячи регистров, но для программиста в архитектуре только десяток доступен, потому что незамем ему такое знать
программист без лишний знаний старается тупо найти как это сделал кто-то другой и скопировать... и это зачастую наиболее быстрый и эффективный способ ... а те кто шибко образованные и умные любят все свои руками делать - все порываются улучшить и переписать... в то время как наверняка кто-то уже и фремворк какой или библиотеку сделал на эту же тему до них и все что нужно - просто ее и заюзать...
"Программист без лишних знаний" - это шедеврально, надо запомнить.
таки да... умный программист - ленивый программист. а кто работать будет когда нужно просто делать то что нужно без особых изысков а всего лишь что бы спеке соответствовало ? (=коммерческая разработка 80% ) :)
умные автоматизируют, ленивые копипастят под спеку
А потом разгребай эту натащенную отовсюду помойку библиотек и разрешай конфликты их совместной работы.
Намедни ровно такой кейс был: заказали индусам одну UI-библиотеку заменить на другую, более модную -- по итогу где-то рухнула бизнес-логика. Зато нашли быстро, на что готовое заменить.
"если работает - не трогай" уже не советует современным динамичным подходам :)
Интересная особенность наших обучающих курсов, почти по любой тематике - они продаются как статусные. Их покупателям внушают статус. Статус внушают утверждениями о том, что приобретя какое-то знание покупатели станут чем-то лучше других людей. Такого рода подход к продажам привлекает людей, которых интересует статус, а не сами по себе инженерно-технические проблемы. В итоге эти люди страдают - они отвалили деньги за "статусное" знание и вынуждены страдать на "скучных работах".
Не однажды замечал, что "статусные люди", приобретя дипломы, даже помучавшись ради них, пытаются решать проблемы статусными способами, способами, которые поддерживают их самооценку, позволяют самоутвердиться за счет других людей. То есть проблема, которая в решении требует базовых знаний, скажем, статистики или теории вероятностей решается ими каким-то "статусным" способом. То есть для поддержания своего "высокого статуса" людям хочется решать проблемы так, как ее решают "настоящие программисты" или "настоящие проджект-менеджеры" из "настоящих серьезных компаний".
Интересно еще, что весь текст посвящен рекламе CS, но в нем нет упоминаний кейсов, примеров применения знания из личного опыта.
Особенно понравилось
Как из первого следует вывод в виде второго, лично я так и не понял. Вообще всю статью можно свести к "Чем выше тайтл, тем больше на собеседованиях спрашивают по CS (зачем?), поэтому если хотите выше тайтл, нужно знать CS"
Базовая логика бесплатна, потому и низкостатусна. Как можно продать дорого и статусно нечто, сделанное из дешевого, даром доступного? Дорого и статусно можно продать только то, что сделано из недоступного. Так что чем меньше логики - тем недоступнее, и тем статуснее.
А вы, вероятно, придираетесь к словам потому что завидуете успешным людям. :)
Не знаю что в голове у людей говорящих что знания О-нотации не нужно (я каждый день его использую на самых скучных делах, да хотя бы выбирая между листом и хэш-таблицей).
Возможно вы просто не встречали людей которые её действительно не знают, я встречал, и это катастрофа. Как правило они много чего ещё не знают, например что такое колбэк или рекурсия
"нужное знание" это то, которое используется или то, которое не используется? :) Я вот давно забыл что такое О-нотация и рекурсию не использую именно потому, что знаю что это такое. Как же я работаю? Таки просто - пилю бизнес задачу пользователя. При грамотной архитектуре приложения, оно будет работать с приемлемой для заказчика скоростью в 90% случаев, а если где то выскакивает затык с производительностью, то такое место локализуется и переписывается используя подсказки Гугла, если нужно. И я счастлив, что прошли времена, когда всю эту справочную муть нужно было носить в голове из за малой доступности интернета (я застал времена диалапа) и с радостью выкинул из головы всю эту муть. Мне достаточно знать, что есть тот или иной подход, без влезания в дебри.
Computer Science формирует НАУЧНЫЙ подход к решению задач. А инженерный подход формирует Software Engineering.
В этом и заключается весь ответ. Если вы хотите заниматься НАУКОЙ - вам нужен Computer Science. Если вы хотите быть программистом - вам нужен software engineering.