应对快速变化的技术(尤其是微软)

今天,当我启动Visual Studio 2008来完成我的工作时,我在Start页面上看到了一个关于Visual Studio 2010和.NET 4.0的新博客文章。

我不禁感到有点不知所措。 我刚刚开始掌握微软在.NET 3.0和3.5(LINQ,WPF,lambda函数等等)中添加的东西….我知道这些东西不再是新的东西,特别是对于这里的人们,但是我一直忙于为客户解决真正的问题……尽pipe使用.NET 2.0这样的“老”技术,而且还没有时间继续跟上。

对不起,我的问题是非技术性的,但我认为它对程序员,员工和独立顾问以及软件业务(我希望从头开始)非常相关:如何应对这种快速变化,并保持相关性? 你是否忽视它,直到你需要它,或者你想保持领先? 我希望保持领先地位并保持相关性(请阅读:将我的房子和食物放在桌子上),而不是停留在传统的东西上,但它看起来像是一个无尽的跑步机。 特别是对于MS …似乎他们有这么多的钱和人,他们只是不断抽出新的东西…更糟糕的是,渲染以前的技术过时和不受支持(如VB6 …从我以前的生活)。

您不需要不断地更新您的生产工作,以使用最新和最好的技术。 但是你应该保持对那里的东西和正在创造的东西的了解。 开始使用这项新技术的时机已经到来,但这一切都很大程度上取决于您的项目和时间表。

但在某些时候,你需要继续前进。 某些技术变得不受支持。 你应该知道什么时候会发生,并计划你的生产工作的未来相匹配。

<咆哮>
就个人而言,我希望微软会在发布更多新的小部件,框架或者怪异的东西之前先修正错误 。 从.NET 1.1开始,2.0版本中还存在一些已知的bug,它们是5岁或者更老的 MS,它们没有修复的意愿。 来吧,MS,只需要一年的时间,解决问题,然后带来新的东西。
</咆哮>

好的,如果你在使用MS最新的东西之前等了一两年(或者是更长的SP2),它往往是相当不错的。

编辑:为了实际提供一个“答案”的问题,我倾向于学习我所需要的东西(Google是你的朋友!),不要为微软或任何人其他。 在一个全新的包装中,它往往是相同的旧东西。 当稀有gem出现时,它的'不容错过(嗡嗡声去互联网!)。

不要通过您能够embedded代码的10.8版本的最喜欢的框架的酷炫特性来衡量您的相关性。

您的客户将通过您是否解决问题来衡量您的相关性。 他们不知道你是否使用ForEach而不是Linq查询,或者使用委托而不是lambdaexpression式。

作为经理,我积极地为我的开发人员提供使用新技术的机会。 我们是一个.NET商店,但“跟上琼斯”是从我们曾经拥有的一些较旧的策略的范式转变。 直到去年,我们仍然处在1.1框架的一切。 这是非常痛苦的,无论是受限于旧版本的框架和必须使用Visual Studio 2003。

我们开始将业务请求与框架中提供的functionalignment。 经过几次“,我们现在的基础架构需要十个开发人员的时间,或者你可以投入五天的时间来解决我们的框架限制 – 那么这些请求将需要两天”,我们不仅鼓励升级该框架,但也保持最新,并采用function和function,因为它变得可用。

虽然微软并不完美,但是他们现在可以为其产品的CTP提供很好的可用性,让人们在游戏中保持领先,因为在组织内部可以做到这一点。 这些产品也非常适合概念validation项目。

随着所取得的进展,无论您能够立即投入多less时间,都很难将其全部吸收。 您需要确定哪些function,function和工具可以提供最大的积极影响,并着重于此。 当你扩大你的使用范围时,你会惊讶地发现其他部分的速度有多快。 Lambdaexpression式就是一个很好的例子。 使用LINQ提供了一个合理的进展,而不是我们试图实现的重点。

几乎二十年后,我觉得这是一个无止境的跑步机。 好吧,几乎…

您注意到的第一件事是一些技术比其他技术更持久。 一般来说,这是更好的devise的东西,但并不总是一致的,有时候,废话赢了,至less一段时间。 显然,学习好东西是一个明智的select,而忽略其余部分。 如果我试着去学习这些年来随处可见的技术,那么我的脑袋就会破裂,其中很多东西是不值得学习的。

