背景:

一个平庸程序员的自白。近期看到的少有的好文,细细品味,感触良多,思来想去不知如何与作者交流。无论从工作经验,还是从境界,都与原作与译作有一段差距。但很多人都会有相似的经历,说出自己的故事,彼此交流或许是最好的途径。

题记:

编程在外人看来绝对属于脑力劳动,至少从大学教育来看软件工程、计算机专业都是需要很强的理科功底的。然而看看帝都上地、中关村深夜的壮观景象,你又会觉得编程是体力活,要不怎么会被戏称为“码农”呢(当然我觉得“农”这个字用的有点歧视,诸如农民工,农民,他们都是靠自己双手和劳动生活的、最淳朴的人,比所谓的商人高尚n个数量级。怎奈现实“拜金主义”大肆其道,崇尚金钱至上,我等又能奈何呢)。即使程序员自己,想必都时常迷茫犹豫。下面从一个程序员的角度,谈谈自己的感受,欢迎拍砖!

编程与能力:

从小就对数学情有独钟,参加过大大小小无数的竞赛,成绩也都很满意,自然而然也就建立了那份自信。还记得当时初中老师的一句话“学好数理化,走遍天下都不怕”。于是就从数学开始一步一步从容的攻克了物理,化学,还有今天要说的编程(计算机)。
最开始接触计算机(那时还没有编程,或者说自己还没有形成编程的观念)是从背ENIAC开始的,再到指法练习,最后才是“波,啊,丝,一,词”BASIC。还记得当时为了一个“汉诺塔”,整整头痛了一个周,最后磕磕绊绊的写完了。
从起初自己一个人的痛苦训练,到在大家面前的优越感,渐渐的觉得自己就是那电影里的黑客,无所不能。别人在玩windows时,总喜欢dos那黑黑的背景;别人在用IDE时,总特立独行的使用文本编辑。说实话其中大多是装逼的成份(现在来看,无论IDE还是文本编辑,能提高编程效率的就是最好的),总以为要别人玩不了的就是能力。渐渐的接触的越来越多,代码写的越来越长,发现这其中大多是组合拼接别人的代码解决自己的问题,真正掌握的能力是如何快速利用搜索引擎寻找问题的解决方案,与编程自身相关的能力并不多。
所以无论是作为面试者,还是作为面试官,总会有那种疑问“这么多年的工作经验,怎么感觉实力一般呢”,其实道理很简单,你想要的实力在你漫长的工作经验中并未得到多大的提升,自诩为程序员的你并非如你想象中的那样高能,现实的你也并不能像电影中的黑客那样所向披靡。你唯一的能力或许就是比别人多摸了几年电脑,多动了动手指。
【能力】到底为何物?或许你我都迷茫着……

编程与算法:

记得第一次深深思考这个问题是在研究生入学面试后,当时有一位老师看了简历后反问我你学了这么多语言(汇编,C,C++)有用么?我做研究,到需要的时候看几本书就好了。第一次被自己曾经向往的最高学府的老师这样打击,还是难过了好一些时间,难过的不是因为打击到了自己,而是自己的确一直对这个问题充满着迷茫。
再后来就是工程与工学的选择,这个在外面来看可能没有区别,但是在学校里还是有分别的,导师的要求就不同,工程往往做的是编程类的工作,工学做的是算法类工作。(注意我这里说的编程类的工作和算法类的工作是不是也让你很迷惑,的确从这里来看编程就是体力活、耗工作量,算法才是脑力活,需要钻研研究)。这里就不在纠结这个字面的问题了,否则我们就绕到了上面“编程与能力”的点上去了,容易鬼打墙。
这个问题想必困扰过好多人,记得在毕业之际导师还专门让我给师弟师妹做了一次报告,讨论的就是“编程与算法”。之所以选我是因为在学校期间我既搞了一些算法,又安心的为项目组做了很多编码类的工作。从我自己的角度看,我是这样理解我的工作的,


