你為什麼選擇程式設計師這個職業?竟然有網友是因為始終單身?

虎牙來了 發佈 2020-01-13T02:32:05+00:00

IT行業是個知識更新非常快的行業,其他行業也在發展進步,但是相對而言沒有這麼快的節奏,而我是一個喜歡嘗試新事物的人,心理承受能力也還可以,所以程式設計師貌似會是一個不錯的選擇。

關於為何選擇程式設計師這份工作,各有各的答案。有的人因為喜歡代碼的對話邏輯,有的人因為看中程式設計師的較高薪資。有人追名,有人逐利,有人為了夢想,還有人僅僅只是想做些實際的小事。你的答案,又是什麼?

✎ 寫在前面

第一句話就問了大家為什麼從事了程式設計師這份工作,我先來談談自己的情況。我一直認為,如果勉強自己做一件不喜歡的事情,那麼很難有動力在今後的工作中繼續前進。選擇成為一名程式設計師,大概是在 16、7 歲的時候,那時候父母給我買了第一台電腦(一台 586 電腦),給自己的內心種下了一顆種子。IT 行業是個知識更新非常快的行業,其他行業也在發展進步,但是相對而言沒有這麼快的節奏,而我是一個喜歡嘗試新事物的人,心理承受能力也還可以,所以程式設計師貌似會是一個不錯的選擇。此外,IT 行業的機會很多,也適合我這樣的普通人家孩子,站在現在的年紀回顧過去,自己沒有選錯。

✎ 入行前

所謂入行前,其實就是指還是學生的你是否應該選擇程式設計師作為你的職業工作、如何獲得這份工作。作為一名學生,你真的要想清楚是否程式設計師這份工作適合你,因為它牽扯的個人精力實在太多,導致你不可能有太多的個人愛好。大家都知道,很多程式設計師會自嘲稱呼為碼農,目前來看,程式設計師是最容易逆襲的職業,碼農也是從收入角度最容易逆襲的工作,但同時碼農也習慣了自嘲,於是把自己描繪的異常辛苦,總覺得自己賺錢多是應該的,因為太累了。

入行前,作為學生的你們,除了正常的上課、實習之外,還可以通過一些競賽類的準備工作提升自己的技術能力,此外,一般也需要通過校招進入技術含量較高的科技公司。針對這兩點,我分別談談自己的看法。

參加校招

最近幾年都參與了公司組織的校園招聘工作,每次去都會見到大量的學生,我喜歡和他們交流,觀察他們的一言一行,為了進一步考察他們的綜合能力和性格組成,我每次都會自己準備面試題,這些題目包括了編程基本概念、算法編程題、作業系統、資料庫編程、開原始碼閱讀、垃圾回收機制、系統架構描述、實習期經歷回顧、人生過程中遇到過的挫折、對於工作氛圍的想法、未來的職業發展方向設定等。

這些問題中其實大多數都是開放式問題,一些是沒有固定的答案,另一些甚至於是完全開放式的,需要學生提出問題。我的這組題目中,可能只有編程基本概念這一條有固定的標準答案,算法編程、資料庫編程都有多種回答方案,只不過每一種回答的運行效率不同,這些都屬於半開放式的技術問答。作業系統、開原始碼閱讀、垃圾回收機制、系統架構描述,這些個問題則屬於是自己出題的題目,為什麼這麼說?因為我會根據你所了解的知識點一點點地深究下去,一點點往下問,所以這是完全開放式的技術問答。

實習期經歷回顧、人生過程中遇到過的挫折、對於工作氛圍的想法、未來的職業發展方向設定,這四個問題屬於非技術領域的完全開放問答,我之所以提出這些問題,是希望能夠更加接近學生的真實生活、內心想法,了解學生的過往經歷、三觀,以及周圍環境,這樣可以決定是否錄用,以及如何更好地發揮學生的能力。

除了實際的技術基礎能力以外,我覺得一名學生還需要具備做人的格局,做人不要僅限於眼前利益,不要太實際,不要只考慮自己。推薦大家擔任大公司的「校園大使」,這個工作一定要儘自己最大可能做好,積極配合 HR 小姐姐,其實過程中你也在被觀察。

✎ 入行後

關於深度思考的理解

我覺得技術能力是可以培養的,而且可能可以快速培養,只要這個人具備深度思考的能力,因為知識體系的建立一定是基於思考之上的,而不會是填鴨式的。

一個人做多了自己的職業活動,如果不調整,就會變得單一。思想也慢慢定向,沒有開放式的思維方式,所以要在緊張的大腦和肢體活動之餘,發現思維的新空間。作為一名軟體工程師,我的大部分時間都用在了這個領域,我也發現,生活上的幾乎所有細節也可以被放在這個領域裡找到對應點或面,此外,程式設計師也需要從產品、運營方面思考技術,這樣才能不斷開闊自己的思考方式。我之所以願意把這些思想「沉澱」積累起來,不是因為它們有特別的價值,而是因為它們是在寧靜的外界和寧靜的內心狀態下形成的,寧靜致遠,對於擁有技術願景的程式設計師來說,這是一個值得追求的境界。

對於工作時間的理解

時間是很值錢的,這種事情很多時候必須是上完學開始工作了才能理解。一個原因是對絕大多數學生來說,工作之後的空閒時間會變少,那麼原來業餘生活里快感度比較低的事情就不做了,這是因為你的時間可以換來收入,而收入可以用來在空閒時間換取更爽的快感,那麼你的選擇空間也就更多了。上學的時候,空閒的時間太多,以至於連寫東西吐槽、在網上跟人互噴,都能排上日程。

之前我不小心說出了自己每天的工作時間(這裡說的工作時間,其實也是學習時間,對於程式設計師來說,所有工作時間都是可以用來學習的,就看你會不會找方法),10-12 個小時,引起了讀者的一波評論,我可以肯定的回答,確實是這樣的。作為一名程式設計師,我認為你每周的工作時間應該保持在 60-65 個小時,因為我們這個行業的技術更新速度實在太快了,我認識的所有厲害的大牛都是這麼熬過來的,沒有人可以用很短的時間學會別人花費很長時間學會的技術。當然,每周的工作時間最好能夠控制在 75-80 個小時以內,畢竟一個人的睡眠是需要保證的,也需要有一些陪伴家人的時間、個人娛樂時間。

關於公司的選擇

如果你希望自己在某一個或幾個領域成為資深碼農,你應該選擇有技術並且有業務的大公司。技術層面,既要有技術積累,也要有高水平的同事。業務層面,要讓業務對基礎架構有足夠的挑戰性。其實當前滿足後者的公司比前者多得多,畢竟讓大多數網際網路公司所做的事情來說,技術都不是決定性的,提前對技術做過於超前的儲備大機率會浪費。反過來,假設一個公司有技術積累又有高水平的員工,一旦業務上不去高水平員工肯定會跑,最終只剩下哪些當年技術比較不錯的技術人員,長期來看技術早晚要落後。這些原因導致業界很多公司存在業務發展非常快而技術跟不上的情況,去這樣的公司也一樣有挑戰,但做的工作未必系統,而且同事的能力也不見得有保障。

怎麼看技術人員話語權不高

一位朋友原先是做分布式資料庫的,最近跳槽去了一家做無人車的公司,和他聊了一下,了解他的看法。做無人車和軟體基礎設施相比,最大的區別是做軟體基礎設施的技術人員,尤其是搞資料庫開發的程式設計師,很多時候解決的是技術的門檻問題。我們認為資料庫的一切問題歸納為本質上是「可用」的問題,對業務來說能扛住壓力不丟數據不超時,並且各種功能都支持,這就是「可用」,至於在高並發情況下依然「可用」,那就是「高可用」。一旦把技術問題轉化為「可用」的問題,就會讓技術變成一個門檻,達不到的話業務受影響,達到後業務做得好或是壞,其實和技術的關係就不那麼大了。這也是很多公司技術人員話語權不高的原因。

關於為什麼去做高難度的技術

例如像 BAT、華為、小米這樣的大公司,對軟體基礎設施的門檻要求還是比較高的,所以這個工作還是比較有技術含量的,尤其是比大多數實現業務邏輯、項目經理需求的工作有技術含量。就我前面提到的這位朋友的情況而言,無人車有更大的吸引力,因為它更難,難到我們並不確定什麼時候才能真正做出來。表面上看它也是一個門檻—一個「可用」的無人駕駛技術,但因為難度足夠大,所以有挑戰性,必須不斷地改善技術,做全球範圍內還沒有做出來的技術。搞資料庫時處理的一些問題可能是其他公司已經解決的,並非「人類」都還沒有解決的問題。很多時候需要和其他公司交流,互相借鑑經驗,或者看看 Google 這樣的領航者是怎麼做的。

另外,這個世界的進步,尤其是科技進步一定是需要聰明人去推動的,聰明人集中的地方進步就會快。冷戰的時候搞軍備競爭、太空競爭,政府大規模投錢搞,自然聰明人集中從而發展迅速。

關於技術人員的上升通道