你注意到的第二件事是这些东西大部分都是回收的。 这只是一遍又一遍的垃圾,只有这个时间用不同的名字,和一个新的声音咬。 最终事实certificate,没有太多办法可以做,而且每隔五年左右又重新提出一次,相同的基本概念就浮出水面。 我会进入他们的行列,但现在并不值得,现在我认为几乎所有领先的技术都只是在过去的二十年里存在的早期版本上。 几十年来,这个行业还没有看到任何真正的创新,只是以更快的速度增加了更多的东西,这就是所有的(好吧,也有一点,但不是太多)。

第三点也是最重要的一点,正如早就告诉我的:“这些东西真的没有用!”。 这可能是所有时间最好的保存。 如此多的东西可能会很酷,并有潜力,但可悲的事实是,它没有做足够的广告,使其可用于某些实际应用。 我们是一个假货行业。 这可能是由于认识到制作一个漂亮的演示文件非常容易,但是很难生成正确的代码。 而随着我们越来越废弃的水域,我们的基础变得越来越弱。 因此,学习如何使用甜蜜点以外的东西是没有意义的。 大多数技术都做得好,剩下的就是炒作。 找出那是什么,并记住它,但不要打扰使用该技术来做一些它不能做的事情。

多年来,我不得不跳出不同的语言和不同的操作系统。 我的编辑环境已经退化,我用来实现项目自动化的工具变得更加奇特,不太可靠。 技术发生了变化,但是由于我们已经超越了一些门槛,而他们有更多的function,他们不再可靠,所以以一种奇怪的方式变得更慢,更容易。 过去我们真的必须明白事情是如何运作的,现在你只是把代码放在一起,然后怪怪的怪罪别人。

select一些很好的技术,并在回到海滩的大部分路程上乘风破浪。 每五年一跳,游泳出来再做一次。 幸运的是,你会在正确的时间在正确的位置。 没有运气,你最终会像大多数其他前程序员一样,转向其他职业生涯。

保罗。

秒杀吧 ! 定期花费大量时间,并使用新技术编写解决scheme。 它不一定是幻想或有用的 – 只要你学习的基本知识,以及何时使用它在一个真实的项目。

关心它 。 我不同意一些答案 – 坚持这个东西是非常重要的。 如果您对学习新技术并不断提高技能不感兴趣,也许还有另外一个工作要做, 我并不是说这是丑陋的,但是通过继续使用旧的技术,你没有利用你所面临的问题已经解决的事实。 你忽略了成千上万的人和社区的工作。 例如,如果您使用WebServices而不是WCF编写新服务,那么您没有充分利用安全性方面的改进,而是通过自己再次解决这些问题来浪费时间和金钱。 最糟糕的是,你做错了,对你的公司/客户是一个风险。

知道什么时候说不。 当涉及到更新旧代码时,有一个平衡的行为。 每当新技术出现时,你不能只重写一切。 如果你专注于写作质量,“未来certificate”的代码,这将有所帮助。 例如,如果你写了一个结构良好的WinForms应用程序,应该可以在WPF中重新使用你的逻辑。 如果你写了一个体面的数据层,你应该可以放在linq数据层。 这个级别的代码很难掌握,但重构工具,unit testing和静态分析将有所帮助。

我感觉几乎是一样的。 很多时候我担心技术变化比我现在掌握的工具更快。 我总是试着想出一些我可以应用这个技术的项目。 比如,我真的很想在MVC上熟悉,所以我决定用一个新的框架来编写一个在digg,stackoverflow和dotnetkicks之间交叉的应用程序。 我只进了3天,而且已经学会了TON。

关于我们工作的困难部分是保持相关性这么难。 然而挑战让它变得如此令人兴奋。

在个人方面。

通过学习适用于所有编程语言的良好实践,devise模式和原则。 它有助于理解algorithm和math的各个方面

积极参与你的平台的编程社区,让他们在做出无条件的改变时,让他们有所作为(希望在他们实际执行之前)

在软件方面。

通过对您的软件进行良好的devise,使交换平台的问题最小化。

通过跨平台和语言进行良好的testing,您可以检测移植时的行为变化。

如果您的应用程序需要数十年的支持,如果您没有源代码,请尽量减less使用第三方软件。

