1. gzyueqian
      13352868059

      怎么樣才能晉級(jí)java工程師?那你需要具備以下三種思維邏輯

      更新時(shí)間: 2018-09-29 16:56:49來源: java學(xué)習(xí)瀏覽量:4298

          一、如何通過練習(xí)來提高
          學(xué)習(xí)新框架的姿勢(shì)是:基于現(xiàn)有的業(yè)務(wù)來學(xué)習(xí)。即從工作中學(xué)習(xí),從實(shí)踐中學(xué)。但是,如果一直只使用新的框架來重寫舊的業(yè)務(wù),成長(zhǎng)也會(huì)趨近于0。次,使用新框架時(shí)收獲可能頗豐;第二次,收獲的東西更少;第三次,你可能已經(jīng)學(xué)不到東西。
          因此,在業(yè)余的練習(xí)時(shí)間里,不要一直練習(xí)新的框架,不要再拿 Vue、React Native 去高仿一些應(yīng)用。當(dāng)且僅當(dāng),你所處的項(xiàng)目正在使用新的框架,這種練習(xí)才是有意義的。
          經(jīng)過上面的練習(xí),提高了工作效率。但要成為更加專業(yè)的程序員,還需要提高頂層的能力。下面介紹一些,比較有效的提升方法:
          閱讀開源軟件與重構(gòu)代碼。
          造自己的輪子來重寫應(yīng)用。
          結(jié)合設(shè)計(jì)模式。
          引入其它領(lǐng)域的思想。
          總的來說,收獲還是蠻多的,特別是造輪子,能有更大的提升。與其他的練習(xí)稍有不同的是,因?yàn)樯婕暗酱a設(shè)計(jì),這里的練習(xí)有些難以衡量。這時(shí),我們應(yīng)該是保持著練習(xí)的心態(tài),并意識(shí)到我們是在做這方面的練習(xí)。
          1.閱讀開源軟件與重構(gòu)代碼
          如果在工作環(huán)境中,沒有代碼寫得比較好的人,那就只能從開源代碼中去學(xué)習(xí)。這里,我建議閱讀開源軟件代碼的方式是:
          clone 某個(gè)項(xiàng)目的代碼到本地。
          查看這個(gè)項(xiàng)目的 release 列表。
          找到一個(gè)看得懂的 release 版本,如1.0或者更早的版本。
          讀懂上一個(gè)版本的代碼。
          向后閱讀大版本的源碼。
          讀的源碼。
          可只讀這些代碼,不能讓我們的水平顯著提高,應(yīng)該結(jié)合“重構(gòu)”這個(gè)技能來練習(xí)。從我的練習(xí)經(jīng)驗(yàn)看來,對(duì)于重構(gòu)的練習(xí)是有意思的。我們可以見證,一段不好的代碼在我們的調(diào)教之下,煥發(fā)出新的光彩。當(dāng)重構(gòu)一段壞味道的代碼,對(duì)比重構(gòu)前后的代碼,會(huì)發(fā)現(xiàn)自己竟然有這樣的潛力。
          如果找不到合適的練習(xí)項(xiàng)目,可以到 GitHub 上找一些 star 多,但是沒有測(cè)試、缺少 CI 等的項(xiàng)目練習(xí),這樣的項(xiàng)目在 GitHub 上也是蠻多的。
          有一次,我在尋找一個(gè)迷你的 Markdown 解析器,看到 GitHub 有一個(gè)精巧的實(shí)現(xiàn)。它有 100+ 的 star,但是沒有測(cè)試、四百行的代碼里,有一個(gè)方法有三百多行等的壞味道。于是,便花了幾天的時(shí)間,邊思考邊重構(gòu)這個(gè)項(xiàng)目。這樣對(duì)編碼的提升比較大,因?yàn)楣ぷ鞯臅r(shí)候,完成任務(wù)是優(yōu)先級(jí),然后才是質(zhì)量。
          因此,對(duì)于練習(xí)來說,我們只需要:
          找一個(gè)不錯(cuò)的開源庫。
          閱讀其中的代碼。
          找到代碼中設(shè)計(jì)不好的地方。
          對(duì)自己認(rèn)為設(shè)計(jì)得不好的代碼重構(gòu)。
          結(jié)合《重構(gòu)》一書,來改進(jìn)設(shè)計(jì)。
          需要注意的是:不同的人對(duì)于代碼設(shè)計(jì),有著不同的觀點(diǎn)。如果因?yàn)榇a的設(shè)計(jì)不好,而不是代碼里有各種壞味道(code smell),那么,就不應(yīng)該去給別人的代碼提 Pull Request。
          2.造自己的輪子來重寫應(yīng)用
          與閱讀代碼、重構(gòu)相比,造一個(gè)自己的輪子,來實(shí)現(xiàn)同樣的功能,便是一個(gè)更不錯(cuò)的選擇。在 Web 開發(fā)領(lǐng)域,大部分的開發(fā)框架本身都是『通用型』的框架。即它擁有相當(dāng)多的功能,其中有很多的功能都不會(huì)用到。如你使用 jQuery 的時(shí)候,你可能只會(huì)使用到其中的 Ajax、Event 等功能,那么你就可以寫一個(gè)新的框架,兼容這兩個(gè)接口。
          練習(xí)時(shí)間充裕的時(shí)候,便可以自己動(dòng)手去做一個(gè)。上面說到的閱讀框架代碼,是一種好的方法。除此無論是前端還是后端,我們都可以找到從零創(chuàng)建框架的資料,來幫助我們理解框架的組成。
          通過閱讀諸如 Python 里的 Flask、 Ruby 里的 Sinatra 等輕量級(jí)的框架,我們就能理解一個(gè)框架所需要的元素,并模仿他們做出一個(gè)新的系統(tǒng)。這些框架的關(guān)注點(diǎn)是:處理 HTTP 請(qǐng)求的 CGI、與數(shù)據(jù)庫交互的 ORM、控制邏輯的 Controller 層、返回 HTML 的 View 層等。除了相關(guān)的框架,我們還能在 GitHub 上看到很多人模仿這些框架。做一個(gè)這樣的后臺(tái)框架,搭建自己的博客,就可以理解好這一系列的邏輯了。
          對(duì)于前端來說,也是類似的,諸如 Building React From Scratch,可以讓我們?cè)?250 行理解 React 的原理,并做出一個(gè)類似的框架。除了 MVC,還有模塊化設(shè)計(jì)、數(shù)據(jù)請(qǐng)求等的內(nèi)容。在兩三年前,《JavaScript 框架設(shè)計(jì)》就是這方面一個(gè)不錯(cuò)的選擇。
          我曾經(jīng)造過一個(gè)名為 Lettuce 的前端框架,它的主要目的就是用于:學(xué)習(xí)前端框架的設(shè)計(jì),可以在自己的多個(gè)業(yè)余項(xiàng)目上使用這個(gè)框架。而在前端領(lǐng)域,定制自己的 UI 框架、CSS 框架也是一個(gè)不錯(cuò)的選擇。再用到自己的博客上,寫上『自豪地采用xx框架』,豈不是更加的自豪?
          在底層領(lǐng)域,又有各式各樣的《自制操作系統(tǒng)》、《自制編程語言》、《自己動(dòng)手設(shè)計(jì)物聯(lián)網(wǎng)》的書籍,它們都能讓我們從底層去理解一個(gè)系統(tǒng)的組成。除此,還有各種各樣的剖析類書籍,可以讓我們理解底層機(jī)制的同時(shí),還能制作出一個(gè)框架。
          ,我們只需要能不改寫或少數(shù)改寫代碼,將我們的應(yīng)用運(yùn)行在上面,便是成功的仿造了一個(gè)輪子。
          3.結(jié)合設(shè)計(jì)模式
          設(shè)計(jì)模式,不同的人有不同的看法。在我看來,一個(gè)的程序是要能“看懂”的。即不一定要精通,但要能識(shí)別出來,它是一種設(shè)計(jì)模式。當(dāng)我們看到了一次又一次的相似設(shè)計(jì)時(shí),應(yīng)該猜想到,其背后應(yīng)該是一種設(shè)計(jì)模式。例如,在前端開發(fā)框架中的“雙向綁定”,它實(shí)際上就是發(fā)布-訂閱模式,又或者稱觀察者模式的一種實(shí)現(xiàn)。
          在筆者看來,模式就是一種的語言。當(dāng)別人一說“工廠模式”,多數(shù)人瞬間就明白了,不猶得會(huì)發(fā)出:原來如此,這樣的感嘆。認(rèn)識(shí)了一些模式后,遇到特定的場(chǎng)景,我們就能一下子套用這種模式。
          可只憑閱讀 GoF 的《設(shè)計(jì)模式》一書,又或者《Head First 設(shè)計(jì)模式》、《重構(gòu)與模式》等設(shè)計(jì)模式書籍,我們所學(xué)的知識(shí)便是有限的。我們要做的是:
          先熟悉書本上的示例代碼,來對(duì)不同的設(shè)計(jì)模式有一個(gè)大的了解。
          識(shí)別日常代碼中的設(shè)計(jì)模式。
          練習(xí)這些設(shè)計(jì)模式,并掌握常見的設(shè)計(jì)模式。
          嘗試在日常的代碼中,套用設(shè)計(jì)模式。
          重構(gòu)現(xiàn)有的代碼到設(shè)計(jì)模式。
          要對(duì)設(shè)計(jì)模式進(jìn)行練習(xí),不是一件容易的事。在模棱兩可時(shí),即適合使用 A 模式,又適合使用 B 模式的情況下。可能是為設(shè)計(jì)而設(shè)計(jì),因此要盡可能貼近現(xiàn)有情況。
          4.引入其它領(lǐng)域的思想
          不同的領(lǐng)域里,都有自己領(lǐng)域的思想。比如我們熟知的設(shè)計(jì)模式,便是受建筑領(lǐng)域的《建筑的永恒之道》中描述的 253 個(gè)建筑模式的啟發(fā)。又如今天流行的精益思想,早是來自汽車制造業(yè),可它對(duì)軟件行來說,有著令人受益匪淺的啟發(fā)。好的框架、軟件是會(huì)相互學(xué)習(xí),如 iPhone 與 Android,都在不斷地借鑒——通知中心,但是又在那之上做一些改進(jìn)。
          又比如,今天的前端框架里,很多思想都是從后端“借鑒”過來的。如 Angular 中采用的依賴注入,便是深受 Java 語言的影響。近一點(diǎn)來說,Redux,框架初是用在 React 上,但是它已經(jīng)被推廣到了 React 和     Vue.js 上。
          因此,當(dāng)我們發(fā)現(xiàn)一個(gè)新的思想產(chǎn)生時(shí),便可以嘗試引入到自己的領(lǐng)域里。又或者我們所處的領(lǐng)域,正遇到一些難題,答案可能就在別的領(lǐng)域里。但在這方面的練習(xí),往往都是一些創(chuàng)新性的練習(xí)。多數(shù)時(shí)候,我們的探索可能沒有結(jié)果,但對(duì)自己可能有很大啟發(fā)。
          二、找到合適的時(shí)間練習(xí)
          每天能有半小時(shí)、一小時(shí)甚至更長(zhǎng)時(shí)間的穩(wěn)定練習(xí),比三天打魚兩天曬網(wǎng)的效果要好得多。清理出一些固定的時(shí)間,用來提高自己。
          如果不能的話,那么我們也可以嘗試去擠出一些時(shí)間,如從上下班的通勤時(shí)間。即使是同一公司,不同的人都有不同的上下班時(shí)間,所花費(fèi)在路上的時(shí)間也有所不同。有的人,需要在幾環(huán)外坐個(gè)一個(gè)多小時(shí)的地鐵,再轉(zhuǎn)公交才能到公司;有的人,只需要出門左轉(zhuǎn),走個(gè)十分鐘就到公司了。因?yàn)樵诼飞匣ㄙM(fèi)的時(shí)間不同,也在一定程度上影響了學(xué)習(xí)、練習(xí)的時(shí)間。
          因此,如果可能的話,應(yīng)該減少花費(fèi)在上班路上的時(shí)間,才能避免繼續(xù)陷入這樣一個(gè)惡性循環(huán):租不起近的房子,花費(fèi)大量的時(shí)間在路上,沒有時(shí)間提升技能。
          早上
          早上的練習(xí),是一種慢慢進(jìn)入工作狀態(tài)的感覺。一旦上班時(shí)間到來的時(shí)候,就已經(jīng)進(jìn)入工作姿態(tài)了。對(duì)于“資本家”來說,可謂好事一件。早晨剛醒來,總會(huì)想不起昨天項(xiàng)目做到哪一步,便更容易反思哪里做得有問題。
          有時(shí)候,可以有半小時(shí)的練習(xí)時(shí)間,將這些時(shí)間浪費(fèi)在夢(mèng)里總是有些可惜。同時(shí),提前半個(gè)小時(shí)到公司,寫一些開源軟件的代碼,也是個(gè)不錯(cuò)的選擇。
          需要注意的是:練習(xí)時(shí)不要關(guān)注時(shí)間,重點(diǎn)關(guān)注怎樣提高。目標(biāo)是:讓每天進(jìn)步一點(diǎn)。
          中午
          吃完飯后容易犯困。這個(gè)時(shí)候,身體會(huì)妨礙我們進(jìn)行練習(xí)。可如果你的午休時(shí)間比較長(zhǎng),就可以做一些練習(xí),再去休息片刻。
          碎片時(shí)間
          對(duì)著屏幕寫代碼,時(shí)間一久,集中力就開始渙散,應(yīng)適當(dāng)休息會(huì)兒。刷刷資訊、朋友圈,又或者收集各種資料,拓展一下視野。接收各種新的知識(shí),擴(kuò)展自己的格局,以便于了解整個(gè)市場(chǎng)水平。
          常見的方式有:
          閱讀個(gè)人博客、微信公眾號(hào)。
          維護(hù)自己的 Awesome 列表——尋找自己覺得好的開源項(xiàng)目。
          IT 新聞、技術(shù)文章聚合網(wǎng)站——我很不喜歡聚合網(wǎng)站,大部分的聚合站點(diǎn)的行為無異于文章抄襲。
          GitHub Trending
          將這些內(nèi)容存儲(chǔ)到 Evernote、WunderList、OneNote 等各式各樣的云筆記里,然后定期清理、定期清理、定期清理。收集只是一種方式——沒有啥用的方式,因此建議先讀完一遍,再去收藏這樣的文章。多數(shù)時(shí)候,我們會(huì)發(fā)現(xiàn)自己收藏了很多內(nèi)容、買了很多的書,但卻沒有時(shí)間讀。
          晚上
          經(jīng)歷了漫長(zhǎng)的加班,回到住的地方,可能只想睡覺。如果白天沒時(shí)間練習(xí),晚上也不能抽出時(shí)間練習(xí),長(zhǎng)此以往,一年的工作經(jīng)驗(yàn)就要分成五年來用了。
          晚上練習(xí)的時(shí)候要注意:在睡覺前 30~60 分鐘停止編碼,否則上床時(shí),腦子里可能還是這些代碼,容易失眠。萬一靈感一來,還要爬起來繼續(xù)寫。晚睡之前,可以閱讀一些相關(guān)或無關(guān)書籍、資料。在閱讀的過程中,盡管大腦已經(jīng)不再思考了,但潛意識(shí)還在運(yùn)轉(zhuǎn)中,這時(shí)很容易抓住一些靈感。
          ,困倦的時(shí)候,就盡情休息吧!
          三、怎樣才能持之以恒
          在上文里,我們只談?wù)撘恍┓椒ê图记桑欢鴽]什么用。每個(gè)人都知道“一萬小時(shí)理論”,但真要堅(jiān)持下來,很難。
          我們需要從娛樂時(shí)間里抽出一部分,原本舒適的玩游戲、睡覺、刷微博時(shí)間,現(xiàn)在要成為另外一種“痛苦”?可是,既然這些“無聊的事情”都能上癮,那么是不是代表我們還沒有找到合適的路?
          1.設(shè)定目標(biāo)與 SMART 原則
          練習(xí)可以分為:日常固定時(shí)間的練習(xí),及針對(duì)某一特定主題的練習(xí)等多種類型。當(dāng)我們開始練習(xí)某一個(gè)具體的技術(shù)、框架、模式時(shí),能制定一個(gè)簡(jiǎn)單的練習(xí)計(jì)劃,如每幾天練習(xí)某一內(nèi)容、多少天內(nèi)用某一個(gè)框架實(shí)現(xiàn)什么功能。
          先設(shè)計(jì)一個(gè)小的目標(biāo),并且能在短期實(shí)現(xiàn)。當(dāng)發(fā)現(xiàn)自己可以輕松地堅(jiān)持下來時(shí),再慢慢的擴(kuò)大目標(biāo),直至我們能做得更好。可是,設(shè)定一個(gè)練習(xí)目標(biāo)也不是一件簡(jiǎn)單的事,需要考量很多。
          之前的一個(gè)內(nèi)訓(xùn),讓我學(xué)到了一個(gè)用于制定任務(wù)、目標(biāo)的 SMART 原則:
          具體的(Specific)。即我們要有一個(gè)明確的目標(biāo),如在一周內(nèi)用 Django 寫一個(gè)博客系統(tǒng),而不是用 Django 寫個(gè)東西。
          可度量的(Measurable)。即衡量是否達(dá)成目標(biāo),我們只需要能創(chuàng)建、查看、刪除博客,那么我們就算完成了這樣的任務(wù)。它可以用來不斷地突破自己。
          可實(shí)現(xiàn)性(Attainable)。即這個(gè)目標(biāo)一定是可以實(shí)現(xiàn)的,不能實(shí)現(xiàn)的目標(biāo)沒有啥意義。與此同時(shí),練習(xí)初期定下的目標(biāo)不能困難。
          相關(guān)性(Relevant)。即目標(biāo)與其他目標(biāo)的關(guān)聯(lián)情況,例如,我們練習(xí) Django 是為了提高 Django 或者后臺(tái)的技能。如果我們的大目標(biāo)是提高前端技能,那么這個(gè)目標(biāo)對(duì)于當(dāng)前的意義并不是太大。
          時(shí)限(Time-based)。即時(shí)間限制,如上面提到的一周內(nèi)用 Django 寫一個(gè)博客系統(tǒng)的期限。
          經(jīng)常能在微信朋友圈看到,朋友的 100 天英語閱讀計(jì)劃,這樣的目標(biāo)就是合理的——可實(shí)現(xiàn)的、具體的、有時(shí)間限制、可度量的。
          如果我們想每天固定時(shí)間進(jìn)行練習(xí),那么我們應(yīng)該做一個(gè)短暫的嘗試,如7天,再慢慢的不斷擴(kuò)大時(shí)間目標(biāo),21天、兩個(gè)月,隨后再擴(kuò)大到一個(gè)更大的目標(biāo)。
          2.堅(jiān)持與激勵(lì)自己
          我們可以使用 GitHub 上的 Contributions 來激勵(lì)自己,每的痕跡都很明顯,甚至可以拉攏一些小伙伴,與我們一起參加類似的活動(dòng)。GitHub 本身具有社交屬性,可以讓我們看到別人做了什么,做了多久。
      上文中提到的朋友圈 100 天英語閱讀計(jì)劃,也是相似的,它可以讓別人監(jiān)督你是否完成——前提是,有人一起和你做相同的事,因此可以找個(gè)人和你一起練習(xí),相互監(jiān)督。
          剛開始練習(xí)的時(shí)候,練習(xí)的內(nèi)容基本上很充實(shí)。時(shí)間一長(zhǎng),可能就會(huì)陷入一些瓶頸:要么找不到合適的練習(xí)內(nèi)容,要么覺得練習(xí)過于乏味。這時(shí),可以切換不同類型的練習(xí)項(xiàng)目,例如,做一些自己覺得有意思的小項(xiàng)目。又或者,當(dāng)我們完成一個(gè)目標(biāo)時(shí),給自己一些獎(jiǎng)勵(lì),用來鼓舞自己。

      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日韩精品中文字幕动漫 | 亚洲中文字幕日产乱码在线 | 亚洲成a∧人片在线播放日本 | 香蕉啪视频在线是看 | 中文字幕人成乱码熟女免费69 | 亚洲AV日韩AⅤ综合手机在线观看 |