题图来自于NextDay
前几天和一个朋友聊天,聊到非计算机专业学习一门编程语言,如何学?
抛开诸如基础语法和运行原理这些必须要理解的东西外,很重要的一点就是「学以致用」。
「学以致用」最直接的一个体现就是,目前大多数编程教学的书开篇都会有一个「Hello, World」
“Hello, world"程序是指在计算机屏幕上输出“Hello,world”这行字符串的计算机程序,“hello, world”的中文意思是“你好,世界。”。这个例程在Brian Kernighan 和Dennis M. Ritchie合著的《The C Programme Language》使用而广泛流行。
很简单吧,无论是哪种编程语言,只要想办法用它输出一行「Hello, World」,就让初学者感觉与这种语言产生了链接,「欢迎来到它的世界」。单纯一行代码打印出这个字符串,看起来很容易,但是如果加上一些附加条件,比如,这个字符串中要包含你的名字,而且名字要通过手工输入或者变量赋值,这就稍微加了一点点难度,再或者,加上一些判断条件,满足条件1就输出结果1,满足条件2就输出结果2,或者来个加减乘除、字符拼接,这样一层层的附加条件加上去,那就远不止一两行代码了。
所以,今天要说的这个「学以致用」可以算得上是一个高阶版的「Hello, World」,什么意思呢?就是,尝试用这门新语言实现自己的一个需求,比如给自己做一个小工具。
那么,紧接着问题就来了,作为还没入门的初学者,要如何判断这个需求是“可实现”的呢?朋友也问到了这个问题。
我的答案是「都可以实现」。理论上在现阶段,只要不是太天马行空的想法(这里不考虑商业需求),以大多数人普遍的认知来说,能想到的基本上都可实现,只不过实现的时间和代价会有区别。那么,什么的需求适合我们这个高阶版的「Hello, World」呢?有几个原则可供参考。
第一、你的确需要这样一个东西。对于你来说,是实实在在的需求,比如我在 往前一小步 中提到的,因为懒得每天都去打开网页查收通知,就写了一个脚本去自动爬,爬完通过邮件通知我。这充其量只能说是一个小脚本,连工具都算不上,但是却特别适合作为高阶版的「Hello, World」,因为迫切需要,有了需要就有了动力,有了动力就会想尽办法去实现。
第二、这个需求不能太小。太小就好比是打印出一行「Hello, World」,没有实际意义,而且没有挑战性,好比打游戏,还没打就通关了,没有任何升级的体验,让人觉得没有灵魂。
很多人会觉得太大也不好,太大就意味着很难实现,难实现就会打击积极性,然后紧跟着拖延症就出来了,可能就此搁置了,会有这种情况,但其实「太大」相比于「太小」来说,还好一点,比如你开始学 Objective-C,就立志要用它做一个类似淘宝的 APP 出来,也可以啊,但是我们要明白这个是需要时间的,可以分阶段去实现,比如第一步首先弄个首页出来,顶部的广告滚动区、底部的 Tab 按钮、中间的按钮和列表,这样逐个划分出来,一一去实现,也就没有一开始看上去那么遥不可及了。
第三、最好有参照物。就像第二点中提到的,比如就是要仿一个淘宝 APP 出来,省去了 UI 和体验设计的工作,颜色就这么配,按钮就这么摆,点击哪个按钮出来什么界面,都不用操心,只需要考虑怎么去实现。毕竟我们的重点是学习这门编程语言,看可以用它具体做些什么功能出来。直接找参照物,这是一种方法,但参照第一点的要求,要对我们自己有用,那么可以去做一些改善性的工作,比如,有一些经常用的工具或者功能,总觉得哪里不顺手,或者可以有更好的方式,那么就可以尝试去做一个它的升级版,当然这需要平日里就开始搜集这些改进的点子,比如我就有一个笔记本,上面记了好些用着不是很爽打算自己动手的工具(是时候清理掉一些了😂)
第四、正视困难。在这个过程中,可想而知,问题会很多,困难也会很多,有可能搭开发环境的时候就会遇到一些报错,别说高阶版了,连最基础的打印出一行「Hello, World」都是个问题,而且碰到的概率极高,尤其是当开发环境还依赖其他第三方工具的时候,比如我在打 Flutter 的环境时,就因为少输了一行命令,导致无法运行模拟器,着实定位了好久。我这还算是有基础的,完全无编程经验的同学,极有可能连问题本身都说不明白,没办法问别人,搜索引擎的关键词也不好确定(参见 如何提问才最明智 ),但这个过程是必经之路,一旦踏上编程之路,就注定要与「问题」长厢厮守了。
第五、保持节奏。人都有一个兴奋期或者新鲜期,在这个期间,就像打了鸡血一样,感觉什么都不能阻挡你学习的热情。这个阶段,有的人可以保持得很长,因为 Ta 不断地挑战,不断地进阶,很有成就感;有的人则稍纵即逝了,也许发现与自己想象的不一样,比想象中难,或者比想象中简单,或者其他什么理由,让这段兴趣戛然而止了。学习中的节奏感很重要,就像是运动中的肌肉记忆一样,有运动习惯的人,到了时间点,不动两下就觉得少点什么或者不对劲。
最初开始学习的这段时间尤为重要,一旦找好了一个适合我们的高阶版的「Hello, World」需求,就要开始循序渐进地去实现它,即便每天只实现一点点功能,但最好是一段时间不间断地有进展,这样一来是可以保持学习的热度,二来是,只有持续的练习,才能让问题尽早地暴露出来。
找一个适合自己的「Hello, World」并不难,难的是,找好之后动起来,即便最后做出来的东西不够精致略显粗糙,但当你自己的第一个作品活生生地摆在眼前时,你会觉得这一切都是值得的,太神奇了。
今天是教师节,是个适合开始学习的好日子😄,顺祝老师们节日快乐~
你好,世界,这就开始吧!
发送给作者