我分享你对微软输出的看法。 它的好处是真实的,但是它们不断的释放stream很难追踪并且经常导致混乱的(有时是不起作用的)计算环境。 他们的产品经常在function上重叠,就好像不同的团队从不同的angular度攻击同一个问题而不相互交stream。 如果产品变得糟糕,那么花在学习早期的时间就会浪费掉。

无论如何,我通常说, 学习你的兴趣,而忽略其余的 。 这是保持积极性和不断学习的最好的(唯一的)方法。 这个努力应该是关于你的,而不是微软。

如果你像我一样,有更多的兴趣而不是追求时间,那么你需要find更高效的方法:减less你的“时间开销”(花费在无趣的事情上的时间),使用你现在没有使用的时间,并学得更快。

我发现现实世界中的效率技术常常与编写软件时所用的技巧相似。 想想你的“生活performance”,就好像它是一个程序一样,并find优化它的方法 – 也许通过交换一个资源,另一个资源,caching等。

更具体地说,这是我喜欢做的事情:

1)不要觉得你需要了解你感兴趣的话题的所有内容,根据你感兴趣的级别来详细了解它。

2)在编程中,寻找一个有趣的问题,并为其创build一个尖峰解决scheme。 如果钉实际上可用,所有更好。 对我而言,学习一门新语言或新技术的最好方法是让我的肮脏的手,并做一些事情。

3)最小化多任务。 我所做的就是努力总是有两件事情要做 – 一方面被阻止,另一方面工作。 这两者都会受到阻碍的情况并不多见,并且试图将我的注意力放在两个以上的事情上,都使我的注意力受到影响,同时也引入了太多的背景转换成本。

4)最大限度地把时间用在有趣的,有build设性的事情上; 即听播客,以利用时间,否则不花费学习。 不要浪费时间在电视和游戏等非build设性的东西上。 体育锻炼是必须的 – 为了解释一些老武术老师,“通过控制你的身体来学会控制你的思想”。

5)通过与其他对自己感兴趣的人联系起来,保持高度的动力。 一种方法是使你的解决scheme可以向公众提供。

6)在任何时候,你都会学习一些不同的东西,一旦开始厌倦你正在学习的东西,就会在它们之间切换。 但是,只要您的兴趣恢复,请回头再看。 我发现这有助于增加我花在学习上的总体时间,也避免了我的任何一个人被烧毁。

技术只是帮助解决问题工具

软件开发是用手中的工具解决业务问题专业

所以我只是集中精力解决业务问题,而不用担心太多的工具。 然而,在大多数情况下,最终结果是最有效的工具是最新的工具。 因此,切换到比以前稍好一点的新的感觉是自然的,尽pipe所有的主要原则仍然是相同的。

我不认为没有任何理由不使用最新和最伟大的技术感觉不好。 学习一种新的语言或技术就好比重新devise一个工厂:如果你把所有的时间花在重新工具上,你将不会花费任何时间来生产任何东西。

注意:这不应被视为继续使用Visual Basic 6的原因。

跳过一些版本是有道理的,也许采用其他版本。 如果您觉得需要跟上每项技术的发布,那么您将不会花费太多的时间来完成实际工作,或者使用您已经使用的工具来提高stream畅度。

我们已经进入了这样的思维,新的总是更好。 即使更新更好,但并不总是那么好,它是值得的麻烦。

我只是阅读并保持对微软技术的了解,但我并不急于使用它们,或者仅仅因为它们已经停止而实施它们。 微软拥有如此多的新技术,有些甚至与自己的技术相冲突。 就像Linq to Sql和Entity Framework是同一领域的两项新技术一样,微软在这方面的努力也是令人困惑的。

这取决于你使用什么适合你,并坚持下去,直到有新的东西出来,真正提供你不能没有生活的好处。 否则,享受微软的新技术,并试图从他们的困惑和混乱,他们大部分时间创造的傻笑,直到他们一起行动,并发布一些值得你的时间。

我在企业方面做了大量的工作,所以我不是一个熟悉所有技术的厂商,我可以专注于我们手头的问题。

