常会有人觉得,这些互联网程序员是不是脑袋的构造跟别人有什么不同?
其实在程序员客栈(www.proginn.com)做项目经理这么长时间接触各式各样的程序员过程中,常有机会见证一个个程序员从无到有学会程序设计的过程。不可否认,的确有不少程序员是“生而知之者”,仿佛上辈子就写过代码一样,无论是怎样的程序语言,总是能一碰就上手。
就我的观察,能够快速上手程序员,往往跟大家想像的不一样,未必在数理逻辑上有着很好的表现,而是他们的语感特别强,能够快速调节全新的语言(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设计等等,当这些技能融入了经过以上四步培养的「设计思维」后,才能算是一个能够投入职场的即战力。
但是就像武侠小说中提到的,有了雄厚的内功(思维),学习任何外功(技能)都是轻而易举。初级阶段的程序员切记不要本末倒置了。