作为程序员奋斗。需要一些建议[关闭]


20

我已经成为开发人员很多年了。我擅长做我的工作,可以“完成工作”。

但是,“完成任务”和“正确完成任务”之间是有区别的。让我们举个例子。

最近,我从头开始开发了一个网站。该网站运行良好,我没有任何问题。通过查看代码,我认为自己可以做得更好。我本可以减少MySQL查询。我本可以使用MVC来使其扩展更容易(它现在确实需要扩展)。

我决定使用CodeIgniter重写该项目。我喜欢这个框架。但是后来我陷入了困境,因为要减少我的MySQL查询,我必须学习高级联接。

这就是问题所在。每当我做好工作时,我就会不断学习。而且诸如高级MySQL联接之类的主题需要花费一些时间来学习,然后再花费一些时间来实现。

我不在公司工作。我一个人做。因此,我想如果我是一家公司的PHP开发人员,将会有单独的团队来处理SQL。

独奏很难。有时,尽管我的知识很发达,但我发现自己一个问题又一个问题。我可能对自己的工作感到很自豪。但是,如果我必须为一家处理完整项目的公司工作,我可以想象项目会花费一些时间,因为我必须学习越来越多的知识来满足自己的自豪感,并确保我做的事情“正确”。

我确实计划在新的一年后找到工作。我需要工作保障。这就是为什么我问这个问题。

关于自我发展和自我完善,您能提供什么建议?我应该少担心吗?或者,当我不直接处理SQL查询时,可能会找一份PHP开发人员的工作?


54
如果您不想不断学习,那么您处于错误的领域

6
@JamesGuvnaJeffery:如果他们在项目期间(根本)没有时间(全部)学习,我不想在那里工作,因为作为开发人员,我会停止自我完善。
Marjan Venema

3
工作是学习,他们没有给您这个神奇的假期来学习,实际上他们会这样做,这被称为“您的个人时间”。他们无缘无故地称其为“在职培训”。像我说的那样,如果您不适应成为一名自主学习者并一直无偿学习,那您可能在错误的领域。

5
旧代码应该很烂。不要为此而自杀。只是尝试随着时间的推移而改善。重写工作项目几乎没有任何实际意义。客户不会为此支付额外费用。codinghorror.com/blog/2006/10/…–
作业

2
您听不懂我在说什么,在一家公司工作恰恰是您拥护自己喜欢做的​​事情的对立面。它正在按照别人的时间表进行工作,使用他们的命令和命令的方式,只有妥协,没有时间在自己的时间学习新事物,也没有时间在自己的私人时间将事情付诸实践。这是成为公司软件开发人员的现实。我怀疑您会像您说的那样习惯于公司环境,就像您说的那样致力于实验性的研究和开发风格。

Answers:


33

忠告:不要害怕学习新事物-您迈出了良好的第一步,承认自己可以做得更好,然后努力学习如何做得更好。是的,这需要花费更多时间,但从长远来看,通常值得付出。现在您知道了CodeIgniter,可以将其用于下一个未来的项目。您可以将其放在简历中。既然您了解高级SQL技术,您将来的项目就会受益。如果停止学习,就会停滞不前。


21

对我来说,您正在经历的事情听起来很正常。这就是我们努力工作的方式,并且在做事上变得越来越好。


10

...我决定使用CodeIgniter重写该项目。我喜欢这个框架。但是后来我陷入了困境,因为要减少我的MySQL查询,我必须学习高级联接。

这就是问题所在。每当我做好工作时,我就会不断学习。而且诸如高级MySQL联接之类的主题需要花一些时间来学习,然后才能花些时间实现...

综上所述,我认为对您而言,专注于提高您的提前计划,建立工作队列并确定其优先级,管理您的时间等能力是有意义的。

确实,这似乎是您态度中唯一缺少的东西。您所谓的“旁听”本质上是另一项工作(“学习高级联接”),必须计划,确定优先次序并放入队列。


谢谢@gnat。我非常感谢这些积极的回应。我可以反抗你的意见。
詹姆斯·古夫纳·杰弗里

9

成为这个领域的专家,就是要不断地克服自己的不足。在周一至周五的8-5进行此操作,如果有最后期限,请度过一个愉快的周末,然后在周一再进行更多操作,可能会更多。那是工作。

制作软件需要一定的谦虚感。如果您是必须正确的人,并且必须证明他们已经了解了一切,那么这可能不适合您。

我无法理解每天都不学习任何东西。我不认为我想要那份工作。


我的经验是,只要您还可以缓解胃部不适,做个对的人就可以了。我踢过所有不完美的小事情。这就是为什么随着时间的推移我会做得更好。
汤姆·安德森

好吧,这是悖论,不是吗?傲慢是程序员的三大美德之一。但是根据我的经验,“被强迫通过证明自己在学习之前已经知道一切来证明我很聪明”是菜鸟开发人员要么放手,要么在这个领域不会持续很长时间的趋势。
丹·雷

也许退缩而不是放开手?幸运的是,很久以前,我就摆脱了宣称我知道自己不知道的事情的习惯。但是,我仍然不愿承认自己不了解事物。缩小我所知道和我想说的我之间的差距的需求对我来说是一个驱动力。不一定适合所有人!
汤姆·安德森

我不知道,汤姆。在我看来,那令人尴尬的时刻是您可能不愿意花一些时间在学习上。我喜欢和下一个家伙认识一样多,但是说“我不知道”完全没有问题。
丹·雷

6

独奏困难的。相反,当您与一组开发人员一起工作时,每个人都在互相学习。作为团队的一部分,通过与其他开发人员合作,您将学到很多知识,并且比尝试自行解决所有问题要花费更少的精力。

就是说,作为开发人员,您必须致力于不断学习。无论是阅读有关新框架的文档,还是有关开发的书籍,您都必须不断努力,以使您的知识保持最新并不断增长。但是,作为团队的一员可能会澄清您在任何给定时间点需要了解的最多知识领域。

关于重新访问旧代码并进行重写的观点:我发现我自己的代码始终代表着我编写代码时所学的精髓。很多时候,我回想起几年前写的东西,然后把自己拍在额头上,当我知道现在我所知道的情况下,我可以做得更好。但这就是经验的本质,您需要它后就可以得到它...

最后,在开发应用程序时,您始终需要保持良好的业务意识,以决定何时最好的捷径来更快地完成,以及何时需要花更多的时间来学习可以改进设计和质量的新知识。的应用程序。在软件世界中,有很多东西要学习。如果不进行那种明智的判断,您可能会发现自己无法学习,思考,重新设计,但是却一事无成。


+1为第二句话。我从在许多不同组织工作的同事那里学到的东西比从阅读(书籍或在线)中学到的更多。从您的问题看来,在团队中工作一段时间会给您带来美好的世界。
达伍德说恢复莫妮卡

3

我认为您的顾虑是正确的,但您不应为此多睡一会。我认为,成为一名技术专家会带来以下负担:

  • 您必须不断学习新事物。您要么学会爱上它,要么就不喜欢。
  • 您想要掌握的东西比人们可能知道的更多。
  • 您希望自己在项目中拥有的技能能够在项目中发展。
  • 结果,您将始终想返回并重做该项目。发布您知道会更好的东西太难了。

最后,听起来您在乎构建高质量的软件,这是您无法学习的。知道您需要通过构建完美的产品来区分构建高质量的解决方案。听起来您就像我,永远不会觉得自己很完美。如果您觉得自己有机会改善自己和工作,那将更加令人担忧。

成为所有行业的佼佼者(无精打采)很困难,但是您确实需要弄清楚如何识别对您来说最有趣和最有用的事物,并专注于它们。找出如何最好地将其他工作“外包”给其他人或工具


2

我认为您无需担心“正确完成”。力求完美,但要意识到,实际上不可能设计出完美的解决方案,尤其是在第一轮中。您非常担心妥善解决此问题,这一事实表明您已经走上了正确的道路。

至于您对学习新事物的挫败感, 我发现与其他人一起工作,并能够与其他程序员讨论和讨论问题,这消除了我需要学习什么的痛苦,并以学习为乐。发现新事物并学习如何应用。

我喜欢编写软件,但是有时候确实不能真正学习一些新东西,而要找到能够真正实现自己想要做的事情的确切方法就是痛苦。

据我了解,我和你的处境相似。有时,仅对某事进行编码可能既令人沮丧又困难,而在其他时候则既有益又有趣。

完全按照计划做,找到将成为团队成员的工作(并尽最大努力确保将工作放到不会抽烟的地方)。与使用相同技术并设计相同软件的其他人一起工作将使您在一夜之间扩大对这些技术和设计模式的理解和应用。

至于第一次知道如何正确地做某件事,那么,除非第一次您已经以某种特定的方式做过,您怎么会知道有更好的方法呢?软件设计技能通常在很大程度上取决于经验。乔尔·斯波斯基(Joel Spolsky)是一位软件天才,但是如果您读了很多他的文章,您会发现它们很大程度上是经验和智慧的结果。

至于SQL部分,作为.NET开发人员,我尚未在有专门数据库开发人员的任何地方工作,我们都编写了自己的SQL,但是通常有一些非常擅长SQL的开发人员愿意为您提供帮助与更深入的东西。

你听起来像个聪明人,我不认为你应该对自己这么难。


1

这完全是正常现象,您不必担心太多。您确实需要不断学习新技能,但同时也需要学习确定优先级和管理时间。您还需要避免不必要的重新开发陷阱。

经验不足的程序员经常会陷入重新开发的陷阱:

我没有完美地编写该程序,现在需要扩展或更改它。由于我编写代码的方式,修改现有代码将需要大量工作。从那时起,我学到了很多东西,我相信最好的办法就是重写整个程序。我确定这次我可以写得更好。

这种逻辑有很多问题。

  • 这是一个大量的工作,修改或添加到现有的代码,但是那会不会有很多工作,重写一切吗?
  • 如果您重写所有内容,则很有可能会制造新的错误,并且所花费的时间将比您想象的要长(特别是如果您没有经验的话)。您是否正在考虑编写系统所涉及的所有内容?(记住您第一次花了多长时间)
  • 自您最初编写该程序以来,您已经学到了很多东西(因此您可以对其进行改进),但是下个月/下一年您还将学到更多。是什么让你觉得你会不会想重写一切再次在将来的某个时候?
  • 一个程序的最终测试是它是否有效。你有什么更好的事情吗?

考虑并计划重新开发永远不会受到伤害。这意味着考虑您要如何重写程序,并尝试确定遇到的任何问题。在这种情况下,您将确定您现在需要的“高级SQL连接”,然后调查它们的工作方式并了解它们。

如果您认为没有通过计划(没有开始开发)来发现高级加入知识差距,那么您需要提高计划技能。尝试考虑计划的哪一部分不够详细。在确定整个系统在技术上是可行的之前,应详细介绍所有必要的信息。

这种方法可以让您提前学习。

最后,在工作中学习是编程的正常部分。但是,这并不意味着您开始一个任务,然后意识到您必须停止一周才能了解例如基本的HTML。您可以花几个小时停下来学习一些东西,但是您的老板只是付钱给您完成工作。高效学习-不要阅读介绍和历史记录,仅阅读其工作原理以及其如何适合您的程序。如果您不得不连续几天停止工作以学习如何完成程序的一部分,那么您做错了。


1

您可能会认为学习新技术和新问题是一个时间浪费。但是不要惊慌。这是正常的。作为程序员,这是您实践中的一部分,学习...否则我们都会被COBOL所束缚。

自由职业者会相应地调整他们的佣金,学习时间尤其是您的时间估算因素。下次决定引入新框架时,请确保计划足够的时间来学习它。


0

但是,“完成任务”和“正确完成任务”之间是有区别的。

不,没有,我认为这是您问题的根源。在我看来,您太担心“正确”做事了,因为作为一个单独的开发人员,您无法看到其他人的工作方式。但是正确地根据谁呢?这个神奇的人谁会下令您所做的事情是“正确的”?以100个世界上最好的程序员为例,我保证没有两个人会在每个编程主题上达成100%的共识。

最终,重要的是客户是否满意。如果您创建的程序正在解决他们应解决的问题,并且以经济高效的方式进行,那么您就是在正确地进行操作。例如,使用codeigniter比使用您自己的框架更天生就正确。必然的结果是,如果您产生一堆废话,那么您将“做错了”,而不管遵循的过程或“最佳实践”如何。

您正在重新访问代码并看到改进代码的方法,这是开发过程中的正常部分。这并不表示您没有“正确地”做事。这表明您致力于学习和改进。从我在帖子中看到的所有内容来看,您都没有问题。

现在去踢一些* * *


我不同意这一点。有许多编程方法比其他方法更具可维护性和易读性,并且有大量书籍致力于改善程序员,使他们能够编写更好的代码。
2011年

谢谢@grandmasterB。TehShrike,并参考这些书吗?
詹姆斯·古夫纳·杰弗里

3
没有两个人会在每个编程主题上达成100%的共识 ”-也许,但至少80%会在至少80%的编程主题上达成共识。那是专业共识。没有绝对的“权利”,但是有最佳实践,值得一读。
柯克·布罗德赫斯特

1
一切都很好,但是如果您的程序不能解决问题,无论是最佳实践还是正确的做法,都可能会错误地完成。有一种客观的方法可以告诉您程序是否正确完成-客户是否交出了纸条或其他付款来换取您的工作。任何其他措施仅是意见。
GrandmasterB

2
当您的客户认为您对更改的报价过高,并由于编码不正确而找另一位专家来确认这些感觉时,您就失业了。
JeffO 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.