程序员如何利用周末提高自己?

程序员客栈知乎优质文章约 2278 字大约 8 分钟

球友们好,我是二哥呀。这是星球专栏《Java 面试指南》里的一篇文章,我放在了职场修炼篇里,希望能对大家有一些帮助和启发。

我确信,程序员不是吃青春饭的,因为二哥就是例子,在软件行业摸爬滚打 12 年了,依然热情高涨,并且劳有所获。这十多年的经验告诉我,程序员是个靠技术吃饭的职业。

所以不要年纪轻轻就听信什么「工作日上班,双休日好好休息就够了」这样的话。乘着年轻磨砺技术才是王道,不然在程序员这个后浪一波比一波汹涌的职业里混,你想吃青春饭都吃不了几年。

当然了,我这样说,并不是要你周末两天 48 个小时都在学习,可以像二哥这样,晚上抽出两个小时来充电,或者输出。

再来说说如何提升这件事。我工作十多年,也带过不少实习生、应届生,很多年轻人真的很努力在学,加班加点工作卖力,但也就是差点火候,还是方法不对。

下面我从输入和输出两个方面来讲讲程序员如何利用周末来提升自己。

首先你得明白,一个人的能力就像一个池塘,不断的输入又不断地输出,水池的容量以及水的质量决定了输出的高效与否,输入大于输出,你的池塘就会不断扩大,只输入不输出,你的池塘就是一滩浑浊不堪的死水,一实操就bug满屏。

所以想要提升自己,就得同时做好输入和输出这两块。而输入又在输出之前,要想提升自己,首先就得做好输入,学习更多的深度知识。

根据我与很多同行交流后得出来的结论,程序员要想学习效率高、学习效果好,需要做好下面两点:

·学习基础知识

·巩固基础知识

学习基础知识

其中学习基础知识,又有两点要注意的:找对方向、用对方法。说的更直白一点就是学什么以及怎么学。

学什么?

首先要将基础打牢固,最基本的算法和数据结构一定要滚瓜烂熟,拿起来就能用。

比如下面这些个算法和数据结构类型就一定要熟练掌握。

**10个算法:**递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。

**10个数据结构:**数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;

然后,当将这些基础知识吃透了之后,注意是吃透,至少得做到要用到的时候就能直接用,不用问搜索引擎,你就可以去学习一些更深入的内容了:

比如:

· 编程语言/框架是如何运转起来并输出“Hello World”的?

· 如何让 MySQL 的性能发挥到最佳?

· ArrayList、LinkedList 各自的使用场景有何不同?

· 主流的编程框架和哪些设计模式相关,有没有共性?

当你把这些问题想清楚了之后,你的程序员进阶之路就走了一半了。

怎么学?

每个人的学习方法都不一样,有的人喜欢边做项目边学习,有的人则喜欢学一段时间做一个项目,有的人喜欢看书学,有的人喜欢看视频学,这些都不是问题,重要的是找到适合你自己的。

但下面这几点,最好还是不要去做了,因为我带了这么多人,敢这样做的都是事倍功半,结果惨不忍睹。

1.一味的对着别人的代码去敲。

刚开始不会做只有跟着别人敲,这不是问题,问题是跟着别人敲了之后你要自己理解、自己记忆把它变成自己的东西。照着别人代码敲一遍两遍哪怕三遍,除了练练打字外并没有其它任何帮助。

因为模仿复现不是关键,思考才是关键。你要能做到思考学习别人思路后,脱离书本和博客,完全自己实现功能。只有这样,你的学习才是有效的。

2.想着一口气吃成个胖子

这一块的情况其实也很常见,总有人喜欢速成,学习只学个大概只求个会用,不想着知其然知其所以然;或者说学了一年编程,就想怎么样怎么样?

我学编程十多年了,还是有很大一部分内容是不知道的,甚至说没有掌握的,更不要说,你只在学校/培训班学了一年半载。

技术这玩意儿,不是看了个大概能照着做就会了,一口气吃不成个胖子,必须得扎扎实实地把事情做好。所以不要试图一次性解决所有问题,这里给个建议:可以将每天的学习过程拆分成小块,分阶段学习,这样的效率会更高些。

巩固基础知识

说完了第一点如何学习基础知识,接下来说说第二点如何巩固基础知识。方法千千万,我只说其中一个——刷题,有的放矢的刷题(咱们星球也有 LeetCode 刷题笔记,你可以趁早刷起来)。

下面这个刷题方法很普通但也很实用,推荐给你:

**第一遍:**可以先思考,之后看参考答案刷,结合其他人的题解刷。思考、总结并掌握本题的类型,思考方式,最优题解。

**第二遍:**先思考,回忆最优解法,并与之前自己写过的解答作比对,总结问题和方法。

**第三遍:**提升刷题速度,拿出一个题,就能够知道其考察重点,解题方法,在短时间内写出解答。

如何输出

讲完学习基础知识巩固基础知识,咱们再回到刚开始说的那个池塘,现在水的输入讲完了,池塘里有点东西了,但只进不出还是一潭死水,接下来就系统性的讲讲如何输出。

三种方法:

1.做一些实操性强的个人项目,自己练练手

我这里有一个清单,推荐给大家:

· 文本编辑器

· mini 的操作系统

· 商城/论坛/博客/秒杀/外卖的项目

· 一个可以供别人调用的第三方轮子,比如说 hutool、Apache 的工具类库

· 一个手撸的 Spring 框架

· 消息推送系统/RPC 框架等等

如果你能解决掉这些项目中的难点问题,把项目独立完整的做出来并且运行成功,你的能力肯定能再上一个台阶。

2.写技术文章

大家应该都知道费曼技巧,这也是其中的一种应用了,把你自己弄懂的东西教给别人,让别人也能看懂,在这个过程中你肯定还是要把一个完整的项目给做出来的,一整套下来,你会将自己理解的东西掌握的更透彻更深入。

如果自己只能理解 50%,写出来别人肯定只能懂 20%。

就二哥自身而言,成长的很大一部分就是因为日复一日的输出。

3.接一些开发兼职

这是三种方法中实操性最强的一种了,应该很多球友都体验过,不管是外包、私活,还是毕设,或者工作中的项目也算。

而且不用说,这也是最快最有效的方法了,毕竟编程这件事,光有理论是不够的,动手实践才是关键也是最终目的。

但兼职也有很多坑很多小门道,你首先得注意项目是不是靠谱,像那种没有需求文档的就不要接了。

最后,在这个不断做不断输出的过程中,希望你能做到下面三点:

·让编程成为一种习惯。

·学练结合,从做项目中找知识漏洞。

·思考更深层次,更底端的东西。

因为只有这样,你的这方池塘才能生生不息,源源不绝。

参考链接:https://www.zhihu.com/question/26436364/answer/1266358465open in new window,整理:沉默王二