经验丰富的程序员需要多长时间才能熟练掌握新技术/语言?

时间:2009-12-05 16:07:25

标签: project-management

我意识到这个问题可能会得到很多“依赖”,但无论如何我很好奇。当你雇用一些新的(但经验丰富的)团队,并且他们没有你正在使用的技术专业知识,但他们知道类似的东西,你花了多少时间让他们“上网”。

我说的是一些相当实质的东西,比如语言,或者有很多方法可以做的框架/产品。显然,许多库只需要很少的时间就可以开始使用。

根据我自己的经验(10年的经验,包括大量的咨询,所以学习新技术是课程的标准),我需要大约三到六个月的经验才能熟练掌握新技术,大约一年的时间让我感觉自己已经接近专家水平,在那里我了解所有基础知识和中等难度问题,以及一些非常好的领域。

你在项目中做了什么?你如何预算学习时间。

9 个答案:

答案 0 :(得分:5)

我不认为这样的语言是问题,而是它所包含的编程范例

e.g。今年早些时候我尝试了C#,来自Java的观点。这一切都非常简单。但是,我现在正在尝试Scala。由于功能方面的原因,我希望能够学习和磨练我的技能更长时间(你可以以强制性的方式编写Scala,但是你没有利用它的优势)。

我怀疑在(比方说)从关系数据库迁移到OO数据库与MS-SQL / Oracle迁移时相同。

答案 1 :(得分:4)

它不仅取决于所涉及的个人 - 它至关重要取决于具体的技术以及个人的背景;某些技术,尤其是语言越来越难以进入。我见过世界级的Java专家,之前几乎没有接触过C ++需要花费数月时间,大约6个左右,以便在C ++中充分发挥作用;反之亦然(世界级的C ++大师以前没有接触过Java)我见过大约2-3个月;对于经验丰富且技术娴熟的程序员而言,之前没有接触过动态语言,在Python中充分发挥作用可能需要3-4周。在每一种情况下,我都在谈论100%全职参与相关技术,由一位在技术和经验方面世界最高百分之一的程序员,在一个拥有该水平的其他几位程序员的团队中。使用中的特定语言。

可以缩短时间的因素是先前对“类似”语言/技术的接触,例如: C语言的坚实背景使得C ++学习起来稍微快一些,C#中的扎实背景有助于Java,Ruby或Perl的扎实背景有助于Python。可以延长时间的因素包括缺乏经验丰富的队友,没有100%沉浸在“新事物”中,以及心理阻力(并非真的想要全心全意地做到这一点! - )

我专注于我的示例编程语言,但是一些技术可能更难,即需要更长时间才能掌握 - 如果你从未编写过嵌入式实时硬件程序(不允许动态分配内存) ,所有功能所需的响应时间的上限证明)甚至六个月可能还不够;一些应用领域需要掌握应用领域,这些应用领域本身可能需要更长时间(如果要了解正在发生的事情,因此要充分发挥作用,您需要相当于心理学学士学位,或者对法律,或注册会计师的资格等等,每一项都需要多年的时间!)。

答案 2 :(得分:2)

这主要取决于语言与他们已经知道的语言的接近程度,以及个人拾取新事物的能力。在C ++,Java和C#等类似语言之间移动非常容易。同样地,从(比方说)Win32移动到MFC到.net比从MFC到MacOS更容易。

从C转向C ++可能需要更长的时间,因为程序员必须学习OO方法。从C ++迁移到Perl或ML可能需要更长的时间!

但是,您通常不需要了解太多入门知识。从C ++迁移到C#可以在几个小时内完成读取(主要区别),然后您就可以开始编写(或修改现有的)代码。那是因为(a)你已经知道如何进行OO编程,(b)95%的语法是相同的。

但它依赖的主要是你对“精通”的定义。使用类似的语言,您将能够在几天内编写出良好的代码(算法通常是与语言无关的失败),但通常需要数月或数年才能在语言或大型库中真正“熟练”。

所以我会说,在几个星期内,“达到(一个合理的)速度”,但是你可能会在他们的代码中看到愚蠢的“错误”或效率低下数月/年,直到他们了解所有的语言的小技巧。

