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

简介:

有同学问我这个问题:

“你正在做一个项目,这个项目有一项关键的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”的勇气和自信。

 

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







本文转自SoftwareTeacher博客园博客,原文链接:http://www.cnblogs.com/xinz/archive/2010/11/27/1889838.html,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
架构师 前端开发 Java
Java开发工程师的职业规划应该是什么样的?
Java开发工程师的职业规划涵盖多个阶段,包括初入行业(0-1年)、技能提升(1-3年)、技术专家(3-5年)及管理或专家路线选择(5年以上)。各阶段设定了明确的技能要求与职业目标,从掌握Java基础、常用框架到深入研究高级技术、微服务架构乃至担任管理职务或成为技术专家。通过持续学习与实践,结合个人兴趣,Java工程师可在技术或管理领域找到合适的发展方向,最终实现职业成功。
437 83
|
程序员 项目管理
程序员成长第十九篇:要不要转管理岗?
程序员成长第十九篇:要不要转管理岗?
257 0
程序员成长第十九篇:要不要转管理岗?
|
消息中间件 移动开发 安全
移动开发者升职加薪的8项技能,写给正在求职的安卓开发
移动开发者升职加薪的8项技能,写给正在求职的安卓开发
移动开发者升职加薪的8项技能,写给正在求职的安卓开发
|
前端开发 JavaScript Java
爆赞程序猿开发软件
爆赞程序猿开发软件
爆赞程序猿开发软件
|
算法 项目管理
新手项目经理入坑指南
我们邀请大淘宝技术PMO团队的鹿迦来聊聊新同学如何成长为一名合格的项目经理。
471 0
新手项目经理入坑指南
|
SQL 算法 NoSQL
编写代码最应该做好的事情是什么?(备战2022春招或暑期实习,每天进步一点点,打卡100天,Day8)
编写代码最应该做好的事情是什么?(备战2022春招或暑期实习,每天进步一点点,打卡100天,Day8)
151 0
编写代码最应该做好的事情是什么?(备战2022春招或暑期实习,每天进步一点点,打卡100天,Day8)
|
机器学习/深度学习 存储 Cloud Native
如何在工作中快速成长?致工程师的 10 个简单技巧
精英人数的增长速度持续加快后,很多人开始焦虑,我也焦虑,深知要走出焦虑不容易,我想把走出焦虑快速成长的认知和方法写成文章分享给更多人,做成【技术人成长系列】文章给更多人面对面分享,该系列总共三篇,分别是《完成自己的认知升级》、《自我成长的方法》、《学会自我培养或培养他人》。本文是快速成长第一篇:“完成自己的认知升级”,内容偏长但值得仔细阅读。
如何在工作中快速成长?致工程师的 10 个简单技巧
|
机器学习/深度学习
如何在工作中快速成长?致工程师的10个简单技巧
阿里有句非常经典的土话,“今天的最好表现,是明天的最低要求。
3859 0