我是一家小公司的首席开发人员,使用C#和ASP.Net。我们的团队很小,只有2-3人,没有太多的开发和设计经验。我没有机会向更多的高级开发人员学习,我的团队中没有人可以指导我并帮助我选择最佳方法,因为我自己会照顾大部分项目。
在没有更多经验丰富的开发人员的情况下,如何在实际项目中工作时提高软件开发技能?
我是一家小公司的首席开发人员,使用C#和ASP.Net。我们的团队很小,只有2-3人,没有太多的开发和设计经验。我没有机会向更多的高级开发人员学习,我的团队中没有人可以指导我并帮助我选择最佳方法,因为我自己会照顾大部分项目。
在没有更多经验丰富的开发人员的情况下,如何在实际项目中工作时提高软件开发技能?
Answers:
除了经验丰富的同事外,还有很多可以学习的资源:书籍,技术熟练的开发人员的博客,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,而不是仅仅参加他们的讲座。
即使没有导师,他们仍然会学习所有大学没有讲到的东西。
我处于类似的情况:我们是一个小团队,我们的核心开发产品工作主要是基于已有几年历史的代码进行的增量更改。
我正在使用的一些技巧可以保持最新状态并提高我的技能。
在工作中:
工作之外:
我发现,在日常工作以外的技能方面的工作至关重要。实验,犯错误和追求利益的自由使我一直从事IT工作。如果我只有在职项目,并且需要将学习限制在立即有用的东西上,那么我很快就会精疲力尽。
并且不要忘记经常访问SO或Programmers.SE。
这里的答案可能会很有帮助,但我想强调一点:每周5天每天8个小时,没有什么可以代替与比您更好的人一起工作(对于更好的专断和个人的定义)。可以肯定的是。
如果您是那种总是想变得更好,总是想学习的开发人员,那么最终您将不得不去另一家公司。那是不可避免的,应该计划。
当您找到最适合您的公司时,您会发现自己可以继续成长,而不是成长。
在我提出任何建议之前,我必须说,一年前我的处境非常相似。
如果您正在完成项目,但是您觉得还有很多地方需要改进,那是一件好事。
有一次我没有技术能力和信心来完成项目。我通常会买一本书,阅读一个相当技术性的博客,会发现自己“超出我的深度”。我认为对我来说最大的问题是我没有接触过任何大型企业应用程序。我经常会做得很好,但是我不会陪伴任何人来验证我所做的事情。
这既激励人又充满挑战,所以我知道你来自哪里。我如何解决这个问题?我离开了一家公司,加入了一家知名的软件开发公司,这在过去的一年中帮助我获得了很多经验。
除非您想离开公司,否则我将建议由我们行业的先驱者撰写的书籍。我将从安德鲁·亨特(Andrew Hunt)的《实用程序员》开始。这本书包含大量有用的类比,这些类比非常容易记住。本书的前几章鼓励我选择一种与我们在工作中使用的非常不同的编程语言。我已经开始阅读非技术文献-现在,我相信阅读小说和科幻小说将使我成为一个更好的程序员。撰写论文离编写干净的代码并不遥远。有些作家是好的,有些则是坏的。这本书使我在乎自己写的东西。类推之一就是“破碎的窗户”。您将一辆汽车遗弃在大街上好几天了,什么也没发生。打破一个窗口后,第二天汽车可能会被毁。代码没有什么不同。如果看到破碎的代码或写得不好的代码,请立即进行修复,不要只是将其留在那儿,因为它迟早会重新“困扰”您。一旦开始阅读本书,您将获得许多类似的类比,这将使您以不同的方式考虑代码。
然后,我建议您继续阅读Robert C. Martin的Clean Code。这本书更加实用,因为它迫使您阅读不良和良好(干净)的代码。作者使用来自一个开源项目之一的代码示例。您说没有人可以指导您。有一个绝佳的机会来查看别人的代码,将其与您自己的代码进行比较,并查看如何改进它。对我来说,读这本书就像是在阴影一个人在做一个项目。该书还着重强调最简单的最困难的事情-关注点分离。作者问过我们行业的先驱者,他们认为什么是“干净的”代码。阅读他们的答案后,您就可以将它们与您对干净代码的全部看法进行比较。
最后,您是否考虑过从事开源项目?您将与其他可能经验更丰富的开发人员合作,他们将能够检查您的代码并为您指明正确的方向。
正如我在原始答案中所说的那样,这不会在一夜之间发生。我已经这样做了几年,几乎每天我都发现自己做错了。
祝好运!
练习解决问题。阅读并努力理解其他代码(github是此方面的重要资源),并对其进行改进。进行咨询工作确实可以帮助您扩展技能。