Що відрізняє виняткових програмістів від справді хороших? [зачинено]


59

Ви знаєте, хто вони. Вони - рок-зірки програмування:

  • Вони кодують 10X швидше.

  • Їх код просто працює.

  • Вони не тільки знають свою основну мову всередині та зовні, але й знають, як це працює під кришкою.

  • Вони знають відповідь на більшість питань, перш ніж ви їх задасте.

  • Кілька з них винайшли принципи програмування, які ми всі використовуємо.

  • І вони, як правило, нехарактерно смиренні.

Що це за ці люди? Чи є щось у їхньому розумовому процесі, що принципово відрізняється від програміста вище середнього? Або вони просто дуже талановиті люди, які наполегливо працюють?

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


49
У виняткових програмістів немає блоку спробу вловлювання коду. Зін

11
@John: Я абсолютно не згоден, я бачив 10-кратну справу в грі знову і знову, і, здається, це правда, на жаль. Я думаю, що велика проблема полягає в тому, що більшість професійних програмістів насправді не можуть програмувати, а деякі навіть не можуть програмувати прості речі. Справа не в тому, що богоподібний кодер на 10 разів вище хорошого кодера, а скоріше богоподібний кодер на 10 разів вище за найгірший кодер у його організації чи команді.
Pax Noctis

10
@fennec: Робити чи ні. Немає try.
mmyers

29
18-річний досвід мови, винайденої 15 років тому, досить вражаючий!
Рікі Кларксон

15
@Tjaart - Ні, це солідна кількість, і дослідження з 1960-х років це показали. Оригінальне дослідження було проведено наприкінці 1960-х років Сакманом, Еріксоном та Грантом. Вони вивчали професійних програмістів із середнім досвідом роботи 7 років і виявили, що співвідношення початкового часу кодування між найкращими та найгіршими програмістами було приблизно від 20 до 1; відношення разів налагодження понад 25 до 1; розміром програми від 5 до 1; і швидкість виконання програми приблизно від 10 до 1. Вони не знайшли зв'язку між кількістю досвіду програміста та якістю коду чи продуктивністю. (Завдяки Стіву МакКоннелу).
Джон Хопкінс

Відповіді:


88
  • Humble: Винятковий програміст ніколи не стверджує, що їх код є найкращим, адже вони завжди шукатимуть кращого шляху (Кожен шанс, який вони отримають.) .

  • Пацієнт: Винятковий програміст матиме безмежне терпіння (Це не означає, що вони витратять дні на проблему. Див.: Виправлення неполадок) .

  • Виправлення неполадок: винятковий програміст зможе вирішити проблему за лічені хвилини, які можуть зайняти кілька днів для вашого середнього програміста.

  • Цікаво: Винятковий програміст не зможе чинити опір спробі з'ясувати, чому щось відбувається.

  • Інженер: Винятковий програміст буде інженерними системами, а не обробляти між собою фреш рам (Це не означає, що вони не використовуватимуть фреймворки) .


5
Мені подобається твій "інженерний" пункт!
Седрік Х.

1
@Chaos - найшвидший програміст, який я знаю, створив власну веб-структуру. Такі речі, як я думаю, - це те, що робить когось кращим і швидшим. Дякую за вашу відповідь. Це змушує мене відчувати себе менш безпорадним, коли завжди хочу переробити речі.
orokusaki

11
"Інженер" - вирішальний момент. Кожен рядок коду створить міцну основу, а не додасться до хитромудрих творів, подібних до дженги.
Алекс Фейнман

5
Я не буду -1, але як зустрічна точка, я кваліфікуюсь до всього цього; і я все ще смоктаю. (Якщо тільки середні програмісти до мого виняткового, з яким я порівнюю, насправді жахливі)
Стівен Еверс

1
@Chaos, "Цікавий", але лише до певного моменту.

28

Ви потрапили на це дуже багато в останній кульовій точці:

"І вони, як правило, нехарактерно смиренні".

