Какому навыку в программировании обучить сложнее всего? На этот вопрос постарались ответить пользователи сайта Quora.
Стив Гэринг, технический директор Easil (2017-н.в.)
Есть пара вещей, которые кажутся мне особенно сложными и по-моему именно они отличают разработчика от программиста. Недостаточно сделать, необходимо проверить.
Нередко можно услышать: «Задача X выполнена, осталось только протестировать программу и можно переходить к задаче Y». Однако на следующий же день можно услышать от разработчика: «Я все еще работаю над задачей X, в ней обнаружилось несколько багов и мне придется исправлять их весь день».
Большинство разработчиков не считает тестирование частью своей работы. Для них это обременительная обязанность, которой должны заниматься тестировщики. То, что выполнено с точки зрения разработчика, как правило проваливается на стадии тестирования. Однако если задачу выполнял программист, проблем на стадии тестирования возникнуть не должно.
Один мой бывший коллега ненавидел тестирование, но я настаивал на том, чтобы он проводил более тщательную проверку продукта на стадии разработки. В конце концов коллега ушел и стал руководителем собственной команды и проекта. Несколько месяцев спустя он сказал мне: «Теперь я понимаю, почему ты заставлял меня заниматься тестированием, ведь оно действительно полезно и приносит значительные плоды». Ваш код должен читаться легко, как книга.
Код не должен выглядеть, как сложное алгебраическое уравнение, он должен легко читаться. Каждый его отрывок должен быть понятен без необходимости обращаться к ссылкам и подсказкам. Переменные и идентификаторы метода должны быть наглядными, а операторы – лаконичными.
Я видел функции с именем `codeToRun (id)`. Можете ли вы догадаться, что делала эта функция? Блокировала 60 строк кода, ожидая загрузки изображений в документе. Поэтому, когда я столкнулся с этим, мне пришлось залезть в код, найти эту функцию и прочитать те 60 строк кода, чтобы понять, какого черта происходит. Если бы функция называлась `blockForImages`, я мог бы избежать этих манипуляций.
Жаль, что у меня не сохранился пример этого кода, но просто скажу, что самое худшее, что я когда-либо видел, это одна строка JavaScript, на которую у меня ушло примерно 15 минут, просто чтобы ее понять. Это была одна строка, 7 одиночных символьных переменных и 3 функции. Имя функции не дало мне никаких указаний на ее цель, код внутри был невероятно запутанным, и когда я посмотрел ссылки на функцию, входы и выходы также были одиночными символьными переменными. Я должен был прочитать примерно 50 строк кода, чтобы понять эту единственную строчку.
Причесанный, читабельный код сэкономит вашей команде и всей компании сотни часов в год, а также серьезную денежную сумму, если придется заниматься отладкой уже функционирующего продукта.
Райан Гедвилл, сооснователь компании (2016-н.в.)
Умению абстрактно мыслить. В конце концов все ПО выражено в двоичном коде. А сам по себе двоичный код – эта абстракция, созданная людьми для моделирования схем. Языки программирования, которые вы используете, являются частью программного обеспечения с багами, написанные на языках программирования, состоящих из ПО и багов.
Некоторые языки программирования написаны сами на себе – например, Smalltalk. Это приложение рекурсии, которая является результатом чистого объектно-ориентированного программирования.
Объектно-ориентированное программирование – это абстракция, и программные языки изо всех сил стараются вплести эту абстракцию в свою структуру.
Мой опыт показывает: если в долгосрочной перспективе ориентироваться на эти абстракции, довольно быстро можно стать хорошим программистом. В действительности написание кода подобно складыванию мозаики у себя в голове с последующим внедрением синтаксиса. Если язык вам знаком, уложить его в рамки синтаксиса довольно просто.
Переписывайте программное обеспечение на разных языках. Попробуйте функциональное программирование, попробуйте C, попробуйте распространять свое программное обеспечение через сеть серверов. Одна и та же задача выполняется с помощью кода, но мыслительные процессы при этом сильно различаются.
Это позволит вам улавливать связи и постепенно развиваться как инженеру, и это одна из самых трудных вещей для изучения, которую к тому же очень трудно объяснить. В любом случае, чем больше вы пишете кодов, тем лучшим специалистом становитесь. Но всегда думайте о том, насколько это будет полезно для решения задач в будущем.
Джонас Меллин, преподаю программирование с 1990
- Работать как настоящая команда, то быть частью команды, оставаясь при этом личностью со своей позицией и ценностями. Это подразумевает действовать сообща, помогая друг другу и принимая совместные решения по выполнению задач.
- Создавать достаточно комфортную среду для стимулирования творчества. В этом каждый должен вносить свой вклад.
- Расставлять приоритеты. Особенно важно принимать взвешенные решения, принимая во внимание все аспекты, что особенно успешно удается делать в команде.
- Анализировать влияние тех или иных изменений на существующее положение дел.
Джейсон Русс, программист, сертифицированный педагог, начинающий писатель
Любому навыку, подразумевающему использование естественного языка, включая умение правильно называть абстракции и грамотное составление встроенной документации.
Очень часть комментарии к коду и идентификаторы, с которыми я сталкиваюсь, избыточны, неопределенны, неоднозначны, чрезмерно конкретны (например, излишние данные о внедрении или ориентация только на одного клиента) или просто семантически неточны.
К сожалению, последний пункт в этом списке является не только самым опасным и вопиющим нарушением, но и самой частотной ошибкой, которую к тому же нелегко исправить. Не считая варианта отправить разработчиков обратно на школьную скамью, чтобы они подтянули английский, я не знаю, как еще справиться со всеми недопониманиями и потерей времени, связанными с банальной безграмотностью.
Имейте в виду, это не проблема конкретной организации, занимающейся программированием, это проблема всей отрасли. Вероятнее всего она возникает в следствие естественной дихотомии между правым и левым полушариями мозга и между учебными планами инженерных и гуманитарных учебных заведений.
И действительно, разработчики, способные создать идеальный алгоритм, идеальное регулярное выражение или идеальную структуру данных, кажутся неконкурентоспособными по сравнению с теми немногими, способными подобрать слово или составить предложение, которое идеально передавало бы весь объем информации.
Комментарии
Страницы
"языки исчезают массово" - К сожалению, НЕ ИСЧЕЗАЮТ ((( А как было бы здорово, если бы ходил по улице и понимал всё, что вокруг говорят и скачивал бы фильмы, комиксы и книги, созданные в других странах и не напрягался бы, что они оказались без перевода или с кривым переводом... Стопудово, что инопланетяне не станут идти на контакт с землянами, пока те не начнут ВСЕ говорить и писать на одном языке! Нафих инопланетянам учить десятки языков?! Они лучше подождут! Ведь были же попытки создания Всемирных Империй (Чингиз, Македонский, Арабы, Османы, Испанцы, Бонапарт, Адольф,...), но, увы, все обломались (((
Страницы