在没有更多经验丰富的开发人员的情况下,如何在进行实际项目时提高技能?[关闭]


15

我是一家小公司的首席开发人员,使用C#和ASP.Net。我们的团队很小,只有2-3人,没有太多的开发和设计经验。我没有机会向更多的高级开发人员学习,我的团队中没有人可以指导我并帮助我选择最佳方法,因为我自己会照顾大部分项目。

在没有更多经验丰富的开发人员的情况下,如何在实际项目中工作时提高软件开发技能?


1
你的问题真的很模糊。学习最佳发展策略的方法是通过在书籍,博客和播客中研究它们,然后将其应用于日常编码中。
罗伯特·哈维

谢谢您的评论。...我过去大部分时间都在浏览很多博客,我确实在编码阶段提高了自己,但是当需要实施开发策略(如TDD,DDD等)和设计模式(SOLID,干等),我得到害怕实现它们,因为在系统的开发,并在最后时间所限,我选择我自己的开发利用策略的风格,我认为不是最好的方式来实现....
阿卡什KC

1
@LolCoder我可能知道有些人可能会在有限的开发时间问题上拒绝TDD(尽管TDD实际上节省了以后的时间),但是我不明白应用SOLID或DRY会如何影响时间限制?
Songo 2012年

1
@Yannis Rizos:谢谢您编辑问题...现在看来真的很好...问题的主题保持不变....再次感谢您......
Akash KC 2012年

1
@LolCoder实际上,我前段时间在这里遇到过类似的问题。
Songo 2012年

Answers:


12

除了经验丰富的同事外,还有很多可以学习的资源:书籍,技术熟练的开发人员的博客,Stack Exchange,讲座/会议等。代码审查也至关重要,CodeReview.SE是宝贵的资源。

让我们看看它如何在示例中起作用。

您正在阅读的博客文章中提到了“ ETL”一词。您不知道它的含义,但是从本文中,您可以模糊地理解它是一种将数据从某种数据支持转移到另一种数据支持的过程或工作流。

您可以访问Wikipedia和其他资源,并对该事物有更精确的了解。尚不清楚何时使用ETL。毕竟,编写一个可以完成所有工作的SQL查询似乎要容易得多,而不是花费太多时间来构建真正的ETL。

为了回答这些问题,您从当地图书馆借了一有关ETL 的。它解释说,某些提取-转换-加载过程无法通过简单的SQL查询轻松完成:不仅提取阶段可以处理多种多样的数据支持,不仅是关系数据库,而且转换步骤可能非常复杂。验证/规范化数据并映射数据。

现在,您对什么是ETL,如何使用ETL有了清晰的了解,尤其是在需要ETL和何时不适合使用ETL的时候。同时,您已经实现了一个小的ETL作为个人项目。通过该项目,您可以发现一些对您来说不够清晰且书中没有涵盖的要点。这些要点很抽象,并且与源代码无关,您可以在Programmers.SE上发布一个问题。

当您有机会在公司中建立一个时,就开始创建它。你有几个问题。有些与代码有关;您在Stack Overflow上发布问题。其他与数据库有关;您在DBA.SE提问

最后,由技术娴熟的开发人员举行的会议将讨论如何优化ETL。您参加了这次会议,它为您提供了有关项目增强功能的宝贵提示。

您还将开始关注一个从事多年不同ETL的开发人员的博客。看到不同的方法很有趣,通过此博客,您可以了解ECCD。您很有兴趣,因此您可以借用Ralph Kimball的《数据仓库ETL工具包》,该书详细介绍了“提取,清理,整合和交付”过程。同一篇博客还提到了许多无需编程技能即可创建ETL的应用程序。这对于您为公司所做的ETL特别有用,因为您的老板(非技术人员)不断要求您对所做的事情进行一些小的更改。

发现事物

恕我直言,困难的部分是,当您没有导师或更有经验的同事时,是发现事物,通过发现,我的意思是从“我从未听说过”状态转变为“我已经听说过它,但不太了解它是什么。”

如果有人检查了我的代码并说我真的应该开始使用一些样式约定,并且出于一点好奇,我会发现在编程中,存在着不同的编写代码样式,一个人应该坚持给定语言和代码库的样式,而且许多语言都有用于强制样式的工具(例如C#的StyleCop)。

如果没有人告诉我这种风格,我怎么会知道这种东西存在?

那是诸如博客或Stack Exchange之类的资源很方便的地方。维基百科将无济于事(除非您花几天时间浏览有关编程的随机页面),而书籍很少谈论这些事情。

同样的情况也适用于与代码关系较小的模式和实践或事物。例如,我几乎无法想象有任何开发人员会在早上醒来时告诉自己,他必须学习一些有关ITIL的知识,而他以前从未对ITIL有所了解。

一旦发现一个新术语,就很容易了解它。如果您给了一个新的术语“代码合同”,并且您是C#开发人员,则可以在MSDN上轻松找到足够的信息(或者更好的是,在Jon Skeet的书中)。

好奇心有帮助

当我与实习生一起工作时,我总是注意到,最优秀的是那些对课外好奇的人。他们可能知道即使没有一个老师从未提及过函数编程,尽管他们可能不知道任何函数语言,但他们仍然可以用通用的术语来解释什么是FP以及它与其他语言有何不同。范例。他们可能了解敏捷,Unicode或部分信任/沙盒模型,只是因为他们正在阅读博客并使用Stack Exchange,而不是仅仅参加他们的讲座。

即使没有导师,他们仍然会学习所有大学没有讲到的东西。


谢谢您的精彩回答... ETL的例子很棒....从职业生涯开始,我一直给人的印象是,如果我要为小型团队工作并亲自领导项目,它将为我提供软件开发的深入见解。因此可以更好地学习开发方面的知识。...现在,我在思考其他开发项目(例如来自GitHub,Codeplex的项目)时缺少最佳开发方法。方法只能从经验丰​​富的开发人员那里学习,或者我可以自己学习?
Akash KC 2012年

@LolCoder:IMO,那些最好的方法在导师的帮助下更容易学习,但是仍然可以借助我在答案中列出的资源来自己学习。
Arseni Mourzenko

非常感谢您提供这么好的解释性答案.....是时候接受很多人的回答了……
Akash KC 2012年

4

我处于类似的情况:我们是一个小团队,我们的核心开发产品工作主要是基于已有几年历史的代码进行的增量更改。

我正在使用的一些技巧可以保持最新状态并提高我的技能。

在工作中:

  • 阅读:书籍,博客,公关材料。我遵循许多RSS提要。当今天的O'Reilly交易涉及一种我从未听说过的技术时,我会通读本书的描述。如果这项技术与我正在研究的任何事物有很大关系,我会花五到十分钟的时间对它进行更深入的研究,类似于MainMa的回答。我用一些不同的RSS提要重复此操作。
  • 与您的管理层一起制定培训计划,该计划可以得到公司资源(时间和/或金钱)的支持
  • 与大多数程序员的倾向相反,尝试拥抱变化和新的设计选项。出于变革的目的而进行更改不是很好,但是我相信开发人员经常会因为更改而避免使用新的设计或框架。这是一条很好的路线,不要急于做出有约束力的决定,但要留意新的做事方式。某些更改可能会带来意想不到的好处:迁移到DVCS后,我可以更轻松地在我们的代码库中进行实验并在那里尝试新技术。
  • 有些人喜欢会议。我发现,所花时间的回报很小。

工作之外:

我发现,在日常工作以外的技能方面的工作至关重要。实验,犯错误和追求利益的自由使我一直从事IT工作。如果我只有在职项目,并且需要将学习限制在立即有用的东西上,那么我很快就会精疲力尽。

  • 参与非工作项目。对我来说,这是一个与个人兴趣相关的功能性网站。我自由重构,并积极尝试使用不同的技术。为开源做贡献也会使您接触到其他人的代码。这也将为您提供很好的素材,以便与拥有更多经验丰富的开发人员的公司进行采访。
  • 代码营:如果您所在的地区代码营,请参加。由于这些课程不在工作时间而且是免费的,因此您可以自由参加任何您感兴趣的主题的会议。与典型的会议相比,这些会议通常是本地会议,涵盖了广泛的技术领域,因此,我认为会议的价值更高。

并且不要忘记经常访问SO或Programmers.SE。


非常感谢您的回答....代码阵营的想法确实不错,但不幸的是,在我这里有没有这样的事情......现在,我一定会参与开源项目....
阿卡什KC

3

这里的答案可能会很有帮助,但我想强调一点:每周5天每天8个小时,没有什么可以代替与比您更好的人一起工作(对于更好的专断和个人的定义)。可以肯定的是。

如果您是那种总是想变得更好,总是想学习的开发人员,那么最终您将不得不去另一家公司。那是不可避免的,应该计划。

当您找到最适合您的公司时,您会发现自己可以继续成长,而不是成长。


谢谢您的好评。...从职业生涯开始,我始终给人一种印象,就是如果我要为小型团队工作并亲自领导项目,它将为我提供软件开发的深入见解,从而可以更好地学习开发东西。。。现在,我在思考其他开发项目(例如来自GitHub,Codeplex的项目)时缺少最佳开发方法。……这种最佳方法只能从经验中学习开发人员还是我自己可以学习?
Akash KC 2012年

1

软件开发是一项团队运动。就像一项运动一样,要想达到很高的水平,您需要与其他人一样并与他们竞争。寻找机会四处走动。

请记住,练习是永久性的,因此,如果您不时不断地努力寻求更好的技术和知识,并且在没有批评家或榜样的情况下孤立地工作,您可能会发现自己的技能没有增长。

在全球范围内,竞争日趋激烈,因此,希望您的利基市场是暂时的,并为满足您满足工作标准的机会做好准备,同时,使您脱离舒适区,与上级团队一起工作。


1

在我提出任何建议之前,我必须说,一年前我的处境非常相似。

如果您正在完成项目,但是您觉得还有很多地方需要改进,那是一件好事。

有一次我没有技术能力和信心来完成项目。我通常会买一本书,阅读一个相当技术性的博客,会发现自己“超出我的深度”。我认为对我来说最大的问题是我没有接触过任何大型企业应用程序。我经常会做得很好,但是我不会陪伴任何人来验证我所做的事情。

这既激励人又充满挑战,所以我知道你来自哪里。我如何解决这个问题?我离开了一家公司,加入了一家知名的软件开发公司,这在过去的一年中帮助我获得了很多经验。

除非您想离开公司,否则我将建议由我们行业的先驱者撰写的书籍。我将从安德鲁·亨特(Andrew Hunt)的《实用程序员》开始。这本书包含大量有用的类比,这些类比非常容易记住。本书的前几章鼓励我选择一种与我们在工作中使用的非常不同的编程语言。我已经开始阅读非技术文献-现在,我相信阅读小说和科幻小说将使我成为一个更好的程序员。撰写论文离编写干净的代码并不遥远。有些作家是好的,有些则是坏的。这本书使我在乎自己写的东西。类推之一就是“破碎的窗户”。您将一辆汽车遗弃在大街上好几天了,什么也没发生。打破一个窗口后,第二天汽车可能会被毁。代码没有什么不同。如果看到破碎的代码或写得不好的代码,请立即进行修复,不要只是将其留在那儿,因为它迟早会重新“困扰”您。一旦开始阅读本书,您将获得许多类似的类比,这将使您以不同的方式考虑代码。

然后,我建议您继续阅读Robert C. Martin的Clean Code。这本书更加实用,因为它迫使您阅读不良和良好(干净)的代码。作者使用来自一个开源项目之一的代码示例。您说没有人可以指导您。有一个绝佳的机会来查看别人的代码,将其与您自己的代码进行比较,并查看如何改进它。对我来说,读这本书就像是在阴影一个人在做一个项目。该书还着重强调最简单的最困难的事情-关注点分离。作者问过我们行业的先驱者,他们认为什么是“干净的”代码。阅读他们的答案后,您就可以将它们与您对干净代码的全部看法进行比较。

最后,您是否考虑过从事开源项目?您将与其他可能经验更丰富的开发人员合作,他们将能够检查您的代码并为您指明正确的方向。

正如我在原始答案中所说的那样,这不会在一夜之间发生。我已经这样做了几年,几乎每天我都发现自己做错了。

祝好运!


1

练习解决问题。阅读并努力理解其他代码(github是此方面的重要资源),并对其进行改进。进行咨询工作确实可以帮助您扩展技能。

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.