Может ли любитель стать хорошим программистом? [закрыто]

46

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

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

Тед Вонг
источник
3
Правильно. Таким образом, Возняк не был хорошим программистом, пока не был продан первый Apple (и таким образом он стал «профессионалом»).
KeithS
Определите "хорошо" ..
2
Каждый «хороший» программист когда-то был любителем.
spudwaffle

Ответы:

84

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

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

user281377
источник
9
+1 За работу в хорошей команде. Наличие равных или более квалифицированных людей в вашей команде чрезвычайно мотивирует.
BenR
Забыл участие команды в моем списке «подводных камней», +1
keppla
2
+1 Я думаю, что это ключ: учиться у хороших людей, которые имеют больше опыта, чем вы. Присоединиться к хорошей команде гораздо легче сказать, чем сделать.
1
+1 за хорошую команду немного. Если команда не так хороша или лучше, чем вы, вы не будете учиться.
Спенсер Рэтбун
4
Вам не нужно быть в команде, чтобы учиться у других людей.
Эмануил Русев
53

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

Теперь, помимо того, что я трачу больше времени на занятия, есть еще одна причина, по которой профессионалы в определенном смысле становятся лучше, чем любители (как в музыке, так и в программировании). Если вы профессионал, вы должны выполнять задачи, которые вам не обязательно нравятся, но относятся к более широкой работе по разработке программного обеспечения (например, тестирование, обсуждения с клиентами, написание документации, настройка среды разработки / разработки, написание сценариев сборки и т. Д.). ). Время от времени вас также заставляют шагать в незнакомые области, изучать новые языки или платформы. Как любитель, вы не обязаны делать то, чего не хотите, что делает вероятным, что вы останетесь в своей зоне комфорта большую часть своей жизни. Другими словами, вы можете легко ограничиться одной или несколькими конкретными областями, которые вам больше всего нравятся,

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

Рекомендуемое чтение - «Прагматичный программист: от путника до мастера» , с множеством полезных и очень практических советов о том, как стать лучше.

