思否有約 | @然後去遠足:程式設計如逆水行舟,不進則退

SegmentFault思否發表於2023-05-16
比起技術上的提升,業務層面的積累更寶貴。

今天我們採訪的嘉賓是 @然後去遠足,他於 2019 年加入思否社群,至今已經在社群回答了 2800 多個問題,為社群做出了非常大的貢獻。他自稱是已經奔四的 90 後,從小就接觸計算機,熟悉多種程式語言,現在是一名全棧工程師。本期我們非常榮幸地邀請到了他,以下是我們對他的訪談。

Q:你是如何進入程式設計這個行業的?

我覺得家庭因素佔很大一部分吧。90 年代末家裡就購置了第一臺電腦,再加上家慈從事的也是軟體開發相關的工作,當時家裡有一整面牆是一個大書架,上面好幾個格子擺著的都是計算機方面的書籍,所以我小的時候就對這東西特別感興趣(不會承認主要是為了玩遊戲?)。然後高考報志願的時候也都是填的計算機相關的專業,畢業後也一直在這行裡,一切還都挺順理成章的。

Q:目前的工作是做什麼的?主要使用哪些技術?

我目前服務於一家跟環保相關的 NGO,透過一些技術手段和工具來幫助企業和政府進行環保及生產方面的決策。要說語言的話其實學了挺多的,參加工作以來在專案裡陸陸續續接觸到並且實際應用過的就有 VB、VC++、Dephi、C#、Java、Python、PHP、Golang 等等了,目前更熟悉 JavaScript/TypeScript 前端領域一些,畢竟用的時間最久。但真不敢說哪項技能是精通,頂多只能說是熟練掌握 —— 求職時我的個人簡歷裡也確實是這樣寫的。

其實現在 Coding 的工作佔比不是特別多了,日常主要還是一些技術管理、業務溝通之類的工作。但我也還是會“強迫”自己去多接觸些新東西,未必是真的新,但起碼對我來說是新的。比如前些年 K8s 很火的時候,就嘗試自學了相關內容,最後在公司裡推動了整條業務線 K8s 化改造,還是挺有成就感的。

Q:日常工作中,有沒有什麼比較受益的學習方法?

我之前給我的同事們分享過一種程式設計的方式,叫“小黃鴨除錯法” —— 在除錯程式碼的時候對著一隻小黃鴨,詳細地解釋每行程式碼的作用和思路。具體的出處和原理這裡就不展開了,因為這個方法也不是我獨創的,在網上是可以查到的。簡而言之,在一個人表達自己想法的過程中,這種方式會幫助他去整理思路,重新考慮問題。

程式設計畢竟還是比較考驗邏輯思維的,很多時候一個人想出來的東西很可能其實是鑽了牛角尖,這個時候再順著錯誤的思路去想,只能越想越偏。我遇到過很多人在一個問題上會卡住很久,我說你給講講吧,往往講了幾句他自己就發現問題所在了。

這種行為本質上是一種對輸入的再輸出,所以不光可以用在除錯程式碼上,事實上任何有輸入、有輸出的事情都可以應用這個方法,就比如學習技術這件事。上學的時候班裡會有一類學霸,他們比普通成績好的人更厲害的地方在於,能把別人也給講明白了,這其實就是一種對輸入的再輸出。這也是為什麼我很喜歡在思否社群上回答別人問題的原因,回答問題的過程本身就是一次消化吸收並檢驗之前自己所學內容的機會,能給別人深入淺出地講明白,其實才代表著自己已經真正學會了。

Q:最難忘的一段工作經歷是什麼?

可以分享一個剛參加工作不久的“教訓”,雖然已經過去七八年了,但印象依然十分深刻。

我當時就職的公司在那一年雙十一期間第一次決定搞一個類似於秒殺的活動,而我負責整個秒殺活動的技術統籌工作。活動是晚上八點整開始,臨近下午四點的時候,公司群突然炸鍋了 —— 所有活動連結全都打不開了。經過緊急排查後發現,是因為域名處於未備案狀態,被雲服務商停止解析了。國內的開發者應該都清楚域名備案的重要性,這裡不做過多解釋了。在緊急聯絡雲服務商後,結果得知是因為半個月前我們有一批新域名需要備案 —— 那個時候還不像現在,可以全程自助化線上上操作,那個時候還有幾個步驟是需要電話回訪的 —— 他們在電話回訪後,認為我們是想“替換”原有的域名備案,而不是“追加”新的域名備案,於是在向管局提交資訊的時候就把我們之前的域名備案給申請撤銷了,而趕巧到了那天這個撤銷生效了(因為不是我負責接聽的電話,所以原本具體的通話內容我已經記不得了,但時至今日我也不能理解並且非常想吐槽的也還是,真的有哪家公司的業務是需要“替換”備案的嗎?)。

