天天看點

緻所有的開發者們

此文來自我個人微信公衆号,總的來說,閱讀量和回報都還挺不錯,借此分享給廣大的博友們。

本文主要内容為如下幾個方面?

  • 為什麼要有一個自己的部落格
  • 為什麼要讓自己的GitHub活躍起來
  • 每天給自己一點學習的時間

一、為什麼要有一個自己的部落格

關于為什麼要有一個自己的部落格這個問題,其實與為什麼要寫部落格基本上是相通的。

首先說說關于為什麼要寫部落格?

寫部落格的目的很簡單,就是為了總結和記錄,記錄工作中遇到的問題,總結項目的得失或者是自己沒有深刻了解某個API導緻出現了某某問題等。

如果再往高度說,就是為了分享。分享自己遇到的坑以及是如何填了這個坑及其自己到底是因為什麼原因才落入了這個坑。在寫的過程中,也是讓自己在思考,經過深度的思考和總結,能夠避免再度重蹈覆轍。

寫部落格給我帶來的好處?

(1)提高效率(比如我需要搭建Ubuntu16.04的項目環境時,我直接就可以參考自己的部落格來實作快速搭建);

(2)深究問題,提高知識深度。有的時候解決一些問題時,我們往往都滿足于解決了就行,而非深究這個問題,這時再寫部落格的時候,我就會問自己,為什麼會出現這個問題,有時候弄清楚為什麼比怎麼解決更重要,因為當你知道了為什麼時,就基本上已經有了如何解決這個問題的思路。

(3)引導新人和幫助同僚。特别是團隊帶新人的時候,有的時候新人遇到一些問題(這些問題基本上都是老鳥們已經遇到過),這時新人遇到了時,你可以将你的部落格分享給他,讓他自己看,這時部落格就可以起到引領新人的目的(張開濤先生曾經寫部落格系列文章也是這個目的),當然了,如果時間比較寬裕的話,可以告訴他問題的原因和解決思路;

(4)知識系統化。我認為無論學什麼程式設計語言和架構都需要系統化地去學,像比如HelloWorld這樣的例子,基本上都能學會,有不少朋友僅僅滿足于拿這個技術跑起來一個簡單的例子就表示自己已經掌握了這門技術,就不再繼續學習下去了,除非公司真正的要用到時才去比較系統的去學一下。

比如曾經的我就是如此,曾經的我Python和Node.js我都學過,但是現在的話,留下的隻有Node.js,Node.js還是因為最近對Settings-Sync插件二次開發的時候才去比較系統地去學習。知識系統化的目的在于讓自己所儲備的知識樹更加紮實穩定。

(5)讓思路更清晰。寫作的同時也是理清思路。特别是開發過程中,思路清晰很重要,思路不清晰基本上等于無用功。

寫部落格的好處很多,這裡就不一一說了。寫部落格,堅持很重要。甯可不寫也不能敷衍了事。

有朋友說有了家庭有了小孩哪有那麼多時間來寫這些呢?

我對此的回答是:定期總結很重要,可以不那麼頻繁。比如單身的時候每天寫一篇兩篇或者是兩天篇之類的頻率,有了女朋友然後到結婚再到有了小孩可以根據自己的時間進行合理安排。不過堅持,本人認為很重要,千萬不能三天打魚兩天曬網。記得我剛開始寫部落格的時候,的确覺得好難寫,另外也覺得網上明明就有現成的答案,我何必多次一舉呢。關于剛剛開始寫覺得很難這個問題,萬事開頭難,這是肯定的,聯想到廣大的小夥伴們在校學計算機時,特别是從農村出來的朋友們(這裡不是歧視),哪一個學計算機又是輕松的呢?寫部落格亦是如此。

關于有人說,我文采不好我寫不好怎麼辦?

我對此的回答是我文采也不好啊。寫部落格的主要目的是讓自己總結和記錄而非一定要在此中展示文采。其次在寫多的前提下,慢慢讓文章具有條理性,然後分享給廣大的朋友們。至于文采方面,放眼古今中外又有哪一個天生就寫的一首好文章的呢?也許有,但我不知道。

回到一個原有的問題上來,為什麼要有一個自己的部落格?

原因有這麼幾個方面?

第一、安全感。時代總是在變,誰也不能保證今天的東西,明天不會淘汰(比如曾經的雅虎是多麼的風光,而今早已不複當年勇了或者更糟糕地像AT&T煙消雲散)。

