Что отличает исключительных программистов от действительно хороших? [закрыто]

59

Ты знаешь кто они. Они рок-звезды программирования:

  • Они кодируют в 10 раз быстрее.

  • Их код просто работает.

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

  • Они знают ответ на большинство вопросов, прежде чем вы его зададите.

  • Некоторые из них изобрели принципы программирования, которые мы все используем.

  • И они также имеют тенденцию быть нехарактерно скромными.

Что это за эти люди? Есть ли что-то в их мыслительном процессе, которое принципиально отличается от выше среднего программиста? Или они просто очень талантливые люди, которые много работают?

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

Роберт Харви
источник
49
Исключительные программисты не имеют блока try-catch вокруг своего кода. Зин
11
@John: Я совершенно не согласен, я видел, что игра 10х снова и снова, и, похоже, это правда, к сожалению. Я думаю, что большая часть проблемы заключается в том, что большинство профессиональных программистов не могут программировать, а некоторые даже не могут программировать простые вещи. Дело не в том, что богоподобный кодер в 10 раз выше хорошего кодера, а скорее богоподобный кодер в 10 раз выше худшего другого кодера в его организации или команде.
Пакс Ноктис
10
@fennec: Делай или не делай. Существует нет try.
mmyers
29
18-летний опыт работы с языком, изобретенным 15 лет назад, чертовски впечатляет!
Рикки Кларксон
15
@Tjaart - Нет, это солидная цифра, и исследования с 1960-х годов показали это. Первоначальное исследование было проведено в конце 1960-х годов Сэкманом, Эриксоном и Грантом. Они изучали профессиональных программистов со средним опытом работы 7 лет и обнаружили, что соотношение времени начального кодирования между лучшими и худшими программистами было около 20 к 1; соотношение времени отладки свыше 25 к 1; размером программы от 5 до 1; и со скоростью выполнения программы около 10 к 1. Они не нашли никакой связи между опытом программиста и качеством кода или производительностью. (Спасибо Стиву Макконнеллу).
Джон Хопкинс

Ответы:

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

  • Пациент: Исключительный программист будет иметь безграничное терпение (это не значит, что они потратят дни на решение проблемы. См .: Устранение неполадок) .

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

  • Любопытно: исключительный программист не сможет устоять, пытаясь понять, почему что-то происходит.

  • Инженер: Исключительный программист будет проектировать системы, а не собирать кучу фреймворков (это не значит, что они не будут использовать фреймворки) .

ChaosPandion
источник
5
Мне нравится ваша "инженерная" точка!
Седрик Х.
1
@Chaos - самый быстрый программист, которого я знаю, создал свой собственный веб-фреймворк. Я думаю, что такие вещи делают кого-то лучше и быстрее. Спасибо за Ваш ответ. Это заставляет меня чувствовать себя менее беспомощным в постоянном желании переделывать вещи.
орокусаки
11
«Инженер» - это решающий момент. Каждая строка кода создаст прочную основу, а не добавит к шаткому Jenga-подобному созданию.
Алекс Фейнман
5
Я не буду -1, но в качестве контрапункта я имею право на все это; и я все еще отстой. (Если среднестатистические программисты, которых я исключаю, с которыми я сравниваю, на самом деле ужасны)
Стивен Эверс
1
@ Хаос, "Любопытно", но только в точку.
28

Вы многое затронули в своем последнем пункте:

«И они, как правило, также нехарактерно скромны».

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

В НЛП есть поговорка: «Нет ошибок, есть только обратная связь». Чтобы быть программистом рок-звезды, я думаю, вы должны принять это. Там нет ничего, что вы не можете кодировать. Поначалу вы можете не спешить, но если вы просто продолжаете пытаться и отказываетесь остановиться, если у вас что-то не получается или что-то напортачили, вы добьетесь успеха. И в этом процессе вы изучите все умственные уловки, необходимые для того, чтобы стать одним из лучших.

Совет, конечно, только так хорош, как его источник, так что ... все только мое мнение.

