Мир вокруг нас непрерывно меняется, и точно так же каждый день меняются технологии, причем иногда настолько сильно, что освоенное сегодня через год уже может быть не нужно. Но если посмотреть глубже, то можно увидеть, что базовые, фундаментальные знания, которые используются в большинстве современных технологий, появились очень давно и практически не изменились. В этом уроке мы поговорим о том, какие области фундаментальных знаний нужно прокачивать, чтобы стать хорошим программистом, а в конце перечислим и некоторые инструменты, знание которых необходимо каждому профессиональному разработчику.
Устаревание технологий
Важно помнить, что фундамент не устаревает, а остальное быстро добирается в процессе. Любой новый фреймворк, подход в разработке, какая-либо новая методология или язык программирования учатся достаточно быстро, если вы в принципе владеете базой. Но кроме каких-то точных наук, кроме того, чтобы заниматься непосредственно программированием, нужно поработать над своим мозгом. И этот процесс включает в себя несколько направлений.
Логическое мышление
Первое — это логическое мышление, мыслительный процесс, при котором человек использует логические понятия и конструкции. Этому процессу свойственна доказательность, рассудительность, и его целью является получение обоснованного вывода из имеющихся предпосылок. Логическое мышление является крайне важным для любого программиста, и существует множество способов его прокачивать.
Математика
Первый способ развития логического мышления — это математика. Просто изучение математики в любом её представлении, в любом направлении отлично развивает способность правильно мыслить. Те, кто раньше начинают заниматься математикой, имеют преимущество перед остальными. Можно изучать её и спустя 20 лет после окончания института, пусть это действительно может быть сложнее, потому что становится трудно найти время усвоить тот объём знаний, который даётся в учебном заведении. Но в целом это возможно, и на базовом уровне все необходимые разделы математики, полезные для развития мозга, доступны для изучения в виде бесплатных курсов на огромном количестве ресурсов, в том числе на русском языке. Можно легко найти информацию, что непосредственно стоит учить, какие книги читать — и это нужно делать, независимо от изучения программирования.
Логические задачи
Второй способ развития логического мышления — это решение логических задач. Есть отличный сайт с огромным количеством задач разного уровня: www.braingames.ru. На нём сидит много людей, есть рейтинги, и это — отличный способ поломать мозг. При этом, нужно понимать, что есть люди, которые очень круты в решении логических задачах, но при этом у них не очень получается быть программистами, поэтому развитие должно быть многостороннее.
Алгоритмы
Третий способ — это изучение алгоритмов. Речь именно о тех алгоритмах, которые рекомендуется изучать при обучении программированию или чтобы войти в эту профессию. Они бывают разные, некоторые очень сложные, и бывает так, что без очень сильной математики не разобраться, но в целом на базовом уровне в различных направлениях алгоритмы достаточно простые. Знание и понимание принципов работы алгоритмов действительно очень сильно помогает. В рекомендуемых книгах Хекслета есть отличная книга по алгоритмам
Абстрактное мышление
Следующий важный аспект базовых знаний — это абстрактное мышление, мыслительный процесс, при котором человек умеет абстрагировать ситуацию от незначительных деталей и взглянуть на неё в целом. Абстрактное мышление включает в себя три формы: понятие, суждение, умозаключение.
Абстрактное мышление обладает следующими признаками:
-
способность понять окружающий мир без воздействия на органы чувств
Просто опираясь на предыдущие знания, можно получать новую информацию и делать выводы о каких-то новых процессах, которые не видны и не осязаемы. Именно так решаются задачи по математике, физике, химии в школе и институте.
-
обобщение для выявления закономерностей
Обобщение, фактически являющееся сутью программирования, когда мы говорим про создание каких-то больших программных комплексов — это возможность абстрагироваться, создавать максимально изолированные системы и строить правильные интерфейсы между их частями для обеспечения взаимодействия между ними. Существует понятие "барьеры абстракции" — когда слой за слоем строятся уровни абстракции, и на каждом более высоком уровне не видно деталей нижнего уровня — это важнейший принцип, который позволяет удерживать в голове систему и работать с ней. Человек может удерживать в голове 7 плюс-минус 2 вещи, поэтому оперирование большим количеством понятий одновременно — это взрыв мозга.
Абстрактное мышление развивается примерно так же, как и логическое, и часто они взаимосвязаны, но есть и небольшие отличия.
Точные науки
Точные науки — это не только математика, но и физика, химия и даже некоторые разделы биологии.
Логические и интеллектуальные игры
Сюда входит тот же самый braingames, при этом для развития абстрактного мышления очень здорово подходит и игра в шахматы, шашки или даже в преферанс.
Программирование :)
Ну и само программирование способствует развитию абстрактного мышления. Однако нужно не забывать про другие способы и использовать их в комплексе.
Качаем знания
Теперь разберёмся в том, какими знаниями нужно обладать разработчику. Сейчас будет много новых концепций — совсем не обязательно знать их заранее, до начала карьеры. То, что здесь будет описано — это тот фундамент, который либо приобретается в университете, если с ним повезло и уже учась там, человек понимал, что будет программистом и пытался по максимуму выхватывать эти знания. Во всех остальных случаях нужно добирать в процессе в той или иной мере. Знать всё идеально невозможно, но чем больше направлений из перечисленных ниже будет освоено — тем более профессиональным разработчиком можно стать и тем более сложные задачи решать.
Фундамент: математическая подготовка
Теория множеств
Особенно важная дисциплина в работе с базами данных. SQL построен на реляционной алгебре, и в базах активно используются понятия теории множеств. Таблицы, выборки — всё это берёт начало в теории множеств.
Логика
Логика — это то, с чем сталкивается каждый программист каждый день в своей работе. Логика является важнейшей основой программирования — свой путь в профессии нужно начинать с её изучения.
Дискретная математика
Дискретная математика включает в себя достаточно много разделов: начиная от графов и заканчивая автоматами. Большинство разделов дискретной математики так или иначе воплощено в информатике.
Лямбда-исчисление
И последнее — это лямбда-исчисление, которое отлично помогает в развитии абстрактного мышления. Представьте себе систему, в которой числа и операции над ними (арифметика) это функции. Благодаря лямбда-исчислению такую систему можно создать и она будет вести себя абсолютно так, как ведут себя обычные числа.
Кроме того, с понятием лямбда-функций вы столкнетесь практически во всех языках.
Фундамент: информатика
Ближайшая к компьютерам область знаний — это информатика. И нас интересуют следующие ниже разделы информатики.
Системы счисления
Самое базовое понятие — системы счисления — это системы записи чисел с помощью определенного набора цифр. Почему они так важны? В основе программ и компьютеров лежит двоичная система счисления, но в повседневной жизни мы используем десятеричную систему счисления. Обязательно нужно знать и понимать, как устроены системы счисления и уметь переводить числа из одной системы счисления в другую.
Структуры данных
Структуры данных в информатике — это способ представления информации, с помощью которого её отдельно взятые элементы образуют нечто единое. В языках программирования реализовано несколько распространенных структур данных, таких как массивы, числа, строки, файлы. Но и кроме них существует множество абстрактных структур данных, которые могут создаваться самими разработчиками с использованием средств языка.
Алгоритмы
Наряду с системами счисления и структурами данных алгоритмы — основа основ информатики. Для того, чтобы быть экспертом в алгоритмах, нужно не только вдоль и поперёк изучить сами алгоритмы, но и очень хорошо знать математику — а на это уйдёт приличное количество времени. Хорошая новость — для начала этого и не требуется. Главное — понимать базовые алгоритмы на базовых структурах данных и вообще просто иметь понятие о том, что они из себя представляют и как работают. Какие-то конкретные алгоритмы приходят уже в процессе работы или обучения. Не бывает такого, что программист заранее знает все возможные алгоритмы и может запросто выдать нужный алгоритм, подходящий для конкретной ситуации.
Фундамент: парадигмы
Теперь поговорим о языках программирования и о том, какие подходы к программированию в них реализованы. Такие подходы называются парадигмами программирования. Парадигма программирования влияет на всё, что происходит в вашем коде: то, как строится программа, на каких принципах она работает. Изучение парадигм помогает стать намного более сильным разработчиком, чем изучение конкретных особенностей конкретного языка или просто переход из одного языка в другой язык той же парадигмы.
Существует множество различных парадигм, но на самом верхнем уровне — 3 базовых: императивная, функциональная, логическая.
Императивное программирование
Императивное программирование описывает, как решить задачу и представить результат, используя инструкции (команды). Большинство мейнстримовых языков являются императивными языками программирования: это Java, это C#, это все скриптовые языки, Ruby, PHP, Python и многие другие.
Функциональное (декларативное) программирование
Есть очень мощная парадигма, которая является противоположностью императивного программирования — это функциональное (или декларативное) программирование. Эта парадигма описывает, что представляет собой задача и ожидаемый результат её решения. В неё входят такие языки как Clojure, Erlang, Haskell, Scala и многие другие.
Логическое программирование
Язык логического программирования, с которым многие сталкивались в институте, называется Prolog — тоже очень хороший пример того, как можно по-другому смотреть на вещи.
Фундамент: железо
Архитектура компьютера
Если говорить про железо, то здесь важно понимание архитектуры компьютера, хотя, опять же, всё очень сильно зависит от области разработки. Большинству прикладных программистов, которые работают в веб-сфере, разработке десктопных, мобильных приложений нужен просто общий обзор, понимание того, что такое регистры, как работает процесс взаимодействия с оперативной памятью. Всё перечисленное можно почерпнуть из одной-единственной книги, которая называется "Код: тайный язык информатики" Чарльза Петцольда. Эта книга рекомендуется к прочтению — она читается как захватывающий роман, и действительно даст хорошее понимание того, как устроен компьютер и даже как работает Assembler.
Фундамент: софт
Перейдем уже непосредственно к тому, как устроен современный софт. Вот что вам нужно знать.
Операционные системы
Нужно очень хорошо понимать принципы работы операционных систем и какую роль они выполняют, поскольку при работе с любым языком программирования всё взаимодействие всегда происходит в рамках одной или нескольких операционных систем. У многих программистов, особенно после университета, складывается такое ощущение и мнение, что знание операционных систем важно только для системных программистов, которые пишут софт, связанный прямо с операционной системой и работающий в рамках неё. Это не так. Огромное количество вопросов, которые задают новички, чаще всего связаны с частными случаями каких-то базовых вещей, находящихся внутри операционной системы. Изучение и понимание какой-нибудь одной базовой вещи может занять всего лишь день, но в дальнейшем способно дать огромную фору перед другими, поскольку позволит понимать целый пласт проблем, с которыми в конечном итоге сталкивается разработчик. Такие проблемы каждый раз могут немного отличаться друг от друга, но быть основаны на одной и той же особенности операционной системы. Те, кто не усвоил эту особенность, не видят связи и обречены постоянно тратить время на поиск решения. Поэтому знание операционных систем — важное условие профессионализма разработчика. Существует множество книг, посвященных операционным системам, которые дают понимание их базовых принципов, не копая глубоко.
Сети и протоколы
В век интернета в своей работе разработчик часто сталкивается с сетями и различными протоколами. Нужно иметь представление об основных протоколах, зачем они нужны, и как работают.
Базы данных
Нельзя забывать и про базы данных, поскольку работать придётся с огромными объемами информации, которые организуются, хранятся и которыми оперируют именно базы данных.
Компиляторы и интерпретаторы
Помимо понимания отличия компиляторов от интерпретаторов, здесь необходимо знать, как исполняется код, как можно взаимодействовать с ним, как идёт отработка ошибок. Плюс сюда входят еще такие вещи как потоки и многое-многое другое.
Разное
Есть еще множество разных инструментов и навыков, на которые нужно обратить внимание. Вот лишь самые распространенные.
Владение командной строкой
Важно владеть командной строкой и работать с ней быстро и эффективно, знать как и какие команды в ней можно вызывать.
Системы контроля версий
Любой современный разработчик должен знать, что такое системы контроля версий и как управлять кодом — от этого никуда не деться. Стандартом считается Git, и без этого инструмента, в принципе, нельзя вести разработку.
Автоматизированное тестирование
Кроме этого, важным понятием является автоматизированное тестирование, и на определенном уровне разработки, с определенного уровня проектов без тестирования обходиться вообще нельзя. Автоматизированное тестирование — очень простая техника, которая изучается за короткое время и после этого используется всю оставшуюся жизнь.
Управление конфигурацией
Существует несколько систем управления конфигурацией, таких как Ansible. Они используются для автоматизации настройки и развертывания программного обеспечения и позволяют сэкономить кучу времени для более насущных задач.
<!DOCTYPE html>
<html class="h-100" data-bs-theme="light" data-mantine-color-scheme="light" lang="ru" prefix="og: https://ogp.me/ns#">
<head>
<meta content="width=device-width, initial-scale=1.0" name="viewport">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<link crossorigin="true" href="https://cdn.hexlet.io" rel="preconnect">
<link href="https://mc.yandex.ru" rel="preconnect">
<meta content="aa2vrdtq64dub8knuf83lwywit311w" name="facebook-domain-verification">
<link href="/favicon.ico" rel="icon" sizes="any">
<link href="/favicon.svg" rel="icon" type="image/svg+xml">
<link href="/apple-touch-icon.png" rel="apple-touch-icon">
<link href="/manifest.webmanifest" rel="manifest">
<script>
//<![CDATA[
window.gon={};gon.ym_counter="25559621";gon.is_bot=true;gon.applications={};gon.current_user={"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26 19:53:24 UTC","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false};gon.token="BdtZwi6E62N_cYBrz-hhpBX0mfE4T1HuS0fvF7FJt_HqCpL13PpGA8kypPPD55HT1f20WzB4r0z2p3VD405Qnw";gon.locale="ru";gon.language="ru";gon.theme="light";gon.rails_env="production";gon.mobile=false;gon.google={"analytics_key":"UA-1360700-51","optimize_key":"GTM-5QDVFPF"};gon.captcha={"google_v3_site_key":"6LenGbgZAAAAAM7HbrDbn5JlizCSzPcS767c9vaY","yandex_site_key":"ysc1_Vyob5ZPPUdPBsu0ykt8bVFdzsfpoVjQChLGl2b4g19647a89","verification_failed":null};gon.social_signin=false;gon.typoreporter_google_form_id="1FAIpQLSeibfGq-KvWQ2Fyru-zkFFRVTLBuzXAHAoEyN1p49FtDmNoNA";
//]]>
</script>
<meta charset="utf-8">
<title>Неустаревающие знания | Жизнь программиста</title>
<meta name="description" content="Неустаревающие знания / Жизнь программиста: Знакомимся с навыками, которые не устаревают и не зависят от времени">
<link rel="canonical" href="https://ru.hexlet.io/courses/prog-life/lessons/knowledge/theory_unit">
<meta name="robots" content="noarchive">
<meta property="og:title" content="Неустаревающие знания">
<meta property="og:title" content="Жизнь программиста">
<meta property="og:description" content="Неустаревающие знания / Жизнь программиста: Знакомимся с навыками, которые не устаревают и не зависят от времени">
<meta property="og:url" content="https://ru.hexlet.io/courses/prog-life/lessons/knowledge/theory_unit">
<meta name="csrf-param" content="authenticity_token" />
<meta name="csrf-token" content="7_GnLvOGj9Ei8TAoaIjZU8YhSvAt5vYRRs0wivc2nnsAIGwZAfgisZSyFLBkhykkBihnWiXRCLP7LarepTF5FQ" />
<script src="/vite/assets/inertia-DfXos102.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/preload-helper-BJ4cLWpC.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-BrRXra1y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ahoy-DrlRQ-1D.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/analytics-cb8xch9l.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Surface-DL2bpZA-.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/extends-C-EagtpE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/inheritsLoose-BBd-DCVI.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/objectWithoutPropertiesLoose-DRHXDhjp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/index.esm-DAqKOkZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Button-CGPUux8l.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/CloseButton-D1euiPao.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Group-BX48WcuU.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Loader-BQEY8g6v.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Modal-Cy3HByv7.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/OptionalPortal-1Hza5P2w.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Stack-CtjJzfw4.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Textarea-Ck64llAy.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/DirectionProvider-Dc9zdUke.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/events-DJQOhap0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-reduced-motion-D2owz4wa.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-disclosure-zKtK5W1r.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/use-hotkeys-Cnc_Rwkb.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/random-id-DOQyszCZ.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/exports-C_MrNx_T.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<link rel="stylesheet" href="/vite/assets/application-BqhCP46M.js" />
<script src="/vite/assets/application-Df9RExpe.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/autocomplete-VMNbxKGl.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/createPopper-C3aM9r1M.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/js.cookie-D1-O8zkX.js" as="script" crossorigin="anonymous"><link rel="stylesheet" href="/vite/assets/application-C8HjmMaq.css" media="screen" />
<script>
window.ym = function(){(ym.a=ym.a||[]).push(arguments)};
window.addEventListener('load', function() {
setTimeout(function() {
ym.l = 1*new Date();
ym(window.gon.ym_counter, "init", {
clickmap: true,
trackLinks: true,
accurateTrackBounce: true,
webvisor: true
});
// Загружаем скрипт
var k = document.createElement('script');
k.async = 1;
k.src = 'https://mc.yandex.ru/metrika/tag.js';
document.head.appendChild(k);
ym(window.gon.ym_counter, 'getClientID', function(clientID) {
window.ymClientId = clientID;
});
}, 1500);
});
</script>
<!-- Google Tag Manager - deferred -->
<script>
// dataLayer stub сразу — пуши работают до загрузки скрипта
window.dataLayer = window.dataLayer || [];
// Сам скрипт — отложенно после load
window.addEventListener('load', function() {
setTimeout(function() {
dataLayer.push({'gtm.start': new Date().getTime(), event: 'gtm.js'});
var j = document.createElement('script');
j.async = true;
j.src = 'https://www.googletagmanager.com/gtm.js?id=GTM-WK88TH';
document.head.appendChild(j);
}, 1500);
});
</script>
<!-- End Google Tag Manager -->
</head>
<body>
<noscript>
<div>
<img alt="" src="https://mc.yandex.ru/watch/25559621" style="position:absolute; left:-9999px;">
</div>
</noscript>
<header class="sticky-top bg-body">
<nav class="navbar navbar-expand-lg">
<div class="container-xxl">
<a class="navbar-brand" href="/"><img alt="Логотип Хекслета" height="24" src="https://ru.hexlet.io/vite/assets/logo_ru_light-BpiEA1LT.svg" width="96">
</a><button aria-controls="collapsable" aria-expanded="false" aria-label="Меню" class="navbar-toggler border-0 mb-0 mt-1" data-bs-target="#collapsable" data-bs-toggle="collapse">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="collapsable">
<ul class="navbar-nav mb-lg-0 mt-lg-1">
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
Все курсы
<span class="bi bi-chevron-down align-middle ms-1"></span>
</button>
<ul class="dropdown-menu">
<li>
<a class="dropdown-item d-flex py-2" href="/courses"><div class="fw-bold me-auto">Все что есть</div>
<div class="text-muted">117</div>
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные категории</b>
</li>
<li>
<a class="dropdown-item py-2" href="/courses_devops">Курсы по DevOps
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_data_analytics">Курсы по аналитике данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_programming">Курсы по программированию
</a></li>
<li>
<a class="dropdown-item py-2" href="/courses_testing">Курсы по тестированию
</a></li>
<li>
<hr class="dropdown-divider">
</li>
<li class="dropdown-item">
<b>Популярные курсы</b>
</li>
<li>
<a class="dropdown-item py-2" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/go">Go-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/java">Java-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/python">Python-разработчик
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/qa-auto-engineer-java">Автоматизатор тестирования на Java
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/data-analytics">Аналитик данных
</a></li>
<li>
<a class="dropdown-item py-2" href="/programs/frontend">Фронтенд-разработчик
</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<button aria-haspopup class="btn nav-link" data-bs-toggle="dropdown" type="button">
О Хекслете
<span class="bi bi-chevron-down align-middle"></span>
</button>
<ul class="dropdown-menu bg-body">
<li>
<a class="dropdown-item py-2" href="/pages/about">О нас
</a></li>
<li>
<a class="dropdown-item py-2" href="/blog">Блог
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/hse-research" role="button">Результаты (Исследование)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://career.hexlet.io" role="button">Хекслет Карьера
</span></li>
<li>
<a class="dropdown-item py-2" href="/testimonials">Отзывы студентов
</a></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://t.me/hexlet_help_bot" role="button">Поддержка (В ТГ)
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/referal-program/?promo_creative=priglasite-druzei&promo_name=referal-program&promo_position=promo_position&promo_start=010724&promo_type=link" role="button">Реферальная программа
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://special.hexlet.io/certificate" role="button">Подарочные сертификаты
</span></li>
<li>
<span class="dropdown-item py-2 external-link" data-href="https://hh.ru/employer/4307094" role="button">Вакансии
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://b2b.hexlet.io" data-target="_blank" role="button">Компаниям
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexly.ru/" data-target="_blank" role="button">Колледж
</span></li>
<li>
<span class="dropdown-item d-flex external-link" rel="noopener noreferrer nofollow" data-href="https://hexlyschool.ru/" data-target="_blank" role="button">Частная школа
</span></li>
</ul>
</li>
<li><a class="nav-link" href="/subscription/new">Подписка</a></li>
</ul>
<ul class="navbar-nav flex-lg-row align-items-lg-center gap-2 ms-auto">
<li>
<a class="nav-link" aria-label="Переключить тему" href="/theme/switch?new_theme=dark"><span aria-hidden="true" class="bi bi-moon"></span>
</a></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="/u/new" role="button"><span>Регистрация</span>
</span></li>
<li>
<span data-target="_self" class="nav-link external-link" data-href="https://ru.hexlet.io/session/new" role="button"><span>Вход</span>
</span></li>
</ul>
</div>
</div>
</nav>
</header>
<div class="x-container-xxxl">
</div>
<main class="mb-6 min-vh-100 h-100">
<div id="app" data-page="{"component":"web/courses/lessons/theory_unit","props":{"errors":{},"locale":"ru","language":"ru","httpsHost":"https://ru.hexlet.io","host":"ru.hexlet.io","colorScheme":"light","auth":{"user":{"id":null,"last_viewed_notification_id":null,"email":null,"state":null,"first_name":"","last_name":"","created_at":"2026-02-26T19:53:24.085Z","current_program":null,"current_team":null,"full_name":"","guest":true,"can_use_paid_features":false,"is_hexlet_employee":false,"sanitized_phone_number":"","can_subscribe":true,"can_renew_education":false}},"cloudflareTurnstileSiteKey":"0x4AAAAAAA15KmeFXzd2H0Xo","vkIdClientId":"51586979","yandexIdClientId":"88d071f1d3384eb4bd1deb37910235c7","formAuthToken":"Brz-lC3zRzLmxm9oJk3aPXE3k8UTnlb4s7iWx7kdj4_pbTWj343qUlCFS_AqQipKsT6-bxupqFoOWAyT6xpo4Q","topics":[{"id":29678,"title":"Добрый день. Подскажите точное название книги и автора, которую рекомендуете в видео.спасибо","plain_title":"Добрый день. Подскажите точное название книги и автора, которую рекомендуете в видео.спасибо ","creator":{"public_name":"Зоя Анищук","id":233809,"is_tutor":false},"comments":[{"creator":{"public_name":"Stanislav R.","id":226506,"is_tutor":false},"id":64476,"body":"Здравствуйте!\n> https://ru.hexlet.io/pages/recommended-books \n\n Здесь есть целый список хороших книг, включая \n> Код. Тайный язык информатики. Чарльз Петцольд\n\nкоторая рекомендуется в данном видеоуроке.\n\n\n","topic_id":29678}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Неустаревающие знания","entity_url":null,"active":true}},{"id":5731,"title":"Доброго времени суток! Скажите, а как-то можно увеличить скорость видео? Спасибо","plain_title":"Доброго времени суток! Скажите, а как-то можно увеличить скорость видео? Спасибо ","creator":{"public_name":"Lidiya Usoltseva","id":123381,"is_tutor":false},"comments":[{"creator":{"public_name":"Lidiya Usoltseva","id":123381,"is_tutor":false},"id":10274,"body":"Спасибо!! ","topic_id":5731},{"creator":{"public_name":"Kirill Mokevnin","id":1,"is_tutor":false},"id":10273,"body":"Например так http://help.hexlet.io/article/17-videospeed","topic_id":5731}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Неустаревающие знания","entity_url":null,"active":true}},{"id":11076,"title":"Добрый день, я - ноль в программирование, с чего мне начать?) ","plain_title":"Добрый день, я - ноль в программирование, с чего мне начать?) ","creator":{"public_name":"","id":156521,"is_tutor":false},"comments":[{"creator":{"public_name":"Дмитрий Храпонов","id":145876,"is_tutor":false},"id":23053,"body":"Начните с базового курса [«Введение в программирование»](https://ru.hexlet.io/courses/introduction_to_programming).","topic_id":11076}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Неустаревающие знания","entity_url":null,"active":true}},{"id":7130,"title":"видео не грузится","plain_title":"видео не грузится ","creator":{"public_name":"Alexandr Sokolov","id":114235,"is_tutor":false},"comments":[{"creator":{"public_name":"R. D.","id":3,"is_tutor":false},"id":13169,"body":"Грузится. Возможно, дело в провайдере? У вас точно нет прокси-сервера или чего-то, стоящего между вами и vimeo?","topic_id":7130},{"creator":{"public_name":"Alexandr Sokolov","id":114235,"is_tutor":false},"id":13170,"body":"нда, сегодня грузится, похоже vimeo чудит, тк остальные видео и вчера открывались","topic_id":7130},{"creator":{"public_name":"Юрий Манаков","id":133731,"is_tutor":false},"id":13249,"body":"Мне помогло переключение разрешения в 360p","topic_id":7130},{"creator":{"public_name":"R. D.","id":3,"is_tutor":false},"id":13162,"body":"Проверьте, что у вас не включён адблок, unlock, privacy badger, другой блокировщик контента или фаервол. Очень часто проблемы из-за подобных штук. ","topic_id":7130},{"creator":{"public_name":"Alexandr Sokolov","id":114235,"is_tutor":false},"id":13164,"body":"а у вас грузится 5 видео в этом курсе?\nу меня\n```\nFailed to load resource: the server responded with a status of 410 (Gone)\n```","topic_id":7130}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Неустаревающие знания","entity_url":null,"active":true}},{"id":27507,"title":"Сюда же, вероятно, можно добавить и навык слепого метода набора текста.\nПрокачав его, пользу от него будете получать всю жизнь и не только в программировании.\n","plain_title":"Сюда же, вероятно, можно добавить и навык слепого метода набора текста. Прокачав его, пользу от него будете получать всю жизнь и не только в программировании. ","creator":{"public_name":"Pavel Vecherin","id":18267,"is_tutor":false},"comments":[{"creator":{"public_name":"Александр О.","id":61806,"is_tutor":false},"id":58974,"body":"Согласен с вами, **очень важный и полезный навык**. Но, как правильно, заметили напрямую к программированию не относится.","topic_id":27507}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Неустаревающие знания","entity_url":null,"active":true}},{"id":3773,"title":"Ruby не только императивный, Ruby мультипарадигменный, просто на него много Java`вистов переходит вот и пишут ruby программу думая логикой java :(","plain_title":"Ruby не только императивный, Ruby мультипарадигменный, просто на него много Java`вистов переходит вот и пишут ruby программу думая логикой java :( ","creator":{"public_name":"Mikhail Krainik","id":47509,"is_tutor":false},"comments":[{"creator":{"public_name":"Kirill Mokevnin","id":1,"is_tutor":false},"id":6282,"body":"Наличие в языке функций высшего порядка не делает его мультипарадигменным. В таком случае почти все языки можно назвать мультипарадигменными, в том числе java8.","topic_id":3773},{"creator":{"public_name":"Mikhail Krainik","id":47509,"is_tutor":false},"id":6334,"body":"Добро пожаловать в мир языков высокого уровня :)","topic_id":3773}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Неустаревающие знания","entity_url":null,"active":true}},{"id":3383,"title":"Добрый день! Огромная просьба загрузить слайды курса в PDF формате. Когда нужно посмотреть или вспомнить что-то из прошлых уроков, нужно проматывать видео. PDF слайды облегчили бы это дело. И можно распечатать и делать свои заметки","plain_title":"Добрый день! Огромная просьба загрузить слайды курса в PDF формате. Когда нужно посмотреть или вспомнить что-то с прошлых уроков, нужно проматывать видео. PDF слайды облегчили бы это дело. И можно распечатать и делать свои заметки ","creator":{"public_name":"Chingiz Zh","id":101607,"is_tutor":false},"comments":[{"creator":{"public_name":"Павел Р","id":112442,"is_tutor":false},"id":7287,"body":"Поддерживаю","topic_id":3383},{"creator":{"public_name":"Павел","id":105248,"is_tutor":false},"id":22742,"body":"Присоединяюсь к просьбе. Год уж прошел, а доступ к слайдам так и не дали. Жалко что ли?","topic_id":3383},{"creator":{"public_name":"Kirill Mokevnin","id":1,"is_tutor":false},"id":7473,"body":"Такой тикет есть, мы обязательно его сделаем.","topic_id":3383},{"creator":{"public_name":"","id":93608,"is_tutor":false},"id":28757,"body":"Пока слушал курс записывал текст со слайдов, чтобы можно было легко освежить в памяти то, что было в записях. Может быть вам подойдет [такой вариант](https://gist.github.com/pomaskin/9283398d471cdf83a6f1025f77007d5a).","topic_id":3383}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Неустаревающие знания","entity_url":null,"active":true}},{"id":4015,"title":"Посоветуйте какие-то книги по ОС в тему данного урока.\n\nСпасибо.","plain_title":"Посоветуйте какие-то книги по ОС в тему данного урока. Спасибо. ","creator":{"public_name":"Глеб Зайцев","id":109271,"is_tutor":false},"comments":[{"creator":{"public_name":"Глеб Зайцев","id":109271,"is_tutor":false},"id":6713,"body":"Спасибо, читаю :)","topic_id":4015},{"creator":{"public_name":"Kirill Mokevnin","id":1,"is_tutor":false},"id":6703,"body":"Вот наша подоборка: https://map.hexlet.io/pages/books","topic_id":4015}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Неустаревающие знания","entity_url":null,"active":true}},{"id":31566,"title":"Добрый день! В предыдущих шагах вы говорили что для освоения программирования до уровня Junior хватит 3-12 месяцев. С освоением того что представлено в этом уроке уйдет гораздо больше времени. Не состыковка. ","plain_title":"Добрый день! В предыдущих шагах вы говорили что для освоения программирования до уровня Junior хватит 3-12 месяцев. С освоением того что представлено в этом уроке уйдет гораздо больше времени. Не состыковка. ","creator":{"public_name":"Александр Зеленский","id":238426,"is_tutor":false},"comments":[{"creator":{"public_name":"Сергей К.","id":5174,"is_tutor":false},"id":68666,"body":"Дорогу осилит идущий. Для уровня Junior о некоторых вещах вам нужно иметь общее представление. Но это не отменяет глубокого изучения.","topic_id":31566},{"creator":{"public_name":"Антон Сурнин","id":224683,"is_tutor":false},"id":74552,"body":"Если хочется быть профессионалом то это важно знать, если хочешь писать только простые скрипты например: интеграции сервисом по api с каким нибудь сервисом типа: ВК -> Телеграмм то через 3 - 12 будешь это делать. А на что-то серьезное без знаний упомянутых в уроке тебя не хватит.","topic_id":31566}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Неустаревающие знания","entity_url":null,"active":true}},{"id":47373,"title":"Всем Привет! Снова в вашем строю! Жизнь вынудила прекратить на время обучение. Продолжаю вспоминать пройденный материал и планирую продолжить обучение на вашем ресурсе. Очень хочу поменять профессию с инженера на программиста JavaScript и как можно быстрей.\nНужна помощь опытных программистов, чтоб составить **минимальный список курсов и книг, необходимых для того, чтоб начать проходить собеседования**. Я видела список литературы от Хекслет, но с ним я надолго останусь в состоянии обучения)","plain_title":"Всем Привет! Снова в вашем строю! Жизнь вынудила прекратить на время обучение. Продолжаю вспоминать пройденный материал и планирую продолжить обучение на вашем ресурсе. Очень хочу поменять профессию с инженера на программиста JavaScript и как можно быстрей. Нужна помощь опытных программистов, чтоб составить минимальный список курсов и книг, необходимых для того, чтоб начать проходить собеседования. Я видела список литературы от Хекслет, но с ним я надолго останусь в состоянии обучения) ","creator":{"public_name":"Юлия воробиенко","id":140976,"is_tutor":false},"comments":[{"creator":{"public_name":"Stanislav Dzisiak","id":212236,"is_tutor":true},"id":102165,"body":"Приветствую, Юлия!\n\nВ принципе, чтобы начать проходить собеседования, достаточно будет овладеть базовыми знаниями по выбранному вами языку программирования и его возможностями. Все когда-то с чего-то начинают и вначале знать всё попросту невозможно. Более того, это не случится и в будущем, и это нормально, так как развитие технологий в сфере IT происходит очень быстро. Одни технологии сменяются на другие, выходят новые фреймворки, появляются новые возможности и т.д. Порекомендую вам вначале выбрать стек (профессию) в рамках которого вы хотите развиваться и начать проходить её. По мере обучения вы \"прочувствуете\", что вам даётся легче, а что сложнее и руководствуясь этим можно будет определиться какую дополнительную литературу и по какому направлению стоит читать. Также попутно, будет хорошо читать литературу из списка рекомендуемой, это поможет вам получить базовые знания и в сфере программирования и улучшит понимание происходящего. Закончите проходить текущий курс \"[Жизнь программиста](https://ru.hexlet.io/courses/prog-life)\" (загляните в урок \"[Как стать программистом](https://ru.hexlet.io/courses/prog-life/lessons/requirements/theory_unit)\"), начните читать книгу «[Код. Тайный язык информатики](https://bit.ly/2tei1TJ)» Чарльза Петцольд. Также порекомендую вам прочитать статьи на эту тему из блога Хекслета: \"[Обучение программированию в 30+ лет: подробный гайд](https://ru.hexlet.io/blog/posts/learn-to-program-at-30)\" и \"[Алгоритм поиска первой работы](https://ru.hexlet.io/blog/posts/how-to-find-your-first-job)\".","topic_id":47373}],"communitable":{"parent_entity_name":null,"parent_entity_url":null,"entity_name":"Неустаревающие знания","entity_url":null,"active":true}}],"lesson":{"exercise":null,"units":[{"id":1162,"name":"theory","url":"/courses/prog-life/lessons/knowledge/theory_unit"},{"id":7450,"name":"quiz","url":"/courses/prog-life/lessons/knowledge/quiz_unit"}],"links":[{"id":423375,"name":"Рекомендуемые книги","url":"https://ru.hexlet.io/pages/recommended-books\n"},{"id":423376,"name":"Книга «Грокаем алгоритмы»","url":"https://www.litres.ru/aditya-bhargava/grokaem-algoritmy-illustrirovannoe-posobie-dlya-p-39158380\n"}],"ordered_units":[{"id":1162,"name":"theory","url":"/courses/prog-life/lessons/knowledge/theory_unit"},{"id":7450,"name":"quiz","url":"/courses/prog-life/lessons/knowledge/quiz_unit"}],"id":606,"slug":"knowledge","state":"approved","name":"Неустаревающие знания","course_order":50,"goal":"Знакомимся с навыками, которые не устаревают и не зависят от времени","self_study":null,"theory_video_provider":"vimeo","theory_video_uid":"154601408","theory":"Мир вокруг нас непрерывно меняется, и точно так же каждый день меняются технологии, причем иногда настолько сильно, что освоенное сегодня через год уже может быть не нужно. Но если посмотреть глубже, то можно увидеть, что базовые, фундаментальные знания, которые используются в большинстве современных технологий, появились очень давно и практически не изменились. В этом уроке мы поговорим о том, какие области фундаментальных знаний нужно прокачивать, чтобы стать хорошим программистом, а в конце перечислим и некоторые инструменты, знание которых необходимо каждому профессиональному разработчику.\n\n## Устаревание технологий\n\nВажно помнить, что **фундамент не устаревает**, а остальное быстро добирается в процессе. Любой новый фреймворк, подход в разработке, какая-либо новая методология или язык программирования учатся достаточно быстро, если вы в принципе владеете базой. Но кроме каких-то точных наук, кроме того, чтобы заниматься непосредственно программированием, нужно поработать над своим мозгом. И этот процесс включает в себя несколько направлений.\n\n## Логическое мышление\n\nПервое — это логическое мышление, мыслительный процесс, при котором человек использует логические понятия и конструкции. Этому процессу свойственна доказательность, рассудительность, и его целью является получение обоснованного вывода из имеющихся предпосылок. Логическое мышление является крайне важным для любого программиста, и существует множество способов его прокачивать.\n\n### Математика\n\nПервый способ развития логического мышления — это математика. Просто изучение математики в любом её представлении, в любом направлении отлично развивает способность правильно мыслить. Те, кто раньше начинают заниматься математикой, имеют преимущество перед остальными. Можно изучать её и спустя 20 лет после окончания института, пусть это действительно может быть сложнее, потому что становится трудно найти время усвоить тот объём знаний, который даётся в учебном заведении. Но в целом это возможно, и на базовом уровне все необходимые разделы математики, полезные для развития мозга, доступны для изучения в виде бесплатных курсов на огромном количестве ресурсов, в том числе на русском языке. Можно легко найти информацию, что непосредственно стоит учить, какие книги читать — и это нужно делать, независимо от изучения программирования.\n\n### Логические задачи\n\nВторой способ развития логического мышления — это решение логических задач. Есть отличный сайт с огромным количеством задач разного уровня: www.braingames.ru. На нём сидит много людей, есть рейтинги, и это — отличный способ поломать мозг. При этом, нужно понимать, что есть люди, которые очень круты в решении логических задачах, но при этом у них не очень получается быть программистами, поэтому развитие должно быть многостороннее.\n\n### Алгоритмы\n\nТретий способ — это изучение алгоритмов. Речь именно о тех алгоритмах, которые рекомендуется изучать при обучении программированию или чтобы войти в эту профессию. Они бывают разные, некоторые очень сложные, и бывает так, что без очень сильной математики не разобраться, но в целом на базовом уровне в различных направлениях алгоритмы достаточно простые. Знание и понимание принципов работы алгоритмов действительно очень сильно помогает. В [рекомендуемых книгах](https://ru.hexlet.io/pages/recommended-books) Хекслета есть отличная [книга по алгоритмам](https://www.litres.ru/aditya-bhargava/grokaem-algoritmy-illustrirovannoe-posobie-dlya-p-39158380/)\n\n## Абстрактное мышление\n\nСледующий важный аспект базовых знаний — это абстрактное мышление, мыслительный процесс, при котором человек умеет абстрагировать ситуацию от незначительных деталей и взглянуть на неё в целом. Абстрактное мышление включает в себя три формы: понятие, суждение, умозаключение.\n\nАбстрактное мышление обладает следующими признаками:\n\n* способность понять окружающий мир без воздействия на органы чувств\n\n Просто опираясь на предыдущие знания, можно получать новую информацию и делать выводы о каких-то новых процессах, которые не видны и не осязаемы. Именно так решаются задачи по математике, физике, химии в школе и институте.\n\n* обобщение для выявления закономерностей\n\n Обобщение, фактически являющееся сутью программирования, когда мы говорим про создание каких-то больших программных комплексов — это возможность абстрагироваться, создавать максимально изолированные системы и строить правильные интерфейсы между их частями для обеспечения взаимодействия между ними. Существует понятие \"барьеры абстракции\" — когда слой за слоем строятся уровни абстракции, и на каждом более высоком уровне не видно деталей нижнего уровня — это важнейший принцип, который позволяет удерживать в голове систему и работать с ней. Человек может удерживать в голове 7 плюс-минус 2 вещи, поэтому оперирование большим количеством понятий одновременно — это взрыв мозга.\n\nАбстрактное мышление развивается примерно так же, как и логическое, и часто они взаимосвязаны, но есть и небольшие отличия.\n\n### Точные науки\n\nТочные науки — это не только математика, но и физика, химия и даже некоторые разделы биологии.\n\n### Логические и интеллектуальные игры\n\nСюда входит тот же самый braingames, при этом для развития абстрактного мышления очень здорово подходит и игра в шахматы, шашки или даже в преферанс.\n\n### Программирование :)\n\nНу и само программирование способствует развитию абстрактного мышления. Однако нужно не забывать про другие способы и использовать их в комплексе.\n\n\n## Качаем знания\n\n\n\nТеперь разберёмся в том, какими знаниями нужно обладать разработчику. Сейчас будет много новых концепций — совсем не обязательно знать их заранее, до начала карьеры. То, что здесь будет описано — это тот фундамент, который либо приобретается в университете, если с ним повезло и уже учась там, человек понимал, что будет программистом и пытался по максимуму выхватывать эти знания. Во всех остальных случаях нужно добирать в процессе в той или иной мере. Знать всё идеально невозможно, но чем больше направлений из перечисленных ниже будет освоено — тем более профессиональным разработчиком можно стать и тем более сложные задачи решать.\n\n\n### Фундамент: математическая подготовка\n\n#### Теория множеств\n\nОсобенно важная дисциплина в работе с базами данных. SQL построен на реляционной алгебре, и в базах активно используются понятия теории множеств. Таблицы, выборки — всё это берёт начало в теории множеств.\n\n#### Логика\n\nЛогика — это то, с чем сталкивается каждый программист каждый день в своей работе. Логика является важнейшей основой программирования — свой путь в профессии нужно начинать с её изучения.\n\n#### Дискретная математика\n\nДискретная математика включает в себя достаточно много разделов: начиная от графов и заканчивая автоматами. Большинство разделов дискретной математики так или иначе воплощено в информатике.\n\n#### Лямбда-исчисление\n\nИ последнее — это лямбда-исчисление, которое отлично помогает в развитии абстрактного мышления. Представьте себе систему, в которой числа и операции над ними (арифметика) это функции. Благодаря лямбда-исчислению такую систему можно создать и она будет вести себя абсолютно так, как ведут себя обычные числа.\n\nКроме того, с понятием лямбда-функций вы столкнетесь практически во всех языках.\n\n\n### Фундамент: информатика\n\nБлижайшая к компьютерам область знаний — это информатика. И нас интересуют следующие ниже разделы информатики.\n\n#### Системы счисления\n\nСамое базовое понятие — системы счисления — это системы записи чисел с помощью определенного набора цифр. Почему они так важны? В основе программ и компьютеров лежит двоичная система счисления, но в повседневной жизни мы используем десятеричную систему счисления. Обязательно нужно знать и понимать, как устроены системы счисления и уметь переводить числа из одной системы счисления в другую.\n\n[//]: # (Добавил описание систем счисления)\n\n#### Структуры данных\n\nСтруктуры данных в информатике — это способ представления информации, с помощью которого её отдельно взятые элементы образуют нечто единое. В языках программирования реализовано несколько распространенных структур данных, таких как массивы, числа, строки, файлы. Но и кроме них существует множество абстрактных структур данных, которые могут создаваться самими разработчиками с использованием средств языка.\n\n[//]: # (Описание структуры данных набросал сам, потому что о них не было конкретного пояснения. Можно расписать подробнее, если необходимо)\n\n#### Алгоритмы\n\nНаряду с системами счисления и структурами данных алгоритмы — основа основ информатики. Для того, чтобы быть экспертом в алгоритмах, нужно не только вдоль и поперёк изучить сами алгоритмы, но и очень хорошо знать математику — а на это уйдёт приличное количество времени. Хорошая новость — для начала этого и не требуется. Главное — понимать базовые алгоритмы на базовых структурах данных и вообще просто иметь понятие о том, что они из себя представляют и как работают. Какие-то конкретные алгоритмы приходят уже в процессе работы или обучения. Не бывает такого, что программист заранее знает все возможные алгоритмы и может запросто выдать нужный алгоритм, подходящий для конкретной ситуации.\n\n\n### Фундамент: парадигмы\n\nТеперь поговорим о языках программирования и о том, какие подходы к программированию в них реализованы. Такие подходы называются парадигмами программирования. Парадигма программирования влияет на всё, что происходит в вашем коде: то, как строится программа, на каких принципах она работает. Изучение парадигм помогает стать намного более сильным разработчиком, чем изучение конкретных особенностей конкретного языка или просто переход из одного языка в другой язык той же парадигмы.\n\nСуществует множество различных парадигм, но на самом верхнем уровне — 3 базовых: императивная, функциональная, логическая.\n\n#### Императивное программирование\n\nИмперативное программирование описывает, **как** решить задачу и представить результат, используя инструкции (команды). Большинство мейнстримовых языков являются императивными языками программирования: это Java, это C#, это все скриптовые языки, Ruby, PHP, Python и многие другие.\n\n#### Функциональное (декларативное) программирование\n\nЕсть очень мощная парадигма, которая является противоположностью императивного программирования — это функциональное (или декларативное) программирование. Эта парадигма описывает, **что** представляет собой задача и ожидаемый результат её решения. В неё входят такие языки как Clojure, Erlang, Haskell, Scala и многие другие.\n\n#### Логическое программирование\n\nЯзык логического программирования, с которым многие сталкивались в институте, называется Prolog — тоже очень хороший пример того, как можно по-другому смотреть на вещи.\n\n\n### Фундамент: железо\n\n#### Архитектура компьютера\n\nЕсли говорить про железо, то здесь важно понимание архитектуры компьютера, хотя, опять же, всё очень сильно зависит от области разработки. Большинству прикладных программистов, которые работают в веб-сфере, разработке десктопных, мобильных приложений нужен просто общий обзор, понимание того, что такое регистры, как работает процесс взаимодействия с оперативной памятью. Всё перечисленное можно почерпнуть из одной-единственной книги, которая называется \"Код: тайный язык информатики\" Чарльза Петцольда. Эта книга рекомендуется к прочтению — она читается как захватывающий роман, и действительно даст хорошее понимание того, как устроен компьютер и даже как работает Assembler.\n\n\n### Фундамент: софт\n\nПерейдем уже непосредственно к тому, как устроен современный софт. Вот что вам нужно знать.\n\n#### Операционные системы\n\nНужно очень хорошо понимать принципы работы операционных систем и какую роль они выполняют, поскольку при работе с любым языком программирования всё взаимодействие всегда происходит в рамках одной или нескольких операционных систем. У многих программистов, особенно после университета, складывается такое ощущение и мнение, что знание операционных систем важно только для системных программистов, которые пишут софт, связанный прямо с операционной системой и работающий в рамках неё. Это не так. Огромное количество вопросов, которые задают новички, чаще всего связаны с частными случаями каких-то базовых вещей, находящихся внутри операционной системы. Изучение и понимание какой-нибудь одной базовой вещи может занять всего лишь день, но в дальнейшем способно дать огромную фору перед другими, поскольку позволит понимать целый пласт проблем, с которыми в конечном итоге сталкивается разработчик. Такие проблемы каждый раз могут немного отличаться друг от друга, но быть основаны на одной и той же особенности операционной системы. Те, кто не усвоил эту особенность, не видят связи и обречены постоянно тратить время на поиск решения. Поэтому знание операционных систем — важное условие профессионализма разработчика. Существует множество книг, посвященных операционным системам, которые дают понимание их базовых принципов, не копая глубоко.\n\n#### Сети и протоколы\n\nВ век интернета в своей работе разработчик часто сталкивается с сетями и различными протоколами. Нужно иметь представление об основных протоколах, зачем они нужны, и как работают.\n\n[//]: # (Вставил 2 копейки про протоколы - о них не было ничего)\n\n#### Базы данных\n\nНельзя забывать и про базы данных, поскольку работать придётся с огромными объемами информации, которые организуются, хранятся и которыми оперируют именно базы данных.\n\n[//]: # (Также вставил 2 копейки про БД)\n\n#### Компиляторы и интерпретаторы\n\nПомимо понимания отличия компиляторов от интерпретаторов, здесь необходимо знать, как исполняется код, как можно взаимодействовать с ним, как идёт отработка ошибок. Плюс сюда входят еще такие вещи как потоки и многое-многое другое.\n\n\n### Разное\n\nЕсть еще множество разных инструментов и навыков, на которые нужно обратить внимание. Вот лишь самые распространенные.\n\n#### Владение командной строкой\n\nВажно владеть командной строкой и работать с ней быстро и эффективно, знать как и какие команды в ней можно вызывать.\n\n#### Системы контроля версий\n\nЛюбой современный разработчик должен знать, что такое системы контроля версий и как управлять кодом — от этого никуда не деться. Стандартом считается Git, и без этого инструмента, в принципе, нельзя вести разработку.\n\n#### Автоматизированное тестирование\n\nКроме этого, важным понятием является автоматизированное тестирование, и на определенном уровне разработки, с определенного уровня проектов без тестирования обходиться вообще нельзя. Автоматизированное тестирование — очень простая техника, которая изучается за короткое время и после этого используется всю оставшуюся жизнь.\n\n#### Управление конфигурацией\n\nСуществует несколько систем управления конфигурацией, таких как Ansible. Они используются для автоматизации настройки и развертывания программного обеспечения и позволяют сэкономить кучу времени для более насущных задач.\n\n[//]: # (2 копейки про управление конфигурацией)\n"},"lessonMember":null,"courseMember":null,"course":{"start_lesson":{"exercise":null,"units":[{"id":1160,"name":"theory","url":"/courses/prog-life/lessons/requirements/theory_unit"}],"links":[],"ordered_units":[{"id":1160,"name":"theory","url":"/courses/prog-life/lessons/requirements/theory_unit"}],"id":604,"slug":"requirements","state":"approved","name":"Введение","course_order":10,"goal":"Выясняем, что значит «быть программистом» и как им стать","self_study":null,"theory_video_provider":"vimeo","theory_video_uid":"154169609","theory":"Добро пожаловать на Хекслет! Этим уроком мы открываем наш курс, посвященный профессии программиста. На протяжении нескольких уроков мы будем разговаривать о том, кто такие программисты, как ими становятся и что нужно для того, чтобы стать одним из них. Мы подготовили большое количество информации, и вас ждут пять объёмных уроков. Мы не будем писать код, устанавливать софт и делать практические задачи — вместо этого мы разберёмся во всех нюансах профессии.\n\n## На кого рассчитан этот курс\n\n* Школьники\n* Студенты\n* Те, кто хочет поменять профессию\n\nЭтот курс рассчитан на всех, кто хочет стать программистом. Студенты технической специальности почерпнут для себя что-то новое, поскольку далеко не всё, что преподается в институте, имеет отношение к промышленному программированию. Те же, кто не имеет к нему отношения, но хотят им заниматься, получат максимально подробный обзор этой профессии. Программирование открыто для всех, поэтому всё больше и больше людей становятся программистами.\n\n## Страхи\n\n\n\nПоговорим о страхах людей, которые хотят стать программистами. Мы получаем много писем от наших пользователей, в которых они рассказывают, почему они боятся, что у них не получится освоить эту профессию.\n\n### Я — взрослый\n\nИ на первом месте находится страх, который называется \"я — взрослый\". Такому \"взрослому\" может быть и 25, и 50 лет — это абсолютно субъективная оценка. На самом деле, возраст играет малую роль, а большинство программистов уже достаточно взрослые люди. В целом профессия с каждым днем становится старше, и это нормально. Некоторые думают, что чем старше вы становитесь, тем медленнее вы соображаете, но это совершенно не всегда так: если у вас гибкий, сообразительный мозг, и вы понимаете, что вы умеете решать различные задачи и принимать определённые решения, то программирование точно для вас, ведь такие навыки по жизни не теряются. Поэтому не нужно переживать по поводу своего возраста.\n\nДжуниор (младший разработчик) в 20 или даже в 30 лет — это нормально. Существует множество примеров, когда на работу приходили люди, которым под 40 и более лет — они спокойно устраивались и работали в коллективе с молодыми ребятами. Безусловно, у некоторых может возникнуть психологический барьер, когда твой начальник сильно тебя младше, но программирование — такая профессия, где в первую очередь ценится компетентность и то, что вы из себя представляете как профессионал. Поэтому, если вы успешно растете как программист, у вас не будет никаких проблем. Наоборот, накопленный вами опыт может помочь быстрее продвигаться по карьерной лестнице.\n\n### Я плохо знаю математику\n\nДругой частый страх, о котором говорят — \"я плохо знаю математику\".\n\nБыло бы нечестно скрывать, что математика играет важную роль в программировании. В нём много направлений, которые требуют глубоких знаний различных дисциплин. Для разработки сложных игр такой дисциплиной является физика. Существуют направления, где нужна серьёзная математика, но в целом базовое программирование, особенно веб-программирование, где люди создают и настраивают сайты и веб-приложения, требует лишь минимальных знаний.\n\nКогда говорят, что для программирования нужна математика, подразумевают в первую очередь не знание её как таковой — то есть конкретных дисциплин и математического аппарата — а знание математики как способа развития мышления и личности. Математика действительно хорошо помогает структурировать мозги и размышлять немного на другом уровне, раскачивать своё абстрактное мышление и делать многое другое. Поэтому знание математики никогда не повредит. Часто бывает так, что её начинают учить вместе с программированием, и это правильный подход.\n\nПри этом незнание математики не должно становиться причиной не заниматься программированием, но если вы начали им заниматься, то хотя бы на каком-то базовом уровне её можно тоже подтягивать. Вы сами почувствуете тот момент, когда она вам понадобится: при осуществлении каких-либо вычислений или работе с алгоритмами. Множество ресурсов, таких как Coursera, дают доступ к большим университетским и простым базовым курсам, которых достаточно, чтобы подтянуть свои знания по математике.\n\n### Я слишком туп / глуп\n\nНа третьем месте — страх, который называется \"я слишком туп или глуп\".\nЭтот страх часто проявляется у людей, мечтающих стать программистами, у которых есть знакомые, успешно работающие в этой профессии. На фоне таких знакомых им иногда кажется, что они ничего не понимают. Просто потому, что те используют специфические термины и в каких-то вещах разбираются лучше. Чаще всего этот страх не обоснован, и, как показывает практика, есть такой интересный эффект: начинающие и опытные разработчики обладают схожей характеристикой — они себя недооценивают. Это касается и зарплаты, и знаний, и способностей. Зачастую совершенно иная ситуация со средними разработчиками, которые себя переоценивают. Поэтому, если вы себя недооцениваете, возможно, вы уже достаточно профессиональны.\n\n## Всё-таки нужно\n\n\n\nТеперь поговорим о тех вещах, которые всё-таки нужны каждому начинающему программисту.\n\n### Английский язык (хотя бы со словарём)\n\nКогда заходит речь о том, какой нужно выучить язык для освоения программирования, то большинство разработчиков скажет, что это, конечно же, английский. Здесь всё примерно так же, как и с математикой. Отсутствие английского — это не повод для того, чтобы не заниматься программированием. Если вы изучаете программирование, уровень английского у вас растёт сам по себе, хотя бы на базовом уровне. Точно так же в конце девяностых и начале двухтысячных молодые ребята, игравшие в компьютерные игры, невольно выучивали английский. Его важность нельзя недооценивать, потому что даже если вы найдёте документацию на русском языке, она будет лишь переводом с языка оригинала — английского — и, зачастую, не самым качественным. Оригинальный контент на других языках появляется крайне редко, всё в первую очередь появляется на английском.\n\nДаже если вы нашли документацию на русском, при работе со своими программами вы будете получать ошибки на английском языке, и с этим нужно будет разбираться. Более того, когда вы начинаете изучать, как решать эти проблемы и исправлять ошибки, вы будете попадать на популярные англоязычные сервисы, где, собственно, все общаются на английском. Опять же, повторимся, это не означает, что незнание английского не позволит вам начать программировать, но нужно понимать, что без английского в принципе не получится делать это профессионально, и его нужно подтягивать с вашими первыми попытками писать программный код.\n\nПервый и самый простой шаг, который необходимо сделать любому начинающему разработчику, это переключить все интерфейсы на всех устройствах и во всех программах (в том числе сайтах) на английский язык. Так вы быстрее освоите профессиональную терминологию.\n\n### Желание\n\nНу и конечно же вам понадобится очень много желания, потому что научиться программированию — не так просто, как кажется на первый взгляд. Полки книжных магазинов завалены книгами с громкими названиями наподобие: \"Выучи С++ за 21 день\". Кто-то может из этого сделать вывод, что за это время можно научиться программированию. Это не совсем так, а если уж говорить честно — совсем не так. Программирование требует от вас достаточно много времени и упорства, потому что вы будете часто сталкиваться с ситуациями, когда будет непонятно, что делать и куда двигаться, и иногда вы будете испытывать даже полную безысходность. Поэтому программирование, кроме прочего, требует наличия либо ментора, либо команды, либо онлайн-сервисов, призванных вам помочь — одному бывает сложновато. В целом всё это решаемо, и как раз успешное преодоление всех преград и будет показателем того, что у вас всё в дальнейшем получится, потому что в первую очередь, когда нанимают разработчиков, хотят видеть в людях способность разбираться с проблемами самостоятельно.\n\n### Время\n\nЕсли говорить о времени, которое понадобится вам, чтобы овладеть этой профессией — здесь всё очень индивидуально. Как мы уже говорили в самом начале урока, есть разные категории людей. Студенты и школьники, у которых много времени, могут себе позволить потратить его на обучение программированию, но обычно в этом возрасте люди еще не так хорошо понимают, что конкретно им нужно. А вот люди постарше не имеют в своём распоряжении такого количества свободного времени, зато хорошо понимают, зачем им всё это надо, и что нужно учить.\n\n## Порог снижения эффективности обучения\n\nСуществует такой феномен — снижение эффективности обучения. Что он означает?\n\nВначале вам нужно заниматься самостоятельно, потому что вас вряд ли кто-то возьмёт на работу, когда вы еще ничего не знаете, и для вас это будет достаточно эффективно, особенно если вы будете использовать современные средства, которые всячески помогают обучению. Но в какой-то момент скорость освоения предмета у вас начнет резко падать. Нужно не пропустить этот момент и устроиться на работу — тогда обучение снова станет весьма эффективным, плюс вы начнете расти уже профессионально.\n\nЕсть категория людей, которые получают второе и третье образование, продолжают бесконечно учиться — такая ситуация опасна и вредна, и главное — не попасться в эту ловушку.\n\n## Сколько нужно учиться, чтобы начать работать\n\nНельзя рассчитывать на то, что обучение займёт меньше трёх месяцев, просто потому что это физически невозможно. Даже если вы будете очень быстро учиться, всё впитывать, читать правильные книги, делать всё верно и по минимуму ошибаться, всё равно мозгу нужно какое-то время для адаптации и усвоения большого количества разных аспектов, поэтому 3 месяца — это самый минимальный крайний срок, после которого вам может повезти, и вы устроитесь совсем-совсем джуниором делать какую-то очень простую работу. В целом не стоит на это рассчитывать.\n\nПоэтому приблизительно для изучения основ программирования потребуется **от 3 месяцев до 1 года**. Больше года обучения без практики — это уже перебор. Давайте считать, что в среднем при неполной занятости, но при постоянном упорном обучении, вы сможете устроиться на должность программиста где-то через полгода после старта.\n"},"id":107,"slug":"prog-life","challenges_count":0,"name":"Жизнь программиста","allow_indexing":true,"state":"approved","course_state":"finished","pricing_type":"free","description":"На этом курсе вы познакомитесь с жизнью программиста. Вы узнаете, что значит быть программистом и как им стать. В итоге вы научитесь правильно настраиваться на достижение своих целей. Курс пригодится, если вы решили стать программистом и хотите узнать о навыках, которые нужны для этого. Знания из этого курса помогут узнать о нюансах профессии, о видах компаний и разработки.","kind":"basic","updated_at":"2026-01-20T11:42:45.518Z","language":"other","duration_cache":5220,"skills":["Ориентироваться в программном обеспечении (серверное, прикладное, системное)","Представлять себе преимущества и недостатки продуктовой и заказной разработки","Применять фундаментальные знания для решения задач"],"keywords":["языки программирования","пути карьерного роста","терминология"],"lessons_count":5,"cover":"https://hexlet.io/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NjYxMSwicHVyIjoiYmxvYl9pZCJ9fQ==--b77c7dceef8ae8eb0ba8266aea8ccb1208f4ae65/eyJfcmFpbHMiOnsiZGF0YSI6eyJmb3JtYXQiOiJwbmciLCJyZXNpemVfdG9fZmlsbCI6WzYwMCw0MDBdfSwicHVyIjoidmFyaWF0aW9uIn19--6067466c2912ca31a17eddee04b8cf2a38c6ad17/image.png"},"recommendedLandings":[],"lessonMemberUnit":null,"accessToLearnUnitExists":true,"accessToCourseExists":true},"url":"/courses/prog-life/lessons/knowledge/theory_unit","version":"8f286f6358a90a7bef2263b3a6edf5a90a94fa42","encryptHistory":false,"clearHistory":false}"><style data-mantine-styles="true">:root, :host{--mantine-font-family: Arial, sans-serif;--mantine-font-family-headings: Arial, sans-serif;--mantine-heading-font-weight: normal;--mantine-radius-default: 0rem;--mantine-primary-color-filled: var(--mantine-color-indigo-filled);--mantine-primary-color-filled-hover: var(--mantine-color-indigo-filled-hover);--mantine-primary-color-light: var(--mantine-color-indigo-light);--mantine-primary-color-light-hover: var(--mantine-color-indigo-light-hover);--mantine-primary-color-light-color: var(--mantine-color-indigo-light-color);--mantine-spacing-xxl: calc(4rem * var(--mantine-scale));--mantine-font-size-xs: 12px;--mantine-font-size-sm: 14px;--mantine-font-size-md: 16px;--mantine-font-size-lg: clamp(16.0000px, calc(15.2727px + 0.2273vw), 18.0000px);--mantine-font-size-xl: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-display-3: clamp(32.0000px, calc(26.1818px + 1.8182vw), 48.0000px);--mantine-font-size-display-2: clamp(36.0000px, calc(25.8182px + 3.1818vw), 64.0000px);--mantine-font-size-display-1: clamp(40.0000px, calc(25.4545px + 4.5455vw), 80.0000px);--mantine-font-size-h1: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-font-size-h2: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-font-size-h3: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-font-size-h4: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-font-size-h5: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-font-size-h6: 1rem;--mantine-primary-color-0: var(--mantine-color-indigo-0);--mantine-primary-color-1: var(--mantine-color-indigo-1);--mantine-primary-color-2: var(--mantine-color-indigo-2);--mantine-primary-color-3: var(--mantine-color-indigo-3);--mantine-primary-color-4: var(--mantine-color-indigo-4);--mantine-primary-color-5: var(--mantine-color-indigo-5);--mantine-primary-color-6: var(--mantine-color-indigo-6);--mantine-primary-color-7: var(--mantine-color-indigo-7);--mantine-primary-color-8: var(--mantine-color-indigo-8);--mantine-primary-color-9: var(--mantine-color-indigo-9);--mantine-color-red-0: #ffeaea;--mantine-color-red-1: #fed4d4;--mantine-color-red-2: #f4a7a8;--mantine-color-red-3: #ec7878;--mantine-color-red-4: #e55050;--mantine-color-red-5: #e03131;--mantine-color-red-6: #e02829;--mantine-color-red-7: #c71a1c;--mantine-color-red-8: #b21218;--mantine-color-red-9: #9c0411;--mantine-color-violet-0: #fce9ff;--mantine-color-violet-1: #f1cfff;--mantine-color-violet-2: #e09bff;--mantine-color-violet-3: #d16fff;--mantine-color-violet-4: #be37fe;--mantine-color-violet-5: #b51afe;--mantine-color-violet-6: #b009ff;--mantine-color-violet-7: #9b00e4;--mantine-color-violet-8: #8a00cc;--mantine-color-violet-9: #7800b3;--mantine-color-indigo-0: #edecff;--mantine-color-indigo-1: #d6d5fe;--mantine-color-indigo-2: #aaa9f4;--mantine-color-indigo-3: #7b79eb;--mantine-color-indigo-4: #5451e4;--mantine-color-indigo-5: #3b37e0;--mantine-color-indigo-6: #2d2adf;--mantine-color-indigo-7: #1f1ec7;--mantine-color-indigo-8: #1819b2;--mantine-color-indigo-9: #0c149e;--mantine-color-cyan-0: #dffdff;--mantine-color-cyan-1: #caf5ff;--mantine-color-cyan-2: #99e8ff;--mantine-color-cyan-3: #64daff;--mantine-color-cyan-4: #3ccffe;--mantine-color-cyan-5: #24c8fe;--mantine-color-cyan-6: #00c2ff;--mantine-color-cyan-7: #00ade4;--mantine-color-cyan-8: #009acd;--mantine-color-cyan-9: #0085b5;--mantine-color-green-0: #e9fdec;--mantine-color-green-1: #d7f6dc;--mantine-color-green-2: #b0eab9;--mantine-color-green-3: #86df94;--mantine-color-green-4: #62d574;--mantine-color-green-5: #4ccf5f;--mantine-color-green-6: #3fcc54;--mantine-color-green-7: #2fb344;--mantine-color-green-8: #25a03b;--mantine-color-green-9: #138a2e;--mantine-color-yellow-0: #fff7e2;--mantine-color-yellow-1: #ffeecd;--mantine-color-yellow-2: #ffdc9c;--mantine-color-yellow-3: #ffc966;--mantine-color-yellow-4: #feb93a;--mantine-color-yellow-5: #feae1e;--mantine-color-yellow-6: #ffa90f;--mantine-color-yellow-8: #ca8200;--mantine-color-yellow-9: #af7000;--mantine-h1-font-size: clamp(28.0000px, calc(23.6364px + 1.3636vw), 40.0000px);--mantine-h1-font-weight: normal;--mantine-h2-font-size: clamp(24.0000px, calc(21.0909px + 0.9091vw), 32.0000px);--mantine-h2-font-weight: normal;--mantine-h3-font-size: clamp(20.0000px, calc(17.0909px + 0.9091vw), 28.0000px);--mantine-h3-font-weight: normal;--mantine-h4-font-size: clamp(16.0000px, calc(13.0909px + 0.9091vw), 24.0000px);--mantine-h4-font-weight: normal;--mantine-h5-font-size: clamp(16.0000px, calc(14.5455px + 0.4545vw), 20.0000px);--mantine-h5-font-weight: normal;--mantine-h6-font-size: 1rem;--mantine-h6-font-weight: normal;}
:root[data-mantine-color-scheme="dark"], :host([data-mantine-color-scheme="dark"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-dark-filled: var(--mantine-color-dark-5);--mantine-color-dark-filled-hover: var(--mantine-color-dark-6);--mantine-color-dark-light: rgba(105, 105, 105, 0.15);--mantine-color-dark-light-hover: rgba(105, 105, 105, 0.2);--mantine-color-dark-light-color: var(--mantine-color-dark-0);--mantine-color-dark-outline: var(--mantine-color-dark-1);--mantine-color-dark-outline-hover: rgba(184, 184, 184, 0.05);--mantine-color-gray-filled: var(--mantine-color-gray-5);--mantine-color-gray-filled-hover: var(--mantine-color-gray-6);--mantine-color-gray-light: rgba(222, 226, 230, 0.15);--mantine-color-gray-light-hover: rgba(222, 226, 230, 0.2);--mantine-color-gray-light-color: var(--mantine-color-gray-0);--mantine-color-gray-outline: var(--mantine-color-gray-1);--mantine-color-gray-outline-hover: rgba(241, 243, 245, 0.05);--mantine-color-red-filled: var(--mantine-color-red-5);--mantine-color-red-filled-hover: var(--mantine-color-red-6);--mantine-color-red-light: rgba(236, 120, 120, 0.15);--mantine-color-red-light-hover: rgba(236, 120, 120, 0.2);--mantine-color-red-light-color: var(--mantine-color-red-0);--mantine-color-red-outline: var(--mantine-color-red-1);--mantine-color-red-outline-hover: rgba(254, 212, 212, 0.05);--mantine-color-pink-filled: var(--mantine-color-pink-5);--mantine-color-pink-filled-hover: var(--mantine-color-pink-6);--mantine-color-pink-light: rgba(250, 162, 193, 0.15);--mantine-color-pink-light-hover: rgba(250, 162, 193, 0.2);--mantine-color-pink-light-color: var(--mantine-color-pink-0);--mantine-color-pink-outline: var(--mantine-color-pink-1);--mantine-color-pink-outline-hover: rgba(255, 222, 235, 0.05);--mantine-color-grape-filled: var(--mantine-color-grape-5);--mantine-color-grape-filled-hover: var(--mantine-color-grape-6);--mantine-color-grape-light: rgba(229, 153, 247, 0.15);--mantine-color-grape-light-hover: rgba(229, 153, 247, 0.2);--mantine-color-grape-light-color: var(--mantine-color-grape-0);--mantine-color-grape-outline: var(--mantine-color-grape-1);--mantine-color-grape-outline-hover: rgba(243, 217, 250, 0.05);--mantine-color-violet-filled: var(--mantine-color-violet-5);--mantine-color-violet-filled-hover: var(--mantine-color-violet-6);--mantine-color-violet-light: rgba(209, 111, 255, 0.15);--mantine-color-violet-light-hover: rgba(209, 111, 255, 0.2);--mantine-color-violet-light-color: var(--mantine-color-violet-0);--mantine-color-violet-outline: var(--mantine-color-violet-1);--mantine-color-violet-outline-hover: rgba(241, 207, 255, 0.05);--mantine-color-indigo-filled: var(--mantine-color-indigo-5);--mantine-color-indigo-filled-hover: var(--mantine-color-indigo-6);--mantine-color-indigo-light: rgba(123, 121, 235, 0.15);--mantine-color-indigo-light-hover: rgba(123, 121, 235, 0.2);--mantine-color-indigo-light-color: var(--mantine-color-indigo-0);--mantine-color-indigo-outline: var(--mantine-color-indigo-1);--mantine-color-indigo-outline-hover: rgba(214, 213, 254, 0.05);--mantine-color-blue-filled: var(--mantine-color-blue-5);--mantine-color-blue-filled-hover: var(--mantine-color-blue-6);--mantine-color-blue-light: rgba(116, 192, 252, 0.15);--mantine-color-blue-light-hover: rgba(116, 192, 252, 0.2);--mantine-color-blue-light-color: var(--mantine-color-blue-0);--mantine-color-blue-outline: var(--mantine-color-blue-1);--mantine-color-blue-outline-hover: rgba(208, 235, 255, 0.05);--mantine-color-cyan-filled: var(--mantine-color-cyan-5);--mantine-color-cyan-filled-hover: var(--mantine-color-cyan-6);--mantine-color-cyan-light: rgba(100, 218, 255, 0.15);--mantine-color-cyan-light-hover: rgba(100, 218, 255, 0.2);--mantine-color-cyan-light-color: var(--mantine-color-cyan-0);--mantine-color-cyan-outline: var(--mantine-color-cyan-1);--mantine-color-cyan-outline-hover: rgba(202, 245, 255, 0.05);--mantine-color-teal-filled: var(--mantine-color-teal-5);--mantine-color-teal-filled-hover: var(--mantine-color-teal-6);--mantine-color-teal-light: rgba(99, 230, 190, 0.15);--mantine-color-teal-light-hover: rgba(99, 230, 190, 0.2);--mantine-color-teal-light-color: var(--mantine-color-teal-0);--mantine-color-teal-outline: var(--mantine-color-teal-1);--mantine-color-teal-outline-hover: rgba(195, 250, 232, 0.05);--mantine-color-green-filled: var(--mantine-color-green-5);--mantine-color-green-filled-hover: var(--mantine-color-green-6);--mantine-color-green-light: rgba(134, 223, 148, 0.15);--mantine-color-green-light-hover: rgba(134, 223, 148, 0.2);--mantine-color-green-light-color: var(--mantine-color-green-0);--mantine-color-green-outline: var(--mantine-color-green-1);--mantine-color-green-outline-hover: rgba(215, 246, 220, 0.05);--mantine-color-lime-filled: var(--mantine-color-lime-5);--mantine-color-lime-filled-hover: var(--mantine-color-lime-6);--mantine-color-lime-light: rgba(192, 235, 117, 0.15);--mantine-color-lime-light-hover: rgba(192, 235, 117, 0.2);--mantine-color-lime-light-color: var(--mantine-color-lime-0);--mantine-color-lime-outline: var(--mantine-color-lime-1);--mantine-color-lime-outline-hover: rgba(233, 250, 200, 0.05);--mantine-color-yellow-filled: var(--mantine-color-yellow-5);--mantine-color-yellow-filled-hover: var(--mantine-color-yellow-6);--mantine-color-yellow-light: rgba(255, 201, 102, 0.15);--mantine-color-yellow-light-hover: rgba(255, 201, 102, 0.2);--mantine-color-yellow-light-color: var(--mantine-color-yellow-0);--mantine-color-yellow-outline: var(--mantine-color-yellow-1);--mantine-color-yellow-outline-hover: rgba(255, 238, 205, 0.05);--mantine-color-orange-filled: var(--mantine-color-orange-5);--mantine-color-orange-filled-hover: var(--mantine-color-orange-6);--mantine-color-orange-light: rgba(255, 192, 120, 0.15);--mantine-color-orange-light-hover: rgba(255, 192, 120, 0.2);--mantine-color-orange-light-color: var(--mantine-color-orange-0);--mantine-color-orange-outline: var(--mantine-color-orange-1);--mantine-color-orange-outline-hover: rgba(255, 232, 204, 0.05);--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-9) 0%, var(--mantine-color-cyan-7) 100%);--app-color-surface: #2e2e2e;}
:root[data-mantine-color-scheme="light"], :host([data-mantine-color-scheme="light"]){--mantine-color-anchor: var(--mantine-color-text);--mantine-color-dimmed: #495057;--mantine-color-red-light: rgba(224, 40, 41, 0.1);--mantine-color-red-light-hover: rgba(224, 40, 41, 0.12);--mantine-color-red-outline-hover: rgba(224, 40, 41, 0.05);--mantine-color-violet-light: rgba(176, 9, 255, 0.1);--mantine-color-violet-light-hover: rgba(176, 9, 255, 0.12);--mantine-color-violet-outline-hover: rgba(176, 9, 255, 0.05);--mantine-color-indigo-light: rgba(45, 42, 223, 0.1);--mantine-color-indigo-light-hover: rgba(45, 42, 223, 0.12);--mantine-color-indigo-outline-hover: rgba(45, 42, 223, 0.05);--mantine-color-cyan-light: rgba(0, 194, 255, 0.1);--mantine-color-cyan-light-hover: rgba(0, 194, 255, 0.12);--mantine-color-cyan-outline-hover: rgba(0, 194, 255, 0.05);--mantine-color-green-light: rgba(63, 204, 84, 0.1);--mantine-color-green-light-hover: rgba(63, 204, 84, 0.12);--mantine-color-green-outline-hover: rgba(63, 204, 84, 0.05);--mantine-color-yellow-light: rgba(255, 169, 15, 0.1);--mantine-color-yellow-light-hover: rgba(255, 169, 15, 0.12);--mantine-color-yellow-outline-hover: rgba(255, 169, 15, 0.05);--app-color-surface: #f1f3f5;--app-cta-gradient: linear-gradient(90deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-5) 100%);}</style><style data-mantine-styles="classes">@media (max-width: 35.99375em) {.mantine-visible-from-xs {display: none !important;}}@media (min-width: 36em) {.mantine-hidden-from-xs {display: none !important;}}@media (max-width: 47.99375em) {.mantine-visible-from-sm {display: none !important;}}@media (min-width: 48em) {.mantine-hidden-from-sm {display: none !important;}}@media (max-width: 61.99375em) {.mantine-visible-from-md {display: none !important;}}@media (min-width: 62em) {.mantine-hidden-from-md {display: none !important;}}@media (max-width: 74.99375em) {.mantine-visible-from-lg {display: none !important;}}@media (min-width: 75em) {.mantine-hidden-from-lg {display: none !important;}}@media (max-width: 87.99375em) {.mantine-visible-from-xl {display: none !important;}}@media (min-width: 88em) {.mantine-hidden-from-xl {display: none !important;}}</style><div style="position:absolute;top:0rem" class=""></div><div style="max-width:var(--container-size-xl);height:100%;min-height:0rem" class=""><style data-mantine-styles="inline">.__m__-_R_5ub_{--grid-gutter:0rem;}</style><div style="height:100%;min-height:0rem" class="m_410352e9 mantine-Grid-root __m__-_R_5ub_"><div class="m_dee7bd2f mantine-Grid-inner" style="height:100%"><style data-mantine-styles="inline">.__m__-_R_rdub_{--col-flex-grow:auto;--col-flex-basis:91.66666666666667%;--col-max-width:91.66666666666667%;}@media(min-width: 48em){.__m__-_R_rdub_{--col-flex-grow:auto;--col-flex-basis:83.33333333333334%;--col-max-width:83.33333333333334%;}}</style><div style="min-width:0rem;height:100%;min-height:0rem;display:flex" class="m_96bdd299 mantine-Grid-col __m__-_R_rdub_"><style data-mantine-styles="inline">.__m__-_R_6qrdub_{margin-top:0rem;padding-inline:var(--mantine-spacing-xs);width:100%;}@media(min-width: 48em){.__m__-_R_6qrdub_{margin-top:var(--mantine-spacing-xl);width:80%;}}@media(min-width: 62em){.__m__-_R_6qrdub_{padding-inline:var(--mantine-spacing-xl);}}</style><div style="margin-inline:auto;max-width:var(--mantine-breakpoint-xl)" class="__m__-_R_6qrdub_"><div style="color:var(--mantine-color-dimmed)" class="m_4451eb3a mantine-Center-root" data-inline="true"><div style="--ti-size:var(--ti-size-xs);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;margin-inline-end:calc(0.125rem * var(--mantine-scale));color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="xs"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-lock "><path d="M5 13a2 2 0 0 1 2 -2h10a2 2 0 0 1 2 2v6a2 2 0 0 1 -2 2h-10a2 2 0 0 1 -2 -2v-6"></path><path d="M11 16a1 1 0 1 0 2 0a1 1 0 0 0 -2 0"></path><path d="M8 11v-4a4 4 0 1 1 8 0v4"></path></svg></div><p style="font-size:var(--mantine-font-size-sm)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Жизнь программиста</p></div><h1 style="--title-fw:var(--mantine-h1-font-weight);--title-lh:var(--mantine-h1-line-height);--title-fz:var(--mantine-h1-font-size);margin-bottom:var(--mantine-spacing-xl)" class="m_8a5d1357 mantine-Title-root" data-order="1">Теория: Неустаревающие знания</h1><script type="application/ld+json">{"@context":"https://schema.org","@type":"LearningResource","name":"Неустаревающие знания","inLanguage":"ru","isPartOf":{"@type":"LearningResource","name":"Жизнь программиста"},"isAccessibleForFree":"False","hasPart":{"@type":"WebPageElement","isAccessibleForFree":"False","cssSelector":".paywalled"}}</script><div class=""><div style="--alert-color:var(--mantine-color-indigo-light-color);margin-bottom:var(--mantine-spacing-lg);font-size:var(--mantine-font-size-lg)" class="m_66836ed3 mantine-Alert-root" id="mantine-_R_remqrdub_" role="alert" aria-describedby="mantine-_R_remqrdub_-body" aria-labelledby="mantine-_R_remqrdub_-title"><div class="m_a5d60502 mantine-Alert-wrapper"><div class="m_667f2a6a mantine-Alert-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-rocket "><path d="M4 13a8 8 0 0 1 7 7a6 6 0 0 0 3 -5a9 9 0 0 0 6 -8a3 3 0 0 0 -3 -3a9 9 0 0 0 -8 6a6 6 0 0 0 -5 3"></path><path d="M7 14a6 6 0 0 0 -3 6a6 6 0 0 0 6 -3"></path><path d="M14 9a1 1 0 1 0 2 0a1 1 0 1 0 -2 0"></path></svg></div><div class="m_667c2793 mantine-Alert-body"><div class="m_6a03f287 mantine-Alert-title"><span id="mantine-_R_remqrdub_-title" class="m_698f4f23 mantine-Alert-label">Полный доступ к материалам</span></div><div id="mantine-_R_remqrdub_-body" class="m_7fa78076 mantine-Alert-message"><div style="--group-gap:var(--mantine-spacing-md);--group-align:center;--group-justify:space-between;--group-wrap:wrap" class="m_4081bf90 mantine-Group-root"><p class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Зарегистрируйтесь и получите доступ к этому и десяткам других курсов</p><a style="--button-height:var(--button-height-xs);--button-padding-x:var(--button-padding-x-xs);--button-fz:var(--mantine-font-size-xs);--button-bg:linear-gradient(45deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-filled) 100%);--button-hover:linear-gradient(45deg, var(--mantine-color-blue-filled) 0%, var(--mantine-color-cyan-filled) 100%);--button-color:var(--mantine-color-white);--button-bd:none" class="mantine-focus-auto mantine-active m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root" data-variant="gradient" data-size="xs" href="/u/new"><span class="m_80f1301b mantine-Button-inner"><span class="m_811560b9 mantine-Button-label">Зарегистрироваться</span></span></a></div></div></div></div></div><div style="margin-bottom:var(--mantine-spacing-xl)" class=""><div class="ratio ratio-16x9"><iframe width="100%" height="auto" src="//player.vimeo.com/video/154601408" loading="lazy" allowFullScreen="" title="video"></iframe></div></div><div class="paywalled m_d08caa0 mantine-Typography-root"><p>Мир вокруг нас непрерывно меняется, и точно так же каждый день меняются технологии, причем иногда настолько сильно, что освоенное сегодня через год уже может быть не нужно. Но если посмотреть глубже, то можно увидеть, что базовые, фундаментальные знания, которые используются в большинстве современных технологий, появились очень давно и практически не изменились. В этом уроке мы поговорим о том, какие области фундаментальных знаний нужно прокачивать, чтобы стать хорошим программистом, а в конце перечислим и некоторые инструменты, знание которых необходимо каждому профессиональному разработчику.</p>
<h2 id="heading-2-1">Устаревание технологий</h2>
<p>Важно помнить, что <strong>фундамент не устаревает</strong>, а остальное быстро добирается в процессе. Любой новый фреймворк, подход в разработке, какая-либо новая методология или язык программирования учатся достаточно быстро, если вы в принципе владеете базой. Но кроме каких-то точных наук, кроме того, чтобы заниматься непосредственно программированием, нужно поработать над своим мозгом. И этот процесс включает в себя несколько направлений.</p>
<h2 id="heading-2-2">Логическое мышление</h2>
<p>Первое — это логическое мышление, мыслительный процесс, при котором человек использует логические понятия и конструкции. Этому процессу свойственна доказательность, рассудительность, и его целью является получение обоснованного вывода из имеющихся предпосылок. Логическое мышление является крайне важным для любого программиста, и существует множество способов его прокачивать.</p>
<h3 id="heading-3-3">Математика</h3>
<p>Первый способ развития логического мышления — это математика. Просто изучение математики в любом её представлении, в любом направлении отлично развивает способность правильно мыслить. Те, кто раньше начинают заниматься математикой, имеют преимущество перед остальными. Можно изучать её и спустя 20 лет после окончания института, пусть это действительно может быть сложнее, потому что становится трудно найти время усвоить тот объём знаний, который даётся в учебном заведении. Но в целом это возможно, и на базовом уровне все необходимые разделы математики, полезные для развития мозга, доступны для изучения в виде бесплатных курсов на огромном количестве ресурсов, в том числе на русском языке. Можно легко найти информацию, что непосредственно стоит учить, какие книги читать — и это нужно делать, независимо от изучения программирования.</p>
<h3 id="heading-3-4">Логические задачи</h3>
<p>Второй способ развития логического мышления — это решение логических задач. Есть отличный сайт с огромным количеством задач разного уровня: <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="http://www.braingames.ru" rel="noopener noreferrer" target="_blank">www.braingames.ru</a>. На нём сидит много людей, есть рейтинги, и это — отличный способ поломать мозг. При этом, нужно понимать, что есть люди, которые очень круты в решении логических задачах, но при этом у них не очень получается быть программистами, поэтому развитие должно быть многостороннее.</p>
<h3 id="heading-3-5">Алгоритмы</h3>
<p>Третий способ — это изучение алгоритмов. Речь именно о тех алгоритмах, которые рекомендуется изучать при обучении программированию или чтобы войти в эту профессию. Они бывают разные, некоторые очень сложные, и бывает так, что без очень сильной математики не разобраться, но в целом на базовом уровне в различных направлениях алгоритмы достаточно простые. Знание и понимание принципов работы алгоритмов действительно очень сильно помогает. В <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://ru.hexlet.io/pages/recommended-books" rel="noopener noreferrer" target="_blank">рекомендуемых книгах</a> Хекслета есть отличная <a style="text-decoration:underline" class="mantine-focus-auto m_849cf0da m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="https://www.litres.ru/aditya-bhargava/grokaem-algoritmy-illustrirovannoe-posobie-dlya-p-39158380/" rel="noopener noreferrer" target="_blank">книга по алгоритмам</a></p>
<h2 id="heading-2-6">Абстрактное мышление</h2>
<p>Следующий важный аспект базовых знаний — это абстрактное мышление, мыслительный процесс, при котором человек умеет абстрагировать ситуацию от незначительных деталей и взглянуть на неё в целом. Абстрактное мышление включает в себя три формы: понятие, суждение, умозаключение.</p>
<p>Абстрактное мышление обладает следующими признаками:</p>
<ul>
<li>
<p>способность понять окружающий мир без воздействия на органы чувств</p>
<p>Просто опираясь на предыдущие знания, можно получать новую информацию и делать выводы о каких-то новых процессах, которые не видны и не осязаемы. Именно так решаются задачи по математике, физике, химии в школе и институте.</p>
</li>
<li>
<p>обобщение для выявления закономерностей</p>
<p>Обобщение, фактически являющееся сутью программирования, когда мы говорим про создание каких-то больших программных комплексов — это возможность абстрагироваться, создавать максимально изолированные системы и строить правильные интерфейсы между их частями для обеспечения взаимодействия между ними. Существует понятие "барьеры абстракции" — когда слой за слоем строятся уровни абстракции, и на каждом более высоком уровне не видно деталей нижнего уровня — это важнейший принцип, который позволяет удерживать в голове систему и работать с ней. Человек может удерживать в голове 7 плюс-минус 2 вещи, поэтому оперирование большим количеством понятий одновременно — это взрыв мозга.</p>
</li>
</ul>
<p>Абстрактное мышление развивается примерно так же, как и логическое, и часто они взаимосвязаны, но есть и небольшие отличия.</p>
<h3 id="heading-3-7">Точные науки</h3>
<p>Точные науки — это не только математика, но и физика, химия и даже некоторые разделы биологии.</p>
<h3 id="heading-3-8">Логические и интеллектуальные игры</h3>
<p>Сюда входит тот же самый braingames, при этом для развития абстрактного мышления очень здорово подходит и игра в шахматы, шашки или даже в преферанс.</p>
<h3 id="heading-3-9">Программирование :)</h3>
<p>Ну и само программирование способствует развитию абстрактного мышления. Однако нужно не забывать про другие способы и использовать их в комплексе.</p>
<h2 id="heading-2-10">Качаем знания</h2>
<p><img style="--image-object-fit:contain;width:auto" class="m_9e117634 mantine-Image-root" src="/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6NjY0NCwicHVyIjoiYmxvYl9pZCJ9fQ==--4fed89765dd78a52b52f2319a56ece839fd80ecf/knowledge.jpg" alt="Знания, которые не устаревают" loading="lazy"/></p>
<p>Теперь разберёмся в том, какими знаниями нужно обладать разработчику. Сейчас будет много новых концепций — совсем не обязательно знать их заранее, до начала карьеры. То, что здесь будет описано — это тот фундамент, который либо приобретается в университете, если с ним повезло и уже учась там, человек понимал, что будет программистом и пытался по максимуму выхватывать эти знания. Во всех остальных случаях нужно добирать в процессе в той или иной мере. Знать всё идеально невозможно, но чем больше направлений из перечисленных ниже будет освоено — тем более профессиональным разработчиком можно стать и тем более сложные задачи решать.</p>
<h3 id="heading-3-11">Фундамент: математическая подготовка</h3>
<h4 id="heading-4-12">Теория множеств</h4>
<p>Особенно важная дисциплина в работе с базами данных. SQL построен на реляционной алгебре, и в базах активно используются понятия теории множеств. Таблицы, выборки — всё это берёт начало в теории множеств.</p>
<h4 id="heading-4-13">Логика</h4>
<p>Логика — это то, с чем сталкивается каждый программист каждый день в своей работе. Логика является важнейшей основой программирования — свой путь в профессии нужно начинать с её изучения.</p>
<h4 id="heading-4-14">Дискретная математика</h4>
<p>Дискретная математика включает в себя достаточно много разделов: начиная от графов и заканчивая автоматами. Большинство разделов дискретной математики так или иначе воплощено в информатике.</p>
<h4 id="heading-4-15">Лямбда-исчисление</h4>
<p>И последнее — это лямбда-исчисление, которое отлично помогает в развитии абстрактного мышления. Представьте себе систему, в которой числа и операции над ними (арифметика) это функции. Благодаря лямбда-исчислению такую систему можно создать и она будет вести себя абсолютно так, как ведут себя обычные числа.</p>
<p>Кроме того, с понятием лямбда-функций вы столкнетесь практически во всех языках.</p>
<h3 id="heading-3-16">Фундамент: информатика</h3>
<p>Ближайшая к компьютерам область знаний — это информатика. И нас интересуют следующие ниже разделы информатики.</p>
<h4 id="heading-4-17">Системы счисления</h4>
<p>Самое базовое понятие — системы счисления — это системы записи чисел с помощью определенного набора цифр. Почему они так важны? В основе программ и компьютеров лежит двоичная система счисления, но в повседневной жизни мы используем десятеричную систему счисления. Обязательно нужно знать и понимать, как устроены системы счисления и уметь переводить числа из одной системы счисления в другую.</p>
<h4 id="heading-4-18">Структуры данных</h4>
<p>Структуры данных в информатике — это способ представления информации, с помощью которого её отдельно взятые элементы образуют нечто единое. В языках программирования реализовано несколько распространенных структур данных, таких как массивы, числа, строки, файлы. Но и кроме них существует множество абстрактных структур данных, которые могут создаваться самими разработчиками с использованием средств языка.</p>
<h4 id="heading-4-19">Алгоритмы</h4>
<p>Наряду с системами счисления и структурами данных алгоритмы — основа основ информатики. Для того, чтобы быть экспертом в алгоритмах, нужно не только вдоль и поперёк изучить сами алгоритмы, но и очень хорошо знать математику — а на это уйдёт приличное количество времени. Хорошая новость — для начала этого и не требуется. Главное — понимать базовые алгоритмы на базовых структурах данных и вообще просто иметь понятие о том, что они из себя представляют и как работают. Какие-то конкретные алгоритмы приходят уже в процессе работы или обучения. Не бывает такого, что программист заранее знает все возможные алгоритмы и может запросто выдать нужный алгоритм, подходящий для конкретной ситуации.</p>
<h3 id="heading-3-20">Фундамент: парадигмы</h3>
<p>Теперь поговорим о языках программирования и о том, какие подходы к программированию в них реализованы. Такие подходы называются парадигмами программирования. Парадигма программирования влияет на всё, что происходит в вашем коде: то, как строится программа, на каких принципах она работает. Изучение парадигм помогает стать намного более сильным разработчиком, чем изучение конкретных особенностей конкретного языка или просто переход из одного языка в другой язык той же парадигмы.</p>
<p>Существует множество различных парадигм, но на самом верхнем уровне — 3 базовых: императивная, функциональная, логическая.</p>
<h4 id="heading-4-21">Императивное программирование</h4>
<p>Императивное программирование описывает, <strong>как</strong> решить задачу и представить результат, используя инструкции (команды). Большинство мейнстримовых языков являются императивными языками программирования: это Java, это C#, это все скриптовые языки, Ruby, PHP, Python и многие другие.</p>
<h4 id="heading-4-22">Функциональное (декларативное) программирование</h4>
<p>Есть очень мощная парадигма, которая является противоположностью императивного программирования — это функциональное (или декларативное) программирование. Эта парадигма описывает, <strong>что</strong> представляет собой задача и ожидаемый результат её решения. В неё входят такие языки как Clojure, Erlang, Haskell, Scala и многие другие.</p>
<h4 id="heading-4-23">Логическое программирование</h4>
<p>Язык логического программирования, с которым многие сталкивались в институте, называется Prolog — тоже очень хороший пример того, как можно по-другому смотреть на вещи.</p>
<h3 id="heading-3-24">Фундамент: железо</h3>
<h4 id="heading-4-25">Архитектура компьютера</h4>
<p>Если говорить про железо, то здесь важно понимание архитектуры компьютера, хотя, опять же, всё очень сильно зависит от области разработки. Большинству прикладных программистов, которые работают в веб-сфере, разработке десктопных, мобильных приложений нужен просто общий обзор, понимание того, что такое регистры, как работает процесс взаимодействия с оперативной памятью. Всё перечисленное можно почерпнуть из одной-единственной книги, которая называется "Код: тайный язык информатики" Чарльза Петцольда. Эта книга рекомендуется к прочтению — она читается как захватывающий роман, и действительно даст хорошее понимание того, как устроен компьютер и даже как работает Assembler.</p>
<h3 id="heading-3-26">Фундамент: софт</h3>
<p>Перейдем уже непосредственно к тому, как устроен современный софт. Вот что вам нужно знать.</p>
<h4 id="heading-4-27">Операционные системы</h4>
<p>Нужно очень хорошо понимать принципы работы операционных систем и какую роль они выполняют, поскольку при работе с любым языком программирования всё взаимодействие всегда происходит в рамках одной или нескольких операционных систем. У многих программистов, особенно после университета, складывается такое ощущение и мнение, что знание операционных систем важно только для системных программистов, которые пишут софт, связанный прямо с операционной системой и работающий в рамках неё. Это не так. Огромное количество вопросов, которые задают новички, чаще всего связаны с частными случаями каких-то базовых вещей, находящихся внутри операционной системы. Изучение и понимание какой-нибудь одной базовой вещи может занять всего лишь день, но в дальнейшем способно дать огромную фору перед другими, поскольку позволит понимать целый пласт проблем, с которыми в конечном итоге сталкивается разработчик. Такие проблемы каждый раз могут немного отличаться друг от друга, но быть основаны на одной и той же особенности операционной системы. Те, кто не усвоил эту особенность, не видят связи и обречены постоянно тратить время на поиск решения. Поэтому знание операционных систем — важное условие профессионализма разработчика. Существует множество книг, посвященных операционным системам, которые дают понимание их базовых принципов, не копая глубоко.</p>
<h4 id="heading-4-28">Сети и протоколы</h4>
<p>В век интернета в своей работе разработчик часто сталкивается с сетями и различными протоколами. Нужно иметь представление об основных протоколах, зачем они нужны, и как работают.</p>
<h4 id="heading-4-29">Базы данных</h4>
<p>Нельзя забывать и про базы данных, поскольку работать придётся с огромными объемами информации, которые организуются, хранятся и которыми оперируют именно базы данных.</p>
<h4 id="heading-4-30">Компиляторы и интерпретаторы</h4>
<p>Помимо понимания отличия компиляторов от интерпретаторов, здесь необходимо знать, как исполняется код, как можно взаимодействовать с ним, как идёт отработка ошибок. Плюс сюда входят еще такие вещи как потоки и многое-многое другое.</p>
<h3 id="heading-3-31">Разное</h3>
<p>Есть еще множество разных инструментов и навыков, на которые нужно обратить внимание. Вот лишь самые распространенные.</p>
<h4 id="heading-4-32">Владение командной строкой</h4>
<p>Важно владеть командной строкой и работать с ней быстро и эффективно, знать как и какие команды в ней можно вызывать.</p>
<h4 id="heading-4-33">Системы контроля версий</h4>
<p>Любой современный разработчик должен знать, что такое системы контроля версий и как управлять кодом — от этого никуда не деться. Стандартом считается Git, и без этого инструмента, в принципе, нельзя вести разработку.</p>
<h4 id="heading-4-34">Автоматизированное тестирование</h4>
<p>Кроме этого, важным понятием является автоматизированное тестирование, и на определенном уровне разработки, с определенного уровня проектов без тестирования обходиться вообще нельзя. Автоматизированное тестирование — очень простая техника, которая изучается за короткое время и после этого используется всю оставшуюся жизнь.</p>
<h4 id="heading-4-35">Управление конфигурацией</h4>
<p>Существует несколько систем управления конфигурацией, таких как Ansible. Они используются для автоматизации настройки и развертывания программного обеспечения и позволяют сэкономить кучу времени для более насущных задач.</p></div></div></div></div><style data-mantine-styles="inline">.__m__-_R_1bdub_{--col-flex-grow:auto;--col-flex-basis:8.333333333333334%;--col-max-width:8.333333333333334%;}@media(min-width: 48em){.__m__-_R_1bdub_{--col-flex-grow:auto;--col-flex-basis:16.666666666666668%;--col-max-width:16.666666666666668%;}}</style><div style="min-width:0rem;height:100%;min-height:0rem" class="m_96bdd299 mantine-Grid-col __m__-_R_1bdub_"><div style="margin-inline:var(--mantine-spacing-xs)" class="mantine-visible-from-sm"><a style="--button-color:var(--mantine-color-white);margin-bottom:var(--mantine-spacing-lg);text-decoration:none" class="mantine-focus-auto m_849cf0da mantine-focus-auto m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses/prog-life/lessons/knowledge/finish_unit?unit=theory" data-disabled="true" data-block="true" disabled=""><span class="m_80f1301b mantine-Button-inner"><span class="m_811560b9 mantine-Button-label"><span style="margin-inline-end:var(--mantine-spacing-xs)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Дальше</span>→</span></span></a><a style="padding-inline:0rem" class="mantine-focus-auto m_f0824112 mantine-NavLink-root m_87cf2631 mantine-UnstyledButton-root"><span class="m_690090b5 mantine-NavLink-section" data-position="left"><div style="--ti-size:var(--ti-size-sm);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-list-numbers "><path d="M11 6h9"></path><path d="M11 12h9"></path><path d="M12 18h8"></path><path d="M4 16a2 2 0 1 1 4 0c0 .591 -.5 1 -1 1.5l-3 2.5h4"></path><path d="M6 10v-6l-2 2"></path></svg></div></span><div class="m_f07af9d2 mantine-NavLink-body"><span class="m_1f6ac4c4 mantine-NavLink-label">Навигация по теме</span><span class="m_57492dcc mantine-NavLink-description">Теория</span></div><span class="m_690090b5 mantine-NavLink-section" data-position="right"></span></a><div style="margin-block:var(--mantine-spacing-lg)" class="m_3eebeb36 mantine-Divider-root" data-orientation="horizontal" role="separator"></div><div style="margin-block:var(--mantine-spacing-lg)" class=""><div style="justify-content:space-between;margin-bottom:calc(0.1875rem * var(--mantine-scale));color:var(--mantine-color-dimmed);font-size:var(--mantine-font-size-xs)" class="m_8bffd616 mantine-Flex-root __m__-_R_qimrbdub_"><p style="font-size:var(--mantine-font-size-xs)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">Завершено</p><p style="font-size:var(--mantine-font-size-xs)" class="mantine-focus-auto m_b6d8b162 mantine-Text-root">0 / 5</p></div><div style="--progress-size:var(--progress-size-sm)" class="m_db6d6462 mantine-Progress-root" data-size="sm"><div style="--progress-section-size:0%;--progress-section-color:var(--mantine-color-gray-filled)" class="m_2242eb65 mantine-Progress-section" role="progressbar" aria-valuemax="100" aria-valuemin="0" aria-valuenow="0" aria-valuetext="0%"></div></div></div><button style="padding-inline:0rem" class="mantine-focus-auto m_f0824112 mantine-NavLink-root m_87cf2631 mantine-UnstyledButton-root" type="button"><span class="m_690090b5 mantine-NavLink-section" data-position="left"><div style="--ti-size:var(--ti-size-sm);--ti-bg:transparent;--ti-color:var(--mantine-color-indigo-light-color);--ti-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;color:inherit" class="m_7341320d mantine-ThemeIcon-root" data-variant="transparent" data-size="sm"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-message "><path d="M8 9h8"></path><path d="M8 13h6"></path><path d="M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12"></path></svg></div></span><div class="m_f07af9d2 mantine-NavLink-body"><span class="m_1f6ac4c4 mantine-NavLink-label">Обсуждения (архив)</span><span class="m_57492dcc mantine-NavLink-description"></span></div></button><div style="--toc-bg:var(--mantine-color-blue-light);--toc-color:var(--mantine-color-blue-light-color);--toc-size:var(--mantine-font-size-sm);--toc-radius:var(--mantine-radius-sm);margin-top:var(--mantine-spacing-xl)" class="m_bcaa9990 mantine-TableOfContents-root" data-variant="light" data-size="sm"></div></div><div class="mantine-hidden-from-sm"><div style="--stack-gap:0rem;--stack-align:stretch;--stack-justify:flex-start" class="m_6d731127 mantine-Stack-root"><a style="--button-color:var(--mantine-color-white);margin-bottom:var(--mantine-spacing-xs);padding:0rem;text-decoration:none" class="mantine-focus-auto m_849cf0da mantine-focus-auto m_77c9d27d mantine-Button-root m_87cf2631 mantine-UnstyledButton-root m_b6d8b162 mantine-Text-root mantine-Anchor-root" data-underline="hover" href="/courses/prog-life/lessons/knowledge/finish_unit?unit=theory" data-disabled="true" data-block="true" disabled=""><span class="m_80f1301b mantine-Button-inner"><span class="m_811560b9 mantine-Button-label">→</span></span></a><button style="--ai-size:var(--ai-size-sm);--ai-bg:transparent;--ai-hover:var(--mantine-color-indigo-light-hover);--ai-color:var(--mantine-color-indigo-light-color);--ai-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;padding-block:var(--mantine-spacing-lg);color:inherit;width:100%" class="mantine-focus-auto m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="subtle" data-size="sm" data-disabled="true" type="button" disabled=""><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-list-numbers "><path d="M11 6h9"></path><path d="M11 12h9"></path><path d="M12 18h8"></path><path d="M4 16a2 2 0 1 1 4 0c0 .591 -.5 1 -1 1.5l-3 2.5h4"></path><path d="M6 10v-6l-2 2"></path></svg></span></button><button style="--ai-size:var(--ai-size-sm);--ai-bg:transparent;--ai-hover:var(--mantine-color-indigo-light-hover);--ai-color:var(--mantine-color-indigo-light-color);--ai-bd:calc(0.0625rem * var(--mantine-scale)) solid transparent;padding-block:var(--mantine-spacing-lg);color:inherit;width:100%" class="mantine-focus-auto mantine-active m_8d3f4000 mantine-ActionIcon-root m_87cf2631 mantine-UnstyledButton-root" data-variant="subtle" data-size="sm" type="button"><span class="m_8d3afb97 mantine-ActionIcon-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.2" stroke-linecap="round" stroke-linejoin="round" class="tabler-icon tabler-icon-message "><path d="M8 9h8"></path><path d="M8 13h6"></path><path d="M18 4a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-5l-5 3v-3h-2a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3h12"></path></svg></span></button></div></div></div></div></div></div></div>
</main>
<footer class="bg-dark fw-light text-light px-3 py-5">
<div class="row small">
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 mb-3">Хекслет</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/about">О нас</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/testimonials">Отзывы</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://b2b.hexlet.io" role="button">Корпоративное обучение</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/blog">Блог</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/qna">Вопросы и ответы</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/glossary">Глоссарий</a>
</li>
<li>
<span class="nav-link link-light py-1 ps-0 external-link" data-href="https://help.hexlet.io" data-target="_blank" role="button">Справка</span>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" target="_blank" rel="noopener noreferrer" href="/map">Карта сайта</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5 fw-normal mb-3">Направления</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_devops">DevOps
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_data_analytics">Аналитика
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_backend_development">Бэкенд
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_programming">Программирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_testing">Тестирование
</a></li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/courses_front_end_dev">Фронтенд
</a></li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Профессии</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/devops-engineer-from-scratch">DevOps-инженер с нуля</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/go">Go-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/java">Java-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python">Python-разработчик </a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/data-analytics">Аналитик данных</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/qa-engineer">Инженер по ручному тестированию</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php">РНР-разработчик</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/frontend">Фронтенд-разработчик</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-6 col-md-3">
<div class="h5">Навыки</div>
<ul class="list-unstyled">
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/python-django-developer">Django</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/docker">Docker</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/php-laravel-developer">Laravel</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/postman">Postman</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-react-developer">React</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/js-rest-api">REST API в Node.js</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/spring-boot">Spring Boot</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/programs/typescript">Typescript</a>
</li>
</ul>
</div>
</div>
<hr>
<div class="row">
<div class="col-12 col-sm-4 col-md-2">
<div class="fs-4">
<ul class="list-unstyled d-flex">
<li class="me-3">
<a aria-label="Telegram" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://t.me/hexlet_ru"><span class="bi bi-telegram"></span>
</a></li>
<li>
<a aria-label="Youtube" target="_blank" class="link-light" rel="noopener noreferrer nofollow" href="https://www.youtube.com/user/HexletUniversity"><span class="bi bi-youtube"></span>
</a></li>
</ul>
</div>
<div class="mb-2 d-flex flex-column">
<a class="link-light text-decoration-none" rel="nofollow" href="mailto:support@hexlet.io">support@hexlet.io</a>
<a class="link-light text-decoration-none py-2" target="_blank" href="https://t.me/hexlet_help_bot">t.me/hexlet_help_bot</a>
</div>
<ul class="list-unstyled d-flex">
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://hexlet.io/locale/switch?new_locale=en" data-target="_self" role="button"><span class="my-auto">EN</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 opacity-100 external-link" rel="nofollow" data-href="https://ru.hexlet.io/locale/switch?new_locale=ru" data-target="_self" role="button"><span class="my-auto">RU</span>
</span></li>
<li class="me-3">
<span class="link-light text-decoration-none opacity-50 x-font-size-18 external-link" rel="nofollow" data-href="https://kz.hexlet.io/locale/switch?new_locale=kz" data-target="_self" role="button"><span class="my-auto">KZ</span>
</span></li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<ul class="list-unstyled fs-4">
<li class="mb-3">
<a class="link-light text-decoration-none" href="tel:8%20800%20100%2022%2047">8 800 100 22 47</a>
<span class="d-block opacity-50 small">бесплатно по РФ</span>
</li>
<li>
<a class="link-light text-decoration-none" href="tel:%2B7%20495%20085%2021%2062">+7 495 085 21 62</a>
<span class="d-block opacity-50 small">бесплатно по Москве</span>
</li>
</ul>
</div>
<div class="col-12 col-sm-4 col-md-3">
<div class="small mb-3">Образовательные услуги оказываются на основании Л035-01298-77/01989008 от 14.03.2025</div>
<ul class="list-unstyled small">
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/legal">Правовая информация</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/offer">Оферта</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/license">Лицензия</a>
</li>
<li>
<a class="nav-link link-light py-1 ps-0" href="/pages/contacts">Контакты</a>
</li>
</ul>
</div>
<div class="col-12 col-sm-12 col-md-4 small">
<div class="mb-2">
<div>ООО «<a href="/" class="text-decoration-none link-light">Хекслет Рус</a>»</div>
<div>108813 г. Москва, вн.тер.г. поселение Московский,</div>
<div>г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3</div>
<div>ОГРН 1217300010476</div>
<div>ИНН 7325174845</div>
</div>
<hr>
<div>АНО ДПО «<a href="/" class="text-decoration-none link-light">Учебный центр «Хекслет</a>»</div>
<div>119331 г. Москва, вн. тер. г. муниципальный округ</div>
<div>Ломоносовский, пр-кт Вернадского, д. 29</div>
<div>ОГРН 1247700712390</div>
<div>ИНН 7736364948</div>
</div>
</div>
</footer>
<div id="root-assistant-offcanvas"></div>
<script src="/vite/assets/assistant-Bukl1lYy.js" crossorigin="anonymous" type="module"></script><link rel="modulepreload" href="/vite/assets/chunk-DsPFFUou.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/init-BrRXra1y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/ErrorFallbackBlock-naDSYSy9.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/MarkdownBlock-DbyKWoR_.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/gon-D3e4yh1x.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/mantine-CGMYrt2Y.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/shiki-V011pkdv.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/utils-DRqSHbQE.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/routes-CCH8ilKF.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-XR8Qr8kR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dist-GCHh59xr.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/Box-B5-OOzBf.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/notifications.store-C-3AFSMn.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useIsomorphicEffect-HJ6VK0D3.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/lib-KSp6QbZ0.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/axios-BEvgo0ym.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/classnames-l6ipYlLR.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/dayjs.min-BkKovM-s.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/debounce-jMQ_Cf4f.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/i18next-BlSq9s7B.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/client-U9M77rxp.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-dom-DaLxUz_h.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/useTranslation-Bx1Cdrkz.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/compiler-runtime-6XxiPFnt.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/jsx-runtime-CwjcCKJi.js" as="script" crossorigin="anonymous">
<link rel="modulepreload" href="/vite/assets/react-CkL4ZRHB.js" as="script" crossorigin="anonymous">
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v67327c56f0bb4ef8b305cae61679db8f1769101564043" integrity="sha512-rdcWY47ByXd76cbCFzznIcEaCN71jqkWBBqlwhF1SY7KubdLKZiEGeP7AyieKZlGP9hbY/MhGrwXzJC/HulNyg==" data-cf-beacon='{"version":"2024.11.0","token":"d11015b65d11429ea6b4a2ef37dd7e0b","server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html>