What Makes a Good Programmer Good? english

By Josh Symonds

Что делает хорошего программиста хорошим? russian

Перевод Дмитрий @vovochkin

I’ve worked with a lot of programmers over the years – some of them super amazing, and some distinctly lackluster. As I’ve had the pleasure of working with some very skilled individuals recently, I spent some time thinking about what I admire in them. What makes a good programmer so good, and a bad programmer so bad? Or, to mangle English a little bit, what makes a good programmer good?

Я работал со многими программистами на протяжении долгих лет — некоторые из них были очень яркими, а некоторые — определенно «никакими». Недавно я имел удовольствие работать с несколькими высококвалифицированными специалистами, так что я потратил немного времени в размышлениях, чем же я восхищаюсь в них. Что делает хорошего программиста таким хорошим, а плохого — таким плохим? Или, немного коверкая русский язык, что делает хорошего программиста хорошим?

Based on my experiences, being a great programmer has nothing to do with age, education, or how much money you make. It’s all in how you act and, more deeply, how you think. I’ve noticed a consistent set of habits in the programmers I admire. More than knowledge of their chosen language, deep understanding of data structures and algorithms, or even more than years of on-the-job experience – the way they communicate, the way they conduct themselves, and the way they approach programming speak volumes as to their amazing level of skill.

Исходя из своего опыта могу сказать, что «великолепие» программиста никак не связано с возрастом, образованием или финансовым состоянием. Это связано с тем, как вы действуете и, более детальнее, как вы думаете. Я заметил стойкий набор привычек у программистов, которыми я восхищаюсь. Более чем хорошее знание выбранного языка программирования, глубокое понимание структур данных и алгоритмов, более чем годы опыта работы, то, как они общаются, как они управляют собой и как они подходят к разработке — все это говорит об удивительном уровне их мастерства.

Certainly there’s more to being a good programmer than anyone can enumerate, and I wouldn’t judge any programmer solely based on the presence (or lack) of these practices. But I do know wisdom when I see it, and when I see a programmer expressing these traits, I think, “This person really knows what they’re doing.”

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

They do their research

Они проводят собственные исследования

Or “measure twice, cut once.” Or “Google it.”

Или «семь раз отмерь, один раз отрежь». Или «погугли это».

Whatever you call it, most programming problems you’re likely to encounter have been solved in some form already – Ecclesiastes had it right in observing there was nothing new under the sun. In the form of libraries on GitHub, blog posts on the Internet, or just getting in touch with experienced individuals, good programmers know to do the research before they try to solve a problem.

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

I’ve seen even great programmers rush to solutions: but the worst programmers I’ve worked with never consult others, and as a result do huge amounts of duplicate work or tackle issues in precisely the wrong way. And unfortunately, they end up paying for their mistakes later.

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

They read error messages (and act on them)

Они читают сообщения об ошибках (и реагируют на них)

This includes desymbolicating stack traces. Yes, it’s ugly and unfortunate – but if you’re not willing to do it how are you going to know what’s wrong? The most effective programmers I know aren’t afraid to dig deep into problems. The least effective see there was an error but don’t even bother reading the error message. (This sounds ridiculous but you’d be surprised how frequently I run into it.)

Это включает работу со стеком вызовов. Да, это сложно и некрасиво — но если вы не готовы сделать это, то как вы планируете понять, в чем проблема? Наиболее эффективные программисты, которых я знаю, не боятся докапываться до сути проблемы. Наименее эффективные видят, что была ошибка, но даже не трудятся читать сообщение об ошибке. (Это звучит смешно, но вы удивитесь, как часто мне приходится сталкиваться с этим.)

To take this a step further, great programmers see a problem and hunger to solve it. Reading error messages are for them just the beginning: they’re anxious to dive deep into the issue that it represents and figure out what’s going wrong. They’re not interested in passing responsibility, they’re interested in finding a solution. The buck really does stop with them.

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

They go to the source

Они обращаются к исходникам