第二、利于學習。我想從學習的角度來說,我做過不少項目,發現很多項目與我以前在學校的時候做的部落格本質上差别并不大,比如權限管理、内容管理等。權限管理又可以有角色、菜單、組織部門、總公司和分公司等。内容管理又可以包含客戶資訊、人力資源管理、财務報表、商品管理、醫療管理等。而這些其實都可以在部落格系統裡面進行複現。寫一個部落格系統,不僅僅是提高自己的實踐能力,同時也是在提高項目認知。

第三、提高影響力。比如阮一峰先生的部落格就是一個很好的證明。當然了,還有很多知名部落客。關于這個影響力的好處我就不多說了。

關于搭建自己的部落格,目前有這麼幾個平台可以輕松搭建?

(1)GitHub。比如我的GitHub部落格平台是使用Hexo,位址為:

https://developers-youcong.github.io/

(2)WordPress。WordPress的名氣就不多說了。記得GitHub裡面的一個開源項目Jeecg的插件開發我覺得其就是參考WordPress的。

關于WordPress平台搭建也可以參考我的這篇部落格:

Ubuntu16.04搭建WordPress:

https://www.cnblogs.com/youcong/p/9309197.html

CentOS7搭建WordPress:

https://www.cnblogs.com/youcong/p/9240603.html

(3)Jekyllt。關于Jekyllt需要搭建對應的Ruby環境。不過我沒有搭建過,更多可以參考其官網。

(4)自己動手豐衣足食。可以選擇自己寫,程式設計語言可以是Java,也可以是Node.js或PHP。最近本人自己就在寫,當然了,寫也不是完全沒有參考的,當初在學校的時候,主要是參考像CSDN、部落格園等這樣的。現在寫的話主要還是站在巨人的肩上,比如我現在主要參考系就是WordPress。之是以寫部落格也是為了實踐自己看的書,比如像分布式存儲之類、高并發等。我一直就不喜歡背那些面試題,因為不了解的話根本記不住,隻要了解的話,基本很難會忘記。

關于上述平台除了GitHub之外,其它都需要你自己有一個伺服器才行。

關于伺服器大家可以去阿裡雲或者騰訊雲、百度雲都行。

也許有人說,我不會Linux。我對此的回答是不會可以去學。在上學時期的時候一篇文章對我印象深刻,文章這樣說,“愛看書的青年,大可以看看本分以外的書,即使和本業毫不相幹的,也要泛覽。譬如學理科的,偏看看文學書,學文科的,偏看看理科書,看看别個在那裡研究的,究竟是怎麼一回事。這樣子,對于别人,别事,可以有更深的了解。在博的基礎上,要漸擇而入于己所愛的較專的一門或幾門。”

這句話聯系到我這位開發工程師身上,我的感觸如下:

我覺得作為一名軟體開發工程師,不僅僅局限于軟體這一塊,同時也要關注其他行業并結交其他行業的朋友,當然了,在此過程中,還是得讀讀書。

再說句行内話,我覺得像做後端開發,比如Java不僅僅要把後端做通,在足以勝任後端工作的前提下(這個勝任不僅僅表示你能夠把活幹好,同時也表示着你多少知道一些架構方面的底層實作),也可以去學學像微信小程式、安卓開發之類的。

而安卓方面則也可以對學學Java相關的,比如安卓就是基于Java語言。再比如像處于中小公司的開發人員一般身兼數職,做背景的往往也兼任前台,前台一般用前端架構(比如vue、angular、react或者是jQuery、BootStrap、AdminLTE、Metronic等)。不過這些架構的基礎就是網頁三劍客(HTML+CSS+JavaScript)。

經過這一圈你會發現技術本質上差別并不大。也許我工作年限不長說這句話有點狂妄了點。以我18年學Python、Node.js、Perl、PHP等來說,基本上很多都是相通的。當然了,我也不建議東打一拳西打一拳的學習方式。因為非常浪費時間,效率又低。學習最有效的方式是帶有目的性,比如我想用SpringBoot+SpringCloud/Dubbo+PostgreSQL寫一個簡單的CMS(其實傳統Servlet+JSP+JDBC就能做這些,我之是以這樣做是因為加深感性認識,這個感性認識,不僅僅包括你知道它是個什麼玩意,怎麼用它,同時也包含遇到問題如何解決的)。我覺得經過以做一個項目的方式作為學習導向比漫無目的的寫HelloWorld或者是看書效率要高很多。

二、為什麼要讓自己的GitHub活躍起來

關于為什麼要讓自己的GitHub活躍起來,理由如下:

(1)GitHub不僅僅是一個倉庫,也是一個開發者的曆程;

(2)一個良好的GitHub,可以為你的應聘加分或者是會有一些企業主動聯系你;

針對(1),為什麼說GitHub不僅僅是一個倉庫,也是一個開發者的曆程?

