在CSDN对我的专访中,我比较全面地阐述了我带领学生开展的以实践为主线的编程学习过程。有人发表评论:“如果你是大学生,我建议你把这篇文章当成垃圾看。大学重点学得应该是基础,不是你那些所谓的为了完成工作而学的项目经验。什么是基础,重点是数学、英语、接下来是计算机组成和操作系统,如果你是计算机系的,C语言必须掌握。谈谈数学重要的原因,以前计算机专业在很多名校都是数学的一个分支,可能刚涉编程你不懂数学的重要性,如果你深入学习数据结构例如的排序的算法时间分析就知道用到了一大堆微积分,还有计算方法,这个反映计算机本质的东西,基本都是数学内容的反馈还有数据库一大堆概念我就不说了。这个老师太重点强调企业需要的东西,而不是作为一个大学生本质应该学习的东西”
另一段话是跟贴:“我完全赞同你的观点,我之前是一名计算机专业的专科生,大家都知道专科生与本科生的差距就在于基础知识(数学,英语)与计算机理论知识(操作系统原理,编译原理,计算机网络等),是的我们的优势在于我们动手能力很强。大学期间做过不少项目,当时自认为不会比本科生差,但随着学习的深入,越来越发现到基础的重要性。有时候看一些别人写的源码,发现如果我自己写会写的多么繁琐,而人家用到了数学的知识,一个繁琐的算法原来可以这么简洁优雅。有时候一个问题硬是不懂,去网上问别人原来涉及到一些内存管理和操作系统的知识。记得又一次听一个大公司项目架构师的演讲说道:“写代码,做项目你们与一个高中生甚至一个初中生没什么区别,区别是你们大学学得知识以及锻炼的逻辑思维和自学能力”如果你只想当一名coder,基础知识你甚至可以不学。如果你想当一名软件系统的设计师和架构者,数学,和计算机基础你必须要会。所以大专毕业后毅然选择了专升本,而升本后一直在补习自己的基础。”
说实话,我也是完全赞成这样的观点的。在IT界能够高薪,能够不惧技术进步和发展,能够站在重要位置上的人,就是这些基础扎实的人。在基础中吸取了抽象之精华的人,心中有放之四海皆可用的知识和思维,这比任何的具体技术、技能更重要。我带领学生热情地投入实践,这只是一种手段,借此能够快乐地进入到这个圈子,快速地了解行业中的话题,了解专业和方法,最重要的是,要知道编程背后还需要什么,从而在后续的学习中,能够更加注意基础知识和思维的训练,更重要的是,可以将理论视为非常鲜活的知识。如果没有深入实践的这个过程,对大多数人而言,学习理论将是个枯燥困难的事情,学习效果也不能得到保证。况且,目前的大学生理论水平暂不说了,动手能力差普遍存在,由具体和实践入手,再深入到抽象的理论,这是一种良性循环,能够生出互动的学习之路。目前国际上很有影响力的工程教育方法CDIO,也强调实践为主线,但并不忽视理论。如果有需要有反思的话,是理论知识的学法问题。
在我的各种咨询中,单纯好好学理论搞得自己找不着北的人很多,经过了应该教育的大学生,起步期最大的困难在于不知道如何开展实践。所以,我带着学生,以实践为入手,找到学习的感觉,在当下是非常重要的事。在我的咨询,以及组织课外活动的过程中,对学生的要求仍然是要重视基础课和专业基础课的学习,甚至对做各种项目太过热衷的高年级学生,要求他将心收回来。
另外,在工程型人才缺乏的这个时期,要认识到工程知识对未来工程师的重要作用。工程的基本性质和基本特点是“它是任务定向的”。莱顿说:“从现代科学的观点看,设计什么也不是;可是,从工程的观点看,设计就是一切。”作为一个合格工程师首先应具备设计知识,还应该拥有的知识还包括工艺知识、研发知识、设备知识、生产加工知识、技术管理知识、安全生产知识、维修知识、质量控制知识、产品知识、市场知识、相关的社会知识等。科学知识和工程知识这两种知识只有性质、作用的不同,而没有“水平”和“高下”之分。在社会分工渐细,很多时难以兼得,需要根据个人兴趣和学习特点,明确侧重点,设计好自己的学习路线。
在现实中,高校的教学饱受批评,除了其的确存在的不争气外,有对大学中理论学习的价值认识不够的问题。不能正确看待这个事情的人,包括没有上过大学的人,也包括仅是在大学里过了几年,却不知何为大学的人,培训机构的功利宣传更是助推。期待全民真正理解教育的时刻到来,当然这是长期的。
如果要针对评评论做些辩解,那是评论者看了多处出现的实践,就想当然地认为我在引导人不重视基础。尤其是我的教学,是在探讨有效的实践,其目标恰好是非常重要的基础之一——程序设计基础。至于强调企业需要的东西,太抬高我了。对大一的学生,能提到多少企业实用的,且不说对企业不了解,还正是我的工作经历中的一块硬伤呢。无论如何,相左的观点往往更具价值,对能够提出意见的网友表示感谢。
在此登出这些文字,一则因为答复《初中学历的成年人想做程序员,可否?》中一个评论的需要,二则也是向我的学生传递出评论者的忠告,做到理论与实践的双丰收。