我們?cè)趯W(xué)習(xí)的過(guò)程當(dāng)中都在思考一問(wèn)題唆香,初級(jí)程序員與高級(jí)程序員到底有什么樣的差別步氏。我每次很辛苦都完成一個(gè)案例,為了一個(gè)小bug就要奮斗好幾天俩滥,甚至十幾天嘉蕾。過(guò)一段時(shí)間,在回過(guò)頭來(lái)霜旧,想把以前敲過(guò)的代碼在復(fù)寫(xiě)一遍错忱,我發(fā)現(xiàn)我做不到。無(wú)數(shù)次不斷的懷疑自己挂据,無(wú)數(shù)次想要放棄以清。事已至此,也只能不斷的堅(jiān)持崎逃,人的選擇在特定的時(shí)候玖媚,不得不讓你一直向前。我問(wèn)了很多的編程大牛的朋友婚脱,我得出結(jié)論就是今魔,高級(jí)程序員,他們費(fèi)力解決的bug障贸,在過(guò)一段時(shí)間错森,也會(huì)忘淡忘。但是他們能過(guò)記住里面的思想篮洁。思想就是解決這個(gè)問(wèn)題的過(guò)程涩维。這么說(shuō)有些空泛和抽象。
我舉個(gè)例子:拿我們初學(xué)者學(xué)到的最簡(jiǎn)單的冒泡排序來(lái)說(shuō)袁波,這個(gè)代碼是怎么實(shí)現(xiàn)的瓦阐。我一想起冒泡排序,就想到就是進(jìn)行兩次循環(huán)篷牌,左右比較睡蟋,那個(gè)大,就交換位置枷颊。這個(gè)是核心思想戳杀。然后再想到该面,冒泡排序就是每一次選出最大的一個(gè)數(shù)放在右的位置,縮小范圍信卡,選出第二大的數(shù)隔缀,放在縮小范圍后的數(shù)組的最右邊。循環(huán)結(jié)束傍菇,排序完成猾瘸。根據(jù)這個(gè)思想,先不管那么多丢习,先寫(xiě)出兩個(gè)循環(huán)牵触。需要縮小范圍,那么第一個(gè)循環(huán)就需要降低數(shù)組范圍泛领,于是就把一個(gè)循環(huán)寫(xiě)成從數(shù)組的長(zhǎng)度開(kāi)始降低荒吏。第二循環(huán)敛惊,需要比較出這個(gè)范圍內(nèi)的最大值渊鞋,并寫(xiě)在最右邊。就把第二循環(huán)瞧挤,寫(xiě)成從0開(kāi)始到第一個(gè)循環(huán)的最右端锡宋。每次循環(huán)進(jìn)行比較,那個(gè)大特恬,就交換位置执俩。完成本次循環(huán)。
這是我第一次寫(xiě)出的代碼
public static int[] bubbleSort(int [] array){
for(int i=array.length-1;i>=0;i--){
int index=0;
for(int j=0;j<=i;j++){
if(array[j]>array[j+1]){
index=array[j];
array[j]=array[j+1];
array[j+1]=index;
}
}
}
return array;
}
}
代碼寫(xiě)完之后癌刽,要再去看代碼役首。找出里面不合理的地方進(jìn)行修改。根據(jù)代碼運(yùn)行的順序找出不合理显拜。我發(fā)現(xiàn)如果i=array.length-1是衡奥,j=i,此時(shí)下面交換array[j+1]產(chǎn)生了數(shù)組越界远荠。所以做了調(diào)整
修改后的代碼
public static int[] bubbleSort(int [] array){
for(int i=array.length-1;i>=0;i--){
int index=0;
for(int j=0;j<i;j++){
if(array[j]>array[j+1]){
index=array[j];
array[j]=array[j+1];
array[j+1]=index;
}
}
}
return array;
}
}
找不出合理的地方矮固,就運(yùn)行,如果有bug,就要根據(jù)bug在進(jìn)進(jìn)行調(diào)試譬淳。
這里我想說(shuō)明一點(diǎn)档址,任何一個(gè)程序最開(kāi)始都不是之追求程序的完美性,而是程序的完整性邻梆,用一句通俗的話說(shuō)守伸,想不管那么多,先讓程序跑起來(lái)浦妄。然后再讓程序逐步完善含友。
比如說(shuō)寫(xiě)一個(gè)app,對(duì)網(wǎng)絡(luò)上的數(shù)據(jù)進(jìn)行讀取替裆,然后呈現(xiàn)在listview上【轿剩可以下來(lái)刷新辆童。
首先,我看到這個(gè)小案例惠赫,先要做的就是是想從網(wǎng)絡(luò)上把數(shù)據(jù)給讀取出來(lái)把鉴,無(wú)論什么樣的數(shù)據(jù)都可以。我需要在控制臺(tái)上看到我的讀取出來(lái)的數(shù)據(jù)儿咱。
此時(shí)的問(wèn)題將轉(zhuǎn)換為怎么在listView中對(duì)數(shù)據(jù)進(jìn)行呈現(xiàn)庭砍。
當(dāng)完成基本骨架的時(shí)候,就需要對(duì)程序一步一步完善混埠。你需要思考怠缸,呈現(xiàn)的時(shí)候,怎么才最好看钳宪。我對(duì)網(wǎng)絡(luò)上的數(shù)據(jù)進(jìn)行讀取時(shí)揭北,網(wǎng)絡(luò)是斷開(kāi)的時(shí)怎么辦。每次都要從網(wǎng)絡(luò)上讀取吏颖,能不能做一個(gè)本地緩存搔体。我讀取的數(shù)據(jù)在listview呈現(xiàn)太死板了,能不能做一個(gè)下拉刷新半醉,對(duì)網(wǎng)絡(luò)上的數(shù)據(jù)進(jìn)行重新讀取疚俱。這幾樣不斷的反問(wèn)自己,發(fā)現(xiàn)問(wèn)題缩多,就能開(kāi)發(fā)出一個(gè)完整性較強(qiáng)的小案例呆奕。
在找工作中,大部分的公司看重你能不能使用已有的框架衬吆,和設(shè)計(jì)模式梁钾,程序員很重要一點(diǎn),就是不要重復(fù)造輪子咆槽,把精力放在對(duì)于你來(lái)講最有價(jià)值的地方陈轿。
如果你準(zhǔn)備開(kāi)始學(xué)習(xí)編程了,想要一份好工作秦忿。我有一些建議麦射。
1.創(chuàng)建github,在你每一次完成一個(gè)小案例是灯谣,就將這個(gè)項(xiàng)目上傳到github上潜秋,大公司看簡(jiǎn)歷是,會(huì)看你在github上有沒(méi)有經(jīng)營(yíng)自己的項(xiàng)目胎许。
2.創(chuàng)建一個(gè)自己的技術(shù)博客峻呛。在博客上寫(xiě)自己的總結(jié)罗售,寫(xiě)你的筆記,寫(xiě)你學(xué)到的東西钩述,寫(xiě)你的體會(huì)寨躁。就像現(xiàn)在我一樣,這是你找工作是牙勘,你學(xué)習(xí)過(guò)的證據(jù)职恳。
3.刷題很重要。我在這里推薦www.nowcoder.com.可以下載牛課網(wǎng)APP方面,比如放钦,你學(xué)習(xí)java, 你就每天練習(xí)10道java題,前期你肯定都不會(huì)恭金。但每做一道題操禀,就去背題目的解析,去理解横腿。這以后對(duì)于筆試颓屑,面試那是至關(guān)重要。
4蔑水。學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與基本算法是很重要的邢锯,這是培養(yǎng)你程序思維的最有效扬蕊,最直接方法搀别。肯定難學(xué)尾抑,不要緊歇父。一個(gè)編程題,規(guī)定一天1個(gè)小時(shí)看看再愈,看不多了榜苫,過(guò)了時(shí)間就不要看了。明天再看翎冲,明天在看一個(gè)小時(shí)垂睬,看不懂,停止抗悍,后天再看一個(gè)小時(shí)驹饺,隨著你對(duì)不斷的學(xué)習(xí),肯定會(huì)明白缴渊,對(duì)于程序思維赏壹,這就是水滴穿石的方法。
5衔沼。每天努力很重要的蝌借,有方法有計(jì)劃是遠(yuǎn)遠(yuǎn)不夠的昔瞧,時(shí)間是唯一有產(chǎn)出的方式,即使你再笨菩佑,即使什么方法都沒(méi)有自晰。都不要緊,你要想做這個(gè)事情稍坯。天道酬勤缀磕,比別人更努力是你勝出的唯一王道。
第一次寫(xiě)這種分享博客劣光,有什么問(wèn)題可以一起討論與交流袜蚕,我的QQ:1982363896
學(xué)而無(wú)友,則孤陋而寡聞也绢涡。