Пакс Ноктис
источник
«Я не потерпел неудачу, я нашел 10000 способов, которые не работают» - Томас Эдисон
ninjalj
1
Единственный способ научиться быстро учиться - это признать, что ты можешь совершенствоваться и хотеть этого.
25

Они глубоко заботятся о своем коде.

JaredPar
источник
2
Несомненно, правда.
Роберт Харви
3
Разве бедный программист не может заботиться о своем коде? Даже если это не так хорошо?
Уолтер
2
@ Уолтер они могли, но я просто никогда этого не видел. Ближе всего я видел программистов-новичков, которые глубоко заботились о своем коде, но все же допускали ошибки новичков (никто не застрахован). Когда на эти ошибки указывали, они исправлялись быстро и редко повторялись.
JaredPar
15

Лично лучшие программисты, которых я знаю / знал, понимали основы и НЕ были экспертами в каком-либо конкретном языке. У них просто был достаточный опыт практически во всем. Канонический «Мастер на все руки».

Это больше, чем фундаментальная наука, в реальных операциях есть значительная ценность опыта. Примеры, которые понимают философию Unix и, таким образом, могут решать неизвестные проблемы с помощью различных предоставленных инструментов (IOW они знали, где искать), значительно превосходят специалиста по Java, который написал многопоточное и параллельное решение.

Выдающиеся программисты также уважают тех, кто был до них. Они не ненавидят реляционные модели данных и не передергивают, когда рассматривают SQL как формальный API, и не осуждают FORTRAN в математике. Они знают, что ОО - это не конец, и, прежде всего, понимают, что программирование - это ИСКУССТВО, а не наука.

Jé Queue
источник
2
Для текстовых файлов grep, awk, sortи uniqможет ответить на множество вопросов. Если у вас есть perl, даже больше!
2
Я думаю, что это ремесло, а не наука или искусство.
Александр Гесслер
11

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

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

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

user2358
источник
Похоже, что я все готово (см. Мой вопрос на SO)
2
@ acidzombie24 - Или ... ты только начал.
орокусаки
хаха орокусаки. +1
«Сохранять простоту» - одна из красот Test Driven Development. Я не могу рекомендовать это достаточно высоко.
10

Матрица компетенций программиста

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

Maniero
источник
Знание stackoverflow: 2 ^ n: никогда не слышал об этом O (n ^ 2): регулярно задает несколько простых вопросов по SO O (n): ставит интересные вопросы и знает программистов. SE O (log (n)): Вверх пользователь на сайте SE, связанном с CS. ;-)
shuhalo
Большое спасибо за эту ссылку! Это дало мне уверенность в том, что я знаю, и указало мне, в каких областях я должен улучшить.
Оксайт
7

Я узнал ответ на этот вопрос в книге о Техасском Холдеме, но он применим ко всем неудачным попыткам. Лучшие кодеры никогда не идут на ход. Переход на Tilt - это время, когда что-то работает не так, как вы ожидали, и вы реагируете таким образом, что это приводит к экспоненциальным ошибкам в общем приложении. В турнирном покере это заставляет вас делать плохие ставки и вылетать.

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

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

JMC
источник
Что вы предлагаете делать в качестве упражнения для преодоления «наклона» во время программирования? Я получаю это все время, и в итоге все время переписываю вещи.
орокусаки
@orokusaki - Самый простой способ избежать наклона - это изменить фундаментальный вопрос, который программисты задают себе каждый день. Когда задают задачу, вместо того чтобы думать: «Почему я должен решать проблему таким образом?» Спросите: «Почему я должен избегать решения этой проблемы?» Часто ответ на вопрос, почему вы не должны решать проблему с конкретным решением, дает вам набор указателей для поиска лучшего решения.
JMC
6

Исключительные программисты:

  • Забота об их коде
  • Забота о пользователях, которые используют их код
  • Забота о людях, которые будут поддерживать свой код
  • Забота о производительности
  • Забота о процессе, а не только о продукте

