Все, что я узнал (в основном, слово рвота)

Около года назад я научился программировать. При изучении любого навыка, включая программирование, я думаю, важно понимать, что нужно для изучения этого навыка, чтобы иметь тип мышления «повышение уровня». Точно так же, как ваш покемон изучает Ice Beam на уровне 38, вы можете получить представление о том, какие навыки вам нужно будет приобрести, когда вы научитесь программировать. Это огромное поле, и нужно многое узнать, прежде чем прыгать.

Это может быть пугающе, особенно зная, что целые карьеры в программировании могут почти не пересекаться в знаниях, кроме основ. Кому-то, работающему в области машинного обучения, возможно, никогда не придется программировать интерфейс мобильного приложения, и он может даже не знать, как это сделать! Просто знайте, что в какой-то момент все начинают с самых низов, и я действительно верю, что каждый может не только научиться КАК программировать, но и начать работать в любой компании-разработчике программного обеспечения или делать все, что захочет, используя эти навыки. . Это не сложно, просто нужно многому научиться. Я собираюсь написать это как руководство для людей, которые только начинают заниматься программированием, но я уверен, что некоторые из этих знаний могут быть полезны разработчикам любого уровня, даже людям с большим опытом, чем я. Я просто чувствую, что многому научился за последний год, и я уверен, что могу написать почти все, что могут написать мои друзья в CS Degrees, и довольно легко выучить любой новый язык программирования, фреймворк или технологию.

Шаги малыша

Во-первых, если вы никогда раньше не изучали язык программирования, изучите Python. Я знаю, что это немного спорно. Большинство людей посоветуют вам выучить X другой язык или скажут, что ситуация у всех разная в зависимости от того, что вы хотите делать с программированием. Просто поверь мне. ПИТОН — ЭТО ПРОСТО! Вы не будете обескуражены и больше никогда не захотите программировать, если начнете с Python, а после изучения Python сможете освоить ЛЮБОЙ язык программирования за короткое время. Он читается как английский, и в нем очень мало причудливых скобок или точек с запятой, которые могут сбить вас с толку, почему ваша программа не работает должным образом. Вы освоите Python быстрее, чем любой другой популярный язык.

Хорошо, хорошо, но где я могу изучать Python, а также ПОЧЕМУ? Разве я не должен просто выучить C или Java, как все «настоящие программисты»? Я думаю, нам нужно немного истории в качестве контекста.

На самом деле я учился из книги Коннора П. Милликена Проекты Python для начинающих: десятинедельный учебный курс по программированию на Python. Книгу Милликена можно завершить за 10 недель или 10 дней, в зависимости от того, как читатель хочет ее воспринять, и в ней есть множество небольших практических задач, чтобы проверить, внимательно ли вы к ней относитесь. У него также есть небольшие проекты, которые представляют собой просто небольшие текстовые игры, такие как палач и блэкджек. Теперь, прежде чем вы вытащите свой кошелек и начнете бежать, подумай: О, чувак, 10 дней до работы разработчика?! Запишите меня!, я должен сказать, что не думаю, что имеет значение, куда вы идете, чтобы изучить основы языка программирования. На самом деле есть много видео на YouTube, которые научат вас программировать с нуля за несколько часов вместо 10 недель. Кроме того, книга Милликена отлично подходит для начинающих, так как дает представление о многих различных предметах программирования, но не дает вам работы, даже близко. Это также, вероятно, не позволит вам создать стартап, о котором вы мечтали с детства. Если бы мне пришлось вернуться, я бы посмотрел туториал от Tech With Tim на YouTube. Он фантастический учитель для начинающих программистов, и у него есть бесплатная подробная серия видеороликов, которые вы можете просмотреть на удвоенной скорости, чтобы понять суть, прежде чем переходить к более интересным вещам.

Вам не нужно тратить кучу времени на Python, вам просто нужно понять, как работает программирование. Это означает умение работать с массивами (списками в Python), словарями, операторами if, циклами, базовыми типами данных, классами и объектами (обещаю, вы довольно быстро узнаете, что все это означает). Требуется некоторое время, чтобы освоиться, но я действительно считаю, что это самая трудная часть обучения программированию.

