在浩大的軟件世界裏,做爲一名普通程序員,顯得十分眇小,甚至會感到迷茫。咱們心裏崇拜技術,卻也對突飛猛進的技術抱有深深的恐懼。技術市場就像這喜怒不定的老天爺,今天下個大數據雨,明天刮我的工智能風,面對琳琅滿目的技術浪潮的衝擊,程序員不免深感無力,深怕錯過了技術潮流從而失去了職場競爭力。有時候我會思考難道在技術領域內不斷緊跟新潮,不斷提高技能就是個人價值所在?那麼我是技術的主人仍是技術的奴隸?
人之因此迷茫每每是找不到工做生活的重心,感覺不到工做或生活的價值。那麼什麼是價值呢?說的大一點就是我改變了世界,說的小一點就是個人所做所爲改善了某些問題。若是不清楚本身的行爲、目標、價值三者的關係,那麼又何來重心?又如何能分得清重要性與優先級呢?
程序員的迷茫不只僅是面對技術繁雜的無力感,更重要的是由於長期埋沒於軟件世界的浩大的分工體系中,沒法看清從業務到軟件架構的價值鏈條,沒法清楚定位本身在分工體系的位置,處理很差自身與技術、業務的關係所致。
不少程序員打心底不喜歡業務,這一點我曾經也經歷過,我更寧願從事框架工具、技術組件研究的相關事情。我有個朋友常常吐槽我說:"大家每天加班加點寫了那麼多代碼,而後呢?有改變什麼嗎?還不是寫出了一堆垃圾。"仔細想一想不少時候業務在咱們腦海中存留的只是邏輯和流程,咱們丟失的是對業務場景的感覺,對用戶痛點的體會,對業務發展的思考。這些都是與價值緊密相關的部分。咱們很天然的用戰術的勤快掩蓋戰略的懶惰!那麼這樣的後果就是咱們把本身限死在流水線的工位上,閹割了本身可以發現業務價值的能力,而過多關注新技術對職場競爭力的價值。這也就是咱們面對繁雜技術,而產生技術學習焦慮症的根本緣由。程序員
那麼什麼是業務呢?就是指某種有目的的工做或工做項目,業務的目的就是解決人類社會與吃喝住行息息相關的領域問題,包括物質的需求和精神的需求。使開展業務活動的主體和受衆都能獲得利益。通俗的講業務就是用戶的痛點,是業務提供方(好比公司)的盈利點。而技術則是解決問題的工具和手段。好比爲了解決用戶隨時隨地購物的業務問題時,程序員利用web技術構建電子商務App,而當需求升級爲幫助用戶快速選購商品時,程序員會利用數據算法等技術手段構建推薦引擎。技術若是脫離了業務,那麼技術應用就沒法很好的落地,技術的研究也將失去場景和方向。而業務脫離了技術,那麼業務的開展就變得極其昂貴和低效。web
因此回過頭來咱們想一想本身沒日沒夜寫了那麼多的代碼從而構建起來的軟件系統,它的價值何在呢?說白了就是爲了解決業務問題,因此當你所從事的工做內容並不能爲解決業務問題帶來多大幫助的時候,你應該要及時作出調整。那麼軟件系統又是如何體現它自身的價值呢?在我看來由以下方面體現:面試
互聯網公司正是藉助大規模的軟件系統承載着繁多的業務功能,使其擁有巨大的服務能力並藉助互聯網技術突破了空間限制,高效低廉解決了業務問題,創造了豐厚的利潤,這是人肉所不可比擬的。
理解了這一層面的概念,你就能夠清楚這個價值鏈條即:公司依靠軟件系統提供業務服務而創造價值,程序員則是經過構建並持續演進軟件系統服務能力以及業務功能以支撐公司業務發展從而創造價值。
有了這個價值鏈條,咱們就能夠反思本身的工做學習對軟件系統的服務能力提高起到了多大的推進做用?能夠反思本身的工做學習是否切實在解決領域的業務問題,仍是隻是作一些意義不大的重複性工做。
前兩天面試了一個候選人,他的工做是從事票務系統開發,他說本身在研究linux內核與彙編語言,我就問他linux內核和彙編語言的學習對你的工做產生了哪些幫助?可否舉一個例子?他啞口無言,我心裏就以爲這樣一個熱愛學習的好苗子正迷茫找不到重心,正在作一件的浪費精力的事情。正確的學習方式應該是將學習與具體業務場景結合起來,和公司經過軟件系統開展業務服務而創造價值,程序員經過提高軟件系統服務能力創造價值這一鏈條串接起來,從對這些價值產生幫助的程度去思考優先級。學習自己沒有錯,錯的每每就是那顆初心
如今你再來看高併發分佈式相關的知識,你會發現並非由於這些知識比較高深、比較時髦,不少公司有需求才值得學習,而是他們對價值鏈條有着實實在在的貢獻。算法
一談到軟件系統,人們免不了想起架構這件事來。之因此此處去談及架構是由於每個程序員本質都是軟件架構體系中的一分子,咱們可能深埋於體系流水線之中,感覺不到位置和價值。但若是站在架構這一高度去看這些問題則將會很是透徹。那麼架構到底是什麼?和上述的價值鏈又有什麼關係呢?數據庫
在我看來軟件架構就是將人員、技術等資源組織起來以解決業務問題,支撐業務增加的一種活動。可能比較抽象,我想咱們能夠從架構師的一些具體工做任務來理解這句話含義:編程
因此軟件架構不只僅只是選用什麼框架、選用什麼技術組件這麼簡單。它貫穿了對人的組織、對技術的組織、對業務的組織,並將這三種組織以解決業務問題這一目標有機的結合在了一塊兒。
不少面試的候選人在被問及他所開發的系統採用什麼架構的問題時,只會羅列出一些技術組件、技術框架等技術要素,這樣看來其根本沒有理清架構的深層含義。也有一些架構師只專一對底層技術的研究,覺得打造一個卓越的系統是很是牛逼的事情,但是他忽略了軟件系統的價值是以解決業務問題的能力、支撐業務增加的能力爲衡量標準,因此最後生產出了不少對組織,對業務沒有幫助的系統。設計模式
正如以前所說軟件系統只有在運行的時候才能創造價值,也就是說軟件系統可否7*24小時*365天穩定的工做關係到公司的收益水平。因此開發團隊對生產環境的發佈老是當心翼翼,對解決生產環境的問題老是加班加點。而軟件系統的成本則體如今軟件構建過程,這時候咱們就能理解那些工程技術如項目管理、敏捷開發、單元測試、持續集成、持續構建,版本管理等的價值了,他們有的是保證軟件系統正確性,有的是爲了下降溝通成本,有的是爲了提高開發效率等但總的來講就是爲了下降軟件的構建成本。因此在提高系統服務能力,創造更多業務收益的同時,下降構建成本也是一種提高收益的有效手段。
做爲一名軟件工程師而言,咱們每每處在軟件構建過程體系中的某個環節,咱們能夠基於成本與收益的關係去思考本身每一項技能的價值,學習新的有價值的技能,甚至在工做中基於成本與收益的考量選擇合適的技術。好比在邏輯不大發生變化的地方,沒有必要去作過多的設計,應用各類花俏的設計模式等浪費時間。這樣咱們才能成爲技術的主人。網絡
架構的目標就是爲了支撐業務增加,就是提高軟件系統的服務能力。但是話雖然說如此,但真實卻要作不少取捨。好比對初創團隊而言,其產品是否解決業務問題這一設想還沒獲得確認,就當即去構造一個高性能、高可用的分佈式系統,這樣的架構目標遠超出業務發展的需求,最後的結果就是浪費大量人力物力,卻得不到任何轉機。架構師須要審時度勢,仔細衡量正確性、大規模、可用性三者的關係,好比今年業務蓬勃發展日均訂單300萬,基於對將來的可能預測,明年可能有3000萬的訂單,那麼架構師應該要着重考慮大規模和可用性。並且每一點提高的程度,也須要架構師衡量把握,好比可用性要達到2個9仍是3個9。
回顧本身以往的工做不少時候就是由於沒有確立架構目標緻使浪費了組織不少資源,好比在以前的創業團隊中,因爲本人有必定的代碼潔癖,常常會花費不少時間和同事計較代碼質量,這樣本能夠更快上線的功能卻須要被延遲,當時過分追求正確性的行爲是與創業團隊快速驗證想法的業務需求不匹配的。另一點比較深入的案例則是在本人擔任一個技術團隊負責人的時候,在一次述職報告的時候,leader問我對接下來團隊工做有什麼計劃?我當時說了一堆什麼改進代碼質量,天天晨會,任務透明化,創建迭代機制等等,而後就被各類批駁一通。當時團隊基本之外包人員爲主,人員水平較差,開發出來的金融系統也是千瘡百孔而這條業務線最重要的業務價值則是按計劃實現潛在投資方的需求,爭取拉到投資。因此不久leader就召集測試架構的相關人員與我這邊一同梳理對核心功能的測試工做,將研發、測試、上線的流程自動化。當時並不理解這樣作核心價值是什麼?但回過頭來看這樣的工做方式剛好符合了業務發展的需求,即確保系統是符合設計需求的,保證系統達到可接受的正確性,爲後續能過快速前進打下基礎,最重要的是爲企業下降了構建成本。因此程序員想要工做出業績,必須認清楚系統背後的業務價值,按價值去梳理工做優先級,而不是像我通常過分糾結細節,追求技術理想化。架構
正如在程序員的迷茫那一章節提到的:程序員的迷茫由於長期埋沒於軟件世界的浩大的分工體系中,沒法看清從業務到軟件架構的價值鏈條,沒法清楚定位本身在分工體系的位置,處理很差自身與技術、業務的關係所致,因此在這裏我想談談分工。架構師爲了使軟件系統更好的服務業務,必然將軟件系統生命週期進行拆分,好比分出開發生命週期、測試生命週期、用戶訪問生命週期、軟件運維生命週期。並根據不一樣的生命週期劃分出不一樣的職責與角色,好比開發人員負責開發週期負責完成軟件研發,測試人員負責對開發人員交付的成果進行測試等,因而就造成了分工。一旦分工造成,每個分工組織都會有本身的價值追求,架構師關注的頂層的價值即軟件系統可否支撐業務增加被分工的形式打碎到各個組織中。分工是有其價值的,他使得複雜昂貴的任務能夠被簡單、並行、可替換的流水線方式解決。但長此以往,價值碎片化的問題就出現了,好比測試人員只關注找出更多問題,開發人員只關注快速開發更多的系統,運維人員只關注保障系統穩定。三者之間經常都只站在本身的立場去要求對方怎麼作,沒有人再關注總體價值,產生諸多矛盾增長軟件實施成本。而身處流水線中的一員,又由於困擾於重複性工做,迷茫於工做的意義,甚至感受本身作爲了人的創意與靈感都被扼殺了。因此個人朋友吐槽我說你寫了那麼多代碼而後並無怎麼樣是很是有道理的,那是由於我只關注着作爲流水工人的價值要求,看不到生態鏈最頂端的價值。
咱們仔細想一想那些團隊領導,精英領袖哪個不是爲着更廣大的價值所負責,好比項目經理只須要關心自身項目的商業價值,而公司CEO則關心公司範疇內全部業務的整體商業價值。因此關注的價值越大且職位也就越高。這些高層領導者們把控着總體的價值鏈條,及時糾正底層分工組織的價值目標與總體價值目標出現誤差的問題。
迷茫能引起思考,架構則塑造了視野,而價值則是咱們之因此存活,之因此工做的邏輯起點。基於這樣一種價值思惟,對咱們的學習和工做又能夠有哪些改啓示呢?
做者:D調的暖冬
連接:https://www.jianshu.com/p/6ebf289d0e05