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