Получение большей картины

Когда я начинал, я всегда задавался вопросом: «Хорошо, теперь я понимаю, как отправлять «Hello World» на консоль, принимать пользовательский ввод и играть со всеми этими данными, но как, черт возьми, люди создают сумасшедшие вещи с помощью кода?! ” И я бы очень хотел, чтобы у меня было немного контекста об этом, прежде чем теряться в учебнике за учебником о том, как писать циклы for в Python. По сути, разработка программного обеспечения — это ОБЪЕМНАЯ область, и у всех есть разные вещи, которые они хотят создавать. Я предполагаю, что большинство людей здесь заинтересованы в создании программ в Интернете, но есть также разработка игр, встроенные системы (подумайте о системах пожаротушения и когда аппаратное обеспечение встречается с программным обеспечением), программирование операционных систем (кто-то должен сказать вашему физическому компьютеру, как для работы с пользователем) и многое другое. Даже в сети есть масса разных специализаций. Внешний интерфейс — это то, что отображается на веб-странице, это все HTML (в основном текст и ссылки), CSS (стиль и цвет, чтобы сделать ваш сайт красивым) и JavaScript (программирование для изменения HTML и CSS, когда пользователь нажимает на что-то) , и большинство людей называют фреймворком, в основном набором функций, которые добавляют много новых функций к языку программирования, делая его почти новым собственным языком (обычно именно в этом и заключается самое интересное).

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

Существует также бэкэнд, по сути, это место, где перемещаются все данные. Когда я научился программировать, я понял, что класс может представлять что-то из реальной жизни, например, собаку. Я никогда не понимал, почему нас волнует, что у собаки есть имя и что она может вызывать небольшую функцию в моей программе под названием Bark. В реальном мире это действительно очень важно. По сути, класс будет представлять собой данные в вашей программе, с которыми взаимодействуют реальные пользователи или вещи. Вы хотите, чтобы пользователь зашел на ваш сайт? В вашей программе у этого пользователя будет свой собственный класс и может быть метод (функция в классе), который позволяет этому человеку войти в систему. Но как мы храним все эти данные о пользователе? Это будет в базе данных. По какой-то нечестивой причине даже программы по информатике могут быть доведены до конца без того, чтобы студенты узнали о базах данных. Если вы собираетесь получить степень CS, пройдите курс по базам данных, это почти обязательно для любой работы, и вам понадобится это для создания любой мощной веб-программы. Кроме того, вы можете использовать так называемый объектно-реляционный преобразователь (ORM) для подключения ваших классов программирования к таблицам базы данных. Это безумно полезно и помогает вам очень быстро писать массивные системы, есть даже фреймворки, которые сделают всю базу данных за вас, основываясь на том, какие классы вы хотите использовать в своей программе!

Программисты — довольно забавные люди, но все шутки внутри шуток действительно хромают. Как мы называем кого-то, кто работает как с интерфейсом, так и с сервером? Это был бы full-stack разработчик. Хорошо, но почему «полный стек»? Таким образом, на жаргоне можно назвать любой язык программирования или фреймворк частью вашего «стека». Это ссылка на структуру данных, называемую стеком, которая работает примерно так же, как складывание книг в стек и из него… да, довольно неубедительно.

Что дальше?

Итак, что вы должны изучить после Python? Я думаю, это зависит от вас. Лично я думаю, что HTML, CSS и JavaScript могут быть полезны, если вы хотите создать что-то визуальное для портфолио или в качестве хобби веб-проекта. Также неплохо повозиться с внешним интерфейсом, если все, что вы смогли увидеть в своем коде на данный момент, это просто темный текст в терминале. Что следует изучить после HTML, CSS и JavaScript? Что ж, теперь это действительно зависит от вас, потому что существует ТОННА языков программирования для серверной части и ТОННА различных баз данных. К этому моменту вы уже знаете Python, поэтому вы МОЖЕТЕ придерживаться Python, но я думаю, что здесь решение становится немного сложным. Бэкенд-языки, такие как Python и NodeJS, могут быть простыми в изучении, но вам, возможно, придется немного поработать, если вы хотите иметь полностью функционирующую систему входа в систему и безопасность. Лично я не считаю, что для моих навыков разработчика очень полезно реализовать хеширование паролей, пользовательские сеансы и другие программные функции корпоративного уровня с нуля. Вы абсолютно точно можете и, вероятно, в какой-то момент с ними столкнетесь, но я думаю, что вы можете перейти этот мост, когда вам это абсолютно необходимо. Такие языки, как Java и C#, можно реализовать в IDE (интегрированная среда разработки). Они поставляются с множеством функций, которые облегчают вашу жизнь как разработчика. Он сообщит вам, каких пакетов не хватает, поставляется с полнофункциональным отладчиком, поэтому, когда вы ошибетесь в слове «класс» как «клас», он даст вам точно знать, где и в чем проблема. У меня есть опыт работы с C#, и я думаю, что создавать такие полнофункциональные программы с гораздо меньшими затратами на настройку, чем программировать с нуля, было здорово.