有句話叫做GitHub寫滿你的故事,每位開發者都是從0到1,然後從1到無窮大。

而GitHub就可以充當見識人,每當我翻閱自己以前的GitHub,看到自己的編碼風格從雜亂無章到漸漸有序,看到自己的學習能力從依賴性或他人驅動性到獨立自主和自我驅動,看到一個一無所知的人慢慢變的知識淵博。

針對(2),為什麼一個良好的GitHub,可以為你的應聘加分或者是會有一些企業主動聯系你?

我們經理在招聘的時候常常說的一句話之一就是請貼出你的GitHub,之是以這麼說,原因與(1)不無關系。

那麼如何讓自己的GitHub活躍起來呢?本人有如下幾點建議:

(1)可以在GitHub上利用Hexo搭建一個屬于自己的部落格,關于搭建Hexo部落格可以參考我的這篇博文:

https://www.cnblogs.com/youcong/p/9965885.html

(2)平時有意識的收集自己常常需要閱讀的資料,将其上傳到自己的GitHub倉庫。我會自己認為比較重要并時常需要閱讀的資料上傳到我的GitHub倉庫,位址為:

https://github.com/developers-youcong/Personal-Learning-Library

(3)開發過程中常常用的腳本或者是腳手架也可以放到自己的GitHub上,這樣一來省的自己在寫,雖然說可以記錄成一個文檔,但是本人覺得還是放在GitHub上好一些。另外關于腳手架,比如像SSM架構+SpringBoot+SpringCloud這種的,雖然有些IDE可以一下子生成,但是個人覺得一下子生成的并不一定适用于你的,比如像SSSM架構+Shiro+Solr+MySQL+Metronic+常用的資料表,完全就可以作為一個腳手架,因為不少企業都在用它,每次搭建架構環境時,隻需git clone下來即可,基本上就可以用了。就像下面我記錄的讀書筆記那樣,要最大程度上複用第一次從0到1的結果,而不是從頭再來。說實話這一點我在這家公司做的不是特别好,雖然說開發前端,基本上就是看到一些好的網站就将其扒下來為我所用,但是覺得效率還是不高。

(4)記錄自己的讀書筆記,譬如像教材類的書一定要記錄詳細筆記,比如《Java資料結構與算法》之類的(關于這本書可以去我的GitHub找到),在GitHub上一般都是使用Markdown來寫,我個人初次寫的時候很不習慣Markdown,後來寫久了發現,覺得愛上Markdown。再譬如像一些非教材類的可以記錄一下自己的心得和體會,又或者裡面某些觀點給你的啟發。

(5)工作一年以上的朋友基本上工作上都能搞定了,在此過程中為了提升自己,比如你想要系統學習SpringCloud,你可以參考官網,并在GitHub上添加對應的倉庫,在此基礎上系統學習。比如像這位朋友那樣,如圖所示:

緻所有的開發者們

該SpringCloud教程位址為:

https://gitee.com/ylimhhmily/SpringCloudTutorial

這裡我想強調一點的是不一定将人家的copy下來,畢竟SpringCloud版本不斷疊代中,你可以選擇适合當下的穩定版本進行學習不一定非要标新立異追求最新版本的,然後放到自己的GitHub上,例子跑起來是必要的,同時也要記錄一下筆記,比如你一開始你不熟悉它肯定會遇到一些錯誤,這些錯誤的原因是什麼,你是如何解決它的,這些都可以記錄在對應的README.md檔案裡面。這種學習方式其實就相當于實踐+理論。記得一位前輩說過一句話,理論不懂就去實踐,實踐遇到問題就去看理論。

(6)自己發起一個開源項目,比如你覺得CSDN或者部落格園在某些方面做的不夠好,你可以寫一個比它們更好的。我就覺得目前部落格有一種非常不好的就是不能同步,比如我在CSDN上釋出可以直接同步到我的部落格園上或是思否、簡書上。當然了,他們這麼做的原因應該也是處于防止大量重複文章占用搜尋資源吧。關于這個我覺得百度應該像Google學習,之是以很多開發人員用Google最大的原因就是因為通常搜尋關鍵字,排名靠前的都是一些優質資源,反觀百度,商業化太嚴重了。另外補充到自己發起一個開源項目,這個開源項目可以是從0到1,也可以不從0到1,比如可以學習Hutool的思想,Hutool這個開源項目實際是一個Java常用工具包集合,開發常用的都能在裡面找到。我們可以參考它,自己也可以發起一個類似的項目,因為Hutool雖然廣而齊全,但是并不能涵蓋方方面面,比如在我現在這家公司比較适應,但是在我一些朋友的公司并不适應。是以在此我想說的是,每待一家公司不僅僅要将對應的業務吃的透一些,同時也要有意識的将一些常用的工具類收集起來。這也是将來跳槽面試的一個亮點之一。這個庫一開始你可以私有化,當相對成熟些你可以将其公開分享給廣大的開發者們。