我发现现在我们已经有了我们的商店,并且与MS的发布同步,保持当前并不难。 在.NET中获得最新版本只是令人难以置信的。 到3.0是困难的:我2.0后发布的公司,这是公司用来写一个不平凡的.NET应用程序的第一个.NET版本,然后雇用到公司…然后3.0迅速出来。 感到压力过大,试图让现有的开发人员了解2.0,而3.0是混合。 但是我们真的想要WCF(我们有一个使用WSE的项目,这很痛苦:WCF看起来是使用WS- *的一个很好的解决scheme)。 所以当3.0出来时,我们很快就采用了它,并开始了WCF路线。 WCF是一个真正伟大的堆栈恕我直言,但(现在仍然)很难grock。 在3.0版本发布的时候,我们并不需要在表示层上做任何事情,工作stream也没有太大的意义,所以我们避免了3.0框架的这些部分。

这使得3.0版本发布了半可pipe理的版本,因为我们只是专注于WCF业务需求的一部分(即我们感觉没有WCF的痛苦)。

3.5对我们来说也是很容易的 – 我们使用LINQ是有道理的。 像WCF那样采用并不难,因为您可以使用尽可能less的或尽可能多的。 我个人开始时只是删除了一些我的foreach语句来find一个收集成员,并从那里增长了我对LINQ的理解。 因为我们是Oracle商店,所以我们目前不使用数据直接(即Linq到Sql)。 C#的Lambda方式正在慢慢渗透我们的代码库 – 这是一个相当开关,但我喜欢它。 再次,因为它是完全可选的,所以根据需要很容易采用。

因为我们对3.0和3.5的真正需求感到满意,所以我们有一些时间来看看这些版本的其他部分,看看它们如何提高我们的生产力。 我最近花了一些时间与工作stream,我真的开始看到的力量。 看到在4.0工作stream的PDC演示使我真的想要释放…而不是感到被新技术淹没,我实际上非常期待它的发布…在任务并行库中烘焙相同。

所以我想我会说,在这个时候,我不会因为新的洪水而感到不知所措。 我认为,关注新版本正在解决的问题,直到我为他们做好准备。 这也有助于迅速采用新的框架。 3.0和3.5很容易采用,因为它们位于2.0以上,不需要进行wholsale核心代码升级。 4.0是最好的一年…这是我们有足够的时间开始看WPF / Silverlight的时钟周期这样做。 通常我们只是给最有兴趣的家伙一点点空闲时间,我们可以腾出时间去成为领导侦察员,开辟道路……这也有帮助。 我们并不需要全部都是专家。

它也帮助我们在即将发布的时候(即大约一个月)采纳新的框架。 4.0的版本可能更难以做到这一点……通过版本控制分支来保持我们的核心代码与单个项目分离,这有助于将共享的核心代码与“真正”的开发工作隔离开来,使我们能够在不破坏个人的情况下推进核心项目。 当有时间吸收它们时,单个项目就会合并这些变化。

最近读到这个:

http://www.pseale.com/blog/LearningLahar.aspx

http://www.secretgeek.net/3way.asp

执行摘要是:除非你需要,否则不要学习它!

我认为诀窍是要学习永恒的和可移植的技能。 了解如何使用多种语言和框架进行编程,比了解如何使用最新的语言或框架进行编程要重要得多。 同样,了解安全原则比了解某些Web服务器中最新的缓冲区溢出更为重要。

不幸的是,如果你正在换工作,你可能会面对招聘人员,他们不知道,他们的工作职能本质上是stream行语 。 但是,如果你能够克服这个问题并且被那些理解这个工作的人接受采访,那么这应该不会有问题。 如果确实如此,那么你可能会讨厌在那个地方工作。

此外,这种“变化”的大部分只是毫无意义的stream失,而很多新的“技术”只是一个有人写的程序或者图书馆……它不是最后一个程序或图书馆的“新技术”技术。 你不需要知道其中的大部分,世界其他地方都必须研究你所生产的一切。

你当然不需要知道所有的东西,除了你需要安装和学习每一个电子邮件程序,以便能够发送电子邮件。

这有点像试图跟上RSS提要中的所有内容,或是读取邮件列表中的所有内容。 随它吧。 标记为已读。 如果这很重要,你会再次听到。

我不觉得你是唯一一个觉得C#真的很快成长起来的人。 幸运的是,针对C#4.0和.NET 4.0宣布的更改并不像C#3的新特性那样令人难以置信。它们是非常好的function,我特别期待IronPython和IronRuby以及VS2010的新TDD特性。

