如果按照以往的慣例蟀架,我會在標(biāo)題前面加個詞簡單描述一下。但在寫這篇文章時慧域,我想了很久鲤竹,都沒想出什么詞可以滿足“簡單的描述一下”。所以就不寫了昔榴。
還是從工作先談起辛藻,因為工作在我看來挺重要的。
工作
今年年中的時候去了另一條產(chǎn)品線互订,做流處理的吱肌。想去的原因是因為好奇心害死貓——總是聽到他們在聊一些感覺很酷很好玩的東西,有時還聽的一臉懵逼仰禽,產(chǎn)生了許多疑惑氮墨。
去了以后,部分問題在實戰(zhàn)和日常的學(xué)習(xí)中找到了答案吐葵。但有些答案引起了我更多的疑問规揪,直到觸碰到了我盲區(qū),驅(qū)使我開始新一輪的學(xué)習(xí)温峭。這就是下半年我技術(shù)博客更新頻率降低的原因——我在花時間輸入猛铅,而不是輸出。
我在新的產(chǎn)品線中完成業(yè)務(wù)的同時也把一些自動化設(shè)施引入了進去凤藏。自動化測試work了奸忽,但覆蓋率不高堕伪,因為需求方希望我們能快點出個“樣品”,基本能用就行月杉。
在明確確定這種“盡快出刃跛,基本能用就行”的情況下。自然而然只能加快步伐跟上——畢竟我們得先有(錢)苛萎,再變得更好(的質(zhì)量)桨昙。但這筆欠下的技術(shù)債務(wù),開發(fā)們遲早是要還的腌歉,而且越早還越好蛙酪。
如果技術(shù)債務(wù)能夠還上,這種情況還是可以接受的翘盖。讓人感到心累的更多是一些“長期斗爭”——需求方日常覺得這個很簡單兩三天就寫出來了桂塞,而業(yè)務(wù)方思考的不僅僅是讓這個功能work起來。顯然馍驯,這里是有矛盾的阁危。在這里,可以引用《架構(gòu)整潔之道》的內(nèi)容來展開汰瘫。
對于每個軟件系統(tǒng)狂打,我們都可以通過行為和架構(gòu)兩個維度來體現(xiàn)它的實際價值 。
行為價值是最直觀的價值緯度——開發(fā)的工作就是讓機器按照某種指定方式運轉(zhuǎn)混弥,給系統(tǒng)的使用者創(chuàng)造或者提高利潤 趴乡。 開發(fā)們?yōu)榱诉_到這個目的,往往需要幫助系統(tǒng)使用者編寫一個對系統(tǒng)功能的定義蝗拿,也就是需求文檔 晾捏。 然后,開發(fā)們再把需求文檔轉(zhuǎn)化為實際的代碼 哀托。
當(dāng)然惦辛,當(dāng)機器出現(xiàn)異常行為時,程序員要負(fù)責(zé)調(diào)試仓手,解決這些問題 胖齐。
大多數(shù)開發(fā)就是這么想的——他們僅僅看到了軟件這一層面的價值。顯然這是有問題的俗或。
軟件系統(tǒng)的第二個價值維度市怎,就體現(xiàn)在軟件這個英文單詞上 :software
岁忘。 的意思是“產(chǎn)品”辛慰,而soft
的意思,不言而喻干像,是指軟件的靈活性帅腌。
軟件系統(tǒng)必須保持靈活 驰弄。軟件發(fā)明的目的,就是讓我們可以以一種靈活的方式 來改變機器的工作行為 速客。對機器上那些很難改變的工作行為戚篙,我們通常稱之為硬件( hardware )。
為了達到軟件的本來目的溺职,軟件系統(tǒng)必須夠 “軟”一一也就是說岔擂,軟件應(yīng)該容易被修改。當(dāng)需求方改變需求的時候浪耘,隨之所需的軟件變更必須可以簡單而方便地實現(xiàn)乱灵。變更實施的難度應(yīng)該和變更的范疇( scope )成等比關(guān)系,而與變更的具體形狀 ( shape )無關(guān) 七冲。
需求變更的范疇與形狀痛倚,是決定對應(yīng)軟件變更實施成本高低的關(guān)鍵。這就是為 什么有的代碼變更的成本與其實現(xiàn)的功能改變不成比例澜躺。這也是為什么很多公司第二年的研發(fā)成本比第一年的高很多蝉稳,第三年又比第二年更高 。
從系統(tǒng)相關(guān)方 ( Stakeholder )的角度來看掘鄙,他們所提出的一系列的變更 需求的范疇都是類似的耘戚,因此成本也應(yīng)該是固定的 。但是從研發(fā)者角度來看通铲,系統(tǒng)用戶持續(xù)不斷的變更需求就像是要求他們不停地用一堆不同形狀的拼圖塊毕莱,拼成一個新的形狀。整個拼圖的過程越來越困難 颅夺,因為現(xiàn)有系統(tǒng)的形狀永遠(yuǎn)和需求的形狀不一致 朋截。
我們在這里使用了“形狀”這個詞,這可能不是該詞的標(biāo)準(zhǔn)用法吧黄,但是其寓意應(yīng)該很明確部服。畢竟,軟件工程師們經(jīng)常會覺得自己的工作就是把方螺絲擰到圓螺絲孔里面 拗慨。
問題的實際根源當(dāng)然就是系統(tǒng)的架構(gòu)設(shè)計廓八。如果系統(tǒng)的架構(gòu)設(shè)計偏向某種特定的“形狀”,那么新的變更就會越來越難以實施 赵抢。所以剧蹂,好的系統(tǒng)架構(gòu)設(shè)計應(yīng)該盡可能做到與“形狀”無關(guān) 。
那么烦却,究竟是系統(tǒng)行為更重要宠叼,還是系統(tǒng)架構(gòu)的靈活性更重要?哪個價值更大?系統(tǒng)正常工作更重要冒冬,還是系統(tǒng)易于修改更重要伸蚯?
如果這個問題由業(yè)務(wù)部門來回答,他們通常認(rèn)為系統(tǒng)正常工作很重要 简烤。開發(fā)們常常也就跟隨采取了這種態(tài)度剂邮。但是這種態(tài)度是錯誤的。下面我就用簡單的邏輯推導(dǎo)來證明這個態(tài)度的錯誤性横侦。
- 如果某程序可以正常工作挥萌,但是無法修改,那么當(dāng)需求變史的時候它就不再能夠正常工作了 枉侧,我們也無法通過修改讓它能繼續(xù)正常工作 瑞眼。 因此,這個程序的價值將成為0棵逊。
- 如果某程序目前無法正常工作伤疙,但是我們可以很容易地修改它,那么將它改 好辆影,并且隨著需求變化不停地修改它徒像,都應(yīng)該是很容易的事 。 因此蛙讥,這個程序會持續(xù)產(chǎn)生價值锯蛀。
當(dāng)然,上面的邏輯論斷可能不足以說服大家次慢,畢竟理論上沒有什么程序是不能修改的旁涤。但是,現(xiàn)實中有一些系統(tǒng)確實無法更改迫像,因為其變更實施的成本會遠(yuǎn)遠(yuǎn)超過變更帶來的價值 劈愚。你在實際工作中一定遇到過很多這樣的例子 。
如果你問業(yè)務(wù)部門闻妓,是否想要能夠變更需求菌羽,他們的回答一般是肯定的,而且他們會增加一句:完成現(xiàn)在的功能比實現(xiàn)未來的靈活度更重要由缆。但諷刺的是注祖,如果事后業(yè)務(wù)部門提出了一項需求,而你的預(yù)估工作量大大超出他們的預(yù)期均唉,這幫家伙通常會對你放任系統(tǒng)混論到無法變更的狀態(tài)而勃然大怒是晨。
另外一點是我在今年招人時變得更佳嚴(yán)苛了。我認(rèn)為舔箭,一個好的程序員能不能頂上兩個普通程序員不好說罩缴。但是一個差的程序員一定會搭上兩個好的程序員的精力。背后的心酸事跡就不說了。如果代碼規(guī)模再上去靴庆,這個比例還會被放大。不過今年還是從V2上招到一個聰慧皮實的小伙子怒医,真是太好了炉抒!
關(guān)于技術(shù)上細(xì)枝末節(jié)的就不多說了。就說一點吧稚叹,今年我成功的把Kotlin引入了產(chǎn)品線焰薄,能讓產(chǎn)品線的開發(fā)們更愉快的寫代碼,畢竟Java還是偏verbose的扒袖。同時我也感受到了函數(shù)式編程的精妙之處塞茅,并對編譯器產(chǎn)生了興趣。最近還在用Go寫一些小玩意兒季率,不得不說學(xué)過Kotlin以后切過去還是挺舒服的野瘦。
學(xué)習(xí)
今年學(xué)的東西還挺聚焦的,就兩塊——錢和專業(yè)技能飒泻。
“錢”這個字說的很俗鞭光,不過很實在,因為我就是為錢才去學(xué)的泞遗。不過無論從學(xué)的過程還是結(jié)果來看惰许,既滿足了我目的,也滿足了我的一些好奇心史辙⌒诼颍總的來說,挺好的聊倔。
“錢”一個字晦毙,也說的很泛。實際上耙蔑,我看的是一些宏觀經(jīng)濟和理財相關(guān)的東西结序。并結(jié)合實際情況,運用到了自己的理財中纵潦。今年基金定投部分的理財收益率為6.9%徐鹤,所有資產(chǎn)的理財收益為6%個點。
但今年以來滬深漲了37.95%邀层,簡直是天差地別返敬。這有三個原因:
- 因為是定投,而不是在年初全部買進寥院。
- 頭輕腳重劲赠。我在下半年加大了基金的定投金額(職級晉升),上半年1-4月份這波行情沒吃到。
- 選錯了雞凛澎。有兩只雞是從年初定投霹肝,到11月份的時候發(fā)現(xiàn)收益率不到3個點。我手里還有一只雞 塑煎,那個時候已經(jīng)有19個點了沫换。
關(guān)于第三點。避免這種問題以后再發(fā)生的方法就是多買幾只雞分散風(fēng)險了(分散基金經(jīng)理腦抽的風(fēng)險)最铁。有人可能會說指數(shù)型基金才是最好的balabala讯赏。但事實并非如此,我國的股市并不成熟冷尉,散戶較多(較米國)漱挎。就目前來看,主動型基金是能跑贏指數(shù)型基金的雀哨。
在11月的時候磕谅,我趁著結(jié)賬行情買入了一些股票。與此同時雾棺,我開始研究如何了解一家公司怜庸。大致通俗的講幾個點:
- 行業(yè)所處生命周期?即做這個行當(dāng)有前途與否
- 行業(yè)規(guī)模垢村?有多大的蛋糕可以分
- 公司處在的宏觀大背景是什么樣的割疾?即正所謂時勢造英雄
- 商業(yè)模式是什么?即怎么賺錢
- 所處產(chǎn)業(yè)鏈的位置嘉栓?有沒有話語權(quán)
- 公司的增長來源宏榕?
- 護城河?核心競爭力——成本控制侵佃、無形資產(chǎn)等
- 船長麻昼。初期時創(chuàng)始人至關(guān)重要,規(guī)模大起來后需要依靠管理制度
這樣就能挑選出一個好公司了嗎馋辈?或許吧抚芦。但是好公司也有三種好公司,即:
- 對員工好的公司
- 對客戶好的公司
- 對投資人好的公司
這看起來似乎是個不可能三角迈螟。不過這得取決于我們屁股坐在哪里——如果我們是股民叉抡,我們當(dāng)然要找對投資人好的(比如多分紅,多回購)答毫;如果我們是員工褥民,那么就得找對員工好的公司(比如錢多,給你平臺成長)洗搂。
了解這些消返,對我職業(yè)生涯的規(guī)劃是有一定幫助的载弄。
專業(yè)技能,今年的趨勢是逐漸往下沉淀——當(dāng)然應(yīng)用層的知識得滿足現(xiàn)狀撵颊。往下沉淀一部分是興趣使然宇攻,一部分也是業(yè)務(wù)中有用到相關(guān)的知識。這樣自然是好的倡勇,有動力逞刷,有反饋。
今年看的書不算多译隘,就10多本。有兩本對我影響比較大洛心,一本是Robert C.Matrin的《架構(gòu)整潔之道》固耘,如果說日常的寫代碼和學(xué)習(xí)是在練基本功,那么看完這本書感覺就像被打通了任督二脈词身。
還有一本就是吳軍的《格局》厅目,書中的部分內(nèi)容解決了我長期以往的疑惑,還有幾個點我甚至從來都沒有想到過法严,收獲頗豐损敷。
最后貼個年度概覽吧。
極客時間:
得到:
話說回來深啤,在翻得到和極客時間的年度總結(jié)時拗馒,還是讓我有點小震驚的
說好的不熬夜呢?
生活
先說一下健身的事溯街,去年立的flag沒有實現(xiàn)诱桂。體脂目前是16個點左右,體重快80了呈昔。原因是最近幾個月做俯臥撐把上半身做壯了..
至于跑步挥等,曾在狀態(tài)好的時候想試一下半馬。但跑多了膝蓋有點不適堤尾,所以就及時停了肝劲。
今年跑過的最長距離是1.3w米,極限還是1.5w米吧郭宝。加上所有的運動項來估計(因為Keep的年度報告還沒出來)辞槐,平均每周的運動時間應(yīng)該有300分鐘以上。
作為一個對旅行無感的人粘室,今年卻走過了4個城市——看著一些朋友結(jié)婚催蝗。朋友圈里的同學(xué)們也慢慢到了結(jié)婚育子的階段。而我也找到了能一起過日子的對象育特,大概這就是緣分吧丙号。按照我原本想法先朦,我想浪到30歲的。
望著可期的未來犬缨,我些許穩(wěn)重了喳魏。
明年想做的
工作上,當(dāng)務(wù)之急是先解決對幾個開源組件了解不夠深的問題(這使我們在踩坑時要花很長的時間來脫坑)怀薛,以及自動化測試的落地刺彩,在此同時整個架構(gòu)也松耦了。再對其他場景下需要的組件枝恋、邏輯以插件的形式靈活的加到項目中创倔。團隊方面的在這里不方便細(xì)說,就跳過了焚碌。
關(guān)于專業(yè)的學(xué)習(xí)畦攘,我還是希望保持現(xiàn)在的節(jié)奏——即對業(yè)務(wù)中使用到的技術(shù)進行挖掘,并尋找機會向下沉淀十电。其他方面知押,我會繼續(xù)了解“錢”相關(guān)的一些事。另外鹃骂,我還想看一些數(shù)學(xué)通識相關(guān)的書籍台盯。
健身相關(guān)的,還是希望自己能夠把體脂降下去畏线,到14個點静盅。早日練成半馬。其他的保持現(xiàn)狀就行寝殴。
結(jié)語
活在2019年里的時候温亲,總有一種時間過得時快時慢的感覺,但它已經(jīng)過去了杯矩≌恍椋活在今天看以往,那些事仿佛就一剎那史隆。只有看看以前的照片魂务,看看以前的博客,看看身邊的人泌射,才知道自己是這么活過來的粘姜。