Сегодня я хотела бы порассуждать с вами на тему программирования. Каждый год количество программистов увеличивается, но при этом качество знаний у новоприбывших снижается вниз в геометрической прогрессии. Если вы хотите стать толковым хакером, то в первую очередь вы должны быть первоклассным инженером.
Уже сейчас, многие люди не способны понять большинство научных книг написанных 10-15 лет назад, в которых опускалось объяснение базовых вещей и по которым училась я. Подразумевалось, что если кто-то читает эту книгу, то является достаточно образованным чтобы её понять. Сейчас же, в 2022 году, чтобы стать успешным программистом достаточно ознакомиться с документацией любого популярного языка, взять на вооружение пару фреймворков которые заполнят все ваши пробелы в знаниях, оставшихся в ходе обучения, и наконец, пройти собеседование в какую-нибудь относительно среднюю компанию где основной упор будет идти на поддержание легаси кода, который уже никто и не знает как он работает.
Работа, вакансии, реклама - вам диктуют каким образом знаний должен обладать специалист в своей области. Стремление человечества всё упростить и автоматизировать привело не только к более простой и удобной жизни, но и к тотальной деградации. Требования которые выдвигались к программистам лет 15 назад и сейчас различаются кардинально, программирование перестало быть чем-то сложным. Как только все поняли, что программисту теперь достаточно владеть математикой на уровне начальной школы, знания об архитектуре компьютера больше не несут в себе никакой ценности для построения карьеры, а брешь в знаниях английского закроет гугл переводчик, к тому же тут ещё крутятся большие деньги относительно многих других профессий с похожим уровнем входа, то толпы людей повалили в IT с целью лёгкой наживы. Сейчас IT индустрия это новый, всё ещё развивающийся тренд, золотая жила которая пока ещё не исчерпала свой ресурс.
В наше время сложно найти где программирование не используется. Банки, магазины, сайты, сервера, службы доставки, интернет, телефоны, учёба, общение, весь современные мир держится на разработках программистов и такой уровень внедрения во все сферы жизни сопровождается огромным потоком людей которые всё это разрабатывают и поддерживают.
Главным критерием к получению новых IT'шников стало являться максимальное сокращение времени на процесс обучения, который должен включать в себя только то, что требуется компании, чтобы максимально эффективно внедрить вас в неё, где вы будете зарабатывать для неё миллионы. Количество технологий, которые появляются каждый день, с бешеной скоростью сменяют друг друга. То, что вы выучили сегодня было актуально только вчера. Вся сложность современного программирования обусловлена лишь большим объёмом информации которую необходимо постоянно изучать.
Профессия, которая считалась сложной в глазах незнакомых с ней людей, в один момент превратилась в конструктор. Единственное требование предъявляемое к новоприбывшему программисту это умение в правильной последовательности составить цепочки вызовов уже давно кем-то написанных функций и методов, а документация очередного языка, чей компилятор решит за вас все низкоуровневые проблемы, становится библией любого программиста. Всё что можно было создать уже было создано, принцип берите и используйте то, что вам подарили более умные люди. Вместо того, чтобы изучать 3D графику с нуля, достаточно взять готовый движок делающий всё за вас, а любые алгоритмы которые вам потребуются в работе уже давно кем-то написаны. Поэтому вы всегда выберете готовое и надёжное решение, вместо того чтобы пытаться написать всё это с нуля или уж тем более попытаться понять как это работает, остаётся лишь сёрфить в интернете в поиске информации.
Автоматизация прекрасная штука которая сильно облегчает жизнь человека, но она точно также стремительно ведёт к его деградации, и рано или поздно это скорее всего погубит всё человечество. Если на секунду отвлечься от темы и представить что у вас в один миг исчезнут все книги, погибнут все компьютеры, то вы окажетесь в положении где буквально с нуля придётся изобретать всё то, чем вы пользовались ежедневно. Все ваши знания и навыки которыми вы обладаете находятся на уровне самых примитивных вещей. И попав на необитаемый остров, всё до чего сможет додуматься ваш разум это использовать камень и палку для того чтобы хоть как-то обеспечить себе выживание.
Подобный сценарий развития программиста полностью исключает необходимость разбираться с фундаментальными знаниями об устройстве компьютера, сетями, операционными системами, алгоритмами и другими низкоуровневыми вещами на которых было построено всё то, чем вы пользуетесь в работе каждый день. Всё что можно не знать - вы будете не знать, всё что можно не делать - вы будете не делать. Как правило у подобных людей полностью отсутствует какая-то идея олицетворяющая их смысл жизни на который они готовы потратить половину отведённого им времени, они просто пришли зарабатывать деньги и это их реальность.
Но что если всё будет не так? Что если вами движет идея знаний, вы пытаетесь понять как работает всё то, что насоздавало человечество к этому времени, не в плане использования, а в плане научиться как минимум делать так же, как максимум создать что-то новое, понимая что любое новое строится на обломках старого. Программирование слишком обширное понятие чтобы ограничивать себя одним языком программирования или долго оставаться на одном уровне знаний, изо дня в день делая одни и теже действия которые будучи убиты однообразием вы медленно начинаете ненавидеть. Пожертвовав тысячи часов своей жизни вы приобретает должный уровень знаний позволяющий вам стать высококлассным инженером способным воплотить в жизнь любую свою идею, вы зовётесь программистом. Мы получили два кардинально противоположных образа программиста с разным уровнем знаний, стремлений, заложенном в нём потенциале. Первой группой людей движет идея денег, второй группой людей движет идея знаний. Для одних программирование это заработок, для других искусство.
В нашем блоге я стараюсь поднимать темы которые хотя бы на каком-то уровне затрагивают те важные пробелы в знаниях, которых так не хватает современному программисту, и стоит сказать, что делаю я это не зря. Это вызывает большой резонанс среди нашей аудитории, где одна часть людей прибывает в диком восторге от полученной информации и готова это изучать потому что им интересно в этом разбираться.
Вторая часть людей считает что я занимаюсь полнейшей ерундой и все эти знания не несут в себе никакой пользы по той причине что они просто не могут их нигде применить. Такое разделение очень хорошо прослеживается у меня в личных сообщениях. Два таких разных восприятия программирования подразумевают в себе два совершенно разных подхода к обучению. Такая пропасть между этими двумя слоями программистов порадило две касты название которых мы слышим всё чаще и чаще, это программисты-кодеры и программисты-инженеры.
Первый пользуется разработками вторых. Главное их отличие друг от друга в том, что хороший инженер может стать хорошим кодером, но хороший кодер никогда не сможет стать хорошим инженером. Один человек пишет веб сайт, другой человек пишет компилятор. Уровень знаний двух этих людей несопоставим. В итоге мы пришли к некой концепции в которой всё программирование принято разбивать на узкоспециализированные области давая человеку отвечающего за неё своё название, определяющее его уровень знаний и навыков которыми он должен обладать. Это те самые области из которых новички привыкли выбирать вектор своего развития: веб, мобайл, гейм дев, деск топ и многие другие которые подразделяются ещё на более узкие вроде пайтон разработчика, джава скрипт разразботчика и так далее. Далее ещё уже: фрондэнд, бекенд, разработчики по фреймворкам и так далее
Все эти области появились искусственно образовав свою экосистему очень хорошо подходящую для бизнес задач. Каждое своё направление требует очень узкий спектр знаний которыми вы должны обладать чтобы занимать эту должность, всё остальное что можно не знать вы будете не знать и что можно не делать вы будете не делать. Вариативность программного обеспечения которое вы способны создавать полностью ограничено этой областью, своим языком программирования, своей платформой, своими автоматизированными инструментами которые вам помогают в разработке и как только вы попробуете выйти за её пределы, то тут же утонете в болоте непонимания всего того что там находится.
Так например будучи веб разработчиком создавая очередной сайт который от проекта к проекту меняется только своим интерфейсом, вы думаете что весь ваш мир ограничен каким-нибудь php или джава скриптом, а изучение очередного фреймворка является единственным вашим способом вырасти как профессионал.
Но на секунду задумайтесь, что если вы захотите написать не сайт, а например среду разработки, то вы поймёте что знания которыми вы обладали всё это время не дают вам о программировании практически ничего. Начиная спускаться вниз по слоям абстракции, то вы замечаете что все области которые казались вам полностью обособленными друг от друга являются такими лишь до тех пор, пока вы находитесь на самой верхушке всей этой многоуровневой абстракции, все они держутся на ряде фундаментальных тем которые можно объединить под один термин - компьютерные науки.
Погружаясь в их изучение вы начинаете понимать, что многие направления которые казались никак не связанные между собой начинают пересекаться, а всё, что казалось не имело к вам никакого отношения являлось лишь таким потому, что вы никогда об этом не задумывались. Пересылая данные по интернету вы ежедневно используете криптографические протоколы безопасности позволяющие вашим данным доходить до конечной точки в целостности. Вы используете браузер как платформу написанную абсолютно на других языках и технологиях, весь интернет оказывается построен на протоколах tcp/ip и ваш WiFi роутер оказывается не таким уж и безопасным как вы себе это представляли. У вас отпадает вопрос почему общаясь с другом по видео связи часть данных бесследно теряется, а картинка в формате jpeg которую вы сегодня смотрели оказалось прошла целый ряд трансформаций по сжатию перед тем как вы её увидели. Становится понятно почему искусственный интеллект до сих пор остаётся только в фантастических фильмах и книгах, а нейронная сеть довольно часто может ошибаться при выборе правильного ответа.
Становится понятно каким вообще образом ваш торрент скачивает игру, как на вашем рабочем сервере используется линукс, на вашем компьтере стоит винда и переодически вы пользуетесь терминалом и командной строкой которые волшебным образом сами исполняют все ваши команды. Становится понятно как среда разработки подсвечивает синтаксис вашего языка и ищет все ваши ошибки. Становится понятно как программа, которой вы пользуетесь для соединения с базой данных, в удобном для вас виде преподносит всю запрашиваемую информацию, интерпретатор вашего языка сам всё переводит в машинный код согласно архитектуре компьютера, а математика, алгоритмы и структуры данных, те вещи которых вы боялись больше всего - это тот фундамент благодаря которому вообще всё вышеперечисленное способно работать.
Были ли вы от всего этого абстрагированы? Нет. Вы просто всего этого не знали и даже близко не представляли как создать хоть что-то подобное из этого списка. Навыки сегодняшних программистов находятся на уровне обычного пользователя компьютера только со знанием языка. Стать программистом скоро будет также легко как стать продавцом в любом магазине, поддерживая лишь то, что и так уже работает, внося в проект лишь небольшие изменения. Это при том что программирование впринципе никогда не являлось какой-то безумно сложной штукой. Изначально это всего лишь инструмент для превращения в жизнь какой-то научной идеи. У вас есть готовый алгоритм и вы переносите его в код используя логику которая есть в языках.
Язык, соответственно, это инструмент для реализации подобного алгоритма. Вам не нужно изучать как проектируют процессоры, вы не копаетесь в электрических схемах, вы не работаете с абстракциями и представляете компьютер лишь как упрощённую модель работающую по упрощённым законам.
У вас есть память, процессор, видеокарта, которые на физическом уровне сами разберутся что нужно делать с вашей абстракцией в виде кода. Конечно человечество наизобретало столько всего, что изучать это можно всю жизнь так и не дойдя до какого-то логического завершения, но не обязательно нужно чего-то достигать чтобы изучать то, что вам интересно. Отовсюду вы слышите что вам нужно ставить цели и во чтобы то ни стало добиваться их, но начиная это делать вы забываете что тот момент когда цель будет достигнута продлится ровно одну секунду - это тот миг когда вы её достигли. Вы не сможете прибывать в этой секунде дольше одной секунды как бы забавно это не звучало и колнцентрируясь на цели вы забываете что жизнь это процесс.
Копаясь часами в какой-то нудной документации или сидя постоянно за компьютером выстраивая логические цепочки в своей голове, чтобы программа наконец то заработала, вы вольно невольно делаете программирование частью своей жизни. И вопрос в голове "Моё это или нет?" возникает лишь от ложной цели которую вы сами себе внушили. Смысл не в конечном применении получаемой вами информации, а в получении удовлетворения от того процесса, которому вы посвящаете свою жизнь.
Вы либо занимаетесь чем-то потому, что вам это нравится, либо вы всегда себя заставляете, думая что вам это нужно. Заставлять себя что-то делать это впринципе насилие над собой, всё к чему это приводит так это постоянному выгоранию, о котором так любят говорить в последнее время, пытаясь с этим бороться как с каким-то естественным состоянием человека.
Единственное что вы можете делать качественно - это делать то, что вам нравится. Многие пытаются себя замотивировать на обучение, не понимая, что это точно такой же тупиковый путь, дающий вам лишь кратковременный прилив сил который является единственным двигателем толкающим ваше тело производить какие-то действия. Этот импульс быстро тухнет под натиском подсознательного сопротивления как защитная реакция в ответ на попытку заставить себя делать то, что вам совершенно не хочется.
Лень это хоть и двигатель прогресса, но происходит она от нежелания делать то, во что вас заставляет поверить ваш мозг. Вы записываетесь на различные обучающие курсы которые обещают сделать из вас спецов за два месяца, не потому что там преподносят какие-то уникальные знания которые больше нигде не найти, а потому что вам нужен банальный пинок, пинок под зад чтобы хоть как-то сдвинуться с места. Потому что заставлять себя снаружи, в виде системы которая не даёт вам право чего-то не делать, намного легче, чем заставлять себя изнутри. Вы отдали немало денег за обучение или поступили в универ который вас обязан всему научить. И информация в вашей голове должна оказаться сама собой - ведь вы поступили, разве нужно что-то ещё?
Любая система образования построена на том, чтобы просто выдать вам ограниченное количество тем за весьма ограниченное количество времени или ещё хуже - просто направить на их источник даже не попытавшись объяснить этот материал, всю остальную распаковку знаний в своей голове вы либо делаете самостоятельно, либо пропускаете это мимо себя. Вообще нет такого понятия как научить, можно чему-то только научиться, то есть научить себя получив знания из какого-либо источника. Отсюда следует что с точки зрения получения знаний абсолютно не важно учились ли вы в каком-либо учебном заведении или нет. Один человек оканчивает универ получив знания, другой получив диплом.
Обучаясь самостоятельно, сидя дома за книгами вы получаете тот же самый результат. Естественный путь любого обучения - это идти от лёгкого к сложному при котором не убивается весь интерес к тому чем вы занимаетесь. Невозможно что-то понять начав с середины или начав с конца, точно также невозможно делать что-то хорошо не делав это по началу плохо. В программировании так получилось что лёгкость начинается не с фундаментальных тем от которых как правило отталкивается любая сфера деятельности, а с языков программирования абстрагирующих всё то, что находится ниже их.
Компиляторы, фреймворки, библиотеки и куча других готовых решений позволяют вам писать программу не вникая как всё это соберётся в исполняемый код и начнёт работать. Возможность иметь осязаемый результат вашей работы, например в виде правильного ответа появившегося на экране в консоле, каждый раз показывает вам что время затраченное на изучение не было потрачено впустую. Изучая программирование в обратной последовательности, новичёк читая очередную книгу просто не будет понимать как ему использовать всю эту полученную информацию. В конечном итоге он просто убьёт в себе желание стать программистом уже на первой неделе своего обучения поверив в мысль что "это не его". Это как закрытая карта в компьютерной игре где вы оказались в её середине и просто не знаете куда вам идти. Двигаясь от языка программирования по направлению вниз вы будете постепенно закрывать пробелы в знаниях более в щадящей форме.
Такая последовательность обучения была бы прекрасной если бы не тот факт что 99% всех обучающихся останавливаются на самой первой ступеньке будучи запертыми в своей экосистеме. Дело в том, что вся реклама которую вы видите направлена на обучение языкам программирования, и одни знания позиционируются как полезные - дающие вам рабочие места, а другие бесполезные и не дают вам ничего кроме как удовлетворение своего собственного любопытства. Изучать компьютерные науки означает нигде не использовать эти знания кроме как в своих собственных разработках, которые останутся лишь на уровне прототипа с которыми вы скорее всего поиграетесь и забросите.
Идея всегда привалировала над материальными ценностями и далеко не все вещи в жизни делаются только ради работы. Люди, приходящие в программирование, всё таки как правило имеют определённый склад ума считающими интересным то, что по мнению большинства людей является безумно скучным занятием.
Разумеется не каждый из вас может стать выдающимся человеком и сделать что-то глобальное поменявшее ход истории, не всем дано изобрести искусственный интеллект, а некоторым даже до конца жизни не дано узнать почему же работает их цикл for. Один человек из 100 миллионов станет великим инженером, в чью голову придёт грандиозная мысль после которой этот мир уже не будет прежним, действия же всех остальных людей на его фоне будут являться бессмысленными. Однако много тысяч людей которые действительно повлияли на ход истории остались никому неизвестными, но это не значит что их жизни были напрасными.
Все рождаются в разных условиях, с разными мозгами, кто-то быстрее мыслит, кто-то медленнее, кому-то попадаются правильные учителя, кто-то начинает рано, кто-то поздно. Но в конечном итоге уровень который вы сможете достигнуть будет определяться лишь вашим потенциалом и количеством затраченного времени. Человек не рождается чтобы умереть, у любого рождения есть свой смысл, и смысл его в реализации своего потенциала. Это очень важное понятие, потому что именно из него следует формула чтобы быть счастливым.
И если как следует над этим задуматься, то так оно и есть.
Человек занимающийся делом которое ему нравится не будет иметь недовольств, выгораний, забрасываний, разочарований и всего того чем страдает большинство людей сидя на работе и ненавидя её всей душой. В конечном итоге каждый успеет в жизни сделать лишь то, на что хватит его времени, и многие просто психологически не готовы тратить годы на какое-то там обучение желая иметь результат прямо здесь и сейчас. Руководствуясь принципом "всё или ничего" - гарантировано выбирают "ничего", предпочитая прожить более социально беззаботную жизнь. Отвечая на вопрос "За сколько можно выучить программирование?" - не существует какого-то однозначного ответа. На самом деле подобный вопрос стоит переформулировать так: "Через сколько времени я буду в состоянии самостоятельно написать такую вот программу"? или например "Через какое время я смогу спокойно читать любой код и сходу понимать что он делает?". У программирования нет конечной точки до которой можно дойти и сказать: "Я обучился". Этот процесс может продолжаться всю жизнь и речь лишь идёт о том, каким уровнем знаний вы хотите себя ограничить.
Умение управлять свободным временем, которое есть у каждого из вас, определяет то, будете ли вы сегодня развиваться или деградировать. Наш мир так построен, что нет какого-то статического состояния, предмет всегда либо портится, либо создаётся. Яблоко либо зреет, либо гниёт. Человек либо развивается, либо деградирует. Время это единственный ресурс которым вы способны распоряжаться и количество затраченного времени прямо пропорционально получению итогового результата. Несмотря на то, что ваше тело живёт в моменте "сейчас", всё ваше мышление основано на прогнозировании будущего и анализе прошлого, не замечая, что будущее наступает каждую секунду, и каждую секунду вы продолжаете ничего не делать, находясь мыслями где-то далеко от момента настоящего. По другому это можно назвать отсутствием концентрации, но суть от этого не меняется.
Наверное самый популярный вопрос который люди задают мне в личные сообщения: "Пришли список литературы по которой можно обучаться". Они думают, что я знаю какой-то секретный источник знаний. У меня доступ к информации точно такой же как и у вас. Всё что можете найти вы, то могу найти и я. Другой момент, что вы даже и не пытались искать. Интернет дал вам две важные вещи: свободный и не ограниченный источник знаний, но в тоже время слепую веру в то, что вся информация находится у вас под рукой и вы в любой момент овладеете ей как только захотите. Это иллюзия, потому что вы цените только то, чего у вас нет. Бесплатный источник знаний всегда будет цениться меньше чем платный, даже если в итоге окажется, что они абсолютно одинаковы. Фундаментальные знания не востребованы, поэтому практически никто под них не делает обучающих продуктов. Найти информацию по устройству операционных систем в разы сложнее чем например узнать как исправить ошибку в своём приложении полученную от компилятора. Не смотря на то, что интернет содержит в себе самые разнообразные знания, он представляет собой большую информационную помойку в которой по настоящему ценной и важной информации очень мало на фоне всего остального мусора.
Единственный источник знаний который не умрёт никогда это книги. Каждый автор по разному объясняет один и тот же материал, поэтому усвоение каждой темы будет предполагать прочтение сразу нескольких книг которые будут дополнять друг другу закрывая все ваши пробелы в знаниях. Изначально довольно сложно понять что учить, а что нет, какие знания более ценные, какие менее. Например знание алгоритмов намного ценнее чем знание синтаксиса любого языка, но при этом прочтение книг по алгоритмам будет в десять раз ниже чем по сантиксису. Потому что большинство людей воспринимают популярное за ценное.
На самом деле "популярный" лишь означает то, что на этом сконцентрировано большее количество дураков. Не всё, что на первый взгляд выглядит очевидным, таковым на самом деле является. Например человек, который весь год будет читать книги по программированию и переодически разбирать код уже написанных кем-то программ, будет более лучшим программистом чем тот кто весь год будет писать свой код не изучая при этом ничего нового.
Пока вы пишете код, то вы стоите на месте, потому что писать вы можете только то, что уже знаете. Пользу обучения в программировании определяет не количество строк кода которые вы сегодня написали, а количество новой информации которую вы сегодня освоили. Изучая языки программирования один за другим, вы понимаете что они все примерно одинаковые.
Со временем вы осознаёте, что способны прочитать код на любом языке, но при этом вы почему-то не становитесь умнее. Но начиная изучать фундаментальное программирование, вы с каждой изученной книгой становитесь всё сильнее и сильнее, и в определённый момент времени в вашу голову приходит мысль: "Я могу создать абсолютно всё что угодно, но этот мир настолько огромен, что моё обучение бесконечно и моё развитие не закончится никогда".
Уже сейчас, многие люди не способны понять большинство научных книг написанных 10-15 лет назад, в которых опускалось объяснение базовых вещей и по которым училась я. Подразумевалось, что если кто-то читает эту книгу, то является достаточно образованным чтобы её понять. Сейчас же, в 2022 году, чтобы стать успешным программистом достаточно ознакомиться с документацией любого популярного языка, взять на вооружение пару фреймворков которые заполнят все ваши пробелы в знаниях, оставшихся в ходе обучения, и наконец, пройти собеседование в какую-нибудь относительно среднюю компанию где основной упор будет идти на поддержание легаси кода, который уже никто и не знает как он работает.
Работа, вакансии, реклама - вам диктуют каким образом знаний должен обладать специалист в своей области. Стремление человечества всё упростить и автоматизировать привело не только к более простой и удобной жизни, но и к тотальной деградации. Требования которые выдвигались к программистам лет 15 назад и сейчас различаются кардинально, программирование перестало быть чем-то сложным. Как только все поняли, что программисту теперь достаточно владеть математикой на уровне начальной школы, знания об архитектуре компьютера больше не несут в себе никакой ценности для построения карьеры, а брешь в знаниях английского закроет гугл переводчик, к тому же тут ещё крутятся большие деньги относительно многих других профессий с похожим уровнем входа, то толпы людей повалили в IT с целью лёгкой наживы. Сейчас IT индустрия это новый, всё ещё развивающийся тренд, золотая жила которая пока ещё не исчерпала свой ресурс.
В наше время сложно найти где программирование не используется. Банки, магазины, сайты, сервера, службы доставки, интернет, телефоны, учёба, общение, весь современные мир держится на разработках программистов и такой уровень внедрения во все сферы жизни сопровождается огромным потоком людей которые всё это разрабатывают и поддерживают.
Главным критерием к получению новых IT'шников стало являться максимальное сокращение времени на процесс обучения, который должен включать в себя только то, что требуется компании, чтобы максимально эффективно внедрить вас в неё, где вы будете зарабатывать для неё миллионы. Количество технологий, которые появляются каждый день, с бешеной скоростью сменяют друг друга. То, что вы выучили сегодня было актуально только вчера. Вся сложность современного программирования обусловлена лишь большим объёмом информации которую необходимо постоянно изучать.
Профессия, которая считалась сложной в глазах незнакомых с ней людей, в один момент превратилась в конструктор. Единственное требование предъявляемое к новоприбывшему программисту это умение в правильной последовательности составить цепочки вызовов уже давно кем-то написанных функций и методов, а документация очередного языка, чей компилятор решит за вас все низкоуровневые проблемы, становится библией любого программиста. Всё что можно было создать уже было создано, принцип берите и используйте то, что вам подарили более умные люди. Вместо того, чтобы изучать 3D графику с нуля, достаточно взять готовый движок делающий всё за вас, а любые алгоритмы которые вам потребуются в работе уже давно кем-то написаны. Поэтому вы всегда выберете готовое и надёжное решение, вместо того чтобы пытаться написать всё это с нуля или уж тем более попытаться понять как это работает, остаётся лишь сёрфить в интернете в поиске информации.
![479d8aeee9d2b478efd11.png](https://telegra.ph/file/479d8aeee9d2b478efd11.png)
Автоматизация прекрасная штука которая сильно облегчает жизнь человека, но она точно также стремительно ведёт к его деградации, и рано или поздно это скорее всего погубит всё человечество. Если на секунду отвлечься от темы и представить что у вас в один миг исчезнут все книги, погибнут все компьютеры, то вы окажетесь в положении где буквально с нуля придётся изобретать всё то, чем вы пользовались ежедневно. Все ваши знания и навыки которыми вы обладаете находятся на уровне самых примитивных вещей. И попав на необитаемый остров, всё до чего сможет додуматься ваш разум это использовать камень и палку для того чтобы хоть как-то обеспечить себе выживание.
Подобный сценарий развития программиста полностью исключает необходимость разбираться с фундаментальными знаниями об устройстве компьютера, сетями, операционными системами, алгоритмами и другими низкоуровневыми вещами на которых было построено всё то, чем вы пользуетесь в работе каждый день. Всё что можно не знать - вы будете не знать, всё что можно не делать - вы будете не делать. Как правило у подобных людей полностью отсутствует какая-то идея олицетворяющая их смысл жизни на который они готовы потратить половину отведённого им времени, они просто пришли зарабатывать деньги и это их реальность.
Но что если всё будет не так? Что если вами движет идея знаний, вы пытаетесь понять как работает всё то, что насоздавало человечество к этому времени, не в плане использования, а в плане научиться как минимум делать так же, как максимум создать что-то новое, понимая что любое новое строится на обломках старого. Программирование слишком обширное понятие чтобы ограничивать себя одним языком программирования или долго оставаться на одном уровне знаний, изо дня в день делая одни и теже действия которые будучи убиты однообразием вы медленно начинаете ненавидеть. Пожертвовав тысячи часов своей жизни вы приобретает должный уровень знаний позволяющий вам стать высококлассным инженером способным воплотить в жизнь любую свою идею, вы зовётесь программистом. Мы получили два кардинально противоположных образа программиста с разным уровнем знаний, стремлений, заложенном в нём потенциале. Первой группой людей движет идея денег, второй группой людей движет идея знаний. Для одних программирование это заработок, для других искусство.
В нашем блоге я стараюсь поднимать темы которые хотя бы на каком-то уровне затрагивают те важные пробелы в знаниях, которых так не хватает современному программисту, и стоит сказать, что делаю я это не зря. Это вызывает большой резонанс среди нашей аудитории, где одна часть людей прибывает в диком восторге от полученной информации и готова это изучать потому что им интересно в этом разбираться.
Вторая часть людей считает что я занимаюсь полнейшей ерундой и все эти знания не несут в себе никакой пользы по той причине что они просто не могут их нигде применить. Такое разделение очень хорошо прослеживается у меня в личных сообщениях. Два таких разных восприятия программирования подразумевают в себе два совершенно разных подхода к обучению. Такая пропасть между этими двумя слоями программистов порадило две касты название которых мы слышим всё чаще и чаще, это программисты-кодеры и программисты-инженеры.
Первый пользуется разработками вторых. Главное их отличие друг от друга в том, что хороший инженер может стать хорошим кодером, но хороший кодер никогда не сможет стать хорошим инженером. Один человек пишет веб сайт, другой человек пишет компилятор. Уровень знаний двух этих людей несопоставим. В итоге мы пришли к некой концепции в которой всё программирование принято разбивать на узкоспециализированные области давая человеку отвечающего за неё своё название, определяющее его уровень знаний и навыков которыми он должен обладать. Это те самые области из которых новички привыкли выбирать вектор своего развития: веб, мобайл, гейм дев, деск топ и многие другие которые подразделяются ещё на более узкие вроде пайтон разработчика, джава скрипт разразботчика и так далее. Далее ещё уже: фрондэнд, бекенд, разработчики по фреймворкам и так далее
![5a9bd1f9c11095a119ef5.png](https://telegra.ph/file/5a9bd1f9c11095a119ef5.png)
Все эти области появились искусственно образовав свою экосистему очень хорошо подходящую для бизнес задач. Каждое своё направление требует очень узкий спектр знаний которыми вы должны обладать чтобы занимать эту должность, всё остальное что можно не знать вы будете не знать и что можно не делать вы будете не делать. Вариативность программного обеспечения которое вы способны создавать полностью ограничено этой областью, своим языком программирования, своей платформой, своими автоматизированными инструментами которые вам помогают в разработке и как только вы попробуете выйти за её пределы, то тут же утонете в болоте непонимания всего того что там находится.
Так например будучи веб разработчиком создавая очередной сайт который от проекта к проекту меняется только своим интерфейсом, вы думаете что весь ваш мир ограничен каким-нибудь php или джава скриптом, а изучение очередного фреймворка является единственным вашим способом вырасти как профессионал.
Но на секунду задумайтесь, что если вы захотите написать не сайт, а например среду разработки, то вы поймёте что знания которыми вы обладали всё это время не дают вам о программировании практически ничего. Начиная спускаться вниз по слоям абстракции, то вы замечаете что все области которые казались вам полностью обособленными друг от друга являются такими лишь до тех пор, пока вы находитесь на самой верхушке всей этой многоуровневой абстракции, все они держутся на ряде фундаментальных тем которые можно объединить под один термин - компьютерные науки.
Погружаясь в их изучение вы начинаете понимать, что многие направления которые казались никак не связанные между собой начинают пересекаться, а всё, что казалось не имело к вам никакого отношения являлось лишь таким потому, что вы никогда об этом не задумывались. Пересылая данные по интернету вы ежедневно используете криптографические протоколы безопасности позволяющие вашим данным доходить до конечной точки в целостности. Вы используете браузер как платформу написанную абсолютно на других языках и технологиях, весь интернет оказывается построен на протоколах tcp/ip и ваш WiFi роутер оказывается не таким уж и безопасным как вы себе это представляли. У вас отпадает вопрос почему общаясь с другом по видео связи часть данных бесследно теряется, а картинка в формате jpeg которую вы сегодня смотрели оказалось прошла целый ряд трансформаций по сжатию перед тем как вы её увидели. Становится понятно почему искусственный интеллект до сих пор остаётся только в фантастических фильмах и книгах, а нейронная сеть довольно часто может ошибаться при выборе правильного ответа.
![aa5258a8cdf4694c8647c.png](https://telegra.ph/file/aa5258a8cdf4694c8647c.png)
Становится понятно каким вообще образом ваш торрент скачивает игру, как на вашем рабочем сервере используется линукс, на вашем компьтере стоит винда и переодически вы пользуетесь терминалом и командной строкой которые волшебным образом сами исполняют все ваши команды. Становится понятно как среда разработки подсвечивает синтаксис вашего языка и ищет все ваши ошибки. Становится понятно как программа, которой вы пользуетесь для соединения с базой данных, в удобном для вас виде преподносит всю запрашиваемую информацию, интерпретатор вашего языка сам всё переводит в машинный код согласно архитектуре компьютера, а математика, алгоритмы и структуры данных, те вещи которых вы боялись больше всего - это тот фундамент благодаря которому вообще всё вышеперечисленное способно работать.
Были ли вы от всего этого абстрагированы? Нет. Вы просто всего этого не знали и даже близко не представляли как создать хоть что-то подобное из этого списка. Навыки сегодняшних программистов находятся на уровне обычного пользователя компьютера только со знанием языка. Стать программистом скоро будет также легко как стать продавцом в любом магазине, поддерживая лишь то, что и так уже работает, внося в проект лишь небольшие изменения. Это при том что программирование впринципе никогда не являлось какой-то безумно сложной штукой. Изначально это всего лишь инструмент для превращения в жизнь какой-то научной идеи. У вас есть готовый алгоритм и вы переносите его в код используя логику которая есть в языках.
Язык, соответственно, это инструмент для реализации подобного алгоритма. Вам не нужно изучать как проектируют процессоры, вы не копаетесь в электрических схемах, вы не работаете с абстракциями и представляете компьютер лишь как упрощённую модель работающую по упрощённым законам.
У вас есть память, процессор, видеокарта, которые на физическом уровне сами разберутся что нужно делать с вашей абстракцией в виде кода. Конечно человечество наизобретало столько всего, что изучать это можно всю жизнь так и не дойдя до какого-то логического завершения, но не обязательно нужно чего-то достигать чтобы изучать то, что вам интересно. Отовсюду вы слышите что вам нужно ставить цели и во чтобы то ни стало добиваться их, но начиная это делать вы забываете что тот момент когда цель будет достигнута продлится ровно одну секунду - это тот миг когда вы её достигли. Вы не сможете прибывать в этой секунде дольше одной секунды как бы забавно это не звучало и колнцентрируясь на цели вы забываете что жизнь это процесс.
![277e51da78718f0ad975b.png](https://telegra.ph/file/277e51da78718f0ad975b.png)
Копаясь часами в какой-то нудной документации или сидя постоянно за компьютером выстраивая логические цепочки в своей голове, чтобы программа наконец то заработала, вы вольно невольно делаете программирование частью своей жизни. И вопрос в голове "Моё это или нет?" возникает лишь от ложной цели которую вы сами себе внушили. Смысл не в конечном применении получаемой вами информации, а в получении удовлетворения от того процесса, которому вы посвящаете свою жизнь.
Вы либо занимаетесь чем-то потому, что вам это нравится, либо вы всегда себя заставляете, думая что вам это нужно. Заставлять себя что-то делать это впринципе насилие над собой, всё к чему это приводит так это постоянному выгоранию, о котором так любят говорить в последнее время, пытаясь с этим бороться как с каким-то естественным состоянием человека.
Единственное что вы можете делать качественно - это делать то, что вам нравится. Многие пытаются себя замотивировать на обучение, не понимая, что это точно такой же тупиковый путь, дающий вам лишь кратковременный прилив сил который является единственным двигателем толкающим ваше тело производить какие-то действия. Этот импульс быстро тухнет под натиском подсознательного сопротивления как защитная реакция в ответ на попытку заставить себя делать то, что вам совершенно не хочется.
Лень это хоть и двигатель прогресса, но происходит она от нежелания делать то, во что вас заставляет поверить ваш мозг. Вы записываетесь на различные обучающие курсы которые обещают сделать из вас спецов за два месяца, не потому что там преподносят какие-то уникальные знания которые больше нигде не найти, а потому что вам нужен банальный пинок, пинок под зад чтобы хоть как-то сдвинуться с места. Потому что заставлять себя снаружи, в виде системы которая не даёт вам право чего-то не делать, намного легче, чем заставлять себя изнутри. Вы отдали немало денег за обучение или поступили в универ который вас обязан всему научить. И информация в вашей голове должна оказаться сама собой - ведь вы поступили, разве нужно что-то ещё?
Любая система образования построена на том, чтобы просто выдать вам ограниченное количество тем за весьма ограниченное количество времени или ещё хуже - просто направить на их источник даже не попытавшись объяснить этот материал, всю остальную распаковку знаний в своей голове вы либо делаете самостоятельно, либо пропускаете это мимо себя. Вообще нет такого понятия как научить, можно чему-то только научиться, то есть научить себя получив знания из какого-либо источника. Отсюда следует что с точки зрения получения знаний абсолютно не важно учились ли вы в каком-либо учебном заведении или нет. Один человек оканчивает универ получив знания, другой получив диплом.
![2d2493034b7bd7bdc1831.png](https://telegra.ph/file/2d2493034b7bd7bdc1831.png)
Обучаясь самостоятельно, сидя дома за книгами вы получаете тот же самый результат. Естественный путь любого обучения - это идти от лёгкого к сложному при котором не убивается весь интерес к тому чем вы занимаетесь. Невозможно что-то понять начав с середины или начав с конца, точно также невозможно делать что-то хорошо не делав это по началу плохо. В программировании так получилось что лёгкость начинается не с фундаментальных тем от которых как правило отталкивается любая сфера деятельности, а с языков программирования абстрагирующих всё то, что находится ниже их.
Компиляторы, фреймворки, библиотеки и куча других готовых решений позволяют вам писать программу не вникая как всё это соберётся в исполняемый код и начнёт работать. Возможность иметь осязаемый результат вашей работы, например в виде правильного ответа появившегося на экране в консоле, каждый раз показывает вам что время затраченное на изучение не было потрачено впустую. Изучая программирование в обратной последовательности, новичёк читая очередную книгу просто не будет понимать как ему использовать всю эту полученную информацию. В конечном итоге он просто убьёт в себе желание стать программистом уже на первой неделе своего обучения поверив в мысль что "это не его". Это как закрытая карта в компьютерной игре где вы оказались в её середине и просто не знаете куда вам идти. Двигаясь от языка программирования по направлению вниз вы будете постепенно закрывать пробелы в знаниях более в щадящей форме.
Такая последовательность обучения была бы прекрасной если бы не тот факт что 99% всех обучающихся останавливаются на самой первой ступеньке будучи запертыми в своей экосистеме. Дело в том, что вся реклама которую вы видите направлена на обучение языкам программирования, и одни знания позиционируются как полезные - дающие вам рабочие места, а другие бесполезные и не дают вам ничего кроме как удовлетворение своего собственного любопытства. Изучать компьютерные науки означает нигде не использовать эти знания кроме как в своих собственных разработках, которые останутся лишь на уровне прототипа с которыми вы скорее всего поиграетесь и забросите.
Идея всегда привалировала над материальными ценностями и далеко не все вещи в жизни делаются только ради работы. Люди, приходящие в программирование, всё таки как правило имеют определённый склад ума считающими интересным то, что по мнению большинства людей является безумно скучным занятием.
![3c6f05cfad519124b7214.png](https://telegra.ph/file/3c6f05cfad519124b7214.png)
Разумеется не каждый из вас может стать выдающимся человеком и сделать что-то глобальное поменявшее ход истории, не всем дано изобрести искусственный интеллект, а некоторым даже до конца жизни не дано узнать почему же работает их цикл for. Один человек из 100 миллионов станет великим инженером, в чью голову придёт грандиозная мысль после которой этот мир уже не будет прежним, действия же всех остальных людей на его фоне будут являться бессмысленными. Однако много тысяч людей которые действительно повлияли на ход истории остались никому неизвестными, но это не значит что их жизни были напрасными.
Все рождаются в разных условиях, с разными мозгами, кто-то быстрее мыслит, кто-то медленнее, кому-то попадаются правильные учителя, кто-то начинает рано, кто-то поздно. Но в конечном итоге уровень который вы сможете достигнуть будет определяться лишь вашим потенциалом и количеством затраченного времени. Человек не рождается чтобы умереть, у любого рождения есть свой смысл, и смысл его в реализации своего потенциала. Это очень важное понятие, потому что именно из него следует формула чтобы быть счастливым.
И если как следует над этим задуматься, то так оно и есть.
Человек занимающийся делом которое ему нравится не будет иметь недовольств, выгораний, забрасываний, разочарований и всего того чем страдает большинство людей сидя на работе и ненавидя её всей душой. В конечном итоге каждый успеет в жизни сделать лишь то, на что хватит его времени, и многие просто психологически не готовы тратить годы на какое-то там обучение желая иметь результат прямо здесь и сейчас. Руководствуясь принципом "всё или ничего" - гарантировано выбирают "ничего", предпочитая прожить более социально беззаботную жизнь. Отвечая на вопрос "За сколько можно выучить программирование?" - не существует какого-то однозначного ответа. На самом деле подобный вопрос стоит переформулировать так: "Через сколько времени я буду в состоянии самостоятельно написать такую вот программу"? или например "Через какое время я смогу спокойно читать любой код и сходу понимать что он делает?". У программирования нет конечной точки до которой можно дойти и сказать: "Я обучился". Этот процесс может продолжаться всю жизнь и речь лишь идёт о том, каким уровнем знаний вы хотите себя ограничить.
Умение управлять свободным временем, которое есть у каждого из вас, определяет то, будете ли вы сегодня развиваться или деградировать. Наш мир так построен, что нет какого-то статического состояния, предмет всегда либо портится, либо создаётся. Яблоко либо зреет, либо гниёт. Человек либо развивается, либо деградирует. Время это единственный ресурс которым вы способны распоряжаться и количество затраченного времени прямо пропорционально получению итогового результата. Несмотря на то, что ваше тело живёт в моменте "сейчас", всё ваше мышление основано на прогнозировании будущего и анализе прошлого, не замечая, что будущее наступает каждую секунду, и каждую секунду вы продолжаете ничего не делать, находясь мыслями где-то далеко от момента настоящего. По другому это можно назвать отсутствием концентрации, но суть от этого не меняется.
![eb0d1163eb48951301aa4.png](https://telegra.ph/file/eb0d1163eb48951301aa4.png)
Наверное самый популярный вопрос который люди задают мне в личные сообщения: "Пришли список литературы по которой можно обучаться". Они думают, что я знаю какой-то секретный источник знаний. У меня доступ к информации точно такой же как и у вас. Всё что можете найти вы, то могу найти и я. Другой момент, что вы даже и не пытались искать. Интернет дал вам две важные вещи: свободный и не ограниченный источник знаний, но в тоже время слепую веру в то, что вся информация находится у вас под рукой и вы в любой момент овладеете ей как только захотите. Это иллюзия, потому что вы цените только то, чего у вас нет. Бесплатный источник знаний всегда будет цениться меньше чем платный, даже если в итоге окажется, что они абсолютно одинаковы. Фундаментальные знания не востребованы, поэтому практически никто под них не делает обучающих продуктов. Найти информацию по устройству операционных систем в разы сложнее чем например узнать как исправить ошибку в своём приложении полученную от компилятора. Не смотря на то, что интернет содержит в себе самые разнообразные знания, он представляет собой большую информационную помойку в которой по настоящему ценной и важной информации очень мало на фоне всего остального мусора.
Единственный источник знаний который не умрёт никогда это книги. Каждый автор по разному объясняет один и тот же материал, поэтому усвоение каждой темы будет предполагать прочтение сразу нескольких книг которые будут дополнять друг другу закрывая все ваши пробелы в знаниях. Изначально довольно сложно понять что учить, а что нет, какие знания более ценные, какие менее. Например знание алгоритмов намного ценнее чем знание синтаксиса любого языка, но при этом прочтение книг по алгоритмам будет в десять раз ниже чем по сантиксису. Потому что большинство людей воспринимают популярное за ценное.
На самом деле "популярный" лишь означает то, что на этом сконцентрировано большее количество дураков. Не всё, что на первый взгляд выглядит очевидным, таковым на самом деле является. Например человек, который весь год будет читать книги по программированию и переодически разбирать код уже написанных кем-то программ, будет более лучшим программистом чем тот кто весь год будет писать свой код не изучая при этом ничего нового.
Пока вы пишете код, то вы стоите на месте, потому что писать вы можете только то, что уже знаете. Пользу обучения в программировании определяет не количество строк кода которые вы сегодня написали, а количество новой информации которую вы сегодня освоили. Изучая языки программирования один за другим, вы понимаете что они все примерно одинаковые.
Со временем вы осознаёте, что способны прочитать код на любом языке, но при этом вы почему-то не становитесь умнее. Но начиная изучать фундаментальное программирование, вы с каждой изученной книгой становитесь всё сильнее и сильнее, и в определённый момент времени в вашу голову приходит мысль: "Я могу создать абсолютно всё что угодно, но этот мир настолько огромен, что моё обучение бесконечно и моё развитие не закончится никогда".