Разработка → Самое сложное в программировании это…

rustamaha 4 октября в 20:15 76,8k


Мне очень понравилась ветка обсуждений на Quora.com: What is the hardest part about learning to program? Все 87 ответов я так и не прочитал, но понравившиеся, выделил в отдельную статью из 10 пунктов. Это вольный пересказ мнений многих разных людей. Если читателям будет интересно, я продолжу.

1. Разница между высокими стандартами и своими низкими умениями


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

Что касается необычайных преимуществ программирования, то вот они:

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

2. Примите факт, что компьютер всегда прав, а вы — нет


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

3. Готовьтесь к худшим сценариям


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

4. Контроль за эмоциями


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

5. Самостоятельность


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

Логика программирования заключается в том, чтобы разбить большую задачу на маленькие подзадачи и последовательно реализовать их, а потом связать воедино. Программист — не тот кто на перегонки печатает текст кода со знанием всех команд, а тот, кто мыслит в логике программы. И когда у вас наконец получается сделать что-то самому, самостоятельно, этот момент невероятно вдохновляет и вы вспоминаете свою грандиозную идею, которая недавно казалась невыполнимой и думаете: “О-хо, теперь я смогу реализовать её!” Хотя, конечно, вам еще расти и расти до её реализации, но момент всё равно приятный.

6. Незнание, с чего начать


  • Вы не знаете, какой язык начать изучать: C, Python, Java, PHP, C++, Ruby и еще миллион других языков.
  • Вы не знаете, где изучать: по книге, онлайн материалам, или записаться на курсы.
  • Вы не знаете, что изучать: мобильные приложения, Android, iOS, веб, фронтенд, бекенд, операционные системы, искусственный интеллект, машинное обучение, DevOps?
  • Вы не знаете как учиться: читать книги, чужой код, взять кого-нибудь для совместного обучения, программировать соревновательно, напару, устроиться стажером?

Очень много этих вопросов: “какой, где, что, как, …. ?”. Вы советуетесь с друзьями, слушаете профессионалов, спрашиваете на форумах. Но их ответы ещё больше запутывают вас.

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

Чтобы справиться с этим, следуйте этим советам:

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

Советы для инженеров:

  • Изучайте весь стек. Со временем, осваивайте весь стек технологий. Например, если вы веб-программист, не ограничивайтесь только фронтендом. Имейте представление о бекенде, базе данных, сервере, сети. Имея цельное представление о разрабатываемом продукте, вы сможете стать продвинутым инженером, принимающим правильные решения.
  • Будьте самообучаемыми. Программная разработка одна из самых динамично развивающихся отраслей во всём мире. Если фундаментальные принципы меняются редко, то инструменты — чуть ли не каждый день. Важно следить за всеми новинками и уметь самостоятельно осваивать необходимые для вас.
  • Учитесь общаться и сотрудничать. Если вы умеете что-то хорошо делать, то для вашей компании вы полезная единица = 1. Но если при этом вы поддерживаете и вдохновляете ещё 10 человек, то вы превращаетесь в глазах руководства в = 11.

7. Много всего, вокруг самого программирования


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

Выбор и поддержка разных шаблонов, создание иконок, логотипов, баннеров.

Регистрация в play-market, app-store, настройка платежных систем, заполнение нудных бланков. Потом они пишут, что ты что-то сделал не так и приходится все заново переделывать.

Заказ рекламы в google-ads и поиск лучших вариантов, налаживание каналов сбыта, а ещё эта ограниченность бюджета, которая связывает тебя по рукам и ногам…

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

8. Невозможно всё знать


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



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

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

9. В реальной жизни не всё так идеально, как на учёбе


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

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

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

10. Балансирование между теорией и практикой


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

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

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

UPD


11. Борьба с багами


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

Самое обидное, что они появляются когда вы вроде бы всё сделали правильно, и можно приступать к дальнейшим свершениям. Но вдруг программа перестает работать без видимых причин, или работает не так, как задумано. И приходится всё бросить и тратить несколько часов, а то и дней на поиск этой ошибки. Кажется, будто это время тратится впустую (ведь вы не занимаетесь созданием «нового», а ковыряетесь в «старом»). Чтобы пережить этот период нужно титаническое терпение.

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

12. Идти быстро и ломать вещи


Нужно развивать в себе особый склад характера, когда вы не боитесь идти вперед, не будучи заранее готовыми к этому. Старый девиз Фейсбука: «Идите быстро, ломайте вещи. Если вы ничего не ломаете, значит движетесь медленно».
Проголосовать:
+80
Сохранить: