Всем привет, в этом видео мы поговорим о том, что должен знать каждый программист. Но сначала стоит определиться с тем, кого мы считаем программистом. Сегодня очень развита практика вранья в резюме, я лично знаю кейсы людей, которые устроились на работу программистом, при этом не написав ни одной строчки кода. С другой стороны, человек, который никогда программистом не работал, но с... сделал кучу коммитов в open-source проекты, очевидно, программист.
Вообще, на эту тему есть много мнений, как вариант, что программистом человек становится после того, как его программами начинает пользоваться кто-то кроме него. В любом случае, говоря о программисте, мы имеем в виду человека, владеющего нужным инструментарием и определенной компетенцией. Сегодня кто угодно может создать с вое приложение, игру, сайт и вообще любую программу с нулевой компетенцией в программировании.
Но любая такая программа будет 100% уязвима к хакерским атакам и плохо масштабируема. Это два самых важных критерия, почему недостаточно просто писать хоть какой-то код и называться программистом. Представьте себе ситуацию, когда разработчик приложения, которым вы пользуетесь, допустил ошибку в коде, из-за которой были слиты ваши данные.
Этот человек смог написать программу, но из-за того, что он не умеет работать с базами данных и не позаботился о защите от SQL-инъекций, базу смогли украсть. Представим, что он еще и хранил все данные в незашифрованном виде и получается, что он вас жестко подставил. Можно ли назвать такого человека программистом?
Конечно, нет. Точно так же, как нельзя назвать хирургом человека, который умеет только резать и сшивать. А с тем, как работают органы, он решил не разбираться, потому что а зачем?
Вот, к сожалению, сегодня очень много людей в программировании скипают часть с изучением базы и сразу учат фреймворки и библиотеки, пытаясь слепить из этого какие-то говно приложения, н е вникая в суть того, как это должно работать. Первое, что надо знать профессиональному программисту, это базовая информатика, чтобы понимать, как работает измерение информации, почему одним битом можно передать два значения, и так по нарастающей до теории сложности вычислений. них вы будете болтаться в программировании с тотальным непониманием того, что вы вообще делаете.
На этот нулевой уровень познания программирования стоит еще добавить математику, а именно понимание как работают системы исчисления. Достаточно знать про двоичную и шестнадцатилетнюю систему, а еще надо знать комбинаторику. В принципе все, для геймдева еще нужно знать векторную алгебру. Следующий уровень это выучить свой первый язык программирования, иначе программировать не получится. Есть конечно всякие ноукод решения, где вы якобы можете что-то разработать без написания кода, но на практике они вообще не гибкие и шаг влево, шаг вправо и все, разработать с помощью ноукод решений получится только очком.
Каждый программист должен уметь работать с сетью и понимать, как работает интернет. Как минимум пару раз в жизни вам придется что-то деплоить на удаленный сервер, чтобы ваш проект, будь то сайт, телеграм-бот или любая ваша программа, работала на сервере 24 на 7 и была доступна другим людям, потому что локальность вашего компьютера перестанет работать, как только вы его выключите. Я рекомендую деплоить ваши проекты в Selectel.
Это провайдеры IT-инфраструктуры и облаков, там высочайшее качество, бесплатная техподдержка, а еще можно получить 100% кэшбэк за первый месяц использования пасс-сервиса. Да, можно целый месяц пользоваться менедж-кубернетисом или облачными базами данных и получить обратную... все, что вы потратили за сервисы до копейки.
Manage Kubernetes подойдет для упрощения работы с микросервисами, а облачные базы данных нужны сейчас практически на любом проекте. Кстати, в SelectL большой выбор с UBD, от попсовой MySQL до Kafka. Чтобы получить кэшбэк, нужно зарегистрироваться в панели, развернуть кластер Manage Kubernetes или облачных баз данных и написать тикет в поддержку. Так что обязательно переходите по ссылке в описании или сканируйте QR-код и разверните инфраструктуру ваших проектов в стиле Intel со 100% кэшбэком. Так что язык программировани я знать просто необходимо, причем любой профессиональный программист знает несколько языков программирования.
Дело в том, что разные языки программирования применяются в разных сферах, не потому что какие-то хуже, а какие-то лучше, просто так сложилось исторически. Каждый язык обрастал своим комьюнити и своим набором фич для решения какой-то конкретной проблемы. Вот и получилось, что в веб мы пишем на JavaScript, а Data Science и Machine Learning на Python.
Хотя могло быть и наоборот. В качестве первого языка программирования я бы рекомендовал... давал выбирать что-то со статической типизацией и компилируемое, типа Java или C++.
В идеале, конечно, начинать с языков, предназначенных для обучения программированию, типа Pascal, Prologue, Scratch, но камон, кто сегодня готов тратить на это время? Обычно у людей цель как можно быстрее вкачать какой-то язык программирования и пойти уже что-то разрабатывать. Не стоит всерьез относиться к тому, что я сказал, что лучше начинать именно с Java или плюсов, это просто мои пенсионерские сожаления о том, что я не начал с них.
И теперь я предлагаю подписчикам делать то, что сам не делал. На самом деле, начать можно с любого языка, хоть с Python, хоть с Rust. Я вообще начинал с PHP.
И это прикольно, потому что каждый язык дает вам уникальную ветку сюжета. Типа, если вы начнете учить плюсы, то это один путь, а если Java, то другой. Вы будете смотреть лекции разных преподавателей, состоять в разных комьюнити и так далее. Но концовка примерно одна и та же, это сидеть по 10 часов за компом и струячить код. Next уровень это продвинутые знания ПК.
Программист должен понимать, как работает компьютер на каждом этапе, начиная с куска кремния, который называется процессором, и заканчивая тем, как переустановить операционную систему. Компьютер это штука, которая исполняет ваши программы, поэтому хороший программист не имеет права не понимать, как на каком-то этапе работает компьютер. Можно чего-то не знать, типа, как конкретная ОС виртуализирует память, но не понимать механизм виртуализации и другие приколы нельзя. Это приведет к полному непониманию, что и зачем вы разрабатываете и как вообще ваш код будет работать. Типа, что произойдет после того, как вы запустите программу.
А произойдет примерно следующее. Сначала вы компилируете или интерпретируете программу, чтобы привести ее в формат нулей и единиц, потому что компьютер понимает только их. Потом операционная система исполняет ваш бинарный файл, в котором буквально написано инструкцией, что компьютер должен делать. Для того, чтобы ваша программа работала, операционная система выделит вам кусок виртуализированной памяти и запустит... там вашу программу если вы захотите модифицировать другую память или получать какие-то внешние данные то просто так делать это нельзя для этого существуют системные вызовы по сути любая программа работает внутри а с а уже о с общается железом все что вы делаете исполняется на процессоре который постоянно производит какие-то вычисления и в результате этого Вы получаете вообще всё, что видите на экране своего монитора.
Любой программист обязан уметь работать в терминале, потому что это единственный адекватный способ общения с компьютером. GUI, то есть графический интерфейс, это для ламеров. Если вы хотите делать какие-то низкоуровневые вещи, то вам, очевидно, будет удобнее делать это в текстовом формате. Взаимодействие с компьютером через терминал очень однозначно. Вы даёте команду и параметры к ней.
Всё. Она не может работать неочевидно для вас, в то время как используя графический интерфейс, вы понятия не имеете, что делает компьютер, когда вы жмакаете на очередную иконку. Думаю, вам не надо объяснять, что на большинстве компьютеров в мире нет никакой графической оболочки, потому что большинство компьютеров это сервера, роутеры, холодильники, бортовые компьютеры и так далее. Поэтому, работая с каким-то удаленным компом, на котором хостится ваш проект, вам придется общаться с ним исключительно через команды. Для базового уровня хватит просто навыков перемещаться по директориям и открывать текстовые файлы в Vim или Nano.
Ну и желательно, конечно, уметь делать всякие примитивные вещи, типа скачивать через VGAT или и скать... с помощью grep. Следующий уровень после изучения первого языка программирования это выучить второй язык программирования, который вообще не похож на первый.
Допустим, если ваш первый язык это java, то следующим языком можно освоить javascript или python. Таким образом вы жестко кочнете мышление в разных парадигмах. В программировании существуют две основные парадигмы это функциональная и объектно-ориентированная. Есть и другие, например классическое императивное программирование, обычно новички пишут в императивном стиле, но в реальной разработке практически везде используется OOP, потому что удобно и где-то среди OOP можно откопать кусок функциональщины. Прикол в том, что по идее парадигмы смешивать нельзя и все и все слоны программирования, которые закладывали фундамент Computer Science, сегодня бы сдохли от кринжа, если бы увидели, к чему мы пришли.
Но вот да, на практике сегодня почти все языки мультипарадигменные, и на них можно писать как хочешь. Парадигма программирования это ограничение, как вы должны писать код. На работу программы это никак не влияет, эта штука живет только в головах у программистов и просто позволяет им по-другому думать о какой-то задаче.
Если хотите прям хорошо понять функциональную парадигму, то попробуйте Lisp или Haskell. А для хорошего понимания OOP Java. Вообще в программировании много вещей, которые никак не влияют на конечную работу программы, но вы должны их соблюдать.
Например, Например, правильный нейминг. Для работы программы вообще не важно, как вы назвали свою переменную, но это важно для других разработчиков. Поэтому навык выдерживать определенный стиль кода это то, что должно быть у любого программиста.
Дальше идет написание тестов, и к любой вашей программе надо писать тесты, даже к маленькой. По сути, это всегда экономия времени. Тесты позволяют проверить, что какой-то функционал программы работает так, как вы того ожидаете.
При разработке программы вы постоянно будете раз за разом переписывать свой старый код и добавлять новый. И без тестов вы будете постоянно ломать свою же функциональность, так что тесты это база. Следующий пункт это уметь читать чужой код, то есть понимать как он работает Это чуть ли не самый важный пункт из всего, что я вам сегодня рассказываю Дело в том, что программисты в 80% времени читают код и думают над ним, а не пишут его Поэтому это надо в себе воспитывать Плюс таким образом вы сразу будете прокачивать в себе понимание того, как писать хороший код Исходя из того, чтобы его было приятно читать другим людям Для начала посчитать код можно в учебниках по программированию А когда уже усвоите какой-то язык, то на гитхабе любого проекта, написанного на этом языке Следующий уровень это алгоритмы и структуры данных Конечно не надо задачивать алгоритмы наизусть, но понимание почему в структуре вставка в середину массива это медленная операция, а вставка в конец массива это быстрая операция, должно быть у любого программиста.
Если вы не поняли, почему это так, то чтобы вставить что-то в середину массива, придется взвинуть все остальные элементы на один пункт назад. То есть придется сделать какой-то N операции, где N это количество элементов массива после того, куда вы хотите вставить. А при вставке в конец массива вам надо добавить всего лишь один элемент в конец массива.
То есть это всего одна операция. И таких моментов куча, без понимания алгоритмической базы вы будете чувствовать себя некомфортно и не понимать многих вещей. Кстати, такие термины, как куча, стэк и очередь, которые постоянно используются в программировании, это не что иное, как структуры данных, и их обязательно надо знать. Звучит все это страшно и сложно, но на деле это пара лекций на ютубе, ссылочка на них есть у меня в телеграме. В принципе все, вам надо знать информатику на хорошем уровне, потом заботиться какой-то один язык программирования, и дальше уже как снежный ком погружаться в то, как это все работает.
В какой-то момент, когда вы преисполнились и сможете написать пару программ, стоит нырнуть глубже и изучить основу компьютер-сайенс. Всякие деревья, видеосортировки и так далее. Это очень сильно вас прокачает, потом ультуете и учите еще и функциональный язык программирования, чтобы уметь писать и в императивном стиле, и в ООП, и функционально. Конечно, кроме этого, есть еще набор штук, которые должен уметь знать любой программист.
В первую очередь, это скилл загуглить любую проблему. Вы должны быть супер въедливым и уметь искать вообще все. Это чуть ли не главный скилл, потому что в процессе разработки вы 90% времени будете фиксить свои же ошибки. Само собой, вы должны владеть слепой печатью на клавиатуре в достаточной мере, чтобы не делать типичные вещи очень долго.
Кроме этого, вам надо знать гид для того, чтобы управлять версиями своего проекта и уметь пользоваться программой, в которой вы непосредственно пишете код. Будь то VS Code, Vim или какая-то Ideal JetBrains. Подборки книг и материалов по программированию можно найти у меня в Телеграме, и более подробно они есть на Boosty и Патреоне. Спасибо, что смотрели, еще услышимся!