從校園到職場(chǎng)測(cè)驗(yàn)
從校園到職場(chǎng)測(cè)驗(yàn)
我們每個(gè)人都是從校園走向職場(chǎng),那么從校園走向職場(chǎng)需要注意什么問(wèn)題呢,有哪些經(jīng)驗(yàn)需要借鑒呢,下面是學(xué)習(xí)啦小編為你整理相關(guān)的內(nèi)容,希望大家喜歡!
我們先說(shuō)職場(chǎng)上所謂技術(shù)問(wèn)題的由來(lái)是哪些原因造成的。
1、年代久遠(yuǎn),菜鳥(niǎo)的產(chǎn)品
巨頭也是從初創(chuàng)公司起步的,在起步之初,可能技術(shù)實(shí)力也不是很好,而且我們知道信息技術(shù)成長(zhǎng)性很快,很多現(xiàn)在我們司空見(jiàn)慣的一些東西在十年前還屬于無(wú)人知曉的黑科技,在這種情況下,一個(gè)持續(xù)運(yùn)營(yíng)的公司,多少會(huì)有一些歷史上很粗糙和菜鳥(niǎo)的代碼,并且可能部分仍在運(yùn)營(yíng),這是正常的。
那么為什么會(huì)仍在運(yùn)營(yíng)呢?說(shuō)明這個(gè)東西雖然不夠好,不夠正確,但是一直沒(méi)有出大的問(wèn)題,沒(méi)有給系統(tǒng)添太多麻煩,所以,雖然這個(gè)東西不好,但是基于以業(yè)務(wù)為核心的訴求,企業(yè)技術(shù)部門并不是特別有解決的意愿和動(dòng)力。
2、需求迭代的產(chǎn)物
和教科書(shū)不同,職場(chǎng)上的需求是瞬息萬(wàn)變的,一些初入職場(chǎng)的人會(huì)覺(jué)得這公司需求經(jīng)常改,要求經(jīng)常變,無(wú)法接受,覺(jué)得是不規(guī)范,不健康的表現(xiàn);坦白說(shuō)一點(diǎn)吧,15年前,乃至20年前,我們說(shuō),印度的軟件業(yè)最為發(fā)達(dá),其開(kāi)發(fā)流程最為規(guī)范,當(dāng)時(shí)很多中國(guó)企業(yè)去學(xué)印度,學(xué)開(kāi)發(fā)規(guī)范;覺(jué)得印度在IT方面領(lǐng)先中國(guó)很遠(yuǎn),但是發(fā)展到今天,在互聯(lián)網(wǎng)大潮中,請(qǐng)問(wèn),哪個(gè)互聯(lián)網(wǎng)公司還會(huì)去印度取經(jīng)學(xué)習(xí)開(kāi)發(fā)流程和規(guī)范?請(qǐng)問(wèn)誰(shuí)還會(huì)說(shuō)印度比中國(guó)在互聯(lián)網(wǎng)研發(fā)領(lǐng)域領(lǐng)先? 問(wèn)題在哪里呢,中國(guó)互聯(lián)網(wǎng)產(chǎn)業(yè)之所以發(fā)展快就在于沒(méi)有包袱,敢想敢干,隨需應(yīng)變,作為定制開(kāi)發(fā),強(qiáng)調(diào)需求確認(rèn),強(qiáng)調(diào)定稿,但是這種模式在互聯(lián)網(wǎng)時(shí)代是自尋死路,你必須能隨時(shí)跟著需求走,跟著時(shí)代的潮流前進(jìn),你如果按照所謂的瀑布流去做項(xiàng)目,你做互聯(lián)網(wǎng),你必然沒(méi)有機(jī)會(huì),我剛畢業(yè)的時(shí)候,也遇到這個(gè)問(wèn)題,領(lǐng)導(dǎo)說(shuō),好好學(xué)軟件工程,今天我可以明確的告訴大家,在互聯(lián)網(wǎng)時(shí)代,軟件工程里的所有開(kāi)發(fā)思想,除了敏捷開(kāi)發(fā)值得學(xué)習(xí)外,其他的都可以不用再考慮! 如果你還認(rèn)為你的開(kāi)發(fā)需要明確的邊界條件,明確的需求確認(rèn),明確的發(fā)展路線,請(qǐng)離開(kāi)這個(gè)行業(yè)。
所以,問(wèn)題就出來(lái)了,一個(gè)產(chǎn)品,最初設(shè)計(jì)的目標(biāo)是A,但是開(kāi)發(fā)過(guò)程中突然發(fā)現(xiàn)B才是真正的目標(biāo),而好不容易把開(kāi)發(fā)一半的目標(biāo)A的系統(tǒng)轉(zhuǎn)為目標(biāo)B,上線之后又發(fā)現(xiàn)需要兼容C和D的目標(biāo),所以,新人過(guò)來(lái)一看,不了解這個(gè)背景,這個(gè)迭代的歷史,就會(huì)覺(jué)得,這系統(tǒng)誰(shuí)他媽的設(shè)計(jì)的,這邏輯怎么都是擰著的?沒(méi)辦法,不斷試錯(cuò),不斷調(diào)整,就是這樣過(guò)來(lái)的。
3、所謂的正確的架構(gòu),存在著你所不知道的坑
就好比上面說(shuō)的第三范式,新人來(lái)一看,你數(shù)據(jù)結(jié)構(gòu)各種冗余,你怎么不會(huì)第三范式啊,大學(xué)課程啊,因?yàn)樗恢郎婕胺植?,涉及?fù)載均衡的時(shí)候,這個(gè)第三范式無(wú)法滿足快速擴(kuò)展的需求。
所以很多時(shí)候,教科書(shū)上的一些范例,方法,并不適應(yīng)新的業(yè)務(wù)需求和應(yīng)用場(chǎng)景,而此時(shí),就會(huì)被只讀過(guò)教科書(shū)的孩子們認(rèn)為是,代碼太爛,技術(shù)太遜。
4、技術(shù)演進(jìn)中的印跡
一個(gè)多年運(yùn)營(yíng)的系統(tǒng),在演進(jìn)的過(guò)程中,會(huì)存在大量不同的參與者,每個(gè)參與者都會(huì)有自己的邏輯,想法,以及處理的方式,那么在代碼迭代中,技術(shù)的迭代往往是優(yōu)先考慮最緊迫的任務(wù),優(yōu)化最耗費(fèi)資源的模塊,在不斷迭代中,代碼的一致性和結(jié)構(gòu)的一致性可能就無(wú)法維持,導(dǎo)致一些本來(lái)架構(gòu)優(yōu)美的結(jié)構(gòu)可能只剩下兩三個(gè)模塊,新的迭代代碼替換了其他模塊,但是新人來(lái)一看就覺(jué)得,這模塊做的好復(fù)雜,好啰嗦,很多沒(méi)意義的東西塞在里面。請(qǐng)相信我,在優(yōu)美的技術(shù)結(jié)構(gòu),經(jīng)過(guò)幾茬這樣的迭代,都會(huì)變得面目全非,雜亂無(wú)章。然后等待下一個(gè)神來(lái)做整體的重構(gòu)。
5、側(cè)重點(diǎn)不同的考量問(wèn)題
比如說(shuō),新人發(fā)現(xiàn)一個(gè)報(bào)表系統(tǒng)效率很低,耗時(shí)很長(zhǎng),于是嘲笑,連索引都不會(huì)么,這么爛的結(jié)構(gòu)怎么設(shè)計(jì)的;但是他不知道的是,這個(gè)數(shù)據(jù)結(jié)構(gòu)首先要滿足一個(gè)非常非常巨量的每日數(shù)據(jù)新增,而后才要滿足每周一次的報(bào)表生成,那么,如果按照他認(rèn)為生成報(bào)表的優(yōu)美結(jié)構(gòu)來(lái)設(shè)計(jì),所增加的索引和數(shù)據(jù)字段的設(shè)計(jì),就會(huì)在日常帶來(lái)大量的i/o開(kāi)銷,數(shù)據(jù)新增的邏輯就會(huì)導(dǎo)致額外幾倍十幾倍的開(kāi)銷(不夸張),也就是說(shuō)需要很多臺(tái)額外的服務(wù)器來(lái)支撐,而收效確是,可以每周生成報(bào)表的時(shí)候從幾十分鐘縮短到幾秒鐘,那么,如果你是老板,你會(huì)同意這樣的方案么?
沒(méi)有全局觀,只從局部去看設(shè)計(jì),就會(huì)自以為是的認(rèn)為別人做的很爛,很垃圾。
6、資源緊缺的作品
大公司也會(huì)資源緊缺么?至少人力資源一直是緊缺的,比如有個(gè)緊急的活動(dòng),有個(gè)緊急的任務(wù),時(shí)間特別急,程序員只好急急忙忙從第三方開(kāi)源軟件抓了一段代碼,改吧改吧塞進(jìn)去了,反正業(yè)務(wù)滿足了,至于不好那也實(shí)在沒(méi)時(shí)間了,結(jié)果這個(gè)臨時(shí)活動(dòng)效果不錯(cuò),于是慢慢成為常態(tài)活動(dòng),而這個(gè)工程師又去干別的去了,這個(gè)代碼反正也沒(méi)出錯(cuò),那就一直跑著唄,新人來(lái)一看,這啥玩意啊,代碼東一榔頭西一棒槌,這程序員不會(huì)設(shè)計(jì)系統(tǒng)么?拜托,站著說(shuō)話不腰疼,真沒(méi)時(shí)間設(shè)計(jì)。
那么,下面要說(shuō),新人就不能提出現(xiàn)有系統(tǒng)的問(wèn)題么?就不能提出改進(jìn)的方案和建議么?
當(dāng)然可以,你進(jìn)入一個(gè)企業(yè)就是干這個(gè)的,公司花錢養(yǎng)你就是讓你來(lái)改進(jìn)系統(tǒng)提升業(yè)務(wù)支撐能力的。但是,這需要有一個(gè)正確的認(rèn)識(shí)和思路在前面。
第一,盡可能更完整的了解系統(tǒng),查看一套代碼的時(shí)候,了解所謂的爛和不好的起因是什么,歷史演進(jìn)的過(guò)程是什么,了解其在業(yè)務(wù)系統(tǒng)中的地位和價(jià)值是什么,有了一些認(rèn)識(shí)和理解后,再來(lái)思考所謂好和不好的問(wèn)題。
第二,從一個(gè)最有把握,結(jié)構(gòu)最簡(jiǎn)單的地方入手,用你認(rèn)為正確的方式修改一個(gè)最小的結(jié)構(gòu),然后通過(guò)測(cè)試,發(fā)布的流程,然后通過(guò)運(yùn)維和其他主管人員獲得反饋,了解改進(jìn)是否具備對(duì)舊版本的比較優(yōu)勢(shì),以及比較優(yōu)勢(shì)究竟有多大,多重要。不重要沒(méi)關(guān)系,但是你要了解是否這個(gè)改進(jìn)是正確的;完成第一個(gè)后,努力去完成第二個(gè),當(dāng)你能夠順利發(fā)布完成十個(gè)或更多的這樣的改進(jìn)和優(yōu)化,并確認(rèn)你的代碼比較優(yōu)勢(shì)確實(shí)明顯的時(shí)候,再來(lái)談別人的代碼爛不爛的問(wèn)題,如果你這些都做到了,不需要你來(lái)談,你的主管會(huì)看得到的。
第三,輕易不要談重構(gòu),輕易不要談重構(gòu),輕易不要談重構(gòu)
必須說(shuō)三遍
我講過(guò)一個(gè)架構(gòu)悖論,某些巨頭的技術(shù)架構(gòu)就出現(xiàn)過(guò),為了滿足所謂高擴(kuò)展性的原因,開(kāi)發(fā)人員做了一個(gè)特別復(fù)雜的邏輯關(guān)系特別龐雜的系統(tǒng),他們說(shuō)這個(gè)系統(tǒng)多花點(diǎn)時(shí)間是值得的,因?yàn)橐院竽阌行碌男枨罂梢造`活擴(kuò)展了!于是產(chǎn)品人員和運(yùn)營(yíng)耐心等待。
新系統(tǒng)上線后,市場(chǎng)發(fā)生了一些變化,新的熱點(diǎn)出現(xiàn),運(yùn)營(yíng)人員說(shuō),我們能不能增加一些你看那個(gè)那個(gè),那個(gè)那個(gè)功能。技術(shù)人員說(shuō),對(duì)不起,這個(gè)需求在我們?cè)O(shè)計(jì)的初期完全沒(méi)有考慮到,因?yàn)楝F(xiàn)在架構(gòu)太復(fù)雜了,所以這個(gè)版本肯定不能支持,你放心,下次重構(gòu)的時(shí)候我們會(huì)考慮的。
我對(duì)架構(gòu)的原則是,適度靈活,簡(jiǎn)單至上,你會(huì)發(fā)現(xiàn),越是簡(jiǎn)單的架構(gòu),遇到新的業(yè)務(wù)需求,改動(dòng)和升級(jí)越容易,很簡(jiǎn)單的一個(gè)道理,新的工程師進(jìn)來(lái)看代碼理解邏輯的成本低。所謂照顧更多的需求可能性,這么說(shuō)吧,人家設(shè)計(jì)了開(kāi)發(fā)語(yǔ)言,就是照顧更多需求的可能性,你難道也要設(shè)計(jì)一款開(kāi)發(fā)語(yǔ)言?
再說(shuō)一個(gè)我一直特別想吐槽的地方,php之所以被發(fā)明并且被快速傳播,成為流傳最廣的語(yǔ)言,是因?yàn)槟_本語(yǔ)言是滿足需求最快最簡(jiǎn)單的方法,門檻極低,開(kāi)發(fā)測(cè)試極為簡(jiǎn)單方便,但是現(xiàn)在一堆人搞各種php框架,好像不做框架就不是php開(kāi)發(fā)一樣,我就不明白了,你想搞框架你用php干嘛啊,人家好不容易把事情弄簡(jiǎn)單了,你又咔嚓咔嚓弄回去了,我現(xiàn)在看著那些所謂可以靈活擴(kuò)展的框架就頭大,簡(jiǎn)直是莫名其妙,最后就是學(xué)習(xí)成本極大增加,調(diào)試成本極大增加,優(yōu)化成本極大,極大,極大增加,面對(duì)高并發(fā)場(chǎng)景,優(yōu)化難度比原生態(tài)開(kāi)發(fā)高了不止一個(gè)數(shù)量級(jí)。 當(dāng)然,這個(gè)是題外話,和今天主題無(wú)關(guān)。
回到重構(gòu)話題
徹底理解業(yè)務(wù)邏輯,盡可能做到360度無(wú)死角理解各種業(yè)務(wù)邏輯之間的關(guān)系,(如果你處于巨頭公司,能做到這一點(diǎn)幾乎可以封神!)
徹底理解當(dāng)前架構(gòu)的演進(jìn)過(guò)程(中間踩了多少坑,有多少發(fā)展中的問(wèn)題都是怎么解決的,如果不理解,請(qǐng)相信我,你絕對(duì)會(huì)再踩一遍!)
徹底理解各個(gè)模塊的調(diào)用關(guān)系和彼此的依存關(guān)系。
徹底理解當(dāng)前架構(gòu)的瓶頸和問(wèn)題。(前提是必須知道這個(gè)架構(gòu)為什么能work,否則這個(gè)理解等于不理解!)
然后再去談重構(gòu)的話題。
最后一點(diǎn),強(qiáng)調(diào)一下,問(wèn)題即機(jī)會(huì)
如果你發(fā)現(xiàn)一個(gè)巨頭依然存在很多技術(shù)上連你都覺(jué)得不對(duì)的問(wèn)題,你應(yīng)該高興才對(duì),這不是你的機(jī)會(huì)么?但是你要明白,哪些是真的問(wèn)題,哪些是你涉世不深的誤會(huì),你一步步解決這些問(wèn)題,在解決過(guò)程中一步步理解系統(tǒng),到一定程度,你會(huì)明白更多,理解更深;只是站出來(lái)喊,這些垃圾那些垃圾,只能暴露你的淺薄和無(wú)知。 又要重復(fù)那句可能掉友善度的話,別做教科書(shū)般的SB。