Какая самая эффективная вещь, которую вы сделали, чтобы улучшить свои навыки программирования?

876

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

Мой вопрос: что вы сделали наиболее эффективно, что улучшило ваши навыки программирования? Что бы вы порекомендовали другим, которые хотят улучшить?

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

Одед
источник
18
Практика, практика, практика. И никогда не будьте удовлетворены первым, что приходит на ум.
Марк Рэнсом
2
+1 для Марка Рэнсома ... Трудность наступает, когда вы все еще не удовлетворены сотой вещью, которая пришла вам в голову!
Stimul8d
5
То, что я не тратил свое время на сайте Programmer Stack Exchange, помогло мне значительно улучшить свои навыки кодирования.
Работа
3
@ Марк Трапп, как это не конструктивно?
правостороннее
1
@WTP - прочтите описание. «Этот вопрос не очень подходит для нашего формата вопросов и ответов». - как тот, кто задал этот вопрос, я согласен. Это было задано в более спокойное время.
Одд

Ответы:

753

Без определенного порядка ...

  • Работать с людьми намного умнее меня

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

  • Изучать другие фреймворки / языки и видеть, как они работают, и сравнивать это с тем, что я уже знаю

  • Чтение шаблонов, лучших практик, а затем изучение моих старых вещей и применение этих шаблонов при необходимости.

  • Парное программирование

  • Не соглашаясь со всем, что говорит Джоэл. ;)

Cranley
источник
41
Я знаю, что это кажется действительно бесполезным и потенциально репутационным занятием, но если вы разделили эти пункты по одному на каждый ответ, люди могли бы проголосовать за то, с чем они согласились, что позволило бы получить более конкретное окончательное «решение» этого вопроса.
117
Посмотрите, как умные люди справляются с ошибками - именно тогда я учусь на них больше всего
82
если это список в произвольном порядке, не должен ли он быть неупорядоченным, а не упорядоченным? : P
Джон W
3
Я согласен с mmyers - то, что вы не согласны с кем-то, не означает, что вы игнорируете его. На самом деле, все наоборот - чтобы не соглашаться с ними, нужно обратить на них внимание.
Кристиан Ромо
15
Я не согласен со всем, что говорит Джоэл, я думаю, что большую часть времени ему есть что сказать. Мой комментарий был языком в щеку. Есть много вещей, с которыми я согласен, когда дело доходит до Джоэла, но примерно раз в месяц он заставляет меня качать головой и спрашивать: «Что? Ты серьезно ?!». Который я люблю, потому что нахожу те самые сложные вещи, которые заставляют меня действительно проверять свою позицию и то, во что я верю.
557

Решив TO быть "Джек-из-все-торгов

Довольно рано в моей карьере я был экспертом с определенной базой данных и языком программирования. К сожалению, эта конкретная база данных проиграла «войны за базы данных», и я обнаружил, что мои карьерные возможности были ... ограничены. После этого я сознательно решил, что никогда не позволю себе снова оказаться в таком окружении. Поэтому я изучил все, что мог получить: Windows, Unix, C, C ++, Java, C #, Perl, Python, Access, SQL Server, Oracle, Informix, MySQL и т. Д. Какие бы инструменты и технологии ни были новыми или необычными, я стал «идти к парню» - «Спросите Крейга, если он этого не знает, он его выучит». В результате я работал над всеми видами проектов, от встроенных систем для экологической телеметрии до систем управления и противоракетной обороны.

Единственная проблема, с которой я когда-либо сталкивался, - это компании, которые настаивают на том, чтобы подать меня на специальность, когда моя специальность - быть универсалом. [РЕДАКТИРОВАТЬ: также известный как Полимат или Ренессанс Человек или мульти-специалист. ]

Что-то иметь в виду ... что такое период полураспада знаний в области высоких технологий? Это соответствует закону Мура: половина всего, что вы знаете, устареет через 18-24 месяца. Специалист, который выбирает неправильную дисциплину, может быть легко подорван прессой технологий; только универсал должен добавить еще несколько навыков и запомнить уроки прошлого в применении этих навыков.

Крейг Трейдер
источник
224
«Мастер на все руки, мастер ни один, хотя часто лучше, чем мастер один». -Адам Сэвидж
JMS
9
Отличный совет, проголосовал. «Технологией-сиротой» в моем прошлом был мой 8-битный Atari, проигравший C64. Я пришел к такому же выводу - цитируя Хайнлайна, «специализация для насекомых».
17
Всегда есть компромиссы, и есть только 86 400 секунд в день - вам придется решить, как вы хотите их потратить. В моем случае я решил потратить дополнительные часы (сверх моих «рабочих» часов), чтобы узнать вещи, которые, на мой взгляд, были интересны или будут востребованы в будущем; вам нужно будет сделать свой выбор.
Крейг Трейдер
74
«Специализация для насекомых». - Хайнлайн
Келли С. Френч
31
Где находится ваш значок "Generalist"? ^^
Арнис Лапса
459

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

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

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

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

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

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

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

Вилле Лаурикари
источник
54
Это обычно работает в обоих направлениях. Я пришел в несколько компаний сейчас как «Аарон» и обнаружил, что, как только я получаю энергию от других кодеров, они начинают испытывать мои деньги и побуждают меня удвоить свои собственные усилия. Отличный пост!
28
+1 за «Аарон всегда говорил о том, что я никогда не должен останавливаться на первой рабочей версии, но рефакторинг и уточнение, пока код не станет элегантным»
17
"никогда не останавливаться на первой рабочей версии" ??? - когда ты должен закончить свою работу? :)
4
Я пытался быть Аароном, иногда это работает, но иногда я ошибаюсь. «Те, кто не может извлечь уроки из истории, обречены повторять это». Хорошо, что мы не забываем о новых идеях, но плохо слушать тех, кто уже совершил ошибки за тебя. Каждый нуждается в некотором скептицизме, поскольку мы учимся задавать вопросы о себе и других.
27
Проблема в том, что слишком многие люди думают, что они «Аарон»
cinqoTimo
257

Две вещи:

  1. Читайте код, написанный разными людьми.
  2. Написать документацию для кода, написанного другими людьми.

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

Свати
источник
42
И один из лучших способов узнать, что НЕ надо делать :)
AviD
9
Вы можете видеть, как они что-то делают. Может быть, они делают это лучше, чем вы?
4
Мне пришлось копаться в действительно старом и полностью недокументированном проекте, документировать его, исправлять некоторые ошибки и переносить его на новую систему. Я многому научился, и не все это было то, что не нужно делать. Хотя я узнал ценность комментариев.
И пока вы пишете документацию, возможно, напишите для нее несколько тестовых примеров (если они не существуют). Тогда вы также узнаете, как использовать код.
dhable
Это правда, это была самая трудная часть моей работы в течение долгого времени.
199

Регулярно посещайте спортзал.

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

кругозор
источник
30
Печальный факт, что большинство людей не тренируются и даже не тренируются на регулярной основе, являются огромной проблемой в современном мире.
Подлость
5
Я распространю это, если я могу, на любое количество физических экскурсий. Иногда, когда я некоторое время не делал много ручной работы, я начинаю жаждать физической усталости. Это своего рода роман, когда вы так привыкли к умственному истощению, и он помогает вам вспыхнуть, когда вы просто размышляете в кругах.
Stimul8d
1
да, это большая проблема сегодня. у нас нет времени, особенно в Пакистане, где рабочее время намного больше
maz3tt
2
+1 как напоминание самому себе, чтобы получить больше упражнений.
SingleNegationElimination
Я считаю, что спорт является отличным мотиватором - для меня это баскетбол.
Адель
181

Программирование. Работаю над интересными проектами. Нет НИЧЕГО, как входить и работать над вещами. Особенно под давлением. Я всегда говорю всем, кто спрашивает меня, как программировать - просто найдите крутой проект (даже если вам нужно его придумать) и поработайте над ним.

user13276
источник
4
Я согласен. Загрязнение рук в проекте, вероятно, стало самым большим вкладом в мое улучшение. ; )
Майк Грейс
1
Именно так. Единственный лучший способ стать лучшим программистом - это кодирование. Вы можете узнать все, что вы хотите, из книг, подкастов и коллег, но вы должны применить это, прежде чем вы действительно поймете это. Код больше, и код больше разных вещей. Потому что вы не многому научитесь, повторяя один и тот же старый трюк.
Выбор сложных и интригующих проектов. Я думаю, что борьба за пределами вашей зоны комфорта действительно ускоряет ваши навыки. Они не пошли на Луну, потому что это было легко.
Ким Чен Ву
172

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

Билл Ящерица
источник
1
Я могу ручаться за это.
1
Преподаватель в университете рассказал мне об открытии, когда я был еще студентом. Я остался почти год (неполный рабочий день) после того, как я закончил.
Билл Ящерица
29
Как пишет Дуглас Адамс в «Целостном детективном агентстве Дирка Джентли»: «Лучший способ - это попытаться объяснить это кому-то другому. Это заставит вас разобраться в своем разуме. И чем медленнее и тупее ваш ученик, тем Чем больше нужно разбивать вещи на все больше и больше простых идей ».
2
Слишком верно. Обучение фотографии сделало меня лучшим фотографом. Не так много кодировщика :(
САПР bloke
9
mutuo ista fiunt, et homines dum docent discunt - Сенека
135
  1. Я большой поклонник системы "учить один язык программирования каждый год". Один год дает вам достаточно времени, чтобы обойти «хорошо, я знаю синтаксис, так что теперь я знаю язык» смещение, и заставляет вас пойти немного дальше и понять, что полезно для этого языка, и программировать в стиле, родном для этот язык (под этим я подразумеваю, что вы не пишете Java-приложения с использованием синтаксиса Ruby). Каждый язык изменит то, как вы думаете о программировании - я знал, как использовать рекурсию, но мышление в рекурсии не происходило, пока я не взял урок по прологу (я думаю, что такой функциональный язык, как ML, будет иметь тот же эффект).

  2. Начать проект Pet. Мое личное уравнение для хорошего проекта для домашних животных - это то, с чем у вас есть опыт + что-то, чего нет = приложение, которое вы найдете полезным. Например, Migratr (мой собственный проект с кофеином на выходных превратился в продолжающийся проект) начинался как «Я знаю c #, но я никогда не программировал веб-API. И я хочу переместить все свои фотографии в Zooomr». С таким же успехом можно было бы сказать: «Я раньше программировал против веб-API, но я не знаю C #»

Публикация вашего любимого проекта сама по себе является удивительным образовательным опытом. Внезапно все то, что практически никто не учит, но все должны знать (для меня это была настройка вашей собственной системы тестирования, получение максимальной отдачи от систем контроля версий, как справиться с ситуацией, когда никто другой не устанавливает ваши сроки, как взаимодействовать с вашими пользователи и как узнать, когда нужно сказать «нет» запросам на функции), все эти вещи всплывают на поверхность и вынуждают вас самообучаться на уровне, которого вы не были раньше - по крайней мере, не читая пламенные войны на dzone о плюсы / минусы "foo" против "bar" способа ведения дел.

Выполнение этих двух вещей охватывает оба конца спектра. Изучение нового языка сделает вас лучшим программистом. Pet проект сделает вас лучшим разработчиком: P

callingshotgun
источник
Я могу только согласиться; «Проект с домашним животным на ранее неизвестном языке» хорош, могу подтвердить
Очень хорошее предложение узнать что-то наполовину знакомое.
Отличное предложение "что-то, с чем у вас есть опыт + что-то, чего у вас нет"! Спасибо
sica07
Мне нужно домашнее животное сейчас.
Адель
118

Училась сборке. Это было на старом чипе 6502, когда мне было 13 лет? 14? Слишком давно Но я не могу придумать ничего, что улучшит ваше развитие больше, чем переход на уровень битов.

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

Микросхема 65xx имела три регистра (аккумулятор, X и Y) и не имела инструкций уровня машины для умножения или деления. Я помню, как программировал процедуру подсчета урона в бою, просматривал книгу и вдруг понял, что мне придется написать свою собственную математическую библиотеку. Потратил пару недель, набрасывая 1 и 0 по всей моей записной книжке, пытаясь выяснить, что на самом деле означают слова «делить» и «десятичные разряды».

С тех пор я изучал C ++, паскаль, .NET и многие другие ... но никто из них не научил меня так много, не заинтриговал меня так сильно и не оставил у меня ощущение «вау», которое сделала сборка на моем старом коммодоре ,

snogfish
источник
16
Я должен проголосовать за то, что вернул тебе прекрасные воспоминания! Может быть, я даже немного всплыл :)
Чарли Флауэрс
3
Я до сих пор мысленно перевожу C / C ++ на язык ассемблера 68K. Удивительно, как это помогает вам писать эффективный код для любой платформы.
Боб Мерфи
1
Ах, 6502, возвращает прекрасные воспоминания. Я так много узнал с ассемблером на этом чипе.
5
КАЖДЫЙ студент, изучающий программирование, должен познакомиться с ассемблером на ранних этапах своего образования!
2
Я сделал то же самое, что и мальчик. Это действительно научило, как работают компьютеры, больше, чем язык высокого уровня.
САПР малого
110

Оглядываясь на старые вещи, которые я написал, и осознавая, насколько они плохие.

Грант Джонсон
источник
Я повторяю это ... Я даже не могу прочитать некоторые из моих старых вещей.
Unkwntech
28
Когда я перебираю свои старые вещи, у меня появляется почти непреодолимое желание удалить весь файл. Иногда весь каталог.
Кристофер Махан
+1 за объективность. Просмотр вашего старого кода не скажет вам, как улучшить, только если вы улучшили и как - или наоборот, если вы этого не сделали.
Я сделал это - я написал весь интерпретатор сценариев на VB6, я писал его более двух лет; он мог создавать окна, обрабатывать их события и т. д. Он стал настолько большим и неконтролируемым, что я больше не мог к нему прибавиться, не сломав все. Это было последнее, что я написал, прежде чем бросил программирование для книг о программировании. Теперь я намного лучше, фу . Чтение этого монстра заставляет меня понять, насколько далеко я зашла
Карсон Майерс
3
@ Кристофер Махан: И в действительно плохих случаях, весь объем.
Танатос
93

Читать

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

Просто развить аппетит к чтению.

lamcro
источник
2
Плюс, блин, 1. Я начинал задаваться вопросом, где был этот выбор.
Танатос
87

Программирование.

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

Fishtoaster
источник
8
Если вы хотите что-то улучшить, нет ничего лучше, чем делать это.
Джефф Сивер
4
+1 - Это напоминает мне о поиске Форрестера : «Первый ключ к письму - это ... писать»
Wizard79
2
Там нет другого ответа. Вы не можете сказать, что знаете, что делаете, пока не написали нетривиальную кучу кода и не попробовали его через несколько итераций продукта с деловыми людьми + клиентами. Вы не / действительно / не знаете, насколько хорош ваш код, пока не пришло время изменить его в соответствии с новыми требованиями.
Блуч
1
Определенно лучшее, что я сделал, чтобы улучшить свое программирование, это получить работу.
Мэтт Эллен
1
Я предполагаю, что вопрос подразумевал «помимо программирования» ...
UncleZeiv
81

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

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

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

Кристофер Кашелл
источник
7
И он, вероятно, имеет меньше навыков, потому что некоторые его знания устарели ..
72

Многие люди предложили написание кода. Я должен сказать, что чтение чужого кода гораздо выгоднее.

baudtack
источник
11
На самом деле, сочетание этих двух вещей работает для меня лучше всего; чтение чужого кода и его рефакторинг, чтобы сделать его более читабельным, - отличное упражнение
Конечно, читать хороший код ... и понимать его. И изменить его, или написать тесты для него.
4
Чтение кода интересно, но на самом деле оно не попадет под вашу кожу, пока вы на самом деле не сделаете это.
Вы должны сделать это, чтобы узнать это. Это как езда на велосипеде ...
70

Программирование пар с очень разнообразными и самоуверенными людьми

Хит Границы
источник
Единственный «опыт» парного программирования, который у меня есть, - это время, когда мне приходится помогать коллегам. Я гораздо счастливее программирую, когда рядом со мной есть другой человек, который обсуждает проблемы, с которыми я сталкиваюсь, и способы их решения.
Мхитза
67

Основные вещи, которые помогли мне как программисту:

  • Выученный сенсорный набор текста.
  • Научился преодолевать стеснительность и задавать вопросы.

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

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

Насир
источник
15
Touch Typing - самый важный навык. Самые большие преступления в программировании были совершены теми, кто пытался спасти несколько нажатий клавиш.
5
Это бьет все другие ответы, по моему мнению. Набор текста экономит массу времени, а значит, вы можете тратить больше времени на ввод кода и его тестирование. Это означает, что вы можете печатать примеры в книге, а не просто кивать головой, двигаться дальше и забывать. Попытка быть программистом с охотой и клевкой - это все равно, что пытаться быть концертным пианистом, щекоча слоновую кость ногами.
Kyralessa
2
Я видел, как люди нажимали 15 стрелок вверх, чтобы восстановить команду из 2 символов. Довольно грустно Это как дети без IDE ... совершенно некомпетентны.
7
Чтобы противоречить здесь, я никогда не учился прикасаться к типу. Однажды я попытался научиться, но сразу начал испытывать боль в запястьях, положив их на стол, чтобы предположить, что правильное положение рук давит на важнейший запястный канал. Поэтому я считаю, что мой набор текста по крайней мере имеет некоторые эргономические преимущества. И я делал это так долго, я только периодически смотрю на клавиатуру, поэтому никаких реальных потерь производительности. В любом случае, большую часть моего времени я не трачу на ввод символов, а на чтение кода и выяснение того, как лучше всего решать проблемы по мере их появления.
Eloff
2
Позиции рук не важны - важно то, что вы можете печатать, не глядя. На моем ноутбуке я не отдыхаю мои запястья.
56

Содействие / участие в проектах с открытым исходным кодом было для меня самой большой вещью.

user13643
источник
53

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

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

  2. Тест, тест, тест. Многие программы, которые я видел в крупных корпорациях, используют тестовые примеры. Черт, они используют JUnit, xUnit и все остальные языки модульного тестирования. Но проблема, с которой я столкнулся, заключается в том, что большинство программистов никогда не видят, как выглядит их программное обеспечение в Production. Узнайте, как пользователи (или системы, если это пакетные задания) взаимодействуют с вашим приложением, библиотекой или интерфейсом, чтобы выяснить, какую отвратительную информацию они выбрасывают. Это поможет вам создать хорошие тестовые случаи и перестать предполагать, что ваша программа всегда будет получать правильный набор данных.

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

Выучил схему.

mbishop
источник
Да, это был большой для меня тоже. Также важными были сенсорный набор и парное программирование.
46

Написание кода и многое другое.

Одед
источник
Мы все начинаем писать дерьмовый код. Если ты пишешь достаточно и работаешь над этим, тебе станет лучше. Обзоры кода помогают, но лучший способ - проверить свой собственный код.
Чтение кода и многое другое.
Стефан
3
Чтение и написание большого количества кода ... Открытый исходный код является таким благом для нас;)
Одед
45

Изучение регулярных выражений.

Vhaerun
источник
Просто сделал это четыре месяца назад, когда я начал учить себя Perl! Моя способность использовать vim и unix вообще взлетела до небес! Удивительно.
sixtyfootersdude
Регулярные выражения не просто полезны, они также заставляют вас думать по-другому.
Тихон Джелвис
+1. Полностью согласен. Я удивлен, что удивляю людей довольно часто, делая довольно простые вещи в vi, sed или grep.
39

Конкуренция в конкурсах по алгоритму TopCoder .

