「模仿」是架構師的基本能力:守破離
本文作者曲健,1024生人,天選程式設計師,漿糊人送外號“大爺Dà Yé”,目前在奧琪科技擔任首席架構師一職。
二零一八留不住,朱顏辭鏡花辭樹。
鄙人平素喜偶厭奇,以致現在對2019仍避之不及、興致索然,更羞愧的是原本想對2018之前人生做的總結也憋到現在...
人這一生,有人從上半場甚至一開場已策馬揚鞭絕塵而去,而有人混沌半生卻依然摸索不到那道門。不才無甚特長唯虛活三十餘載,終究有些人生閱歷(通俗點叫失敗經驗)可與君分享一二。今兒我們們就說道說道“模仿”這件事。
- 謹"守"模仿天性 -
模仿是人類預設出廠設定能力之一,生而為人,始於“模仿”。父母的語言語態、行為舉止都會成為孩子的模仿物件。孩童會因模仿到大人的一招半式而洋洋自得,成人卻因“行與他人雷同之事”頓感不自在甚至羞恥,根源上還是把模仿對標成了另一個概念:
山寨!
山寨更多的是一種抄襲甚至剽竊,與作為有效學習手段的模仿不可同日而語。
這段充滿剛正之氣的名言論述是講課用的。實情卻是,模仿的第一步往往就靠無腦複製,嚴重點說就是抄襲。
如同沒人會說孩童“山寨”成人,畢竟如此就有降維打擊的嫌疑。在成人的世界裡,很少有人會承認自己在低維空間,本就同維,我模仿你豈不掉價?更可悲的是一旦開始模仿,就很難不被人扣上山寨的帽子。
日貨曾幾何時是“質量過硬”產品的代名詞,殊不知日本就是抄襲鼻祖。始自隋唐時代,日本已經開始大面積抄襲中國文化,一如茶道、劍道、花道等日本八道都是汲取中國文化後形成的自己特有的道,這些大家基本都知道的且拋開不談。就說近代,二戰後的日本經濟蕭條,百廢待興,為了重振經濟,山寨成了日本選擇的一條捷徑。巧克力、漫畫、家電、相機以及汽車等等,日本全部山寨過。而日貨有如今的地位,與其後續一系列的改革創新、科技教育等手段是分不開的。
有興趣可以搜尋一下日本CopyCat視訊,看完你會發現國內的那些極品山寨康帥博、大個核桃、農民山泉、粵利粵...大家山寨水平都不過爾爾。
而德國曾經也好不到哪去。1887年,德國製造"Made in Germany"恥辱性的進入了英國的商標法條款,被英國人用來區分“英國製造”的優品和"德國製造"的劣品。那時候的德國也是各種仿製和山寨,不過也僅僅過去十幾年,德國人就把"德國製造"這頂代表恥辱的帽子搖身變成了金字招牌的代名詞至今。您看,隨便掀個底兒,抄襲黑歷史俯拾皆是,誰也就別笑話誰了。
DàYé自述:
職業生涯冷啟動菜鳥期通常會伴隨著各種不期而遇的迷茫。當你這也不會那也不會,這也想學那也想學的時候,迷茫、無助或者焦慮就隨之而來。還好黑夜給了我黑色的眼睛,我踏踏實實的用來找尋光明。
最開始使用VB6、PRO*C 編碼的我,鬼使神差的選擇了JAVA高手、TOP ? 程式設計師作為模仿物件(當時的我執著地確信Web應用才是未來趨勢,也真是眼光毒辣),列舉如下,不一而足:
特別說明:下述文字只是對本人當時的模仿行為進行陳述,並不代表它們是正確的,請自行甄別。
$ 程式設計風格:學習並效仿高手的程式碼風格。我的程式碼潔癖就是這段時間養成的,見不得格式亂、忍不了沒靈魂。沒有註釋沒有異常處理沒有日誌沒有"斷句"一口氣寫幾百上千行的程式碼,註定是沒有靈魂的流水賬;
$ 工欲善其事必先利其器:NetBeans/ JBuilder/ Eclipse/ MyEclipse之間的各種IDE鄙視(那時候還沒有Intellij IDEA啥事),高手用什麼自己就用什麼,無須糾結高手糾結過的;
$ 理論知識:購買並閱讀高手推崇的一切好書,雖然很多沒啃完,但是讀書絕對可以加速知識體系的構建程式。現在很多IT培訓機構流水線上組裝的“速成”產品,就特別容易出現知識殘缺、根基不穩,陷入盲目/機械/重複勞動的泥潭,卻以為這就是常態的碼農形態;
$ 熱點趨勢:RSS(上古神器之一)訂閱高手推薦的各類源站:技術熱點/大神部落格/業界資訊...學習成長路絕對不能悶頭行進,必須學會抬頭看路認清大勢;
$ 動手能力:身為程式設計師不會搭建網站,不會做GUI小應用,不會 Excel 公式,不會搜尋,不會 番羽 土嗇 ... 比小姐姐讓你拆機箱擦個灰都不會還要惡劣。 現在很多程式設計師應該沒見識過以前的企業應用本地環境的搭建、啟動、部署和測試,那叫一個繁瑣(現在對IBM WebSphere的那套產品仍舊心有餘悸),曾經有些人從入職到離職都不知道這一套環境怎麼運作的,安心做一名"流水線工人"。
$ 程式設計師的高傲:提交的程式碼被任何人讀起來都應該是優雅的;交付給測試的功能點一定是自己反覆驗證過的,出現低階BUG丟不起那人;敬畏生產環境,上線指令碼/配置/變數/步驟/困難全都羅列的一清二楚,上線失敗如同過掉門將面對空門將球打飛,可笑又可恥。
$ 裝逼套路:能用命令列絕不用圖形介面,能用快捷鍵絕不用滑鼠,IDE必須黑色主題,桌面牆紙必須個性,案頭必備一本英文原版書(就算墊顯示器),必須盲敲數字鍵(別笑,我不認為現在程式設計師有多少可以做得到或者做得6)
Google -> Creative Desktop Wallpapers
題圖:瀏覽器選項裡沒有IE, So Chrome Or FireFox?
總之,在程式設計起步的這段模仿路上,從例行工作到三餘讀書,從照搬仿效到習慣養成,從實際行為(形)到思想境界(神),其實你會發現這模仿本身也是個成長的過程,只是這路不是你自己摸索的而是踩著前人的腳印。您再看,這個過程緣何我模仿的自得其樂?因為我把自己視作孩童,放低身段,自降一維,只求成長。
好的模仿必須找到對的物件
通常大部分人選擇的模仿物件通常無非是自己的偶像、長輩、老師或者業界權威、KOL等等。有些模仿並不一定具有特別明確的目的性,就像有多少人因為喬丹籃球之神,23成為了自己的幸運號碼。除此之外的大部分模仿一定帶有某些目的性,所以一旦選錯模仿物件,為此承擔的成本可能會無比巨大。靠譜的“選擇模仿物件”的過程應該是這樣的:模仿者有能力對自身的基礎優劣指標有基本的認知,知曉被模仿者的哪些特質、行為或能力是無害的、有益的、榜樣的和相當一段時間內自己想要努力追逐的,雙方綜合評估後可得Yes Or No。
- 榜樣 VS 偶像 -
就模仿而言,我希望是榜樣的力量,而不是偶像的力量,這兩者有本質區別。榜樣是你還沒達到但是想成為的人(或人的某種特質),偶像是你想接近但是不想成為的人。馬雲說過類似的話,"我沒有偶像只有榜樣"。大家可以品一品其中意味。
愛因斯坦有個經典的“司機”的故事,說愛因斯坦的司機長期陪著他各地演講,聽多了也就倒背如流了,就像靈山上聽佛祖講道瞬間成精的妖怪似的,自告奮勇申請代愛因斯坦去講一堂課,結果這哥們確實滔滔不絕、有模有樣的演講完全程。最後不巧有個聽眾問了一個深入的相對論問題,這司機當然答不出來,卻還算機敏地一指坐在後排的愛因斯坦說“這個問題很簡單,我的司機就可以回答”。這個例子就是典型的對自身、對模仿物件都評估不足,對大部分的我們來說,愛因斯坦都絕對算不上一個對的模仿物件,因為我們窮究幾輩子可能也踩不上他老人家幾十年前走過的路...
模仿是個刻意練習的過程
刻意練習、一萬小時定律我們都耳熟能詳。寫程式碼的手感和語感有時就是冥冥之中方可得,沒有大量的實戰,寄希望於看個視訊讀個文章就掌握,這種虛妄猶如似近實遠的高山,看似咫尺實則天涯。
你還記得第一個 Hello World 帶來的那種芥末味直衝腦門的欣喜麼?然而寫一萬個小時的Hello World並不會讓你有什麼進步,刻意練習不是刻意重複,你必須從大量枯燥無趣的“有效”練習中尋求成長,其中的寂寞可以擊退眾多求進之人。
總結一下,守住模仿這個人類本能,無須刻意割裂,在沒有找到屬於自己的路之前,模仿絕對是條不錯的捷徑。而標題中的"謹"字就是表達謹慎選擇模仿物件之意,選對了就是成功捷徑,選錯了可能就是不歸路。進入賽道就必須讓自己跑起來並持續堅持。
- "破"除複製牢籠 -
如果把上階段的“守”比喻成機械複製、沒有自我的“無我”蠻荒過程,那麼“破”就是要找到“自我”的文明養成過程:養成技巧、養成思考、養成創新以及養成習慣等。除此之外,這個階段也要找出三個經典人生哲學的答案:
我是誰? -- 自我認知
我在哪兒? -- 自我定位
我要去哪兒? -- 目標規劃
自我認知Self Awareness
自我認知指的是對自己的洞察和理解,包括自我觀察和自我評價。好的自我認知,能清楚勾畫出自己的性格、優點、弱點、潛能、思想、情緒和動機;做不到就容易成為別人口中的沒有自知之明之人,而有些人終其一生確也無法認清自己。
自我認知會隨著個人的閱歷、思想、環境等不斷變化,所以不是要求大家即可就看懂自己(當然也不可能),而是要掌握這項技能,讓自己不斷從中受益,所謂吾日三省吾身即是此意。自我認知嚴重影響著個人的成長、處事方式、情緒管理,比如: 看不到自己的優點就容易自卑,進而做事畏手畏腳;高估自己就容易傲慢,無法聽取別人的意見而獨斷專行;內向型更適合主攻技術性事務,外向型更適合業務性事務,如此等等。
業界有不少可以對個人進行性格測試的方法論,也是一種自我認知的途徑(不過更多的場景是Leader對團隊,企業對員工的測試)。比如MBTI職業性格測試,9型/16型人格測試,DISC性格測試,NASA 4D人格測試...
自我定位Self Positioning
自我定位相對於自我認知來說,多了一個錨定物。此錨可以是自身或者他人的技能、薪資、崗位、職級、性格甚至背景,以此來分析定位自己所處的位置,是初級能力還是高階能力,是業務開發還是架構開發,是不善言辭還是能說會道...
自我定位和自我認知可視作基本相似的評估行為,只是認知是相對抽象的評估,而定位需要給出相對具體的位置線。
目標規劃Goal Planning
在沒有認清自我的前提下設定的任何目標都是無源之水無本之木,那麼目標一定是因人而異的。那麼問題來了,現而今知識共享、知識付費的時代,知識可以是聽來的、看來的,大家表面看起來都很上進,購買各種課程學習,目標都是成為懂業務、懂技術、懂產品、懂管理、懂投資的共產主義社會全方位發展的全能型人才,只是,這種快餐路徑拿來的知識真的被你吸收了麼?你應該持一下懷疑態度...另外,這種“形而上學”得到的知識我把它定義為“口腹知識”,就是隻能用在聊天打屁時口若懸河滔滔不絕,落地實施時除了懵逼還是懵逼。區別於經過咀嚼消化後被充分吸收的“心腦知識”。
迴歸本文主題,要在模仿學習中找尋自我,必須思考、挑戰、辨別、領悟,直到知識技能融入己身,為我所用。
DàYé自述:
當意識到初期的機械式模仿最多也就是把自己變成別人影子的那一刻,我開始思考如何逃離機械式模仿帶來的快感舒適區。因為盲目效仿實在不需要付出額外的心力,只須跟緊步伐,不費吹灰之力就可以逼近甚至趕超模仿物件,多可怕的錯覺。
為了跳出行為和思維的雙盲區,我是如此行之:
$ 個人標籤:所有的模仿行為通過思考改進,形成個人風格,打上個人標籤。簡單如大家都寫的註釋,我一定是把時間、作者和備註說明用特殊符號拼接的行列分明、整整齊齊、強迫症般的賞心悅目,並沒有為此多耗費什麼時間卻得到了不同的程式碼閱讀體驗和個人風格;同樣是用IDE, 記住絕大部分的快捷鍵,引入更高效的外掛,能高效輔助你達成目的的手段才能稱其為工具,否則只能算作器具;
$ 知其然知其所以然:獲得一項技能其實沒什麼了不起,聞道有先後罷了。技能是否真正掌握的評判標準很簡單:可以把這項技能輕鬆傳授給別人。別以為這個標準很簡單。可以舉重若輕把知識講出來的人,絕對是吃透了背後原理機制的;反之當一個人講的東西不夠深刻浮於表面甚至閃爍其詞,那他一定自己都是半吊子。
//等式判斷時,先寫常量,再寫變數的寫法很常見。
//到底有何好處呢?還是zhuangbility而已?
if ( 100 == score ) {
return "一等獎學金";
}
$ 思想邊界:或理解為視野侷限,一個人是無法想象甚至理解思想邊界之外的世界的,這與努力程度無關。當日常工作的80%都是常態腦消耗(重複勞動),不需要啟動全部腦力來思索創新,釋放的訊號就是你的思想邊界將要停止延伸。所謂眼界決定一個人生的高度,而我的高度就是從脫離國企陳舊的體系和氛圍,擁抱外企的自由開放文化開始的。
以防有人斷章取義,需要解釋下。我可沒有表達外企就一定比國企高。不管國企到外企,還是外企到國企,都是邊界的延伸。實際上,我那個年代,軟體業的外企確實比國企整體上要正規和先進不少...
當時的外企對我來說就是最大的變化和可操作的最遠邊界,語言、文化、管理、種族、趨勢、認證、體系等等對我來說都是新鮮的也是極具挑戰的。面試外企前一年我是一直跟一位美國退休教師老大爺學口語的,入職第一個月仍舊是聽的磕巴說的啞巴。幸好我的任務都有書面化的工作清單(請不要懷疑我的英語書面考試能力...考試,我是優秀的),第一個月我完全沒怎麼說話交流,就純悶頭寫程式碼交任務,因為質量好效率高得了當月的部門優秀...我特麼第一次知道純粹的程式碼能力也可以被如此重視,擅長什麼就盡力安排你做什麼,發揮出你最大的價值,那感覺太美妙了。
接下來我從外企迴歸到體制內就是另一個故事了。大比例的企業應用相比網際網路應用,有太多的死板和陳舊,初衷是BAT一類的網際網路公司,後來因緣際會得朋友推薦,加入了招行的掌上生活團隊,對網際網路的技術、業務和產品的玩法才真正有了完整的認識。
你看,我的從國企到外企再到國企,從企業應用到網際網路應用,從程式設計師到架構師,我在不斷擴充自己思想和視野的外延。促使我跳出框框的一個重要因素開始是薪水,後來發現是成長性和反脆弱性讓我不斷的做出轉變。
$ 反脆弱性:有一本叫做《反脆弱》(也是黑天鵝一書的作者)的書推薦給大家,裡面的觀點很是值得玩味。比如公務員相比計程車司機就是脆弱的,考慮公務員40歲失業,和司機40歲面對再就業時截然不同的處境。脆弱的反面不是堅韌,而是反脆弱。一個雞蛋掉到地上,會碎,雞蛋在這裡是脆弱的;一個紙團掉到地上,不會破,紙團在這裡只是堅韌的;一個乒乓球掉到地上,不僅不會碎還可以反彈起來,這個乒乓球就是有反脆弱性。讓變化和波動成為促生蛻變的動因,附上此書的一段簡介:
《反脆弱》
殺不死我的,使我更強大。
既然黑天鵝事件無法避免,
那就想辦法從中獲取最大利益。
每一件事情都會從波動得到利益或承受損失。
脆弱是指因為波動和不確定而承受損失。
反脆弱則是讓自己避免這些損失,甚至因此獲利。
$ 不恥下問:所謂聞道有先後,在一個新的領域實行模仿學習的時候,模仿物件很可能比你小。這種時候一定要放下心裡包袱,不能自卑輕易否定自己,更不能自大不屑於模仿求學。剛入掌上生活團隊時,對於網際網路應用的技術、元件、開源等了解並不全面,而同期入職的比我小的同事,卻玩的賊溜,甚至在意識形態上我都感覺落後一個時代。此人江湖號稱萬真人,因為當時真有點高山仰止之感,讓我想到了武學宗師張三丰,我給起的這個綽號深得大家認同也就很快傳開了。最終幸好本人的反脆弱性還算強大,持續惡補、持續模仿學習,不然真差點整自閉了。
總結一下,我“思”故我在,第二階段就是破開框框,找到那個“真我”。
- "離"開一招一式 -
《倚天屠龍記》截圖
上圖是張三丰教張無忌太極拳招式後的一句話:
“你忘記所有招式,就可以練成太極拳了。”
術和道的紛爭軟文已然爛大街,簡單來說,術謂之技術,道即為道理。我們在長期的學習過程中,獲得了大量“術”級別的能力,悟出的“道”卻屈指可數。若我們花費大量的時間在技術的純熟上,而沒有沉澱下來領悟內在的運作機制和底層原理,這樣是基本沒可能練成太極拳的。
從無我到自我,進化成最終的忘我。忘我是一種態度,忘掉給自己帶來虛妄成就感的“術”,進入悟“道”的超然境界。雄鷹經受擊喙換羽之痛獲得重生,即便它早以遨遊九天為樂;王陽明格竹龍場悟道創立心學,直逼萬物本源,即使之前他早已文武雙全;誠然我們無法與聖人相提並論,但仿效其成聖之路,總有可達之處。
DàYé自述:
本人目前也在各種悟的過程中,混混沌沌間也無法給出具體的指導意見。要升級為高階別人才,勇於放下“固有成就”的包袱,補齊各維短板,潛心修習方可。說起來簡單,悟起來真的不容易。
$ 以結果為導向: 這是很多管理者掛在嘴邊的一句話,但是執行者卻甚少有理解到精髓的。
譬如:
程式碼異常處都知道要列印日誌,除了基本的堆疊資訊,業務線索資料也應該列印出來。評審的程式碼中大家是否經常可見下面示例的第一種寫法。道理很簡單,結果導向,你列印日誌到底為了什麼,是為了你單機除錯用,還是為了多節點生產排障用?
logger.error("user login failed", e);
vs
logger.error("user " + userid + " login failed", e);
非同步訊息元件處理消費失敗時,一般都有重試機制,對於重試理解的透徹程度可以部分反映你“結果導向”這個道的高度。不展開講解就列幾個問題大家自己去思索:
該訊息的消費處理邏輯是冪等的麼?這決定是否可以重試;
該訊息消費失敗後,是否有必要重試?有些訊息體若必要引數缺失,你重試一萬次也不可能成功;
該訊息消費最終失敗,導致的資料不一致怎麼處理?有人說在最終失敗時再想辦法把這個訊息持久化儲存在某個地方就可以了。
結果導向的問題來了:持久化儲存的資料,你會多久去看一次?有主動修復的機制麼?如何保證時效性?
$ 設計模式:設計模式是程式設計師必修的功課,從背誦到實踐到領悟到靈活執行到大道至簡。我曾經看到過一個不復雜的微服務系統,被設計的七零八落,這一個helper那一個resolver, 左一個decorator右一個visitor中一個factory, 第一眼看到這個系統就有想躲開的衝動。設計者覺得我能把這麼多設計模式融合到一起,是多麼了不起的一件事情。殊不知,設計模式就是一種方法論,在你抓耳撓腮不知道怎麼組合程式碼的時候,給你一種思路罷了,你卻用來裝逼。設計模式絕對不是讓你堆砌設計,更不是讓你增加系統理解和維護的複雜度。我所崇尚設計的第一原則是簡單易懂,能把複雜的事情簡單化才叫本事,把簡單的事情複雜化就是熊孩子。你想,那些偉人對世界領悟的得多麼的透徹,才能將複雜的自然規律抽象為如此簡單美妙的一個公式?
$ 管理和領導:從字面區分就很清楚,“管理”首先是個戴著竹帽子的“官”,“理”順事情才能推動團隊達成目標;“領導”則更多的是帶領和指導團隊,通過個人專業能力、人格魅力或者影響力來達成,不一定是權力。所以把自己定位好是管理者還是領導者,使用的方法論也不盡相同。我對自己的定位可能更多的是領導者,因為如果摒棄頭銜給團隊帶來的權勢壓力,我仍能帶領好團隊,這才是我想要的團隊氛圍和協作模式。目前這塊仍在悟,等沉澱到一定程度了再跟大家掰扯掰扯。
- 守破離 -
“守破離”源於禪學,興於日本劍道,後被引入各類學科和理論工作中。模仿之道不好架空表述,遂以守破離為引直抒胸臆。本人也是從一名普通程式設計師一步一步的成長為管理者,其中辛酸同行之人應深有慼慼,而模仿不失為一把神鋒利器,只是此招需要慎用,萬不可走偏。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31562044/viewspace-2643322/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 架構師的定義是什麼?架構師需要具備哪些能力?架構
- Java架構師要具備哪些能力?Java架構
- 什麼是架構師架構
- 企業應用架構的基本模式之分離介面應用架構模式
- 唯品會架構師是如何實現架構重構的架構
- 什麼是存算分離架構?架構
- 前端架構師破局技能,NodeJS 落地 WebSocket 實踐前端架構NodeJSWeb
- 關於架構師的輕度思考,你眼中的架構師是什麼樣的呢架構
- 架構師能力升級:掌握JVM科學調優架構JVM
- 程式設計師離百萬年薪有多遠?移動架構師是這樣學成的!程式設計師架構
- 漫畫:什麼是架構師架構
- 幽默:架構師在哪裡?是誰?架構
- 你和架構師的的區別是什麼?架構
- 架構師修煉之道(二)——架構?設計?架構師?架構
- 企業架構師、解決方案架構師和技術架構師的異同 - Briqi架構
- 什麼是企業架構師? (tpierrain)架構AI
- 架構師的工作架構
- 架構C01: 什麼是架構?為什麼做架構?架構師需要做什麼?架構
- 架構師眼中的高併發架構架構
- 一個離開學校三年java架構師Java架構
- 架構師眼裡的高併發架構架構
- 七牛網CEO的架構師7種能力和學習線路圖架構
- 架構師之路:一個架構師需要掌握的知識技能架構
- 架構師的工作都幹些什麼?!想做架構師必看!架構
- 程式碼的分離與解耦,向移動架構師進階!解耦架構
- 想要成為一名架構師,需要具備哪些能力呢?架構
- 務實的軟體架構師是什麼樣?(tpierrain)架構AI
- 架構師之路架構
- 阿里十年架構師用一張圖告訴你什麼是系統架構師阿里架構
- 看阿里P9架構師如何向你定義架構及架構師阿里架構
- 假如我是核酸系統架構師,我會...架構
- 架構師之路:從Java碼農到年薪八十萬的架構師架構Java
- 菜鳥的架構師之路架構
- 架構設計中的基本原則架構
- 基本的 API 架構 Laravel6+passportAPI架構LaravelPassport
- 阿里架構師Peter老師講述Java程式設計師→架構師所需要掌握的技能阿里架構Java程式設計師
- Apache 架構師總結的 30 條架構原則Apache架構
- 解構成為架構潮流的“存算分離”架構