首先你得明白,一个人的能力就像一个池塘,不断的输入又不断地输出,水池的容量以及水的质量决定了输出的高效与否,输入大于输出,你的池塘就会不断扩大,换句话说你会的技能就越来越多,只输入不输出,你的池塘就是一滩浑浊不堪的死水,一实操就bug满屏。
所以想要提升自己,就得同时做好输入和输出这两块。而输入又在输出之前,要想提升自己,首先就得做好输入,学习更多的深度知识。
总之,程序员要想学习效率高,学习效果好,只需要做好下面两点最基础的事情:
·学习基础知识
·巩固基础知识
其中学习基础知识,又有两点要注意的:找对方向、用对方法。说的更直白一点就是学什么以及怎么学。
学什么?
首先要将基础打牢固,最基本的算法和数据结构一定要滚瓜烂熟,拿起来就能用。
比如下面这些个算法和数据结构类型就一定要熟练掌握。
10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。
10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树;
不要小瞧了这小小二十组词,展开了去学,怎么都得花你个一年半载,例如单单排序算法就又可以分为以下十种:
然后,当将这些基础知识吃透了之后,注意是吃透,至少得做到要用到的时候就能直接用不用回去再翻书,你就可以去学习一些更深入的内容:
比如:
·编程框架是如何运转起来并输出“Hello World”的?
·如何让自己更正规,更有章法地使用Mysql呢?
·Key、List、Hash、Set、ScoreSet各自的使用场景有何不同?
·主流的编程框架都和设计模式相关,那他们有没有共通性?
当你把这些问题想清楚了的时候,你的程序员进阶之路就走了一半了。
怎么学?
每个人的学习方法都不一样,有的人喜欢边做项目边学习,有的人则喜欢学一段时间做一个项目,有的人喜欢看书学,有的人喜欢看视频学,这些都不是问题,重要的是找到适合你自己的。
但是以下的方法我i觉得会让事倍功半,建议大家就不要这样做囖。
1.一味的对着别人的代码去敲。
刚开始不会做只有跟着别人敲,这不是问题,问题是跟着别人敲了之后你要自己理解自己记忆把它变成自己的东西。照着别人代码敲一遍两遍哪怕三遍,除了让你看得仔细点,练了打字外并没有其它任何帮助。
因为模仿复现不是关键,思考才是关键。你要能做到思考学习别人思路后,脱离书本和博客,完全自己实现功能。只有这样,你的学习才是有效的。
2.想着一口气吃成个胖子
这一块的情况稍微少见,但也不是没有,有的人急于求成,学习只学个大概只求个会用,没有做到知其然还知其所以然。
技术这玩意儿,不是看了个大概能照着做就会了,一口气吃不成个胖子,必须得扎扎实实地把事情做好。所以不要试图一次性解决所有问题,这里给个建议:可以将每天的学习过程拆分成小块,分阶段学习,这样的效率会更高些。
说完了第一点如何学习基础知识,接下来说说第二点如何巩固基础知识。方法千千万,最有效的我认为还是刷题,有方法的刷题。
下面这个刷题方法很普通但也很实用,推荐给你:
第一遍:可以先思考,之后看参考答案刷,结合其他人的题解刷。思考、总结并掌握本题的类型,思考方式,最优题解。
第二遍:先思考,回忆最优解法,并与之前自己写过的解答作比对,总结问题和方法。
第三遍:提升刷题速度,拿出一个题,就能够知道其考察重点,解题方法,在短时间内写出解答。
在这里,给大家推荐两本书还有一些学习网站,能够让大家学得更轻松些。
书:
1、《代码大全》激发你的思维并帮助您构建高品质的代码。
2、《程序员修炼之道》全面阐释了软件开发的许多不同方面的最佳实践和重大陷阱。
网站:
-
GitHub — 开发者最最最重要的网站:https://github.com,能学习但不只是学习。
-
W3school — 最适合新手的网站:https://www.w3school.com.cn/:免费而且全面。
3.实验楼 — 一个在线编程学习网站: https://www.shiyanlou.com/courses/,很方便实用。
- Code School — 一个英文学习网站:https://www.pluralsight.com/codeschool,支持分阶段挑战。
讲完学习基础知识和巩固基础知识,咱们就再回到咱们刚开始说的那个池塘,现在水的输入讲完了,池塘里有点东西了,但只进不出还是一潭死水,接下来就系统性的讲讲如何输出。
三种方法:
1.做一些实操性强的个人项目,自己练练手
田纳西大学助理教授奥斯汀·亨利结合自身经验,给出了一份“程序员都应该尝试的挑战性项目”清单,包含下面六个项目,我之前做了一遍觉得还不错,推荐给大家:
·文本编辑器
·2D游戏-太空侵略者
·编译器-Tiny BASIC
·迷你操作系统
·电子表格
·电子游戏机模拟器
每一个项目都存在不同的挑战,比如文本编辑器就要求在不使用GUI框架中内置的文本框组件的情况下,搭建支持光标移动、选择、插入和删除操作的文本框并将文本文档存储在内存中。
如果你能解决掉这些项目中的这些问题,然后把项目独立完整的做出来并且运行成功,你的能力肯定能再上一个台阶。
2.写技术文章
大家想必都知道费曼技巧,这也是其中的一种应用了,把你自己弄懂的东西教给别人,让别人也能看懂,在这个过程中你肯定还是要把一个完整的项目给做出来的,一整套下来,你会将自己理解的东西掌握的更透彻更深入。
也算是一种不错的实操方式了,能让你的基础更加牢固。
3.接一些开发兼职
这是三种方法中实操性最强的一种了,没有之一。
而且不用说,这也是最快最有效的方法了,毕竟编程这件事,光有理论是不够的,动手实践才是关键也是最终目的。
但兼职也有很多坑很多小门道,你首先得注意项目是不是靠谱,像那种没有需求文档的就不要接了。
最后,在这个不断做不断输出的过程中,希望你能做到下面三点:
·让编程成为一种习惯。
·学练结合,从做项目中找知识漏洞。
·思考更深层次,更底端的东西。
因为只有这样,你的这方池塘才能生生不息,源源不绝。