编程是基础,算法是补充,两者缺一不可,正所谓“无它,但手熟尔”。熟练是一种经验的积累,是智慧的沉淀与结晶。从短期局部来看,编码工作尝尝是组合拼接,从长远整体来看,是对整个业务需求的把握和掌控。


之所以对当时老师的话失望,是因为他过度的贬低了熟练化工作的重要性,没有量变又怎来的质变,想必等你需要使用的时候光看几本书是肯定没用的,到那时候您的方式估计就是外包,或许还是略带鄙夷的态度看待这份工作(你应该会跟学生说,把算法搞完,其他的没有技术含量的工作外包就可以了)——发几句牢骚而已^_^。
为什么自己一直同时看中并深深纠结于编程和算法之间,可能是自己先对数学有了浓郁的兴趣,而后才接触的计算机。至今自己也希望在工作之余静下心来写写博客,希望能够将看似毫无技术含量的经验也记录下来,以备他用,也为结交同好。重复劳动的经验积累,必然会引发最后理论层级的升华,这就是一个量变到质变的过程。
恰巧近期CSDN也搞了个活动程序员必须要会算法吗?(链接),我觉得这个问题大家可以自述己见,开怀讨论一下,正所谓仁者见仁智者见智,上述也仅是我一家之言而已。

学习与放松:

最后说点与博文最相关的,当初之所以选择做技术,而且偏向于互联网,是因为在这样的环境下才能让我永远感到危机感,永远激励自己不断进步,这也就是博文中提到的:

那就是时时刻刻焦虑,害怕掉队。Jacob 在演讲中也说到:

If the only options are to be amazing or terrible, it leads people to believe they must be passionate about their career, that they must think about programming every waking moment of their life. If they take their eye off the ball even for a minute, they will slide right from amazing to terrible again. That leads people to be working crazy hours at work, to be constantly studying programming topics on their own time, and so on.

长此以往,一直担心被落下,而无暇顾及被超越,因为总处在一种负压的状态,从不敢停歇,也就无暇顾及后来者。

● 别人毕业要去旅行,我却选择响应导师的无理要求,整理之前手中项目,与师弟交接工作。
● 别人节假日出去玩,我却每次都选择回家,因为心中总感觉时间不够用。如果自己出去玩了,以后就没有时间回家陪父母了。
● 在家的时刻,你也自然会想到我肯定也会写博文、看技术博客,因为从不敢停歇。

PS:也有着另外一种说法那就是时间观念不同。根据时间观念可以简单的将人群分为“时间超前者VS时间滞后者”两类,长期处于紧张、焦虑或者说饥饿状态的程序员们往往都是前者。所以说不仅仅是在编程的工作中你会如此,你的人生事事都会如此。
Are you scared?

作者:zssure@163.com
时间:2015-07-01