在人们学习OO的情况下,通常似乎需要花费几天的时间来获得基本概念,然后在大约2年的时间里,一个顿悟的时刻发生在程序员突然放心他们真正“得到”的地方。它。 (我想这就是当你的大脑开始在OO中流利地思考而不是试图在程序上进行思考然后将其转化为OO方法时)

答案 3 :(得分:2)

在我们的环境(美国医疗保健收入周期)中,它不仅仅是学习并熟练掌握我们用于向客户提供解决方案的语言或技术堆栈。开发人员还必须了解问题域。我们与通常不会记录其系统行为的实体合作,以便外部实体(我们)与我们进行通信以获取我们所需客户的数据。我们的开发人员不得不超越规范来构建一个有效的系统。

客户支持人员也有不可避免的“它不起作用;修复它”的问题报告。这个问题通常不是我们软件的缺陷;与我们的软件通信的其他实体存在问题。我们的开发人员必须能够识别(有时证明)它不是我们的软件,以便我们的业务分析师类型可以转到其他实体并以一种能够解决问题的方式解释问题。 / p>

答案 4 :(得分:1)

你期待这个答案,但这一切都取决于人/程序员。我遇到过两个同样熟练的程序员不得不接受一些新的东西,一个人马上得到它,而另一个需要一些时间。之前对其他技术的曝光也是一个因素。

就个人而言,就新事物而言,我每次机会都会花时间学习一切。完全舒服需要6个月左右。

希望这有帮助。

答案 5 :(得分:1)

  

我说的是一些相当实质的东西,比如语言或框架/产品   这有很多办法。显然,许多图书馆只需要很少的时间就可以开始使用。

     

当你雇用一些新的(但经验丰富的)团队时,他们没有技术方面的专业知识   正在使用,但知道类似的东西,你为他们“上网”预算了多少时间。

二十三个工作日,六个小时,四十三分钟和十七点九秒。

  

你在项目中做了什么?你如何预算学习的时间。

我认为这些问题更好!

尝试在新技术中找到一个简单的项目,并让他们这样做。如果可能的话,让这个人首先修复错误,然后添加小功能。

学习是渐进的。人们可以在一生中继续学习C ++语法的细节。当一个人是一个主题的“专家”时,它只意味着在该主题中学习更多的收益越来越小。

答案 6 :(得分:1)

+1取决于它。

这取决于

这样的事情
  • 学习它的人的态度和能力
  • 是该人很好理解的问题领域编程/范例
  • 新技术/语言与他/她知道的其他技术的相似性
  • 新技术/语言在其界面中的一致性(API,语法等)
  • 什么是精通(只知道语言,或基本库,或运行时行为(与底层技术的互动))

话虽如此,根据我的经验,学习新语言/技术的聪明人将比那些在该语言/技术方面有更多经验的人更快地提高工作效率。

答案 7 :(得分:1)

请参阅Peter Norvig的Teach Yourself Programming in Ten Years,了解相关问题,即精通编程需要多长时间。

这完全取决于您是否已经知道与新语言类似的语言,并且了解新语言适合的问题域。我想说不要期望在不到3-6个月内合理地精通,但这又取决于它。

举一个例子,我在几年前实现了一个PHP / MySQL Web应用程序(总共花了大约6个月)。这是我第一个相当大的Web应用程序,也是我的第一个PHP。我使用过关系数据库,但这也是我第一次接触MySQL。正如预期的那样,MySQL很快就来了,因为它实际上只是我熟悉的一种语言的方言。让我感到惊讶的是,PHP也很快出现了。我意识到它不仅借用了PERL和C / C ++的思想,而且使用集成SQL语句进行编码的整个范例强烈地借鉴了我在90年代的一些经验,其中包括Informix 4GL。

另一方面,我从来没有真正学过函数式语言,所以我试图去学习Scala。这将花费更长的时间,而且我的Scala会在很长一段时间内变得像伪装的Java,而不是那么有用。

所以......这取决于! ; - )

答案 8 :(得分:1)

我同意这取决于。

如果此人了解一种技术/范例,他们也会冒险使用旧的做法/范例来编写新的语言/技术。

例如,我非常快地选择了Python(我是一个Java / C ++人),但是我花了很长时间才开始用Python编写Java样式代码并开始在功能上思考。

为了变得非常好,我认为没有经验的替代品。例如,我确信我可以很容易地获得J2EE,但是建立最好的企业系统的经验并不是你能够快速获得的。