Я думаю, що це поєднання смирення - не тільки зовні, але й всередині їхньої свідомості. Вони приймають помилку, помиляються і дуже швидко обертаються від розчарування. Дуже багато програмістів щось спробують, не зможуть, а потім досить швидко перенесуться, що є анафемою для написання хорошого коду. Ви повинні визнати, що ви не ідеальні, і що ви часто збираєтеся викручуватися, і що найкраще, що ви можете зробити, це навчитися швидко одужувати, коли ви зробите викрутку. Це скромна впевненість , на кшталт "Я знаю, що я зіпсуюся, але я також знаю, якщо продовжуватиму спроби, я зрештою доїду".

У НЛП є приказка: "Немає збою, лише відгуки". Щоб бути програмістом рок-зірки, я думаю, що ви повинні це сприйняти. Ви нічого не можете кодувати. Спочатку ви можете бути повільними, але якщо ви просто продовжуєте намагатися і відмовляєтесь зупинятися, коли щось не вдається або щось викрутили, ви доставите. І в цьому процесі ви навчитесь усім розумовим хитрощам, які вам потрібні, щоб стати одним з найкращих.

Рада, звичайно, лише настільки ж хороша, як її джерело, так що ... все лише моя думка.


"Я не провалився, я знайшов 10000 способів, які не працюють" - Thomas Edison
ninjalj

1
Єдиний спосіб швидко навчатись - це визнати, що можна вдосконалюватися та бажати цього.

25

Вони глибоко дбають про свій код.


2
Безперечно правда.
Роберт Харві

3
Невже бідний програміст глибоко не піклується про свій код? Навіть хоча це може бути не так добре?
Вальтер

2
@Walter вони могли, але я просто ніколи цього не бачив. Найближче, що я бачив, - це початківці програмісти, які глибоко дбали про свій код, але все-таки робили помилки у новачків (ніхто не застрахований). Коли ці помилки були вказані, вони були виправлені швидко і рідко повторювалися.
JaredPar

15

Особисто я найкращі програмісти, яких я знав / знав, розуміли основи і НЕ були знавцями будь-якої мови. Вони просто мали достатній досвід майже усього. Канонічний "Джек всіх торгів".

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

Видатні програмісти також поважають тих, хто вийшов перед ними. Вони не ненавиджу моделей реляційних даних або переслідують, коли вони бачать SQL як формальний API, а також не базуються на FORTRAN з математики. Вони знають, що ОО - це не кінець, і перш за все розуміють, що програмування - це АРТ, а не наука.


2
Для текстових файлів grep, awk, sortі uniqможе відповісти на безліч питань. Якщо у вас perlтеж, ще більше!

2
Я думаю, що це ручне мистецтво, а не наука та мистецтво.
Олександр Гесслер

11

Коли я вперше почав, я працював з цим хлопцем, який, на мою думку, був абсолютно геніальним у всьому, що він робив у плані програмування. Він, можливо, все ще є, але зараз він перейшов на посаду директора компанії в Південно-Східній Азії.

У будь-якому разі, він робив речі простими, і прості речі працюють. Ніколи не бажаючи писати більше рядків коду, ніж потрібно, все, що він робив, тільки працював. Я грав наздоганяю рік, щоб просто наблизитися до його рівня. Інша справа, проте, час. Він робив справи набагато довше, ніж я в той час, і він мав можливість задати ці точні запитання знову і знову, поки не знав (здавалося б) усіх відповідей.

Він також не боявся задавати питання. Я думаю, що це найбільше.


Це здається, що я все налаштовано (див. Мій питання щодо SO)

2
@ acidzombie24 - Або ... ви тільки почали.
орокусакі

ха-ха орокусакі. +1

"Прості речі прості" - одна з найкращих можливостей тестового розвитку. Я не можу рекомендувати його досить високо.

10

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

Багато тем, які допоможуть визначити, який у вас рівень програмних тем.


Знання stackoverflow: 2 ^ n: Ніколи про нього не чули O (n ^ 2): Регулярно задає прості запитання щодо SO O (n): Поставляє цікаві запитання та знає програмістів.SE O (log (n)): Вгору користувача на веб-сайті SE, пов’язаного з CS. ;-)
shuhalo

Дякую за це посилання! Це дало мені впевненість у тому, що я знаю, і вказало мені на те, які сфери я повинен удосконалити.
oksayt

