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

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

1. Для программистов также важны навыки работы с людьми

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

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

Затем добавьте к этому тот факт, что не со всеми легко ужиться, и у вас есть рецепт неприятностей. Большинству программистов уже не хватает навыков работы с людьми, поэтому они представляют себе острые ощущения от работы только с компьютерами, что они понимают гораздо лучше, чем люди. Как объясняется в предыдущем абзаце, все наоборот. Нравится вам это или нет, но вы будете проводить гораздо больше времени, работая с людьми, чем с компьютерами. К тому времени, когда вы, наконец, закатите рукава и начнете «программировать как ветер», вы, вероятно, устанете от встреч и устанете от того, что к вам будут относиться как к ресурсу, а не как к ценному опыту. Хотя все компании разные, трудно найти компании с дружелюбной и комфортной корпоративной культурой. Не только это, но все меняется даже день ото дня.

2. Опыт без полномочий

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

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

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

3. Естественное любопытство к экспериментам ОБЯЗАТЕЛЬНО

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

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

4. Компилятор / компьютер требует абсолютного совершенства

Представьте, что вы не можете отправить электронное письмо, пока не исправите каждую грамматическую ошибку, слово с ошибками и пропущенную запятую. Звучит смешно? Если у вас компьютер в качестве начальника, это описывает КАЖДУЮ электронную почту. За исключением письма, мы говорим о написании компьютерной программы.

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

5. Идеи просты; компьютерные программы сложны

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

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

6. Не всякая ошибка является ошибкой

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

Мой вам совет: расслабьтесь! Просто расслабься на секунду. Не всякая ошибка - это ошибка. Не каждая ошибка - ваша вина. Не каждую ошибку даже нужно исправлять сразу. Кроме того, ошибки МОЖНО исправить.

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

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

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

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

7. Отсутствие ошибок НЕ означает отсутствие ошибок

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

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

Есть два основных типа ошибок: ошибки компиляции (красные, волнистые) и ошибки времени выполнения или логические ошибки. О последнем мы и говорим сейчас.

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

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

8. Решите проблему, а не просто проблему

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

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

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

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

Таким образом, запомните эти простые правила поиска и устранения неисправностей и отладки:

A) Всегда ПРОВЕРЯЙТЕ свой код

Б) Проверяйте и подтверждайте все, особенно то, что, по вашему мнению, в этом не нуждается

C) Старайтесь не делать «резких» изменений, случайное предположение, чтобы уговорить ошибку исчезнуть; они часто создают больше проблем

Г) Тогда ДВОЙНАЯ проверка

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

9. Основная проблема разработки программного обеспечения

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

У каждого свой стиль работы. Один размер никогда не может вместить всех, но, к сожалению для вас, как программиста, один размер НАМНОГО дешевле и эффективнее, чем три или четыре размера. Вам редко будет предоставлена ​​возможность реализовать все возможные функции - все навороты, которые только можно придумать. Часто руководство прямо противоположное требует от вас. Им нужен простой, минимально жизнеспособный продукт (MVP), чтобы протестировать концепцию и посмотреть, понравится ли она клиентам и стоит ли вообще создавать полноценную версию.

10. Технологии - непредсказуемая движущаяся цель

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

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

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

11. Оценить сложно

Самые интересные и ценные проекты - это, как правило, те, которые никогда ранее не реализовывались. Поскольку они никогда не выполнялись, оценка того, сколько времени они потребуют, вызывает особые разочарования, трудности и боль. Непредсказуемость (пункт 10 выше) по определению трудно предсказать!

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

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

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

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

Https://developers.slashdot.org/story/18/09/06/2024232/software-developers-are-now-more-valuable-to-companies-than-money-says-survey

Https://www.cnbc.com/2018/09/06/companies-worry-more-about-access-to-software-developers-than-capital.html