此時已經快下午六點了,十多萬預約使用者已經等著參加活動了,這面卻處在所有服務不可用的尷尬境地。當時我工作經驗尚淺,遇到這種事真的是腦子一片空白。多虧有一位同事提出了一個思路,能不能在海外機房臨時上線,先把這段時間扛過去。於是從註冊新域名到部署整個服務,好在當時專案規模不是很大,整個過程在短短兩個小時內全都匆匆搞定,但已經沒有更多的時間做測試了,只能硬著頭皮上了。之後的活動中雖然也還是出現了一些意外狀況,但起碼整體還是平穩度過了。

這件事帶給我兩個啟發:第一,即便準備再充分,也永遠不要認為你真的已經做好了準備;第二,哪怕不是你的原因,但出現狀況了,作為負責人你就得想辦法頂上,把問題的責任甩給製造問題的人是解決不了問題本身的。所以到今天為止,我在做工作計劃的時候,都會先考慮一個最壞的結果要怎麼辦。這也算是某種程度上的“一朝被蛇咬,十年怕井繩”了。

Q:工作至今,有什麼比較深刻的體會?

我覺得相比於技術層面上的提升,更寶貴的其實是業務層面上的積累。因為除了特別偏門,或者需要非常特殊的場景才能實施的技術,你總歸是能自己去提升的。無論是自學還是問別人,或者是行業交流,除非是你不想學,否則總能找到辦法的。但業務上的東西,如果你不在這個行業或者領域裡,就很難窺其門徑。網際網路行業裡大家經常提到說“技術人要有產品思維”,你要從各個維度去理解需求、理解產品、理解使用者甚至理解市場,非網際網路行業這點要更甚,那你怎麼去“理解”?無非最後都還是要落地到業務上來。求職的時候,在崗位要求裡我們也經常能看到會有一條“具有某某行業經驗者優先”,這就是業務上的積累。所以我覺得我的成長都來自於這方面。

技術不是空中樓閣,最終肯定是要落地到解決實際問題、提高生產力或產品價值上。程式設計的實質是一種將現實中的具體問題透過抽象、分解、總結等方式,轉化為計算機可以理解的運算邏輯和資料結構的過程(也就是所謂的“程式=演算法/邏輯+資料結構”),而程式設計師就是透過程式語言和工具將現實世界和程式碼世界連線起來做對映的那個人。比如說我們想要開發一個即時通訊工具,那我們就需要將使用者、好友、訊息、群組等等一些概念抽象出來,然後再對這些資料進行操作和處理。可這僅僅是一種很初級的抽象,我們之所以能如此抽象,也是因為這個場景太基礎了,而且也有很多現成的公開的案例資料供我們借鑑。但如果我們換成其他場景呢?

曾經跟一個證券行業的朋友聊過,他提到了一件很有意思的事情,他們內部有某些系統,其中主持開發工作的,有很多不是那些學計算機這種科班出身的專業人士,反倒是一些學數學、精算、金融出身而又半路出家轉行做了程式設計師的一些人,因為這些人更瞭解證券這個行業裡的各種概念,更能迅速理解並充分評估需求。

這裡我不是說技術不重要,技術非常重要,你看這個例子裡的這些人他們也都是全職的開發者,只不過是半路出家而已 —— 我相信思否社群裡同樣有很多人並不是科班出身,但這不影響在日後能取得的成就 —— 他們同樣掌握著過硬的技術素養。但同時,他們又掌握了普通開發者所不具備的業務能力。換而言之,如果大家的技術水平都差不多,你能憑藉什麼更勝一籌呢?那麼你就要不斷地精進,既要成為技術專家,更要成為業務專家。

Q:技術人如何提升自己的業務能力?

具體問題具體分析,但總歸是有些共性的脈絡可循的。無論你是做 2B 還是做 2C 的,第一件事總還是要理清業務流程的。有些人覺得自己就是顆螺絲釘,領導交代自己只負責做個簡單的增刪改查,自己只要會增刪改查就好了,這種心態千萬要不得。只關注自己那一小片天地,是永遠沒辦法成長的。

