每个程序员必知之:程序员差别的本质_最新动态_新闻资讯_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 新闻资讯 > 最新动态 > 每个程序员必知之:程序员差别的本质

每个程序员必知之:程序员差别的本质

 2014/5/22 12:57:49    程序员俱乐部  我要评论(0)
  • 摘要:当我开始在阅读《技术的本质》的时候,我就开始在思考这样一个问题,我们在使用技术还是工具。技术与工具在某百科上说一项技术是关于某一领域有效的科学(理论和研究方法)的全部,以及在该领域为实现公共或个体目标而解决设计问题的规则的全部。对于技术不同的人的理解可能是不同的,和上图中的使用工具类似的是,和工具一样,技术也在不断地成长和进行。网站的成长史似乎可以简化为下面的过程,可能还会有ASP.NE等等,只是因为我接触得比较少
  • 标签:程序 程序员

技术的本质

  当我开始在阅读《技术的本质》的时候,我就开始在思考这样一个问题,我们在使用技术还是工具。

  技术与工具

  在某百科上说

一项技术是关于某一领域有效的科学(理论和研究方法)的全部,以及在该领域为实现公共或个体目标而解决设计问题的规则的全部。

  对于技术不同的人的理解可能是不同的,和上图中的使用工具类似的是,和工具一样,技术也在不断地成长和进行。网站的成长史似乎可以简化为下面的过程,可能还会有 ASP.NE 等等,只是因为我接触得比较少。

  • 静态的 HTML
  • CGI 和 Perl 脚本
  • PHP
  • J2EE
  • Django
  • Ruby on Rails
  • Nodejs

  实际上这是技术的一种演变,然而做为最核心的东西 HTML 似乎还是那样的。作为新技术产生的核心——HTML 也在不断也进化中。然而,没有想象中的那么明显,看上去像是不变的,只是技术在不断地向前前进。对于我们来说这些都是工具,有时我们在用工具创造中新的工具,好比是技术本身,通过结合一些技术创建出新的技术。同进化史一般,我们没有办法从无到有创造出一个新的东西,没有上帝。

  而作为一个普通的程序员,我们所做的只是在使用工具,从芯片到语言,从语言到框架,从框架到实现。

  编程的秘密

  每个人在技术的成长过程中都有不同的经历,对于我来说现在的总结大概是如此(ps:有兴趣可以参考过去的那些语言)。

  • 当我开始学习第一种语言LOGO时,我还小觉得很神奇,至少对于计算机还是保持神秘的。
  • 当我开始学习C++时,由于作者对于其优雅的宣称,我觉得C++确实很优雅、
  • 当我开始学习Python的时候,我发现简单才是我所要追求的。
  • 当我开始学习Ruby On Rails的时候,我发现生成可以很强大,但是因为强大,所以没有意思。
  • 当我开始学习Django的时候,我发现这才是我想要的订制。
  • 当我开始写博客的时候,我觉得比于HTML来说,Markdown才是适合我的。
  • 当我开始写下此文时,我开始觉得我应该试着去做点什么

  于是我又回到了原点,开始迷茫我想要的是什么?当我实习半年以后,我学到了更多的东西(实习半年后:正在变得高效),而我开始的时候我才在偶然的一次机会中才了解到,我们用的都是工具。只是,我们可以用工具创造出工具。

  编程只是用来解决问题的工具,优美与否对于解决问题的帮助,取决于是一次性问题还是长期问题。编程的核心是解决问题,正如 SEO 的核心是内容(详情见:每个程序员必知之 SEO)。于是,

我们把一个又一个的迷团解开了,剩下百无聊赖。

  当我们在讨论生产率的时候,得知高级语言会比低级语言来得有生产率,但是效率可能会因人而异。高级语言来自于低级语言,这些似乎没有那么重要。人们熟悉了不同的 IDE、不同的语言,相比于那些入门者来说,谙熟语言的人只是更加熟练罢了。同《卖油翁》的我亦无他,唯手熟尔般,对于有些东西只是因为用多了,然后熟悉罢了。事实真的是这样么?如果我们每天写的是1+1=2,我们会知道1+2=3 么。

那么所谓的优秀的程序员和普通的程序员的差别在哪?

  技术的成长

  这里的技术指的不是个人在技术上的成长,而是技术自身的成长。

技术在某种程度上一定是来自此前已有技术的新的组合。

  一个优秀的框架、软件、系统的产生必然会基于其他的已有技术或者框架,如:

  Ubuntu GNU/Linux

  • 内核是 Linux
  • 编译器 GCC
  • 库 GLIBC 等等
  • 脚本语言 Python 等
  • Bash

  而这其中的一些小命令如 ls、cd、wget 也是这个系统的组成部分之一,我们无法找到一个不依赖于其他系统的软件。如果你自己动手编译过 Linux,或者你会更有体会一个 GNU/Linux 系统需要什么。从一个库来说它是基于其他的基本库,如C标准库,而从C标准库的编译又依赖于编译器,这些都循环中前进着。

gcc4.7 编译出了 gcc4.8

gcc4.6 编译出了 gcc4.7

gcc4.5 编译出了 gcc4.4

等等

  这是对一个可以自身编译自身的编译器而言,我们无法忽视的是技术背后有许多细节。巨人是站在巨人的肩膀上,过去我们可能一群工程师一个月开发出来的软件,在今天可能可以由一个工程师一天开发出来。因为我们可以基于前人的经验及教训,而这也是所谓的高生产率的程序员和一般的程序员间的区别。

  自然而然的优秀的程序员吸收了其他人的经验以及教训,换在今天来说,你今天所在的位置并不是因为你比别人聪明,或者是别人比你聪明,只是因为你吸收了更多的知识及经验。当然,教育不公平不应该这边的讨论范围。

  程序员的差别

  回到开始的话题,我们使用的如图所示的工具的话,你会选择

  • 石头
  • 电钻
  • 电脑

  中的哪一个,这是一个有趣的话题,正如。。

  • 汇编
  • C语言
  • Python
  • Django

  这个问题没有一个真正的答案取决于你所做的事,而问题的关键在于你知道的只是汇编,而不知道有其他东西的存在。这里的意思不是让你把上面的都学了,而是对于我们所处的领域我们应该有一个宽泛的了解。了解并不一定是亲身实践,如上一标题所说,我们只需要去吸收别人的知识及经验,一个有趣的答案便是从别人身上学习会更快。只是在那之前,我们需要去学会学习,因为你可能处在某个位置,没有其他人做过。

  而对于标题的答案来说应该是:

优秀的程序员不仅仅只是使用工具。

发表评论
用户名: 匿名