给将要进入职场的同学 - 开发软件不是闭卷考试

有同学问我这个问题:

“你正在做一个项目,这个项目有一项关键的feature需要实现,这个feature有一定的技术难度,你调试了很久,都没找到实现的途径,这时你已经在这个feature上花了很多时间了,而且无法预期解决需要多长时间。在这种情况下,你会怎么做?”

  

一种典型失败的情况是:

第一天:我正在做一个关键的feature, 看起来不难,做好了会很有面子。。。

第三天:就是搞不通,就这样过了三天,其中“murphy's law”又浪费了一天。我想还是加班,先别告诉老板;如果做好了,再加紧做几个小的feature。这样还是能赶上进度。。。

第五天:全组开会,支吾了几句,说还是很有希望如期完成的。。。

第九天:加了班,也问了同事,还是没戏,小的feature也没时间做了… 眼看期限就要到了,心里充满了悲剧情绪。老板要是问起,就如实说明,要是没问,我还是争取做好了再报告。

第十一天:期限到了!还是没头绪, 要和老板开会review了,Panic!

 

 

首先我们要明确,这是一个实际的团队项目。不是学校里的闭卷考试(一些人在离开学校很久还偶尔做恶梦,考试中一些题做不出来…)。

 

实际的项目中的问题,都是有解的,而且大多数是多项式时间内有解。我们在现实项目中的“解题能力”,取决于下面这些因素:

 

1.  对问题的了解,有没有能力了解客户需求,分析问题,把大问题分解成小问题来解决。有没有眼光看到可以简化/绕过一些难题. 在闭卷考试的时候,所有的题意都在试卷上,理解好了之后,就可以埋头做题了;但是实际项目中,用户的初始需求是非常含糊的,而且经常变化。比如“网站要支持搜索”- 是哪一种呢?

      - 全部自己做搜索,还是可以用第三方的解决方案?

      - 所有刚刚post的信息必须立即显示在结果中,还是允许有延时

      - 支持中文?分词?还是。。。

      - 支持复杂的查询条件么?是否支持再次查询?

      - 结果的ranking 有何要求?

      - 最终想达到什么结果?

      不同的需求,有不同的解决方案,这时不宜“make too much assumption”,认为用户要的就是某一种,就甩开膀子开始做。

 

      要深入的了解用户文字后面的真正理由,一个工程师有一次说他的企业客户要求 UI 所有的按钮都要是3D 并且半透明。深入了解后,发现原因是客户的MM 喜欢玩某一时髦游戏软件(就不点名了),上面的按钮都是这样的。 工程师大叫一声 - 我倒...   他从Faint 中苏醒后,怎么办?  我想他可以提示客户专注于软件的流程和业务逻辑,也许能把按钮的需求放到较低的优先级。

 

      另外,有时候 low-tech 的解决方案要更好。 不一定每一个类都要多态继承, 用很多虚函数, 才能实现。

 

2.  对技术的了解,看书的时候觉得“技止此耳”,开发项目的时候才觉得实际情况和书上讲的都有一些出入,偏偏一些重要的出入书上没有提。我们很多人是边看asp.net的书, 边开发asp.net 的项目,这相当于一边看医学书一边动手术。。。

 

3.  沟通的能力 – 软件工程项目中最怕的是“surprise”和“lack of visibility”,作为程序员,沟通非常重要。及早和同事/上级/客户通报项目遇到的风险,会让大家都了解项目的进展及问题,及时得出解决方案。 比如要达到某个要求有困难,用户是否一定要此功能?要及时沟通。

 

4.  估计任务的能力 – 软件项目难度及日程的估计,是一门不小的学问,初学者犯了错误也没关系,关键是要吃一堑,长一智。当你说“某某 feature要在某某日子完成”,你的意思是到了那一天:

    - 程序刚写好,编译通过, or

    - 可以在debugger 中运行通过, or

    - debug/retail 都成功,可以集成在网站上,但是有一些问题 or

    - 自己已经完成了测试, or

    - 测试人员已经全面完成了测试,or

    - 和其他有依赖关系的功能都集成测试过。

 

    要达到不同的状态需要的时间是很不一样的!

 

5.  在以上能力的基础上,还要有对不切实际的需求说 “no”的勇气和自信。

 

讲了这么多,我想大家都会知道怎么做了。


原作写于 2006 年.

http://yishan.cc/blogs/xin/archive/2006/07/17/450.aspx

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件随想: 软件 = 程序 + 软件工程

软件随想: 软件 程序 软件工程 最近和几个同道谈论了一些程序,架构,软件的问题,大家身在此山中,绕来绕去,始终没有能有明确清晰的结论。我把一些想法写在这里,供专家指正。 几乎所有程序员都知道“程序…

linux shell 0403-011,shell脚本出现 test:0403-004 Specify a paramater with this command

下面是小弟从网上找的一段SHELL代码,用来解决WEBLOGIC日志不能自动分割的问题,可是SHELL脚本有误,运行的时候报start.sh【7】:test:0403-004 Specify a paramater with this command 请各位大虾帮帮忙You can use the following s…

现代软件工程系列 学生的精彩文章 (2) 到底是谁的 bug?

http://teamkingofcsharp.spaces.live.com/blog/cns!59FC2D3DD66822AA!406.entry 又见M$的bug发信人: Dora9 (Dora9), 信区: NewSoftware标 题: 关于iHunter 2.0在某些机器上的崩溃问题发信站: 水木社区 (Tue Jan 6 00:23:05 2009), 站内许多用户给我们反映一点击帖子想看详…

linux-x86_64 error,ORA-09817/Linux-x86_64 Error: 28: No space left on device/ORA-01075

1、通过sqlplus / as sysdba在服务器上无法登录oracle,并提示一下错误ERROR:ORA-09817: Write to audit file failed.Linux-x86_64 Error: 28: No space left on deviceAdditional information: 12ORA-01075: you are currently logged onEnter user-name:ERROR:ORA…

现代软件工程系列 学生的精彩文章 (3) 如何在Bug 不断的情况下还能保持平常心... [zz]

from: http://teamkingofcsharp.spaces.live.com/blog/cns!59FC2D3DD66822AA!222.entry 感想平常心 初中的数学老师常常和我说:“你要学会保持一颗平常心”。我是一个不那么豁达开朗的人,对很多事情都会很看重,GPA,排名&#x…

Linux中.rpm,Linux中rpm的使用

1、安装rpm -i 需要安装的包文件名举例如下:rpm -i example.rpm 安装 example.rpm 包;rpm -iv example.rpm 安装 example.rpm 包并在安装过程中显示正在安装的文件信息;rpm -ivh example.rpm 安装 example.rpm 包并在安装过程中显示正在安装的…

现代软件工程系列 学生的精彩文章 (4) 为用户服务

from: http://teamkingofcsharp.spaces.live.com/blog/cns!59FC2D3DD66822AA!421.entry 赞一下Office的用户体验今天我做API Hook,开了个Word想截获它的系统调用。结果由于我的程序写屎了,Word一开就崩。崩了大概10次以后,再启动Word的时候…

现代软件工程系列 学生的精彩文章 (5) 其实还是人的问题

http://springgreen9527.spaces.live.com/blog/cns!354E19E8B3074CC7!171.entry?sa370423590 TM 1.0发布感想 课程快要结束了,回想起整个课程来,和最初的设想差别的确很大,我也没有想到我们这组的进展会如此的不顺利。用一句话来说&a…

arm linux head.s,arm-linux head.S 源代码分析

arm-linux head.S 源代码分析arm-linux head.S 源代码分析这是ARM-Linux运行的第一个文件,这些代码是一个比较独立的代码包裹器。其作用就是解压Linux内核,并将PC指针跳到内核(vmlinux)的第一条指令。Bootloader中传入到Linux中的参数总共有三个&#xf…

现代软件工程系列 学生的精彩文章 (6) 我们其实还不懂互联网

from http://cid-ba6a52af193f301f.spaces.live.com/ 第一次把我们自己的写的东西放在网上让别人去用,今天过得非常有传奇色彩,我决定讲个长故事来纪念我们的发布第一天。 由于找不到能放软件的地方,我们把软件以附形式件放在了zol的论坛&am…

linux制作cpio镜像文件,制作CPIO格式的INITRD

LINUX内核自从2.6版以后,就大力推荐CPIO-INITRD.现在各大LINUX发行版的INITRD都是CPIO格式的.这次主要说下如何制作CPIO-INITRD.首先假设咱们已经用BUSYBOX或KLIBC或别的什么做好了根文件系统,位于~/rootfs下.按照IBM DEVELOPERWORKS里的文章说,可以用以下命令制作CPIO-INITRD:…

现代软件工程系列 结对编程 两周写好3D 陆战棋

from: http://cid-ba6a52af193f301f.spaces.live.com/blog/cns!BA6A52AF193F301F!122.entry Oh,my pair project From new Pair(HuangShuo,WangGuan) 签入代码,发送邮件,关上Flex Builder。纠结了差不多两周的Pair Project终于能够有个了结了&#xff…

现代软件工程系列 学生精彩文章(7) 宝贵的教训

from http://codecanvas3706.spaces.live.com/blog/cns!5A77585898179960!205.entry [当学生的时候, 最好犯一些错误, 经历一些失败. 不经历一些惨痛的失败, 难道要到工作的时候才失败么? ] 个人的失败感言 记得在读完了《梦断代码》之后,我也只是为chandler项…

深度Linux安装火狐,deepin或Ubuntu安装最新版Firefox,并设置去掉标题栏

第一步:使用一下命令下载并安装Firefox################################### 先卸载老板Firefoxsudo rm -Rf /opt/firefox*sudo rm -Rf /usr/bin/firefoxsudo rm -Rf /usr/share/applications/firefox.desktop# 下载最新版Firefoxwget "https://download.mozil…

现代软件工程 作业 个人项目

MSRA Advanced Software Engineering Project: Individual Project - Word frequency program 2010/11/1 考察重点: 基本算法的实现; 基本I/O; 字处理; 程序效能分析; 简单测试用例 Implement a console application to tally the frequency of words under a directory (…

现代软件工程 团队博客作业 如何评价个人在团队中的绩效

在现实社会中有很多团队合作的项目, 他们是如何评价个人在团队中的绩效呢? 例如下面的情况: • 一群人把一堆砖头从A地搬到B地• 一个剧组排演话剧• 一群队员在职业球队踢球• 医生和护士做手术• 计算机系的一群老师教课• 一群学生做软工项目 (PM, Dev, Test) (这是重点) …

手势在c语言的作用,手势态度在人际交往中的重要性

一、人际交往的定义及其在社会活动中,人们运用语言符系统或非语言符系统相互之间交流信息,沟通情感的过程就是人际交往。人际交往是人们共同活动的特殊形式。任何个人或群体进行的交往,总是为达到某种目标、满足某种需要而展开的。二、人际交…

现代软件工程 结对编程 (I) 三维棋类游戏

Pair Project I 3D Board Game Turn a usual 2D board game into 3D by transferring board and game rules into 3D. Goal: how to collaborate in explorative situation (new requirement, new language, lots of ambiguity) 把一个二维的棋类游戏变成三维游戏, 两周时…

洛谷找最小值c语言,洛谷 P1478 陶陶摘苹果(升级版) C语言实现

原题地址:P1478 淘淘摘苹果(升级版)- 洛谷题目描述又是一年秋季时,陶陶家的苹果树结了n个果子。陶陶又跑去摘苹果,这次她有一个a公分的椅子。当他手够不着时,他会站到椅子上再试试。这次与NOIp2005普及组第一题不同的是&#xff1…

现代软件工程 结对编程 (II) 电梯调度 算法和测试框架

[很多同学完成了上一个结对编程项目后, 很想知道下一个项目是什么, 我们这次要练习如何设计 接口, 测试框架, 和算法. ] [博客园的朋友们也可以试一试怎么高效地解决这个问题] 现代软件工程系列 结对编程 (II) 电梯调度程序 ------- Pair Project II Elevator Scheduler D…