致所有的开发者们
此文来自我个人微信公众号,总的来说,阅读量和反馈都还挺不错,借此分享给广大的博友们。
本文主要内容为如下几个方面?
-
为什么要有一个自己的博客
-
为什么要让自己的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%
这里主要启发的就是做事不能做一半。比如开发者们不要偷懒,该写单测还是要写的。