logo
Ещё

Какие дисциплины должен знать программист

Если вы только начали заходить в волшебный мир IT и учите какой-либо язык, то у нас для вас есть плохие новости. Первая: сам по себе язык никому не нужен, работодатели требуют знания фреймворков – Django для Python, Spring для Java и так далее. Вторая: программист должен иметь солидный багаж знаний, относящийся к программированию как непосредственно, так и косвенно. О второй проблеме мы и будем говорить ниже – вы узнаете, зачем программисту английский, статистика, логика, общая математика, профильные науки и другие разделы. По каждому мы дадим краткое описание.


Какие дисциплины нужно знать программисту

Для начала – краткая сводная таблица, ниже вы найдете детальный разбор.

Дисциплина

Зачем нужна

Насколько критична

Английский

Общаться с заказчиками и коллегами, читать документацию

10/10

Теория графов

Для решения конкретных задач на графы

2/10 (8/10 для искусственного интеллекта)

Общая математика

Для решения простых задач; база для высшей математики

6/10

Теория вероятностей

Для решения конкретных задач

2/10

Логика

Для понимания сложных логических условий

6/10

Статистика

Для работы в big data и работы с искусственным интеллектом

2/10 (8/10 для искусственного интеллекта и big data)

Базы данных

БД есть на любом проекте

10/10

Паттерны проектирования

Любой более-менее сложный проект строится на паттернах

9/10

Информатика

Чтобы понимать эффективность алгоритмов

7/10

Программирование

Чтобы писать хороший код

8/10

Профильные науки

Чтобы работать в профильных областях

Зависит от области

Английский язык

Английский язык в IT не нужен только тем, кто работает с 1С – у них и заказчики из стран СНГ, и вся документация изначально писалась на русском. Если вы не входите (или не планируете входить) в число этих программистов – вам нужен английский. Английский разделен на уровни:

  • А1. Человек может обмениваться личной информацией, воспринимать на слух/читать/писать короткие фразы.
  • А2. Человек умеет общаться на повседневные темы, более-менее понимает речь на слух, может поддерживать простую переписку или разговор.
  • В1. Человек может поддерживать нормальный разговор, знает хотя бы парочку идиом, может писать структурированный текст, делать какие-то выводы из прочитанного/услышанного.
  • В2. Человек может поддерживать разговор на большинство тем (кроме узкоспецифичных), грамотно пишет, воспринимает и читает тексты без заминок.
  • С1. К B2 добавляются узкие темы, слэнг.
  • С2. Полное владение английским (местами – лучше англичан), отсутствие акцента.

Минимальный уровень для захода в IT – А2, нередко требуют В1. Для высоких позиций – от В2. Английский нужен по двум основные причинам:

  1. Большинство айтишных компаний работает на иностранных заказчиков, с которыми вам придется общаться.
  2. Вам нужно будет читать мануалы и статьи технической тематики.

Выучить английский – труднее всего, потому что это нужно делать постоянно на протяжении многих лет. Берите себе в привычку учить английский по 30-60 минут в день ежедневно.

Где учить:

Практиковать свое общение лучше всего в соцсетях: reddit, twitter, facebook.

Теория графов

Теория графов – это прикладной раздел математики, то есть эта теория решает конкретные проблемы. Вообще, теорию графов проще описать на практике. Например, вы собираетесь в отпуск в другую страну, и вам нужно проложить маршрут. У вас есть варианты: самолеты, автобусы, поезда. Есть прямой перелет из вашего города в город назначения, но билет стоит грабительски дорого, поэтому вы начинаете искать маршруты с пересадками в разных городах. Вам нужно еще и продумать обратный маршрут, поэтому вы рассматриваете перемещение в обе стороны. Фактически, вы решаете задачу на графы: в последних есть узлы (города), есть ребра (маршруты между городами) и есть задача нахождения оптимального пути между двумя узлами.

Пример из сферы IT: построение сети маршрутизаторами. Есть ваш компьютер, есть маршрутизаторы, есть провода. По одним проводам данные передаются быстрее, по другим – медленнее; одни маршрутизаторы передают информацию в одну сторону, другие – в обе. Теория графов описывает, как найти оптимальный путь от первого компьютера ко второму (в итоге это описание вылилось в протоколы маршрутизации, но это уже выходит за рамки нашей статьи).

Теория графов будет очень полезна, но приоритет у нее не самый высокий – учите в свободное время.

Что почитать:

Общая математика 

Компьютер – это вычислительная техника. Процессор компьютера, по существу, выполняет только операции сложения, из которых хитрыми методами получают и вычитание, и умножение, и другие математические операции. Соответственно нет ничего странного в том, что программистам математика нужна, как минимум – базовый школьный курс.

В некоторых областях (геймдев, big data, искусственный интеллект, медицина и т.д.) критически нужна высшая математика.

Курсы по математике:

Теория вероятностей

Название дисциплины говорит само за себя, теория вероятностей – это раздел математики, который анализирует шансы, с которыми то или иное событие случится. Отметим, что теория вероятностей – это один из разделов математического анализа, а математический анализ – это высшая математика, а для того, чтобы понимать высшую математику, нужно сначала выучить математику обычную – смотрите предыдущий подраздел.

Бесплатный курс по теории вероятности от Томского государственного университета:

Логика

Логика – довольно странная штука: все знают, что это такое, но никто не может описать ее четкими терминами. Проблема здесь в том, что для описания формальной («житейской») логики пришлось вводить длинные и непонятные слова – силлогизмы, таблицы истинности и вот это вот все. К счастью, программистам больше нужна другая логика – булева логика (=булева алгебра), полностью построенная на простых логических операндах вроде «И», «ИЛИ», «НЕ», «ИСКЛЮЧАЮЩЕЕ ИЛИ» и так далее. Если не собираетесь самостоятельно программировать микропроцессоры и операционные системы – можете просто с ней ознакомиться и отправить в долгий ящик.

Где ознакомиться:

Статистика

Еще одна дисциплина из области математики. Статистика – это наука как о сборе, так и об анализе каких-либо показателей. Разделяется на 2 больших подраздела: как (и какую) информацию искать и как ее, собственно, анализировать. Статистика неразрывно связана с высшей математикой. Статистика критически необходима тем, кто будет работать в big data и в machine learning, поскольку и там, и там нужно обрабатывать большие объемы информации. Если вы не собираетесь работать в этих направлениях – можете просто поверхностно ознакомиться с общими основами.

Бесплатный курс по статистике:

Базы данных

Базы данных – маст хэв для любого айтишника. Любое крупное приложение так или иначе накапливает какие-то данные, будь то данные клиентов, учет товаров на складе, список рефералов и так далее. Все эти данные нужно хранить, добавлять новые и выдавать по запросу. Здесь начинается куча проблем: непонятно, в каком формате и в какой структуре данных хранить; кто может получать доступ; как быстро выдать 2 миллиона записей, специальный образом выбранных из базы и так далее. Первоначально решением проблемы стал SQL – специальный язык запросов, на основе которых строились базы данных. Он был быстрым и структурированным, даже сейчас он незаменим при работе с большими объемами информации. Со временем компьютеры стали быстрее, а SQL стал сложнее, поэтому в противовес ему появились NoSQL – базы, в которых структурированный язык запросов не использовался. NoSQL хорошо подходит для небольших баз, обычно данные пакуются в формат JSON. И если вы ничего из этого не поняли – срочно учить, без знаний БД вы не найдете себе работу.

Что учить:

Паттерны проектирования

Если вы столкнулись с какой-либо проблемах – в 99.9% случаев кто-то до вас с ней уже сталкивался и успешно ее решал. 30 лет назад несколько программистов взяли эту мысль, скрестили ее с шаблонами реального проектирования домов и получили паттерны разработки – набор решений для конкретных задач. Паттернов разработки – очень много, но знать их все не обязательно – можете выучить парочку основных и остановиться на этом. Но знать паттерны нужно – спрашивают на любом собеседовании.

Что поучить:

Информатика

Информатика – это не самый понятный термин. Можно предположить, что он проистекает он слова «информация», но формализировать информацию – тоже трудная и грустная задача. Лучше смотреть на первоисточник и использовать словосочетание «computer science». Computer science – наука о подходах к решению задач вычисления. Как вы можете помнить, процессор умеет складывать/вычитать/умножать/делить и производить другие базовые действия, но ни на что более серьезное он не способен. Задача инженера по computer science – придумать алгоритмы, которые утилизируют доступные операции для решения конкретной задачи.

Алгоритм – это последовательность действий, дающая какой-то результат. Изучение типовых алгоритмов и создание новых – основная задача информатики. Вы можете услышать мнение о том, что программисты просто копируют уже написанный кем-то код и изучение алгоритмов избыточно, но это не так. Алгоритмы нужно знать для того, чтобы знать их сложность. Сортировка пузырьком 1 000 значений займет 1 000 000 операций, quicksort займет 10 000 операций, то есть будет работать в 100 раз быстрее. Естественно это будет заметно, если у вас база на 2 000 000 записей, которую нужно сортировать раз в секунду.

Что поучить:

Профильные науки

Здесь все просто – если вы хотите работать в сфере медицины, вам нужно разбираться в медицине; если вы хотите работать с экономике, вам нужно понимать экономику и так далее. Ищите профильные курсы.

Программирование 

Есть одна мысль, которую новички в программировании часто игнорируют: «Другие люди будут читать ваш код намного чаще, чем вы». Если стоит выбор между гениальным алгоритмом и понятным алгоритмом – зачастую нужно сделать выбор в сторону понятности, потому что после вас кто-то будет сопровождать ваш код, и если он не сможет понять, как этот код работает – он, вполне вероятно, просто его перепишет, и ваш гениальный алгоритм канет в Лету. Чтобы этого не произошло, вам нужно придерживаться рекомендаций языка, code policy вашей компании, давать переменным понятные имена, писать комментарии и так далее. Это и есть искусство программирования, и за это вас будут ценить на работе.

Что поучить:

Подведем итоги

Тезисно:

  • Программирование – это далеко не только умение писать на каком-то языке программирования. 
  • Сопряженных знаний – много, но обычно выделяют английский, математику, логику, базы данных, паттерны проектирования, алгоритмизацию/программирование и профильные науки.
  • Английский, базовая математика, базы данных, программирование и паттерны проектирования – маст хэв. Остальное – по желанию и необходимости.
Часто ищут