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