Как сделать программирование если пути нет

Обновлено: 06.07.2024

Спустя восемь месяцев я уже работал в крупном банке на позиции фронтенд-разработчика. Еще через год переехал в Германию. Теперь работаю в Берлине и получаю около 2600 € в месяц. На обучение я потратил всего 300 Р .

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

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

За час занятий с учениками я брал 500—1000 Р , на выставках платили всегда по-разному , но обычно 2000—5000 Р в день. Вроде бы неплохие цифры, но трудозатраты часто сильно превышали вознаграждение, да и заказы попадались время от времени. Поэтому я решил поискать что-то другое.

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

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

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

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

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

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

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

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

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

Навыки и инструменты, которые осваивает веб-разработчик в ходе своей карьеры. И это только начало — вот полная версия

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

Обращение фронтендеров Т—Ж

На сегодняшний день фронтенд — это СОВСЕМ не легче, а иногда даже сложнее того же бэкенда. JavaScript за каких-то 20 лет из милого, невинного пупсика, написанного на коленке ради создания простейшего интерактива, превратился в МОНСТРА, с помощью которого можно реализовывать даже серверную часть сайта.

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

Сначала разберемся, что вообще придется изучать. Я буду сильно все упрощать.

Любой сайт работает благодаря трем элементам: HTML, CSS и JavaScript. Упрощенно их называют кодом сайта или просто кодом. Если вы разобрались в них, то уже сможете собирать и программировать полноценные веб-страницы и даже целые сайты.

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