是的,技术运行速度很快,其实每个行业都运行得很快 它的运动速度与人们愿意创造的东西一样快。 我觉得想到的评论是专门的。 find你喜欢和专业的东西。 你永远不会让自己免于变革,关键是要让自己可以上市,select你想学的东西,而不是别人告诉你的东西很热。 正如我们所看到的,有很多公司甚至不在他们的机器上部署.NET Framework,因为他们目前使用的应用程序,他们没有必要。 这些公司将开始升级,但许多升级是十年的迁移。

有一篇来自JoelOnSoftware的 Joel 撰写的文章 ,谈到了Joel的这个快速变化的技术。 当我很久以前阅读它的时候,我发现它很有趣。 相关的部分是在一个年轻的伞兵的照片之后的某处。

学习研究。 读取读取读取。 参与参与参与。 代码代码

一天有24小时。 保持最新是我们保持相关性和需要的。

通常通过跟上本地用户群体的组合,尝试一些有时候我会工作的东西,看看哪些实验产生了什么结果,并且知道我的雇主可以在我正在使用的内容中扮演一个angular色,并将继续使用。 因此,我进入了.NET 3.5框架,因为其他人需要在项目中使用Linq以及使用它的新CMS系统,所以现在我可以稍微探索一下。

做一点小小的实验,不是一直保持领先,或者直到需要时才忽略它,而是定期维持这种保护。 例如,在过去的十年中,我已经从ISAPI扩展到ASP到ASP.Net,以及从1.0到3.5的各种版本,包括包括2.0在内的3.0的奇妙想法,并添加了一些东西,而不是称之为WinFx,它是一个它的名字一次。

如果一个人的工具来自一个雇主,那么他们是如何看待新技术的,以及如何将新开发的硬件或软件随时转移到一个新的硬件或软件上,例如从一台P4机器到一台Core 2 Duo机器,不仅如此,而且还增加了大量的内存,但是我失去了一些像以前版本的Visual Studio一样在旧盒子上使用的软件。

对我来说(在我40岁出头的时候),需要甚至是想要保持目前的衰弱。 真正的工作,真正持久的好处,是你正在照顾一些旧技术。 而在我看来,旧的技术将是.NET 2.0。

恕我直言,一个真正的趋势二传手的标志是谁可以足够的了解新技术,以实现是否适合您的技术支持,以及是否有商业意义? 例如,Linq to Sql在你的旧环境中是否有意义? 研究一件事,决定是否合理,并用这一新技术推进。

为了实现新东西,不要实施新的东西。 只有时间能够certificate一项新技术是否使任何企业获得了巨大的投资回报。

你是否忽略它,直到你需要它…

这是一个保持新技术不知所措的好方法。

只要稳定,学习速度缓慢。

学习其他版本。 我就是这样跟上的 大多数书籍通常会让你了解以前的框架,并告诉你所添加的内容。

只是我2美分。

我试图做的事情跟上技术:

  • 尝试在工作中纳入新的东西。 这样我基本上得到报酬学习。
  • 侧项目或在别人的开源项目上工作。 也有助于获得别人对新技术的看法。
  • 收听有关技术的播客。 特别是我听Java的Java和.NET岩石。 如果我不积极编码,至less我可以听到新的东西!

我听到有人说你应该每两年学一门新的编程语言。 我个人觉得在外面工作很多时间是非常困难的。 至less不是,如果我想结婚! 🙂

我常常陷入同样的​​困境,试图让自己学习一门新技术或一门新语言。 但大多数情况下,除非你的雇主要求,否则你不会用那种技术或任何有用的语言做很多事情。 你最终会写一些有用的小程序来学习语言的function,并尝试一些很酷的广告位。 更多的时候,你试图说服自己,新的语言正在试图用一种更好的方式去做你的旧语言。 而在试图采用这个function时,我忘了使用这种语言来实现它的优点。

最终,发生了两件事 – 新的方式比我以前的方式更好,因为它节省了几行代码。 但是我仍然用新的包装来做旧的东西。 或新function吸了,我会坚持古老的方式,并阻止所有宣传的创造者。 🙂

但是这种学习在某些情况下是必不可less的 迟早你会开始对可能会起飞的事情有一个直觉,而且一旦你做了这个练习几次就不会有什么结果。 所以它确实有助于保持更新,至less在互联网上会有很多评论来帮助你。

但是请记住,学习技术比学习编程更容易。