只要三步,让你的编程能力突飞猛进
全文干货
总计 2758 个字
阅读约需 7 分钟
我的编程能力是从什么时候开始突飞猛进的?
不是浑浑噩噩的四年大学,也不是代码搬运的三年工作,而是为了旅行而不得不做的那一年兼职。
本人大学专业是计算机,全称计算机科学与技术,俗称码农预备班。当时听说这个专业热门就业就选了,又听说前端容易学又选了前端,浑浑噩噩读了四年后进了一家行业中游的互联网公司接着浑浑噩噩搬了三年轮子。
这七年虽然谈不上懈怠,但也是按部就班,规规矩矩的。直到16年底,觉得自己受够了日复一日搬运代码的枯燥生活,先是请了一个月的假去旅游,后来干脆不想回去上班了。于是,为了解决旅游中的吃喝住的问题,开始做副业做兼职。直到一年后被一家头部互联网公司录用,回归一线。
也有朋友问我,为什么出去玩了一年,反而实力进步了,从一个中游公司到了头部。我想了想说:「就是因为从公司里出来了,才有机会学一些新东西接触一些新项目」。
接下来讲一下这一年我用了什么方法,才做到突飞猛进的:
其实那一年,我做的事情无非就两件,接「编程的项目」然后重新「学基础知识」。我是在开始接程序员兼职之后,得完全为项目的一个端口负责的时候,才知道自己的编程能力有很大的漏洞。因为还在公司的时候一直是几个前端的同事一起做,自己不会就交给别人解决,到头来自己还是不会。
意识到了这点之后,才开始回过头来补基础,这里给大家分享一下我当时的思路:
- 学习基础知识
- 巩固基础知识
其中学习基础知识,又有两点要注意的:找对方向、用对方法。说的更直白一点就是学什么以及怎么学。
学什么?
首先要将基础打牢固,最基本的算法和数据结构一定要滚瓜烂熟,我当时是要求自己拿起来就能用。
比如下面这些个算法和数据结构类型我是硬逼着自己啃下来的,很多兼职的时候没用上,但是后来回归工作的时候用上了。
10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。
10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;
不要小瞧了这小小二十组词,展开了去学,怎么都得花你个一年半载,例如单单排序算法就又可以分为以下十种:
然后,当将这些基础知识吃透了之后,注意是吃透,我给自己定的要求是用到的时候就能直接用而不是回去再翻书。做到这一点之后,我就接着去学习一些更深入的内容:
比如:
- 编程框架是如何运转起来并输出“Hello World”的?
- 如何让自己更正规,更有章法地使用Mysql呢?
- Key、List、Hash、Set、ScoreSet各自的使用场景有何不同?
- 主流的编程框架都和设计模式相关,那他们有没有共通性?
当我把这些问题想清楚了的时候,我发现之前的很多问题都难不倒我了。
怎么学?
每个人的学习方法都不一样,有的人喜欢边做项目边学习,有的人则喜欢学一段时间做一个项目,有的人喜欢看书学,有的人喜欢看视频学,这些都不是问题,重要的是找到适合你自己的。
但下面这几点,最好还是不要去做了,因为这些坑这些痛我都已经经历过了,头发也掉过了,结果事倍功半惨不忍睹。
1.一味的对着别人的代码去敲。
刚开始不会做只有跟着别人敲,这没有关系。但是跟着别人敲了之后一定要自己理解自己记忆把它变成自己的东西。照着别人代码敲一遍两遍哪怕三遍,除了让我看得仔细点,练了打字外没有其它任何帮助。哦,对了,还多掉了几根头发。
所以要记住模仿复现不是关键,思考才是关键。要能做到思考学习别人思路后,脱离书本和博客,完全自己实现功能。当我做到这点之后,我发现我的学习才是有效的。
2. 想着一口气吃成个胖子
我刚刚说过了,自己是因为项目做不出来才回过头来学习的,所以刚开始急于求成,学习只学个大概只求个会用,没有做到知其然还知其所以然。
但是技术这玩意儿,不是看了个大概能照着做就会了,一口气真的吃不成个胖子,必须得扎扎实实地把事情做好。所以不要试图一次性解决所有问题,这里给个亲测有效的建议:可以将每天的学习过程拆分成小块,分阶段学习,这样的效率会更高些。
说完了第一点如何学习基础知识,接下来再说说说说第二点如何巩固基础知识。方法千千万,我也试过不少,但最有效的我认为还是刷题,有方法的刷题。
下面这个刷题方法很普通但也很实用,推荐给你:
第一遍:可以先思考,之后看参考答案刷,结合其他人的题解刷。思考、总结并掌握本题的类型,思考方式,最优题解。
第二遍:先思考,回忆最优解法,并与之前自己写过的解答作比对,总结问题和方法。
第三遍:提升刷题速度,拿出一个题,就能够知道其考察重点,解题方法,在短时间内写出解答。
然后给大家推荐我当时看的两本书还有一些学习网站,能够让大家学得更轻松些。
书:
- 《代码大全》激发你的思维并帮助您构建高品质的代码。
- 《程序员修炼之道》全面阐释了软件开发的许多不同方面的最佳实践和重大陷阱。
网站:
- GitHub — 开发者最最最重要的网站,能学习但不只是学习。
- W3school — 最适合新手的网站,免费而且全面。
- 实验楼 — 一个在线编程学习网站,很方便实用。
- Code School — 一个英文学习网站,支持分阶段挑战。
最后一步肯定还是要落在实操的,我的方法是接兼职项目、一个接着一个,因为要供着自己旅行。但其实还有两种方法也能提升自己:
1.做一些实操性强的个人项目,自己练练手
田纳西大学助理教授奥斯汀·亨利结合自身经验,给出了一份“程序员都应该尝试的挑战性项目”清单,包含下面六个项目,我在那之后做了一遍觉得还不错,推荐给大家:
- 文本编辑器
- 2D游戏-太空侵略者
- 编译器-Tiny BASIC
- 迷你操作系统
- 电子表格
- 电子游戏机模拟器
每一个项目都存在不同的挑战,比如文本编辑器就要求在不使用GUI框架中内置的文本框组件的情况下,搭建支持光标移动、选择、插入和删除操作的文本框并将文本文档存储在内存中。
如果你能解决掉这些项目中的这些问题,然后把项目独立完整的做出来并且运行成功,你的能力肯定能再上一个台阶。
2.写技术文章
大家想必都知道费曼技巧,这也是其中的一种应用了,把你自己弄懂的东西教给别人,让别人也能看懂,在这个过程中你肯定还是要把一个完整的项目给做出来的,一整套下来,你会将自己理解的东西掌握的更透彻更深入。
也算是一种不错的实操方式了,能让你的基础更加牢固。
只是要记住,在这个不断做不断输出的过程中,做到下面这三点很重要:
- 让编程成为一种习惯。
- 学练结合,从做项目中找知识漏洞。
- 思考更深层次,更底端的东西。
最后,如果你也想通过兼职来让自己的编程能力突飞猛进,下面这篇文章推荐给你,因为做兼职太容易被坑了。里面有我总结的兼职三接四不接,也就是说哪些兼职不会被坑,而哪些兼职要格外注意。还有一些国内外的兼职平台以及他们的一些特点,希望能对你有所帮助:
End