Две вещи о факторе «10x»:

  1. Это должно быть применено непрерывно. Нет смысла писать код в 10 раз быстрее, если тестирование, доработка и сопровождение занимают в 10 раз больше времени.
  2. Я полагаю, что коэффициент «10х» является отражением того, насколько бедно большое количество программистов, а не тем, насколько хороши небольшое число программистов.
darreljnz
источник
3

большинство из них выглядят зарезервированными и ничего особенного .. некоторые из них выглядят супер-умными .. они предпочитают проверять / отлаживать вещи дважды со всех возможных точек зрения, их программное обеспечение не имеет ошибок в мире: p ИМО некоторые программисты могут работать медленнее, но качество лучше, даже обычные люди могут понять, как работает их программное обеспечение!

У меня есть друг, который написал свою первую программу ASM в возрасте 10 лет, сейчас ему 24 года, он не закончил университет, но это не помешало ему создать свою собственную компанию, зарабатывать миллионы :), но из того, что я вижу, он ловка во всем :)

Исключительные программисты, скорее всего, скажут, что этот код можно кодировать другим способом - лучше, чем говорить, что он абсолютно ошибочен, чем ниже репутация других программистов :)

«Что такого в этих людях? Есть ли что-то в их мыслительном процессе, которое принципиально отличается от программистов выше среднего? Или они просто очень талантливые люди, которые много работают?»

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

оборота шеги
источник
3

Немногие вещи отличают исключительное от типичного.

Исключительный:

  1. Очень увлечен своей работой и стремимся доставить шедевр.

  2. Производительность и качество - это главное в их сознании еще до начала кодирования.

  3. Они думают о постоянном улучшении после каждого выпуска.

  4. Они строго следят за альтернативами и являются ранними последователями.

  5. Их тема в профессиональной жизни: «Пиши меньше, передавай больше».

  6. Они продолжают думать о логических перспективах, даже когда не кодируют.

типичный

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

  2. О производительности будем думать позже, во всяком случае, в наши дни ПК достаточно быстр.

  3. Улучшение только тогда, когда нет возможности сохранить работу.

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

  5. Их тема: «Делай, что просят, и доберись до дома вовремя».

RPK
источник
2

Исключительные программисты применяют спартанские принципы .

Захватывающее внимание изображение:

введите описание изображения здесь

Эта статья: http://willcode4beer.com/design.jsp?set=codeReduction

И эта цитата:

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

Атес Горал
источник
5
изображение является иллюстрацией обозначения Big-O.
0

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

Gaurav
источник
3
Возможно, но я верю, что Джон Резиг хорошо известен своими замечательными достижениями в Javascript и jQuery. Его вещи широко используются, потому что это здорово, а не потому, что у Джона отличные маркетинговые навыки.
Роберт Харви
@ Роберт Харви - Или это так? Он, без сомнения, замечательный программист, но, возможно, что сделало его от действительно хорошего до «исключительного» - тот факт, что его вещи приобрели популярность, и он стал жертвой собственного успеха, вынужденного идти в ногу с растущим спросом? Когда вам действительно нравится рубашка, но она слишком велика, не пытайтесь врасти в нее, прежде чем купить ее. Это уйдет к тому времени. Купите его, а затем постарайтесь вырасти в него.
орокусаки
Роберт: Определенно. Но если бы он просто поделился jQuery с несколькими друзьями и на работе, мы бы никогда не узнали о нем вообще. Мы знаем его как великого программиста именно потому, что у него хватило смелости не только поделиться JQuery со всем миром, но и активно продвигать его как лучший способ сделать Javascript. Я хотел бы видеть больше программистов (включая меня), изучающих, как сделать это эффективно.
Гаурав
1
-1 Хотя это может быть правдой в глазах менеджеров, когда речь идет о саморекламе, я никогда не видел, чтобы это работало среди других разработчиков. Среди разработчиков не требуется много времени, чтобы понять, кто хороший, кто средний, а кто - отстой. Самореклама даже не является частью уравнения.
Данк
1
@Gauruv - Я думаю, что программисты «рок-звезды» способны решать сложные задачи и делать их действительно простыми. Таким образом, я бы не подумал, что кусок кода - это здорово, если бы я посмотрел на него и сказал: «Вау, кто это написал»? В то время как я думал иначе из школы, реальный опыт научил меня, что ум в коде не добродетель. Меня больше впечатляют люди, которым не нужно беспокоиться о том, работает ли их материал или нет, потому что я уже знаю, что он работает, даже не глядя на него. Эти люди немногочисленны и являются настоящими программистами рок-звезд.
Данк
0