平時得多問問自己瞭解自己開發的這個產品的目標是什麼?其中哪些功能解決了哪些現實問題?你覺得自己開發的功能滿足了使用者的需求了嗎?如果你自己是使用者,你覺得它好用嗎?如果好用,為什麼好用?如果不好用,哪裡不好用?這些問題你自己未必能想明白答案,那這個時候你就要去多學多問。可以自己主動查公開資料、翻行業案例;也可以去問自己的同事,像產品經理、商務代表,包括同崗位的同事們或直屬上級,都是可以去請教的。有些年輕人會覺得羞澀,不好意思開口,但其實不用刻意為之,平時總得是要溝通需求的吧,趁機會有不懂的就說不懂,虛心請教,總會有收穫的。

有些人會說這些難道不該是產品經理或者專案經理的工作嗎?幹嘛要我去想?確實,從工作職責上來說這些不是你的份內事,但你要明白你弄懂這些事情,不是為了取代前者的工作,而是為了更好地開展自己的工作。你連產品流程都搞不懂,做出來的無論是前端還是後臺,能是好用的嗎?健壯性足夠嗎?有可擴充套件性可維護性嗎?

還有些人說我要轉管理崗,那你就更得懂業務,不然你連一個需求需要投入多少人力都不清楚,怎麼能做好管理呢?

在這點上做軟體外包的開發者們會有些吃虧,畢竟業務不是自己的,可能全公司都沒幾個人能真的講明白業務流程,完全是甲方讓幹什麼就幹什麼。這就需要你自己去嘗試總結方法論。比如你做多了某一類的外包專案,總能找到其中的共同點或相似之處吧?那麼可以順著這個思路去總結。

每個人所處的行業不同,這裡我也只好泛泛而談。總而言之,多學、多問。

Q:如果可以重新選擇,是否還會選擇這個職業?

也許會,也許不會。我是個不太願意去對已經做出的既往決定重新假設的人,因為這往往代表著一個人對現階段的迷惘、不滿甚至悔恨。既然當初我沒有選擇其他的路,那麼我也就不會再去想如果當初選擇了另一條路會怎樣怎樣 —— 那對我現在已經選擇的這條路毫無幫助。

Q:對思否社群有沒有什麼建議?

最近隨著 ChatGPT 的流行,社群裡也出現了不少“AI 搬運工”,我覺得這種現象是需要警惕的。

首先宣告,我個人是不排斥 AI 答題的,因為我本人也在使用,有的時候確實比搜尋引擎要好用。但它僅僅只能作為一個參考,而不是作為問題的解決方案。

AI 生成的回答最大的問題在於,它自己是不知道答案的對錯的,只能是把語料庫中的內容加工一番然後呈現給你。但語料庫裡的內容真的就對嗎?思否上某些 AI 搬運工真的是隻管搬運,不管對錯(當然,如果他本人能知道正確的答案,想必也不會照搬 ChatGPT 了)。一個不知道答案對錯的人,複製貼上了一個不知道答案對錯的 AI 生成的內容,去解答一個本來就有困惑、很難鑑別答案是否正確的的提問者 —— 這就很可怕了。長此以往的話,思否社群會不會充斥著大量錯誤的內容,給質量本來就不高的中文網際網路環境造成進一步的汙染呢?

Q:對於剛入行的開發者,有什麼想對他們說的?

我是一直覺得程式設計這行跟很多其他工作相比,真的是“逆水行舟,不進則退”。你看最近的 ChatGPT 這類生成式 AI 大熱,坊間一直流傳說 AI 最終會取代一大批程式設計師。《孫子兵法》有言:“知彼知己,百戰不殆”,與其被不知不覺地取代,不如平時能有機會多學學就多學學。萬一真寫不成程式碼了,提前學了還能去寫 AI Prompt 不是?(手動狗頭)

年輕是你們最大的資本,一定要趁這個時間多學習、多進步。隨著全球經濟的整體萎縮,各行各業都在降本增效,如果說原本程式設計師也許是一個可以掙幾年快錢,然後再轉行的一個過渡職業,那麼我奉勸年輕的朋友最好不要再有這個念頭了,這在幾年前可能是對的,但這個世界不是一成不變的。

小編有話說:

在訪談中,@然後去遠足 說到,回答問題的過程本身就是一次消化吸收並檢驗之前自己所學內容的機會,一些有意思的問題也能帶動他思考。“輸出是最好的輸入”,希望我們每個階段都能花一點時間靜下心來,想一想,寫一寫,總結總結,不管是工作中的技能經驗,還是人生的感悟體會,都能消化沉澱,再出發。

“程式設計如逆水行舟,不進則退”,技術在不斷進步和發展,作為走在最前線的開發者,永遠需要學習新的東西,創造新的東西,這個時候,更需要沉著應對,跟上時代的步伐。


《思否有約》記錄你與程式設計的故事。歡迎小夥伴們加入訪談,共同分享成長之路,掃描二維碼報名吧~

相關文章