2009-10-09 3 views
20

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

Что-то вроде:

  • Изучают
  • Узнайте б
  • Узнайте с> 'Теперь вы хорошо сжигать двигатели'
  • Try вещи вокруг на основе вашего обучения.

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

Благодаря

+1

Возможно, это сообщество wiki? – TrueWill

+0

каждый пользователь SO спросил этот вопрос - лучше программист уже не крут. Я думаю, что реальный вопрос: почему вы хотите стать лучшим программистом? вы действительно хотите потратить всю свою жизнь? деньги это не все. – IAdapter

+1

Довольно часто люди начинают изучать С, что приводит к множеству головных болей :) – Brann

ответ

2

Для меня, должно быть причина, чтобы узнать что-то новое ... то есть, если у меня есть проект в виду, или какая-то проблема, мне нужно решить, что нет никакой надежды. Если это условие выполняется, то я обычно пытаюсь заставить работать «Hello, world», и после этого предел неба. В наши дни большая часть развития - это просто освоение новых API. Иногда есть какой-то сдвиг в парадигме, который дует в ваш ум, но это не так часто, как люди любят думать, ИМХО.

+0

+1 для изучения того, что вам нужно, чтобы научиться, чтобы выполнить конкретную цель/проект. – ChrisW

3

Практика, практика, практика.

После того, как вы преодолеете основной горб, чтобы быть в состоянии запрограммировать, вы также можете прочитать полезные книги (например, Code Complete, Effective Java или их эквиваленты и т. Д.) Для идей о том, как улучшить код.

+0

+1 книги для обучения, а также практика, потому что иначе у вас нет ничего нового для практики. – ChrisW

11

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

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

В зависимости от языка, который вы используете, используйте инструменты lint и metric и запускайте их по вашему коду. Не все их предложения будут применимы, но изучение, которое важно, а какие нет, важно. Например, FindBugs, PMD и т. Д. Для Java.

Прежде всего уточняйте и продолжайте совершенствовать свою работу. Не относитесь к своей работе как к отказу!

+1

+1 для: Прежде всего уточняйте и продолжайте совершенствовать свою работу. Не относитесь к своей работе как к отказу! –

+1

Это так чертовски верно, вы через 3 месяца, глядя на свой код 3 месяца назад, видите хотя бы 1 код запаха lol :) –

+1

Месяц! Я оглядываюсь назад на какой-то старый ужасный PHP и думаю, что я думал, когда я это делал! Я все еще участвую, но я обнаружил, что обучение и использование очень упрямой платформы, такой как рубин на рельсах (и рубин очень приятный как язык), очень помогло. Кроме того, не бойтесь читать и просить других о помощи. – CodeJoust

5
  1. Узнайте ваш первый язык программирования новой парадигмы программирования или
  2. найти наставника, вы можете узнать из
  3. Применить то, что вы узнали в реальном мире проекта
  4. Учитесь на своих ошибках и успехах и Гото шаг один

уловка зная, что научиться первый:

  • Языки программирования - это место для начала, поскольку вы не можете писать программное обеспечение, не зная хотя бы одного из них. После того, как вы освоили один язык, попробуйте изучить другое.
  • Парадигма программирования - то есть объектно-ориентированное, динамическое/функциональное программирование и т. Д.Попытайтесь изучить новый с каждым новым языком.
  • Концепции дизайна - S.O.L.I.D, шаблоны проектирования, а также архитектурные концепции.
  • Навыки людей - научиться сообщать свои идеи.
  • Командное лидерство - научитесь подметать других и как стать командой или технологическим лидером.

После этого небо является пределом.

+0

-1, goto's are evil – 2009-10-09 21:48:22

+4

No @opc - люди, которые злоупотребляют системой ранжирования SO, являются злыми. –

3

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

  • Программирования концепции. Понимать такие вещи, как управление памятью, указатели, стеки, переменная область и т. Д.
  • Языки. Работа над освоением нескольких современных языков.
  • Концепции дизайна. Узнайте о шаблонах проектирования. Практика их использования.
  • Связь. Часто упускается из виду. Вы можете стать высоко оцененным инженером-программистом, если сможете эффективно общаться с нетехническими людьми. Научитесь слушать и понимать потребности, которые люди выражают, переводят в набор требований и технический дизайн, но затем объяснят, что вы поняли (и разработали) для них, в терминах, которые они могут понять, для проверки перед вами код. Это непросто освоить, но это важно.
  • Архитектурные концепции. Научитесь понимать общую картину больших сложных систем.
35

Неправда, что практика делает совершенным.

Это perfect Практика, которая делает совершенным.

Если все, что вы делаете, повторяет одни и те же плохие практики снова и снова, все, что вы сделаете, позволяет быстрее создавать плохой код.

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

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

+2

+1 для идеальной бит практики. Это настолько распространено для людей, чтобы просто развивать плохие привычки, не пытаясь получить представление о том, что они делают ...в любом контексте, не только программирование, конечно (не то, что они что-то не так, просто хотят получить работу и вернуться домой после 8 часов работы, но это не самый полезный способ). –

+0

+1. И никогда не прекращайте учиться. «Прекрати учиться, начни умирать» - Эбенезар [Джим Батчер] – TrueWill

2

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

Практика, практика, читать и затем практиковать более

2

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

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

В-третьих, потратьте некоторое время на большую высококачественную базу с открытым исходным кодом. Я узнал тонну от кода Quake I и Quake II. Помог мне стать лучшим программистом.

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

3

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

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

Например, узнать о:

• Практика развития, Проектирование программного обеспечения, оценка, методология бизнес-анализа Проектирование баз данных (есть много хороших книг там и интернет-ресурсы)

• Считывание кода - Проекты с открытым исходным кодом - хорошее место для этого. Read Программирование блогов

• Попробуйте участвовать в Open Source Проекты.

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

И да, как упомянуто в практике. Не просто читать, делать и смотреть, как вы будете улучшаться. :)

+1

Да! Чтение программных блогов помогает многим –

1

Сама вера в существование дорожной карты препятствует пути к совершенству.

+0

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

+0

Манав, ты, конечно же, не должен со мной соглашаться. –

+0

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

2

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

2

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

В то же время посвятите часть своего времени, чтобы исследовать вещи вне зоны комфорта.

2

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

2

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

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

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

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

24

Все вопросы риторические и призваны стимулировать мысль.

Технические детали:

  • Design Patterns - Есть, вероятно, некоторые специфичные для области, но в целом они являются полезными способами запуска части приложения. Вы знаете MVC или MVP?
  • Основные начальные точки алгоритма - разделение и покорение, динамическое программирование, рекурсия, создание специальных типов данных, таких как куча, жадность и т. Д.
  • Умение решать проблемы - как легко вы можете вскочить и найти, где ошибка? Можете ли вы подумать о нескольких решениях проблемы?
  • Абстрактное моделирование. Насколько хорошо вы можете представить себе вещи в вашей голове с точки зрения кода или классов, когда кто-то описывает проблему?
  • Высокий уровень против низкого уровня. Насколько хорошо вы понимаете, когда человек хочет чего-то высокого или низкого? Это просто то, что я хотел бы бросить там, поскольку эти термины проходят через много, например, на высоком уровне, что-то или язык низкого уровня.

Технологические детали:

  • Проворные - вы знаете, Scrum, XP и другие новые подходы к управлению программными проектами ли? Как насчет таких принципов, как YAGNI, DRY и KISS? Или такие принципы, как SOLID? Идеи, такие как Broken Windows?
  • Среда разработки - Насколько хорошо вы знакомы с IDE, которую используете? Управления источником? Непрерывная интеграция? Знаете ли вы, что на вашей машине есть бутылочки с точки зрения продуктивности?
  • xDD - Вы знаете TDD, BDD и другие разработки, основанные на парадигме?
  • Рефакторинг. Переходите ли вы к своему старому коду и делаете его лучше или вы пытаетесь написать один раз, а затем отказаться от своего кода?

Мягкие навыки:

  • Эмоциональный интеллект - Может быть полезно для презентаций и работы с другими в основном.
  • Страсти/Мотивация. Знаете ли вы, что заставляет ваши соки течь и просто пинать с точки зрения продуктивности? Знаете ли вы, что бы вы хотели сделать много лет?
+1

Спасибо, это все, что я могу сказать. – pestaa

+0

Спасибо, надеюсь, получили правильное направление для моей карьеры –

2

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

Хорошие сайты читать: -thedailywtf.com -joelonsoftware.com -codinghorror.com -blogs.msdn.com/oldnewthing

Большое место, чтобы практика программирования сайтов конкуренции. Это поможет вам научиться писать хорошие алгоритмы, не обязательно поддерживаемый код, но они по-прежнему являются хорошим местом для обучения. То, что я использовал (назад, когда у меня было время): http://uva.onlinejudge.org/

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

Узнайте, как работать с компьютерами на всех уровнях, аппаратном обеспечении, os и т. Д. В идеале вы должны иметь возможность создавать свою собственную систему, устанавливать на нее несколько операционных систем и диагностировать практически любую проблему, которая может возникнуть. Я знаю многих программистов, которые не являются «компьютерными техническими людьми», и их неспособность понять, что происходит на каждом уровне, становится серьезным препятствием для диагностики и исправления необычных ошибок или проблем с производительностью.

2

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

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

2

ест дыхание во сне языка программирования вашего не используя (не серьезно, это помогает)

2

Есть два вида обучения - 1. Неофициальные (например, как вы научились работать в результате взаимодействия общества в связи со сверстниками и семья) 2. Формальная (например, ваше обучение в средней школе - через плановое обучение)

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

Трудно никому дать вам список всех, что вам нужно знать. Он варьируется в зависимости от области (например, веб-разработчика и разработчика), и он зависит от компании (например, Microsoft, которая продает программное обеспечение и General Motors, которые в основном используют его только в своих автомобилях). Неофициальный трейлинг и участие в попытках научиться чтобы сделать вашу работу лучше и получить повышение - это ваш лучший выбор, на мой взгляд.

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

2
  • практика, индивидуально и коллективно

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

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

  • Любовь кодирования. Если вам нравится то, что вы делаете, то много времени кажется легким. Каждому кодеру нужен диск!

2

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

Например, в C++ & Javascript Я больше не использую операторы if() без фигурных скобок. Причина заключается в том, что это слишком просто ошибочно ставить:

while (true) { 
    if (a > b) 
     print a 
     print b 
} 

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

Итак, найдите сверстника или наставника и поработайте над их кодом.

2

Я не уверен, что ОП искали общие советы о том, как быть хорошим программистом, а скорее более конкретным.

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

Что я имел в виду, мы можем придумать «карту знаний» концепций программирования, аналогичную the map that Khan Academy uses.

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

Смежные вопросы