1-й - Они знают, что отрезать, когда лицо за чертой.

Гедеан Диас
источник
0

Очень хорошая связанная статья: Свободный Электрон (от randsinrepose.com)

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

Николь
источник
Не много говорит о том, почему. Но да, это люди, о которых я говорю.
Роберт Харви
Цитата из статьи: «Свободный Электрон может делать что угодно, когда дело доходит до кода. Они могут написать законченное приложение с нуля, выучить язык за выходные, и, самое главное, они могут погрузиться в огромную кучу спагетти-кода, понять это, и заставить его работать. Вы можете построить целый бизнес вокруг Free Electron. Они такие хорошие ».
Роберт Харви
0

Они программируют исключительно на интуиции. Не нужно думать, что это просто течет .

Джон Шафт
источник
Несомненно верно для людей с опытом работы в любой сфере деятельности, а не только в программировании. Что отличает исключительных программистов конкретно?
Роберт Харви
Ну, я не один из них, поэтому я определенно не могу ответить на этот вопрос со 100% уверенностью, но я не думаю, что речь идет не о знании, а скорее о мыслительном процессе (подсознательно). Я думаю, что люди, которые являются исключительными в чем-либо, имеют возможность устранить любое вмешательство в их мысли и увидеть что-то в очень простой форме. Чем проще что-то, тем легче это обрабатывать.
Джон Шафт
3
-1 Это так НЕПРАВИЛЬНО во всех возможных отношениях. Я хотел бы -100. Я бы сказал с точностью до наоборот. ОНИ ДУМАЮТ ЧЕРЕЗ И РЕШАТЬ ПРОБЛЕМУ, КАК ЭТО НАЧИНАЕТ
Данк
@ Данк - я не согласен. С тем, что вы написали, я бы сказал, что делает обычный программист. В этом нет ничего исключительного. Я сравниваю исключительных программистов с исключительными гитаристами. Они не думают о нотах, которые играют, они просто чувствуют это.
Джон Шафт
@ Пабло - я думаю, наш опыт отличается. По моему опыту, нормальные разработчики руководствуются интуицией и ошибочно думают, что это просто происходит. Таким образом, они создают много мусора. Исключительные разработчики находят время, чтобы понять, куда они идут. Тот факт, что кто-то может на лету показать вам, как вы должны разрабатывать свой компонент, не означает, что он делает это из интуиции. Могу поспорить, что они либо сделали это раньше, либо у них уже есть представление о системе в целом, если не в документации. Таким образом, то, что вы называете интуицией, действительно следует продуманному плану.
Данк
0

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

Они действительно создали что-то исключительное.

оборота Джеффо
источник
0

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

Будет. Вы уже установили, что эти парни в 10 раз быстрее, поэтому они изучают его за 1 год, и это занимает у вас 10. Для серьезной части ответа я думаю, что они уже супер умные (может быть очень успешным в что угодно), они любят кодирование, и у них по какой-то причине есть (или они находят) изобилие свободного времени для практики кодирования или работы над личными проектами.

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

Kevin
источник
0

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

Я думаю, что вы спрашиваете о действительно исключительных программистов, верхний 1%.

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

Именно эта особенность, IMO, в дополнение к способностям Смирение, Любопытство, Инженерия, Страсть, Терпение и Устранение неисправностей, делает их действительно исключительными.

Кайл Ходжсон
источник
0

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

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

оборота Джуна
источник