理想的程序猿

出處 | http://guoze.me
最近看到的一篇不錯的文章,分享一下。

我算是靠坑蒙拐騙進了程序員的門,然后一路狂奔。26歲之前幾乎沒有任何寫代碼的經驗,研究生畢業卻意外選擇了一家不可能提供培訓的初創公司,在每日擔憂公司倒閉、害怕被炒魷魚以及同事冷落白眼的三重壓力下逆流而上,一年半后離職,已是擁有500萬用戶產品的后臺主程。從前我對計算機技術心懷畏懼,認定技術高人一定有佛光籠罩,晝夜不息運鍵如飛日吐代碼上萬行。現在也算見過一些世面了,回首那段忐忑不安宛如初夜的過程,我卻不發覺有任何的勵志意味,而是視為一種理所當然。理想的程序員,和理想的建筑師、理想的財務師、理想的按摩師沒有任何的差別,他們本質上都是一群手藝人。我相信理想的程序員人人皆可成為。

近三年總在互聯網圈廝混,我認識過一些程序員,共事過一些程序員,領導過一些程序員,又面試過一些程序員。他們學歷不同,有的來自北大,有的來自北大青鳥,有的是博士,有的是高中肄業;資歷也不同,有的來自BAT,有的來自某破產基金公司(還是一個銷售);年限也從0到15年不等。但我認為程序員只需分三類:天才的程序員、理想的程序員、平庸的程序員。天才的程序員我只敢說接觸過3個,這是天命。7分由你是顆精子的時候就已決定,擁有絕佳的數學天賦、冷靜致密的邏輯、為解決難題寧愿不眠不休而深以為樂的技術熱情;3分來自起步要早早早,恨不得同齡人玩泥巴的時候就得開始玩電腦,大學畢業前就突破一萬小時法則,后面的已是游戲人生。

天才的程序員可遇不可求,更不能長有,我看到的90%仍是平庸的程序員。IT時代的膨脹,已讓程序員如同文藝復興時的印刷匠一樣的普通,多數投入祖師爺門下的人,僅是為了更大的飯碗,更高的待遇,更好的生計。平庸的程序員編寫腐爛的代碼,沒有規范和一致性,固守舊世界的語言,還好談論大的架構和性能,說的比做的漂亮。而毫無例外的,他們認定技術沒有出路,做產品、營銷和管理的是更高大上的手藝,而他們當中的99%,又會自然的流露出自己恰巧具備了那方面的天賦,至于進程為什么會崩潰這樣的小問題是不屑于去了解的。

而我最喜歡和理想的程序員相處,恨不得與他們同吃同住,如果允許,我希望我的隊伍能插滿他們的旗幟。理想的程序員心眼兒不壞(他們從來都不是辦公室政治的寵兒,是一群單純明亮快樂的手藝人),有天真爛漫的好奇心(他們的眼睛里經常閃著「哇,這個是怎么做到的!」),永遠精益求精(他們的口頭禪是「我再研究一下」),還樂于分享(他們活躍于GitHub、各大問答社區和你的身邊,舍得將寶貴時間用于幫助新手)。是的,他們不需要被管理,只需要給一個大的方向,總能回報以意想不到的結果。

理想的程序員與平庸的程序員只有一墻之隔。兩者的差距只有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個小時應對本職工作就足夠了,但工作之外,一定要安排時間用于學習。除了學習,留點時間放空自己也是必要的,利用泡茶或者喝咖啡的間隙,把彌足珍貴的時間留給自己,往前想往后想,事半功倍。

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

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456696.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456696.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456696.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

node08-express

目錄:node01-創建服務器 node02-util node03-events node04-buffer node05-fs node06-path node07-http node08-express node09-cookie express模塊: 1 /*2 * express是一個應用框架3 * 1、路由4 * 2、中間件5 * 3、模板引擎6 * */7 8 var express requ…

【python】1. 兩數之和

給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那 兩個 整數,并返回他們的數組下標。 你可以假設每種輸入只會對應一個答案。但是,你不能重復利用這個數組中同樣的元素。 示例: 給定 nums [2, 7, 11, 15], t…

