如何学习编程:3 个阶段

这是我随着经历的增多,对个人编程学习的看法和从其他地方受到启发的思想,会不断学习,不断思考,不断验证,不断总结。

如何学习编程?

学习程序设计,我主张 实践->理论->再实践 的方式, Learn By Doing__是我强烈推荐并践行的学习方式,也可以说成:In doing we learn.__

Level 1、初级实践:操作编程工具

在编程的初期,不管你会不会写程序,都应先实践 ( 这里的实践是指编程工具操作方面的实践 ),学会操作编程工具。

编程语言从某个角度来说也是编程工具,但是是高级编程工具。

也许有些人会说这是废话,因为没有理论,怎么实践?

不错,当你坐在一台电脑面前不知所措时,你就会想方设法使自己学会操作它, 主动看书,看联机帮助,请教别人,忙得个”不亦乐乎”。

这不是变 被动主动 了吗?

边学习边操作,以实践来带动理论的学习,接着达到 理论与实践同步,就可闯过第一关,学会了编程工具的基本操作,就可以为以后上机实践打下铺垫。

Level 2、学习理论:计算机科学基础 + 编程思想

光学会操作像 VC 这类的工具还不行,工具是死的,人才是活的,不会编程只能是空操作,没有理论,怎么实践。

这时就要学习编程的真功夫了,也就是我说的第二阶段: 学理论 阶段。

深入研究前辈们的著作,吸取前人的智慧精华为我所用,扎扎实实打好编程内功。

功夫到家了就应该 再实践,将学到的东西运用于实际,编写出我们需要的软件来。

学以致用,做中学,这种方式总比”先学好语法的条条框框,再上机实践”的效果好得多。

Level 3、高级实践:学以致用去 Coding

你学了编程技巧,学了代码规范,学了编程思想,就要在代码中去体现。

要做到用你擅长的工具,和思路,开发高质量的软件。

“Talk is Cheap, Show Me Your Code.”

什么是编程思想?

我认为是一种利用计算机举一反三地编程解决问题的能力,或者是面对同一类问题、相似问题时出现的解决思路。

编程思想的培养需要丰富的编程经验,在不断解决问题的过程中逐渐积累出来的。

对于一个真正的程序员来说,编程思想才是其价值所在,编程语言、热门框架、新技术、新开发模式也许某一天都会被替代,但是编程思想永远不会被替代,因为这程序员的不可替代性的表现所在。

编程老手的话

  • 韩顺平

1.思考 -> 编程 -> 再思考 -> 再编程….

2.游泳教练

3.卖油翁

4.困难像弹簧, 你弱他就强

5.多看高手的源代码

关于程序员和算法

  • 工业界的程序 = 框架+业务逻辑

  • 学术界的程序 = 算法+数据结构

所以有些人强调一个程序员必须精通算法是片面的,一个高级程序员精通算法,而初级程序员可能一辈子都用不到算法,所以培训班就算不教算法和数据结构也能让学生找到工作这种现象讲得通了。

参考

及时的学习:在你正需要这些知识的时候学习。这不意味着在了解一门技术前就开始相关的工作。如果你对要使用的技术一无所知,你会在开始阶段就浪费大量时间。但是,我发现只要先做了一下的三件事,你就能够开始使用这门技术开始工作了。

  1. 如何起步
  1. 用这门技术能做什么
  1. 在你 90% 的时间里都会用到的东西

真正的学习是发生在你需要它的时候,而不是在之前就获得它。

有时候,一些超级程序员看起来什么都知道,并且什么都能做,但这只是幻觉。这些超级程序员通常是在一两个领域内非常精通,并且了解大量在很多领域里通用的知识。

仔细想想,可以把自己以往的编码过程分为 4 个阶段:

  1. 先动手后思考 ( 模仿别人的代码 ) => 2. 边动手边思考 ( 学会 Debug ) => 3. 边思考边动手 ( 依赖 Debug ) => 4. 先思考后动手 ( 设计先于代码 )

阶段 1 是入门的时候没人带领,很多功能需要摸索着实现,断断续续经历了疯狂的找源码,复制粘贴别人代码的阶段后,开始自己考虑如何写功能。

