Видео может быть заблокировано из-за расширений браузера. В статье вы найдете решение этой проблемы.

Мир вокруг нас непрерывно меняется, и точно так же каждый день меняются IT-технологии, причем иногда настолько сильно, что освоенное сегодня через год уже может быть не нужно. Но если посмотреть глубже, то можно увидеть, что базовые, фундаментальные знания, которые используются в большинстве современных технологий, появились очень давно и практически не изменились. В этом уроке мы поговорим о том, какие области фундаментальных знаний нужно прокачивать, чтобы стать хорошим программистом, а в конце перечислим и некоторые инструменты, знание которых необходимо каждому профессиональному разработчику.

Устаревание технологий

Важно помнить, что фундамент не устаревает, а остальное быстро добирается в процессе. Любой новый фреймворк, подход в разработке, какая-либо новая методология или язык программирования учатся достаточно быстро, если вы в принципе владеете базой. Но кроме каких-то точных наук, кроме того, чтобы заниматься непосредственно программированием, нужно поработать над своим мозгом. И этот процесс включает в себя несколько направлений.

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

Логическое мышление: развитие

Математика

Первый способ развития логического мышления — это математика. Просто изучение математики в любом её представлении, в любом направлении отлично развивает способность правильно мыслить. Те, кто раньше начинают заниматься математикой, имеют преимущество перед остальными. Можно изучать её и спустя 20 лет после после окончания института, пусть это действительно может быть сложнее, потому что становится трудно найти время усвоить тот объём знаний, который даётся в учебном заведении. Но в целом это возможно, и на базовом уровне все необходимые разделы математики, полезные для развития мозга, доступны для изучения в виде бесплатных курсов на огромном количестве ресурсов, в том числе на русском языке. Можно легко найти информацию, что непосредственно стоит учить, какие книги читать — и это нужно делать, независимо от изучения программирования.

Логические задачи

Второй способ развития логического мышления — это решение логических задач. Есть отличный сайт с огромным количеством задач разного уровня: www.braingames.ru. На нём сидит много людей, есть рейтинги, и это — отличный способ поломать мозг. При этом, нужно понимать, что есть люди, которые очень круты в решении логических задачах, но при этом у них не очень получается быть программистами, поэтому развитие должно быть многостороннее.

Алгоритмы

Третий способ — это изучение алгоритмов. Речь именно о тех алгоритмах, которые рекомендуется изучать при обучении программированию или чтобы войти в эту профессию. Они бывают разные, некоторые очень сложные, и бывает так, что без очень сильной математики не разобраться, но в целом на базовом уровне в различных направлениях алгоритмы достаточно простые. Знание и понимание принципов работы алгоритмов действительно очень сильно помогает.

Абстрактное мышление

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

Абстрактное мышление обладает следующими признаками:

  • способность понять окружающий мир без воздействия на органы чувств

    Просто опираясь на предыдущие знания, можно получать новую информацию и делать выводы о каких-то новых процессах, которые не видны и не осязаемы. Именно так решаются задачи по математике, физике, химии в школе и институте.

  • обобщение для выявления закономерностей

    Обобщение, фактически являющееся сутью программирования, когда мы говорим про создание каких-то больших программных комплексов — это возможность абстрагироваться, создавать максимально изолированные системы и строить правильные интерфейсы между их частями для обеспечения взаимодействия между ними. Существует понятие "барьеры абстракции" — когда слой за слоем строятся уровни абстракции, и на каждом более высоком уровне не видно деталей нижнего уровня — это важнейший принцип, который позволяет удерживать в голове систему и работать с ней. Человек может удерживать в голове 7 плюс-минус 2 вещи, поэтому оперирование большим количеством понятий одновременно — это взрыв мозга.

Абстрактное мышление: развитие

Абстрактное мышление развивается примерно так же, как и логическое, и часто они взаимосвязаны, но есть и небольшие отличия.

Точные науки

Точные науки — это не только математика, но и физика, химия и даже некоторые разделы биологии.

Логические и интеллектуальные игры

