练习,练习,再练习!从第一门编程语言开始专注学习,利用搜索引擎探索不懂的问题,阅读和学习优秀的源码,下面具体来说下。
一、学会专注学习
刚开始想快速学习某种新知识,就不能把注意力分散到其他方面,而是将注意力要聚焦在最必要的地方,一开始只选择一种编程语言,一本书,一个课程等,学会专注于一件事,直到你完全掌握。
学习编程最好的方法就是编程。如果你正在阅读一本书或一篇博客文章,并且遇到了一个代码示例,请在代码编辑器把这些代码输入进去,并尝试让它们工作。你还可以进一步摆弄这些代码,比如尝试改变其中的一部分,或者试试其他方法来应用等等。
二、学编程,学什么?《计算机程序的构造和解释》的作者曾经表达这样的观点:在学习一门新的编程语言时,应该关注这门语言的基本表达形式(Primitive Elements)、组合的方法(Means of Combination)及抽象的方法(Means of Abstraction)这三个特性。
如果展开以上三个特性的话,就几乎包含了学习一门编程语言所需要关注的所有重要知识。
- 基础知识:基本语法、关键字、变量与常量、数据类型、运算符、流程控制、异常处理、文件处理、编程思想(面向对象、面向过程、函数式编程)、多线程支持等;
- 应用知识:网络请求、数据处理、内置函数、对日志和调试的支持、对单元测试的支持、序列化与反序列化等;
- 高级知识:开源类库、开源框架、底层原理等;
选择想学习的编程语言,开始你的学习:
- Python——一种很好的入门语言,用于web应用程序、游戏领域、人工智能和大数据
- Java——用于无数种程序中,从游戏到web应用程序再到ATM软件
- HTML——任何web开发人员的基本起点
- C语言——是一种较古老的语言,C仍然是一个强大的工具,是C 、Objtovi-C的基础
编程小白在学习路上会遇到很多问题,想要快速解决这些问题可以学会使用搜索引擎。编程界有个说法:超级程序员=普通程序员 Google。用好搜索引擎,Google GitHub也许可以解决你大部分的问题。
- Newest ‘python’ Questions—一个与程序相关的IT技术问答网站
- 3.10.4 Documentation—Python各个版本的官方文档
如何正确提问?
首先提问之前要自己先去主动找解决方法,不做伸手党,其实直接问问题就好,千万别一上来就——在吗?你是做Python开发的吗?......这是查户口吗?
几点可操作的建议:
- 把背景说清楚,你要尝试解决什么问题。比如你在学习某一网课,照着教程码代码,但是教程里代码是正常运行,到了你码代码却出了bug,提问前附上该课程的网址;
- 交代清楚你为了解决这个bug,已经做了哪些尝试却依旧未解决。交代是缩小bug的范围,节约大家的时间。所以这一小步骤,尽自己所能详细的交代清楚;
- 说明你想要的结果是什么样子的,问题被解决后应该是怎样的;
框架和 API 都是变化很快的事物。但软件设计的基本原则却是经久不衰的。所以应该去学习那些跨越编程语言栅栏的编程原则。
一些例子:
“一个需求上的小变化应该只会引发代码实现上的一个小变化。”(引自 《软件开发实用手册(A Practical Handbook for Software Development)》)
只做一件事情 (DOT)——从 Doug McIlroy 的“一次只做一件事情,把这件事情做好(DOTADIW)”中简化而来——一个函数应该只执行一个任务。因此,一个函数不应该既获取数据又处理数据,并绘制到屏幕。这个函数应该只获取数据,或者只处理数据,或者只绘制到屏幕。(所以,是时候把你的 React 组件拆分成更小的部分了!)
“对接口编程,而不是对实现编程。” ——四人帮(Richard Helm、Ralph Johnson 和 John Vlissides),《设计模式》
“优先选择对象组合而不是类继承。”——四人帮,《设计模式》
“过早发生的优化是万恶之源。”——Donald Knuth
“你并不需要它(YAGNI)”——请不要为实际上还不需要的东西去编写代码。
五、阅读优秀源码用拼图、搭积木的心态来学习源码,如果你想了解它们是怎么组装在一起的,那你就需要把它分解成每一小块,再去弄清楚每一个模块是如何实现的,整体架构是怎样的。
关于源码阅读的三层境界:
初级:记流水账——初期的源码阅读文章基本上是记流水账,例如对源码一行行加注释,只关注底层实现细节,但并未形成更高层次认知,对其设计理念没有提炼与深度领悟。中级:能提问、思考、提炼——要求我们在阅读源码的时候多思考,并反问自己如果自己实现的话该如何着手,如何设计,带着疑问去研究源码。通过对比,思考,会对其背后的理念有了更深刻的理解。高级:思考、质疑、验证——不管是什么代码,都会存在BUG或者实现并不合理的地方,如果大家在阅读源码的时候能够深入思考, 合理质疑,并能通过验证证明自己的观点,说明我们的能力、思考得到了极大的提升。
六、自我提升书单,
- 编程语言(c/c ):《c语言程序设计》->《c primer》-> C efftive 系列 -> 《C STL 源码剖析》->《深入理解C 对象模型》
- 数据结构与算法:《大话数据结构》->《算法图解》->《数据结构与算法之美》 -> 《剑指offer》 -> LeetCode刷题(至少刷到200多道)操作系统:《操作系统导论》->《现代操作系统》
- 计算机网络:《图解HTTP》->《图解TCP/IP》->《网络是怎么连接的》 ->《计算机网络自顶向下》->《TCP/IP协议详解卷1》
- 计算机组成:《程序是怎么跑来的》->《计算机组成原理:软件/接口与设计》->《深入理解计算机系统》数据库:《SQL必知必会》->《从根儿上理解mysql》->《mysql技术内幕》->《高性能mysql》
- 编译原理:《程序员的自我修养》