“编程”意识
“编程”是什么?这个问题可能除了学过计算机相关专业的人,其他各行各业的人都有对这个问题不同程度的疑惑。
我第一次听“编程”这两个词还是在我上了大学之后。
我出生在我国大西北(青海)的某个小乡村,小学是在我们县城的一个小镇上的,初中、高中都是在县城里的学校上的。
爸爸是名教师,妈妈经营商店,家境不算好,也不算很差。
从小我也接触过电脑,虽然接触的不多,都是在爸爸办公室的电脑上玩的,也就玩玩蜘蛛纸牌、青蛙吃蛋等游戏,然后就是画画图啥的。
这种对电脑的正常操作说实话,跟“编程”扯不上啥边,因为当时在我身边使用电脑的任何人,包括我爸都没有“编程”的任何意识。
我们家族体系也很庞大,从小到大,我认识的各种“自家人”特别多,但是整个家族中,大多数族人都是务农为主的,我爸算是个知识分子,然后再到我这一辈,考上大学的屈指可数,我虽不才,跨了个二本学院,但也至少是上了一次大学。
高考分数公布那天,得知我的分数超了二本线两分,胆战心惊的我心中的石头终于落下了。
报什么专业其实我当时都不在乎,因为我也不知道我喜欢什么,我对所谓的“大学”也没有什么概念,反正就是“爱啥啥”的态度,我只在乎我过二本线了,我就是个俗人。
因为分数确实不高,专业也确实难选,我爸硬着头皮给我选。我爸也是绝了,照着医生、计算机、师范等专业一阵狂选,最后干脆一股脑全给写上去了,考虑的还挺周全的,怕本科录取不了我,还备选了几个专科专业。
我很清楚的记得我爸给我选的第一志愿是“青海民族大学(原青海民院)”,我虽然对大学没什么概念,但听别人说过这个学院不是很好(我当时是不想在青海上大学,也就跟着自认为很烂,潜意识里就是这个字)。同时我也听说,就我这个分数,如果连青海民院都不录取,就基本没得录取了。
当时我心里还是很慌的,既不想被青海民院录取,也怕连青海民院都不录取。感觉这话说的很矛盾,但确实,当时我也是这么矛盾。
老天开眼,阴差阳错之下,我被河南南阳理工学院软件学院录取了。被这学院录取,我感觉我就是天选之子。
我说了我是个俗人,俗人也是有傻福的。
当我被录取的第一天,我看我爸并没有高兴的样子,我就知道事情并不简单,果然,他说他当时忘了看学费多少,要是知道学费那么高,肯定不给我报了。
我暗自偷笑,心里想着幸好你没看,不然我岂不是凉凉了。
嗯,我是个俗人,俗人不打诳语,后来进了大学我才知道,我被这个学院录取还真的是个意外,是因为这个学院当时在青海招人没招够,我被捡漏了。
没招够的原因我也知道了,也很俗,学院招的分数高,青海的高考同胞们都很怂,怕自己录不上,压根没敢报,然后像我爸这样瞎报的估计也没几个,所以我就理所当然的成了南工人。
这是啥?破格选拔呀,多荣幸的事,更刺激的是,我看到学院的分数榜上,我是全院倒数第一,这是多大的殊荣啊,以前我都没敢考过班级倒一,怕被老爸揍,更别说全院倒一了,当着全国各地同学的面,我很自豪的自我介绍说:大家好,我是咱院倒一的同学,希望今后多多关照,然后掌声雷动。妈耶,我又开始膨胀了。
以上内容跟“编程”无关,我之所以提,只是想强调一下,其实像在我们大西北,发展情况跟北上广这些大城市没法比,各种“意识”也是差了不是一星半点。
我现在从事的是少儿编程教育,现在的小孩三岁就开始学“编程”了,而我呢?真的是到大学才听过“编程”这俩字,这就是“意识”,我且不说从小接触“编程”和没接触过“编程”的区别,仅仅从这个时间线上,就能看出发达城市和我们这些小山村小县城的教育差别了。
“编程”思维
接着说我上大学之后的事吧,我报的是软件工程专业,大一我学的专业课是 C 语言,还有 C++ , 当时因为我是第一次接触这些新鲜的编程语言,所以消化的很慢,整个大一阶段我觉得我对“编程”的理解就是在电脑上敲代码,仅此而已。
因为我大一第二学期做的一个课程设计就是用 C++ 做的学生管理系统,别误解,仅仅就是在编译器编译后弹出的黑框上做一些增删改查操作而已,当时还感觉挺牛的,现在想想真的挺 low 的。
上面这段话还有下面要说的某几句话可能非计算机专业的读者读起来会有迷惑的词汇或语句,不过没关系,您可以选择跳过,或者扫一眼,稍微留个印象也行,并不影响后面的阅读,后面我会做出解释的。
大二阶段,我学的专业课是 Java ,Java 这个编程语言是我学的最好,也是最轻松的编程语言(纯属自我感觉哈)。
可能是学了 Java ,我才真正对“编程”有了些许自己的理解,我写了很多技术方面的博客,这些博客都是按我自己对 Java 的理解和思考去写的,我说了我是个俗人,所以我想要的都是通俗易懂的,我想写的也是通俗易懂的。
嗯,我是个俗人,所以我很反感大学的一些老师,在对大一刚来时一张白纸、完全无知的我净灌输一些高逼格的官方词汇,让我在所谓的“编程”的云里雾里飘了一年多。
处处阴霾更严冬,风光未与想中同。
拨云见日终有时,一碧万顷醉晴空。
终于有一天,我拨云见日般明白了“编程”是咋回事,不就那么回事嘛,飘了一年多,我不知道该说是老师的问题还是我理解慢的问题。
但是换个角度思考,要是让我去讲,对于压根就没接触过“编程”或没接触过电脑的人,我压根就不会去提那些高逼格的词汇,我就用大白话讲,先明白“编程”到底是个啥玩意,等有自己的理解之后,那些所谓的高逼格的词汇其实并没有什么逼格,只是人家起了一个名字而已。
总之我提倡的是,你不论做什么或者学什么,一定要明明白白,清清楚楚,如果是一头雾水,那一定是哪个环节出差错了,也许是你自身的原因,也可能是别的原因,你要学会思考。
要说大二是在学 Java 的话,那大三就是在练 Java ,自己做了一些小项目,具体什么就不提了,说主题。这个时候我对“编程”的理解就是可以做应用层,说白了就是可以开发一些 APP 、小程序 、 网站等,能做很多功能性的软件。
再后来,我对“编程”的理解就是可以做底层,就是针对硬件方面的开发,例如操作系统相关的程序、驱动程序等。但是做底层开发需要一定的技术功底,计算机组成原理、操作系统、计算机网络等都是必学的,这个也不在这多说了。
现在,我从事的是少儿编程教育行业,是一名少儿编程老师。在这我先不触碰“少儿有没有必要学编程”这个话题。我只针对“什么是编程”这个话题展开。前前后后,大差不差的,我接触少儿编程也要半年时间了,在这我也不想说有些朋友问的“怎么不去搞开发”这个问题,只是每个人想法不同而已。
我做少儿编程之后,对“编程”有了新的理解,我从来一直都很在意“因果”关系,我相信“任何物体都有存在的意义”,对于“编程”,我觉得归根结底,其核心在于“编程思维”。
“编程思维”是什么?猛一看,感觉很抽象,其实可以很简单的解释:“编程思维”就是解决实际问题的方法,一种如何分析问题、拆解问题、思考和解决问题的思想。
举个生活中最常见也最简单的例子吧:
你会做饭吗?(我会(偷笑表情),现在哪个男孩不会做饭呀是吧)
你做饭的时候是否要考虑以下这些问题:
吃米还是吃面?
几个人吃?
炒不炒菜?
几个热菜几个凉菜?
放什么调料?
放多少调料?···
那以上这些分析的过程就叫“编程思维”,就是用来解决“做饭”这个问题的方法。
什么是“编程”
那什么是“编程”呢?
原谅我把对“编程”的解释放到了最后,重头戏嘛,还是压轴比较好,如果你是诚心来了解“编程”的,那前面的这些信息对你了解“编程”有着莫大的好处。
我接着用“做饭”的问题来讲解“编程”。
会做饭的你天天做饭,也是烦了,想偷个懒。
假如你家里现在有一个机器人,这个机器人除了没“脑子”之外,别的像胳膊、腿、手等铁器官都齐全。如果你要是有能力把你“做饭”的技能教给机器人,那你无异于收了个很勤快的徒弟。
怎么教?
你说“人话”机器人听不懂(这个机器人不是智能的那种哈,是真的听不懂“人话”的那种,可别给我在这钻牛角尖),这个机器人只能听懂“编程语言”(就跟汉语字样一样,就是个名字而已,别看到这个词就觉得好难啊,别太入戏,就是机器人能听懂的语言的名字,仅此而已)。
那你要教机器人,首先你要考虑的是如何跟机器人沟通的问题,别考虑啦,就像跟老外沟通要学英语一样,你先学学“编程语言”吧,学会了,就能教了。至于“编程语言”是什么?要怎么学的问题不是我本篇文章的重点,也不是你没了解“编程”之前要了解的重点,仅仅把“编程语言”当成个像“汉语”、“英语”一样的名字就 OK 了。
再假如此时的你已经学会了“编程语言”,那就到考验你“会不会教”的时候了,再强调一次,机器人是“没脑子”的,所以你在教的时候,大到每个流程框架(先干什么,后干什么,最后干什么),小到每个细节(倒几碗水,放几勺盐,煮多长时间),所有你分析过的问题,你都要清晰明确的告诉机器人,如果漏过其中的任何一个环节,那这机器人做出的饭的味道就不一定是你想要的那个味的,可能你想要老坛酸菜味的,由于你忘了告诉机器人这其中的细节(放多少酸菜),机器人给你做成了康师傅牛肉味的也说不准,总之就是出问题了,专业词汇叫做“出BUG”了。
再再假如你是个“老司机”(就“做饭”和“教做饭”都很熟,很有经验的意思),你把每一个细节,每一个流程都教给了机器人,然后这个机器人最终做出了“你想要的那个味”的饭,那这个教机器人做饭然后让机器人把饭做出来的过程就叫做“编程”。
什么是“编程”?这就是编程,我先是用“做饭”的例子解说的编程,我想这个大家看到这都能理解了,然后我们一起给编程“上价值”,毕竟大白话还是大白话,总是比不了“官方话语”有权威,我们能用大白话说出来,说明已经对这个问题理解了,那再看官方的,也不过是“步步高点读机—— So easy”。
官方版“什么是编程”?
编程就是人利用计算机编程语言,通过有目的的编排指令,最终让计算机完成指定任务的过程。
想通过编程解决问题,首先得分析所要解决的问题,然后将问题拆解成独立的小问题单元,并保证这些小问题单元必须是可以通过编程解决的,最后再将这些小问题整合起来,让计算机逐个求解,得到我们想要的结果。
本篇文章以上内容共计 3500 字,是我工作之余花费一周时间思考、积累、总结而来,里面的一些“想法”不是你想写就能写出来的,也是经过分析、拆解,运用“编程思维”一步步整合而来,一篇文章包含了我对“编程”的思考、我教“编程”的教学经历和经验、我对“编程”的期待,可以说是篇有感情的文章,我写完后我的心的沸腾的,澎湃的,之所以有这样的反应,是因为我觉得值得,我付出了,我分享了,我收获了,既然选择了“教育”,那就一定要做到“用心”,不论是对自己,还是对孩子、对家长、对读者、对所有热爱生活,真诚友好的人,最后的最后,我想说的就是“越懂得分享,你的价值增值越大”。