初
我认为 学习编程或者其他技能,不仅是为了谋生,还是为了自由。因为:能力越大,越自由。
我接触编程年龄相对较早,小学时候学信息安全,中学时代学编程。大学时代继续学习编程+点硬件。
毕业后参加过为期半年的反病毒开发培训,较为系统的学习了软件开发相关知识。
通过教身边人学编程,与学习成功者失败者的沟通,我认为编程学习是有快速方法的,是有捷径的。
X | X | X | X |
---|---|---|---|
A1 | 问题分解线 | 这是成为程序员的主线,不同的学历对此过程有不同的加速作用 | 拥有程序员思维 |
A2 | 探究原理线 | 没有细节是解决不了问题的,从细节中吸取营养 | 让程序能成为程序 |
A3[特] | 对抗线 | 放开自缚,变换角度:自由 | 武功要决,招招致命 |
B | 数理知识线 | 编程来自数学,不同的学历对此过程有不同的加速作用 | 成为曾经的计算机科学家 |
C | 界面套路线 | 没有界面的知识,不直观,初学者很难坚持 | 掌握它的套路,不走重复路 |
D1[特] | 理解生活中的格式 | 已经被格式包围了,却浑然不知 | 成为自由人从设计格式开始 |
D2 | 算法线 | 向计算机科学家致敬 | 用起来 |
D3 | 玩转字符串线 | 同样是来自于生活,来自于实际应用 | 常用函数实现一遍呗 |
不同的学历加成给学习编程过程带来了什么
学历即学习经历,确实对学习编程过程产生了不可忽视的影响。
- 时间管理与目的性
拥有更多学习经历的人,更高概率拥有自我融洽的时间管理的方法。并做过实践。
更可能按照自身情况规划出1000小时学习计划并做较为及时的调整。 - 概念互通
高中的众多概念,如集合等。直接或间接地体现在现代程序设计规范中。
而高中拥有的知识的广阔性在某种程度是一个人一生中接近最广阔的时候,大量的概念构成一张网。而计算机科学的知识是网中鱼。 - 方法类似
如分解思维,求解思维,递归,递推等。解决问题就是做题嘛。 - 知识基础
计算机科学归根结底是门技术科学,扎根于数学之上。
学习者拥有更多的数学知识和概念将加快学习进程。
这是拥有更多学习经历者的优势,但是作为没有充足学习经历,没有在学习经历中给自己加分的人,你需要在A1问题分解线,B数理知识线 付出正常的努力。
A1 问题分解线
1. 问题分解,答案查找,难度评估等基础思路。
- 感性理解编程能干什么,不能干什么。
- 图灵机等入门。
- API等概念的引入。
- 算法与数据结构的引入。
- 字典型知识,必备知识的区分。
……
2. 看问题本质与具体语言
- 掌握常用语言的语法
- 常见概念的掌握,类,继承,指针,结构体……
3. 探索问题分解背后的更深原理
- 好的程序与坏的程序
- 大规模程序的掌控:
- 调试,自动测试,
- 从函数到类到命名空间。要解决的问题。
明确技术的设计是服务于人。
4. 做项目-寻找问题、解决问题,熟悉技术
- 比较明确的是,要成为初级程序员,总时间超过1000小时:
- 需要超过150个小规模项目的练习
- 几十个中等规模项目的练习
理想状态是做到一定程度的心中无惑。
A2 探究原理线
A1是探究宏观规则,A2是探究微观细节。
- 硬件和软件
- 多线程同步
- 网络通讯
- 类实现原理实现细节
- CPU运算控制原理实现细节
- ……
A3 对抗线
假如你是一个黑客……
- 去掉自缚,绝不墨守成规。
- 换个视角看世界,处处漏洞。
……
B 数理知识线
- 基础数理概念
整形,浮点,etc. - 逻辑运算
与,或,非,异或 - 进制转换
任意进制 - 加解密
常用算法
C 界面套路线
- UI原理
- UI历史
- UI框架
D1 理解生活中的格式
- 数据结构
- 文件格式解析
图片格式 - 设计自己的文件格式
- 格式背后的危机
D2 算法线
- 常用算法与数据结构
D3 玩转字符串线
- 字符串操作手工实现