程序員常見四種錯誤思維表現,你陷入了幾種?
Hello,大家好,我是 Sunday。
本文為譯文,原文地址:https://levelup.gitconnected.com/four-common-manifestations-of-erroneous-thinking-in-programmers-how-many-have-you-fallen-into-8d46b120d172
01:關于 設計模式
很多人以為熟悉了設計模式和設計原則就算掌握了設計本質。然而,設計模式和原則只是前人在實踐中總結出的經驗和抽象工具。設計的最終目標是解決實際問題,通過適當的抽象,將具體問題的解決方案轉化為程序員的語言。
我見過一些人,知識淵博,理論滔滔不絕,但在面對實際問題時,卻無法提出高明、優雅的解決方案。這種人常被稱為“象牙塔中人”,他們沉迷于理論,卻缺乏實踐的敏銳。
相反,也有一些人對設計模式不屑一顧,認為自己已經掌握了軟件設計的精髓,認為這些術語和模式毫無意義。對他們來說,這些不過是紙上談兵。
有時,我們會因為過于嚴謹地遵循設計模式或原則,而使自己陷入束縛。
比如,我曾遇到一位程序員,在代碼中大量使用組合(如將 User 對象嵌入到 Administrator 中)。當我詢問為何不使用繼承時,明明在此情況下繼承更為合理,他的回答是設計原則要求優先使用組合而非繼承。這讓我思考,是否與其盲目遵循這些模式和原則,不如在理解它們的基礎上,靈活地應用于實際場景中。
02:關于 學習多種編程語言
有些人認為,掌握一門編程語言就足夠了,沒必要去學習多種語言。然而,學習多門合適的編程語言不僅僅是為了謀生。若一門新語言能極大地改變你對編程和設計的理解,那么它就值得一學。
例如,學習 C 語言可以培養嚴謹的思維;動態語言則有助于程序員更好地理解和應用面向對象的編碼方式;而函數式語言在工業生產和計算領域更是有著不可替代的作用。
當然,俗話說 “熟能生巧”,深入理解具體編程語言的特性,包括其運行環境,以及編譯型或解釋型的原理,是提高編程能力的關鍵。
此外,關于編程語言優劣的爭論時有發生,但語言終究是工具,隨著時間的推移,它們會不斷演進和變化。因此,單純的優劣之爭并無太大意義。
03:關于 算法
國外與國內的環境不同,這里針對算法的看法,大家僅供參考即可
算法的重要性一直是一個備受爭議的話題。
軟件的最終目的是 解決問題,而算法與數學密不可分(這也是許多軟件大師具備深厚數學功底的原因)。解決問題的過程可以簡單概括為兩個步驟:
- 將實際問題抽象為一個簡化的數學模型。
- 通過算法解決這個數學問題。
這里提到的算法應該是一個廣義的概念,不僅僅指大學里學到的具體算法,而是指解決上述數學問題的一種方法。
如果在工作中你沒有特別注意到算法的存在,可能只是因為你所抽象出的數學模型相對簡單,現有的框架或方法足以解決問題,因此你不需要特別關注算法。
然而,如果你從事的是創新性的工作,解決的是前人未曾涉足的問題,那么算法可能會成為你成功與否的關鍵因素。
在當今的環境下,擁有廣闊視野和豐富經驗的人不少,但企業實際上很難找到既有視野、又具備深厚算法能力、能夠真正解決復雜問題的人。
04:關于 工作經驗
經驗論的支持者有很多,他們認為在軟件公司,職位、薪資甚至決策能力都取決于經驗,一個有5年經驗的工程師會比一個只有3年經驗的工程師找到更好的工作。
“我是老員工,工作了5年,為什么他只工作3年,工資卻比我高那么多?”
薪資差距背后往往有許多因素,包括領域積累(與業務相關,如互聯網或傳統軟件領域,與純技術無直接關系)、視角、抗壓能力等,這些通常依賴于“經驗”的積累,但這并非絕對。
有句話說:“職業生涯一半是干出來的,一半是總結出來的。”一些優秀的程序員善于總結、觀察、積累,不斷反思和學習,因此他們的經驗更為豐富。
另一方面,程序員的核心任務是解決問題,經驗無法代替解決問題的能力。既然解決問題能力強,為什么不應獲得更高的薪酬呢?
總之,在編程范式和行業教條的迷宮中探索時,我們可能會陷入一些常見的陷阱:
- 過分依賴設計模式
- 因為舒適而局限于一種編程語言
- 低估算法的重要性
- 或誤以為職業穩定就等同于成功。
這就像玩一個復雜的視頻游戲,徹底理解規則不一定能贏,但知道何時改變規則可能會讓你成為冠軍。
對這些常見的誤解保持一種好奇和開放的心態,不僅能讓程序員的旅程更加愉快,還更具創新性。挑戰常規,利用我們掌握的工具,甚至重新定義成為成功程序員的意義。
有時,打破常規才能真正創造出令人驚嘆的成果。