了解你的項目
有了一個good idea,接下來就是要把它做出來,這個代表你idea的東西,可能是是一個APP,也可能是一個網站,或者一個其他什麼需要編程開發的玩意,我們稱之為項目。我們整個專欄的一大主題,項目管理,管理的就是這麼一個東西。
要想管理好它,你就必須真正的了解它。然而我發現,不僅僅是作為外行的CEO或者產品經理,包括很多行業內的程序員同學,對項目的認識都有失偏頗。
我們從最重要的一點講起:這個項目的難點是什麼?
CEO可能會說:如何讓別人沒法仿製;產品經理可能會說:如何第一時間抓住客戶的眼球;程序員可能會說:需要用到的websocket技術還不夠成熟,兼容性不夠……
CEO和產品經理哪涼快哪一邊待著去……算了算了,還是回來,沒你們的理解和支持這項目也玩不轉。程序員同學,你還是too young too simple啊!
首先我得把項目分成兩種。
一種是「高精尖」的項目,涉及複雜的演算法、協議、數據結構、底層知識等一大堆即使普通程序員都犯愁的東西。比如Alpha Go,人臉識別,城市交通系統調度這些講給我們聽我們都聽不懂的「黑科技」。
另一種就是我們通常接觸和使用的「簡單」系統。比如知乎,本質上不過就是一些數據的增刪改查而已:我寫了一篇文章,放到資料庫里存起來;打開網頁,又能把我的文章顯示出來;還能改;不知道能不能刪?反正就這樣啦,對於外行來說,可能覺得複雜一點的就是怎麼「變著花樣」的顯示,比如憑什麼要把我這麼精彩的回答放在下面,他那篇狗屁不通的抖機靈的放在最上面……
如何你的項目是前者,你可以出門左轉找真正的高手去了,我真的不會,沒什麼好說的。但萬幸的是,我相信百分之九十以上的項目,都屬於後者。而且隨著技術的發展,會有越來越多的項目會進化成後者。
對於程序員來說,這可能是一個悲傷的消息。但技術的進步就是這樣的:軟體已經成為一個龐大的產業,一個產業的繁榮需要大量的從業人員湧入;而大量從業人員湧入的前提,必然是技術門檻的降低。
舉一個最簡單的例子,在我08年左右開始學習編程的時候,AJAX還是一個只有超級大牛才能掌握的炫目絕技,但今天你要是不會AJAX你好意思說你是Web程序員?然而,這是因為你比當年的大牛更厲害么?——反正我是靠的JQuery幫忙。
CEO和產品經理沒法理解的話就想想「電腦打字」吧。20年前是有一種職業叫「打字員」的,現在誰不會打字,站出來走兩步看看。是我們每個人都變強了么?其實不是的,那時候打字得用五筆,現在99%的人用的都是「拼音輸入法」而已。什麼?連拼音都不會,咯咯咯,我爸的寫字板借給你用。這就是技術進步降低使用門檻的例子。以此類推,難說20年以後人人都會編程喲!
好了,說了這麼多,其實核心就一點:破除技術迷信。破除迷信,是為了回歸事物的本質。
我這裡建議,CEO和產品經理,有機會的話可以學一學編程,寫幾行代碼。不要以為自己是下一個馬雲,馬雲真的是一個奇蹟,太難複製。而且他不也因為幾盒月餅開人,犯了眾怒么?我一個很隨意的猜測,這和馬雲不懂編程有一定的關係。他不懂前端後端,猛一聽到:安全部門人員,利用系統漏洞……多嚇人啊!?這是一種人對於未知事物本能的恐慌,就像我當年做裝修,工人把漆給刮花了,肯定是個問題,但這個問題有多嚴重,能不能解決,有沒有後遺症?我都是暈的,更準確的說,是「心虛」的。所以就會有很多在懂行的人看來莫名其妙的過激反應。
而對於程序員而言,問題就在於,他總是覺得:現在的技術,我已經懂了。所以如果我要提升,就必須追求更「高」的技術。但什麼是更高的技術?有兩種傾向:
- 更新的技術。表現為:這是哪個年代的技術,早就落伍了!現在最流行的是node.js,好不好……
- 更底層的技術。表現為:不鑽研數據結構和演算法,註定一輩子碼農搬磚。所有的編程書籍,經典的只有一本《C程序設計》……
人各有志,我沒什麼好說的。但作為項目管理者,一定要警惕這兩種人,最好根本就不要讓他們進來散播這些對項目開發不利的言論。因為他們根本就不是做我們這種「普通項目」的人,我們的廟太小了,供不起這樣的大神。
打個比方,做項目就像修房子。不管我們怎麼修,都是鋼筋水泥磚頭河沙,住宅教室寫字樓,可能各有特點,但總體上就是那麼一回事。設計有規範,施工有圖紙,玩不出太多的花來。但上面這兩種人,一種是什麼材料新他就用什麼,傳統的鋼筋混凝土根本看不上;另一種不琢磨怎麼把工人組織好按進度施工,他一天到晚就琢磨著這鋼筋的拉力水泥的標號還能不能優化……
不是說他們做錯了什麼,只是他們的位置不對,他們應該去工程材料研究院,而不是在施工現場。
今天我們的軟體開發,早已經走出了實驗室,進入了龐大紛繁的應用市場。很多時候,一個軟體的構建,更像是造一輛汽車,不是每一個零部件都得自己去造,而是一個零部件生產和組裝相分離,基礎研究和實際應用相分離的生產活動。所以,從計算機科學裡,衍生從另外一個詞:軟體工程學。
顧名思義,軟體開發是一門工程技術,項目管理其實就是一個工程管理。所以有時候想想,「碼農」其實不如「IT民工」準確,用軟體開發類比建築工程建設,那麼程序員就是搬磚砌磚的民工了。
但軟體工程畢竟不是建築工程,IT民工也不是真的民工,兩者必然還是有差別的。而這些差別,是傳統行業的CEO、外行的產品經理必須要注意的。
一、項目的改動是可以的。這改動沒有拆牆破窗掀房子那麼恐怖,但也沒有一般人想像的那麼容易。
二、項目通常都是會延期的。但這真不是,至少不全是程序員的錯。另外,進度吃緊,加人加班通常都是沒用的。
三、高手和低手的差距不是一個量級的。雖然都是民工,但一個熟練的砌磚師傅最多能頂兩個三個五個剛入門的新人就碉堡了;但軟體開發如果真卡住了,一萬個菜鳥都比不過一個大神級別的IT民工。
四、軟體的維護比開發更重要。只要不是豆腐渣,房子修好了就可以用幾十年;但多少當初還不錯的代碼,折騰不了幾年,就七零八落的要散架了。
+++++++++++++++++++
其實一提筆就卡住了。因為我本來想寫的是如何招人,但無論怎樣,有一個問題繞不過:如果你自己完全不懂,是很難鑒別一個比你更懂的人的。然後如果你什麼都懂了,我寫這些又完全沒意義了?腫么破?
+++++++++++++++++++
上一篇:序:有些事,要做就趁早
下一篇:需求變更,萬惡之源?
+++++++++++++++++++
從頭看起:序:有些事,要做就趁早
+++++++++++++++++++
參考:誰跟你說編程就是高技術含量的事情了? - 亂寫 - 知乎專欄
+++++++++++++++++++
推薦閱讀:
※項目管理中要學會的管理效應
※《全面變革》第一章 死循環
※從0到1和從1到100:項目經理的應對之道
※IT管理的五大必殺技