给将要进入职场的同学 - 开发软件不是闭卷考试
有同學(xué)問我這個(gè)問題:
“你正在做一個(gè)項(xiàng)目,這個(gè)項(xiàng)目有一項(xiàng)關(guān)鍵的feature需要實(shí)現(xiàn),這個(gè)feature有一定的技術(shù)難度,你調(diào)試了很久,都沒找到實(shí)現(xiàn)的途徑,這時(shí)你已經(jīng)在這個(gè)feature上花了很多時(shí)間了,而且無法預(yù)期解決需要多長時(shí)間。在這種情況下,你會(huì)怎么做?”
??
一種典型失敗的情況是:
第一天:我正在做一個(gè)關(guān)鍵的feature, 看起來不難,做好了會(huì)很有面子。。。
第三天:就是搞不通,就這樣過了三天,其中“murphy's law”又浪費(fèi)了一天。我想還是加班,先別告訴老板;如果做好了,再加緊做幾個(gè)小的feature。這樣還是能趕上進(jìn)度。。。
第五天:全組開會(huì),支吾了幾句,說還是很有希望如期完成的。。。
第九天:加了班,也問了同事,還是沒戲,小的feature也沒時(shí)間做了… 眼看期限就要到了,心里充滿了悲劇情緒。老板要是問起,就如實(shí)說明,要是沒問,我還是爭取做好了再報(bào)告。
第十一天:期限到了!還是沒頭緒, 要和老板開會(huì)review了,Panic!
?
?
首先我們要明確,這是一個(gè)實(shí)際的團(tuán)隊(duì)項(xiàng)目。不是學(xué)校里的閉卷考試(一些人在離開學(xué)校很久還偶爾做惡夢,考試中一些題做不出來…)。
?
實(shí)際的項(xiàng)目中的問題,都是有解的,而且大多數(shù)是多項(xiàng)式時(shí)間內(nèi)有解。我們在現(xiàn)實(shí)項(xiàng)目中的“解題能力”,取決于下面這些因素:
?
1.? 對問題的了解,有沒有能力了解客戶需求,分析問題,把大問題分解成小問題來解決。有沒有眼光看到可以簡化/繞過一些難題. 在閉卷考試的時(shí)候,所有的題意都在試卷上,理解好了之后,就可以埋頭做題了;但是實(shí)際項(xiàng)目中,用戶的初始需求是非常含糊的,而且經(jīng)常變化。比如“網(wǎng)站要支持搜索”- 是哪一種呢?
????? - 全部自己做搜索,還是可以用第三方的解決方案?
????? - 所有剛剛post的信息必須立即顯示在結(jié)果中,還是允許有延時(shí)
????? - 支持中文?分詞?還是。。。
????? - 支持復(fù)雜的查詢條件么?是否支持再次查詢?
????? - 結(jié)果的ranking 有何要求?
????? - 最終想達(dá)到什么結(jié)果?
????? 不同的需求,有不同的解決方案,這時(shí)不宜“make too much assumption”,認(rèn)為用戶要的就是某一種,就甩開膀子開始做。
?
????? 要深入的了解用戶文字后面的真正理由,一個(gè)工程師有一次說他的企業(yè)客戶要求 UI 所有的按鈕都要是3D 并且半透明。深入了解后,發(fā)現(xiàn)原因是客戶的MM 喜歡玩某一時(shí)髦游戲軟件(就不點(diǎn)名了),上面的按鈕都是這樣的。 工程師大叫一聲 - 我倒...?? 他從Faint 中蘇醒后,怎么辦?? 我想他可以提示客戶專注于軟件的流程和業(yè)務(wù)邏輯,也許能把按鈕的需求放到較低的優(yōu)先級(jí)。
?
????? 另外,有時(shí)候 low-tech 的解決方案要更好。 不一定每一個(gè)類都要多態(tài)繼承, 用很多虛函數(shù), 才能實(shí)現(xiàn)。
?
2.? 對技術(shù)的了解,看書的時(shí)候覺得“技止此耳”,開發(fā)項(xiàng)目的時(shí)候才覺得實(shí)際情況和書上講的都有一些出入,偏偏一些重要的出入書上沒有提。我們很多人是邊看asp.net的書, 邊開發(fā)asp.net 的項(xiàng)目,這相當(dāng)于一邊看醫(yī)學(xué)書一邊動(dòng)手術(shù)。。。
?
3.? 溝通的能力 – 軟件工程項(xiàng)目中最怕的是“surprise”和“l(fā)ack of visibility”,作為程序員,溝通非常重要。及早和同事/上級(jí)/客戶通報(bào)項(xiàng)目遇到的風(fēng)險(xiǎn),會(huì)讓大家都了解項(xiàng)目的進(jìn)展及問題,及時(shí)得出解決方案。 比如要達(dá)到某個(gè)要求有困難,用戶是否一定要此功能?要及時(shí)溝通。
?
4.? 估計(jì)任務(wù)的能力 – 軟件項(xiàng)目難度及日程的估計(jì),是一門不小的學(xué)問,初學(xué)者犯了錯(cuò)誤也沒關(guān)系,關(guān)鍵是要吃一塹,長一智。當(dāng)你說“某某 feature要在某某日子完成”,你的意思是到了那一天:
??? - 程序剛寫好,編譯通過, or
??? - 可以在debugger 中運(yùn)行通過, or
??? - debug/retail 都成功,可以集成在網(wǎng)站上,但是有一些問題 or
??? - 自己已經(jīng)完成了測試, or
??? - 測試人員已經(jīng)全面完成了測試,or
??? - 和其他有依賴關(guān)系的功能都集成測試過。
?
??? 要達(dá)到不同的狀態(tài)需要的時(shí)間是很不一樣的!
?
5.? 在以上能力的基礎(chǔ)上,還要有對不切實(shí)際的需求說 “no”的勇氣和自信。
?
講了這么多,我想大家都會(huì)知道怎么做了。
原作寫于 2006 年.
http://yishan.cc/blogs/xin/archive/2006/07/17/450.aspx
?
總結(jié)
以上是生活随笔為你收集整理的给将要进入职场的同学 - 开发软件不是闭卷考试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asp.net 文本框显示xml格式数据
- 下一篇: 去 QCon 学习