用新的技术或语言开始一个项目
在开始使用技术或以前从未使用过的语言开展项目时,是否有最佳做法?
你是否只是继续知道自己所知道的事情,在障碍来临的时候学习更多知识,或者是否总是经历一些必要的步骤?
问题在于,实际上与一个着名学科相比,你会采取哪些额外的措施?
编辑:而从pipe理的angular度来看,你将如何处理这种情况?
- 你如何估计项目的时间?
- 你更喜欢指派有经验的程序员(比较尴尬的项目),还是更喜欢指派年轻的(不pipe他们将要学习的人)?
还是同样的问题,你真的处理这些项目不同?
我首选的技术评估方法是使用以下步骤:
-
确定必须具备的function根据技术决定最重要的function。 这形成了您的接受标准。
-
研究这项技术以获得第一印象。 您正在寻找的信息,如成本,社区采用,成熟度,function,许可问题,与现有软件的兼容性
-
做一个相对的比较 。 找出一个你知道的小型“宠物”应用程序。 这样做的好处是,您不必考虑需求,并且在使用您已经了解的技术之前就已经实现了它。 select一个“宠物”应用程序,击中您的典型项目的主要实施点。 例如,您会看到许多Web应用程序开发人员实施简单的博客引擎,作为评估或演示技术的一种方式。 Twitter客户最近也风靡一时。
-
避免分心有效评估的关键是集中注意力,不要让自己陷入周边困境。 例如,如果您的评估任务是查看Web框架,请不要关心GUI的CSS布局。 有时最好是对时间框评估任务,以强迫自己专注于你可以切实实现的目标。
大多数情况下,我只是写了一个我用其他语言编写的程序,从概念的angular度来看,这并没有让我头疼。 对我来说,这是一个neural network,其他人使用易于光线追踪或任何其他。
然后,你会看到语言有什么困难,哪里和你所知道的有所不同。 只是不要立即开始实际的项目。
我总是保持记事本方便。
对于我使用新的语言/框架/ API的每一天,我将把当天的date作为标题。 在那之下,我会记下那天我见过的任何有趣的怪癖。 原因是我发现它在我心中根深蒂固之前,经常需要重新访问两三次。 注意到重新提交是一个主要的帮助。
通常情况下,你首先研究这个技术是否适合你的项目。
如果是这样的话,你就先行开始这个项目,在你走的时候遇到障碍物。
这里最重要的是定义潜在的有问题的案例,对于技术的疑虑,并以优先级来解决。 是否可以与其他技术进行交互,是否支持某种协议,是否可以使用它来实现所需的体系结构,在某些情况下是否具有足够的性能。 这个想法是首先确定一个船只(你的产品)是否可以在开始抛光船体之前移动,这样你就不会花费太多的时间和精力去做最后不能做的事情。
说到先决条件的步骤,可能会build议您查看使用此技术完成的同等项目的故事。 具有相似复杂性/规模的项目,整体架构,实现您想要的特定事物。 这应该给你一个想法什么可以和什么不能做。
我开始一个名为“XXXX圣经”的新的Google Docs文档,其中XXXX是所讨论的新技术。 然后,每一个小障碍或窍门或陷入进去。
总是阅读相应的“Hello world”教程,然后从这里继续。
我通常在两条战线上并行进行。
- 阅读一些好的/推荐的教程或书上的主题。
- 开始实施与您的应用程序/项目相关的小function片段,从下到上,采用这种新的语言和技术。 这是“探索性编程”,你会在这里使用大量的谷歌search,并阅读其他人编写的代码,以了解如何工作
有两个并行意味着你将受益于理论和实际,并将减less无聊。 恕我直言,也不能跳过。 很多人都没有阅读而急于读取代码,而且通常会导致不良的非惯用代码。
先用“hello world”教程练习是一个很好的起点。
而且,为了获得最大的收益,我总是试图回答这个问题: 为什么这样做,而不是这样呢?
我的目标是获得技术背后的理念,找出创作者的大局和意图,即技术解决什么问题。
对我来说,重要的是要记住,你不必一次就知道这一切。
我开始仔细观察,直到我理解它们 – 然后看看更大的碎片。
我也看到了大局 – 然后我进入更多的细节。
在某个时刻,两人应该会面(我希望!),一切都落空了。
我通常的做法是开始在系统的小部分工作,以获得理解 – 当我工作,并与其他部分互动,我学到越来越多。 对于使用新技术来说,这是真的,从基础开始,然后继续。
我最近开始使用Wicket和postgreSQL的新项目。 这两个我从来没有用过。
我强烈build议,一旦掌握了基础知识,如果您与其他技术(如数据库)有任何交互,也可以尝试与他们进行整合。 保证你也会在那里find挑战。
在开始的时候解决这些挑战更好,这样你就可以知道你将面临什么样的挑战,并且可以在项目的后期进行规划,甚至可能需要进行重大的改变。
我会说这主要是这样的:
- 阅读如何/论坛/ …
- 解决问题(毕竟这可能是你为什么使用你不知道的东西)
- 经过一段时间和知识积累… REFACTOR / REWRITE你原来的代码
允许很多额外的时间!
你总是会犯错误,而不是花费大量时间抢先尝试避免错误,你甚至不知道自己为什么错误,只是接受你会犯错误,让时间回过头来,修复它们 。
在我以前的工作中,我们有图书馆。
每当我们用新的语言或技术获得新的项目时,我们只是去那里拿一些书,并逐步开始testing。
我试着读一下这个话题。 看看还有哪些其他可用的解决scheme(让我们面对它,以前没有做过多less次?)。 如果可能的话,我也试着尝试一下这个技术。
我用我已经知道的语言开始一个项目的方式是一样的,除了手册稍微接近。
我能给你的最好的一条build议是问题领域。 技术是否适合您要解决的问题?
如果已经回答,答案是肯定的。
- 记笔记,这是之前提到的。
- 观看video,当我看到和理解这个人在做什么时,我倾向于更容易学习。
- 方便的文件。
也许这稍微超出了范围,但是:
-
你应该决定你的开发过程,这是相当独立的语言。
-
这将包括如何进行testing
-
您需要查看这个技术中熟知的人员的最佳实践(对于代码,可以从知名的开源项目中查看编码实践)
-
尝试find一些高度推荐的书籍,并在电子书店获得高评价
-
通过电子邮件联系本领域的知名人士,并将他们的电子邮件留在某个项目页面上,当您向他们礼貌地询问他们的build议时,会有多less人花时间回复您的电子邮件。
尽量不要在执行/工具相关的问题上过分丢失,当它不重要时,在开始使用新技术时尽早采用最佳实践和惯例是我的build议。
安东尼
如果你需要学习多种新技术(例如,现在我正在学习entity framework+ ASP.Net MVC 2),那么我build议创build端到端的参考实现。 尝试find创build它的最佳方式,然后将该参考“复制”到程序/网站的其他区域等。
我会开始质疑是否使用新技术或语言是一个好主意。 有时使用最新的技术对于你的期望很高的项目似乎是非常重要的。 通常当我这样被诱惑的时候,我发现最新的shiny的东西跟我已经知道的技术一样有缺陷。
在很多情况下,如果你真的关心项目,最好坚持你已经知道的。
阅读和学习东西不是一个好方法。 任何你往往忘记你读的东西。 所以我总是从一个小小的节目开始,就像一个“你好”的世界,给自己一个“好男孩”的肩膀只是为了提振。
然后开始查找博客,并阅读其他大师发现困难的做法。 在记事本中以技术或语言的名义记下它。 还写了一个简短的一行,为什么链接保存,以便我可以返回,如果需要的话。 如果有一些事情与我要开始的项目有关,那么也可以在一个class轮之后放一个星星。
下一步将是设立一个基地项目开始与手头的工作。 在介于两者之间的语言文件尽可能使我会阅读和尝试的东西。
对我来说,试验和错误的方法总是奏效。 我确实阅读了一些关于新语言/技术的基本信息,但是除此之外,除非我的技术手脚湿透,否则我通常不会学到太多东西。 我不确定是否是一个好的做法,但这是我学习的方式。
即使公司没有采用新技术,我也会学到一种新的语言。 当然,这可能不是pipe理层希望你处理事情的方式。
根据需要做高峰来了解新技术。 这些可以做为学习testing (unit testing)来保存知识。
当试图学习一种新的语言时,我会build议潜伏在IRC上 。 许多主要的语言和技术都有渠道,简单地看着人们在说什么,这是一个很好的方式,可以在你自己阅读关于这个主题的教程或书籍时,甚至没有考虑到这些方面。
当然,当你开始遇到障碍时,IRC将是一个提问的好地方,但是我build议把所有这些问题放在纸上,留下来,同时做更多的研究。 那些不熟悉的术语和句法经常需要一段时间才能插入到你的大脑中,并能够回到过去,或重新评估以前我认为非常有用的问题。
谈到语言,我可以说一件事:
如果使用这种语言实际上是值得的,那么比在头6个月内写出来的所有代码都是废话,用语言来衡量……有一条重要的规则要遵守:不要试图使用你从这个新语言的其他地方知道的成语,并抱怨语言不支持它…而是试图概述语言的特殊function和stream行的习语,并尝试着重于expression使用这些解决scheme..尝试用这种语言推广的新方法…否则你select切换语言是毫无意义的。