7

Відповідь на це запитання я дізнався у книзі про техаський покер в Холдемі, але це стосується всіх плачевних починань. Найкращі кодери ніколи не йдуть на нахил. Перехід на Tilt - це час, коли щось не працює, як ви очікували, і ви реагуєте таким чином, що створює експоненційні помилки в загальній програмі. У покерному турнірі це призводить до того, що ви робите погані ставки та отримуєте нокаути.

У програмуванні нахил змушує вас виривати волосся і писати смішні патчі коду, які працюють лише в певних випадках вашої програми. Нахил змушує програмістів ігнорувати потреби проекту в цілому, хапаючись за миттєве задоволення, щоб вирішити негайну проблему зараз. Часто проблема вирішується сьогодні, але програма страждає завтра.

Найкращі кодери приймають концепцію нахилу та керують нею так, що дозволяє їм завжди дивитися на проблеми із зовнішньої точки зору. Якщо це не вдається, випийте трохи кофеїну.


що ви пропонуєте робити як діяльність для подолання "нахилу" під час програмування? Я отримую це постійно і закінчую весь час перекодувати речі.
orokusaki

@orokusaki - Найпростіший спосіб уникнути нахилу - це змінити принципове питання, яке задають собі програмісти щодня. Коли поставили перед собою завдання, замість того, щоб думати: "Чому я повинен вирішувати проблему таким чином?" запитайте: "Чому я повинен уникати вирішення цього шляху?" Часто відповідь на те, чому ви не повинні вирішити проблему з певним рішенням, дасть вам набір покажчиків для пошуку кращого рішення.
JMC

6

Виняткові програмісти:

  • Дбайте про їх код
  • Дбайте про користувачів, які використовують свій код
  • Дбайте про людей, які підтримуватимуть код
  • Дбайте про продуктивність
  • Дбайте про процес, а не тільки про продукт

Дві речі про фактор "10x":

  1. Він повинен застосовуватися в кінці. Недоцільно писати код на 10 разів швидше, якщо на тестування, переробку та обслуговування потрібно 10 разів більше.
  2. Я вважаю, що коефіцієнт "10x" - це відображення того, наскільки бідна велика кількість програмістів, а не проти того, наскільки хороша невелика кількість програмістів.

3

Більшість з них виглядають зарезервованими і нічого особливого .. Деякі з них виглядають супер-розумними .. Вони вважають за краще двічі перевіряти / налагоджувати речі з усіх можливих точок зору, їх програмне забезпечення - це безлад у світі: p IMO, деякі програмісти можуть бути повільнішими, але якість краща, навіть звичайні люди можуть зрозуміти, як працює їх програмне забезпечення!

у мене є друг, який написав свою першу програму ASM у віці 10 років, зараз йому 24 роки, не закінчив університет, але це не завадило йому створити власну компанію, заробляючи мільйони :), але з того, що я бачу, він спритний у всьому :)

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

"Що це за ці люди? Чи є щось у їхньому розумовому процесі, що принципово відрізняється від середнього середнього програміста? Або вони просто дуже талановиті люди, які наполегливо працюють?"

я думаю, що вони народжені саме так, всередині своєї ДНК: пі не знає про їхній розумовий процес, але найкращий програміст, який я коли-небудь знав, мав епілепсію


3

Мало що відрізняє виняткове з типовим.

Винятковий:

  1. Дуже захоплений своєю роботою і прагнути поставити майстер-твір.

  2. Продуктивність та якість - це велика картина в їх розумі ще до початку кодування.

  3. Вони думають про постійне вдосконалення після кожного випуску.

  4. Вони зберігають сувору пильність щодо альтернатив і є ранніми усиновлювачами.

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

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

Типовий

  1. Іноді дещо пристрасно, але прагнути домогтися, бо це робота. Якщо це не шедевр, його добре. Принаймні доставлені вчасно.

  2. Про продуктивність подумають пізніше, так чи інакше ПК досить швидкі в ці дні.

  3. Поліпшуйте лише тоді, коли не залишається жодного варіанту збереження роботи.

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

  5. Їх тема: «Робіть те, що просять, і вчасно доїжджайте додому».


