乐者为王

Do one thing, and do it well.

你能真正地掌握多少编程技术?

英文原文:http://thecodist.com/article/how-many-programming-technologies-can-you-really-master

我总是看见公司或者他们的招聘人员广告他们正在寻找的人:“有从零开始开发iOS和Android应用的丰富经验,必须掌握现代移动和Web技术,包括Java、HTML5、CSS3、JavaScript、JSON和AJAX”。

没有这样的人。你可以掌握一门技术但在其它方面平平;你可以掌握一门技术然后转向另一门技术但是会忘记很多先前的技术;你可以简单地欺骗足够多的人让他们认为你能做到,然后期望你恰巧能够搞定它。

在今天,任何主要领域的编程都是高度复杂的,不断变化的,并且通常是带着很大时间压力完成的。所有这些都不允许你投入大量非编程时间去学习即使是最新的变化,更不用说从零开始掌握一切。你只能通过做真实的项目了解新环境,有多少人能够在同一时间同时编写所有大型的本地Android、本地iOS和响应式Web客户端呢?

在我作为程序员的34年里,我很少工作在超过一个主要领域。我的第一份工作是在一台supermini上,然后Apple上的6502汇编和在一台PC上的Pascal,我的两个创业公司都是用C为Mac开发,我更多地为其他人(包括Apple)工作,用C为Mac开发,一点点C++,接着从Objective-C/WebObjects转换到用Java开发Web客户端和服务端(尽管两者都很少),一些JavaScript,然后在Mac和Windows上进行C++游戏编程,最后是Objective-C和iOS。每次转换都是匆匆忙忙地大量学习,接着是年复一年的掌握所有新的东西。

如果由于某种原因,有人确实能做Android和iOS两者——更不用说Web——以一个真正的大师水平,他们应该能赚比大多数公司愿意支付的更多的钱。公司想要的是雇几个能做所有事情的人,并且以他们能够得到的最低的工资水平。然而我无法理解有人能够同时在这么多事情上成为一个专家,以及他们如何能够用多种技术编写多个应用并且坚持下去。我认识一些极其聪明的人,但我不记得有人棒到确实能在同一时间兼顾不相关的技术并且产出技艺精湛的应用。

也许会有例外。但我仍然认为大多数人做不到。人们当然可以掌握一件事情然后转向掌握另一件事情,但在这个过程中你不可避免地会忘记前者的细节。去年,我在等待裁员且没有什么事情要做的几个月里(我是最后无缘无故裁员中的一个,因为在品牌的最终出售之前我们所有的技术已经被换掉了),我花了一个月的时间在C++上,然后Node.js,最后Swift。今年继续这些语言(因为我的新工作做的是Objective-C)我发现我已经忘了大部分我所学过的。如果你不经常使用某样东西,记忆似乎丢到了脑后。在用PHP重写这个博客引擎的过程中我在我脑中把所有这些语言都搞混了。

如果你是在iOS上从Objective-C转到Swift,那至少还有些重叠。但Android和iOS不仅是不同的语言,一切都不同,从工具到如何布局去支持多个主要的OS发行和24,000多种不同的设备。仅仅是跟上所有这些年在六月WWDC的新变化就要花费大量的精力;雪上加霜的是Apple释放的示例代码在最新beta版的XCode里已经不能编译。就算你不写代码整天只是观看视频和阅读文档与示例代码,你怎么能一本正经的说你是一个专家呢?

给两个不同的移动OS环境添加复杂混乱的是现代Web开发,特别是那些某一天出现然后第二天消失的JavaScript框架。你需要三个脑袋才能跟上它。和我一起工作的JavaScript程序员也就够跟上一个(在这里是AngularJS)。

因此找一个能用JavaScript写iOS、Android和移动/桌面Web的人,使用现代的API并且仍然可以支持旧的OS版本,明白不同设计和UI方法的优缺点,特别是所有不同浏览器和Android设备中的微妙之处,并且在创纪录的时间内交付无bug的结果,是幻想。哦对,还要以低于市场的价格为你工作。

当我开始编程时,一切都极其原始,我只需要知道一门语言和一种OS,根本没有框架。甚至在我的两个创业公司里我只需要掌握C,通晓Macintosh和一些偶尔的68K汇编。今时不同以往。然而我们仍然只有一个大脑,并且大脑不服从摩尔定律,它们不能升级。

因此,如果你能(诚实地)同时做Android、iOS和移动Web,并且交付技艺精湛的结果,我向您致敬!但我真的希望你也能赚3倍的钱。

Comments