今天,当我启动Visual Studio 2008来完成我的工作时,我在“开始”页面上看到了一篇关于Visual Studio 2010 and .NET 4.0的新博文。
我情不自禁地感到有些不知所措。我刚刚开始掌握微软在.NET 3.0和Linux中添加的所有东西。 3.5(LINQ,WPF,lambda等等)....我知道这些东西不再是新的,特别是对于这里的人们,但我一直忙于为客户解决实际问题......虽然“较旧的“技术,如.NET 2.0,并没有时间不断跟上。
对不起,我的问题是非技术性的,但我认为这对程序员,员工和独立顾问以及软件业务(我希望有朝一日开始)非常重要:如何应对这种快速变化,以及仍然保持相关性?在你需要它之前你是否忽略它,或者你是否试图保持领先?我希望保持领先并保持相关性(阅读:保持我的房子和食物在桌子上),而不是坚持做旧的东西,但它似乎是一个无尽的跑步机。特别是MS ......似乎他们有这么多钱和人,他们只是不断抽出新东西......更糟糕的是,渲染以前的技术已经过时且不受支持(比如VB6 ......来自我以前的生活)。 / p>
答案 0 :(得分:21)
您无需不断更新生产工作即可使用最新最好的技术。但是你应该对那里有什么以及正在创造什么保持知识。有一段时间适合开始使用新技术,但这很大程度上取决于您的项目和时间表。
但在某些时候你需要继续前进。某些技术变得不受支持。您应该知道何时会发生这种情况,并规划您的生产工作的未来以匹配。
答案 1 :(得分:19)
<咆哮>
就个人而言,我希望微软能够先修复bug ,然后再发布更多新的小部件,框架或者whizbang thingamajigs。 .NET中存在已知的错误,从1.1和早期的2.0仍然存在 - 5岁或更早的错误,MS显示无法修复。来吧,MS,只花一年时间修理一下,然后带上新东西
< /咆哮>
从好的方面来说,如果你在使用MS的最新产品之前等了一两年(或者SP2,这已经更长了),它往往会非常好。
编辑:为了实际提供问题的“答案”,我倾向于学习我需要的东西(谷歌是你的朋友!),并且不要对最新的闪亮小工具感到太兴奋微软或其他任何人。在一个全新的包装中,它往往只是旧的东西。当罕见的宝石出现时,它很难错过(嗡嗡声响起互联网!)。答案 2 :(得分:13)
不要通过您最喜欢的框架的10.8版本的酷炫功能来衡量您的相关性。
您的客户将根据您是否解决问题来衡量您的相关性。他们不知道您是使用ForEach而不是Linq查询,还是代理而不是lambda表达式。
答案 3 :(得分:10)
作为经理,我积极为我的开发人员寻求使用新技术的机会。我们是一家.NET商店,但“跟上琼斯”是一种范式 - 从我们曾经拥有的一些旧政策转变。直到去年,我们仍然在使用1.1框架。这是非常痛苦的,无论是受旧版本的框架限制还是必须使用Visual Studio 2003。
我们开始将业务请求与Framework中可用的功能相对应。经过几天“我们目前的基础设施需要十个开发人员日,或者您可以投资五天让我们解决我们的框架限制 - 那么这些请求需要两天”,我们不仅鼓励升级框架,但也保持最新并采用可用的特性和功能。
虽然微软并不完美,但它们确实为其产品的CTP提供了很好的可用性,允许人们保持领先于游戏,因为可以在组织内部实现这一目标。这些产品也非常适合包含在概念验证项目中。
随着正在取得的进步,无论您可以立即投入多少资金,都很难将它们全部吸收。您需要确定哪些功能,功能和工具可以提供最大的积极影响,并专注于此。当您扩大使用范围时,您会惊讶地发现其他部分的速度有多快。 Lambda表达式就是一个很好的例子。使用LINQ提供了一个合理的进展,而不是我们试图实现的重点。
答案 4 :(得分:9)
近二十年后,我觉得自己很有信心说这是一款无尽的跑步机。好吧,差不多......
您首先注意到的是,某些技术比其他技术更持久。一般来说,这是设计得更好的东西,但并不总是那么一致,有时废话会赢,至少会持续一段时间。显然,学习好东西是明智的选择,而忽略其余的东西。如果我试着学习多年来出现的每一项技术,我的脑袋就会爆裂,而且其中很多都不值得学习。
你注意到的第二件事是这些东西大部分被回收了。它只是一遍又一遍的废话,只是这次有了不同的名字和更新的声音。最终,事实证明,没有那么多方法可以做,虽然它每五年左右重新引入一次,但相同的基本概念浮出水面。我会进入它们,但它现在并不值得,我认为现在几乎所有的领先技术都只是在过去二十年中存在的早期版本中旋转。几十年来,这个行业还没有看到任何真正的创新,它只是以更快的速度推出了更多的东西,这就是全部(好吧,它也有点闪光,但并不多)。
第三个也是最重要的一点,就像很久以前告诉我的那样:“这些东西都没有真正起作用!”这可能是最好的节省时间。很多东西可能很酷而且有潜力,但令人遗憾的是,它没有做足够的广告宣传,使其可用于某些真正的应用程序。我们是假货行业。这可能是由于认识到制作光滑的外观演示非常容易,但真的难以产生正常工作的东西。随着我们越来越多的垃圾散落在水域,我们的基础变得越来越弱。因此,学习如何使用其最佳位置之外的东西是没有意义的。大多数技术做得很好,其余的只是炒作。找出它是什么,并记住它,但不要试图使用该技术做一些它不能做的事情。
多年来,我不得不从不同的语言和不同的操作系统中跳出来。我的编辑环境已经演变,我用来自动化项目的工具变得越来越不可靠。技术发生了变化,但是由于我们已经超过了一些门槛,虽然它们具有更多的功能,但它们不再可靠,所以以一种奇怪的方式它变得更慢,更容易。过去我们真的必须了解事情是如何运作的,现在你只是将代码拼凑在一起,然后当它行为奇怪时责备其他人。
选择一些优秀的技术,并将大部分路上的波浪带回海滩。每隔五年跳一次,游回去再做一次。幸运的话,你会在合适的时间出现在正确的位置。如果没有运气,你最终会像大多数其他前程序员一样转向其他职业生涯。
保罗。
答案 5 :(得分:8)
飙升!定期花费大量时间并使用新技术编写解决方案。它不一定是花哨或有用的 - 只是足以让您学习基础知识以及何时在实际项目中使用它。
关心它。我不同意一些答案 - 坚持这些东西是非常重要的。如果您对学习新技术并不断提高自己的技能水平不感兴趣,那么您可能 更关心的是另一项工作。我并不是说丑陋,但通过继续使用旧技术,你没有利用你所面临的问题得到解决的事实。你无视成千上万人和社区的工作。例如,如果您使用WebServices而不是WCF编写新服务,则无法利用安全性方面的改进 - 最好的是,您通过自己再次解决这些问题而浪费时间和金钱。在最坏的情况下,你做错了,对你的公司/客户来说是一个风险。
知道何时拒绝。在更新旧代码方面存在平衡行为。每当新技术出现时,您都不能只重写所有内容。如果您专注于编写质量,“面向未来”的代码,这将有所帮助。例如,如果您编写了一个结构良好的WinForms应用程序,那么应该可以在WPF中重用您的逻辑。如果你写了一个不错的数据层,你应该能够放入一个linq数据层。这个级别的代码很难掌握,但重构工具,单元测试和静态分析将有所帮助。
答案 6 :(得分:7)
我的感觉几乎一样。很多时候,我担心技术变化的速度比我掌握当前工具集的速度要快。我总是尝试提出一些我可以应用该技术的项目。例如,我真的想在MVC上达到最快速度,所以我决定使用新框架编写一个应用程序,即digg,stackoverflow和dotnetkicks之间的交叉。我已经进入了3天,我已经学会了TON。
我们工作的难点在于保持相关性很难。然而正是这种挑战使它如此令人兴奋。
答案 7 :(得分:4)
个人方面。
通过学习适用于所有编程语言的良好实践,设计模式和原则。它有助于深入理解算法和数学的各个方面
在您的平台的编程社区中保持活跃,以便在他们做出无偿和重大更改时让他们拥有它(希望在实际实现之前)
在软件方面。
为您的软件设计一个好的设计,以便最大限度地减少交换平台带来的问题。
通过在平台和语言之间进行良好的测试,以便在移植时检测行为的变化。
如果您的应用程序需要数十年的支持,如果您没有源代码,请尽量减少使用第三方软件。
答案 8 :(得分:3)
技术只是工具,有助于解决问题。
软件开发是使用手头工具解决业务问题的专业。
因此,我只是专注于解决业务问题,而不必过多担心这些工具。然而,在大多数情况下,最终证明最有效的工具是最新的工具。因此,尽管所有主要原则仍然相同,但切换到比之前稍微好一点的新手感觉很自然。
答案 9 :(得分:3)
我分享你对微软输出的看法。它的好处是真实的,但它们不断发布的版本很难跟踪并经常导致混乱(有时是无功能)的计算环境。而且他们的产品在功能上经常重叠,好像不同的团队从不同的角度攻击同一个问题而不互相交谈。如果产品变成了哑弹,花在早期学习他们的东西的时间就会浪费掉。
无论如何,我通常会说,了解您感兴趣的内容,而忽略其余内容。这是保持积极性和不断学习的最佳(唯一?)方式。这项工作应该是关于你的,而不是微软。
如果你像我一样,有更多的兴趣而不是时间来追求它们,那么你需要找到提高效率的方法:减少你的“时间开销”(花在无趣的事情上的时间),用你不是时间现在使用,学得更快。
我发现现实世界中的效率技术通常与编写软件时的效率相似。把你的“生活表现”看作是一个程序,并找到优化它的方法 - 可能是通过将一种资源换成另一种资源,缓存等等。
更具体地说,这就是我喜欢做的事情:
1)不要觉得您需要了解您感兴趣的主题的所有内容。请根据您感兴趣的级别详细了解它。
2)在编程中,寻找一个有趣的问题并为它创建一个尖峰解决方案。如果尖峰实际上可用,那就更好了。对我来说,学习一门新语言或技术的最好方法就是把我的肮脏的手放在上面并制作一些东西。
3)尽量减少多任务处理。我所做的就是尝试总是要完成两件事 - 当一个人被举起来时,我会在另一个人身上工作。这两种情况都很少见,并且试图将我的注意力集中在两件以上的事情上都会导致我的注意力受到影响,并且还会引入太多的上下文切换成本。
4)最大化花在有趣,有建设性的事情上的时间;即,收听播客,以利用时间,否则不花时间学习。不要在电视和游戏等非建设性的东西上浪费时间。体育锻炼是必须的 - 用一些老武术老师来解释,“通过控制你的身体来学会控制你的思想。”
5)通过与对您相同的事物感兴趣的其他人联系,保持您的动机水平。一种方法是让您在尖峰解决方案上完成的工作向公众开放。
6)在任何特定的时间,你都会学到一些不同的东西,并在你开始厌倦了你正在学习的东西时立即切换它们。但是一旦你的兴趣重新建立起来,请稍后再回过头来。我发现这有助于增加我花在学习上的总时间,也避免了我对其中任何一个的焚烧。
答案 10 :(得分:2)
我只是阅读并了解Microsoft技术,但我不急于使用它们或仅仅因为它们已经出来而实施它们。微软有很多新技术一直在推出,有些甚至与他们自己的技术冲突相冲突。就像Linq to Sql和Entity Framework是同一领域的两项新技术一样,微软试图在那里做的事情令人困惑。
你应该使用对你有用的东西并坚持下去,直到新的东西真正提供你不能再没有的好处。否则,可以享受过多的新微软技术,并尝试摆脱他们在大部分时间创造的混乱和混乱,直到他们一起行动并发布值得花时间的东西。
答案 11 :(得分:2)
我在公司方面为大型公用事业工作,所以我不是一个需要熟悉所有技术的供应商 - 我可以专注于我们手头的问题。
我发现现在我们已经让我们的店铺流畅并与MS的发布保持同步,因此保持最新状态并不困难。获得最新版本只是压倒性的。进入3.0很困难:我在2.0发布后立即进入公司,这是该公司用来编写一个非平凡的.NET应用程序的第一个.NET版本......然后3.0很快就出现了。尝试让现有的开发人员理解2.0而3.0则处于混合状态时感到势不可挡。但是我们真的想要WCF(我们有一个使用WSE的项目很痛苦:WCF看起来并且证明是使用WS- *的一个很好的解决方案)。因此,当3.0出现时,我们很快采用它并开始沿着WCF路线行驶。 WCF是一个非常好的堆栈恕我直言,但是(并且仍然)难以克服。在3.0版本发布时,我们并没有真正需要在表示层上做任何花哨的事情。工作流程对我来说没什么意义,所以我们避开了3.0框架的那些部分。
这使得3.0发布版本是半可管理的,因为我们只关注业务需求的WCF方面(即我们感觉没有WCF的痛苦)。
3.5我们也很容易理解 - 我们使用LINQ是有意义的。采用WCF并不困难,因为您可以根据需要使用尽可能少的内容。我个人开始只是删除了一些foreach语句来找到一个集合成员,并从那里开始了解LINQ。我们目前不使用数据直接(即Linq to Sql),因为我们是Oracle商店。 C#的Lambda方式正在慢慢渗透我们的代码库 - 它是一个非常开关,但我喜欢它。同样,由于它完全是可选的,因此很容易根据需要采用。由于我们对3.0和3.5所需的内容感到满意,因此我们有时间开始查看这些版本的其他部分,以了解它们如何提高我们的工作效率。我最近花了一些时间与Workflow,我真的开始看到它的力量。看到4.0中的Workflow的PDC演示让我真的想要发布......而不是被新技术所震撼,我实际上非常期待它的发布......同样适用于任务并行库中的烘焙。
所以我想我会说,在这一点上我不会被新的洪水所淹没。我认为专注于新版本的修复,直到我为他们做好准备而忽略其余的帮助。它还有助于快速采用新框架。 3.0和3.5很容易采用,因为它们位于2.0之上,不需要进行核心代码升级。 4.0是最好的一年...我们有足够的时间开始研究WPF / Silverlight,因为有时钟周期。通常情况下,我们只是给那些最感兴趣的家伙,我们可以腾出一点空闲时间,成为领先的侦察兵并开辟道路......这也有帮助。我们并不都需要成为整个筹码的专家。
它还帮助我们尽快采用新框架(即大约一个月)。 4.0版本可能更难以实现...通过版本控制分支将我们的核心代码与单个项目分开,这有助于将这些共享核心代码与“真正的”开发工作隔离开来,从而使我们能够在不破坏个人的情况下推进核心项目。单个项目只有在有时间吸收变化时才会合并。
答案 12 :(得分:2)
最近的读数:
http://www.pseale.com/blog/LearningLahar.aspx
http://www.secretgeek.net/3way.asp
执行摘要是:除非你需要,否则不要学习它!
答案 13 :(得分:2)
跨越一些版本是有意义的,也许采用其他每个版本。如果您觉得需要跟上每项技术的每一个版本,那么您不会花费太多时间来完成实际工作或使用您已经使用的工具提高您的流利程度。
我们已经深入到这种心态,新的总是更好。即使较新的 更好,但它并不总是那么好,值得麻烦。
答案 14 :(得分:2)
我认为没有理由不使用最新最好的技术。学习一门新语言或技术类似于重组工厂:如果你把所有时间花在改装上,你就不会花任何时间实际生产任何东西。
注意:这不应被视为继续使用Visual Basic 6的原因。
答案 15 :(得分:1)
我认为诀窍是学习永恒和便携技能。了解如何使用多种语言和框架进行编程比了解如何使用最新语言或框架编程要重要得多。同样,了解安全原则比了解某些Web服务器中的最新缓冲区溢出更重要。
不幸的是,如果你正在换工作,你可能会遇到那些不知道这一点的招聘人员,而且他们的工作职能基本上是 grep buzzword cv 。但是,如果你能够通过这个并接受了解这项工作的人的采访,那应该不重要。如果它确实重要,你可能会讨厌在那个地方工作。
此外,大多数“变化”只是毫无意义的流失,许多新的“技术”只是一个程序或某个人写的图书馆......它不再是“新技术”而不是最后一个程序或库你写道是新技术。你不需要知道其中的大部分内容,而不是世界其他地方必须研究你生产的一切。
您当然不需要了解所有内容,只需要安装和学习所有编写过的电子邮件程序,以便能够发送电子邮件。
这有点像试图跟踪RSS源中的所有内容或者绝对阅读邮件列表中的所有内容。放手吧。将其全部标记为已读。如果它很重要,你会再次听到它。
答案 16 :(得分:1)
我不认为你是唯一感觉C#真的很快成长的人。幸运的是,宣布C#4.0和.NET 4.0的变化绝不像C#3的新功能那样令人难以接受。它们是非常好的功能,我特别期待IronPython和IronRuby以及VS2010的新TDD功能。
答案 17 :(得分:1)
是的,技术发展迅速,实际上每个行业都在快速发展。它的移动速度与人们愿意创造的东西一样快。我认为想到的评论是专门的。找到你喜欢和专注的东西。你永远不会把自己与变化联系在一起,关键是让自己有市场并选择你想要学习的东西,而不是别人告诉你的东西。正如我们所见,有许多公司甚至没有在他们的机器上部署.NET Framework,因为使用他们目前使用的应用程序,他们没有必要。这些公司将开始升级,但其中许多升级都是长达数十年的迁移。
答案 18 :(得分:1)
来自我们的一位共同主持人(来自article的Joel)的JoelOnSoftware在某种程度上处理了这种快速变化的技术,Joel比较了这些技术。很久以前我读到它时发现它非常有趣。在一名年轻的伞兵的照片之后,相关部分位于下方某处。
答案 19 :(得分:0)
对我来说(在我早期的40年代),需要,甚至是想要,保持现状。拥有真正持久效益的真正工作是您正在处理一些旧技术的工作。在我看来,旧技术将是.NET 2.0。
恕我直言,真正的趋势制定者的标志是能够充分了解新技术,以实现它们是否适合您对旧技术的支持并且具有商业意义吗?例如,Linq to Sql在您的旧环境中是否有意义?研究一件事,决定是否有意义,并继续推进这一新技术。
为了实现新的东西,不要实现新的东西。只有时间才能证明新技术是否为任何企业带来了可观的投资回报率。
答案 20 :(得分:0)
在你需要之前,你会忽略它吗?
这是一种让新技术不堪重负的可靠方法。
只要稳定,学习速度就会很慢。
答案 21 :(得分:0)
了解其他所有版本。这就是我如何跟上。大多数书籍通常会让您了解以前的框架并告诉您添加的内容。
只需2美分。
答案 22 :(得分:0)
通常通过与当地用户群保持联系,尝试一些我工作的事情,看看哪些实验产生了什么结果,并意识到我的雇主可以在我正在使用的东西中发挥作用继续使用。因此,我进入了.Net 3.5框架,因为其他人需要在项目中使用Linq以及使用它的新CMS系统,所以现在我可以稍微探索一下。
做一些实验并不是要么保持领先,要么在我需要它之前忽略它,而是定期保持babysteps。例如,在过去十年中,我已经从ISAPI扩展到ASP到ASP.Net及其各种版本从1.0到3.5,包括3.0的精彩想法,包括2.0并添加一些东西,而不是称之为WinFx,这是一个一次命名。
如果一个人的工具来自雇主,则问题在于他们如何看待新技术并随时处理开发人员与新硬件或软件的转移,例如:从P4机器到Core 2 Duo机器很不错,并且增加了RAM的数量,但我确实丢失了一些我在旧盒子上使用的软件,就像之前版本的Visual Studio一样。
答案 23 :(得分:0)
我努力跟上技术的目标:
我听说有人说你应该每两年学一门新的编程语言。就个人而言,我发现在工作之外有那么多时间是非常困难的。如果我想要结婚,至少不会! :)
答案 24 :(得分:0)
我经常发现自己陷入同样的困境,并试图让自己学习新技术或新语言。但大多数时候,除非你的雇主要求,否则你不会对那种技术或那种对该语言有用的东西做太多。您最终会编写一些有用的小程序来学习该语言的功能,并尝试一些很酷的广告位。通常情况下,你试图让自己相信新语言试图以更好的方式完成你用旧语言所做的事情。在尝试采用这种功能时,我忘记使用该语言来获得它的好处。
最终,发生了两件事 - 新方法比旧方法更好,因为它节省了几行代码。但是我仍在使用新包装做旧事。或者新功能很糟糕,我会坚持旧的方式,并煽动所有宣传创作者。 :)
但在某些情况下,学习是必不可少的。迟早你会开始直觉地知道什么可能会起飞,而且一旦你完成这次演习,你会发生什么事情。所以它确实有助于保持更新,至少在互联网上会有很多评论来帮助你解决这个问题。
但请记住,学习技术比学习编程更容易。
答案 25 :(得分:0)
研究性学习。阅读阅读。参加参加。代码代码。
一天24小时。保持目前是保持我们相关性和需要的东西。