2

Виняткові програмісти застосовують спартанські принципи .

Зображення, що привертає увагу:

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

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

І ця цитата:

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


5
зображення є ілюстрацією позначення Big-O.

0

Самореклама , і я маю на увазі, що найкращим чином. Робота з програмуванням, особливо в команді, означає, що не відразу зрозуміло, де ваш особистий внесок підходить до великої картини, або хто відповідав за цей біт. Люди, про яких ми чуємо і про яких ми чуємо як "великі програмісти", - це ІМО, які освоїли мистецтво робити свої вклади відомими, не звучачи егоїстично і нецентрично. У багатьох випадках це відбувається шляхом створення інструментів, бібліотек та програмного забезпечення, на які ми решту покладаємося, щоб заробити хліб насущний.


3
Можливо, але я вважаю, що Джон Ресіг відомий своїми чудовими досягненнями в галузі Javascript та jQuery. Його речі широко використовуються тому, що він чудовий, а не тому, що Джон має чудові маркетингові навички.
Роберт Харві

@Роберт Харві - Або так? Він, без сумніву, чудовий програміст, але, можливо, те, що зробило його від справді доброго до «виняткового», - це те, що його матеріал здобув популярність і він став жертвою власного успіху, маючи бути в курсі зростаючого попиту? Коли вам дійсно подобається сорочка, але вона занадто велика, не намагайтеся виростити її, перш ніж купувати її. Це вже піде. Купіть її, а потім спробуйте найсильніше перерости в неї.
orokusaki

Роберт: Однозначно. Але якби він просто поділився jQuery з кількома друзями та на роботі, ми про нього взагалі ніколи не дізнаємось. Ми знаємо його як чудового програміста саме тому, що він мав сміливість не просто ділитися jQuery зі світом, але й активно просувати його як кращий спосіб зробити Javascript. Мені хотілося б, щоб більше програмістів (в тому числі і я) навчалися, як це зробити ефективно.
Гаурав,

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

1
@Gauruv - Я думаю, що програмісти "rockstar" - це ті, хто вміє приймати важкі проблеми і робити їх справді простими. Таким чином, я б не вважав, що фрагмент коду є дивовижним, якби я подивився на це і сказав "Вау - хто це написав"? Хоча я думав інакше поза школою, реальний світовий досвід навчив мене, що кмітливість у коді - це не чеснота. Мене більше вражає людей, що мені не потрібно переживати, чи працюють їхні речі чи ні, тому що я вже знаю, що це працює, не потребуючи при цьому дивитися. Цих людей мало і далеко між собою, і вони справжні програмісти рок-зірок.
Данк


0

Дуже хороша пов’язана стаття: Вільний Електрон (від randsinrepose.com)

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


Не дуже сказано про те, чому. Але так, це люди, про яких я говорю.
Роберт Харві

Цитуючи статтю: "Вільний Електрон може робити все, що стосується коду. Вони можуть написати повну заявку з нуля, вивчити мову у вихідні, і, що найголовніше, вони можуть зануритися у величезну купу коду спагетті, має сенс у цьому, і насправді це працює. Ви можете створити цілий бізнес навколо Free Electron. Вони такі хороші ".
Роберт Харві

0

Вони програмують виключно на інтуїції. Не потрібно думати, що це просто тече .


Безперечно, це стосується людей, які мають досвід будь-якого заняття, а не лише програмування. Що конкретно відрізняє виняткових програмістів ?
Роберт Харві

Ну, я не один з них, тому я точно не можу відповісти на це питання зі 100% впевненістю, але не думаю, що мова йде не про знання, а про мислений процес (підсвідомо). Я думаю, що люди, які в будь-якому разі є експедиційними, мають можливість очистити будь-яке втручання у свої думки і побачити щось у дуже простій формі. Чим простіше щось, тим простіше обробити.
Джон Шафт

3
-1 Це так НЕ ВИМОГА всіляко. Я б хотів, щоб я міг -100. Я б сказав зовсім протилежне. Вони ДУМАЮТЬСЯ ДУМКОМ і вирішують проблему ще до їх початку.
Данк

