电视《雍正王朝》讲了这么一个故事:大将军年羹尧奉命到青海平叛,清军因路途遥远,军耗巨大,因此力求速战速决。但叛军避开锋芒,东躲西藏,年羹尧没有办法找到叛军决战。这时,朝廷内外压力越来越大,年羹尧陷入困境。这是一位谋士对年说:我知道叛军在那里。年大喜。这位谋士指出,敌人就在不远处的一座皇封寺庙里。年不信,谋士不慌不忙地说:这就是灯下黑,离自己越近就越不可能意识到,但却是最可能的地方。果然,大军一出,大获全胜。
我想讲一些关于程序员对自身认识的故事,这些故事都和灯下黑有关。只要正确认识自己,道理非常简单,但是,到处都可以看到灯下黑的故事。
某程序员,有一天接到一个任务:公司的有一个产品的文件太大了,要求采用压缩算法,减少尺寸,最好能压缩20%。
程序员兴高采烈地接受了任务:以前没玩过压缩算法,这下可以学习新东西了!研究了几个月后,他觉得差不多了,就交给了项目经理。项目经理正等着呢,高兴坏了,拿着演示文件就去找产品经理。产品经理开始挺高兴,看完脸就拉下来了。打开文件,把所有的文件尺寸一算,很淡淡的说:“才压缩了10%,有什么用啊!”
程序员愣住了,“不会吧!我看过的,压缩了 20%!”
产品经理指着文件列表说:“你看,某文件是压缩了20%,可你的压缩算法增加了一个动态库文件,尺寸还不小,总共加起来,不就只减少了10%吗?”
各位看官,这是不是软件公司里经常发生的情形?
这种失败的成因当然是复杂的,有沟通管理方面的问题,也有程序员能力的问题。我今天想要说的是程序员认识方面的问题。
继续故事:
项目经理很没面子,回去就和程序员找原因。项目经理是老程序员了,直话直说;终于弄清楚的事情的本质:
第一,这位程序员一个的时间读了很多关于压缩算法的书,会了不少算法。可是从来没比较过算法的优劣。这老兄觉得研究算法很有趣,乐此不彼,写了好几个实现。
第二,这位老兄在最后几天才想起来20%的目标,也没太放在心上,看看差不多就拿出来了。
这是典型的程序员的认识问题,重知识而轻技术。
先从是么是知识,什么是技术说起。
知识就是知道,你知道了某件事是怎么回事,就是有了知识。
技术就是你能做出来,做得好叫技术好,做的不好叫技术差。
怎么写操作系统?看完操作系统原理,再苦读完源代码,这叫有知识了。如果有本事把任务调度、内存管理、IO什么的都写出来,还能写得稳定,快速,可扩展,那是有技术。有知识和有技术可差远了。早年我在工厂实习,要挫一个圆孔,拿着内锉刀干了一天,只挫了一个椭圆;师父来了,三分钟,比冲床冲出来还圆!我是个好学徒,使用锉刀的知识全记住的,可以写一篇内圆挫使用大全。知识是有了,可没这个技术。
程序员也一样。什么C++,Java,.net,什么STL,Struts,Spring,就是门门都满分,这也就是有知识。算不算技术好呢?差远了。软件工程师界就专门出这种不会写程序的“高手”。我遇到一位老兄,精通Java知识,从虚拟机到各类框架,概念,无所不同,谈起Java来,没人说的过他。可是他的代码永远Bug最多,而且都是最简单的Bug,什么逻辑不对啊,功能没实现啊,UI不对啊。他的领导只有又好气又好笑。问下去,发现这老兄写了几个程序文件以后,就不感兴趣了,因为所用的技术没什么不知道的了。所以马马虎虎交差。
说到底,写程序是个手艺活,就和古代的匠人一样,是要讲工艺的。比如一个玉匠,能打造栩栩如生的玉孔雀,那得打的好!要是一个玉匠说,这些手艺我都知道了,重复做东西没劲,将就着给客人做出来吧!那他还不吃西北风!
可是,十几年来,程序员界有的是这样的人,还引发大规模争论。象什么C++和Java之争啦,J2EE和.Net之争啦。你看里边的帖子,不停有人赌这个阵营那个阵营,有发誓一辈子做C++的,有发誓打倒.Net。我还奇怪了,专门没人效忠机器码的,那不是最难最有“学问”吗?这都是在争论什么知识最重要。可是啊,很少有人谈谈怎么做好产品的。
现在程序员最大的问题就是太看重知识,拼命追逐新玩意,而忽略了身边的够得着东西。好,什么C++,Window API都知道了,东西也弄出来了,可是三天两头崩溃,还找不到原因?为什么?有没有看看代码,看看是不是某函数写了2000行,自己都看不懂?是不是全局变量乱用?是不是没考虑前后兼容性?没考虑冗余和故障恢复?
末了再回到开头的故事:
项目经理回去和程序员再重新设计,又多花了一个月,终于达到了目标。但因为这个部分是一个大项目的一部分,整个项目不得不延迟了一个月。
年底考评的时候,项目经理给程序员打了一个及格;程序员不服,告到总经理那里。总经理说:“你知足吧,给你打及格已经看在你干的很辛苦的份上了,因为你没有按时完成,整个项目延迟了一个月,这帐都没找你算呢。”程序员颓然。
分享到:
相关推荐
《程序员的灯下黑:重知识轻技术》 在当今的IT行业中,程序员扮演着至关重要的角色,他们构建了我们日常生活中所依赖的各种软件和应用。然而,正如标题所示,“程序员的灯下黑”揭示了一个普遍存在的问题:很多...
程序员成长路线图:从入门到优秀 程序员成长路线图是 IT 行业中一个非常重要的主题,作为一个 IT 行业职员,我经历过一个普通程序员成长的过程,同时也接触过许多不同层次的程序员。他们或在我身边匆匆而过,或与我...
针对文件信息,接下来的内容将基于“程序员到项目经理”的职业发展路径进行详细的知识点阐述。 首先,程序员与项目经理虽然都属于IT行业中的职位,但他们的工作职责、技能要求、以及日常活动有着根本的不同。程序员...
以下将根据给定的书籍标题和描述,详细介绍这三本书籍可能涵盖的知识点,以及它们对于C++程序员进阶的重要性。 1. **《优秀程序员的编程习惯》** 这本书可能着重讨论如何培养良好的编程习惯,这对于任何程序员的...
### 程序员成长路线图:从入门到优秀 #### 一、程序员的梦想与现实 ##### 1.1 程序员的梦想——中国的比尔·盖茨 在IT行业中,很多程序员都有着一个共同的梦想——成为中国版的比尔·盖茨。这种梦想不仅仅是对...
[程序员的思维修炼:开发认知潜能的九堂课(中文版)].(Andy.Hunt).崔康.扫描版
"程序员的自我修养—链接、装载与库" 在计算机科学中,链接、装载和库是三个紧密相连的概念,它们都是程序员需要掌握的重要知识点。下面,我们将详细解释这些知识点。 一、链接 链接(Linking)是指将多个目标...
《程序员数学3》是一本专为程序员设计的数学学习书籍,其主要目的是帮助读者理解并应用数学在实际编程中的重要性。这本书强调易懂性,通过简洁明了的讲解方式,使得复杂的数学概念变得平易近人。尤其适合那些希望...
程序员的 AI 启蒙课:ChatGPT 让你 1 人顶 3 人
**定义:**新手程序员已经具备了一定的基础知识,能够完成简单的任务,但在解决问题的能力上还有很大的提升空间。 - **特征:** - 能够独立完成小型项目。 - 对新技术充满好奇,愿意学习新知识。 - 缺乏足够的...
程序员最基本的知识体系是每个IT从业者必须掌握的基础,它涵盖了多个方面,包括研发管理技术、软件设计技术、开发语言以及特定的素质要求。首先,我们来看看这些核心组成部分。 **研发管理技术**: 这部分主要包括...
在IT行业中,程序员是软件开发的核心力量,他们需要掌握一系列基础知识来确保代码的质量、效率以及项目的成功。"程序员用到的一些基础知识"这个标题暗示了这是一个关于程序员通用技能和知识的集合,可能是为了帮助...
《程序员的思维修炼:开发认知潜能的九堂课》是一本专为IT从业者设计的书籍,旨在提升程序员的思维能力和开发潜力。这本书的核心是通过九个主题课程,帮助程序员解锁并提升自己的认知潜能,从而在编程和软件开发过程...
Java程序员职场全攻略:从小工到专家
【程序员重点知识点串讲】 在IT行业中,程序员是软件开发的核心角色,他们需要掌握一系列关键的知识点以确保高效、高质量的编程工作。本串讲将深入探讨这些重要知识点,涵盖编程语言、库文件、编译器组件以及资源...
程序员成长路线图 从入门到优秀
在IT行业快速发展的背景下,程序员面临着越来越激烈的竞争和技术更新的压力。本文将深入探讨如何通过有效的职业规划,使自己在职场中变得不可或缺。我们将从调研、投资、营销和执行四个方面进行详细分析,并结合具体...
"程序员必知的硬核知识大全" 本资源摘要信息涵盖了程序员需要了解的硬核知识大全,涉及到计算机硬件、操作系统、编程语言等多个方面。 一、计算机硬件知识 * CPU(Central Processing Unit):程序员需要了解 CPU...