Сюда входит тот же самый braingames, при этом для развития абстрактного мышления очень здорово подходит и игра в шахматы, шашки или даже в преферанс.

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

Ну и само программирование способствует развитию абстрактного мышления. Однако нужно не забывать про другие способы и использовать их в комплексе.

Качаем знания

Теперь разберёмся в том, какими знаниями нужно обладать разработчку. Сейчас будет много хардкорных вещей — совсем не обязательно знать их заранее, до начала карьеры. То, что здесь будет описано — это тот фундамент, который либо приобретается в университете, если с ним повезло и уже учась там, человек понимал, что будет программистом и пытался по максимуму выхватывать эти знания. Во всех остальных случаях нужно добирать в процессе в той или иной мере. Знать всё идеально невозможно, но чем больше направлений из перечисленных ниже будет освоено — тем более профессиональным разработчиком можно стать и тем более сложные задачи решать.

Фундамент: математическая подготовка

Теория множеств

Особенно важная дисциплина в работе с базами данных. SQL построен на реляционной алгебре, и в базах активно используются понятия теории множеств. Таблицы, выборки — всё это берёт начало в теории множеств.

Логика

Логика — это то, с чем сталкивается каждый программист каждый день в своей работе. Логика является важнейшей основой программирования — свой путь в профессии нужно начинать с её изучения.

Дискретная математика

Дискретная математика включает в всебя достаточно много разделов: начиная от графов и заканчивая автоматами. Большинство разделов дискретной математики так или иначе воплощено в информатике.

Лямбда-исчисление

И последнее — это лямбда-исчисление, которое отлично помогает в развитии абстрактного мышления. На лямбда-исчислении базируются многие вещи в современной информатике. В большинстве языков в неявном виде присутствует реализация лямбда-исчисления, которая активно используется на практике. Может для кого-то это будет сюрпризом, но тот же самый JavaScript во многом является реализацией лямбда-исчисления.

Фундамент: информатика

Ближайшая к компьютерам область знаний — это информатика. И нас интересуют следующие ниже разделы информатики.

Системы счисления

Самое базовое понятие — системы счисления — это системы записи чисел с помощью определенного набора цифр. Почему они так важны? В основе программ и компьютеров лежит двоичная система счисления, но в повседневной жизни мы используем десятеричную систему счисления. Обязательно нужно знать и понимать, как устроены системы счисления и уметь переводить числа из одной системы счисления в другую.

Структуры данных

Структуры данных в информатике — это способ представления информации, с помощью которого её отдельно взятые элементы образуют нечто единое. В языках программирования реализовано несколько распространенных структур данных, таких как массивы, числа, строки, файлы. Но и кроме них существует множество абстрактных структур данных, которые могут создаваться самими разработчиками с использованием средств языка.

Алгоритмы

Наряду с системами счисления и структурами данных алгоритмы — основа основ информатики. Для того, чтобы быть экспертом в алгоритмах, нужно не только вдоль и поперёк изучить сами алгоритмы, но и очень хорошо знать математику — а на это уйдёт приличное количество времени. Хорошая новость — для начала этого и не требуется. Главное — понимать базовые алгоритмы на базовых структурах данных и вообще просто иметь понятие о том, что они из себя представляют и как работают. Какие-то конкретные алгоритмы приходят уже в процессе работы или обучения. Не бывает такого, что программист заранее знает все возможные алгоритмы и может запросто выдать нужный алгоритм, подходящий для конкретной ситуации.

Фундамент: парадигмы

Теперь поговорим о языках программирования и о том, какие подходы к программированию в них реализованы. Такие подходы называются парадигмами программирования. Парадигма программирования влияет на всё, что происходит в вашем коде: то, как строится программа, на каких принципах она работает. Изучение парадигм помогает стать намного более сильным разработчиком, чем изучение конкретных особенностей конкретного языка или просто переход из одного языка в другой язык той же парадигмы.

Существует множество различных парадигм, но на самом верхнем уровне — 3 базовых: императивная, функциональная, логическая.

Императивное программирование