阶段 2 是开始尝试自己独立开发功能,从而进入一个新的痛苦期:不知道程序如何设计。不过会调试自己的程序了,也有自己的代码风格。

阶段 3 是从过于依赖 Debug 的恐慌到开始思考程序的内在逻辑,即代码该怎么写,内心运行过一次代码后才对不确定的地方进行调试。代码开始优美起来,会写注释,有了封装意识。

阶段 4 是学习后期需要刻意训练的阶段,明白了 设计应该先于代码 这个道理。设计时候思考全面后期维护会更容易。思考的对象有两个:

一是 思考业务,二是 思考代码逻辑。前者是为了搞清楚业务的内在逻辑:业务的执行顺序和输入变量和输出产物是什么。而后者是为了体现软件工程中强调的原则,比如自顶向下、模块化、封装、高内聚低耦合、提高代码复用性等。

底层的函数基本上只负责:极限运算、逻辑运算和异常过滤。而它的上层方法都对返回值进行严格的过滤,以确保逻辑上的严谨。这样的思路,在代码写完之后调试基本上只需要在 2 个地方进行:书写错误、底层运算和过滤函数。

小公司的员工有一个普遍性,就是学历技术都很普通,无法很好的进入到大公司,也只能在小公司游走,但心里也有抱负和理想,那么我们就要好好利用小公司的工作量大和杂,在这当中锻炼自己,提高自己的技术和基本功。

大公司都已经形成了很好的规模,人尽其责,基本上每个人只用负责一块内容,这将会导致成长很慢,学不到东西,虽然可以把一块做的很精,但有好多东西没有什么深度,如果长期维护将会导致你停止进步。

读万卷书,不如行万里路,行万里路不如名师指路。

读万卷书,不如行万里路,行万里路不如跟随成功人的脚步。

学习一项知识,必须问自己三个重要问题:

  1. 它的本质是什么。
  2. 它的第一原则是什么。
  3. 它的知识结构是怎样的。
  • 编程本质?

进程,线程甚至于所谓协程都是对处理器的占用而已,处理器,内存,IO,网络这是编程最本质的东西。

在代码里,对和错,区分明显,但在现实世界,对和错之间,有很宽的鸿沟。这也是喜欢写代码的原因之一。

技术在不断演变更新,但在现实应用里,要处理的问题,无非还是那些: IO 和计算、 UI 交互等。

  • 一个技术高手的修炼之路?

1、编程c、java、python、js各种语言全都涉猎,心中再无语言;如果汇编也搞过,所有程序在你眼中全都是010101,全都是在CPU、寄存器、内存、IO等运行

2、运维当程序对你来说不再是程序,你就能理解运维,为什么程序会变慢,为什么溢出,为什么效率很低?能运维自己的程序是初段,能运维别人的程序是牛人。

3、设计当你彻底了解计算机如何工作时,如何结合业务需要设计系统架构就不成难题了?可是你能够理解业务吗,你能够超前于业务吗?你能够理解经营吗,能够基于预算设计系统吗?你能够理解运营吗,能够数据运营吗?

###附录:函数式编程中函数内在逻辑参考

函数定义 ( 参数1,  参数2, 参数3, ... ) {
	过滤非法参数
	处理参数
	返回值 = 其他函数 ( 处理后参数 )
	处理返回值
	return 返回值
}

其他函数 ( 参数1,  参数2, 参数3, ... ) {
	过滤非法参数
	处理参数
	返回值 = 其他函数 ( 处理后参数 )
	处理返回值
	return 返回值
}

这种函数逻辑解决问题的方式很像递归的思考过程。

参数1, 参数2, 参数3, ... 中参数是语言自带变量类型,包括类实例和函数。

说明:良好的设计应该考虑设计模式。

本文最后修改时间: 2015年09月28日 20:01:44 (完) CC BY-NC-ND 3.0

若您发现文章中的错误,并愿告知于我,或想与我交流,我的联系方式在: Contacts


上一篇 C 编程、DOS、Windows 之间的关系

All The Best

下一篇 使用 NT6 hdd installer 安装 Windows