Documentation, tests, people: these things lie. Not intentionally, but if you want to know exactly how something works, then you must view the source yourself.

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

Don’t be afraid if it’s not a language you’re super familiar with – if you’re primarily a Ruby programmer and you suspect there’s an error in one of Ruby’s C libraries, go crack it open and have a look. Yes, you might not get it. But who knows? You just might, and you stand a way better chance than if you didn’t try at all!

Не бойтесь, если это не тот язык программирования, с которым вы на “ты” — если вы в первую очередь пишете на Ruby и предполагаете, что ошибка в одной из библиотек на Си, то открывайте эту библиотеку и изучайте ее. Да, вы можете не получить ничего. Но кто знает? Сделать хоть что-то — лучше, чем не пробовать ничего!

If you’re in a closed-source environment then this becomes a lot harder, unfortunately, but the principle still applies. Poor programmers have little interest in viewing source, and as a result problems flummox them much longer than those who are willing to do some research.

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

They just do it

Они просто делают это

Good programmers are driven to act. There’s a compulsion in them that can be difficult to control: they’re implementing a solution as soon as they identify a problem or see a new feature request, sometimes too early and sometimes too aggressively. But their instinctive response to a problem is to tackle it head-on.

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

This can be troublesome at times – but their enthusiasm is a crucial part of being good at what they do. While some might stonewall or wait for the problem to go away on its own, good programmers start solving.

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

To put it more simply (and, perhaps, too obviously): if you see someone excitedly grabbing problems and acting on them, chances are you have a good programmer on your hands.

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

They avoid crises

Они избегают кризисов

This is mostly a bad programmer trait: they tend to bounce from artificial crisis to artificial crisis, never really understanding one before they move to the next. They’ll assign blame to the wrong parts of their program and then spend hours debugging something that works perfectly well. They let their emotions get the better of them, trusting gut feelings rather than careful, explicit analysis.

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

If you hurry through a problem – or even view each problem as a world-shattering catastrophe – you’re more likely to make errors or not address the underlying issues. Great programmers take the time to understand what’s going wrong, even when there really is a catastrophe: but more than that, they treat regular problems as issues to be solved. Thus they solve more of them more accurately, and do so without raising the tension level of your organization.

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

They communicate well

Они хорошо общаются

Ultimately, programming is a form of communication. Being able to succinctly and eloquently express your thoughts is as crucial in writing code as it is in writing prose – and I’ve always found that those who can write a pithy email, elegant status report, or even just an effective memo will also be better programmers than those who cannot.

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

This applies to code in addition to English. It’s certainly possible to make a one-liner filled with parenthesis, brackets, and single-letter functions: but if no one understands it, what’s the point? Good programmers take the time to communicate their ideas properly in whatever medium they’re using.

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

They are passionate

Они увлечены

I think this might be the most important aspect of a good programmer (and perhaps the part of this list most generally applicable to fields other than computer science).

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

If you truly care about what you’re doing – if it’s not just a job, but a hobby, an interest, even a fascination – then you have a major advantage over anyone else in your field. Great programmers are always programming. Their peers will clock out at eight hours a day: not out their job, but of their field in general. They don’t have programming side projects or much interest in contributing back to the community. They’re not constantly trying neat new methods and crazy programming languages just to see how they work.

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

When I see a programmer who’s doing their own hobby projects on the weekends, who’s involved in the creation of the tools that they use every day, who’s fascinated by the new and the interesting: that’s when I really know I’m looking at an amazing person. Ultimately great programmers view their profession not just as a means to make money, but as a means to make a difference. I think that’s what makes the best programmers who they are. Coding, to them, is a way of shaping the world. And that’s what I truly respect and admire.

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

Тексты были взяты из открытых источников и соединены в формате "билингва" (bilingual book). Для каждой страницы указан источник, автор и переводчик. Если вы заметили неточность перевода, или неправильно сопоставленные абзацы, или текст оформлен неаккуратно - сообщите в комментариях.

Responses

Для добавления комментариев необходимо авторизоваться