看到這個問題,從11年參加工作以來,已經做了9年的程式設計師了。從初期的php開發,到後來的java、python等語言的開發,經歷過不同的語言的學習過程。從早期的工程師,到後期的高階工程師、資深工程師、架構師,還擔任過專案經理的角色。從我的經歷來說,對程式設計師來說最難的往往不是寫程式碼。
首先,程式設計師學習一門新的語言或者新的演算法,只要理解了語言的規則和演算法的本質,只需要使用某種程式語言實現演算法的實現即可,這也是大部分程式設計師都擅長的。程式設計師是一個很特殊的人群,讓一個程式設計師去研究一門新的技術,往往能超過你的意料,對於他們痴迷的技術,甚至能夠廢寢忘食,我就遇到過我的同事為了解決問題,竟然到晚上才想起來自己沒吃午飯。
還有就是相當一部分程式設計師他們覺得,最容易的才是寫程式碼,但是寫程式碼也有寫的好的和寫的不好的,就像寫作文一樣,有文筆的人寫出來的和普通人寫的是不一樣的。
初級程式設計師
初級程式設計師大多都是按照領導設計的方案把功能實現,一般都是資料庫的增、刪、改、查操作,期間即便是有程式碼實現上的難點,也不算是什麼大事兒了,畢竟領導已經把大部分問題考慮到了。
中級程式設計師
中級程式設計師一般會參與需求分析、資料庫設計等,此時會對程式的實現邏輯有一定的要求,會對程式碼做些優化,能做一定的程式碼重構,會按照一定的設計模式實現功能,但此階段仍是敲程式碼階段,不屬於最難的。
高階程式設計師
高階程式設計師會處理一些業務上和技術難點的公關了,比如要設計一個從來沒有人實現過的功能,這個過程是從0到1的過程,中間要考慮很多因素,比如需求分析、資料庫設計、程式執行效率、併發控制、容錯處理等等,這就要求程式設計師必須經驗豐富、認真嚴謹才能做出來高併發、高可用的專案。
其次,程式設計師擅長跟計算機打交道,不知道是不是跟計算機打交道時間長了,大部分程式設計師跟別人溝通都不會很流暢。你會發現,程式設計師跟程式設計師之間,有說不完的話,而程式設計師跟陌生人,往往沒什麼溝通的語言。程式設計師是一個不擅長溝通的人群,這也能明白程式設計師為什麼經常會跟產品經理幹起來。還記得平安的產品經理提出“實現手機主題根據手機殼顏色進行調整”的需求,最後跟程式設計師幹架的例子吧。從程式設計師的角度來說,這明顯是產品經理在刁難程式設計師,而產品經理的思維是:不關心能否實現,只關心福斯的需求。
在比如測試拋來一個問題,程式設計師心底本能的反應就是:“哇哇,到底有沒有看我寫的執行教條件”。測試也不是省油的燈:“我就是按照你給的條件測試的啊,你想抵賴?就是你寫的bug”,這麼一來二去雙方吵起來了。
程式設計師最噁心的事,不確定的需求。
你見過這樣的業務人員/客戶麼?對方說:
“我給你提個需求,但是這個需求我還沒有想好。”“ 你們可以先開始開發,等我想好了再隨時調整。”“ 你們先畫頁面吧,頁面上有哪些東西我不太確定,等你們做完一版後,一起看看吧。”想法可能隨時在變,好不容易溝通確認下來,剛動手寫了幾行程式碼,就接到一通電話:“這個需求,我跟我們領導彙報了,我們領導又有點兒新的想法。”程式設計師最煩兩件事:
第一件事是給自己的程式碼寫文件。第二件呢?是別人的程式沒有留下文件。說了這麼多,我認為程式設計師最難的不是寫程式碼,對程式設計師比較難得是:做專案的程式設計師比較難的是理解客戶的需求;對產品的程式設計師來說,比較難的是理解產品經理的需求。歸根結底,對程式設計師最難的還是“溝通問題”。