@Dunk - я не згоден. З того, що ви написали, я б сказав, що це робить звичайний програміст. У цьому немає нічого виняткового. Я порівнюю виняткових програмістів з винятковими гітаристами. Вони не думають про ноти, які вони грають, вони просто відчувають це.
Джон Шафт

@Pablo - я думаю, наш досвід відрізняється. На мій досвід, звичайні розробники працюють за інтуїцією і помилково вважають, що це просто тече. Таким чином, вони створюють багато сміття. Виключні розробники знаходять час, щоб зрозуміти, куди вони йдуть. Тільки тому, що хтось може показати вам на льоту, як ви повинні проектувати свій компонент, не означає, що вони роблять це з інтуїції. Б'юсь об заклад, що вони або робили це раніше, або вони мають уявлення про велику картину системи, яка вже була створена, якщо не в документації. Таким чином, те, що ви називаєте інтуїцією, насправді йде за продуманим планом.
Данк

0

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

Вони насправді створили щось виняткове.


0

але здається, що знадобиться мені наступні десять років, щоб вивчити це, і тоді мої знання будуть застарілими.

Це буде. Ви вже встановили, що ці хлопці в 10 разів швидше, тому вони навчаються цього за 1 рік, і це потребує у вас 10. Для серйозної частини відповіді я думаю, що вони вже супер розумні (можуть бути дуже успішними в що завгодно), вони люблять кодування, і вони чомусь мають (або знаходять) велику кількість вільного часу, щоб займатися кодуванням або працювати над особистими проектами.

Якщо ви тут задаєте це питання, ви, мабуть, не знаєте, що потрібно (не хвилюйтеся, я тут відповідаю, тому я, мабуть, і ні). Не хвилюйтесь, хоча ви все ще можете бути шалено добрими, якщо любите кодування.


0

Тут є багато добромірних дописів про смиренність, інженерія, пристрасть, терплячість, усунення несправностей. ІМО - це все, що потрібно. Однак вони описують топ-30% програмістів.

Я думаю, ви запитуєте про справді виняткових програмістів, топ-1%.

Однією з речей, яким я заздрю ​​з приводу дуже рідкісних талантів, з якими я працюю, є їхня здатність одночасно тримати в голові дуже велику кількість деталей про складну систему та вміти швидко згадати її. Я думаю, що можу це робити з нагоди, можливо, раз на місяць, коли я справді в зоні. Це почуття прекрасне. Мені здається, розробник, про який я думаю, може перебувати в цій зоні більшу частину часу .

Саме ця особливість, IMO, крім здатності до смирення, цікавості, інженерії, пристрасті, терпіння та усунення неполадок, робить їх справді винятковими.


0

Якість самомотивації та самовизначення, а також бажання йти у безодню невідомого та бути комфортним, щоб бути абсолютно заплутаним у рамках процесу, є величезним. Справа не стільки в початкових розумних ситуаціях, скільки ви могли б подумати, тому що мозок стає набагато кращим у справах, які він завжди робить і думає. Я прийшов ні з чого в коледжі, а потім став дуже гарно просто наполегливою наполегливістю, ніколи не здававшись, будучи тим хлопцем, який тримав проблему, коли всі інші втомилися намагатися розібратися в цьому. Після такого типу наполегливості проблеми ставали легшими та легшими, і від того, що вони стали нобіутом у коледжі, до того, що більшість із них принизить сором у цей момент. Відвертого таланту недостатньо і іноді може призвести до відпочинку на ваших лаврах.

Крім того, до Роберта Харві, ви продовжуєте займатися публікацією моїх дописів, коли я згадую щось, що стосується моєї CMS, яку я написав з нуля. Ви бачите кілька інших переліків посилань, які вони можуть бути, а можуть і не писати. Ви штовхаєте людей, які самомотивуються, що іронічно, що ви це розмістили. Ви "людина" у цьому маленькому Всесвіті і не читаєте речей за їхньою заслугою, скоріше просто випиваючи та видаляючи за своїм примхом. Ви також занадто сильно любите Star Wars і, ймовірно, махаєте рукою на автоматичні двері, що відчиняються в продуктовому магазині, начебто вірять, що у вас є сила.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.