Петер Тёрёк
источник
3
+1 Правило Малколма Глэдвелла на 10 000 часов от en.wikipedia.org/wiki/Outliers_(book)
StuperUser
Хотя профессионал должен выполнять неприятную работу, есть и другая сторона - эта неприятная работа часто является скучной, утомительной работой, которая мало чему учит. IOW любитель часто может узнать больше в то же время, выбирая для разработки интересных проектов. НО один важный урок, конечно, в том, что вы должны быть готовы выполнять скучную и утомительную работу. Мне особенно нравится ваш «вклад в проекты с открытым исходным кодом», потому что это означает работу с кем-то, кто использует другой код - изучение на примере, как читать незнакомый код и т. Д.
Steve314
@StuperUser Ваша ссылка не работает (вторая скобка не включена в гиперссылку).
Paperjam
Один из лучших советов, которые я когда-либо читал: «Если вы хотите стать достойным художником, рисуйте. Каждое утро делайте наброски, вы не можете помочь, но становитесь лучше» ... найдите проект ... есть много прибыль там, которая нуждается в помощи .. спросите совета («Я строю систему выставления счетов, с чего мне начать?», «Как я справляюсь с контекстной безопасностью?» и т. д.)… стоимость неудачи низкая, и Вы могли бы просто получить платный концерт из этого ..
Бобби Д
@ Steve314, лучшие профессионалы напишут инструменты для автоматизации повседневных утомительных задач. Используя правильные инструменты для правильной работы, я сократил время выполнения некоторых задач в сотни раз. (Даже лучшие инструменты могли бы полностью автоматизировать эту задачу, но я достиг того, что казалось хорошим балансом усилий по написанию инструментов и
экономией
18

Но для программиста-любителя, как тренироваться, чтобы стать хорошим программистом?

Вы становитесь лучше, учась, что частично делает, частично отражает то, что было сделано.

В общем, нет никакой разницы между любителями и профессионалами, но «подводные камни» устроены немного иначе.

Любительские Подводные камни, imho

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

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

Профессиональные ловушки

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

  • часто есть чему поучиться . Да, один МОЖЕТ попытаться принять все как вызов, но мы должны быть честными: после 1 года использования кода Спагетти вам не разрешается проводить рефакторинг («вы усложняете это!») На языке, который у вас есть больше лет Из опыта, в котором он, вероятно, просуществует, единственное, чему он научится, - это проявить терпимость к разочарованию и корпоративной политике

Если вы играете музыку или поете, вы можете играть ее ради интереса, вы все равно можете стать хорошим певцом или музыкальным проигрывателем, но вам не нужно становиться профессиональным певцом или заниматься пением для жизни.

Вам, конечно, не нужно, но сколько музыкантов отказались бы от возможности уйти с работы и заработать на музыке?

В ИТ эти возможности немного более вероятны, чем в музыке, поэтому я думаю, это не значит, что невозможно стать известным любителем, но часто любители делают свою страсть своей работой (с аналогичными проблемами, которые возникают у музыкантов, когда им приходится выяснить их грань между коммерцией и искусством)

keppla
источник
Это больно моей душе, это так верно для меня, лол. 1 год коду спагетти, который вам не разрешают рефакторировать («вы усложняете это!»)
Terrance
1
«часто мало мотивации, чтобы стать лучше». если бы у меня когда-нибудь был сотрудник, который относился к разработке программного обеспечения таким образом, я бы предпочел уволить его, чем человека, который пытается добиться большего успеха, даже если они непреднамеренно ломают вещи из-за своих попыток.
@Chris Marisic: тогда я был бы рад работать с вами. к сожалению, вы были бы исключением из ряда моих работодателей
keppla
8

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

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

SK-логика
источник
6

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

  • Читайте книги, например, UML , The Pragmatic Programmer , Введение в алгоритмы .
  • Читайте такие сайты, как https://softwareengineering.stackexchange.com/ . Я делал это последние несколько месяцев, сидя в метро / поезде. Это, безусловно, помогает читать вопросы и мнения других людей.
  • Посещайте бесплатные лекции, курсы или семинары. Например, вы можете посещать группы пользователей Java. Иногда есть и бесплатные семинары для студентов.
  • Подписаться на журнал программного обеспечения.
  • Подпишитесь на интересные RSS-каналы, такие как Joel on Software , Google-Code-Blog , Мартин Фаулер .
  • Слушайте подкасты, когда едете на работу или в школу, например, SE-Radio .
  • Проверьте OpenCourseWare и выполните некоторые практические задания университета!

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

BenR
источник
4

Может ли любитель стать хорошим программистом?

Да, это возможно , однако это занимает много времени:

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


Как программист-любитель может стать хорошим программистом?

Опять из того же источника :

  • Заинтересоваться программированием
  • программа
  • Общайтесь с другими программистами
  • Если хочешь, закажи четыре года в колледже
  • Работа над проектами с другими программистами
  • Работа над проектами после других программистов
  • Выучите как минимум полдюжины языков программирования
BЈовић
источник
Я не часто +1 ответов , состоящих только из ссылки, но эта статья является стоит читать. Благодарю.
Сарнольд
Не могли бы вы объяснить это более подробно - как и почему это отвечает на заданный вопрос? «Ответы только на ссылки» не очень приветствуются на Stack Exchange
комнат
1
@gnat Ссылка говорит само за себя - надеюсь, лучше после редактирования.
BЈовић
3

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

Я не видел никаких курсов, на которых я учился программированию, но я учился на некоторых коротких (1-3 часа) бесплатных курсах, представленных университетом, в котором я учился. Они были предназначены для того, чтобы дать возможность деловым людям понять код, написанный для них. Курсы представили очень хорошо написанный код (включая комментарии), который решил обычную проблему в реальной жизни. Код был затем рассмотрен с объяснением особенностей языка и почему они были использованы так, как они. Ни один из курсов полного языка, которые я видел, не привел к созданию кода, близкого к качеству того, что я выучил из этого курса. Прошло несколько лет, прежде чем я переключился на изучение компьютерных наук.

Интернет и библиотека предоставляют множество ресурсов и примеров. Я нахожу, что многие примеры не очень хороши ни для чего, кроме как сделать это. Когда вы смотрите на примеры, сначала посмотрите на код. Можете ли вы понять его цель и структуру без объяснения причин? Если так, возможно, вы нашли хороший пример.

Некоторые ключевые практики, которые вы должны изучить и применять:

  • СУХОЙ (не повторяй себя).
  • DRO (Не повторяй других); Используйте стандартные языковые библиотеки, используйте другие библиотеки.
  • Сохраняйте код простым. Элегантный код сложнее поддерживать. Хуже того, оптимизаторы часто выдают более медленный машинный код, чем для более простого кода.
  • Модули должны иметь только одну цель. (Лучше, если эта цель либо выполнять работу, либо принимать решения.)
  • Используйте хорошие имена. Не используйте короткие имена, чтобы избежать ввода текста, вместо этого используйте IDE с автозаполнением. Поймите соглашения об именах вашего языка.
  • Не оптимизируйте свой код. Подождите, пока вы не сможете измерить его производительность, и знайте, что его оптимизация будет иметь заметный эффект.
  • Продолжай учиться. Научитесь определять ресурсы, которые будут предоставлять полезную информацию, которую вы можете использовать сейчас.
BillThor
источник
2

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

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

Vartec
источник
2
На самом деле это в значительной степени природный талант. Вы не можете обучить плохого инженера-программиста, чтобы быть великим, но вы можете вообще научить любого быть хорошим. Это очень похоже на музыкальный или художественный талант, вы можете обучить почти любого человека быть хорошим, но вы не можете обучить кого-либо быть хорошим, они тренируют себя и, вероятно, лучше, чем ЛЮБЫЕ из своих тренеров. Также, как и спортсмены мирового уровня, немногие когда-либо встречали талант программиста мирового уровня, который может объяснить, почему большинство программистов не знают, что они существуют :)
Билл К,
2

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

