从无到有:学习程序开发的四个步骤
2016-07-06 16:20
302 查看
常会有人觉得,这些互联网程序员是不是脑袋的构造跟别人有什么不同? 其实在程序员客栈做项目经理这么长时间接触各式各样的程序员过程中,常有机会见证一个个程序员从无到有学会程序设计的过程。不可否认,的确有不少程序员是“生而知之者”,仿佛上辈子就写过代码一样,无论是怎样的程序语言,总是能一碰就上手。 就我的观察,能够快速上手程序员,往往跟大家想像的不一样,未必在数理逻辑上有着很好的表现,而是他们的语感特别强,能够快速调节全新的语言(Programming Language)及「文法」(Syntax)。 或许让很多人出乎意料之外,例如在学习如Java、Python或Ruby等文字界面的程序语言时,女生的表现往往比男生来的好。 以上这些,只是想让你知道:学程序设计就像学语言一样,是有学习方法及步骤的。 通过观察程序员客栈将近两千家BAT级别的开发者,很多都和我有过开发合作,我也整理出了学习程序设计的几个过程,毕竟实践出真知,相信只要你用心也做得到。 第一步–“记”(基础) 没错,就是记。 无论你是「死背」、「用实作去记忆」,你总得把一些最基本的指令、语法背起来。就学语言一样,没有最基本的词汇量及文法概念,相信你是连一句话都写不出来的。 但是比起学人类的语言,程序语言学起来可以说是非常容易。举例来说,我们要具备基础的英文表达能力,可能至少得具备1000以上的单字量以及各式文法规则。相较之下,程序语言可以说简单得多,举例来说,你只要知道以下三个python的规则: 1,变数名称=赋予数字=>如果这个变数名称存在,将这个变数的内容更新为赋予的数字 2,函式(传入值)=>将传入值交给函式,并执行函式 3,a数字* b数字=>将两个数字相乘,并返回结果 及一个函式: 1,print(value)=>印出传入值 2,你就可以写出一个帮你算出倍数的python程序了: 3,input_number = 17 4,print(input_number*2) 熟悉基本语法及指令所需的时数,取决于程序语言及使用情境,基本上至少要知道以下学习元素: 1,什么是指令?长什么样子?(空格、分号) 2,变数的宣告 3,变数的赋值 4,数据类型(字串、整数、浮点数、布尔值) 5,数组 if / else的写法及用法(大括号或缩排?) for / while循环的写法及用法(大括号或缩排?index?递增指令?逗号的位置?) 取得使用者的输入 印出数据到主控台 写过代码的人都知道,以上的学习元素其实没什么,就是熟记而已。接下来,要进入的是实战的领域。 第二步–做一点小东西(应用) 当学会基本的元素以后就可以试着做一点小东西了,例如: 1,用for循环印出1到10 2,在数组中储存10个数字,用for循环一一判读是否大于60。若是,则印出「及格」;若否,则印出「不及格」 3,让使用者输入5笔数据后,印出平均值 所谓熟能生巧,以上几个小题目都能让学生运用到之前的学习元素,你可以想像成是他们的练习题,并能够延伸思考到「这个程序解决了什么生活上的问题?」 第三步–模仿(学习解决方案) 程序开发教学完全鼓励学生模仿既有的、完整的代码。但是有以下前提: 充分了解需求:知道自己要写出解决什么问题的程序 思考:从自己过往的经验出发、检视自己脑中,有没有适合能够解决此问题的知识 有天赋的开发者是极少的,大多程序初学者是无法解决一个从未见过的问题的,在经历过前面两个步骤后,我们会鼓励他上网找「答案」,看看别人的作法,接触全新的思维,将会延伸你的思考框架。这个过程中,常常会听到初级程序员大呼:“原来可以这样!” 而在软件产业,几乎所有的问题都有所谓的「最佳实践」(Best Practice)可以遵循,这些最佳路径都是前人不断的修改、优化、验证而成的,其中往往也蕴含了独特的设计哲学。经过一次两次的模仿,这些最佳实践也多少会被内化为自己的养分,或许哪天自己能够设计出更干净、性能更好的代码。 第四步–原创(设计解决方案) 当你已经能够消化他人的设计哲学并培养解决问题的思维后,这时应以具备初步的解决问题能力,能够针对一个问题提出自己的解决方案。而解决方案的设计并不局限于代码,叙述、流程图都是可以用来表达程序思维的工具。 最后小结–学会这些,就是一个成熟的程序员了吗? 当然,这四步并不是一个纯粹线性的过程,学生有可能会依据问题的难度及情境的不同,而在第三、第四步之间来回踱步。而依据不同的领域及产业,程序员还需要其他不同的技能,如:服务器管理、数据库操作、网页设计、APP设计等等,当这些技能融入了经过以上四步培养的「设计思维」后,才能算是一个能够投入职场的即战力。 但是就像武侠小说中提到的,有了雄厚的内功(思维),学习任何外功(技能)都是轻而易举。初级阶段的程序员切记不要本末倒置了。
相关文章推荐
- Flex程序开发心得小结
- 程序开发中的几个请不要相信
- JavaScript面向对象程序设计教程
- JavaScript高级程序设计(第三版)学习笔记6、7章
- 我的 ARM+Linux 学习路线
- 项目经理应该把30%的时间用在编程上
- 怎样才能学好程序设计?
- [转载]PM和程序员(RD)的相处之道--写给那些血气方刚的产品经理(PM)
- 一些软件设计的原则
- 项目经理问:为什么总是只有我在加班 – 挂包袱现象
- 开发工程师的人生之路
- 三维地形大影像纹理自分块技术与程序设计
- 关于程序设计中条件限制下的增加Page标签的一个方法
- Mac 和 iOS 开发资源汇总
- 怎样成长为一个真正的Oracle DBA (转载)
- C语言程序设计
- 10个实用的PHP正则表达式
- 如何高效学习,强烈推荐,十分受用
- Linux下ICMP洪水***实例
- Android程序开发入门——组件生命周期之Broadcast receiver