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

Если вы такой же, как и ваш истинный человек, вы хотите быть главной фигурой на работе. Вы хотите силы. Вам нужен авторитет. Вы хотите контроля. И вы хотите, чтобы Дженнифер Лопес свернулась в лепешку размером с человека (подождите, что?). Вы хотите убежать в это проклятое место, если честны с собой. А кто нет?

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

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

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

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

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

«Как продвигается твой проект по программированию, детка?»

Вы думаете: мама приготовила мне что-нибудь поесть и закрыла это. Но вы говорите: «Отлично, мама, почти готово». Лжец!

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

Это то место, куда вам нужно пойти, прежде чем вы начнете программировать в целом (то есть программировать более крупные проекты, да).

Начни с малого

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

Вы понимаете, насколько легче для писателя погрузиться в это, чем пытаться написать следующего Моби Дика (также известного как китовое порно)?

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

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

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

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

Что ж, книга, которую я купил, помогла мне встать на верный путь, но поскольку это все еще относительно сложная задача - на самом деле довольно сложная, у меня есть только калькулятор обратной префиксной нотации (RPN). Их очень легко разбирать (подумайте о простых манипуляциях со стеком, таких как swap, push, pop и т. Д.), Так что моя работа упростилась.

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

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

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

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

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

Итак, как программировать (и практиковаться) в малом?

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

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

Например, я вырос как программист на C, и, поскольку C является основой C ++, сильные стороны C делают ваш код C ++ намного лучше. Я взял книгу «Язык программирования C», также известную как книга K&R, от фамилий авторов и решил все проблемы в ней. Я имею в виду все, даже если это казалось простым.

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

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

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

Резюме

Начни программировать. Попрактикуйтесь, начав с написания небольших программ, и делайте все, что в ваших силах, пока это не станет настолько простым, что станет смехотворным. Затем займитесь более сложными проектами. Развивайте свой набор навыков с помощью самоотверженной практики, пока эти более крупные проекты тоже не станут естественными для вас, и ваш путь к мастерству станет на один шаг ближе. Следующий шаг… быть большой собакой! (или что-то в этом роде.)