(作者這些年一直在從事這個(gè)主題的工作坡疼,本文是這些年工作的一個(gè)總結(jié)。另外作者是一個(gè)比較守舊的人衣陶,所以軟件行業(yè)柄瑰、IT行業(yè)、互聯(lián)網(wǎng)行業(yè)剪况、數(shù)字行業(yè)等等教沾,在作者眼中都是一個(gè)意思,起碼在能力角度并無區(qū)別译断,所以作者并不認(rèn)為這里面提到的什么東西只適合與IT行業(yè)不適合于互聯(lián)網(wǎng)等等详囤。)
軟件開發(fā)人員的培養(yǎng),先說一下解決這個(gè)大問題的方法論镐作,首先要理清楚問題域藏姐,從問題出發(fā)。那么頭腦風(fēng)暴一下该贾,隨便選一個(gè)問題作為出發(fā)點(diǎn):我們培養(yǎng)的人是在從事什么羔杨?答案當(dāng)然也很簡(jiǎn)單,從事軟件開發(fā)杨蛋。這個(gè)問題本身簡(jiǎn)單到了沒什么意義兜材,把一個(gè)復(fù)雜的問題抽象為了一個(gè)簡(jiǎn)單到?jīng)]用的問題,如果我們進(jìn)一步思考(此處省略不知道多少步)逞力,就會(huì)發(fā)現(xiàn)關(guān)鍵的問題應(yīng)該是曙寡,軟件開發(fā)到底是一項(xiàng)什么工作?
只有清晰的定義了這項(xiàng)工作寇荧,才能很好的定義出從事這項(xiàng)工作的人有哪些工作場(chǎng)景举庶,然后才能定義出為了勝任這些工作場(chǎng)景,他們應(yīng)該具備哪些能力揩抡,定義出這些能力勝任時(shí)的表現(xiàn)户侥,然后才能談得到培養(yǎng),同時(shí)還要考慮通過什么方式能衡量這些能力勝任時(shí)的表現(xiàn)和他們實(shí)際工作表現(xiàn)的差距峦嗤,以評(píng)估培養(yǎng)的效果蕊唐,指導(dǎo)培養(yǎng)方式的迭代改進(jìn)。
以上就是我們的方法論烁设,所以作者才會(huì)來從事這項(xiàng)工作替梨,因?yàn)槲也皇遣幌嘈湃魏瓮庑心軌蚝芎玫亩x出這里面的內(nèi)容的。
那么我們從頭開始,回到問題:軟件開發(fā)到底是一項(xiàng)什么樣的工作副瀑,這個(gè)問題有太多的維度弓熏,我們僅從能力的角度開思考這個(gè)問題,也就是說如果完不成只可能是能力問題俗扇,沒有其他問題干擾硝烂。從這點(diǎn)切入箕别,這個(gè)問題可以等價(jià)的看成铜幽,拋掉所有角色來看,假設(shè)存在一個(gè)可以干所有角色的事情的人串稀,并且他的時(shí)間是無限的除抛,而且他的智力水平是一個(gè)中等偏上的人(考慮到大學(xué)畢業(yè)生僅占中國總?cè)丝诘?%左右,這個(gè)設(shè)定還是偏保守了)母截,那么對(duì)他來說到忽,開發(fā)一款軟件是一個(gè)怎樣的工作呢?
拋掉知識(shí)層面的部分清寇,從能力角度喘漏,我定義如下:
把你的業(yè)務(wù)問題轉(zhuǎn)化為數(shù)學(xué)問題,讓它的規(guī)則邏輯自洽华烟,然后用代碼實(shí)現(xiàn)
如果它的規(guī)則過于復(fù)雜翩迈,人力不能判斷邏輯是否自洽,進(jìn)行抽象盔夜,寄希望于抽象之后邏輯自洽
如果抽象之后依然過于復(fù)雜负饲,不能判斷邏輯自洽;或如果進(jìn)一步抽象將變成過度抽象喂链,從而無法判斷是否可以落地返十,那就切分。寄希望于在一個(gè)問題子域中椭微,解決方案可以邏輯自洽洞坑,不同的問題子域的方案之間可以映射以合作解決大的問題域
上述三大假設(shè)中,僅有人的智力水平中等偏上這一點(diǎn)蝇率,是完全成立的检诗。時(shí)間無限肯定不可能,但它并不影響對(duì)能力的定義瓢剿,只是影響工期逢慌,最多加入一個(gè)對(duì)時(shí)間管理、優(yōu)先級(jí)選擇的能力的要求间狂,而這個(gè)能力是通用能力攻泼,已有解決方案。一個(gè)可以干所有角色的事情的人有限成立,因?yàn)閺哪芰嵌仁强梢宰龅降拿Σぃ谲浖_發(fā)的早期確實(shí)大量存在這樣的人何鸡,我們?cè)?jīng)稱之為軟件英雄的人大都如此,即便是今天牛欢,這樣的人也不是不存在骡男。但是在如今這個(gè)時(shí)代,卻不能以這個(gè)為目標(biāo)來發(fā)展人傍睹,主要導(dǎo)致這個(gè)結(jié)果的原因是對(duì)效率的追求隔盛,有限的時(shí)間匹配無限的工作量,勢(shì)必要把人分成多個(gè)角色來工作以追求效率拾稳,所以這個(gè)方向是絕大多數(shù)企業(yè)無法接受的吮炕。不過這里面有個(gè)矛盾點(diǎn),想要把我們定義的三種工作做好访得,跨角色的能力也就是按照傳統(tǒng)軟件英雄的角色去培養(yǎng)能力是不可避免的龙亲,否則能力的發(fā)展是有天花板的。好在就算你不刻意的發(fā)展他們這些能力悍抑,這些能力也會(huì)隨著工作年限的增加自然獲得鳄炉,只是效率不高而已,由于大多數(shù)企業(yè)還沒有精力考慮突破天花板的效率問題搜骡,所以這個(gè)問題我們按下不表拂盯,以后我們?cè)偕钊肓摹倪@個(gè)角度來講浆兰,上述的工作內(nèi)容是可以成立的磕仅,起碼我這么認(rèn)為。
那這樣的工作對(duì)人提出了怎樣的要求呢簸呈?在回答這個(gè)問題之前榕订,我們還要對(duì)問題域進(jìn)行進(jìn)一步的思考,那就是人的發(fā)展本身有怎樣的限制蜕便,同時(shí)軟件行業(yè)本身有什么特點(diǎn)結(jié)合上人的限制會(huì)進(jìn)一步加劇這個(gè)問題的復(fù)雜性劫恒?
我人的發(fā)展認(rèn)為主要有三大限制:
- 人的易錯(cuò)性。即便是做過很多遍的事情轿腺,也不能保證每次都做的不出錯(cuò)两嘴。如果每次還稍微有點(diǎn)區(qū)別,就更難保證了族壳。
- 學(xué)習(xí)需要很長(zhǎng)時(shí)間憔辫。技術(shù)知識(shí)也好,業(yè)務(wù)知識(shí)也好仿荆,本身都是需要被學(xué)習(xí)才能掌握贰您,而人的學(xué)習(xí)速度是很慢的坏平,要花大量的時(shí)間。不想機(jī)器锦亦,只要加載了程序舶替,下一秒就可以工作了,而且絕不出錯(cuò)杠园。
- 個(gè)體間無法快速復(fù)制顾瞪。一個(gè)人學(xué)會(huì)沒啥用,別人不會(huì)就是不會(huì)抛蚁,好容易培養(yǎng)出一個(gè)老手陈醒,再復(fù)制他/她又要花費(fèi)幾乎等量的時(shí)間。不像機(jī)器可以快速復(fù)制給很多機(jī)器篮绿,每臺(tái)都不會(huì)有錯(cuò)誤孵延。
那么軟件行業(yè)本身什么特點(diǎn)又進(jìn)一步加劇這個(gè)復(fù)雜性呢吕漂?
- 軟件不遵守差不多原則亲配,做出來的東西必須嚴(yán)格符合邏輯,否則就會(huì)出錯(cuò)惶凝。而這種嚴(yán)格符合邏輯的產(chǎn)品卻是要靠有易錯(cuò)性質(zhì)的人來構(gòu)建吼虎。
- 軟件系統(tǒng)的分層掩蓋了它的復(fù)雜性,導(dǎo)致軟件的知識(shí)在空間維度上是海量的苍鲜,對(duì)于學(xué)習(xí)是很大的挑戰(zhàn)思灰。只要是涉及到純機(jī)器的部分,人們總會(huì)封裝的去理解混滔,以為挺簡(jiǎn)單的洒疚,然而創(chuàng)新又總是貫穿很多層,所以上層的很多想法到實(shí)現(xiàn)的時(shí)候坯屿,總是很復(fù)雜油湖。這就加劇了不同角色間、管理者與被管理者間领跛,老手與新手間的磨合成本
- 軟件行業(yè)的快速發(fā)展乏德,導(dǎo)致所學(xué)的知識(shí)在時(shí)間維度上是快速變化的。據(jù)說是受摩爾定律影響吠昭,我們軟件開發(fā)人員的世界基本上是極其不穩(wěn)定的喊括。每隔一段時(shí)間,我們依賴的類庫矢棚、框架就會(huì)升級(jí)郑什,我們掌握的知識(shí)和技能就會(huì)在一定程度上過時(shí),這進(jìn)一步加劇了學(xué)習(xí)的挑戰(zhàn)蒲肋。
以上的復(fù)雜性疊加上人的不足蘑拯,使得軟件開發(fā)人員的培養(yǎng)是一個(gè)極其困難的問題劫拢。理解了這樣一個(gè)復(fù)雜的背景,我們才好思考强胰,軟件開發(fā)對(duì)于人提出了怎樣的要求舱沧,以及如何培養(yǎng)人來勝任這樣的要求。
to be continued……