— paragraph), где заголовок (

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

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

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

Некоторые курсы полностью бесплатные, другие — только до определенного уровня. Стоимость платных курсов зависит от их продолжительности и насыщенности. Например, недельный интенсив с ментором может стоить 14 900 Р , а полный годовой курс с дипломным проектом в конце — уже 148 500 Р .

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

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

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

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

Так выглядит структура курса на сайте HTML Academy. Уроки отличаются между собой и по объему, и по сложности. Бывает, что за час успеваешь пройти 2—3 урока , а иногда над одним приходится сидеть целый день

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

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

Если есть время, лучше не спешить

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

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

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

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

Курс по веб-разработке там очень обширный и охватывает много тем. Чтобы изучить их все, потребуется около 1800 часов, или 75 дней. Зато, окончив этот курс, вы будете обладать всеми необходимыми знаниями для начала карьеры — от верстки простой веб-страницы до визуализации данных и способов обезопасить сайт от хакерских атак.

понадобится, чтобы пройти курс по веб-разработке на Freecodecamp

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

И я ее встретил, когда дошел до JavaScript.

Освоить JavaScript оказалось гораздо сложнее, чем разобраться с тегами в HTML и CSS. Это уже полноценный язык программирования, и, чтобы в него вникнуть, придется понять довольно сложные концепции. Например, хойстинг (не путать с хостингом), замыкания, каррирование, контекст вызова функции, параметры и аргументы функции, синглтон-паттерн, инстанс объекта, интерфейс объекта и т. д.

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

Так выглядит урок на сайте Freecodecamp. Это стандартный интерфейс любого курса по основам программирования: слева — блок с теорией, по центру — терминал, где пишется код, а справа — окно, в котором выводится результат исполнения вашего кода

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

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

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

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

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

MDN — сейчас это мой любимый сайт с документацией

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

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

Если выбрать конкретный тег — здесь , — учебник покажет, зачем он вообще нужен, в каких браузерах работает и как его применять

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

А это уже проект посложнее — калькулятор, который я сам запрограммировал. Тут потребовались углубленные знания JavaScript

Где-то через три месяца после начала изучения первого курса по программированию я решил, что пора искать работу в качестве веб-разработчика . Подумал, что главное — попасть в тусовку, а там разберусь.

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

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

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

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

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

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

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

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

Еще я не всегда понимал, что вообще от меня нужно, какую проблему должен решать мой код, как запустить проект, как проверить, что все работает правильно. В итоге я ушел из компании через три недели. За отработанное время мне заплатили около 13 000 Р .

я получил за свою первую работу программистом

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

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

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

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

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

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

Хеппи-энд

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

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

И напоследок

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

Как я сам узнал этот секрет

Дальше я рассказывал студентам секрет быстрого изучения программирования. Но как я сам узнал его?

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

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

Мой приятель попал именно в такую ситуацию. Драйвера для его материнской платы не было. Но на дискете с драйверами прилагался текст драйвера на языке Си.

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

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

Шаг за шагом он добавил обработку всех команд и джойстик полностью заработал!

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

Когда я его спросил:

— Как же ты так во всем самостоятельно разобрался?

— Играть очень хотелось!

Так я узнал секрет быстрого изучения программирования.

Что я говорил студентам?

Что за программа, значения не имеет. Главное, чтобы студент сам ею пользовался. Обычно студенты писали базы данных, проигрыватели аудио, простые игры.

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

В чем же секрет этого способа изучения программирования?

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

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

Знания про запас

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

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

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

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

Методика обучения пошагово

Итак, как же выглядит самый эффективный путь изучения программирования?

Шаг 1. Выберите программу, которую будет сами использовать.

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

Главное — не думайте о том, что вы сейчас приступаете к проекту на миллиард долларов. Стартап вас еще ждет, но не сейчас. Программа должна быть самой обычной.

Шаг 2. Поищите аналоги и посмотрите, как они сделаны

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

Шаг 3. Сразу начните писать программу

Не ждите идеала. Пишите кривой, но работающий код. Запомните: сначала — результат, а потом — оптимизация.

Шаг 4. Заминка

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

Шаг 5. В зачет идет только код

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

Шаг 6. Пользуйтесь программой

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

Шаг 7. Друзья-тестировщики

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

Твердость и упорство

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

Но я предупреждал в самом начале, что это путь не для всех, только для самых упорных.

Я прочитал много книг для различных языков программирования, Java, Python, C и т. Д. Я понимаю и знаю все основы языков, и я понимаю алгоритмы и структуры данных. (Эквивалентно скажем, два года занятий по информатике)

НО я до сих пор не могу понять, как написать программу, которая делает что-нибудь полезное.

Все книги по программированию показывают, как писать язык, а НЕ как его использовать! Все примеры программирования являются очень простыми, например, создание карточного каталога для библиотеки или простой игры или использование алгоритмов и т. Д. Они не показывают, как разрабатывать сложные программы, которые действительно делают что-то полезное!

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

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

Как я могу встать на правильный путь?

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

@Michael - я, например, проголосовал как не по теме, перехожу на P.SE. Я думал, что это было бы более подходящим местом для обсуждения программирования как карьеры и ремесла.

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

Создание более сложных программ приходит с опытом. Когда я впервые программировал, я думал, что у меня все хорошо, если длина была более 25 строк (и мне приходилось использовать полосу прокрутки). Теперь я пишу сотни строк в день в течение одного и того же приложения проекта.

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

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

Никто не делает. По крайней мере, изначально.

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

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

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

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

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

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

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

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

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

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

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

Отличный пример, но если бы это могло начаться немного поменьше, было бы еще лучше. Например, начиная с построения нескольких структур данных, затем некоторого кода, который предоставляет API для этих структур данных, затем некоторого кода, который использует этот API для реализации функции кэширования, и, наконец, GUI поверх этого. Вуаля, вы написали кеш-сервер!

Даже самая большая программа начинается с идеи и пишется по одной строке за раз.

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

Тем не менее, есть некоторые вещи, о которых вы должны знать с самого начала:

То, о чем вы говорите, это больше программная инженерия, чем программирование. Это немного архитектура, немного "лучшие практики" и "шаблоны проектирования", немного работа с другими. В то время как есть книги, которые могут помочь, большинство из них приходит из опыта. Никто не начинает писать, скажем, Microsoft Word.

Кроме того, даже код, который вы хотите написать самостоятельно, может оказаться слишком большой работой для вас одной, чтобы выполнить ее в предусмотренные вами сроки. Сколько еще программистов вам нужно для работы над проектом? Как вы разделите работу? Как будут разработаны различные модули, чтобы они все сошлись вместе, даже если они были написаны разными людьми? Как вы все будете работать над одним и тем же исходным кодом, не стирая изменения друг друга (ответ: контроль версий, который чрезвычайно полезен, когда вы работаете соло, но незаменим при работе с другими).

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

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

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

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

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

Читайте также: