Оглядываясь назад на мою карьеру и жизнь программиста, я смог улучшить свои навыки программирования множеством разных способов: чтение кода, написание кода, чтение книг, прослушивание подкастов, просмотр скринкастов и многое другое.
Мой вопрос: что вы сделали наиболее эффективно, что улучшило ваши навыки программирования? Что бы вы порекомендовали другим, которые хотят улучшить?
Я ожидаю, что здесь будут разные ответы, и нет единого ответа «один размер подходит всем» - я хотел бы знать, что работает для разных людей.
Ответы:
Без определенного порядка ...
Работать с людьми намного умнее меня
Всегда прислушивайтесь к тому, что говорят другие, независимо от того, младший, средний, старший или гуру. Название должности ничего не значит.
Изучать другие фреймворки / языки и видеть, как они работают, и сравнивать это с тем, что я уже знаю
Чтение шаблонов, лучших практик, а затем изучение моих старых вещей и применение этих шаблонов при необходимости.
Парное программирование
Не соглашаясь со всем, что говорит Джоэл. ;)
источник
Решив TO быть "Джек-из-все-торгов
Довольно рано в моей карьере я был экспертом с определенной базой данных и языком программирования. К сожалению, эта конкретная база данных проиграла «войны за базы данных», и я обнаружил, что мои карьерные возможности были ... ограничены. После этого я сознательно решил, что никогда не позволю себе снова оказаться в таком окружении. Поэтому я изучил все, что мог получить: Windows, Unix, C, C ++, Java, C #, Perl, Python, Access, SQL Server, Oracle, Informix, MySQL и т. Д. Какие бы инструменты и технологии ни были новыми или необычными, я стал «идти к парню» - «Спросите Крейга, если он этого не знает, он его выучит». В результате я работал над всеми видами проектов, от встроенных систем для экологической телеметрии до систем управления и противоракетной обороны.
Единственная проблема, с которой я когда-либо сталкивался, - это компании, которые настаивают на том, чтобы подать меня на специальность, когда моя специальность - быть универсалом. [РЕДАКТИРОВАТЬ: также известный как Полимат или Ренессанс Человек или мульти-специалист. ]
Что-то иметь в виду ... что такое период полураспада знаний в области высоких технологий? Это соответствует закону Мура: половина всего, что вы знаете, устареет через 18-24 месяца. Специалист, который выбирает неправильную дисциплину, может быть легко подорван прессой технологий; только универсал должен добавить еще несколько навыков и запомнить уроки прошлого в применении этих навыков.
источник
Я всегда думал о себе как о самом горячем программисте. Затем в нашу команду был нанят новый парень по имени Аарон. Аарон был явно лучше меня в большинстве областей. Он тоже был моложе меня. Он заставил меня понять, что я не сильно улучшился за последние годы. Я был специальным хакером, и посредственным в этом.
Это побудило меня сознательно попытаться улучшить себя и особенно качество кода, который я пишу.
Аарон научил меня многому. Он научил меня, как большую часть кода, который я пишу, нужно будет поддерживать и расширять в течение как минимум нескольких лет, поэтому я должен написать код с учетом этого. Я должен написать автоматические тесты для моего кода. Аарон всегда говорил о том, что я никогда не должен останавливаться на первой рабочей версии, но рефакторинг и уточнение, пока код не станет элегантным. Я обнаружил, что языки и инструменты, которые я использовал, имели много возможностей для совершенствования.
Самым важным, что я узнал от Аарона, было никогда не прекращать учиться.
Через пару лет Аарон покинул компанию. Я чувствовал себя опустошенным. Прошедшие с ним годы подняли меня на совершенно новый уровень мастерства, и я понял, что теперь я намного лучше, чем остальная команда. Они все еще писали плохой код и делали те же ошибки, что и раньше. Я пытался их научить, но им было неинтересно учиться. На самом деле, они были раздражены тем, что кто-то так нагло скажет им, какие ошибки они совершали.
Итак, через несколько месяцев я тоже покинул компанию. Я перешел в небольшую компанию с очень талантливой командой. Все там хотели узнать больше, и мне это понравилось.
Я рад, что встретил Аарона. Без него я, вероятно, все еще работал бы в старой компании со старой бандой, никуда не денется и слишком много думал о себе.
источник
Две вещи:
Написание кода очень легко; любой другой человек, которого я знаю, может сделать это. Но чтение чужого кода и выяснение того, что он делает, было для меня совершенно новым миром.
источник
Регулярно посещайте спортзал.
Серьезно, мой мозг работает намного лучше, когда я в форме. Проблемы становятся более легкими и менее громоздкими, глупость - это гораздо меньше соблазна, а пошаговая проработка вещей не кажется такой трудной задачей.
источник
Программирование. Работаю над интересными проектами. Нет НИЧЕГО, как входить и работать над вещами. Особенно под давлением. Я всегда говорю всем, кто спрашивает меня, как программировать - просто найдите крутой проект (даже если вам нужно его придумать) и поработайте над ним.
источник
Работал неполный рабочий день, обучая студентов CS в моем университете. Это действительно заставляет вас понимать что-то на совершенно другом уровне, когда вам приходится объяснять это кому-то еще.
источник
Я большой поклонник системы "учить один язык программирования каждый год". Один год дает вам достаточно времени, чтобы обойти «хорошо, я знаю синтаксис, так что теперь я знаю язык» смещение, и заставляет вас пойти немного дальше и понять, что полезно для этого языка, и программировать в стиле, родном для этот язык (под этим я подразумеваю, что вы не пишете Java-приложения с использованием синтаксиса Ruby). Каждый язык изменит то, как вы думаете о программировании - я знал, как использовать рекурсию, но мышление в рекурсии не происходило, пока я не взял урок по прологу (я думаю, что такой функциональный язык, как ML, будет иметь тот же эффект).
Начать проект Pet. Мое личное уравнение для хорошего проекта для домашних животных - это то, с чем у вас есть опыт + что-то, чего нет = приложение, которое вы найдете полезным. Например, Migratr (мой собственный проект с кофеином на выходных превратился в продолжающийся проект) начинался как «Я знаю c #, но я никогда не программировал веб-API. И я хочу переместить все свои фотографии в Zooomr». С таким же успехом можно было бы сказать: «Я раньше программировал против веб-API, но я не знаю C #»
Публикация вашего любимого проекта сама по себе является удивительным образовательным опытом. Внезапно все то, что практически никто не учит, но все должны знать (для меня это была настройка вашей собственной системы тестирования, получение максимальной отдачи от систем контроля версий, как справиться с ситуацией, когда никто другой не устанавливает ваши сроки, как взаимодействовать с вашими пользователи и как узнать, когда нужно сказать «нет» запросам на функции), все эти вещи всплывают на поверхность и вынуждают вас самообучаться на уровне, которого вы не были раньше - по крайней мере, не читая пламенные войны на dzone о плюсы / минусы "foo" против "bar" способа ведения дел.
Выполнение этих двух вещей охватывает оба конца спектра. Изучение нового языка сделает вас лучшим программистом. Pet проект сделает вас лучшим разработчиком: P
источник
Училась сборке. Это было на старом чипе 6502, когда мне было 13 лет? 14? Слишком давно Но я не могу придумать ничего, что улучшит ваше развитие больше, чем переход на уровень битов.
Изучение ассемблера дает вам представление о том, как компьютеры «думают» на существенно более низком уровне, а элегантность на этом уровне удивляет ... нет потраченных впустую движений, нет «утилизации» данных. Развитие на этом уровне научит вас эффективности и оттачивает навыки критического мышления и логики. Это также вылечит вас от любых небрежных привычек, которые у вас есть довольно быстро!
Микросхема 65xx имела три регистра (аккумулятор, X и Y) и не имела инструкций уровня машины для умножения или деления. Я помню, как программировал процедуру подсчета урона в бою, просматривал книгу и вдруг понял, что мне придется написать свою собственную математическую библиотеку. Потратил пару недель, набрасывая 1 и 0 по всей моей записной книжке, пытаясь выяснить, что на самом деле означают слова «делить» и «десятичные разряды».
С тех пор я изучал C ++, паскаль, .NET и многие другие ... но никто из них не научил меня так много, не заинтриговал меня так сильно и не оставил у меня ощущение «вау», которое сделала сборка на моем старом коммодоре ,
источник
Оглядываясь на старые вещи, которые я написал, и осознавая, насколько они плохие.
источник
Читать
Просто развить аппетит к чтению.
источник
Программирование.
Серьезно, есть книги, есть кодирование катов, есть такие сайты, но я считаю, что лучший способ улучшить себя как разработчика - это работать над реальным проектом, с реальными непостоянными клиентами с реальными, постоянно меняющимися требованиями с реальным проектированием. проблемы. Там нет замены для опыта.
источник
Я думаю, что самое важное, что вы можете сделать, - это приложить сознательные усилия для улучшения. Там нет ни одной серебряной пули, вы должны продолжать искать новые источники информации, новый опыт и больше практики.
И вторая важная вещь: подумайте о том, что вы делаете, почему вы это делаете и как вы можете сделать это лучше. То же самое с предыдущими проектами. Вспомните, что вы сделали, и как вы можете сделать это по-другому сейчас. Подумайте о том, что можно было бы сделать лучше, или где вы могли бы еще улучшить.
Я вижу два замечательных примера этого на работе каждый день. У меня есть один сотрудник, который любит учиться и хочет быть лучшим разработчиком, который он может. Он использует любое время простоя, чтобы читать блоги, читать книги, обсуждать методы программирования и задавать кучу вопросов. Он также очень заметно улучшился только в прошлом году. Другой сотрудник делает свою работу, и делает это довольно хорошо. Но это все, что он делает. Он придерживается того, что он знает, не прилагает особых усилий для улучшения, не работает над какими-либо проектами, кроме своих существующих, и через 4 года у него точно такой же набор навыков и навыков программирования, которые он имел, когда я встречался его.
источник
Многие люди предложили написание кода. Я должен сказать, что чтение чужого кода гораздо выгоднее.
источник
Программирование пар с очень разнообразными и самоуверенными людьми
источник
Основные вещи, которые помогли мне как программисту:
Печатание для программиста является существенным. У каждого был коллега-программист, который печатал ровно двумя пальцами и должен был все смотреть на клавиатуру. Не весело. Обучение сенсорному шрифту значительно повысит вашу производительность как программиста.
И если вы не спросите, никто не скажет вам.
источник
Содействие / участие в проектах с открытым исходным кодом было для меня самой большой вещью.
источник
Вы можете читать все книги, код и проекты с открытым исходным кодом, которые вам нравятся, но вы должны понимать аспект разработки программного обеспечения для конечного пользователя. Вы должны выйти из эхо-камеры. Поэтому я рассмотрю пару нетехнических моментов, которые помогут вашей технической карьере.
Отойдите от клавиатуры, пообщайтесь с конечным пользователем и посмотрите, как они используют программное обеспечение. Конечные пользователи обычно не являются техническими специалистами, поэтому они рассматривают программное обеспечение как магическую работу, а программное обеспечение - как логический набор шагов. Два мира совершенно разные. Так что то, что кажется вам простым и логичным, может показаться загадочным и пугающим для других.
Тест, тест, тест. Многие программы, которые я видел в крупных корпорациях, используют тестовые примеры. Черт, они используют JUnit, xUnit и все остальные языки модульного тестирования. Но проблема, с которой я столкнулся, заключается в том, что большинство программистов никогда не видят, как выглядит их программное обеспечение в Production. Узнайте, как пользователи (или системы, если это пакетные задания) взаимодействуют с вашим приложением, библиотекой или интерфейсом, чтобы выяснить, какую отвратительную информацию они выбрасывают. Это поможет вам создать хорошие тестовые случаи и перестать предполагать, что ваша программа всегда будет получать правильный набор данных.
источник
Выучил схему.
источник
Написание кода и многое другое.
источник
Изучение регулярных выражений.
источник
Конкуренция в конкурсах по алгоритму TopCoder .
источник
Сделайте все возможное: создайте свой собственный проект, свои вехи, свои ресурсы, зависимости, требования и план тестирования. Это заставит вас не только улучшить свои навыки программирования для работы с определенными параметрами, но также поможет выделить именно то, что вам больше всего нужно улучшить. Регулярно делайте обновления о вашем прогрессе, будь то через блог или более официальные обновления проекта, чтобы вы могли точно знать, где вы были и куда вы надеетесь пойти.
источник
Оставь мою последнюю работу.
источник
Я думаю, что постоянно задаваться вопросом о том, что вы делаете, - самая большая вещь. Никогда не думайте, что ваш код совершенен, всегда старайтесь его улучшить.
Кажется, у меня было 2 или 3 раза, когда я думал, что мой код совершенен, а потом понял, что мне предстоит долгий путь.
Я предполагаю, что самая большая вещь была, когда я начал видеть свой код как потребленный другими программистами, а не машиной. Легко написать код, который может обработать ваша машина, но сложно написать СУХОЙ, понятный код.
И я имею в виду не просто понимание «Что делает эта строка», я имею в виду сделать тривиальным, чтобы выяснить «Как этот класс вписывается во все другие классы», в то же время делая интерфейс классов настолько корректным, что это практически невозможно злоупотреблять этим.
источник
Говорят, что 70% хорошего кода - это проверка и обработка ошибок. Когда я начал программировать таким образом, мой код стал намного лучше. Размышление о том, что может пойти не так, а затем сразу же заняться этим, имело огромное значение. Такое ощущение, что выполнение всего этого - просто мешает запускать и запускать код, но сокращает время от начала до конца в 2–4 раза.
источник
Мои навыки кодирования значительно улучшились, когда я начал задаваться вопросом, прежде чем что- то реализовывать, как я собираюсь документировать эту вещь .
«Вещь» здесь должна иметь все возможные детализации. От метода ко всему продукту. Например, на уровне метода это предотвращает добавление метода в API, который не подходит или неясен, прежде чем он действительно будет написан. И если мне действительно нужно реализовать метод, который я не могу документировать (легко), это признак того, что где-то есть проблема дизайна ...
Автоматически, отношение « если я не могу объяснить это, я не пишу это » отфильтровывает плохой код и, наоборот, как только я знаю, как правильно документировать что-либо, это становится проще и понятнее для реализации.
источник
Постоянно учитесь и практикуйте то, что вы изучаете.
Посредством:
Личные проекты. С тех пор, как я начал программировать, я занимаюсь личными проектами. Начиная от маленьких игр, обработки изображений, стеганографии, реализации спецификаций типов файлов, реализации различных протоколов с нуля или реализации различных программ с течением времени.
Чтение книг: в свободное время я решил читать и читать разные книги. Есть много хорошо написанных книг экспертов, которые просто сидят и ждут, чтобы их прочитали. Глубина, которую вы можете получить из книги, не имеет себе равных, например, путем чтения различных сообщений на форуме.
источник
Обычно это мой хронологический порядок изучения любой новой технологии:
Регулярно читайте хорошие блоги (Этвуд, Мартин Фаулер и т. Д.), Будьте в курсе технологических новостей, Следите за новостями об интересных новых технологиях. Эти шаги позволят мне решить, найду ли я что-нибудь интересное для дальнейшего изучения.
Прочтите нужную книгу или любой другой ресурс, чтобы узнать свой уровень (например, для начинающих, если вы хотите изучить шаблоны проектирования, я бы предложил «Шаблоны проектирования в первую очередь»). У меня также есть конкретные предпочтения для книг .
Разверните игрушечный проект или два, используя то, что я узнал. Я не беспокоюсь о полезности проекта. Мое намерение состоит в том, чтобы просто использовать мое обучение. (например, проект калькулятора для ООП будет в порядке)
Я бы посмотрел, смогу ли я использовать это на работе . (Например, хотя мы не используем subversion на работе, я использую его в качестве локального хранилища, я использовал Ruby для задачи, которая в противном случае была бы слишком монотонной и отнимающей много времени)
Это лучшая часть, которую я думаю, что большинство людей упускают. Занятия по обмену знаниями. Например, дайте один или два сеанса коллегам по команде. Я считаю, что преподавание - один из лучших способов действительно изучить технологию. Я гарантирую, что ваш уровень понимания технологии станет многогранным, независимо от того, получит это ваша аудитория или нет. :-)
источник
Взломать какой-нибудь проект с открытым исходным кодом на несколько месяцев; чем больше, тем лучше. Когда вы общаетесь с какими-то высокопрофессиональными, географически разнообразными людьми, которые вас не знают, вы не можете не учиться на своих ошибках гораздо быстрее - я думаю, что это определенный фактор смущения. Кроме того, если вы определите одного или двух действительно умных людей, то сможете почерпнуть из них ценную информацию, если не чистое знание.
источник