為什麼說技術人員的上升通道局限比較大?曾經聽移動的一位總經理說過,所有的高層管理者都需要一個抓手,也就是管理基點,他是不會放手這個基點的,例如運營、產品、業務邏輯,或是技術。PM 出生的管理者還是會繼續考慮產品,運營出身的管理者還是要考慮運營,但技術出身的管理者到了一定級別不見得還要考慮技術,特別是技術細節。這樣的人時間久了就做不回碼農了,可能連一線的技術經理都做不了了。大公司高級別的碼農就算不寫代碼至少知道最新技術的發展方向並且實際設計和運用加和人扯淡,出去還是能當個同級別架構師。小公司 CTO 很容易既不寫代碼又不了解大方向,出去只能找人接盤接著當 CTO,還可能被覺得沒水平。

關於跟進最新技術的重要性

工作上一定要跟進最新技術的發展動向,某種程度上這和炒股差不多,看好業績的話提前埋伏進場。比如若干年前剛有安卓 ios 的時候,很多人還在塞班上開發,但眼光好的第一時間就轉行到了安卓、ios,因為先占了坑在最稀缺的時候搶占了先機,跟早畢業的道理一樣,可能比你晚兩年轉行的人處處占了先機,差距越來越大。當然也有可能賭輸了,例如 Windows 編程。

每一次業界的革命,都會讓一些公司落寞而讓另一些公司崛起,碼農也一樣,每一次技術換代也都會讓一些碼農沒落而讓另一些碼農崛起。在技術換代面前,之前的工作經驗不至於一文不值,但也大打折扣。另外,正因為技術不斷換代,學的快的才比單純年輕的有優勢,如果技術完全停滯,干五年左右技術就不再成長,那麼畢業五年後還當基層碼農的失業風險就越來越大,這也是某通信大廠被傳聞的所謂「35 歲裁員」的寫實,聽說 35 歲主要針對的就是這些基層碼農,45 歲針對的是基層碼農和技術一線管理者。不斷地盼望著(如果能力夠強也可以自己創造)新技術的出現,並且自己保持著不亞於年輕人的學習能力,自然就降低了高齡失業風險。

至於做管理,也是一種出路,因為在管理的經驗積累上很難有天花板的說法,十年管理經驗可能有很大一部分確實是後五年積累的,而不像寫代碼,但是也要考慮做管理和技術脫節的問題,得保證這個公司不要你了,你的管理經驗是能用在其他公司的。作為技術管理者實際上也還是要掌握最先的技術並且能用於自身業務,比如你說你懂大數據、高並發訪問的架構設計,但前公司的產品 TPS 只有幾百,你覺得你的技術有實踐過嗎?只能強調自己管多少人的話,可能不是網際網路公司技術出身管理者的出路。

✎ 寫在最後

作為一名程式設計師,你需要保持三種感覺,飢餓感、疲勞感和孤獨感,學習的目的是因為想要學習,學習的過程是很單調的,經常需要獨自搜索網上的資料,獨自前進,學習時間長了會很累。做技術的人容易仰望星空,但是仰望星空前需要做好腳踏實地,掌握好基礎技術、動手能力強、三觀正、具有較強的為人處事能力,這四點是一切可持續發展的基礎。僅以此文獻給在路上的我們三人,也紀念我們的青蔥歲月,進入職業生涯的中期,我們仍需負重前行。

作者:周明耀 InfoQ

——————————————

小編細選了一些網友的評論,來看看無所不能的網友們選擇當程式設計師的理由是什麼:

@納蘭少:以前學醫的,現在做了程式設計師,別人問我為什麼。我總回答:學醫救不了中國!

@不停換頭像的zzm:我以為當了程序猿就能實現小時候成為一名大黑客的夢想

@耳火不耳:因為我家祖宗十八代都沒出一個程式設計師,我要做第一個

@舉個小栗子:因為窮

@黨:看了很心寒,我不像作者這樣科班出身,我到了三十才入的行,我沒用過作者說的離散數學啥的,但是我從來沒有放棄,一直在努力。

@Jay:以前做設計,程式設計師老是做不出我要的效果,後來我就自己研究然後做了,沒想到越做越好,越來越深入。

@whatever:因為自由,給我一台電腦和網絡就能養活自己

@鹽:作為個單身狗∪・ω・∪,只適合編程

@A:是程式設計師選擇了我,不是我選擇了程式設計師

我是一名從事了10年開發在退休邊緣垂死掙扎的高齡程式設計師,最近我花了一些時間整理了一個完整的學習C語言、C++的路線,項目源碼和工具。對於想學習C/C++的小夥伴而言,學習的氛圍和志同道合的夥伴很重要,筆者推薦一個C語言/C++編程愛好者的聚集地>>>私信我【編程學習】即可!

歡迎初學和進階中的小夥伴!工作需要、感興趣、為了入行、轉行需要學習C/C++的夥伴可以一起學習!

喜歡小編的記得動動您的小指點個關注喲!

關鍵字: