你是一名骇客还是工程师?

本文出处:http://www.yegor256.com/2014/10/26/hacker-vs-programmer-mentality.html


二十年之前,最优秀的程序员指的是有能力将整个应用放入64Kb的.COM文件中的人。那些将老旧的Inter 80386运用到极致的人才是是程序员中的精英。


这是因为二十年前,计算机是昂贵的,而程序员的成本相对便宜。这是”骇客思维“(hacker mentality)的时代。这个时代已经过去了。现在这种心态不会被人们所欣赏,因为市场行情已经完全相反了。


现今,计算机相当便宜而程序员成本变得昂贵。这是”工程师思维“(designer mentality)的时代,在这个时代中我们代码的可读性远比性能要重要。


价格VS工资

请看上面这幅图,这是在过去二十年(1994-2014)两个趋势的比较。下降的两条趋势表明计算机内存和外存的价格在二十年的时间里变得十分便宜。


第二个趋势证明软件开发者的薪水在这段时间内逐步增长。更准确的说,增长了三倍。我没有找到关于这个的官方报告,但是我保证,程序员的工资保持增长,这对所有人都不是个秘密——每年200000美元对于一个高级开发者来说将不是梦想……但是在二十年前,60K美元已经是可以给到的最好的了。我找到了一篇关于这个主题的非常有意思的文章


这基本上意味着,在1994年我们为了创建一个PHP网站,我们需要比现在多花费1000倍的资金在硬件上,少花费3倍资金在程序员薪水上。这里我们讨论的是用同样的技术。同样的Linux机器和Apache HTTP服务器。


不同之处在于,在1994年,如果我们的机器由于硬件限制而出现性能问题时,增加每一GB的RAM我们需要支付35000美元,而现在我们只需要10美元。


在1994年,招募更多的程序员让他们来优化代码甚至重写代码要比买新的硬件更有效。在2014年,情况正好相反。将服务器的规模翻倍要比支付更多薪水优化软件更加便宜(尤其是当服务器在虚拟云上)。


在1994年,最好的程序员拥有“骇客思维”,但是在2014年“工程师思维”更受青睐。


骇客思维(Hacker Mentality)


某些具有骇客思维的人会称这个Fibonacci java方法为“优雅的代码”(你会这样称呼么?)

public int f(int n) { return n>2?f(n-1)+f(n-2):1; }

我会看重以下这些为一个优秀骇客的品质:

  • 会运用一门编程语言所有已知的(和未知的)特性。
  • 按照骇客和初学者来区分他人。
  • 对规则和标准感到厌烦
  • 不写单元测试——初级程序员随后会写的。
  • 享受处理紧急事件——这体现出他的才能。
  • 喜欢用言语而非文档,因为这样更加有趣。
  • 讨厌自己的代码被别人修改。
  • 喜欢一段时间钻研一个项目。

一个骇客是一个有才能的个体。他希望通过他写的软件展示他的才华。他热爱编程并以此为乐。我会说,他和他的代码结了婚而且不能想象最终离婚后代码的幸福生活。代码的所有权是一个骇客完全占有的——他将自己理解为代码的“主人"。


当我问一个我的骇客朋友——“别人会怎样才能理解这段代码的功能?”我总是会听到这样的回答——“他们会问我!”(通常会以骄傲的语气笑着说)。



工程师思维(Designer Mentality)


具有工程师思维的人会将上述代码重构,使它更容易阅读。他会将这段Java 方法称为“优雅的代码”(你会怎么认为?)。


public int fibo(final int pos) {
  final int num;
  if (pos > 2) {
    num = fibo(pos - 1) + fibo(pos - 2);
  } else {
    num = 1;
  }
  return num;
}

我认为以下是优秀的工程师所具备的特点:

  • 偏向使用传统的编程技术。
  • 假设每个人都是初学者,并依此编写程序。
  • 享受现有的规则并遵守它们。
  • 偏爱文档而非言语,能够自动化最佳。
  • 花很多时间编写单元测试。
  • 讨厌紧急事件和加班。
  • 乐于看到他的代码被修改和重构。
  • 同时跟进多个项目。

一个工程师是一个优秀的团队工作者。他对团队进程、标准、培训和原则的贡献和他对源代码的贡献一样多。他可以确保当他离开团队时他的代码和他的想法会继续保留并产生作用。


令一个优秀的工程师感到满意的是看到他的代码过着“自己的生活”——被改写,改进,重构知道最后退休。工程师把他自己当做代码的父母——当代码到了自立的时候,它需要去过自己的生活。


未来


如果你认为你是一个骇客的话,我相信是时候做改变了。骇客的时代正在远去。


在不久的将来,我们将可能停止从硬件的角度思考问题,并将使我们的应用运行在没有存储性能限制和CPU性能限制的弹性计算平台上。我们将会通过简单地增加月账单的开支来解决资源使用和大多数性能问题。程序优化问题将不是我们所担心的。


同时,优秀的软件工程师的待遇将会越来越高,比如花500+美元每小时仅仅是去检查软件并给出一个诊断。


这就是为什么当开发一个新的软件产品时,付费的人考虑最多的就是它的稳定性。项目赞助者会懂得,最好的解决方案就是最易读,最稳定,自动化程度最高的那个。


而不是最快的。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章