Имре
источник
2

Является ли это возможным? Да. Тем не менее, чем больше времени вы тратите на программирование, тем больше времени вам нужно для этого. Говорят, что требуется 10 лет / 10 000 часов совещательной практики, чтобы развить опыт в области технических навыков Это не 10 000 часов выполнения такого же вида кодирования в вашей зоне комфорта (например, написание простого кода JQuery для различных веб-сайтов), а 10 000 часов обучения / чтения по программированию / чтению исходного кода / написанию исходного кода / изучению других языков / работа с другими и т. д.

Если вы собираетесь посвятить этот уровень времени этому; Вы также можете получить работу программиста и отказаться от статуса любителя. (Если вы не являетесь независимо богатым).

доктор джимбоб
источник
1

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

Yatrix
источник
1

учитывая реальное первоначальное значение этого слова (французское любительское «любитель», из старофранцузского и, в конечном счете, из латинского amatorem nom. amator , «любовник» - Википедия), хотелось бы полагать, что большое количество профессионалов также являются любителями. Если вы не любите свое ремесло, вы бы практиковали его?

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

StevenV
источник
Настоящее значение любителя - это значение, которое вы найдете в OED или NOAD. Этимология слова не диктует его значения. «Тот, кто занимается преследованием, учебой, наукой или спортом как времяпрепровождение, а не как профессия».
Джанго Рейнхардт
правда. возможно, я должен был написать «оригинальное значение», а не «реальное значение». К сожалению, наш нынешний язык не имеет общего слова для «людей, которые делают что-то, потому что они действительно любят это делать». Я думаю, что это помогло бы ответить на вопрос ОП: «Может ли любитель стать хорошим программистом?» Конечно, это возможно - если вы любите программирование, вы будете его практиковать, и со временем у вас это получится. (Возможно, никогда не бывает великим, учитывая личные таланты или их отсутствие), но, по крайней мере, хорошо.
StevenV
0

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

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

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

Сарат
источник
И Билл Гейтс, и Марк Цукерберг изучали информатику в Хардварде, пока не начали собственный бизнес и не бросили учебу. Не хороший пример любителей .
vartec
Я сомневаюсь, что Гарвард сыграл важную роль в развитии их навыков программирования, кроме вызывающей среды!
сарат
0

На вопрос: "Любые программисты-любители стали знаменитыми?" Ответ: «Да, но большинство так не осталось». Самый известный пример, который я могу вспомнить, - это Рой Филдинг, который выполнял некоторые из своих самых важных работ, пока (я считаю) неоплачиваемым в университете (любительское означает неоплачиваемое по определению).

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

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

cwallenpoole
источник
0

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

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

сту
источник