Вы определенно захотите научиться пользоваться базой данных. Некоторые ORM могут обходиться без использования SQL (языка, используемого реляционными базами данных), но, вероятно, неплохо его выучить. Также существует несколько баз данных NoSQL, таких как MongoDB или Apache Cassandra. Изучение любого из них должно помочь вам начать работу, а изучение того, какой из них лучше всего подходит для работы, действительно связано с большой архитектурой вашей программы и проектированием распределенных систем, в чем лично я только начинаю разбираться.

Если вы хотите работать, лучше всего знать о структурах данных и алгоритмах. Лично я не согласен на 100% с тем, что каждая компания использует это, чтобы определить, кто хороший программист, а кто нет, и я помог своему отцу, который владеет собственным бизнесом по разработке программного обеспечения, выяснить лучшие критерии найма. Однако, если вы хотите войти в игру, вы должны играть по правилам, и это определенно обязательный навык. Структуры данных и алгоритмы — это в значительной степени то, что каждый, выпускник колледжа или нет, должен изучать самостоятельно. Многие школьные курсы могут научить вас основам, но недостаточно практики, чтобы получить работу в Microsoft. В настоящее время есть один ресурс для обучения, который превосходит все остальные, и это «Интервью по кодированию» Гейл Лаакманн Макдауэлл. На самом деле вам не нужны предварительные знания, прежде чем взяться за эту книгу, поэтому я бы порекомендовал вам просто взять ее и убить каждый вопрос, пока ваши глаза не станут фиолетовыми.

Есть и другие темы, о которых я тоже думал, когда начинал. А как насчет компьютерных сетей, или дискретной математики, или линейной алгебры, или машинного обучения? Проще говоря, многие из этих вещей вы изучаете по мере необходимости, как и большинству веб-программистов, не нужно проходить курс по компьютерным сетям (на самом деле многие ученые степени даже не делают этот курс обязательным). Такие классы, как линейная алгебра и исчисление, могут быть важны для инженера машинного обучения, но это не мешает вам получить работу в любой другой области программирования, не соглашаясь на нее.

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

Подводя итог, я думаю, что это отличная идея — начать с Python в качестве первого языка программирования. Изучив основы Python, вы, вероятно, захотите изучить основы Интернета, HTML, CSS и JavaScript. Как только вы поймете, как пользователь может играть с вещами на своем конце сети, вы сможете научиться программировать простой бэкэнд. В Python есть Django и Flask (хотя я слышал, что Django лучше), в JavaScript есть NodeJS, и почти любой другой язык программирования может работать на бэкенде. Если вы хотите создать что-то многофункциональное, со сложной системой входа в систему, авторизацией и т. д., я бы порекомендовал больше изучить Java, C# или C++ (хотя C++ — это странно, если вы не знакомы с архитектурой компьютера). После этого вы хотите знать систему управления базами данных. Наконец, вы можете выбрать Cracking the Coding Interview, если вы ищете работу (на самом деле это не так важно, если вы хотите создать стартап, и если вам нужен алгоритм, вы, вероятно, могли бы просто понять это по ходу дела) . На этом мой опыт заканчивается (и я не эксперт с самого начала), но я думаю, что если вы дойдете до этого момента, вам будет довольно комфортно изучать практически все, что вам нужно в программировании.