The user specified as a definer (#39;root#39;@#39;%#39;) does not exist

通常是因為root用戶對全局host無訪問權限。因此僅僅要給root用戶加入一個訪問權限就可以。解決的方法: 登陸mysql 。運行 mysql -u root -pPasswd mysql >grant all privileges on *.* to root"%" identified by "Passwd…

Java基礎常見筆試題總結

以下是自己總結的一些Java常見的基礎知識題,答案僅供參考,如有異議請指出。一直保持更新狀態。 1.什么是Java虛擬機?為什么Java被稱作是“平臺無關的編程語言”? Java虛擬機是一個可以執行Java字節碼的虛擬機進程。Java源文件被編…

ThreadLocal的練習代碼

場景: 有三個小孩兒,買了一個變形金剛玩具(Transformer).... 三個小孩都爭著玩這個玩具....沒有一個人可以玩... 第一種方式:每個人各玩一會.... 第二種方式:再買兩個玩具,一個人玩一個. 每個小孩都當成一個線程.三個小孩就有三個線程. Child.java 2 3 import java.util.Random…

nginx+uwsgi部署Django

本篇文章主要介紹了解決nginxuwsgi部署Django的所有問題(小結),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 最近,自己暑假寫的小項目也算完畢了,想著投放到自己云服務器上&#xff0…

$(document).scrollTop()與$(window).scrollTop()

$(document).scrollTop() 獲取垂直滾動的距離 即當前滾動的地方的窗口頂端到整個頁面頂端的距離 要獲取頂端 只需要獲取到scrollTop()0的時候 就是頂端了 要獲取底端 只要獲取$(document).scrollTop()>(document).height()?(window).height() 就可以知道已經…

各種機器學習開源項目精選TOP30

8800個機器學習開源項目為你精選TOP30! 授權自AI科技大本營(ID: rgznai100) 本文共圖文結合,建議閱讀5分鐘。 本文為大家帶來了30個廣受好評的機器學習開源項目。 最近,Mybridge發布了一篇文章,對比了過去一年中機…

Python中is與==的使用區別詳解

>>> a 1000 >>> b 1000 >>> print(id(a),id(b)) 2689566689904 2689566688880 >>> a ,b 1000,1000 >>> print(id(a),id(b)) 2689566689968 2689566689968 一行執行的用一個id地址 分行執行用兩個地址

解決:Please specify a different SDK name--PyCharm報錯

這個問題出現的原因是因為PyCharm中存在相同名字的虛擬環境變量。 本人的出錯原因是,一直使用PyCharm的默認設置來建立工程,所以每個工程都建立了自己獨立的虛擬環境。 我個人刪除了一些工程后,又建立相同名字的工程。所以才會出現存在相同…

Tomcat控制臺輸出到文件

為什么80%的碼農都做不了架構師?>>> 修改startup.bat call "%EXECUTABLE%" start %CMD_LINE_ARGS% 為 call "%EXECUTABLE%" run %CMD_LINE_ARGS% >> ..\logs\test.log 轉載于:https://my.oschina.net/cccyb/blog/886047

常見算法詳解(原理及代碼實現Python版本)

文章目錄前言1、冒泡排序2、選擇排序3、插入排序4、希爾排序5、快速排序6、歸并排序7、二分法查找總結前言 最近復習了下常見的算法,在這里手動再寫一遍,權當加深自己的印象。代碼實現用的是python3.6版本。 1、冒泡排序 原理: 冒泡排序&a…

解決:pycharm運行程序時在Python console窗口中運行 ?????????????1?????

解決:pycharm運行程序時在Python c 問題: 在pycharm中右鍵點擊run運行程序,發現沒有打開run窗口運行,而是在Python console窗口中運行的。 解決方法: 打開菜單欄 run->edit configurations, 把下圖中的…

Autowire異常

Autowire異常主要由三個情況發生的 1. 你的ServiceImpl必須以Service或Component注解才行。 2. 自動寫入的時候把接口寫成實現類了,例如 Autowired private BrandServiceImpl brandServiceImpl; 應該是 Autowired private BrandService brandService; 3. 在Dao 類上…

[轉載] 全方位提升網站打開速度:前端、后端、新的技術

原文地址:Building a Shop with Sub-Second Page Loads: Lessons Learned原文作者:Erik Witt譯文出自:掘金翻譯計劃譯者:luoyaqifei校對者:Romeo0906,L9m全方位提升網站打開速度:前端、后端、新…

20個頂級大數據軟件應用程序

目錄1. Domo2. Teradata Database3. Hitachi Vantara4. TIBCO公司的Statistica5. Panoply6. IBM Watson Analytics7. SAS Visual Analytics8. Sisense商業智能軟件9. Talend的大數據工作室10. Cloudera11. MongoDB12. Vertica Analytics Platform13. SAP Vora14. Oracle Big Da…

python完成‘21點游戲’

完成‘21點游戲’ 人機對戰: 輸入玩家姓名:玩家可以多次要牌,其中JQK,大小王是半點,其他是正常點數,玩家每要一次牌就打印下當前點數和系統點數。可以設置系統:只要大于等于21點就不要牌了&am…

materialrefeshlayout下拉刷新,上拉加載更多

1.添加依賴:compile com.cjj.materialrefeshlayout:library:1.3.0 2.布局中添加控件&#xff0c;包裹list控件<com.cjj.MaterialRefreshLayoutxmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto…

MapTask、ReduceTask并行度決定機制

目錄前言:1、mapTask并行度的決定機制2、ReduceTask并行度的決定總結&#xff1a; 目錄 前言: MapTask的并行度決定map階段的任務處理并發度&#xff0c;進而影響到整個job的處理速度。那么&#xff0c;MapTask并行實例是否越多越好呢&#xff1f;其并行度又是如何決定呢&am…

python# 完成“剪刀石頭布游戲”:

# 完成“剪刀石頭布游戲”&#xff1a; # 1. 進入剪刀石頭布游戲 # 2. 系統隨機出&#xff1a;可以是剪刀&#xff0c;可以是布&#xff0c;也可以是石頭&#xff08;可以使用隨機數完成1&#xff1a;剪刀&#xff0c;2&#xff1a;布&#xff0c;3&#xff1a;石頭&#x…