Часть 1

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

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

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

Как пользоваться этим руководством

Скорее всего, вы попадете в одну из пяти категорий ниже:

1. Вы уже умеете программировать и хотите стать лучшим разработчиком программного обеспечения.

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

2. Вы работаете в области STEM, но мало знаете о программировании.

Ваши аналитические навыки уже выше номинала, поэтому не тратьте много времени на Часть I, кроме чтения. Обратите особое внимание на части II и III, потому что вам нужно сосредоточиться на написании кода.

Не присоединяйтесь к группе людей, которые видят такие модные слова, как AI, Machine Learning, Blockchain, и сразу переходите к этим технологиям, не понимая основ. Это глупо, потому что после определенного момента вы будете подавлены и откажетесь или узнаете все неправильно.

3. Вы не из области STEM и хотите научиться программировать.

В вашем случае первоначальным препятствием было бы научить свой разум мыслить более логично и аналитически. Посвятите большую часть своего времени Части I. Задача состоит в том, чтобы перенести существующие ментальные рамки в совершенно новую область. Смена требует времени, и ее нельзя торопить, так что наберитесь терпения и не торопитесь. Как только это произойдет, вы будете в благоприятном психологическом состоянии, чтобы уделять больше времени и усилий ускорению вашего прогресса на более поздних этапах. Вы можете прогрессировать быстрее, чем ваши коллеги по STEM, поскольку ваши навыки дивергентного мышления более развиты, что делает вас по своей сути более творческими и интуитивно понятными при поиске решений.

4. Собираетесь учиться за границу.

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

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

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

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

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

Множество инженеров проводят все свои 4 года, ничего не делая, кроме как «улучшая свой указатель (CGPA)», и до сих пор не получают работу по своему выбору или, что еще хуже, остаются безработными, потому что никогда не считали это достаточно важным, чтобы развивать соответствующие отраслевые навыки.

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

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

Чем это руководство отличается от множества статей в Интернете?

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

Многие из вас могут спросить, почему я включил информатику в название. Какое отношение имеет программирование к информатике? Разрешите мне положить конец этой дискуссии раз и навсегда. Знание информатики делает вас лучшим программистом - просто и понятно. Даже без CS вы можете быть хорошим программистом, но ваши возможности сильно ограничены, потому что CS предоставляет вам мощный набор инструментов для решения проблем. Если вы думаете иначе, велика вероятность, что вы будете продолжать биться о кирпичные стены и тратить время впустую - как я поступил, когда только начинал.

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

Хватит сказать, давайте прямо сейчас!

Настоящая сделка: поэтапный путь к тому, чтобы стать компетентным программистом

Я разделил все руководство на четыре части, чтобы очертить весь путь. Важно потратить некоторое время на каждую часть, прежде чем переходить к следующей, потому что ваши навыки дополняют друг друга. Это не руководство типа «Изучите программирование за 21 день». Вы должны приложить усилия и часы. Я здесь, чтобы направлять вас. Периодически просматривайте этот пост, чтобы освежить свои знания и не терять общую картину, поэтому добавьте ее в закладки. Нет фиксированного количества времени, которое вы можете посвятить определенной части, поэтому не стесняйтесь двигаться вперед и назад по мере продвижения. Как я уже говорил, все навыки, которые вы изучаете, влияют друг на друга.

Что такое компьютерное программирование?

(Вы можете пропустить это, если вы уже программист)

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

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

Итак, теперь ключевой вопрос: как можно использовать эту вычислительную мощность? Просто вы даете компьютеру инструкции, как умножить два числа, и он сделает это за вас. Допустим, вы хотите умножить два числа, вот как вы дадите компьютеру команду сделать это.

Чтобы умножить 2 числа, вы явно указываете компьютеру:
Шаг 1: Возьмите число A.
Шаг 2: Возьмите число B.
Шаг 3: Пусть C будет произведением A и B.
Шаг 4: Отобразите значение C пользователю.

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

Языки программирования

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

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

Тем не менее, давайте начнем с части I.

Для каждой части я предоставил ссылку на ресурсный документ, так что не забудьте проверить это!

Часть I. Развитие мышления программиста

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

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

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

Помня об этом, первым делом нужно немного по-другому подойти к математике.

1. Повторно изучите основы математики.

Чтобы преуспеть в математике в школе и колледже, нас учат подставлять числа и запоминать уравнения без какой-либо более глубокой интуиции за формулами. Это не очень полезно, когда вы хотите писать программы. Узнайте, почему вы применяете определенный шаг при решении математических задач. Понять, что делает этот шаг и как он превращает проблему в более простую. Для каждой проблемы, с которой вы сталкиваетесь, сознательно продумывайте способы решения проблемы, используя уже знакомый вам базовый набор «инструментов». Знание того, какие инструменты использовать и как их использовать, приходит с практикой и путем выявления повторяющихся шаблонов.

