.NET 開(kāi)發(fā)者提高編程技能的五種方法
即使擁有40年的編程經(jīng)驗(yàn),我唯一能確定的就是肯定有比我更好的程序員。但是我并沒(méi)有放棄,我會(huì)繼續(xù)嘗試并提高自己的編程技能。
我認(rèn)為有五件事可以幫助任何人成為更好的程序員。有些是我個(gè)人的經(jīng)驗(yàn),有的則是我從網(wǎng)上和其他程序員那里學(xué)到的方法。
查找適合您的學(xué)習(xí)方法
我們每個(gè)人都以不同的方式學(xué)習(xí)。例如,我不是視頻學(xué)習(xí)的忠實(shí)擁護(hù)者,而是寧愿從書(shū)本或網(wǎng)站上學(xué)習(xí)。而且我敢肯定我并不孤單:對(duì)于許多人來(lái)說(shuō),一段30分鐘的視頻(甚至更長(zhǎng))太慢了。這就是為什么YouTube上一些最受歡迎的編程視頻往往很短的原因-在許多情況下,時(shí)間在5到12分鐘之間。
如果您在學(xué)習(xí)視頻方面遇到困難,建議您去上學(xué),閱讀?;氐轿覄傞_(kāi)始的時(shí)候,編譯器附帶了廣泛的紙質(zhì)手冊(cè),您可以從頭到尾閱讀?,F(xiàn)在所有軟件文檔似乎都在線上,您可以按照自己的進(jìn)度閱讀。
如果您不是被動(dòng)學(xué)習(xí)的愛(ài)好者(無(wú)論是基于視頻還是基于文本),那么還有另一種可行的方法:編寫(xiě)比賽代碼。您不必取勝,但是將自己的技能與其他人置于快節(jié)奏的環(huán)境中通常會(huì)教給您一些新的技巧。而且,如果您確實(shí)贏了-嘿,通常會(huì)有現(xiàn)金獎(jiǎng)。Project Euler[2],TopCoder[3],Coderbyte[4]等幾個(gè)網(wǎng)站都可以挑戰(zhàn)您。
無(wú)論選擇哪種教育方式,都要確保離開(kāi)舒適區(qū)。您需要投入未知才能成為更好的程序員。即使您有多年的經(jīng)驗(yàn),仍然有很多東西要學(xué)習(xí)。
簡(jiǎn)化您的代碼
只要有問(wèn)題的代碼寫(xiě)得好并且易于遵循,閱讀其他人生成的代碼就很有見(jiàn)識(shí)。如果您在編寫(xiě)和維護(hù)代碼時(shí)遇到麻煩,檢查有經(jīng)驗(yàn)的程序員如何處理類(lèi)似的任務(wù)是挑選一些指針的好方法。通常,您會(huì)發(fā)現(xiàn)這些專(zhuān)業(yè)人士盡可能地簡(jiǎn)化了他們的代碼。
這是我多年來(lái)積累的一些簡(jiǎn)化技巧:
刪除明顯的復(fù)制和粘貼代碼。如果您在不同的地方看到相同的代碼,則很可能成為類(lèi)中的函數(shù)或方法的候選者。
將大型代碼塊拆分為較小的代碼塊。同樣,您可以將這些巨大的塊簡(jiǎn)化為函數(shù)或方法,即使它們僅被調(diào)用一次:具有有意義名稱(chēng)的代碼塊也更易于遵循。您并非總是能夠?qū)⒋a簡(jiǎn)化為單一功能,但這是您可以追求的目標(biāo)。
使用重構(gòu)工具使變量名更具描述性。另外,添加有意義的注釋。從簡(jiǎn)單的函數(shù)開(kāi)始,以便您可以理解它們,并力求在每個(gè)函數(shù),類(lèi)和方法的頂部至少有一行注釋。
學(xué)習(xí)不同的編程語(yǔ)言
同樣,作為一名程序員而提高意味著要超越自己的舒適區(qū)。例如,如果您了解面向?qū)ο蟮恼Z(yǔ)言,請(qǐng)嘗試一種功能性的語(yǔ)言。對(duì)于C#,顯而易見(jiàn)的功能語(yǔ)言是F#。同樣,如果您僅編程桌面應(yīng)用程序,請(qǐng)嘗試學(xué)習(xí)移動(dòng)或Web開(kāi)發(fā)[5];如果您知道C#,則可以將Xamarin用于移動(dòng)開(kāi)發(fā)[6],也可以將ASP.NET MVC用于Web。我知道臺(tái)式機(jī)C#和Xamarin,但不了解ASP.NET MVC,我最近開(kāi)始學(xué)習(xí)在線課程。
盡管它可能對(duì)您的編程無(wú)濟(jì)于事,但我鼓勵(lì)Windows開(kāi)發(fā)人員學(xué)習(xí)如何使用Linux[7]。您可以將其安裝在舊PC或Windows機(jī)器上;如果要對(duì)網(wǎng)站進(jìn)行編程,請(qǐng)嘗試在Linux[8]上設(shè)置Apache Web服務(wù)器。
學(xué)習(xí)新編程語(yǔ)言的首選方法是轉(zhuǎn)換現(xiàn)有的實(shí)用程序或小型程序。因?yàn)槟呀?jīng)知道它的作用以及它的工作方式,并且獲得了輸出或測(cè)試結(jié)果,所以使用新語(yǔ)言確實(shí)可以簡(jiǎn)化學(xué)習(xí)過(guò)程。例如,我通過(guò)獲取現(xiàn)有Z80編輯器/匯編器的源代碼并從中編寫(xiě)6502交叉匯編器來(lái)學(xué)習(xí)Z80匯編器編程。我沒(méi)有調(diào)試器,這可能有點(diǎn)極端,但是它對(duì)我有用。
探索不同的做事方式
這可能是這五件事中最難做到的。遇到編程問(wèn)題時(shí),我的直覺(jué)總是鎖定解決問(wèn)題的特定方式。但是通常有更多的方法可以解決它。一旦用通常的方法解決了問(wèn)題,就可以通過(guò)更快或更節(jié)省內(nèi)存的方法來(lái)重做舒適區(qū)。起初可能會(huì)令人沮喪,但它可能使您成為功能更豐富的程序員。
在調(diào)試器中單步執(zhí)行代碼
您可能會(huì)認(rèn)為所有程序員都這樣做;但是在我的職業(yè)生涯中,我遇到了至少兩個(gè)沒(méi)有這么做的人,他們留下了一個(gè)漏洞被客戶(hù)發(fā)現(xiàn)。(“生產(chǎn)測(cè)試”,我曾聽(tīng)說(shuō)過(guò)這種說(shuō)法,但這并不是對(duì)職業(yè)的友好舉動(dòng)。)如果您確信自己的軟件沒(méi)有錯(cuò)誤,那么可以采用著名計(jì)算機(jī)科學(xué)家Donald Knuth[9]的方法:他將獎(jiǎng)勵(lì)支票郵寄給發(fā)現(xiàn)自己編寫(xiě)的軟件有錯(cuò)誤的任何人。
不愿意冒險(xiǎn)嗎?單步執(zhí)行代碼。您將對(duì)正在發(fā)生的事情有一個(gè)更好的了解,確定自己思維中的薄弱環(huán)節(jié),并在下次構(gòu)建類(lèi)似的軟件時(shí)學(xué)習(xí)做什么(或不做什么)。
結(jié)論
我會(huì)練習(xí)這些技巧嗎?多半是對(duì)的。正如任何程序員所知道的那樣,當(dāng)您忙于工作時(shí),很難找到學(xué)習(xí)和成長(zhǎng)的時(shí)間。盡管如此,重要的是要保留時(shí)間嘗試新事物。盡可能地保持技能的磨練不僅是保留您的工作,而且還可以完成您實(shí)際想要做的項(xiàng)目的最佳方法。
References
[1] David Bolton: https://insights.dice.com/author/dhbolton/
[2] Project Euler: https://projecteuler.net/
[3] TopCoder: https://www.topcoder.com/challenges/?pageIndex=1
[4] Coderbyte: https://coderbyte.com/
[5] Web開(kāi)發(fā): https://www.dice.com/jobs/q-Web+development-jobs
[6] 移動(dòng)開(kāi)發(fā): https://www.dice.com/jobs/q-Mobile+development-jobs
[7] Linux: https://www.dice.com/jobs/q-Linux+Administrator-jobs
[8] Linux: https://www.dice.com/jobs/q-Linux+Administrator-jobs
[9] Donald Knuth: https://en.wikipedia.org/wiki/Knuth_reward_check
原文鏈接
https://insights.dice.com/2017/08/29/5-ways-improve-programming-skills/