КАК ИЗУЧАТЬ ПРОГРАММИРОВАНИЕ

КАК ИЗУЧАТЬ ПРОГРАММИРОВАНИЕ

 

Согласно международной исследовательской компании IDC (International Data Corporation), каждые три года количество программистов увеличивается примерно на 3 млн, при этом качество знаний у новоприбывших программистов снижается примерно с той же интенсивностью. И уже сейчас многие люди не способны понять большинство научных книг написанных в XX веке,  в которых опускалось объяснение многих базовых вещей, подразумевая, что раз человек читает эту книгу, то он является достаточно образованным, чтобы её понять.

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

Работа, вакансии, реклама нам диктуют каким уровнем знаний должен обладать специалист в своей области и стремление человечества всё упростить и автоматизировать привело не только к более простой и удобной жизни, но и к тотальной деградации.

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

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

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

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

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

Принцип бери и используй то, что тебе подарили более умные люди.

Вместо того чтобы изучать 3D графику с нуля достаточно взять готовый движок делающий все за тебя, ну а любые алгоритмы которые тебе потребуется в работе уже давно кем-то написаны, поэтому мы всегда выберем готовое и надёжное решение вместо того, чтобы пытаться написать всё это с нуля или уж тем более попытаться понять как это работает.

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

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

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

Всё что можно не знать мы будем не знать, всё что можно не делать мы будем не делать.

Как правило у таких людей полностью отсутствует какая-то идея олицетворяющая их действия, смысл жизни на который они готовы потратить половину отведенного им времени. Человек пришел зарабатывать деньги и это его реальность. Он зовётся программистом.

Но… что если бы всё было не так?

Но… что если бы всё было не так?

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

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

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

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

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

Один человек пишет вебсайт, другой человек пишет компилятор. Уровень знаний двух этих людей не сопоставим и в итоге мы пришли к некой концепции, в которой всё программирование принято разбивать на узкоспециализированные области, давая человеку отвечающему за нее свое название, определяющие уровень его знаний и навыков, которыми он должен обладать. Это те самые области из которых мы привыкли выбирать вектор своего развития, веб, мобайл, геймдев, десктоп и многие другие, которые подразделяются еще на более узкие вроде python разработчики, javascript разработчика, далее еще уже, frontend, backend, разработчики по фреймворкам и так далее. Все эти области появились искусственно, образовав свою экосистему, очень хорошо подходящую для бизнес-задач.

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

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

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

 

 

 

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

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

Пересылая данные по интернету ты ежедневно используешь криптографические протоколы безопасности позволяющие твоим данным доходить до конечной точки в целостности, ты используешь браузер как платформу написанную абсолютно на других языках и технологиях, весь интернет оказывается построен на протоколах TCP/IP и твой вай-фай роутер оказывается не таким уж и безопасным как ты себе представлял. У тебя отпадает вопрос почему общаясь с другом по видеосвязи часть данных бесследно теряется, а картинка в формате .jpeg, которую ты сегодня смотрел, оказалась прошла целый ряд трансформаций по сжатию, перед тем как ты ее увидел.

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

Был ли ты от всего этого абстрагирован? Нет.

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

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

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

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

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

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

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

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

 

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

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

Изучая программирование в обратной последовательности новичок читая очередную книгу, просто не будет понимать как ему использовать всю эту полученную информацию. В конечном итоге он просто убьет в себе желание стать программистом уже на первой неделе своего обучения, поверив в мысль, что это не его. Это как закрытая карта в компьютерной игре где ты оказался в её середине, ты просто не знаешь куда тебе идти. Двигаясь от языка программирования по направлению вниз ты будешь постепенно закрывать пробелы в знаниях, скажем так в более щадящий форме. И такая последовательность обучения было бы прекрасной если бы не тот факт, что 99% всех обучающихся останавливаются на самой первой ступеньке, будучи запертыми в своей экосистеме.

Дело в том, что вся реклама которую мы видим направлена на обучение языкам программирования и одни знания позиционируется как полезные, дающее вам рабочие места, другие бесполезные, не дают вам ничего кроме как удовлетворения своего собственного любопытства.

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

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

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

 

 

 

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

В конечном итоге каждый успеет в жизни сделать лишь то, на что хватит его времени, и многие просто психологически не готовы тратить годы на какое-то там обучение, желая иметь результат прямо здесь и сейчас. Руководствуясь принципом всё или ничего гарантированно выберут ничего, предпочитая прожить более социально беззаботную жизнь. Отвечая на вопрос за сколько можно выучить программирование, не существует какого-то однозначного ответа, и на самом деле подобный вопрос стоит переформулировать так: Через сколько времени я буду в состоянии самостоятельно написать такую вот программу? или например: Через какое время я смогу спокойно читать любой код и сходу понимать что он делает?. У программирования нет конечной точки до которой можно дойти и сказать я обучился, этот процесс может продолжаться всю жизнь и речь  лишь идет о том каким уровнем знаний ты хочешь себя ограничить.

Умение управлять свободным временем которое есть у каждого из нас каждый день, определяет то, будешь ли ты сегодня развиваться или деградировать.

Умение управлять свободным временем которое есть у каждого из нас каждый день, определяет то, будешь ли ты сегодня развиваться или деградировать.

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

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

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

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

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

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

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

Ссылка на оригинал