35年编程史沉淀下来的8条宝贵经
01
1. 時(shí)刻提醒自己:學(xué)習(xí)
學(xué)習(xí)某件事的第一步是承認(rèn)你不知道。這聽起來(lái)很正常,但經(jīng)驗(yàn)豐富的程序員還記得要真正讓自己承認(rèn)這一點(diǎn)需要花多長(zhǎng)時(shí)間。很多計(jì)算機(jī)科學(xué)專業(yè)的學(xué)生畢業(yè)的時(shí)候,都有一種很傲慢的態(tài)度,就是“我知道最好的”,但其實(shí)這只是一種虛張聲勢(shì),他們不知道從哪里來(lái)的自信,就好像他們什么都知道,并且需要向每一位新同事強(qiáng)烈的證明這一點(diǎn)。換句話說(shuō):你所謂的“我知道我在做什么!”這種態(tài)度會(huì)妨礙你學(xué)習(xí)新的東西。
02
2. 不要試圖證明自己是正確的
要想成為優(yōu)秀的人,你必須學(xué)會(huì)吃一塹長(zhǎng)一智。但是千萬(wàn)小心,經(jīng)驗(yàn)也可能教會(huì)我們重復(fù)一些不良行為,甚至也教會(huì)我們養(yǎng)成一些不好的習(xí)慣。我們都遇到過(guò)有8年經(jīng)驗(yàn)的程序員。對(duì)于他們來(lái)說(shuō),同樣的經(jīng)歷,重復(fù)了8次。為了避免這種綜合癥,看看你做的每一種事情,然后問自己:“我怎樣才能讓它變得更好?”
新手(以及很多經(jīng)驗(yàn)豐富的開發(fā)人員)會(huì)看著他們自己寫的代碼,欣賞它的奇妙。他們編寫測(cè)試來(lái)證明他們寫的代碼是可以運(yùn)行的,而不是試圖讓它運(yùn)行失敗。真正優(yōu)秀的程序員會(huì)積極地尋找他們的錯(cuò)誤在哪里,因?yàn)樗麄冎雷罱K用戶會(huì)發(fā)現(xiàn)這些遺漏的bug。
03
3. “代碼可以運(yùn)行了”這個(gè)目標(biāo)不是終點(diǎn),而是起點(diǎn)
是的,你的第一步總是想寫出質(zhì)量很高的代碼,而且代碼上面都寫滿了注釋。但是一般的程序員在這一點(diǎn)上就退出,然后繼續(xù)下一件事。
但是一旦“完成”就停止了這種思想就像是拍一張快照,然后期待它是一件藝術(shù)品一樣。偉大的程序員都知道第一次迭代只是一次迭代。它運(yùn)行起來(lái)了,恭喜你!但你的工作還有很多。現(xiàn)在,使它變的更好。
其實(shí)這個(gè)過(guò)程就是在定義“更好”的含義。讓它變得更快能有什么價(jià)值嗎?可重用更高有什么好處嗎?更可靠嗎?答案隨著每個(gè)應(yīng)用程序的不同而不同,但是過(guò)程都是一樣的。
04
4. 寫三次代碼
好的程序員目標(biāo)是寫出可以運(yùn)行的軟件就可以了。偉大的程序員寫出來(lái)的軟件目標(biāo)是運(yùn)行得非常好。通過(guò)一次編寫這種情況幾乎不可能發(fā)生。最好的軟件通常被寫三次:
首先,編寫軟件以向你自己(或客戶)證明解決方案是可行的。其他人可能沒有意識(shí)到這只是一個(gè)概念驗(yàn)證,但你確實(shí)這么做了。
第二次可以讓它正常地運(yùn)行。
第三次你能夠讓它平穩(wěn)的運(yùn)行。
當(dāng)你看到最優(yōu)秀的開發(fā)人員的工作時(shí),這種級(jí)別的工作可能并不明顯。他們所做的一切看起來(lái)都很出色,但你沒有看到的是,即使是開發(fā)界的大腕兒,也可能在向其他人展示他們的軟件之前就已經(jīng)拋棄了第一個(gè)和第二個(gè)版本。拋棄之前的代碼并開始編寫另一個(gè)版本是一種強(qiáng)大的方式,可以將“更好地”融入到您的個(gè)人工作流程中。
如果沒有其他情況,通過(guò)“寫三次代碼”可以告訴你解決問題的方法有多少種。而且它可以防止你陷入停滯不前的狀態(tài)。
05
5. 閱讀大量的代碼
你可能希望我能夠引導(dǎo)這個(gè)建議,實(shí)際上,這也是提高編程技能的最常見和最有價(jià)值的建議。閱讀他人代碼的原因也很重要,只是不是很明顯而已。
當(dāng)閱讀其他人的代碼時(shí),你會(huì)看到其他人是如何解決編程問題的。但不要把它當(dāng)成是文學(xué)作品,而是把它當(dāng)成一種教訓(xùn)和一種挑戰(zhàn)。想要變得更好,問問自己:
-
那塊代碼我該怎么寫呢?既然你已經(jīng)看到了別人的解決方案,那你會(huì)有什么思路呢?
-
我學(xué)到了什么?我如何將這種技術(shù)應(yīng)用到我過(guò)去編寫的代碼中?(“我從來(lái)沒有想過(guò)可以使用遞歸下降處理那塊的邏輯”)。
-
我如何改進(jìn)這段代碼?如果這是一個(gè)開源項(xiàng)目,你對(duì)自己的解決方案更有信心,那就去做吧!
-
以作者的風(fēng)格編寫代碼。練習(xí)這個(gè)可以幫助你進(jìn)入作者的思維,這可以提高你的同情心。
不要只是漫不經(jīng)心地思考這些步驟。寫下你自己的答案,無(wú)論是在個(gè)人日志、博客、審查代碼的過(guò)程中,還是與其他開發(fā)人員交流的論壇中。就像向朋友解釋問題可以幫助你解決問題一樣,記錄和分享你的分析可以幫助你理解為什么你會(huì)以一種特定的方式對(duì)別人的代碼做出反應(yīng)。這是我之前提到的自省的一部分,幫助你冷靜地判斷你自己的優(yōu)點(diǎn)和缺點(diǎn)。
警告:在不需要成為一名優(yōu)秀程序員的情況下,很容易閱讀大量的代碼,就像一個(gè)想要成為作家的人可以在不提高自己散文的情況下閱讀偉大的文學(xué)作品一樣。很多開發(fā)人員都在尋找開源或其他軟件來(lái)“找到答案”,而且很可能是復(fù)制和粘貼代碼來(lái)解決類似的問題。這樣做實(shí)際上會(huì)讓你成為一個(gè)更糟糕的程序員,因?yàn)槟忝つ康亟邮軇e人的智慧而不去審視它。(另外,它可能比夏季野餐還要麻煩,但因?yàn)槟銢]有花時(shí)間去理解它,你永遠(yuǎn)不會(huì)意識(shí)到你就像是大自然的搬運(yùn)工一樣,只是在做體力勞動(dòng)。)
06
6. 不要把編寫代碼僅僅看作是任務(wù)
從事個(gè)人編程項(xiàng)目有很多優(yōu)勢(shì)。首先,它為你提供了一種學(xué)習(xí)工具以及學(xué)習(xí)技術(shù)的方法,而這些工具和技術(shù)在你當(dāng)前的工作中是用不到的,但是這將使你在下一份工作中更有市場(chǎng)。無(wú)論你是為開源項(xiàng)目做貢獻(xiàn),還是為當(dāng)?shù)厣鐓^(qū)組織做公益工作,你都能獲得技術(shù)技能和自信。(此外,你的個(gè)人項(xiàng)目向潛在雇主證明,你是一個(gè)從不停止學(xué)習(xí)的人。)
編寫代碼的另一個(gè)好處是它強(qiáng)迫你自己去解決問題。你不能把這些難啃的問題留給別人,所以它會(huì)讓你過(guò)早地尋求幫助。
專業(yè)提示:不要只選擇那些你永遠(yuǎn)不會(huì)失敗的個(gè)人項(xiàng)目。你需要失敗!但是你可能不想在工作中失敗,或者給你限定期限時(shí)你也不想失敗。
07
7.盡一切可能做到與其他開發(fā)人員面對(duì)面的工作
傾聽別人的意見是很有幫助的。這可能意味著結(jié)對(duì)編程,或者參加黑客馬拉松,或者加入一個(gè)編程用戶組(比如Vermont Coders Connection)。當(dāng)你為一個(gè)開源項(xiàng)目做貢獻(xiàn)時(shí),要關(guān)注一下你從用戶和其他開發(fā)者得到的反饋意見。你在他們的批評(píng)中看到了什么共同點(diǎn)?
這樣做你可能會(huì)很幸運(yùn)地認(rèn)識(shí)了一位可以完全信任的導(dǎo)師,無(wú)路是編碼技術(shù)還是職業(yè)決策,你都可以完全信任他。所以不要浪費(fèi)這些機(jī)會(huì)。
08
8. 你是在學(xué)習(xí)技術(shù),而不是在學(xué)如何使用工具
編程語(yǔ)言、工具和方法這些都只是一時(shí)的。這就是為什么需要你在這么多的語(yǔ)言和框架中盡可能多的獲得經(jīng)驗(yàn)。重點(diǎn)關(guān)注編程基礎(chǔ),因?yàn)榛A(chǔ)永遠(yuǎn)不會(huì)改變;更關(guān)注體系結(jié)構(gòu)而不是如何編程。如果你覺得做某件事只有一種正確的方式,那可能是時(shí)候進(jìn)行現(xiàn)實(shí)核查了。條條框框的限制會(huì)妨礙你學(xué)習(xí)新事物的能力,也會(huì)使你很難適應(yīng)變化。
我可以繼續(xù)前進(jìn),但自我提升的關(guān)鍵原則是知道何時(shí)停止。
原文:https://mp.weixin.qq.com/s/VU551CnnjSRwi-IwUmqFjw
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的35年编程史沉淀下来的8条宝贵经的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Asp.net Core中SignalR
- 下一篇: 基于Emgu CV+百度人脸识别,实现视