Вот очень простой пример, чтобы продемонстрировать это: скажем, задача состоит в том, чтобы умножить два на себя 10 раз. Мы знаем, что это представлено как 2¹⁰. Новый инструмент или оператор возведения в степень был использован, чтобы упростить задачу. Теперь вы можете применить все свойства, которые применяются к экспонентам. Изменив представление о проблеме и используя правильный инструмент, вы придадите себе больше власти (каламбур).

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

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

2. Изучите Python

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

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

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

3. Искусство использования поиска Google

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

4. Внимательно читайте.

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

5. Переход на систему UNIX (необязательно)

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

Резюме

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

Часть I Ресурсы

Часть II: Думайте, планируйте и выполняйте как программист

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

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

1. Изучите C ++ и начните писать простые программы.

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

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

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

2. Чтение документации должно стать для вас второй натурой.

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

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

3. Практика. Повторить. Упражняться.

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

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

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

4. Хорошо разбирайтесь в рекурсии.

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

Резюме

Пока что вы знаете язык низкого и высокого уровня и можете в достаточной мере оценить различия в «контроле», который вы имеете над своими программами. К настоящему времени вы должны уметь писать простые программы с использованием Python и C ++ и понимать разницу между обоими языками.

Отсюда многие люди попадают в колею изучения большего количества языков, что само по себе является бесполезным занятием. Один из наиболее частых вопросов, которые мне задают новички, - «Сколько языков вы знаете?», Что позволяет мне понять, насколько часто начинающие вводят в заблуждение, поскольку они связывают мастерство программирования со знанием большего количества языков. Программирование - это не знание большого количества языков. Используемый вами язык - это просто способ эффективно выразить и решить вашу проблему. На данном этапе вы «программист», но этого недостаточно. Теперь вам нужно изучить компьютерные науки, чтобы вывести свои навыки на новый уровень.

Часть II Ресурсы

Часть III: ваше знакомство с информатикой

Четкое понимание ресурсов на этом этапе сделает вас лучше, чем большинство программистов в вашей группе сверстников. Вы можете даже стать лучше, чем большинство студентов-инженеров 2–3 курсов в Индии. Ваш прогресс здесь зависит от вашей жажды материала в этом разделе. Так что сосредоточься.

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

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

Интересный факт: Во 2-м семестре инженерного у нас был предмет под названием СУБД (системы управления базами данных). Я был удивлен, обнаружив людей, которые рисовали лучшие ER-диаграммы для своих проектов баз данных, но когда дело доходило до фактического проектирования базы данных для практических приложений, они терпели неудачу. Они были настолько сосредоточены на правильном отображении деталей диаграммы, что забыли саму причину, по которой они это делали. Я не виню их, потому что их никогда не учили, что диаграммы нужны им для создания лучших баз данных, а не для улучшения их навыков рисования.

1. Дискретная математика

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

Изучая дискретную математику, следуйте тому же принципу, который я изложил в части I. Думайте в терминах математических структур и процедур, используемых для управления ими. Дискретная математика просто увеличивает количество имеющихся в вашем распоряжении инструментов для решения проблем. Если вы преодолели страх перед математикой, вам понравится курс, который я указал в разделе ресурсов.

2. Структуры данных и алгоритмы

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

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

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

3. Передовой опыт

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

Что ты умеешь? Потратьте время на понимание и применение принципа DRY (не повторяйтесь) на практике. Не пишите повторяющийся код, так как это замедлит вашу работу и сделает вас более склонными к ошибкам. Пишите полезные комментарии и документацию везде, где можете. Когда я начинал, я думал, что это глупо, пока однажды я не открыл старый проект и не понял, что весь мой код непонятен. Программисту не нужно много запоминать. Вы запоминаете, что важно, и ищите то, что нужно.

4. Контроль версий (Git)

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

5. Объектно-ориентированное программирование.

Введение в совершенно новый способ программирования. Пока что мы занимаемся процедурным программированием. Теперь мы переходим к объектно-ориентированному программированию, что является совершенно новой парадигмой. Введение в инкапсуляцию и абстракцию данных еще больше поможет вам оценить дизайн этого руководства. В ООП все является объектом, и идея состоит в том, чтобы четко разделить интерфейс и реализацию. Вы также изучите классы и наследование. В конце концов, вы начнете разрабатывать объектно-ориентированные решения и научитесь создавать умные черные ящики для решения проблем. Изучение Java - хороший способ познакомиться с этой новой парадигмой программирования. Python также поддерживает ООП, так что попробуйте изучить это!

6. Тренируйтесь усердно

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

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

Резюме

Вы знаете более чем достаточно для создания программного обеспечения, меняющего правила игры. Вы должны усвоить все до этого, чтобы перейти к следующему шагу. Отсюда дополнительная теория не принесет вам никакой пользы. Вы должны вкладывать время исключительно в практику и создание полезных проектов. Программирование - это прикладная наука: следуй правилу 80/20, что означает 80% времени на практику и 20% на чтение теории.

Часть III Ресурсы

Часть IV. Пришло время создать кое-что интересное

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

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

  1. Определите проблему, над которой вы работаете, и конкретизируйте детали. Четко сформулируйте свои цели и задачи.
  2. Посмотрите существующие или похожие проекты и определите, в чем они преуспевают, а где нет. Посмотрите, где ваша идея вписывается, как проект согласуется с целями и задачами, которые вы имеете в виду, и запишите все.
  3. Составьте список всех навыков, которым вам нужно научиться для выполнения проекта, и степени, в которой вам необходимо развить навыки, чтобы выполнить проект. Знайте свои сильные и слабые стороны.
  4. Составьте план, чтобы получить необходимые навыки. Найдите нужных людей, которые помогут вам, и необходимые учебные пособия, чтобы начать работу. Сосредоточьтесь исключительно на развитии навыков, необходимых для выполнения вашего проекта. Легко увлечься погружением в глубину. Помните, что вы изучаете навыки, необходимые для выполнения проекта, а не пишете докторскую диссертацию. дипломная работа по ней. Если только это не твоя цель.
  5. Начните работу над проектом, обновите свои цели и задачи и четко обозначьте свои сильные и слабые стороны. Разбейте проект на выполнимые подзадачи и назначьте для каждой метрику объективности. Это означает, что вам нужно знать, когда перестать гнаться за совершенством и сосредоточиться на общей картине.
  6. Казнь нетерпеливо. Повторяйте, пока все ваши цели не будут выполнены.

Прочтите это, чтобы узнать, как научиться лучше учиться.

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

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

Часть IV Ресурсы

Заключение

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

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

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

Ранвир Аллахбадия (BeerBiceps на YouTube) выпустил фантастическое видео о« Ментальности воина ». Лично мне это помогло не беспокоиться о жизненных трудностях, воспитывать благодарность и оставаться устойчивым в самых сложных ситуациях.

Части с I по IV: Все ресурсы

Личная заметка

Мне было 14 лет, когда я впервые научился программировать. Я делал это для развлечения, потому что мне нравилось заставлять компьютеры делать то, что я хотел. Как и многие другие дети в этой стране, меня отправили в крысиные бега IIT-JEE. Общее мнение «экспертов» в области образования в то время заключалось в том, что «учись на JEE, и твоя жизнь будет установлена». Как и любой наивный ребенок в этом возрасте, я увлекся пропагандой и бросил программировать. В течение следующих шести месяцев я смирился с ерундой, которой скармливали мне и множеству других детей в этой стране. Я быстро отступил и начал сосредотачиваться на том, что люблю, вместо того, чтобы слепо следовать за крысиными бегами. К счастью, мне повезло с родителями, которые всем сердцем поддержали меня в этом, хотя мне потребовались некоторые усилия, чтобы убедить их. Я должен был показать им, что я намерен много работать, нести ответственность за свои действия и сокрушать свои цели. Я хотел поступать по-своему. Собственно говоря, я почти не учился на 12-й доске, потому что знал, насколько это бессмысленно. В том возрасте нужно было доверять своей интуиции и делать то, во что я верил. Вы должны дать себе время, чтобы расти, совершать ошибки и не бояться последствий того, что произойдет.

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

Послушайте, я определенно следовал бы системе, если бы она принесла мне желаемые результаты, но это не так, и глубоко внутри, все это знают. Я неоднократно спрашивал себя: хочу ли я быть посредственным или превосходным? Это та жизнь, которую я хотел бы прожить через несколько лет? Сделает ли это меня счастливым в долгосрочной перспективе? Я не мог убежать от системы и победить ее, потому что это слишком сложный механизм для этого. Единственный способ справиться с этим - обойти его. Сегодня, когда я оглядываюсь назад и внимательно смотрю на текущий сценарий, я бы на 100% не делал ничего по-другому.

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