程序员需要学习的技术无论深度和广度都很可观,学习久了之后总需要回头总结一下自己的学习路线和方法,才有可能在技术水平上提升层次。许多技术好的程序员,他们跟普通程序员的差别一般不只是前者花费了更多时间在技术上,往往也是因为他们在逐步的积累中找到了更高效的学习方法。
写代码或者说广义的计算机技术,本质上都是靠自己动手来学习、研究的。我们一开始的学习方式,往往是边看书边照着敲下代码,偶尔也去网上搜索一些博客、文档辅以学习;之后慢慢的入门了,大概了解到自己所学领域的轮廓后,就可以写一些自己的项目、在自己感兴趣的领域研究得更深一些。
那么在我们一步步走向更高层次的时候,除了看书和写代码,我们还能怎样学习技术呢?
我在这里分享一点我自己的学习方法:
1.学习使用Github
Github不只是一个方便的托管代码、合作开发的平台,很大程度上也是一个集合了世界上所有优质代码的知识宝库。
一方面我们自己可以把它作为一个托管自己代码的平台,把自己平时写的一些小项目、造的轮子放上去,每天都commit一次作为按时打卡。很多代码只有敢于把它开源出来给人家看到,才能让自己用更好的态度对待它。想想你写的代码将来会有很多人给你做code review,而且是一帮看见一个函数超出了一个屏幕都会骂一句的人,你在命名变量、写函数的时候都会再三考虑。另一方面,当我们想要更好的理解我们平时所使用的一些库、理解它的设计时,我们可能会考虑自己造轮子。试着把这些轮子也放到github上,并且以获得star甚至pull request作为目标,也是一种很有挑战性的任务。
另一方面,我们可以在github上阅读其他大牛的代码。以前我总觉得在github上读代码很难坚持下去,watch、star了不少优秀的项目,但都不了了之了。实际上我们可以通过给人家的代码解issue来“逼迫”去阅读代码、理解其设计。一个有名的项目在issue页一般都会有不少其他人提出的问题,某些是自己对于库的使用问题,另一些是库本身存在的Bug等局限性。试着去解issue(回答他人的问题或提交batch给作者),绝对是一种很好的阅读习惯。
(ps:给大家推荐一款叫octotree的chrome插件,可以让你把github当成ide一样阅读代码)
2.Stackoverflow
相比github,stackoverflow更是一个可以检验自己所学、分享自己知识的平台。
我最近把它当成知乎来刷,试着回答了不少问题,越发感受到它是一个好的学习平台。在首页绑定自己感兴趣的话题,可以是自己所专精的、也可以是自己最近感兴趣想要开始学习的一个全新的领域,自己的timeline上则会出现相关话题的提问。因为在这里你的回答必须对提问者有帮助、保证严谨性,否则很容易被别人点down,所以你的每个回答都必须保证自己对问题了解的足够清楚、能够提出建设性的建议或解决方法。那么这就要求你的知识的全面性和扎实性。
我认为stackoverflow可以用来帮助我们进行如下的学习:
(1)回答一些较为基础的实际问题,帮助自己夯实基础、回忆一些基础库等的使用,并且可以作为一个日常的练习;
(2)试着寻找一些较为进阶、涉及更多底层原理的问题,这时你可能就需要进行一些搜索和调研,自己先把这一块研究得够深,然后才能在这样一个较大的问题上提出自己的一些见解,甚至跟其他人讨论从而学习、理解得更深。我为了回答一个有关Android内存模型的问题,又复习了一遍GC相关的一些问题,并且发现了更多可以研究的话题(比如匿名共享内存等),收获很大;
(3)搜索一些最热门的问答,尤其找找那些点up很多、或者讨论很多的回答,在这里往往可以看到一些在其他地方看不到的大牛的思想,提供对一些主题的全新角度的认识或者了解一些Best practice;
另外,在stackoverflow提问也是一种学问,提的问题如果太“伸手”或是已有相似问题,就很容易被点down甚至是关闭。一般如果遇到棘手的问题,怎样搜索都解决不了的,在stackoverflow基本都能有人给你提供解决问题的思路。有时如果研究一个主题,自己也可以在深思熟虑后提出能够激发讨论的gold question。
能够回答问题加深自己的学习,又能够赢得reputation,这种有激励的学习方式是相当有效的。
3.订阅周报、浏览知乎
这种方式主要是为了让自己了解一些热门或是最新的技术,保证自己不至于落伍。
知乎虽然不能作为一个深入学习的工具,但是它上面往往会出现一些新技术趋势的讨论,了解一些新东西也是一个程序员必须要做的,不能总是局限在自己的小圈子里。可以多关注几个在相关领域较活跃的人,这样时间线上就会更多出现新技术相关话题。或者有时看到了自己平时没有关注过的本领域内容,也可以借此发现一个新的学习点,再通过别的方式进行深入的研究。另外当你新开始学习一个领域的技术时,也可以在知乎上搜索一些人家讨论过的话题,对于快速了解这个领域的全貌会有帮助。
订阅周报、月报也是类似的作用,不过更侧重于保持对技术趋势的跟进。另外有时周报也会推送有关某个主题的深入研究的文章,也很值得学习。
4.一点私货
这种学习方法是我在一本书上看到的,也挺有启发性:
选择三位自己的技术偶像,关系跟自己越近越好或者他的技术行为能够在网上很清楚的看到,这样才能对他有一个更加全面的了解。
通过阅读他的博客、代码、技术论坛上的言论或是与他的交谈,了解他对技术的态度、以及自己的学习方法,然后尽可能详细的记在一张纸上。
选择自己可以借鉴,并且可能坚持做到的,尝试模仿他的一些行为。并且更进一步的,比如他活跃在stackoverflow或者github,试着follow他,去追赶他的答题数、commit数,慢慢地跟随他阅读一些代码。
当然这并不是要你忽略自身情况,盲目模仿某个人,而是要让你尝试汲取自己偶像身上的优点,并且以此为激励让自己借鉴他的方法变得更好。等到有一天你做这些事不再需要提醒自己需要模仿谁,你就大致养成了自己独特的学习习惯,甚至慢慢成为了别人的技术偶像。
这种方法我们不一定要照着来,但确实很具有启发性,可以尝试借鉴。
网友评论