2 added
2 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>28 июн 2022</li>
2
<ul><li>28 июн 2022</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Поговорили с разработчиками о том, стоит ли джуну погружаться в дебри Computer Science или лучше подтянуть недостающие знания в процессе работы.</p>
4
</ul><p>Поговорили с разработчиками о том, стоит ли джуну погружаться в дебри Computer Science или лучше подтянуть недостающие знания в процессе работы.</p>
5
<p>Кадр: фильм "Скрытые фигуры"</p>
5
<p>Кадр: фильм "Скрытые фигуры"</p>
6
<p>Журналист, коммерческий автор и редактор. Пишет про IT, цифровой маркетинг и бизнес. Сайт:<a>darovska.com</a>.</p>
6
<p>Журналист, коммерческий автор и редактор. Пишет про IT, цифровой маркетинг и бизнес. Сайт:<a>darovska.com</a>.</p>
7
<p>На самом деле заголовок немного лукавый: ответ на вопрос "учить или не учить" оказался не столь однозначным. Наши респонденты неожиданно разделились на четыре группы:</p>
7
<p>На самом деле заголовок немного лукавый: ответ на вопрос "учить или не учить" оказался не столь однозначным. Наши респонденты неожиданно разделились на четыре группы:</p>
8
<ul><li>Одни смело утверждают, что в IT можно уверенно себя чувствовать и без Computer Science.</li>
8
<ul><li>Одни смело утверждают, что в IT можно уверенно себя чувствовать и без Computer Science.</li>
9
<li>Другие говорят, что начинать можно и будучи полным валенком в информатике. Но позже теоретические знания всё-таки придётся наверстать.</li>
9
<li>Другие говорят, что начинать можно и будучи полным валенком в информатике. Но позже теоретические знания всё-таки придётся наверстать.</li>
10
<li>Третьи настаивают, что без серьёзных познаний в Computer Science даже соваться в профессию не стоит.</li>
10
<li>Третьи настаивают, что без серьёзных познаний в Computer Science даже соваться в профессию не стоит.</li>
11
<li>Наконец, четвёртые подошли к вопросу сугубо практически: Computer Science - наука глобальная, не всем понятная. Поэтому не надо пытаться объять необъятное: каждой специальности - свой конкретный раздел CS.</li>
11
<li>Наконец, четвёртые подошли к вопросу сугубо практически: Computer Science - наука глобальная, не всем понятная. Поэтому не надо пытаться объять необъятное: каждой специальности - свой конкретный раздел CS.</li>
12
</ul><p>Давайте выслушаем все мнения - а дальше решайте, какое вам ближе.</p>
12
</ul><p>Давайте выслушаем все мнения - а дальше решайте, какое вам ближе.</p>
13
-
<h2><strong>Репетируют те, кто играть н�� умеет</strong></h2>
13
+
<h2><strong>Репетируют те, кто играть не умеет</strong></h2>
14
<p><strong>Principal Frontend Developer, CTO в CSSSR</strong></p>
14
<p><strong>Principal Frontend Developer, CTO в CSSSR</strong></p>
15
<p>Начинающему разработчику можно совсем не погружаться в Computer Science. Уверяю вас: если он окажется совершенно незнаком с системой типов Хиндли - Милнера, ничего страшного не произойдёт. Более того: он, возможно, даже будет пользоваться им на прикладном уровне, сам того не подозревая. Ведь работа новичка чаще всего - ремесленничество. К инженерной деятельности он приближается уже на более поздних этапах карьеры.</p>
15
<p>Начинающему разработчику можно совсем не погружаться в Computer Science. Уверяю вас: если он окажется совершенно незнаком с системой типов Хиндли - Милнера, ничего страшного не произойдёт. Более того: он, возможно, даже будет пользоваться им на прикладном уровне, сам того не подозревая. Ведь работа новичка чаще всего - ремесленничество. К инженерной деятельности он приближается уже на более поздних этапах карьеры.</p>
16
<p>На мой взгляд, Computer Science больше связаны с теоретическими исследованиями, наукой в чистом виде, чем с ежедневной практикой, - хотя, конечно, и разработка там тоже присутствует.</p>
16
<p>На мой взгляд, Computer Science больше связаны с теоретическими исследованиями, наукой в чистом виде, чем с ежедневной практикой, - хотя, конечно, и разработка там тоже присутствует.</p>
17
<p><strong>Principal Frontend Developer в CSSSR</strong></p>
17
<p><strong>Principal Frontend Developer в CSSSR</strong></p>
18
<p>Скажу слегка провокационно: Computer Science не нужны 99% разработчиков, решающих практические задачи. Бывают редкие случаи, требующие специальных знаний в каких-то разделах и областях, - но даже тогда проще серьёзно изучить конкретный раздел, чем углубляться во всю теорию информатики.</p>
18
<p>Скажу слегка провокационно: Computer Science не нужны 99% разработчиков, решающих практические задачи. Бывают редкие случаи, требующие специальных знаний в каких-то разделах и областях, - но даже тогда проще серьёзно изучить конкретный раздел, чем углубляться во всю теорию информатики.</p>
19
<p>Значит ли это что Computer Science совсем бесполезны? Нет. Профессионализм разработчика определяется не только скиллами в конкретных технологиях и типах задач. Знание кучи паттернов и библиотек не сделает вас сеньором, если оно не обеспечено культурой инженерного мышления. Без неё вы не сможете решать нетипичные задачи, что-то изобретать.</p>
19
<p>Значит ли это что Computer Science совсем бесполезны? Нет. Профессионализм разработчика определяется не только скиллами в конкретных технологиях и типах задач. Знание кучи паттернов и библиотек не сделает вас сеньором, если оно не обеспечено культурой инженерного мышления. Без неё вы не сможете решать нетипичные задачи, что-то изобретать.</p>
20
<p>Конечно, практика - лучший учитель. Но такое обучение - это долго и малоконтролируемо: мы не знаем, какие задачи нам предстоит решать, и редко можем их выбирать.</p>
20
<p>Конечно, практика - лучший учитель. Но такое обучение - это долго и малоконтролируемо: мы не знаем, какие задачи нам предстоит решать, и редко можем их выбирать.</p>
21
-
<p>В этом и заключается главная ценность Computer Science - они агрегируют сложные задачи, возникавшие на пути развития программирования, в первоначальном виде. На них ещё не нагромождены фреймворки, API внешних систем и так далее.</p>
21
+
<p>В этом и заключается главная ценность Computer Science - они агрегируют сложные задачи, возникавшие на пути развити�� программирования, в первоначальном виде. На них ещё не нагромождены фреймворки, API внешних систем и так далее.</p>
22
<p>Однако нет никакого смысла в механическом заучивании: вы никогда не встретите в своей работе точно таких же абстрактных, не связанных с реальными технологиями проблем. Это не заменит практических навыков: теория и практика могут синергетически усилить друг друга только вместе.</p>
22
<p>Однако нет никакого смысла в механическом заучивании: вы никогда не встретите в своей работе точно таких же абстрактных, не связанных с реальными технологиями проблем. Это не заменит практических навыков: теория и практика могут синергетически усилить друг друга только вместе.</p>
23
<p><strong>Член команды Podlodka Techlead Crew</strong></p>
23
<p><strong>Член команды Podlodka Techlead Crew</strong></p>
24
<p>Больше 10 лет занимается разработкой высоконагруженных систем и обеспечением их работоспособности и отказоустойчивости в облачных окружениях, руководит группой разработчиков.</p>
24
<p>Больше 10 лет занимается разработкой высоконагруженных систем и обеспечением их работоспособности и отказоустойчивости в облачных окружениях, руководит группой разработчиков.</p>
25
<p>Если бэкграунд не технический, минимальный курс по Computer Science, наверное, нужен: нельзя сделать что-то осознанное, не понимая, как функционирует программная инженерия.</p>
25
<p>Если бэкграунд не технический, минимальный курс по Computer Science, наверное, нужен: нельзя сделать что-то осознанное, не понимая, как функционирует программная инженерия.</p>
26
<p>Но когда у начинающего разработчика уже есть технический бэкграунд (математика, физика, информатика), то для старта в дебри погружаться не столь важно: как правило, общего представления достаточно.</p>
26
<p>Но когда у начинающего разработчика уже есть технический бэкграунд (математика, физика, информатика), то для старта в дебри погружаться не столь важно: как правило, общего представления достаточно.</p>
27
<p>Дальше уровень погружения зависит от задачи: работаешь с PostgreSQL - изучи его внутреннее устройство, пишешь программу по разбору данных - разберись детально в структурах и соответствующих алгоритмах.</p>
27
<p>Дальше уровень погружения зависит от задачи: работаешь с PostgreSQL - изучи его внутреннее устройство, пишешь программу по разбору данных - разберись детально в структурах и соответствующих алгоритмах.</p>
28
<h2><strong>Никто не может знать всего</strong></h2>
28
<h2><strong>Никто не может знать всего</strong></h2>
29
<p><strong>SRE</strong></p>
29
<p><strong>SRE</strong></p>
30
<p>Пишет на Go, PHP, Python, Bash, далее со всеми остановками по требованию заказчика. Сейчас работает в Booking.com, до этого работал в "Яндекс.Облаке" и во "ВКонтакте". Любит жену, кино и снимать видео =)</p>
30
<p>Пишет на Go, PHP, Python, Bash, далее со всеми остановками по требованию заказчика. Сейчас работает в Booking.com, до этого работал в "Яндекс.Облаке" и во "ВКонтакте". Любит жену, кино и снимать видео =)</p>
31
<p><strong><a>twitter</a></strong></p>
31
<p><strong><a>twitter</a></strong></p>
32
<p>Я долго писал программы без базовых знаний в Computer Science. Получалось так себе. Сейчас немного освоился в теории - стал кодить не то чтобы отлично, но местами лучше. Когда постоянно оптимизируешь код, пытаешься искать адекватные и быстрые решения, общая планка скиллов повышается. Больше не пишешь брутфорс-решение, чтобы перебрать два массива.</p>
32
<p>Я долго писал программы без базовых знаний в Computer Science. Получалось так себе. Сейчас немного освоился в теории - стал кодить не то чтобы отлично, но местами лучше. Когда постоянно оптимизируешь код, пытаешься искать адекватные и быстрые решения, общая планка скиллов повышается. Больше не пишешь брутфорс-решение, чтобы перебрать два массива.</p>
33
<p>Даже начальные знания Computer Science очень помогают. Если вы освоили базовые структуры, паттерны, подходы, то сможете легко понять проблему, найти оптимальный алгоритм и решить задачу намного эффективнее. В результате повышается качество принимаемых решений.</p>
33
<p>Даже начальные знания Computer Science очень помогают. Если вы освоили базовые структуры, паттерны, подходы, то сможете легко понять проблему, найти оптимальный алгоритм и решить задачу намного эффективнее. В результате повышается качество принимаемых решений.</p>
34
<p>Например, если вы занимаетесь highload-приложениями, core-частью, оптимизацией под миллионы запросов в секунду, пишете демоны на бэкенде - без Computer Science не обойтись. Надо знать оптимальные алгоритмы, иначе неправильный for или структура могут съедать не 3, а 10 и даже 2000 циклов, что потребует на 10% больше CPU. При огромной инфраструктуре это может привести к необходимости иметь на 10-00 серверов больше, что очень дорого.</p>
34
<p>Например, если вы занимаетесь highload-приложениями, core-частью, оптимизацией под миллионы запросов в секунду, пишете демоны на бэкенде - без Computer Science не обойтись. Надо знать оптимальные алгоритмы, иначе неправильный for или структура могут съедать не 3, а 10 и даже 2000 циклов, что потребует на 10% больше CPU. При огромной инфраструктуре это может привести к необходимости иметь на 10-00 серверов больше, что очень дорого.</p>
35
<p>Но учиться сложно и долго, конечный профит не очень понятен. Хорошо, если вам повезло с университетом, где всему обучат, покажут, помогут понять на хороших примерах. Но таких университетов мало. При этом можно годами перекладывать CRUD’ы и JSON’ы, вообще не соприкасаясь с Computer Science, и это тоже нормально.</p>
35
<p>Но учиться сложно и долго, конечный профит не очень понятен. Хорошо, если вам повезло с университетом, где всему обучат, покажут, помогут понять на хороших примерах. Но таких университетов мало. При этом можно годами перекладывать CRUD’ы и JSON’ы, вообще не соприкасаясь с Computer Science, и это тоже нормально.</p>
36
<p>Если хотите развиваться, старайтесь просто брать задачи из своей текущей работы и потихоньку их разрабатывать. Будет возможность параллельно учиться в универе - отлично. Можно также позаниматься на курсах, смотреть их фоново. Всё это обязательно пригодится на собеседованиях: например, чтобы устроиться в крупную компанию, нужно решать задачи на <a>LeetCode</a>, учить алгоритмы, уметь объяснять и защищать свои решения.</p>
36
<p>Если хотите развиваться, старайтесь просто брать задачи из своей текущей работы и потихоньку их разрабатывать. Будет возможность параллельно учиться в универе - отлично. Можно также позаниматься на курсах, смотреть их фоново. Всё это обязательно пригодится на собеседованиях: например, чтобы устроиться в крупную компанию, нужно решать задачи на <a>LeetCode</a>, учить алгоритмы, уметь объяснять и защищать свои решения.</p>
37
<p><strong>Technical Lead</strong></p>
37
<p><strong>Technical Lead</strong></p>
38
<p>Любит GYM, путешествия и компьютерные игры. Пишет технические статьи и иногда технические треды в <a>Twitter</a>.</p>
38
<p>Любит GYM, путешествия и компьютерные игры. Пишет технические статьи и иногда технические треды в <a>Twitter</a>.</p>
39
<p>Я не фанат вузовского подхода, когда сразу пытаются охватить наибольший набор компьютерных дисциплин и глубоко их изучить. Начинающим разработчикам, особенно тем, кто входит в IT самостоятельно, я бы предложил поступить иначе:</p>
39
<p>Я не фанат вузовского подхода, когда сразу пытаются охватить наибольший набор компьютерных дисциплин и глубоко их изучить. Начинающим разработчикам, особенно тем, кто входит в IT самостоятельно, я бы предложил поступить иначе:</p>
40
<ul><li>Ознакомьтесь с базовыми понятиями, устройством компьютера, компьютерными сетями и операционными системами;</li>
40
<ul><li>Ознакомьтесь с базовыми понятиями, устройством компьютера, компьютерными сетями и операционными системами;</li>
41
<li>Освойте первый язык программирования, а параллельно базово изучите структуры данных, алгоритмы и дискретную математику;</li>
41
<li>Освойте первый язык программирования, а параллельно базово изучите структуры данных, алгоритмы и дискретную математику;</li>
42
<li>После этого путь изучения Computer Science зависит от выбранной IT-области. Получив стажировку или даже первую работу, вы поймёте, без каких дисциплин вообще не обойтись, какие хорошо было бы знать, а какие не встретятся вовсе.</li>
42
<li>После этого путь изучения Computer Science зависит от выбранной IT-области. Получив стажировку или даже первую работу, вы поймёте, без каких дисциплин вообще не обойтись, какие хорошо было бы знать, а какие не встретятся вовсе.</li>
43
</ul><p>В программистских чатиках и в твиттере можно встретить два воюющих лагеря.</p>
43
</ul><p>В программистских чатиках и в твиттере можно встретить два воюющих лагеря.</p>
44
<p>В одном считают, что погружаться в Computer Science надо максимально глубоко - иначе ты не Программист, а "жалкий кодер", "формошлёп" и "перекладыватель джейсонов". Я не разделяю этого мнения: иной раз даже "джейсономешалка" требует много знаний и навыков :)</p>
44
<p>В одном считают, что погружаться в Computer Science надо максимально глубоко - иначе ты не Программист, а "жалкий кодер", "формошлёп" и "перекладыватель джейсонов". Я не разделяю этого мнения: иной раз даже "джейсономешалка" требует много знаний и навыков :)</p>
45
<p>В другом сидят люди, которые не учили Computer Science вовсе, попали в профессию джунами, кто-то даже до мидлов дорос, имеет свой стабильный доход и не хочет дополнительно напрягаться. Приходилось работать и с такими ребятами - порой у них на ровном месте были пробуксовки или изобретение велосипеда, хотя уже изобретённый давно за углом стоит. Им я рекомендую почитать про<a>мысленный эксперимент "Китайская комната"</a>. Без знаний в CS можно превратиться именно в такую комнату для своего фреймворка: в рамках типовых задач всё вроде ок, но любой шаг влево или вправо - и сразу ступор.</p>
45
<p>В другом сидят люди, которые не учили Computer Science вовсе, попали в профессию джунами, кто-то даже до мидлов дорос, имеет свой стабильный доход и не хочет дополнительно напрягаться. Приходилось работать и с такими ребятами - порой у них на ровном месте были пробуксовки или изобретение велосипеда, хотя уже изобретённый давно за углом стоит. Им я рекомендую почитать про<a>мысленный эксперимент "Китайская комната"</a>. Без знаний в CS можно превратиться именно в такую комнату для своего фреймворка: в рамках типовых задач всё вроде ок, но любой шаг влево или вправо - и сразу ступор.</p>
46
<p>Я за золотую середину: изучать Computer Science надо, но поначалу только базовые вещи. Важно не перестараться и не демотивировать себя навалившейся сложностью и объёмом знаний, которые не всегда подходят для ваших задач.</p>
46
<p>Я за золотую середину: изучать Computer Science надо, но поначалу только базовые вещи. Важно не перестараться и не демотивировать себя навалившейся сложностью и объёмом знаний, которые не всегда подходят для ваших задач.</p>
47
<p>Могу предложить хорошо и вдумчиво почитать небольшую, но довольно толковую книгу "<a>Теоретический минимум по Computer Science. Всё, что нужно программисту и разработчику</a>". Она поможет понять, куда двигаться дальше.</p>
47
<p>Могу предложить хорошо и вдумчиво почитать небольшую, но довольно толковую книгу "<a>Теоретический минимум по Computer Science. Всё, что нужно программисту и разработчику</a>". Она поможет понять, куда двигаться дальше.</p>
48
<p><strong>Mobile Head в Dodo Engineering</strong></p>
48
<p><strong>Mobile Head в Dodo Engineering</strong></p>
49
<p>Любит интерфейсы, тесты и доступность. В свободное время пишет статьи и коллекционирует клавиатуры.</p>
49
<p>Любит интерфейсы, тесты и доступность. В свободное время пишет статьи и коллекционирует клавиатуры.</p>
50
<p><a><strong>twitter</strong></a></p>
50
<p><a><strong>twitter</strong></a></p>
51
<p>На мой взгляд, даже "уверенный пользователь ПК" может научиться программировать, главное - желание. Но через год-два карьеры точно понадобится копнуть поглубже. В какую сторону - зависит от сферы вашей работы и интересов.</p>
51
<p>На мой взгляд, даже "уверенный пользователь ПК" может научиться программировать, главное - желание. Но через год-два карьеры точно понадобится копнуть поглубже. В какую сторону - зависит от сферы вашей работы и интересов.</p>
52
<p>Например, в мобильной разработке я бы предложил больше узнать про дизайн интерфейсов, взаимодействие человека и компьютера. Так ваши интерфейсы станут более "отзывчивыми", приятными и интересными.</p>
52
<p>Например, в мобильной разработке я бы предложил больше узнать про дизайн интерфейсов, взаимодействие человека и компьютера. Так ваши интерфейсы станут более "отзывчивыми", приятными и интересными.</p>
53
<p>Самый яркий пример - доступность интерфейсов. В России много отличных, красивых приложений, но почти никто не знает, что их можно адаптировать, например, для незрячих людей. Меня это настолько впечатлило, что я написал целую книгу "<a>Про доступность iOS</a>".</p>
53
<p>Самый яркий пример - доступность интерфейсов. В России много отличных, красивых приложений, но почти никто не знает, что их можно адаптировать, например, для незрячих людей. Меня это настолько впечатлило, что я написал целую книгу "<a>Про доступность iOS</a>".</p>
54
<p>Профессионализм специалиста всегда измеряется тем, насколько он понимает контекст текущей задачи. Если дизайнер рисует макет телефона, не учитывая, как он будет лежать в руке, - это плохой дизайнер. Бэкенд-разработчик, не понимающий, как устроен интернет или база данных, не сделает надёжный сервис. Без знания аффинных преобразований не получится красивая 3D-игра. Но всё это можно узнать по пути, главное - интересоваться.</p>
54
<p>Профессионализм специалиста всегда измеряется тем, насколько он понимает контекст текущей задачи. Если дизайнер рисует макет телефона, не учитывая, как он будет лежать в руке, - это плохой дизайнер. Бэкенд-разработчик, не понимающий, как устроен интернет или база данных, не сделает надёжный сервис. Без знания аффинных преобразований не получится красивая 3D-игра. Но всё это можно узнать по пути, главное - интересоваться.</p>
55
<h2><strong>Не зная броду, не суйся в воду</strong></h2>
55
<h2><strong>Не зная броду, не суйся в воду</strong></h2>
56
<p>Польза Computer Science для многих новичков неочевидна. Им кажется: зачем знать протоколы передачи данных, если всё сводится к HTTP-запросам, которые можно сделать к API, описанному в документации? Или: к чему алгоритмы обхода дерева, если рендерингом занимается<a>React</a>, который прекрасно обходит всё как надо?</p>
56
<p>Польза Computer Science для многих новичков неочевидна. Им кажется: зачем знать протоколы передачи данных, если всё сводится к HTTP-запросам, которые можно сделать к API, описанному в документации? Или: к чему алгоритмы обхода дерева, если рендерингом занимается<a>React</a>, который прекрасно обходит всё как надо?</p>
57
<p>Всё вроде бы так, но есть нюанс: знание основных алгоритмов и структур данных позволяет направить мышление в нужную сторону. Эти принципы универсальны, и их понимание помогает решать прикладные задачи.</p>
57
<p>Всё вроде бы так, но есть нюанс: знание основных алгоритмов и структур данных позволяет направить мышление в нужную сторону. Эти принципы универсальны, и их понимание помогает решать прикладные задачи.</p>
58
<p>Знание операционных систем и сетевых протоколов не нужно лишь до тех пор, пока уютная виртуалка в облаке не начинает вести себя странно, а балансер - выдавать кривой кэш. При дебаге сложных проблем фундаментальные знания сложно переоценить - они нужны хотя бы для того, чтобы понять, куда копать.</p>
58
<p>Знание операционных систем и сетевых протоколов не нужно лишь до тех пор, пока уютная виртуалка в облаке не начинает вести себя странно, а балансер - выдавать кривой кэш. При дебаге сложных проблем фундаментальные знания сложно переоценить - они нужны хотя бы для того, чтобы понять, куда копать.</p>
59
<p>А есть ещё уровень платформ: если вы хотите писать мап-редьюс для "Яндекса" (YT), добро пожаловать в мир алгоритмов и на курс Бабенко. Тут не получится вызвать из библиотеки "функцию, которая магическим образом сама всё сделает", потому что твоя задача как раз в том, чтобы эту функцию сделать.</p>
59
<p>А есть ещё уровень платформ: если вы хотите писать мап-редьюс для "Яндекса" (YT), добро пожаловать в мир алгоритмов и на курс Бабенко. Тут не получится вызвать из библиотеки "функцию, которая магическим образом сама всё сделает", потому что твоя задача как раз в том, чтобы эту функцию сделать.</p>
60
<p>Точно так же важно понимать, что практические навыки и теория - вещи параллельные. Не нужно защищать диссертацию, прежде чем начать писать на React ?</p>
60
<p>Точно так же важно понимать, что практические навыки и теория - вещи параллельные. Не нужно защищать диссертацию, прежде чем начать писать на React ?</p>
61
<p>Если говорить о матчасти, я бы рекомендовал посмотреть гарвардский курс CS50 (есть и на русском):</p>
61
<p>Если говорить о матчасти, я бы рекомендовал посмотреть гарвардский курс CS50 (есть и на русском):</p>
62
<p>Можно также почитать "<a>Код: тайный язык информатики</a>" Петцольда, даже если вы уже работаете по своей основной специальности - во фронтенде или бэкенде.</p>
62
<p>Можно также почитать "<a>Код: тайный язык информатики</a>" Петцольда, даже если вы уже работаете по своей основной специальности - во фронтенде или бэкенде.</p>
63
<p><strong>Software Engineer</strong></p>
63
<p><strong>Software Engineer</strong></p>
64
<p>Разрабатывает системы управления городской инфраструктурой для мегаполисов по всему миру. Основная деятельность - бэкенд, database engineering.</p>
64
<p>Разрабатывает системы управления городской инфраструктурой для мегаполисов по всему миру. Основная деятельность - бэкенд, database engineering.</p>
65
<p><b><a><strong>twitter</strong></a></b></p>
65
<p><b><a><strong>twitter</strong></a></b></p>
66
<p>Вопрос очень сложный и холиварный. Думаю, даже новичкам стоит знать Computer Science хотя бы на уровне теории алгоритмов, разбираться в сетях. Более глубокие знания им точно не понадобятся, зато опытному разработчику они помогут пробить собственный потолок.</p>
66
<p>Вопрос очень сложный и холиварный. Думаю, даже новичкам стоит знать Computer Science хотя бы на уровне теории алгоритмов, разбираться в сетях. Более глубокие знания им точно не понадобятся, зато опытному разработчику они помогут пробить собственный потолок.</p>
67
<p>Тут можно провести такую аналогию. Нужно ли молодому скрипачу тратить годы на изучение тонкостей производства скрипок, чтобы хорошо играть? По-моему, нет: лучше все эти годы практиковаться в игре. А вот виртуозу с десятилетним опытом такие знания могли бы подкинуть интересные инсайты.</p>
67
<p>Тут можно провести такую аналогию. Нужно ли молодому скрипачу тратить годы на изучение тонкостей производства скрипок, чтобы хорошо играть? По-моему, нет: лучше все эти годы практиковаться в игре. А вот виртуозу с десятилетним опытом такие знания могли бы подкинуть интересные инсайты.</p>
68
<p>Не рискну сгоряча раздавать советы по книгам. Дам лишь базовый обзорный плейлист, который мне самому очень понравился, - Computer Science Crash Course на английском:</p>
68
<p>Не рискну сгоряча раздавать советы по книгам. Дам лишь базовый обзорный плейлист, который мне самому очень понравился, - Computer Science Crash Course на английском:</p>
69
<h2><strong>Лучше меньше, да лучше</strong></h2>
69
<h2><strong>Лучше меньше, да лучше</strong></h2>
70
<p><strong>автор сайтов и веб-приложений на Ruby on Rails с 2012 года</strong></p>
70
<p><strong>автор сайтов и веб-приложений на Ruby on Rails с 2012 года</strong></p>
71
<p>Учит людей, пишет об индустрии, ведёт open-source-проекты.</p>
71
<p>Учит людей, пишет об индустрии, ведёт open-source-проекты.</p>
72
<p><a><strong>Личный сайт</strong></a></p>
72
<p><a><strong>Личный сайт</strong></a></p>
73
<p>Необязательно изучать ВЕСЬ Computer Science - читать от корки до корки SICP и паттерны "банды четырёх". Не обязателен и вуз - у меня самого за спиной пять лет на факультете CS, но в реальности мне пригодилась от силы треть всех усвоенных там знаний.</p>
73
<p>Необязательно изучать ВЕСЬ Computer Science - читать от корки до корки SICP и паттерны "банды четырёх". Не обязателен и вуз - у меня самого за спиной пять лет на факультете CS, но в реальности мне пригодилась от силы треть всех усвоенных там знаний.</p>
74
<p>Но база (так я называю Computer Science) важна. Первую работу, конечно, можно получить и без неё, обладая лишь практическими навыками - умением писать код по образу и подобию, совещаясь со Stack Overflow. Но дальнейший рост в мидлы, сеньоры и выше требует более глубоких знаний.</p>
74
<p>Но база (так я называю Computer Science) важна. Первую работу, конечно, можно получить и без неё, обладая лишь практическими навыками - умением писать код по образу и подобию, совещаясь со Stack Overflow. Но дальнейший рост в мидлы, сеньоры и выше требует более глубоких знаний.</p>
75
<p>Постепенно изучать внутрянку того, с чем вы имеете дело, - круто, полезно и не так уж сложно. Достаточно лишь постоянно задавать себе вопрос: "А как это работает?", получать ответы, задавать его снова, и снова, и снова.</p>
75
<p>Постепенно изучать внутрянку того, с чем вы имеете дело, - круто, полезно и не так уж сложно. Достаточно лишь постоянно задавать себе вопрос: "А как это работает?", получать ответы, задавать его снова, и снова, и снова.</p>
76
<p>Например, если вы работаете во фронтенде с API, здорово, если вы задаётесь вопросами:</p>
76
<p>Например, если вы работаете во фронтенде с API, здорово, если вы задаётесь вопросами:</p>
77
<ul><li>А что такое вообще HTTP?</li>
77
<ul><li>А что такое вообще HTTP?</li>
78
<li>Чем HTTPS отличается от HTTP?</li>
78
<li>Чем HTTPS отличается от HTTP?</li>
79
<li>Как работает GET PUT POST?</li>
79
<li>Как работает GET PUT POST?</li>
80
<li>Что означают коды 20x, 30x, 40x, 50x?</li>
80
<li>Что означают коды 20x, 30x, 40x, 50x?</li>
81
<li>Почему иногда я вижу в ответе Nginx? Что это и для чего?</li>
81
<li>Почему иногда я вижу в ответе Nginx? Что это и для чего?</li>
82
</ul><p>Начнёте задавать себе эти вопросы раньше, ещё до получения первой работы, и освоите так хотя бы щепотку базы - получите громадное преимущество на собеседованиях. Да и потом, естественно, останавливаться на достигнутом не стоит.</p>
82
</ul><p>Начнёте задавать себе эти вопросы раньше, ещё до получения первой работы, и освоите так хотя бы щепотку базы - получите громадное преимущество на собеседованиях. Да и потом, естественно, останавливаться на достигнутом не стоит.</p>
83
<p><strong>Тимлид</strong></p>
83
<p><strong>Тимлид</strong></p>
84
<p>Руководит фронтендом в "Яндекс.Маршрутизации". Участвовал в проектах про медицину и гонки беспилотных автомобилей. В Twitter известен под ником<a>@basvasilich</a>. Интересы: теннис, космос и "Формула-1".</p>
84
<p>Руководит фронтендом в "Яндекс.Маршрутизации". Участвовал в проектах про медицину и гонки беспилотных автомобилей. В Twitter известен под ником<a>@basvasilich</a>. Интересы: теннис, космос и "Формула-1".</p>
85
<p>Любое знание лучше незнания. Я считаю, что человеку, который пишет код, полезно знать CS настолько глубоко, насколько хватит мотивации. Теоретический минимум по структурам данных:</p>
85
<p>Любое знание лучше незнания. Я считаю, что человеку, который пишет код, полезно знать CS настолько глубоко, насколько хватит мотивации. Теоретический минимум по структурам данных:</p>
86
<ul><li>хеш-таблицы (hash table);</li>
86
<ul><li>хеш-таблицы (hash table);</li>
87
<li>стек (stack);</li>
87
<li>стек (stack);</li>
88
<li>очередь (queue);</li>
88
<li>очередь (queue);</li>
89
<li>бинарные деревья (binary trees);</li>
89
<li>бинарные деревья (binary trees);</li>
90
<li>кучи (heap);</li>
90
<li>кучи (heap);</li>
91
<li>графы (graph).</li>
91
<li>графы (graph).</li>
92
</ul><p>По алгоритмам:</p>
92
</ul><p>По алгоритмам:</p>
93
<ul><li>бинарный поиск (binary search);</li>
93
<ul><li>бинарный поиск (binary search);</li>
94
<li>работа с массивами с помощью указателей (two pointers technique);</li>
94
<li>работа с массивами с помощью указателей (two pointers technique);</li>
95
<li>сортировки (quick, merge, counting, heap sort);</li>
95
<li>сортировки (quick, merge, counting, heap sort);</li>
96
<li>обходы деревьев и графов (BFS/DFS);</li>
96
<li>обходы деревьев и графов (BFS/DFS);</li>
97
<li>асимптотический анализ алгоритмов (asymptotic analysis);</li>
97
<li>асимптотический анализ алгоритмов (asymptotic analysis);</li>
98
</ul><p>Зачем это надо? Если кратко - чтобы не терять возможности уже в начале пути.</p>
98
</ul><p>Зачем это надо? Если кратко - чтобы не терять возможности уже в начале пути.</p>
99
<p>Не знать и тем более воинственно отрицать CS - значит закрыть себе доступ к интересным и сложным областям разработки, оставаясь в мире рутинных и скучных задач вроде рисования кнопок или создания очередного CRUDа. А в итоге разочароваться в профессии.</p>
99
<p>Не знать и тем более воинственно отрицать CS - значит закрыть себе доступ к интересным и сложным областям разработки, оставаясь в мире рутинных и скучных задач вроде рисования кнопок или создания очередного CRUDа. А в итоге разочароваться в профессии.</p>
100
<p>Изучать Computer Science, конечно, нужно, однако, как и в любом другом деле, всё зависит от цели. Важно:</p>
100
<p>Изучать Computer Science, конечно, нужно, однако, как и в любом другом деле, всё зависит от цели. Важно:</p>
101
<ul><li>определились ли вы с направлением, в котором хотите развиваться и работать;</li>
101
<ul><li>определились ли вы с направлением, в котором хотите развиваться и работать;</li>
102
<li>что вам больше нравится: фронтенд, бэкенд, геймдев, мобайл или что-то более узкое и специфическое (нейросети, высоконагруженные системы, компьютерная безопасность).</li>
102
<li>что вам больше нравится: фронтенд, бэкенд, геймдев, мобайл или что-то более узкое и специфическое (нейросети, высоконагруженные системы, компьютерная безопасность).</li>
103
</ul><p>Если вы пока не знаете, чего хотите, придётся изучать и пробовать всё понемногу, чтобы найти то, что вам ближе. Если уже определились, круг необходимых знаний сужается. Даже если потом решите сменить направление, приобретённые навыки лишними не будут.</p>
103
</ul><p>Если вы пока не знаете, чего хотите, придётся изучать и пробовать всё понемногу, чтобы найти то, что вам ближе. Если уже определились, круг необходимых знаний сужается. Даже если потом решите сменить направление, приобретённые навыки лишними не будут.</p>
104
<p>Для каждого направления необходимо знание своего набора языков программирования, инструментов и теоретических основ, однако есть и общие вещи.</p>
104
<p>Для каждого направления необходимо знание своего набора языков программирования, инструментов и теоретических основ, однако есть и общие вещи.</p>
105
<p>Например, если вас интересует фронтенд, углубляться в низкоуровневые темы необязательно. Куда важнее разбираться в UI/UX и дизайне, знать JavaScript, CSS, соответствующие фреймворки.</p>
105
<p>Например, если вас интересует фронтенд, углубляться в низкоуровневые темы необязательно. Куда важнее разбираться в UI/UX и дизайне, знать JavaScript, CSS, соответствующие фреймворки.</p>
106
<p>Напротив, если вы хотите заниматься компьютерной безопасностью или писать многопоточные высокопроизводительные программы, то устройство процессора и ОС нужно знать хорошо.</p>
106
<p>Напротив, если вы хотите заниматься компьютерной безопасностью или писать многопоточные высокопроизводительные программы, то устройство процессора и ОС нужно знать хорошо.</p>
107
<p>В разработке игр свой набор необходимого (игровые движки, тригонометрия, векторы и матрицы, шейдеры и тому подобное). При разработке бэкенда интернет-сервисов потребуется понимание баз данных, сетей и множества прочих специфических вещей.</p>
107
<p>В разработке игр свой набор необходимого (игровые движки, тригонометрия, векторы и матрицы, шейдеры и тому подобное). При разработке бэкенда интернет-сервисов потребуется понимание баз данных, сетей и множества прочих специфических вещей.</p>
108
<p>Какое бы направление вы ни выбрали, очень полезно понимать основные структуры данных и алгоритмы, а со временем и освоить паттерны проектирования. При изучении языков программирования стоит потратить время на основные библиотеки и фреймворки для этих языков, чтобы не изобретать велосипед (например, для C++ это STL, Boost и Qt). Также облегчает работу хорошее владение инструментами: средами разработки и отладчиками, пакетными менеджерами, системами контроля версий и так далее.</p>
108
<p>Какое бы направление вы ни выбрали, очень полезно понимать основные структуры данных и алгоритмы, а со временем и освоить паттерны проектирования. При изучении языков программирования стоит потратить время на основные библиотеки и фреймворки для этих языков, чтобы не изобретать велосипед (например, для C++ это STL, Boost и Qt). Также облегчает работу хорошее владение инструментами: средами разработки и отладчиками, пакетными менеджерами, системами контроля версий и так далее.</p>
109
<p>Важно понимать английский язык (хотя бы на уровне чтения технической литературы) - без этого очень сложно. Кроме того, любому программисту нужно знать устройство компьютера и операционных систем на базовом уровне. Понимание необходимости всего остального придёт со временем и опытом, не стоит пытаться объять необъятное. IT - довольно динамичная сфера, поэтому, если вы решили войти в IT, будьте готовы постоянно учиться и практиковаться, а для этого нужен неподдельный интерес к индустрии :)</p>
109
<p>Важно понимать английский язык (хотя бы на уровне чтения технической литературы) - без этого очень сложно. Кроме того, любому программисту нужно знать устройство компьютера и операционных систем на базовом уровне. Понимание необходимости всего остального придёт со временем и опытом, не стоит пытаться объять необъятное. IT - довольно динамичная сфера, поэтому, если вы решили войти в IT, будьте готовы постоянно учиться и практиковаться, а для этого нужен неподдельный интерес к индустрии :)</p>
110
<p>Помните, что теория, не подкреплённая практикой, бессмысленна и быстро забывается, поэтому важно писать много кода. Придумайте себе интересный проект и создайте его самостоятельно. Постепенно дополняйте новыми функциями, совершенствуйте код и архитектуру - это будет для вас хорошей школой.</p>
110
<p>Помните, что теория, не подкреплённая практикой, бессмысленна и быстро забывается, поэтому важно писать много кода. Придумайте себе интересный проект и создайте его самостоятельно. Постепенно дополняйте новыми функциями, совершенствуйте код и архитектуру - это будет для вас хорошей школой.</p>
111
<p>Сейчас есть много сообществ (чаты в Telegram, Stack Overflow, форумы), в которых можно найти единомышленников. Там вам помогут разобраться с трудностями и подскажут, где искать ответы. Не стесняйтесь задавать вопросы, даже если они кажутся вам глупыми.</p>
111
<p>Сейчас есть много сообществ (чаты в Telegram, Stack Overflow, форумы), в которых можно найти единомышленников. Там вам помогут разобраться с трудностями и подскажут, где искать ответы. Не стесняйтесь задавать вопросы, даже если они кажутся вам глупыми.</p>
112
<p>Всем новичкам желаю энтузиазма и успехов! ;)</p>
112
<p>Всем новичкам желаю энтузиазма и успехов! ;)</p>
113
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
113
<a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>