在這個(gè)時(shí)代,編程是市場(chǎng)所需要眾多技能中的一種。從能夠開發(fā)一個(gè)公司網(wǎng)站到知道如何輕松地修改錯(cuò)誤,這些技能在很多方面對(duì)于一個(gè)職員或者你來說都是非常重要的。然而,保持你現(xiàn)在所在的狀態(tài),可能無法使你達(dá)到你能夠做到的最好狀態(tài),閱讀下面的文章并且學(xué)習(xí)作為一個(gè)程序員如何去提示自己的技能吧。
步入這個(gè)階段的JAVA程序員,提升已經(jīng)是很難了,而且這個(gè)階段的學(xué)習(xí)往往會(huì)比較多樣化。因?yàn)樵谇?年的過程中,你肯定或多或少接觸過一些其它的技術(shù),比如大數(shù)據(jù)、分布式緩存、分布式消息服務(wù)、分布式計(jì)算、軟負(fù)載均衡等等。這些技術(shù),你能精通任何一項(xiàng),都將是你未來面試時(shí)巨大的優(yōu)勢(shì),因此如果你對(duì)某一項(xiàng)技術(shù)感興趣的話,這個(gè)時(shí)候可以深入去研究一下。這項(xiàng)技術(shù)不一定是你工作所用到的,但一定是相關(guān)的。
而且在研究一門新技術(shù)時(shí),切忌朝三暮四。有的同學(xué)今天去整整大數(shù)據(jù),搞搞Hadoop、hbase一類的東西。過不了一段時(shí)間,就覺得沒意思,又去研究分布式緩存,比如redis。然后又過不了一段時(shí)間,又去研究分布式計(jì)算,比如整整Mapreduce或者storm。
結(jié)果到最后,搞得自己好像什么都會(huì)一樣,在簡(jiǎn)歷上大言不慚的寫上大數(shù)據(jù)、分布式緩存、分布式計(jì)算都了解,其實(shí)任何一個(gè)都只是浮于表面。到時(shí)候面試官隨便一問,就把你給識(shí)破了。
步驟:
1.清晰地分析問題。
2.對(duì)于如何去解決問題多思考幾遍。
3.收集完整的需求。
花時(shí)間寫下最終的產(chǎn)品需要達(dá)到的目標(biāo)和你的用戶群是誰,在這個(gè)階段清晰的思路會(huì)為整體省下大量的時(shí)間。
作為一個(gè)程序員如何去提高你的技能
4.寫下充分的實(shí)現(xiàn)計(jì)劃(或模型)。
對(duì)一些小的或獨(dú)立的項(xiàng)目,可能就只需要寫一個(gè)基本的流程圖或者簡(jiǎn)單的式子。
對(duì)于大型的項(xiàng)目,就需要將原來的任務(wù)分成幾個(gè)模塊,并且考慮下面幾點(diǎn):
每一個(gè)模塊必須要執(zhí)行的任務(wù)是什么
在模塊間數(shù)據(jù)是如何傳送的
在每一個(gè)模塊里面數(shù)據(jù)是如何被使用的
雖然收集并根據(jù)需求做計(jì)劃是很無聊的,并且也沒有直接寫代碼有趣,甚至比花時(shí)間改bug都更要無聊。提前花時(shí)間去正確地設(shè)計(jì)你項(xiàng)目的流程和結(jié)構(gòu),你可能會(huì)在你寫第一行代碼之前找到更多有效率的方法去完成你的目標(biāo)。
小編個(gè)人覺得還是需要時(shí)刻提升自己的技術(shù)。給大家推薦一個(gè)程序員學(xué)習(xí)交流群:810589193。點(diǎn)擊鏈接加入群聊【Java架構(gòu)學(xué)習(xí)交流群】:https://jq.qq.com/?_wv=1027&k=59ZopTn群里有分享的視頻,還有思維導(dǎo)圖主要分享分布式架構(gòu)、高可擴(kuò)展、高性能、高并發(fā)、性能優(yōu)化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式項(xiàng)目實(shí)戰(zhàn)學(xué)習(xí)架構(gòu)師視頻。
5.寫好你的注釋。*
如果你認(rèn)為你的代碼需要解釋,那就給它一個(gè)注釋。在每個(gè)函數(shù)之前應(yīng)該有1-2行注釋來說明它的參數(shù)和返回值是什么。注釋會(huì)告訴你為什么,而不只是結(jié)果。記住,在更新自己的代碼的同時(shí)也應(yīng)該更新自己的注釋。
作為一個(gè)程序員如何去提高你的技能
6.用一致的命名習(xí)慣為變量命名**。**
它會(huì)幫助你保持對(duì)每個(gè)變量的記錄并且知道聲明這個(gè)變量的目的是什么。這就意味著不會(huì)有像 x=a+b*c 這樣更多的例子,這會(huì)讓你的代碼更容易去調(diào)試和維護(hù)。一個(gè)受歡迎的標(biāo)記法是“匈牙利標(biāo)志法”,它是將變量名和類型混合命名的。例如,對(duì)于整型變量,你可以使用intRowCounter,而對(duì)于字符串,就可以使用strUserName。不管你的命名習(xí)慣是什么,一定要保證它是一致的并且你的變量名是描述性的。
作為一個(gè)程序員如何去提高你的技能
7.組織你的代碼。
用可視化的結(jié)構(gòu)去標(biāo)示代碼結(jié)構(gòu)。比如說,在一個(gè)條件語句或循環(huán)語句中使一段代碼塊縮進(jìn)排版,并且試著在一個(gè)變量名和一個(gè)像加減乘除這樣的操作符之間放置空格,甚至是等于號(hào)(myVariable = 2 + 2)。就像是讓代碼看起來更優(yōu)美一樣,這也使得我們可以一下就看出程序流程。
作為一個(gè)程序員如何去提高你的技能
8.測(cè)試所有的一切。
開始的時(shí)候在每個(gè)模塊之中測(cè)試,用通常的輸入值來測(cè)試,然后輸入一些可能但是很少見的值,這樣就可以測(cè)出一些隱藏的bug。測(cè)試是有藝術(shù)性的,并且你會(huì)逐漸建立起實(shí)踐的能力。寫下你的測(cè)試用例,包括以下幾個(gè)方面:
極端的值:0,對(duì)于正的數(shù)值型值超出期望大小的值,對(duì)于文本型值就是空字符串,并且對(duì)于一切類型的null。
沒有意義的值:甚至連你自己都不相信,你的最終用戶會(huì)輸入什么莫名其妙的值來測(cè)試你的軟件。
不正確的值:將一個(gè)值為0的數(shù)作為除數(shù),或者期望一個(gè)正數(shù)或者計(jì)算一個(gè)數(shù)的平方根時(shí)輸入一個(gè)負(fù)數(shù)。當(dāng)一個(gè)數(shù)不是一個(gè) 數(shù)值時(shí),輸入一個(gè)字符串,它就會(huì)被轉(zhuǎn)換成一個(gè)數(shù)值類型的值。
作為一個(gè)程序員如何去提高你的技能
9.練習(xí),練習(xí),練習(xí)。
編程不是一個(gè)停滯的技能,總會(huì)有一些新東西需要去學(xué)習(xí),也許更重要的是,經(jīng)常有一些舊東西需要重新學(xué)習(xí)。
作為一個(gè)程序員如何去提高你的技能
10.為改變做好準(zhǔn)備。
在一個(gè)現(xiàn)實(shí)的工作環(huán)境中,需求會(huì)經(jīng)常改變。但是,在開始收集需求的時(shí)候你越清晰,你在開始撰寫實(shí)現(xiàn)計(jì)劃的時(shí)候也會(huì)越清晰,而不是因?yàn)楹?jiǎn)陋的計(jì)劃或者誤解而讓需求的改變起決定性作用。
在開始編程之前,你應(yīng)該扮演一個(gè)積極的角色,通過完善的需求文檔和實(shí)現(xiàn)計(jì)劃來提高程序的清晰度。這樣就會(huì)確保你準(zhǔn)備去實(shí)現(xiàn)的產(chǎn)品確實(shí)是用戶所要求的。
用一個(gè)演示將項(xiàng)目分解,對(duì)于其中的每一塊都可以看成一系列的里程碑,這樣就可以一次只管理一個(gè)過程。那么在任何給定 的時(shí)刻你需要考慮的事就變少了,這樣你也會(huì)能夠更清晰地思考、
作為一個(gè)程序員如何去提高你的技能
11.為了完成復(fù)雜的任務(wù)開始的時(shí)候應(yīng)該盡可能地簡(jiǎn)單。
當(dāng)需要編寫一些困難的程序時(shí),這樣就可以幫助構(gòu)建適當(dāng)?shù)臉?gòu)造模塊并且恰當(dāng)?shù)厝スぷ?。舉一個(gè)例子,比如說你想在屏幕上創(chuàng)建演變的形狀來跟隨鼠標(biāo)的趨勢(shì),并且根據(jù)鼠標(biāo)速度改變形狀。
開始時(shí)通過顯示一個(gè)陣列并且讓它跟隨鼠標(biāo)。首先解決移動(dòng)軌跡問題。
接下來,讓陣列的大小和鼠標(biāo)的速度相關(guān)。獨(dú)立解決形狀和速度問題。
最后,創(chuàng)造你想要的真實(shí)形狀,并且將這三個(gè)模塊組合在一起。
當(dāng)每一個(gè)模塊都是獨(dú)立的時(shí),這樣就能非常自然地讓它進(jìn)行模塊化編程。這對(duì)重復(fù)性編程十分有用(比如你想在一個(gè)新項(xiàng)目中只使用鼠標(biāo)軌跡模塊),并且也能夠更容易地調(diào)試和維護(hù)。
作為一個(gè)程序員如何去提高你的技能
一定要記住,作為一個(gè)JAVA程序員,平日里所接觸的技術(shù)可能會(huì)很多,但是想要讓一門技術(shù)成為你的優(yōu)勢(shì),那么一定是你對(duì)這門技術(shù)的了解強(qiáng)過絕大多數(shù)人才行。
因此在這個(gè)階段,你就不能再簡(jiǎn)單的去學(xué)習(xí)前3年的內(nèi)容了,雖然前面的學(xué)習(xí)如果還不夠深入的話依舊要繼續(xù),但這個(gè)時(shí)候你應(yīng)該更多的考慮建立你的優(yōu)勢(shì),也可以稱為差異性。
差異性相信不難理解,就是讓你自己變得與眾不同。你前面三年的學(xué)習(xí)足夠你成為一名基本合格的Java開發(fā)者,但你離成為一名優(yōu)秀的Java開發(fā)者還有很大的距離。
所謂優(yōu)秀,即能別人所不能。而你前三年所學(xué)習(xí)的內(nèi)容,是很多做過幾年的Java開發(fā)都能夠掌握的。那么為了讓自己有差異性,你就需要另辟蹊徑,找一個(gè)方向深入研究下去,以期在將來,你能夠成為這個(gè)領(lǐng)域的專家,比如分布式計(jì)算領(lǐng)域的專家,大數(shù)據(jù)領(lǐng)域的專家,并發(fā)領(lǐng)域的專家等等。
此外,你除了建立你的差異性之外,還要去彌補(bǔ)你基礎(chǔ)上的不足,直到現(xiàn)在,都沒有提及基礎(chǔ)知識(shí)。原因是基礎(chǔ)是很枯燥無味的,學(xué)的太早不僅容易懵逼,而且懵逼的同時(shí)還容易產(chǎn)生心理陰影,以至于以后再不想去研究這些基礎(chǔ)。但基礎(chǔ)又是你深入研究一些領(lǐng)域時(shí)所必須掌握的,比如你去研究分布式計(jì)算,你不懂算法你玩?zhèn)€毛毛?比如你去做分布式緩存,你對(duì)計(jì)算機(jī)系統(tǒng)的內(nèi)存不了解,你如何去做緩存?
如果你的基礎(chǔ)本來就非常強(qiáng),那么恭喜你,相信你在之前的工作中已經(jīng)充分體會(huì)到了這些基礎(chǔ)對(duì)你的幫助。但我相信大部分人的基礎(chǔ)都很薄弱,哪怕是科班畢業(yè)的人,很多人也不敢說自己當(dāng)初的基礎(chǔ)學(xué)的多么強(qiáng)大,比如算法、計(jì)算機(jī)系統(tǒng)原理、編譯原理這些。
但是每個(gè)人時(shí)間都是有限的,而且這些基礎(chǔ)的書籍每一本讀下來,沒個(gè)一年半載的,還真拿不下來,因此還是要有所抉擇的。雖然藝多不壓身,但問題是藝多是有代價(jià)的,是需要你付出時(shí)間和精力的,而我個(gè)人更贊成在同等代價(jià)的情況下獲取最大的收獲。
對(duì)于想要提升自己,對(duì)自己未來迷茫的Java工程師們,如需要這些架構(gòu)路線圖,以及我們整理的一些架構(gòu)師精講資料,可以加群程序員交流群:810589193獲取哦,點(diǎn)擊鏈接加入群聊【Java架構(gòu)學(xué)習(xí)交流群】:https://jq.qq.com/?_wv=1027&k=59ZopTn涉及的知識(shí)點(diǎn)(Dubbo、Redis、設(shè)計(jì)模式、Netty、zookeeper、Spring cloud、分布式、高并發(fā)等架構(gòu)技術(shù))。