Пол Райнерс
источник
14
Я нахожу TopCoder немного проблематичным. Хорошо, это заставляет вас лучше думать об алгоритмах, но вы вынуждены работать с плохим стилем (весь код в одном классе) и под давлением времени, так что вы, вероятно, не будете комментировать и тестировать. Возможно, Project Euler - лучший выбор.
3
Вы не обязаны работать с плохим стилем; Вы можете иметь столько классов, сколько захотите. Кроме того, вам лучше проверить, хотите ли вы проходить последовательно, поскольку решение, которое не проходит в одном случае, получает ноль баллов.
2
@hstoerr - не говоря уже о том, что конкуренты получают вознаграждение за то, что они затрудняют чтение их кода (их решение сложнее оспаривать)
Шейн Фулмер,
7
(извините, если это звучит оскорбительно) Я нахожу людей, которым не нравится Topcoder (или другие подобные конкурсы), пытаюсь придумать причины, почему их применение сделает вас ужасным программистом. Это нормально, если они тебе не нравятся. Но придумывать ложные причины ИМХО не полезно. Ни один серьезный участник ТС не намеренно запутывает код (на самом деле это основание для дисквалификации, если его поймали). Я вижу много людей, которые не соревнуются, пишут плохой код все время. Конкурсы алгоритмов не направлены на то, чтобы научить хорошим навыкам кодирования (узнайте об этом откуда-то еще), скорее, они стремятся научить / развить что-то более глубокое.
МАК
2
TopCoder - это способ показать себе, насколько лучше ты можешь стать.
38

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

Magsol
источник
36

Оставь мою последнюю работу.

mihn
источник
2
я тоже! (нужно больше символов ...)
6
Если вы скажете нам почему, это может быть даже ответ. ;-)
2
Поддерживать проект, который был сделан с внутренней структурой (на основе EJB2), не было моей идеей веселья. Никаких новых вещей, просто старая хрень. И перспективы в новой работе не лучше. :(
Михн
Был там, сделал это.
Allbite
+1 Удачи в поисках работы, которая не тупиковая.
Томек Шпакович
29

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

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

Я предполагаю, что самая большая вещь была, когда я начал видеть свой код как потребленный другими программистами, а не машиной. Легко написать код, который может обработать ваша машина, но сложно написать СУХОЙ, понятный код.

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

Билл К
источник
29

Говорят, что 70% хорошего кода - это проверка и обработка ошибок. Когда я начал программировать таким образом, мой код стал намного лучше. Размышление о том, что может пойти не так, а затем сразу же заняться этим, имело огромное значение. Такое ощущение, что выполнение всего этого - просто мешает запускать и запускать код, но сокращает время от начала до конца в 2–4 раза.

Просто кто эти люди "они" и где "они" живут?

Гарольд Бамфорд
источник
28

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

«Вещь» здесь должна иметь все возможные детализации. От метода ко всему продукту. Например, на уровне метода это предотвращает добавление метода в API, который не подходит или неясен, прежде чем он действительно будет написан. И если мне действительно нужно реализовать метод, который я не могу документировать (легко), это признак того, что где-то есть проблема дизайна ...

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

kabado
источник
28

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

Посредством:

  1. Личные проекты. С тех пор, как я начал программировать, я занимаюсь личными проектами. Начиная от маленьких игр, обработки изображений, стеганографии, реализации спецификаций типов файлов, реализации различных протоколов с нуля или реализации различных программ с течением времени.

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

Брайан Р. Бонди
источник
10
+1 за упоминание книг. Большой опыт не стоит много, если все потрачено на неправильные действия.
Мбийяр
27

Обычно это мой хронологический порядок изучения любой новой технологии:

  1. Регулярно читайте хорошие блоги (Этвуд, Мартин Фаулер и т. Д.), Будьте в курсе технологических новостей, Следите за новостями об интересных новых технологиях. Эти шаги позволят мне решить, найду ли я что-нибудь интересное для дальнейшего изучения.

  2. Прочтите нужную книгу или любой другой ресурс, чтобы узнать свой уровень (например, для начинающих, если вы хотите изучить шаблоны проектирования, я бы предложил «Шаблоны проектирования в первую очередь»). У меня также есть конкретные предпочтения для книг .

  3. Разверните игрушечный проект или два, используя то, что я узнал. Я не беспокоюсь о полезности проекта. Мое намерение состоит в том, чтобы просто использовать мое обучение. (например, проект калькулятора для ООП будет в порядке)

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

  5. Это лучшая часть, которую я думаю, что большинство людей упускают. Занятия по обмену знаниями. Например, дайте один или два сеанса коллегам по команде. Я считаю, что преподавание - один из лучших способов действительно изучить технологию. Я гарантирую, что ваш уровень понимания технологии станет многогранным, независимо от того, получит это ваша аудитория или нет. :-)

rpattabi
источник
24

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

обкрадывать
источник