Императивное программирование описывает, как решить задачу и представить результат, используя инструкции (команды). Большинство мейнстримовых языков являются императивными языками программирования: это Java, это C#, это все скриптовые языки, Ruby, PHP, Python и многие другие.

Функциональное (декларативное) программирование

Есть очень мощная парадигма, которая является противоположностью императивного программирования — это функциональное (или декларативное) программирование. Эта парадигма описывает, что представляет собой задача и ожидаемый результат её решения. В неё входят такие языки как Clojure, Erlang, Haskell, Scala и многие другие.

Логическое программирование

Язык логического программирования, с которым многие сталкивались в институте, называется Prolog — тоже очень хороший пример того, как можно по-другому смотреть на вещи.

Фундамент: железо

Архитектура компьютера

Если говорить про железо, то здесь важно понимание архитектуры компьютера, хотя, опять же, всё очень сильно зависит от области разработки. Большинству прикладных программистов, которые работают в веб-сфере, разработке десктопных, мобильных приложений нужен просто общий обзор, понимание того, что такое регистры, как работает процесс взаимодействия с оперативной памятью. Всё перечисленное можно почерпнуть из одной-единственной книги, которая называется "Код: тайный язык информатики" Чарльза Петцольда. Эта книга рекомендуется к прочтению — она читается как захватывающий роман, и действительно даст хорошее понимание того, как устроен компьютер и даже как работает Assembler.

Фундамент: софт

Перейдем уже непосредственно к тому, как устроен современный софт. Вот что вам нужно знать.

Операционные системы

Нужно очень хорошо понимать принципы работы операционных систем и какую роль они выполняют, поскольку при работе с любым языком программирования всё взаимодействие всегда происходит в рамках одной или нескольких операционных систем. У многих программистов, особенно после университета, складывается такое ощущение и мнение, что знание операционных систем важно только для системных программистов, которые пишут софт, связанный прямо с операционной системой и работающий в рамках неё. Это не так. Огромное количество вопросов, которые задают новички, чаще всего связаны с частными случаями каких-то базовых вещей, находящихся внутри операционной системы. Изучение и понимание какой-нибудь одной базовой вещи может занять всего лишь день, но в дальнейшем способно дать огромную фору перед другими, поскольку позволит понимать целый пласт проблем, с которыми в конечном итоге сталкивается разработчик. Такие проблемы каждый раз могут немного отличаться друг от друга, но быть основаны на одной и той же особенности операционной системы. Те, кто не усвоил эту особенность, не видят связи и обречены постоянно тратить время на поиск решения. Поэтому знание операционных систем — важное условие профессионализма разработчика. Существует множество книг, посвященных операционным системам, которые дают понимание их базовых принципов, не копая глубоко.

Сети и протоколы

В век интернета в своей работе разработчик часто сталкивается с сетями и различными протоколами. Нужно иметь представление об основных протоколах, зачем они нужны, и как работают.

Базы данных

Нельзя забывать и про базы данных, поскольку работать придётся с огромными объемами информации, которые организуются, хранятся и которыми оперируют именно базы данных.

Компиляторы и интерпретаторы

Помимо понимания отличия компиляторов от интерпретаторов, здесь необходимо знать, как исполняется код, как можно взаимодействовать с ним, как идёт отработка ошибок. Плюс сюда входят ещё такие вещи как потоки и многое-многое другое.

Разное

Есть ещё множество разных инструментов и навыков, на которые нужно обратить внимание. Вот лишь самые распространенные.

Владение командной строкой

Важно владеть командной строкой и работать с ней быстро и эффективно, знать как и какие команды в ней можно вызывать.

Системы контроля версий

Любой современный разработчик должен знать, что такое системы контроля версий и как управлять кодом — от этого никуда не деться. Стандартом считается Git, и без этого инструмента, в принципе, нельзя вести разработку.

Автоматизированное тестирование

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

Управление конфигурацией

Существует несколько систем управления конфигурацией, таких как Ansible. Они используются для автоматизации настройки и развертывания программного обеспечения и позволяют сэкономить кучу времени для более насущных задач.

Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Node, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →