乙個程式設計師的頓悟 理想的程式設計師只比你多了6個一點點

2021-07-09 21:50:59 字數 2980 閱讀 1948

理想的程式設計師與平庸的程式設計師只有一牆之隔。兩者的差距只有 6個一點點,而人與人的差距,正是在這日積月累的一點點中,被永遠拉開了。有意思的是,我發現這 6個一點點都和意識有關,也就是程式設計師和其他一切新興產業的工種一樣,只需要意識加上時間的錘煉,人人皆可達到理想的階段。理想的程式設計師必然也是乙個優秀的problem-solver。

第 1 個一點點:專注眼下

見過太多心猿意馬的程式設計師,我不得不把「專注眼下」作為天字第一條。他們往往有各式各樣的小夢想,比如做個小茶農、做個小鵝販、做產品、做銷售、做投資,卻被程式設計師的高薪或是沒有轉行的魄力「耽誤」了,而因為不專注,他們不在意做好自己的本分,不在意錘煉自己的技能,不在意學習新興的技術。不可否認,這世界上存在著偉大的產品(像喬老爺)、偉大的銷售(像埃里森)、偉大的投資客(像彼得菲),而他們毫無例外都是程式設計師出身。可你聽說過巴菲特評價蓋茨的話麼,比爾蓋茨如果轉行去賣狗,那他一定是全世界最大的狗販。我堅信除了少數的天才外,冥冥眾生均可以在多個領域取得成功,只要保持足夠的專注。而哪怕你下一年就想賣狗去,程式設計師的經驗仍然能訓練你強大的邏輯、謹慎和耐心,放在哪個行業都是相當可觀的競爭力。

第 2 個一點點:思考力與推動力

我認為處理bug、崩潰、調優、入侵等突發事件比程式設計本身更能體現平庸程式設計師與理想程式設計師的差距。當面對乙個未知的問題時,如何定位複雜條件下的核心問題、如何抽絲剝繭地分析問題的潛在原因、如何排除干擾還原乙個最小的可驗證場景、如何抓住關鍵資料驗證自己的猜測與實驗,都是體現程式設計師思考力的最好場景。是的,在衡量理想程式設計師的標準上,思考力比經驗更加重要。

有時候小夥伴跑過來,問我「提交了乙個任務被卡住了,怎麼辦」的時候,我總覺得他可以做得更好。比如,可以檢查試驗別的任務,以排除**自身的原因;可以通過 web ui 檢查異常(如果沒有賬號,可以讓我提供);可以排查主機日誌或刪除快取,再不濟,總應該提供任務 id和控制台日誌給我。理想的程式設計師永遠不會等事情前進,他們會用盡一切方法讓事情前進。

第 3 個一點點:never say no

記得從前廠離職之前,找老闆談話,他說我最大的優點就是從來不和他說這個做不到。後來我發現在很多團隊裡,都存在一種技術和產品的對立,程式設計師往往以「技術上無法實現」來擋產品的需求,而產品也往往以「facebook可以為什麼我們做不到」來奚落程式設計師。這兩句話應該屬於禁語,從根本上都不利於程式猿和產品狗的相親相愛。

一句「技術上無法實現」是容易出口,可有多少人在說出這句話的時候,心裡是100%肯定的?如果不肯定,為什麼不能回去谷歌一下再回答?原本我以為程式設計師是充滿想象力,在因為有想象力,才能誕生那麼多改變我們生活的軟體和網際網路產品。見識多了,才了解大部分程式設計師已經在與bug的對抗中變得保守而不願擔當風險,與此同時許多團隊也不願意寬容失敗。於是「say no」變成一種習慣性的牴觸,還記得曾國藩為什麼解散湘軍麼?他說那支軍隊已「暮氣漸深」,不能打仗了。要做理想的程式設計師,就不能給自己滋生暮氣的機會,如果面對不合理的需求,可以把時間成本擺出來,把曲線救國方案亮出來,簡單粗暴「say no」是不可取的。

第 4 個一點點:投資未來

程式設計師是乙個非常殘忍的職業。你所學所用的語言、框架、模式,很可能在數年內就成昨日黃花了;你現在嘲笑的另一群程式設計師,可能馬上就能轉身來嘲笑你了。所以理想的程式設計師除了做好自己的本分,還要花費時間來投資未來。什麼是「投資」?投資就是你現在投入的時間,在未來會以更多的時間或者金錢(看看早幾年學習ios的程式設計師現在的薪酬!)回報你。舉我自己的領域 — 資料探勘為例,08年左右hadoop開始興起,一時「大資料」概念火熱,hadoop工程師萬金難求,各網際網路公司紛紛把資料統計、資料分析和資料探勘的業務切換到分布式平台上。這幾年眼看 hadoop 還在不斷迭代,spark又異軍突起,一舉重新整理了 hadoop 保持的排序記錄,以記憶體儲存中間資料帶來的效能優勢和豐富的資料結構讓人愛個不停,各種奇異的小 bug和陡峭的學習曲線又讓人打退堂鼓。那麼,明眼人都知道 spark 是未來的趨勢(記憶體會越來越便宜),在主業務放在 hadoop的條件下,就可以適當把一些小模組切換到 spark 上,同時留意 spark 社群的發展。很快從 spark 獲得的效能收益就能把之前投入的學習時間掙回來。

第 5 個一點點:善用工具

善用工具可以分為 4 個層面:

我剛入行那會,乙個計算機專業卻當了公務員的朋友問我,你一點都沒學過程式設計,平時怎麼寫**?我說,谷歌,於是遭到無情的恥笑,以至於我在**的賬號都叫2shou,告誡自己是乙個無恥的二手程式設計師。這是乙個笑話,但如果現在問我,我還是要回答谷歌。程式設計師的成長就像膨脹的圓餅,外面是無邊無際的大海,圓餅越大,與大海接觸的面也越大,懂的越多,不懂的越多,而電腦科學又是一門更新換代異常迅速的學科,同時也是知識網際網路化最好的學科,很難利用傳統的科班式有教有學的方法,相反通過搜尋引擎則很容易獲取到最新的知識。

不相信重複,大師的話叫dry原則(dont repeat yourself),**寫多了,會有人為的直覺判斷好的和爛的**,我的標準是簡潔和規範,簡潔並不是美感上的標準,重複越少,給自己出錯的機會也越少,後期維護的成本也越少。

如果你不幸丟了三周前的**,也許你能憑著過人的記憶力把腦子裡殘餘的片段複寫出來,但如果丟的是三個月前的**,恐怕就沒有那麼好的運氣了。理想的程式設計師會著力找尋有效的資料儲存方式,把工作裡靈光閃現寫下的**、指令碼、配置、 經驗等短的片段儲存起來,以便任何時候都能複查。

理想的程式設計師必須懶惰。對他們來說,重複的步驟和重複的**一樣醜陋,如果意識到一項工作有可能長期要重複,那麼自動化的時間總是越早越好。

第 6 個一點點:管理時間

之所以管理時間會對程式設計師這個行當特別重要,是因為在完成任務時你必須像荒野裡的狼一樣,「獨行」。沒有外界約束的情況下還能穩定控制自己,保證能高效率地工作和學習,那麼日積月累你肯定會變得比一般人厲害。

程式設計師幹的是高強度的腦力活,一般每天集中4-5 個小時應對本職工作就足夠了,但工作之外,一定要安排時間用於學習。除了學習,留點時間放空自己也是必要的,利用泡茶或者喝咖啡的間隙,把彌足珍貴的時間留給自己,往前想往後想,事半功倍。

說了這麼多,想必有人會問,費勁心思成為乙個理想的程式設計師,又有什麼用處?會有高薪嗎?不。能公升職嗎?也不見得。迎娶白富美呢?不如去賣狗。

稻盛和夫曾經說過乙個故事,明治時期的手藝人被天皇召見,雖然都是不讀書的鄉下人,但一輩子兢兢業業地做一件事情,自然有一股高貴的氣質。理想的程式設計師,應該就是循著這種高貴的氣質而去的吧。

理想的程式設計師

政治家 politician 老練,能夠從容對付小的 猴子的過時,能夠從容應對軟體工廠裡的其他角色人員 管理人員,測試人員,支援人員,客戶,使用者等等。親切 relational 可以與其他人愉快地合作,並為自己的 劃定範圍,為了大家的共同利益,不惜幹那些髒活累活,擁有很好的溝通技巧,既善於演講,又...

乙個程式設計師的愛情宣言 程式設計師的情書

我能抽象出整個世界 但是我不能抽象出你 因為你在我心中是那麼的具體 所以我的世界並不完整 我可以過載甚至覆蓋這個世界裡的任何一種方法 但是我卻不能過載對你的思念 也許命中註定了 你在我的世界裡永遠的烙上了靜態的屬性 而我不慎呼叫了愛你這個方法 當我義無返顧的把自己作為引數傳進這個方法時 我才發現愛上...

角色互換 普通程式設計師與有理想的程式設計師

生活中,有較多付出的方向,也必然有缺失的方向。因為,大部分人都逃不出乙個法制 魚與熊掌不可兼得 看待一件事的角度不同,得到的理解也會有所不同。比如程式設計,熱愛這份工作的朋友願意付出大量的業餘時間來彌補自己的不足之處,平常心的朋友則選擇 隨緣 對待工作中的進展。不同的觀念,也決定著之後的道路。舉個簡...