(7)記錄自己讀源碼的過程。我嘗試過讀Spring源碼,按着Ctrl鍵,滑鼠點進去再點進去發現這樣讀下去沒有盡頭啊。說帶有某個目的去讀,效果雖然會好些,但是我覺得有種方式會更好,那就是比如像我們Java開發的,平常寫代碼的時候也要有意識的翻翻源碼,特别是遇到問題的時候并将問題解決的時候,通過檢視源碼看到裡面的實作,這樣下來,每天看一點點,積累一年或者半年,再或者三到四個月你會發現不少庫的源碼你都能看的懂了,很多實作機制你會發現都有很多相通點。關于這一點我并沒有實踐過三到四個月,目前我僅僅隻是開始,但是我的一個導師實踐過。

三、每天給自己一點學習的時間

現在很多人都很焦慮,是以知識付費很火。前面我說過知識付費不乏有好的。但是大多并沒有那麼好,主要抓住的是人焦慮的心理。

為什麼焦慮呢?

主要是壓力大(這個壓力主要的來源于生活與工作)。其實說真的,我也很焦慮,一是我給自己定了很多目标我想迫切地讓其實作,二是我沒有安全感,我總想讓自己變的更加強大。

但是随着而來,焦慮也逐漸加重,漸漸地導緻我失眠。後來我找到了一種比較好的方法,那就是每天給自己一點學習的時間。

這個學習的時間可以是寫代碼,也可以是看書,也可以是品味一段輕音樂讀上一首優美的詩歌感受詩歌的情形。

每天給自己一點學習的時間,這個學習的時間并不等于就是每次下班回到家中看書或者是寫代碼之類的,而是每天讓自己有一點收獲。

焦慮的根本原因在于自己停滞不前擔心後面的人超過自己或者是前面的人本來與自己的距離是望其項背,最後變成了望塵莫及。

針對此,最好的政策就是每天讓自己進步一點點有所收獲。比如最近我VsCode插件某段代碼不嚴謹,一位同僚指出了我的這個錯誤,是以我決定下次不再出現這種錯誤。再比如最早我的代碼注釋寫的很随意,也是我的那個同僚指出的,是以到現在為止我不管怎麼樣,都要讓自己代碼嚴謹起來。也許是因為之前養成了一個不好的習慣,有的時候嚴謹點,有的時候不那麼嚴謹。從換位思考的角度看,嚴謹的代碼,簡單扼要的注釋,不僅僅對自己有幫助,同時也對同僚閱讀也是一種賞心悅目。

另外分享一下最近閱讀吳軍先生《見識》的閱讀筆記。

1.不做僞工作者

(1)那些既不能給公司帶來較大收益,又不能給使用者帶來價值改進和“更新”,很多都是僞工作。

(2)有的人明明能夠通過學習一種新技能更有效地工作,卻偏偏要守着過去的舊工具工作,甚至手工操作,這種人就是典型的僞工作者。

(3)在做事情前不認真思考,做事時通過簡單的試錯方法盲目尋找答案。

(4)做産品不講究品質、不認真測試,上線後不停地修補,總是在花費很多時間和精力找漏洞和打更新檔。

(5)不注重用有限的資源解決95%的問題,而是把大部分時間和精力用于糾結不重要的5%問題。

(6)每次開會找來大量不必要的人員旁聽,或者總去參加那些不必要的會議。

2.努力一萬小時真能幫你成功嗎?

存在如下誤區:

(1)簡單重複。

(2)習慣性失敗(迷信失敗是成功之母,簡單地重複失敗是永遠走不出失敗的怪圈)。

(3)林黛玉式困境(活在自己的世界裡,排斥外界)。

(4)狗熊扳棒子(10000小時的努力需要一個積累的效應,第二次的努力要最大限度地複用第一次努力的結果,而不是每次都從頭開始)。

3.三闆斧破四困境

(1)第一闆斧:确立“願景-目标-道路”。

(2)第二闆斧:即使聽到不中聽的話,也要試着找出其中的合理之處。

(3)第三闆斧:凡是做記錄,這樣可以避免狗熊扳棒子(從中正好展現寫部落格的好處之一)。

4.做好最後的1%

這裡主要啟發的就是做事不能做一半。比如開發者們不要偷懶,該寫單測還是要寫的。