Привет, я Алекуэс, мне 25 лет, и я так или иначе знаю 8 различных языков программирования. Клуб анонимных программистов. Спасибо. А, ладно.
В принципе, я могу создавать вещи, которые не могут 50% всех программистов. Почему? Нет, не потому что я какой-то особенный чесвешный ублюдок или имею врожденный талант.
Я не умнее, чем любой из вас, и у меня нет столько практического опыта, чтобы иметь право стоять на ступеньке выше, чем все остальные. Даже количество языков программирования здесь вообще ни при чём. Просто я изучаю программирование последние 7 лет, и...
За это время я скопил некоторый опыт, которым и делюсь на канале. Думаю, на этом моменте ты бы уже был не прочь послушать мою историю о том, как я стал программистом. Тот самый кликбейт, на который ты наверняка бы нажал.
Ведь наверняка тебе интересно пронаблюдать чужой путь, чтобы на основе него точно сделать всё идеально, и ни в коем случае не повторить ошибок автора. этой истории так хорош перестань себя тешить очередными иллюзиями все что тебе говорят ютуберский ноунейме по большей степени для себя пройдет мимо среднем подобные ролики максимум на послушать коротав вечер за просмотром youtube чека с чашечкой чая да ты немного позавидуешь за мотивируешься этой истории испытаешь тот самый прилив сил которые правда обрушатся, как только ты встанешь со стула, чтобы отправиться что-то сделать для достижения своей цели. Но тут же упрешься вопрос. А что делать-то?
Почему я озвучиваю такой пессимистичный расклад? Да потому что все действия, приводящие к результату, ты уже и так знаешь. Без всяких роликов.
Они абсолютно одинаковые для каждой области. Хочешь чему-то научиться? Бери и учись. Всего два действия.
которое нужно повторить раз в 90 и спустя 3 месяца ежедневных усилий ты хотя бы сможешь выработать какую-никакую привычку. Хм, конкретные шаги, вот что ты ожидаешь. Действия та, да я, которые дадут тебе то, что ты хочешь.
Но что хочешь ты сам? Прямо сейчас спроси себя об этом и как минимум на пару минут ты залипнешь, осознавая, что дать конкретный, неабстрактный и не размазанный ответ самому себе будет не так уж и просто. Окей, сегодня...
я сделаю эту работу за тебя. Не важно, как стал программистом я, не важно, с какими проблемами на пути я сталкивался, важна сама выжимка опыта, которую ты через это приобрел и которую можешь дать людям. Шаги, которые я тебе предложу, дадут тебе всю базу, на которой ты будешь сам выбирать, как тебе строить свое дальнейшее обучение и в какую сторону двигаться.
Это всего лишь одна из миллион дорог, по которой можно пройти. Конкретно эта дорога. хотя бы не позволит тебе спустить годы на элементарный поиск себя.
Стать программистом, что это вообще значит? В какой точке бесконечного развития можно поставить себя на пьедестал и дать грамоту о приобретении программистских навыков? Написание калькулятора это программирование?
Так-то да. А написание своего фреймворка? Хм, тоже.
Написание операционной системы это тоже программирование? С такой логикой написав Hello World, ты уже к вечеру сможешь считаться программистом. Да, сейчас всех их принято делить по уровням знаний на три категории.
Это джун, мидал и сеньор. Но разделение это актуально только в рамках той вакансии, на которую ты презендуешь. Мы же говорим не об этом. Акцент будет на комплексное развитие своих навыков с последовательным обучением смежных областей. Поэтому на время забудем про все эти категории и сконцентрируемся на самих знаниях.
которые по итогу дадут тебе неплохое понимание, как устроена вообще любая программа в компьютере, начиная от банального сайта, заканчивая работой браузеров и операционных систем. Берем ситуацию, где ты абсолютный ноль. И компьютер для тебя это включить его, выключить, зайти в браузер, включить ютуб и запустить пару игр, пока они случайно не сломают твою винду, показав экран смерти.
После чего ты попросишь кого-нибудь эту винду переустановить, и будешь думать, что люди, которые умеют это делать, почти что боги программирования. А научиться этому можно, ну, в лучшем случае, отучившись в институте. И то далеко не в самом задрипанном.
А, ладно. Если ты действительно узнал в этом описании себя, то не парься. Я сам точно так же думал лет 12 назад. Высокие технологии делают жизнь комфортной, но используя их, мы рискуем личной информацией.
Это касается как обычных людей, так и больших корпораций и государственных структур. Поэтому эксперты по кибербезопасности так востребованы сейчас на глобальном рынке. Их еще называют пентестерами или белыми хакерами. Потому что они ищут уязвимости в программах и приложениях, но работают на стороне добра. Если вы тоже мечтаете сделать мир безопаснее и стать высокооплачиваемым специалистом, обучитесь профессии белый хакер в онлайн-школе Skill Factory.
На курсе веб работаете навыки взлома и кибератак на виртуальных машинах. Это специальные программы, которые имитируют отдельный компьютер, сервер или телефон. Освоите устройства операционных систем Linux и Windows, научитесь программировать на Python, писать скрипты на Bash и SQL, овладеете методами защиты IT-систем.
Зарплата специалистов по тестированию на проникновение в среднем 120 тысяч рублей и фактически не имеют потолка. Все напрямую зависит от ваших навыков. После обучения пентестеры сами выбирают график работы и локацию, фриланс или офис.
Пора стать одним из таких специалистов. Переходи по ссылке в описании, записывайся на курс. и получи скидку 45% по промокоду ALIKOS.
Итак, я не буду грузить тебя сложными терминами, хотя в технической сфере без них, сам понимаешь, не обойтись. Задача составить конкретный roadmap, максимально понятный путь, по которому сможет пройтись абсолютно каждый новичок без всякой подготовки. Как такое возможно?
Возможно. Программирование легче, чем ты думаешь. Итак, компьютер.
Всё, что ты на нём используешь, это программа. Как её исполняет компьютер физически, тебя на данном этапе волновать не должно. Программа это абстракция.
И вообще все, что ты будешь изучать, это абстрактная вещь, ее не существует. Не воспринимай это как что-то реальное. Виртуальный мир на той виртуальной, чтобы оставаться нереальным. Окей, поехали. Первая остановка.
Языки программирования, командная строка, базы данных. Почему такое необычное комбо? Просто это база, с которой начинает знакомиться с миром IT в принципе любой новичок. Для многих сфер деятельности кажется странным... Начинать изучение профессии сразу с создания готового продукта, но программирование все сделано через слои абстракции, которые отделяют тебя, программиста, от уровня машины, колоссальные.
На первых этапах они позволяют тебе вообще ничего не знать о работе компьютера. Пользуйся этим, просто пиши программу и она выполнится. Все это может показаться тебе какой-то магией, но сейчас я скажу одно слово, которое пустит всех нас с небес на землю.
Компиляторы. Это программы, которые берут твою программу, написанную на выбранном тобой языке, и преобразуют её в набор инструкций процессора, который её в конечном итоге и выполнит. Почему мы сразу не пишем программы в машинных годах? Потому что это долго, сложно, неэффективно, примитивно, и этот список можно продолжать ещё долго.
Пока этой информации тебе вполне хватит. Один из этих шести языков программирования я предлагаю тебе взять в качестве первого. Все они популярны и широко используемы.
По ним море обучающей информации, и по любому из них ты без проблем сможешь найти работу. По поводу конкретного выбора. Скажу так. Левая группа языков лучше подходит для обучения. Но если ты собираешься работать веб, то есть писать сайты и веб-приложения, то лучше выбирать правую группу.
С особенностями каждого языка ты познакомишься уже непосредственно при его изучении. Единственное, что сейчас стоит понять, это что вообще позволяют нам языки делать. Они позволяют манипулировать данными с помощью логики, и позволяют взаимодействовать с той платформой, на которой они работают. К примеру, взаимодействие с файловой системой компьютера, вызов функции операционной системы, или взаимодействие с функциями браузера, если язык позволяет это делать. Все они позволяют принимать данные от пользователя, обрабатывать их, выводить ответ на экран, создавать приложения с пользовательским интерфейсом и так далее, и так далее.
Все это делается максимально просто путем вызова предоставленных вам методов, но суть сейчас не в этом. Данные, с которыми ты поначалу столкнешься. знакомы тебе уже изначально.
Это целые числа, числа с плавающей точкой и строки. С ними не все так просто, как кажется поначалу, но всему свое время. Для организации логики в языках нам предоставлены переменные условия и циклы.
В переменных мы храним данные, условные конструкции позволяют организовать ветвление, то есть если условие истина, то мы выполняем один кусок кода, если условие ложное, то выполняем другой. Мид-циклы, которые позволяют выполнять код циклично до тех пор, пока условия, которые мы задавали циклу, истинно. Всё это ты спокойно изучишь за пару часов, немного потыкавшись и поняв, как это работает.
Выведешь приветственную надпись на экран, порадуешься какой ты хороший программист, и тебе на мгновение даже покажется, что программирование это слишком просто. Далее ты доучишь оставшийся функционал языка в виде функций, которые позволяют выполнять один и тот же участок кода много раз, массивов, которые позволяют хранить себе сразу целый набор, данных и объектов, которые выступают в роли контейнеров, хранящих в себе свойства и методы. Предвижу следующий вопрос.
Откуда мне брать информацию? Смотри, открываешь ютуб и вводишь курс по джава скрипт. Получаешь миллион роликов на любой вкус и цвет от самых разных авторов.
Сейчас не 2010 год и информации по всем этим языкам в открытом доступе просто навалом. Поверь, она не менее качественная, чем на платных обучающих курсах. Окей, ты освоил базу, подтянул знания по работе с командной строкой и познакомился с базами данных и языком SQL, которые позволяют с базами данных взаимодействовать.
Язык это тоже простой и осваивается буквально за неделю. Весь первый этап, пожалуй, самый длинный. В нем больше всего информации, которую тебе предстоит изучить, но изучив ее, ты все еще чувствуешь себя не очень уверенно. Вроде как ты можешь что-то создавать самостоятельно, а вроде как и нет. Поэтому установка номер два написания первых собственных.
программ. Что же мне такого придумать? А думать ничего не надо.
Все уже давно придумано за тебя. Чтобы довести дело до конца, тебе первое должно быть понятно, что ты делаешь. Второе должно быть интересно.
Поэтому берем любую знакомую тебе 2D игру, по которой есть обучение, и полностью переписываем код, повторяя за автора. Смея коса... Пёр, морской бой, дублджамп, флэппи бёрд, бильярды и подобные игры знакомые каждому.
Это всё то, что новичок спокойно напишет, уделив этому несколько дней. Снова этот вопрос. Где всё это найти?
Не поверите, в ютубе. При этом не важно на каком языке будет писать автор, вам нужно лишь понять сам алгоритм. Поэтому смотреть код на одном языке, а писать его на другом, вполне нормальная практика.
Двигаемся дальше. Фреймворки. Что это за загадочное слово?
Говоря самым простым языком. Если бы каждый писал программы так, как хотел, то человек, работающий в одной компании и привыкший писать код по их правилам, в другой компании, каждый бы раз очень долго вникал, как у них там всё сделано. Нужна стандартизация. Фреймворки это уже набор готового кода на твоём языке, предоставляющего нам весь базовый функционал, одинаковый для любого проекта. Например, для создания сайта нужна возможность постраничной навигации, обработка URL-запросов, методы для работы с базами данных и единая архитектура, на которой все это будет работать от проекта к проекту.
Окей. Изучаются подобные вещи быстро, просто и хватит всего одной недели, чтобы ознакомиться со всеми возможностями фреймворка. На этом этапе тебе предстоит начать писать уже реальные рабочие проекты, которые можно будет заносить в портфолио и использовать в качестве отправной точки. В первую очередь это приложения, взаимодействующие с сервером.
Вообще создание собственных пэт-проектов это очень хороший способ прокачки своих навыков. Это может быть сайт, чат-бот или простая сетевая игра. И часто возникает вопрос, где размещать подобные проекты, чтобы к ним был стабильный и быстрый доступ. Для этого отлично подойдут облачные серверы Selectel.
Selectel это ведущий российский провайдер облаков и IT-инфраструктуры с 23 тысячами активных клиентов. У компаний 6 высокотехнологичных дата-центров и облачная платформа собственной разработки. Облачные серверы от Selectel отлично подойдут для решения многих задач, от размещения интернет-магазинов до создания собственных VPN.
Неважно, у вас маленький пэт-проект или ресурс с тысячами пользователей в день. Вы сможете арендовать в Selectel облачный сервер оптимальной конфигурации по мощности и бюджету. А если проект вырастет и ресурсов перестанет хватать, сервер можно легко и быстро масштабировать. Кстати, сейчас заказать облачный сервер в SelectL можно дешевле. К заказу стал доступен бюджетный базовый SSD-диск.
При заказе облачного сервера с новым диском экономия может достигать 30%. Выбрать идеальную конфигурацию, заказать сервер и управлять инфраструктурой можно в одном окне браузера, через удобную панель управления my.selectl.ru. Переходи по ссылке в описании или сканируй QR-код, регистрируйся в панели и экономь до 30% на облачном сервере с новым SSD-диском в SelectL.
Хорошо, теперь ты в состоянии писать стандартные программы и даже в состоянии устроиться на работу. Все, что будет дальше, по большей степени саморазвитие и прокачка навыков для более серьезных компаний, в которых ты наверняка бы был не прочь поработать. Что ты вообще знаешь о программировании к этому моменту?
Все, чему ты научился за это время, это использовать уже готовые алгоритмы и структуры данных в языках и использовать данные, которые как-то сами по себе хранятся в памяти. На этом моменте ты по-прежнему не понимаешь, как работает большинство программного обеспечения на твоём компьютере, включая банальный редактор кода, торрент, интернет, операционную систему, изображение, программы видеосвязи и так далее, и так далее, и так далее. Поэтому всё дальнейшее изучение будет точечное, сконцентрированное на изучении отдельно взятых деталей программирования, названия которых тебе мало что дадут, пока ты сам не дойдёшь до этой темы, поэтому максимально кратко, быстро и по делу. Оценка сложности алгоритмов. Знакомство с нотацией B.O.
сильно поможет тебе понимать сложность всех дальнейших алгоритмов, с которыми ты будешь сталкиваться. Быстрый он или медленный, какой в данный момент лучше, какой хуже и так далее. Далее. Базовые структуры данных, которыми ты уже умеешь пользоваться. Массивы, связанные списки, хэш-таблицы, стэк и очередь.
Здесь ты учишься с нуля реализовывать эти структуры самостоятельно, включая поиск, вставку и удаление элементов. Наконец поймешь, какая структура данных в какой ситуации лучше подходит. Здесь ты впервые столкнешься с проблемой коллизии и поймешь, что вся простота хранения данных в хэш-таблице не такая уж и простая внутри. С открытой информацией в ютубе на этом моменте уже не все так просто. Продолжение следует...
Поэтому делаем акцент на книге и статьи. Система счисления. Странно, да?
Столько всего изучили, а про тему, которую обычно изучают в школе, ничего не знаем. Просто было позволено не знать, поэтому и не знали. Дальнейшие темы все равно заставят тебя их освоить.
Все примеры, с которыми ты будешь сталкиваться, часто будут представлены в шестнадцатиричном виде. Потому что окажется очень удобным, что любой байт всегда можно представить двумя шестнадцатиричными... числами.
При работе с более низким уровнем в ход пойдут уже и двоичные числа. Далее. ...знания об архитектуре компьютера. На этом шаге мы спускаемся на самый нижний уровень наших абстракций и смотрим, где же там покоятся наши данные.
Модельное устройство памяти дает прекрасное представление об этом. Числа, строки, массивы, объекты, булиан. Как все эти типы хранятся в памяти?
Зачем нужны сборщики мусора? Почему размер памяти такой, какой есть? И т.д.
и т.д. Разрядность процессора и его регистр окончательно закроют вопросы взаимодействия с памятью и дадут понимание, как процессор выполняет команды и почему размер данных может оказывать такое влияние на скорость выполнения кода. К этому моменту ты уже начнешь привыкать, что все в компьютере есть число, а любые данные это набор битов. Чтобы закрепить навыки по работе с битами, мы знакомимся с битовыми операциями.
Получить нужный бит, как изменить нужный бит, как совершать битовые сдвиги и как при помощи битовых структур экономить. память. Следующая остановка.
Числа с плавающей точкой. На этом шаге ты узнаешь о несовершенстве компьютера, который окажется не способен хранить дробное число без искажений. Хотя это и логично, ведь дроби бывают бесконечными.
Здесь ты познакомишься с форматами записи подобных чисел и узнаешь ответ, почему числа с плавающей точкой нужно так осторожно сравнивать между собой и почему некоторые казалось бы очевидные результаты таковыми. не являются. Хорошо, к этому моменту мы закончили разбираться с числовыми типами данных, и нам осталось разобраться со строками. Ты уже готов принять тот факт, что все строковые символы, с которыми ты работал все это время, это тоже числа, взятые из какого-то стандарта. Ты знакомишься со стандартами ASCII и Unicode, и понимаешь, какие исторические проблемы тянутся еще с конца прошлого века.
Наконец-то в полной мере осознаешь всю важность порядка хранения данных в компьютере, и познакомишься с таким понятием, как кодировки. которые вроде как должны решить многие проблемы. Окей, вопрос с данными пока что закрыт, и мы можем двигаться дальше.
Язык ассемблера. Это ключ к пониманию вообще всего, что происходит внутри программ на уровне процессора. Этот язык представляет собой команды процессора в символьном виде, то есть мы по-прежнему используем слова, а не нули и единицы, но зато нам полностью открываются все те конструкции языков, которые были скрыты ранее. Условия, циклы, функции массива изнутри. Мы напрямую работаем с регистрами и, кажется, начинаем понимать, как вообще может быть написана операционная система, драйверы, вирусы и так далее.
Это же нам дает завершить полное представление о модельном устройстве памяти, показывая, как работает стэк. И это не тот стэк, с которым мы сталкивались, когда изучали структуры данных. Это программный стэк, и его предназначение совершенно в другом.
Ты поймешь, для чего вообще нужно временное хранилище данных и к чему приводит. его переполнение. И самое главное, увидишь как, почему и за счет чего работают функции. Что означает передача ей параметров, что такое кадры, функции и как осуществляется возврат. Следующая остановка рекурсия.
Это базовый алгоритм, с которым ты к этому времени 100% уже сталкивался. Минус рекурсивных алгоритмов их работу сложно представить в голове, потому что наше мышление не рекурсивное. Поэтому чтобы со стороны увидеть всю ее работу, Что она способна и как может ронять код, нужно увидеть ее работу со стороны, поняв как она взаимодействует со стэком.
Продолжая тему алгоритмов, мы подбираемся к сортировкам. Это точно такая же базовая вещь, как поиск элементов, их добавление и миф. их удаления. Для сортировки данных, которую нам приходилось делать до этого момента, мы использовали встроенный в язык функции и методы.
Сейчас тебе снова придется заглянуть внутрь и разобрать хотя бы базовые алгоритмы, начиная от сортировки пузырьком, вставками и кучей, заканчивая сортировками хуара, ламуто и подобными им. Поиск. Здесь нас поджидают деревья и графы. Тема, скажем так, не самая простая, но с должным уровнем визуализации осилите ее. Для начала ваша задача научиться с нуля писать бинарное дерево поиска, включая реализацию вставки, поиска и удаление узлов.
Это будет отличным подспорьем к следующим более сложным деревьям, вроде AVL, красно-черному дереву и так далее. К слову, от последнего вы на небольшой промежуток времени сломаете свой мозг и практически возненавидите программирование. Все эти навыки по работе с деревьями позволят вам разобрать последнюю структуру данных на нашем пути графы.
Разберетесь с поиском в глубину и в ширину, и на этом моменте классическое программирование заканчивается. Все, что будет дальше, касается смежных, но точно не менее важных областей программирования. Мы летим к Дзен, поэтому смело продолжаем и подлетаем к станции с интернетом. Конечно же ты для начала побежишь в YouTube для быстрого ознакомления и узнаешь, что всё построено на модели OSI.
На стек протоколов TCP и IP это те правила, по которым интернет и работает. Все веб-приложения, которые ты писал ещё в самом начале своего обучения, оказались лишь поверхностью айсберга в этой цепи, называемым прикладным уровнем, ниже которого идут транспортные сети... ...вой канальный уровень, на каждом из которых находится еще множество своих протоколов, которые оборачивают передаваемые данные своими заголовками, и которые обеспечивают ту самую передачу пакетов от твоего компа до провайдера и до конечного компьютера.
Тема эта на самом деле громадная, которая может занимать не один месяц, и в один шаг она вынесена только для простоты, как собственные операционные системы, с которыми ознакомиться уже не так просто, как с предыдущими темами, в силу закрытости этой информации. Задача здесь... Хотя бы на теоретическом уровне ознакомиться с организацией памяти в операционных системах и понять такие определения, как процесс и поток. Далее было бы неплохо разобраться с устройством файловых систем Windows и Linux, начиная с самых примитивных под управлением MS-DOS, заканчивая FAT32, NTFS и XT3 и так далее.
То, что мы умеем создавать программы, это хорошо, но запускать их всё равно будет операционная система, для которой нужно уметь собирать исполняемые файлы. Каждая операционка ожидает получить свой формат и как минимум разбор PA и ELF форматов, снова для винды и линукса, даст отличное понимание, как вообще программа запускается и что ей для этого нужно. Мы подлетаем к теме... сжатие она откроет нам глаза на то как вообще хранятся памяти изображения звука видео и из чего они состоят в ходе разбора придется знакомиться с форматами файлов и их алгоритмами сжатия с потерями и без в этом разделе появляется довольно много математики и его точно поймет далеко не каждый поэтому я не предлагаю разбирать каждый формат такого файла но хотя бы с базовыми алгоритмами сжатия текста он ознакомиться точно сможет каждый основой криптографии Шифрование это то, на чем основана вся безопасность Без него любое взаимодействие между устройствами, включая весь интернет, были бы под большим вопросом Примером знакомым каждому является HTTPS протокол, который передает данные в зашифрованном виде Понимать хотя бы на базовом уровне, за счет чего достигается безопасность, что такое открытый, закрытый ключ И иметь представление о некоторых алгоритмах вроде RCA лишним точно не будет 3D графика место, где сбываются мечты Создать свою 3D-игру мечтал каждый второй ребёнок. Конечно, без готовых движков ничего полноценного ты не сделаешь.
А для написания своего движка снова потребуются месяцы, если не годы подготовки. Что можно сделать быстро, так это ознакомиться, как вообще 3D-графика создаётся. Как пишутся шейдеры, на чём основано освещение объектов, как реализуется камера, ознакомиться с линейной алгеброй и понять на основе каких примитивов вообще строятся 3D-объекты. Мои библиотеки OpenGL, WebGL и подобные им помогут создать тебе первый 3D-объект.
Предпоследняя остановка. Вот мы и вернулись к теме компиляторов. Сейчас у тебя сполна знаний, чтобы разобраться в этой теме и реализовать свой собственный язык программирования.
Лексический, синтаксический, семантический анализ, абстрактно-синтаксические деревья, генерация машинного кода это все те термины, с которыми тебе придется работать непосредственно. изучать на достаточно глубоком уровне, чтобы по итогу написать что-то стоящее. Мы прибыли.
Впереди только математика и алгоритмы. А книги Кнута и Кормана становятся твоими настольными книгами, которые можно читать вечно. Все темы, которые ты изучил до этого, познавались тобой на базовом уровне.
И сейчас, получив столько опыта, ты наконец-то выбираешь тот истинный свой путь, по которому ты готов идти дальше. Пазл сложен или на... Пало.
Я прекрасно понимаю, что если ты всё это слышишь впервые, то термины из видео не несут для тебя никакого представления. Да и не должны нести. Это путь, который ты проходишь по шагам, и предыдущий шаг даёт ключ к шагу следующему. Весь материал, о котором было сказано, разумеется, есть в свободном доступе.
В виде статей, в виде видео, в виде документации, в виде книг. Возложи, пожалуйста, такую сложную ответственность за вот ключевых слов в поисковике на себя, и ты без проблем найдешь всю необходимую тебе информацию. Части сказанного в виде книг есть в моем телеграм-канале, впоследствии они будут дополняться, поэтому вступай, не теряй время и помни, ежедневное обучение по 5 минут в день намного лучше отсутствия этого обучения.
Удачи.