Борется как программист. Нужен совет [закрыто]

20

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

Но есть разница между «выполнением работы» и «выполнением работы должным образом». Давайте использовать пример.

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

Я решил переписать проект с помощью CodeIgniter. Мне нравится рамки. Но затем меня отвлекли, потому что для сокращения моих запросов к MySQL мне пришлось изучить расширенные объединения.

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

Я не работаю на компанию. Я делаю все один. Так что я думаю, что если бы я работал разработчиком PHP в компании, то были бы отдельные команды, работающие с SQL.

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

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

Какой совет вы можете дать в плане саморазвития и самосовершенствования? Должен ли я беспокоиться меньше? Или, может быть, искать работу в качестве разработчика PHP, когда я не буду обрабатывать запросы SQL напрямую?

Джеймс Гувна Джеффри
источник
54
если вы не хотите постоянно учиться, вы
6
@JamesGuvnaJeffery: если они не позволяют (вообще) времени (вообще) учиться во время проекта, я бы не хотел работать там, потому что, как разработчик, я бы перестал совершенствоваться.
Марьян Венема
3
работа заключается в обучении, они не дают вам этого волшебного свободного времени для учебы, на самом деле они дают, это называется «вашим личным временем». Они не называют это «на рабочем обучении» без причины. Если вам неудобно быть самостоятельным учеником и постоянно учиться бесплатно, как я уже сказал, вы, вероятно, не в той области.
5
Старый код должен сосать. Не убивай себя из-за этого; просто попробуйте улучшить со временем. Переписывание рабочего проекта вряд ли имеет практический смысл. Клиенты не будут доплачивать за это. codinghorror.com/blog/2006/10/…
работа
2
Вы не понимаете, о чем я говорю, работа в компании - это точная противоположность того, что вы поддерживаете, что вы любите делать. Он работает по чьему-то другому графику, используя то, что он диктует, и то, как они диктуют это без компромиссов, без времени на изучение новых вещей в свое время и без времени для внедрения чего-то в новые захватывающие вещи, которые вы изучаете в свое личное время. Это реальность того, чтобы быть разработчиком корпоративного программного обеспечения. Я сомневаюсь, что вы были бы так же преданы корпоративной среде, как вы говорите, что придерживаетесь своего экспериментального стиля исследований и разработок, к которому вы привыкли.

Ответы:

33

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

FrustratedWithFormsDesigner
источник
21

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

grokus
источник
10

... Я решил переписать проект с помощью CodeIgniter. Мне нравятся рамки. Но затем меня отвлекли, потому что для сокращения моих запросов к MySQL мне пришлось изучить расширенные объединения.

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

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

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

комар
источник
Спасибо @gnat. Я действительно ценю эти положительные отзывы. Я могу демонстративно согласиться с вами в том, что вы сказали.
Джеймс Гувна Джеффри
9

Быть профессионалом в этой области - значит постоянно разбивать себя против собственной несостоятельности. Сделайте это с 8-5 с понедельника по пятницу, может быть, больше, если приближается крайний срок, хороших выходных и приходите еще в понедельник. Это работа.

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

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

Дэн Рэй
источник
Мой опыт показывает, что быть тем, кто должен быть прав, это нормально, если у вас также есть проблемы с желудком. Я пинаю себя за каждую мелочь, которая не идеальна. Вот почему я делаю вещи лучше с течением времени.
Том Андерсон
Ну, это парадокс, не так ли? Гордость - одно из трех достоинств программиста. Но по моему опыту, быть «навязчивым, чтобы доказать, что я умный, показывая, что я уже все знал до того, как научиться этому», - это тенденция, которую новички-разработчики либо отпускают, либо недолго живут в этой области.
Дэн Рэй
Возможно, дроссель назад, а не отпустить? Я, к счастью, давно вышел из привычки заявлять, что знаю то, чего не знаю. Тем не менее, я все еще ненавижу признаваться, что ничего не знаю; необходимость сократить разрыв между тем, что я знаю, и тем, что я хочу сказать, что я знаю, является для меня настоящим драйвером. Не обязательно для всех!
Том Андерсон
Я не знаю, Том Мне кажется, что тот момент смущения, что вы еще ничего не знаете, это момент, который вы могли бы потратить на его изучение. Мне нравится знать столько же, сколько следующий парень, но у меня нет проблем с тем, чтобы сказать «я не знаю».
Дэн Рэй
6

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

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

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

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

Сэм Голдберг
источник
+1 за второе предложение. Я научился у своих коллег, работающих в разных организациях, больше, чем когда-либо читал (книги или онлайн). Из твоего вопроса звучит так, будто работа в команде какое-то время принесет тебе мир добра.
Дауд говорит восстановить Монику
3

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

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

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

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

Джо
источник
2

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

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

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

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

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

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

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

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

333Mhz
источник
1

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

Неопытный программист часто попадает в ловушку перепланировки:

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

В этой логике есть много неправильных вещей.

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

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

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

Такой подход позволит вам учиться заранее .

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

Кирк Бродхерст
источник
1

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

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

Spoike
источник
0

Но есть разница между «выполнением работы» и «выполнением работы должным образом».

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

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

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

Теперь иди пинай * * *

GrandmasterB
источник
Я не согласен с этим. Существуют способы программирования, которые намного проще в обслуживании и легко читаемы, чем другие, и есть куча книг, посвященных совершенствованию программиста, чтобы они могли писать лучший код.
TehShrike
Спасибо @grandmasterB. ТехШрике, а ссылки на эти книги?
Джеймс Гувна Джеффри
3
« никто не согласится на 100% по каждой теме программирования » - возможно, но по крайней мере 80% согласятся по крайней мере на 80% тем программирования. Это профессиональный консенсус. Абсолютных «прав» не существует, но есть лучшие практики, которые стоит знать.
Кирк Бродхерст
1
Все хорошо, но если ваша программа не решает проблему, она должна, лучшие практики или нет, это было сделано неправильно. Существует один объективный способ узнать, правильно ли выполняется программа - если клиент вручает зеленые листки бумаги или другой платеж в обмен на вашу работу. Любая другая мера - это просто мнение.
GrandmasterB
2
И когда ваш клиент чувствует, что ваша цитата об изменении является чрезмерной, и находит другого эксперта, который подтвердит эти чувства, потому что он плохо закодирован, вы не работаете.
Джефф