随笔:做一个平庸程序员,are you scared?相关推荐

  1. 转载:一个平庸程序员的自白(豆瓣深度好文)

    题记: 前一篇随笔:做一个平庸程序员,are you scared?博文中提到的豆瓣深度好文原文,想想还是转载过来吧,以免作者将原文给删掉.怎奈CSDN转载不是很方便,这里就直接截屏了,有兴趣的大家可 ...

  2. 一个平庸程序员的自白

    文 / zhuoqun Jacob Kaplan-Moss是著名 Python 框架 Django 的 Co-Creater 和核心开发者,在 Heroku 担任安全部门的 Director, 他常年 ...

  3. 一个平庸程序员自白:我不牛逼但那又怎样?

    转自:http://www.managershare.com/post/189966 不是谁都能飚高音,但他们也有自己的声音. Jacob Kaplan-Moss是著名 Python 框架 Djang ...

  4. 怎样做一个优秀程序员

    程序员是一种技术工作,在IT的发展中有相当重要的地位,从底层硬件通讯协议的建立, 到数据传输层的处理,到操作系统的建设,到数据库平台的建设,一直到应用层上各种数 据营销平台的搭建,程序员在里面都扮演着 ...

  5. 做一个.net 程序员要掌握的知识提纲

    目录:.NET编程技术学习资料 第一章:ATM存取款项目见习 1-0:序讲和浅谈对程序开发的理解 1-1:业务需求说明以及建立相应表数据库 1-2:SQL存储过程创建 1-3:了解ADO.NET连接数 ...

  6. 做一个Java程序员,数学一定要好吗?

    学Java编程数学一定要很好吗?很多想学Java编程的人都会有这个疑问.我想告诉大家,数学好不好对于学Java编程没有特别的限制!编程要一定的逻辑思维能力,数学好说明逻辑思维能力强,对学好编程很有帮助 ...

  7. 一名平庸程序员的自白

    一名平庸程序员的自白 作者:阿兰·诺顿(Alan Norton) 翻译:Purple Endurer 分类:开发者,编程 标签:程序员,编程,开发工具,软件开发,软件/网站开发,阿兰·诺顿 导读:阿兰 ...

  8. 做女人,真好!一个男程序员的妇女节真实感悟

    做女人,真好!一个男程序员的妇女节真实感悟! 对于广大女性同志来说,今天是一个特别的日子,因为我深有感触,出于对女性的关照,公司今天特意放假一下午,看到旁边的同事兴高采烈的离去,我的眼神从屋内送到窗外 ...

  9. java配合什么做前端_作为一个java程序员 ,前端的技术需要达到什么水平?

    一个后端程序员,需要掌握前端技术吗? JSP时代 8年前,刚刚进入编程这个行业,当时的Web开发使用古老的SSH框架+JSP.那个时候,几乎所有的Java程序员都要懂得如何写JavaScript.如何 ...

最新文章

  1. java里面怎么添加表约束_mysql给表增加约束条件
  2. 2019年上半年收集到的人工智能自动驾驶方向干货文章
  3. man命令手册打开以后的使用方法
  4. java socket 判断是否断开_Linux Socket:如何在客户端程序中检测断开的网络?
  5. 大数据学习(2-1)-Hadoop安装教程-单机模式和伪分布模式(Ubuntu14.04LTS)
  6. 03-neo4j的命令
  7. 黑马博客——详细步骤(十)项目功能的实现之开发环境与生产环境
  8. [转载] 【Python】Python3 字典 fromkeys()方法
  9. 异常值检测算法 IsolationForest、EllipticEnvelope、OneClassSVM实践
  10. 小程序菜鸟的父子组件传值、父子组件方法调用的学习
  11. 双闭环调速 matlab,双闭环直流调速系统仿真(Matlab).ppt
  12. 基于Tensorflow实现声音分类
  13. JavaScript如何实现汉字按拼音首字母分组拼序
  14. hdu 5336 XYZ and Drops
  15. Linux一键安装部署环境
  16. 【嵌入式系统开发12】在stm32F103C8T6环境下,用HAL库,采用中断模式编程,控制LED的高亮与熄灭
  17. 服务器FPM日志出现seems busy (you may need to increase pm.start_servers解决办法
  18. mysql populate_BeanUtils.populate 的作用
  19. 小饶学编程之JAVA SE第二部分——Web 前端基础:09CSS3
  20. SQL之cast()函数用法

热门文章

  1. mql4 mysql_MQL4的几个常用函数
  2. 【教你区分】TVS二极管和稳压二极管的不同
  3. 密室逃脱之深红色房间--看看你的智商 (推荐★★★★★)
  4. 【MySQL】数据库机房架构与跨城容灾详解(实战篇)(MySQL专栏启动)
  5. Vue指定日期选择框的值--自动计算过期时间
  6. 融云猿桌派:听说女生不适合搞 IT,哈?
  7. jQuery仿QQ音乐播放器
  8. FutureNet NXR-G100路由器
  9. 走位神器大全排行榜,你们是什么级别的关羽哥?
  10. 竹林蹊径:深入浅出Windows驱动开发(china-pub预订中)