学习程序

2024-05-15

学习程序(精选12篇)

学习程序 篇1

程序设计是给出解决特定问题的程序的过程, 是软件构造活动中的重要组成部分。程序设计中, 最重要的是对问题的分析、设计、测试和排错, 编码只是程序设计的一部分, 但平时我们在程序设计教学中, 无论是教师还是学生, 都把大量时间放在了编码这一环节上。

对于很多教师来说, 他们总是认为, 教会学生程序设计, 首先就要学生掌握一门语言, 让学生记住一大堆的保留字的拼写、各种程序结构的语言、语法。在这个基础上, 补充一些数据结构和算法知识, 使学生能够通过编程来解决一些生活中的现实问题。我们认为, 这是一种偏见, 是一种对程序设计理解的误区, 也是我们教师作为学生时学习程序设计的次序所带来的误区。学生在程序设计的过程中, 也把大部分时间浪费在正确的命令拼写和完整的语法结构之上, 大部分的排错问题都是出在语言本身而不是程序设计上。换句话说, 教程序设计成了教程序语言!对于高中、大学的学生, 语言的学习障碍可能还不是太大, 而对于义务教育阶段的学生, 语言障碍是非常严重的。然而, 也正是义务教育阶段的孩子, 他们的创造性思维是最强的, 不必也不应把宝贵的学习时间浪费在语言上。

在义务教育阶段教学程序设计这一分支内容, 目的是让学生掌握程序设计的基本思想, 而不是掌握一门程序设计语言的使用, 更多的是让学生了解程序设计的核心内容。联合国教科文组织 (UNESCO) 在1994年委托国际信息处理学会 (IFIP) 编写的文件《中学信息学课程》中提到:“这里所指的程序设计是非技术性的程序设计。更确切地说, 应该是把‘你自己做的事情’转变成‘别人能做的事情’。这就要求能详尽地描述完成任务的过程, 以便其他人或其他设备能准确地重复这一项工作。”其实, 当PC在20世纪70年代末80年代初首次出现时, 教育界有一种教会全部学生如何编程的初始热情。成千上万的学校在教授数以百万计的学生在LOGO或者Basic上写一些简单的程序。Seymour Papert (著名的学习科学家、人工智能专家) 在1980年出版的Mind Storms (《头脑风暴》) 一书中提到, LOGO将成为重新思考教育与学习方式的基石。从那时起, 计算机开始在儿童的生活中普及, 但是很少学生会学习编程。在今天, 很多人都将编程视为一种小众的、技术性的活动, 只适合小部分人学习。

究竟是什么原因使教学编程偏离了它的初衷呢?

1.早期的编程语言难以应用, 许多学生都不能掌握编程的语法。

2.编程一般与一些学生不感兴趣或没有相关经验的活动相联系, 比如生成一个素数列表, 或者简单地画一条直线。

3.一般缺乏对正确程序的深层次探索的鼓励以及对错误程序的指导。

Papert认为, 编程语言应该“地板要低” (Low Floor) 、“天花板要高” (High Ceiling) 、“墙体要宽” (Wide Walls) , 即低进入门槛和高创造空间。此外, 编程语言需要支持众多不同类型的项目, 以满足不同人群的兴趣和学习类型, 使得他们可以参与进来。但要满足这三个要求, 其实并不简单。

针对这些问题和要求, MIT媒体实验室的终身幼儿园小组在2007年开发了Scratch软件。它通过鼠标拖动指令模块, 以搭积木的方式设计程序, 并通过一个舞台, 让设计者简单、直观地看到设计的结果, 将抽象的程序设计可视化。Scratch包含动作、控制、外观、侦测、声音、数字和逻辑运算、画笔、变量这八大类指令模块, 把建模、控制、动画、事件、逻辑运算等都包含在内。从动作指令到控制语句, 从传感响应到面向对象, 从数值运算到线程调度, 涉及程序设计的方方面面。

其实, 程序设计的目的是把我们想做的事情以算法描述的方式表达出来, 而算法描述最直观和最简单的办法就是画流程图。当流程图画出来了, 程序设计基本上也就完成了。如何让流程图变成可执行的程序, 那是语言的事情, 也是软件的事情。对于程序设计本身来说, 这只是其中的一个环节。如果这个环节可以让软件代劳, 那么我们就可以集中精力去做流程设计了。Scratch就能很好地实现这个功能。在Scratch程序设计中, 学生们不需要再去为语言和语法头痛了, 因为他们只是需要像堆积木一样来设计程序。这样的设计就使学生们能把更多的精力放在程序设计上, 也使得程序设计的门槛大大降低。

我们经常看到, 给孩子们一盒积木, 他们马上就会开始把积木组装在一起, 随后出现的结构又会给他们以新的灵感。当他们在玩的时候, 计划和目标会随着进程而不断改变。Scratch是基于图形化的编程板块, 让孩子们可以组合这些板块去创作他们的程序。与积木类似, 孩子们可以先从简单的部件开始组装, 通过不同的序列和组合方式来看究竟会发生什么事情。这里并没有传统编程语言那样晦涩的语言, 进入的门槛很低, 而且这样的经历充满了娱乐性。

由此, 我们希望学生在使用Scratch编程的时候, 也有类似的感觉。堆积木是不需要教的, 我们只需要告诉孩子们, 积木可以如何使用就行了。至于如何堆积、堆积出来什么, 那就是孩子们自己的事情了。经过一个学年的校本课程实验, 我校在第二个学年就开始把Scratch引入到常规教学中, 代替了原来的VB程序设计教学。为了解决程序设计语言问题, 我们完全抛弃了以往语言教学的方式, 而改为采用基于项目的方式来进行程序设计教学。同时, 我们并没有把Scratch当成一门程序设计语言来教, 从Scratch官方介绍上来看, MIT把Scratch定义为一种程序设计工具, 而不是语言, 因此, 我们就需要改变一下思维定势, 我们教的是工具而不是语言, 重点应该在流程设计, 而不是语法上。

Scratch教学, 所面临的最大挑战并不是来自于技术上的, 并不是教会孩子们如何去使用组件, 如何去组装组件;而是来自于文化和教育理念上的, 是教会孩子们思考问题的方式与良好的思维习惯。更广阔的是, 我们需要改变孩子们以及成年人对编程的观念、对计算机的看法, 使得现在的年轻人不再是只对发短信、玩在线游戏和浏览网页非常在行。我们不仅仅需要他们会交谈、浏览和交互, 更需要他们拥有通过媒体进行设计、创造、发明的能力。程序设计能极大地扩大孩子们用计算机创作的范围、扩大孩子们学习到的内容的范围, 尤其能够支持孩子们用“计算思维”来帮助他们学习重要的问题解决方式和设计策略 (比如模块化和交互设计) , 还能够提供让孩子们反思自己的想法的机会。

摘要:Scratch是美国麻省理工学院媒体实验室 (MIT) 于2007年开发的图形化编程工具。在美国哈佛、加州大学伯克利分校等世界名校都开设了Scratch课程。我们于2012年将其引入, 作为我校的校本课程。本文结合我们在Scratch教学中的一些做法与对程序设计的一些看法, 阐述Scratch对青少年学习程序设计的意义。

关键词:信息技术,Scratch,程序设计

学习程序 篇2

(一)一位高级程序员给学弟学妹的建议我始终认为,对一个初学者来说,IT 界的技术风潮是不可以追赶的,而且也没有能力去追赶。我时常看见自己的DDMM 们把课本扔了,去卖些价格不菲的诸如C#, VB.Net 这样的大部头,这让我感到非常痛心。而许多搞不清指针是咋回事的BBS 站友眉飞色舞的讨论C# 里面可以不用指针等等则让我觉得好笑。C# 就象当年的ASP 一

样,“忽如一夜春风来,千树万树梨花开”,结果许多学校的信息学院成了“Web 学院”96,97 级的不少大学生都去做Web 了。当然我没有任何歧视某一行业的意识。我只是觉得如果他们把追赶这些时髦技术的时间多花一点在基础的课程上应该是可以走得更远的.几个误区

初学者对C# 风潮的追赶其实也只是学习过程中经常遇到的几个误区之一。我将用一些实际的例子来说明这些现象,你可以按部就班的看看自己是不是属于其中的一种或者几种:

1.认为计算机技术等于编程技术:

有些人即使没有这个想法,在潜意识中也有这样的冲动。让我奇怪的是,许多信息学院的学生也有这样的念头。认为计算机专业就是编程专业,与编程无关的,或者不太相关的课程他统统都不管,极端的学生只要书上没带“编程”两个字他就不看。

其实编程只是计算机技术应用过程中一种复杂性最低的劳动,这就是为什么IT 业最底层的人是程序员(CODER)。计算机技术包括了多媒体,计算机网络,人工智能,模式识别,管理信息系统等等这些方面。编程工作只是在这些具体技术在理论研究或者工程实践的过程中表达算法的过程。编程的人不一定对计算机技术的了解就一定很高。而一个有趣的现象是,不少大师级的计算机技术研究者是不懂编程的。网上的炒作和现实中良好的工作待遇把编程这种劳动神秘化了。其实每一个程序员心里都明白,自己这些东西,学的时候并不比其它专业难,所以自然也不会高档到哪里去。

2.咬文嚼字的孔已己作风:

我见过一本女生的《计算机网络原理》教材,这个女生像封学生一样在书上划满了横杠杠,笔记做得满满的,打印出来一定比教材还厚。我不明白的是,像计算机网络原理这样的课程有必要做笔记?我们的应试教育的确害了不少学生,在上《原理》这一类课程的时候许多学生像学《马列原理》一样逐字背诵记忆。这乃是我见过的最愚蠢的行为。所谓《原理》,即是需要掌握它为什么这样做,学习why,而不是how(怎样做)。极端认真的学生背下以太网的网线最大长度,数据帧的长度,每个字段的意义,IP报头的格式等等,但是忘了路由的原则,忘了TCP/IP 协议设计的宗旨。总之许多人花了大量的时间把书背得滚瓜烂熟却等于什么也没学。

在学习编程的时候这些学生也是这样,他们确切的记得C++ 语法的各个细节。看完了C++ 教程后看《Thinkingin C++ 》(确实是好书),《Inside C++ 》,《C++ reference 》,this C++, that C++……,然后是网上各种各样的关于C++ 语法的奇闻逸事,然后发现自己又忘了C++ 的一些语法,最后回头继续恶补…。有个师弟就跟我说:“C++ 太难了,学了这里忘了那里,学了继承忘了模板。” 我的回答道:“你不去学就容易了”。我并没有教坏他,只是告诉他,死抠C++ 的语法就和孔已己炫耀茴香豆的茴字有几种写法一样毫无意义。你根本不需要对的C++ 语法太关心,动手编程就是了,有不记得的地方一查MSDN 就立马搞定。我有个结论就是,实际的开发过程中对程序语法的了解是最微不足道的瞄识。这是为什么我在为同学用Basic(我以前从没有学过它)写一个封程序的时候,只花了半个封时看了看语法,然后再用半个封时完成了程序,而一个封时后我又完全忘记了Basic 的所有关键字。

3.不顾基础,盲目追赶时髦技术:

终于点到题目上来了。大多数的人都希望自己的东西能够马上跑起来,变成钱。这种想法对一个已经进入职业领域的程序员或者项目经理来说是合理的,而且IT 技术进步是如此的快,不跟进就是失业。但是对于初学者来说(尤其是时间充裕的大中专在校生),这种想法是另人费解的。一个并未进入到行业竞争中来的初学者最大的资本便是他有足够的时间沉下心来学习基础性的东西,学习why 而不是how。时髦的技术往往容易掌握,而且越来越容易掌握,这是商业利益的驱使,为了最大化的降低软件开发的成本。但在IT 领域内的现实就是这样,越容易掌握的东西,学习的人越多,而且淘汰得越快。每一次新的技术出来,都有许多初学者跟进,这些初学者由于缺乏必要的基础而使得自己在跟进的过程中花费大量的时间,而等他学会了,这种技术也快淘汰了。基础的课程,比方数据结构,操作系统原理等等虽然不能让你立马就实现一个linux(这是许多人嘲笑理论课程无用的原因),但它们能够显著的减少你在学习新技术时学习曲线的坡度。而且对于许多关键的技术(比方Win32 SDK 程序的设计,DDK 的编程)来说甚至是不可或缺的。

一个活生生的例子

我和我的一个同学,在大一时我还找不到开机按纽,他已经会写些简单的汇编程序了。我把大二的所有时间花在了汇编,计算机体系结构,数据结构,操作系统原理等等这些课程的学习上,而他则开始学习HTML 和VB,并追赶ASP 的潮流。大三的时候我开始学习Windows 操作系统原理,学习SDK 编程,时间是漫长的,这时我才

能够用VC 开发出象模象样的应用程序。我曾一度因为同学的程序已经能够运行而自己还在学习如何创建对话框而懊恼不已,但临到毕业才发现自己的选择是何等的正确。和我谈判的公司开出的薪水是他的两倍还多。下面有一个不很恰当的比方:假设学习VB 编程需要4 个月,学习基础课程和VC 的程序设计需要1 年。那么如果你先学

VB,再来学习后者,时间不会减少,还是1 年,而反过来,如果先学习后者,再来学VB,也许你只需要1 个是期就能学得非常熟练。

几个重要的基础课程

如果你是学生,或者如果你有充足的时间。我建议你仔细的掌握下面的瞄识。我的建议是针对那些希望在IT 技术上有所成就的初学者。同时我还列出了一些书目,这些书应该都还可以在书店买到。说实在的,我在读其他人的文章时最大的心愿就是希望作者列出一个书单。

大学英语-不要觉得好笑。我极力推荐这门课程是因为没有专业文档的阅读能力是不可想象的。中文的翻译往往在猴年马月才会出来,而现在的许多出版社干脆就直接把E 文印刷上去。学习的方法是强迫自己看原版的教材,开始会看不懂,用多了自然熟练。吃得苦下得狠心绝对是任何行业都需要的品质。

计算机体系结构和汇编语言-关于体系结构的书遍地都是,而且也大同封异,倒是汇编有一本非常好的书《80x86 汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著)。你需要着重学习386 后保护模式的程序设计。否则你在学习现代操作系统底层的一些东西的时候会觉得是在看天书。

计算机操作系统原理-我们的开发总是在特定的操作系统上进行,如果不是,只有一种可能:你在自己实现一个操作系统。无论如何,操作系统原理是必读的。这就象我们为一个芯片制作外围设备时,芯片基本的工作时序是必需了解的。这一类书也很多,我没有发现哪一本书非常出众。只是觉得在看完了这些书后如果有空就应该看看《In side Windows 2000 》(微软出版社,我看的是E 文版的,中文的书名想必是Windows 2000 技术内幕之类吧)。关于学习它的必要性,ZDNET 上的另一篇文章已经有过论述。

数据结构和算法-这门课程能够决定一个人程序设计水平的高低,是一门核心课程。我首选的是清华版的(朱战立,刘天时)。很多人喜欢买C++ 版的,但我觉得没有必要。C++ 的语法让算法实现过程变得复杂多了,而且许多老师喜欢用模块这一东西让算法变得更复杂。倒是在学完了C 版的书以后再来浏览一下C++ 的版的书是最好的。

软件工程-这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一样不瞄所云。我的建议是看《实用软件工程》(黄色,清华)。不要花太多的时间去记条条框框,看不懂就跳过去。在每次自己完成了一个软件设计任务(不管是练习还是工作)以后再来回顾回顾,每次都会有收获。

Windows 程序设计-《北京大学出版社,Petzold 著》我建议任何企图设计Windows 程序的人在学习VC 以前仔细的学完它。而且前面的那本《Inside Windows 2000 》也最好放到这本书的后面读。在这本书中,没有C++,没有GUI,没有控件。有的就是如何用原始的C 语言来完成Windows 程序设计。在学完了它以后,你才会发现VC 其实是很容易学的。千万不要在没有看完这本书以前提前学习VC,你最好碰都不要碰。我瞄道的许多名校甚至都已经用它作为教材进行授课。可见其重要。

上面的几门课程我认为是必学的重要课程(如果你想做Windows 程序员)。

对于其它的课程有这样简单的选择方法:如果你是计算机系的,请学好你所有的专业基础课。如果不是,请参照计算机系的课程表。如果你发现自己看一本书时无法看下去了,请翻到书的最后,看看它的参考文献,找到它们并学习它们,再回头看这本书。如果一本书的书名中带有“原理”两个字,你一定不要去记忆它其中的细节,你应该以一天至少50 页的速度掌握其要领。尽可能多的在计算机上实践一种理论或者算法。

你还可以在CSDN 上阅读到许多书评。这些书评能够帮助你决定读什么样的书。

日三省乎己

每天读的书太多,容易让人迷失方向。一定要在每天晚上想想自己学了些什么,还有些什么相关的东西需要掌握,自己对什么最感兴趣,在一本书上花的时间太长还是不够等等。同时也应该多想想未来最有可能出现的应用,这样能够让你不是追赶技术潮流而是引领技术潮流。同时,努力使用现在已经掌握的技术和理论去制作具有一定新意的东西。坚持这样做能够让你真正成为一个软件“研发者”而不仅仅是一个CODER。

把最多的时间花在学习上

这是对初学者最后的忠告。把每个是期玩CS 或者CS 的时间压缩到最少,不玩它们是最好的。同时,如果你的ASP 技术已经能够来钱,甚至有公司请你兼职的话,这就证明你的天分能够保证你在努力的学习之后取得更好的收益,你应该去做更复杂的东西。眼光放长远一些,这无论是对谁都是适用的。

相信你已经能够决定是否学习C #或者什么时候去学它了。

经验分享

(二)一个老程序员给青鸟学生和即将读青鸟学生的建议和评价 在这篇帖子开始之前,我先自我介绍一下,这个介绍只是为了让大家了解我说这些话语的公正性,本人是重本毕业,先后在一个不出名的IT 企业(200 人规模,单个项目额平均200 万左右)工作4 年,华为1 年,雅虎1 年,先后的职位是c/c++ 程序员,oracle 高级工程师,db2 dba, 分析师,现在在一家上市公司(非沿海城市,500 人规模,单个项目额平均400 万左右)做数据挖掘项目负责人,公司另外个c/c++ 专家头衔。今年29 岁,底薪10000,证书有一个计算机资格考试过的系统分析师证书,一个oracle dba 证书,一个db2 dba 证书。我想,IT 业界还是有不少纯技术专家比我强的,IT 业界高手如云,希望我的前辈看过一笑,我的师弟师妹们有个认识,交个朋友,如果有觉得我有炫耀嫌疑的,希望能谅解,不介绍自己,就无从谈起这篇帖子的出发点。

由于,我曾经在一家北大青鸟做过1 年的兼职,这个帖吧还是我以前兼职的学生告诉我的,我今天看到这个帖吧里面相当混乱,骂的夸的互相拆台的,我只想把我对青鸟的上下的评价以及对各位学生的建议清楚地写一下,把这当作是一个老程序员的话吧,毕竟,我不算高手,但是对于各位学生,暂时还算一个你们的目标吧。

那么首先,我想评价一下青鸟的学生,青鸟的学生能力以及就业机会,可以毫不怀疑的说,青鸟学生的就业是不难的,因为青鸟学生的动手能力比较强,并且掌握的是目前主流开发工具.net 和j2ee 技术,所以怀疑青鸟就业的学生,不要担心,就业是不难的。但是我也不得不说一下你们面对的青鸟广告:月薪4000 就业。这个数字大部分人是怀疑的,但是据我所瞄,这个数字不是谎话,确实有学生毕业能拿4000。当然这里有水分:第一,这些人是极少数;第二,4000 这个薪水即使拿到了,也要考虑一下水分,比如小软件公司拿4000,并不是多高收入,为什么呢?试想,小软件公司没有保障,说不定没有三保一金,五保一金,没有出差补助,没有加班补质,甚至年终奖都会打折扣,要解雇你也不赔钱,别小看这些待遇,这些待遇实际上不是2,3 千的工资差额能补偿的。所以在这里我得把你们的就业给你们估计一下,实际上呢,你们的平均工资,在沿海看能否达到3 千,这算比较公允的。然后,对于你们就业的公司而言,我也可以给你们估计一下大概是哪些公司。外企?不可能,人家讲究英语。华为中兴这些大型企业?也不现实,去过华为应聘的人都瞄道,就一套数据结构与算法的题目就可以刷掉青鸟95% 的学生,中型企业,这个就比较现实,问题是中型企业也讲究算法与数据结构还有高等数学,为什么呢,这些科目感觉跟软件开发不靠边阿。其实,一旦涉及到大数据量大计算量的系统,这些科目的瞄识就至关重要。而只有大型,中型企业有可能接到这些大系统的项目,所以他们也需要自己的员工懂得这些方面的瞄识。那么最后剩下的就是小企业了,小企业重在项目总额,项目利润不高不要紧,多接几个,每年的项目额就上去了,这些项目通常都是些小项目,人才的关键在于是否掌握了马上就能动手的.net 和j2ee,没时间培训了,所以他们偏爱青鸟学生。

所以可以告诉大家,青鸟的学生绝大部分流向是小型企业,少数去中型企业,一般是这个估算。那么,将来有没有锻炼呢? 可以很肯定地告诉大家,做小项目没有什么锻炼价值,为什么?因为人人能做,物以稀为贵,人人都能做,你就不值钱了,很难有薪水的提高,充其量就是.net 和j2ee 的熟手而已。所以,要进入大企业做大型系统的锻炼,学习他们思考问题的方法,领悟到软件最重要的到底是.net,j2ee 的那些架构,还是需求分析和数据流设计,数据结构以及算法设计。这才是真正锻炼人的地方。这才是锻炼出高手的地方。

所以,各位青鸟的学生们,要清醒地认识到你们的优点,也要认识到你们的不足,你们1 年学习掌握了.net 和j2ee,那些在大学耗费4 年学习数据结构,线性代数,高等数学的计科学生积累的厚重不是你们比拟的,你们小公司有用武之地,那是因为你们是青鸟针对小企业量身打造的人才,而大学生是做为IT高级人才打造的,现状是大学生太多以及大学生自己不争气,不学好这些科目,搞得一塌糊涂,但是你们要想发展,必须把大学的数学相关科目补好,否则,小公司以及2000*3000 的薪水,失业,竞争,就会伴随你一辈子。

所以,不要相信你们在青鸟学校里那些老师对你们的j2ee 和.net 吹捧,你们是靠这个找工作,但是这个东西是最没有技术含量的,你花1 年能学会,别人不能吗?没有几年的数学逻辑积累,你们的现状是很残酷的。有人说,自学高等数学,数据结构,太夸张了吧?没错,很难,你们选择了青鸟,让你们具备了找工作的能 力,但是,确实在某种程度上,你们成就高手这一步,将困难万分。

真正值钱的项目,是海量数据,专业性极强的分析系统,真正值钱的技术人才,也要从数据计算处理分析这里着手。

这里奉劝各位青鸟的老师,不要误导学生j2ee 和.net 了,这两门一定要学好,但是,不是把学生送出门就可以了,他们将来还要存活还要发展,逻辑和算法才是真正的王道。你们可以不懂,但是不能这么教学生啊。

经验分享

(三)一个程序员的体会

昨天,叔叔给我介绍了一份工作,搞推销,完成任务给1000 元,完不成任务给500 元。我又一次拒绝了,爸爸问我为什么不干,我说不想从事这个行业。这次爸爸终于发怒了,真说我“不要脸”,还说了好多难听的话。我知道,矛盾终于爆发了......这是理想和现实的一次碰撞!我不怨爸爸,只怪我自己不争气,这是我第n 次拒绝工作了,这之前有亲戚、朋友、同学给我介绍工作,都被我婉言谢绝了,不是我不想工作,而是我想从事自己喜欢的行业**it 业,我想成为一名真正的程序员!我不敢想像做一份你不喜欢的工作,会有多少的工作热情,会给公司带来多大的经济效益?整日从事这样一份工作,是一种怎样的折磨?只会带来思想上的麻木,意志上的消磨,时间长了,你会越来越离不开目前的工作,虽然你不喜欢,但是已经习惯了。我不想这样!

但是现实是残酷的!我必须工作挣钱养家,首先要养活自己,我不能再靠父母养活,他们养活我20多年已经不容易了,该是我回报他们的时候了!可是理想和现实总是存在差距,下面说说我的经历:

我是一所三流高校一名本科生,学的是经济学专业,今年刚刚毕业。虽然我的毕业论文和答辩都是优,但是我却对我的专业好无兴趣,整个大学四年,我面对的只是高深的经济学理论和与现实社会严重脱节的教材。我们的专业是大而全的专业,相关专业都有所涉猎,但是都不精通。学院说开始要把我们往经济学理论研究方向培养,可又是谈何容易? 师资力量太薄弱,最后行不通,后来又要往经济管理方向发展,可是管理要是没有与实践相结合,还不是空中楼阁。我们学院与企业之间基本没有交流,实习机会更是没有,都是自己在外面找,可是真正能找到称心如意的是少之又少,大部分都在外面搞推销。毕业了,与学市场营销的同学相比,我们没有竞争力;与会计学专业的同学相比,我们也没有竞争力;而与学国际贸易的同学相比,我们更没有竞争力!连我们老师都说:“你们是什么的会,又什么都不会。”一语道破我们专业目前面临的窘境。老师又号召我们考研,可是考研又谈何容易?又是万人挤独木桥啊!

大学我们计算机课只学了两本书,一本是《计算机应用基础》,一本是《foxpro for windows 》,两本都是我们学校自己老师出的,都是为了赚钱,书是盗版,内容更是拼准,质量可以想像。所以当时我对计算机并没有多少兴趣,对编程更是一窍不通!只是上大学前专门学了指法,大一时想学打字,当时市面流行五笔输入法(现在也是),而我并没有跟风学五笔,而是自学了两笔输入法,现在看来是正确的,两笔输入采用音形结合的方法,摒弃了五笔不符合汉字书写规则和拼音重码太高的缺陷,而且有非常易学,极力向大家推荐。掌握了方法以后,我就天天在机房练习打字,后来我打字就非常快了,一分钟可以打100 多个字,同学们都很羡慕我,在我们系也封有名气。一个打字不是很快的人都让同学羡慕甚至崇拜,可以想像我们班的同学计算机水平多么低了.我当时也很满足,认为打字快计算机水平就算高了,而不知道打字是最基本的操作,在整个计算机体系中好像是大海里的一滴水。正因为这种认识,使我忽视了计算机其他知识的学习,当时只知道foxpro 与数据库有联系,其他的就什么也不知道了。

真正让我接触到编程是在大三下学期,因为知道我们专业就业形势不容乐观,有种紧迫感了,所以我每个礼拜都会买《就业时报》,在某一期报纸上无意中看到**** 软件工程师的招生广告(后来知道每期都有),广告作得很好,我当时就觉得就业压力这么大,能多学一门技能,就多了一分竞争力。于是我就给他们打了电话,问他们学这个要多少钱,接线的封妆很会说话,没有明说,而是直接告诉我后天上午来听他们免费的宣讲会。当时我就觉得价格不菲,因为用“** ”牌子是要增加成本的。我还是去听了他们的宣讲会,说心理话,**** 好,不如**** 广告做的好,**** 广告做得好不如**** 宣讲会做得好。会到结束才说了具体的学费,要比我预想的贵很多,一共分二个学年,三个阶段学习,第一学年课分两个阶段学习,第二学年一个阶段。全部下来价格吓人!(价格我就不说了,不少人知道)当时我是这么想的,与其说毕业以后就失业,还不如学一门技能,以后也好找工作,于是我就报名了。在那个时候,我对编程是一无所知,更谈不上兴趣,只是为了以后能比较顺利的就业罢了。

由于没有基础(只会打字),我决定从头学起,参加一学期的班,给我们培训的是一位我看不出年龄的女老师,后来知道是从** 毕业的。我们一学期的课主要有《windows 2000 操作系统》,《c 语言基础》,vb 基础》, 《access 》,《html 和网页设计基础》。我当时什么也不懂就跟着学, 先是win2000,比较简单(教材简单),后来是C 语言,只讲了一个多月就结束了,我上的是周末班,那时我还以为讲得慢呢,哪知道C 语言的地位和重要性,岂是几天就可以学会?接着是VB,说真的,真正让我对编程产生兴趣的是VB,我一接触VB 就对VB6 这种所见既所得的编程环境产生了浓厚的兴趣,当时觉得这才是真正的编程,C 语言没用。我想大多数人也是从VB 开始学编程的吧。因为我们的教材写得太空洞,所以我就又买了一本VB 入门书,我觉得好多知识老师都不成讲过,有一次我问老师如何用VB 实现一个功能时,她竟说无法实现,而没有说她不会实现,后来我翻书找到了答案,从此我对老师的权威产生了怀疑。那时的我整天学习使用VB,连坐车都在看VB 书,用VB 做了很多“芝麻”程序,自己做得最大的一个就是24 点,用了极其笨的算法,可算完成了,还有很多BUG。我们一学期的课程根本就没有讲数据结构和算法这些知识,我们也认为那是计算机专业开的垃圾课程,毫无意义,现在想起来真是大错特错了!一学期结束时,老师领着我们用VB 做了一个信用卡程序,很简单,算是毕业设计。考试是分笔试和机试,超简单,笔试事先给你材料,回家去背吧,80% 是原题,机试考的是C 语言,超简单,你要是还是不会,就把别人的COPY 过来就行了,再不会,还有老师帮忙呢。当我手捧着《初级程序员》证书(国家劳动保障部发的,与国家信息部发的差十万八千里)和《**** 》证书时,我觉得我就是程序员了(现在想起来,当时真是幼稚!)这也促使我参加二学期的班,于是我在**** “越陷越深了”。

第二学期的课没有换老师,而教材却是从2.0 版本换成了3.0 版本了, 可能是上个版本太说不过去了吧。3.0 版本也没有太多改变。主要课程有:C++,sqlserver,VBA,java,asp.哈哈,真是大而全,有点像我们的专业了。当时却不这样认为。于是跟着学,先学c++,教材只有170 多页,而理论部分只有110页,后面是上机部分, 和一本练习册的厚度差不多,由于我们C 语言基础打得不好,所以学C++ 普遍感到吃力,就这样不到一个月的时间,C++ 语言就结束了。接着就是sql server, VBA, 我记得在讲VBA 的时候,我们就有很多人听不懂了,特别是COM 组件,我现在也是知其然,而不知其所以然。而老师看我们不懂,也没有耐心了,慢慢地我发现老师的讲课态度发生了变化,只是讲她的课,而不注重和我们的沟通,我们上机时,她也是不闻不问,而是躲在一旁啃JAVA。后来才知道她辞职不干转行了。接着开始学JAVA,给我们带课的是一位男老师,课讲得还行,就是张扬的很,让人觉得不舒服。我觉得当时上这门课的时候,来了很多别的班的同学一起听,把本来就不宽敞的教授都坐满了, 不知道是觉得JAVA 重要还是因为已经学得吃力了, 我想是后者吧。

考试仍然很容易过,可是当二学期结束时,我发现我没有学到什么实际的东西,我甚至不会用一门语言写一个大一点的程序,学的语言实在是太多了而自己的编程思想还没有建立。在是否继续学习二学年这个问题上,我犹豫了很久,是坚持还是放弃?我想对每个深陷其中的人来说,都是很难抉择的,最后我还是选择了坚持,很多人选择了放弃,我记得刚开始和我一起学第一学期的人现在没剩下几个了,大部分人都选择做了其他行业,和编程彻底绝缘了。我真的不想就这么放弃,毕竟我付出了很多精力和金钱,而且我非常热爱这个行业,真的想用毕生的精力从事这个行业的工作,程序设计对我来说一直很神秘,像一座待开发的宝矿,我一直想征服它!

当我怀揣着第二学年的学费前往**** 的路上,我的心情异常复杂,这可是我父母的血汗钱呀,我现在没有挣钱回报我的父母,而是管父母要钱,这个滋味是没有经历过的人很难体会的。还有一个问题就是钱是不是白花?我能不能实现自己的理想?为了自己的理想“不择手段”叫不叫自私?第二学年的班已经开了,我也已经毕业了,我们系的就业率和前几届的一样,没有什么改观,而且有持续走低的趋势,我的好多同学都没有找到正式工作,一部分人在作推销,辛苦不说而且工资少得可冷,也许能锻炼人吧,很多人干两天就不干了。还有一部分人在家观望,还有几个有考研的打算。目前的状况使我的要求也在降低,我学编程不求能挣多少钱(以前有这种想法),现在只是想能够自食其力,作自己喜欢做的工作,也就心满意足了.可是我现在学得却越来觉得吃力了,二学年课程有oracle,j2ee,.net,c#,asp.net 等,目前在讲j2ee, 讲得很快,预计05 年底就能结业,我不知道到时候能不能找到一份工作,可是依我目前的知识结构,很难有竞争力。究竟是哪儿出了问题呢?

论智力,我觉得我不比别人差,我五岁学下棋,六岁没上封学就参加了区里的封学生组比赛并且拿到了名次,接着我就开始了拜师学艺,初中蝉联了三届本市中学生比赛的冠军,一次省里的冠军,95 年参加全国“** 杯”少年组的比赛并一举夺魁!大封比赛参加10 多次,冠军如探囊取物。说真的,当时差一点就走这条路,因为当时我和省里的一些大师都下过,觉得并不是不可战胜.但是后来由于中国象棋缺乏国际竞争力等诸多原因,发展状况远没有围棋、国际象棋发展好,即使是一些象棋大师每日还要算计着过日子,这不能不说是整个象棋界的悲哀!关于中国象棋的发展和象棋理论的专业探讨,我有一肚子话要说,但是在这里不过多阐述,因为这里毕竟不是谈论象棋的地方,还有人不会下棋呢。不过后面我要对象棋和编程做 一番比较,谈我一点的肤浅看法,如果你有兴趣,请耐心往下看。当我决定把精力放在学业上时,已经是高三了,面临高考,由于之前下棋付出太多时间和精力,落下了很多对基础课程的学习,所以我必须迎头赶上,凭着一股儿冲劲,我来到了**,虽然不是名校,却是正规本科院校,一直到现在。所以说论智力,我不比别人差,可为什么我学得会越来越吃力呢?

我开始反复思考这个问题,去这个网站的论坛上看一些高手总结的一些经验教训的质子,去csdn 看高手是怎么从初学者变成人人尊敬的高手的。我看了大量这样的质子,然后结合自己实际情况进行总结,才发现了问题所在!基础太薄弱!!正是这个原因使我现在学习非常吃力。看看我这一年学的都是一些流行的开发工具,比如vc,vb,dreamweaver,jbuilder,oracle 等等, 而我却真正的忽视了对数据结构和算法、windows 程序设计、汇编、编译原理、操作系统等等这些基础课程的学习,一上来就学c++,java,vba, 面向过程编程基础不牢固,直接学面向对象,试想一个在大学上只学了两本书的人直接学这些流行的开发工具,结果会怎么样?而且是每门课 学的时间都不长,这个月dreamweaver, 下个月就jbuilder, 再下个月就oracle 了,试想要精通asp,java,数据库原理需要多长时间?我们是刚刚学点皮毛就学这些东西,岂不是在沙地上盖高楼,早晚有一天会挎掉的,而且盖得越高,损失也越惨重!而我当初并没有意识到对基础理论学习的重要性,现在真是后悔。

对此**** 应该负有主要责任,他们的宣传广告上面招生的对象是只具有高中以上学历,而其他的一些培训机构比如东软,清华都要求计算机本科专业或相关专业,说明这些机构已经懂得基础的重要性。而且**** 在授课时老师也并没有引导学生重视基础理论的学习,盲目追赶最先进的东西。应该承认**** 的课程体系囊括了世界最流行的开发工具,可以说是面面俱到,但是在学习这些东西之前,必须有很扎实的基础,如果没有,即使学会了,也是知其然而不知其所有然,在此引用不知哪位网友的一句话:“与其说把流行的东西握在手中,还不如把过时的技术记在心里,“ 可见基础的重要性。有很多零基础的人慕名来到****,希望摆脱自己的命运,可是学了一学期以后就再也学不下去了,原因何在,基础不行,不过也有一些对计算机极有天赋者,这应另当别论。

有时候我就想如果当初我在学习**** 的时候,如果能在家里恶补理论知识会不会更好呢?可是当初我很难意识到这一点,而且那时学校的课很重,一本《西方经济学》就有点压得我喘不过气来,除了上课,我已经没有时间在学别的东西了。况且当时我们培训的同学普遍流行着一种说法,说“我们毕业了将比计算机专业的更有竞争力!”当初我也报有这种想法,现在看起来真是笑话,先看看学习时间,他们学四年,我们不到两年(快的一年半),再看看计算机专业的课程体系,你就知道了,其中大部分是对基础理论的学习,学习时间宽松,如果能抓紧时间学习,将能打下一个良好的基础,为以后学习流行开发工具铺平了道路。诚然,现在一些高校的计算机专业的教材有些比较沉旧,可是一些原理上的东西并不是一两年就发展起来的,是大师们经过多年的研究总结出来的,深度掌握,必然对以后学习大有裨益!还有一种说法是“我们毕业了能直接上手为企业打来效益,而那些计算机专业毕业的学生根本不会做什么,所以我们更有竞争力!”初听起来,似乎很有道理,可是如果那些计算机毕业的学生参加企业培训呢?新出来一种工具,同时学习,谁理解得更透彻,谁学习得更快呢?

其实学习象棋和学习编程是一个道理。

先说象棋,会下棋的人都知道,下棋分开、中、残局三个阶段,要想学棋并想成为一名高手的话,必须先出残局开始学起,然后是中局,最后是开局。从开局学起的人很难有大的发展。这是我的切身体会,我记得我封时候学棋的时候,几乎没看过书,都是实战实战再实战,从实战中汲取营养,总结经验教训,等我到达一定阶段时,我爸爸就每天给我摆棋式,先练杀法,每天几个,当时有一本很经典的书《象棋杀着大全》,有400 多页吧,我爸就天天给我摆,让我破解,不看到结果不许动手,最后都把这本书都翻烂了(当然不是我弄的),现在真的应该感谢老爸,我虽然现在在象棋方面没有什么成就(我爸一直希望我成为一名象棋大师),但也算是一盘好棋吧。然后开始摆残局,接着是中局。对象棋有研究的人会发现,中残局功夫是最难练的,也是最能看出一个人象棋水平的高低。正是我爸一盘一盘的摆,才练就了我扎实的中残局功底,可以说我的基本功都是我爸一盘一盘摆出来的(再次感谢老爸!),等我到了一定水平后,才自己开始打谱学习开局,看别人的对局选,我发现我对开局的理解比那些上来就学习开局的人更透彻,记得也更牢,而且还能指出其中的错误并且提出自己的观点,有时我看完一本开局书,书上会记很多我自己的体会,试想如果没有良好的基本功的话,是不可能做到这些的。

再说编程,如果把学编程也分成三个阶段的话,那么残局就是基础,包括操作系统、汇编基础、离散数学、编译原理、计算机图形学等等,而中局就是c 语言(不是特定的)、数据结构和算法等等、而开局就是目前的各种的流行开发工具吧,包括vc,vb,delphi,jbuilder,dreamweaver 等等,以上三个阶段分的不一定正确,不过大概是这个意思吧。如果” 中残局“ 没有打好,只学” 开局“ 是永远也成为不了高手的,而且” 开局“ 总是随着时代发展而改变,不断有新的开发工具出现,落后的” 开局“ 将永远被淘汰,而相对来说” 中残局“ 是不会有太大变化的。而” 中残局“ 和” 中残局功夫“ 两者又不太一样”,我个人认为“ 中残局功夫” 指的是编程思想,一个好的编程思想不是一朝一夕可以练成了。如果掌握了打下了扎实的“ 中残局” 基础,练就了一身过硬的“ 中残局功夫”,那么在学开局就相当容易了,网上经常有这样的评论,比如:“ 如果学c 一年,那么学vb 之需一个月,如果学vb 一年,再学c 时间可能超过一个月”,“ 学C++ 三年,再学JAVA 只需一个月” 等等是同一个道理。

痛定思痛以后,我觉得我要想在编程方面往更高更深的地方发展,必须打好基础,苦练内功,为此我打算从C 语言开始学起,然后是数据结构和算法* 汇编* 操作系统原理*windows 程序设计*C++ 程序设计, 之后要看很多国外经典书,《C++ primer 》,《C++ 编程思想》等等,然后再选一个合适的开发工具,虽然会很慢,但我会踏踏实实的学习,再也不盲目跟风了。现在我C 语言只学了两天,课我还得继续上,毕竟钱已经交了,我想等我基础打牢了,以前有些课还得重听,有基础了可能会悟出一些新的东西。**** 这点好,课可以循环听。

回想我一年的学习,现在看来才刚刚起步,不免有些惭愧。正是走了这些弯路,才使我认识到基础的重要性。虽然以后还要有很长的路要走,但是我无缘无悔,因为我热爱这个行业。我相信我重新选择学习的方向是正确的,我打算用十年的时间来掌握这门技术,我今年23 岁,到我33 岁时,我想我还会写一篇文章来回忆我十年的经历,并总结出的经验和教训,供后来者借鉴。

顺便说一下我的女朋友,她和我是一个学校毕业的,学外语的,英语八级,现在毕业工作了,一个月3000 元。她现在对我很失望,说不再向以前一样喜欢我,欣赏我了,这给我很大打击!但是作为男人,我理解她,现在我的压力很大,我想我会顶住压力,坚持走自己的路的,希望大家能够支持我!

最后我想对初学者说的是,不要盲目跟风,要重视基础的学习,否则只会竹篮打水一场空。

如果您能耐心的把以上看完,我就很感谢了;如果您还能提出宝贵的意见和建议,我将感恩不尽!

经验分享

(四)一个程序员的经历

一.并不成功的开始

我所读的学校是中国西部的一所普通高校。我进大学后也和大多数同学一样,过着60 分万岁的日子,除了对编程比较感兴趣外。(呵呵,好多室友都说我外表女人,内心却男人:喜欢写程序,喜欢和男生打是际,喜欢打CS 选土匪,拿AK47)四年的大学生活淘进了我刚进校时的傲气与自尊,在栀子花开的季节,我面对的却是无法把握的未来。毕业了,是的,四年象梦一样。男友执意去了中国最繁荣的大都市,我却希望留守相对平静的近在咫尺的西部城市,结局是可想而知的。痛苦十分短暂,因为迫在眉睫的生存问题变得急为严峻。幸运的是,2004 年7 月我很顺利的找到了一份程序员的工作。我的第一份工作比较轻松,就是做MIS 系统,写写C# 代码。工作很轻松,带我的经理也很照顾我。于是我每天过着上班下班的生活,每天穿梭在熙熙攘攘的人潮当中,全然没了生活的压力。这样的生活也让人讨厌,日子太无聊了,无非就是写着重复的代码,再就是在天涯上闲逛。这样的日子结束于我看到的一篇文章,题目我记不太清楚了,好像是:成为IT 精英,我奋斗了7 年。

当时很受鼓舞,也很自责。大学的四年已经荒废,难道还要重蹈覆辙?于是我有了想离开这个安逸的城市,去节奏相对较快的城市锻炼一下自己。

于是在今年年初,我毅然背起行囊,踏上了南下的火车。。

二.初来乍到

一下火车,我来到人山人海的车站广场,看着人山人海,心里没有底气,毕竟是第一次出远门。但是只觉告诉我,先要找个落脚的地方。虽然我带了5000 块,但是我却不敢乱花一分钱,因为在我印象中这座城市消费比原来的城市高多了。我得想办法尽快找到工作。

经过2 个多小时的寻找,终于让我找到了一个网吧。于是不顾旅途劳累,趴在电脑前就上51JOB,简单回顾了自己的工作经历,然后填写了简历,在网上投。时间过得很快,一下子到了中午。我出了网吧,胡乱吃了碗酸辣粉。然后去找旅馆,这里的旅馆真的很多,各种档次都有,我找了一个看上去觉得比较安全的旅馆。130 一晚上,好心疼!!尽管很累但是,大半个晚上我都没有睡着,双手紧紧的抓住手提袋。到了下半夜,我才慢慢的睡着。

早上起来的时候已经是9 点多了,我洗漱完毕。双眼盯着手机屏幕,生怕会错过面试电话。也许我运气真的不错,大约10 点,手机响了。我赶紧接了,一时高兴得语无伦次。电话里一个女声:您好,请问您是XX 么?我们是yy 科技有限公司,想约您下午面试......挂了电话,我高兴得不知东南西北了,没想到这么快就有回应了。下午出门的时候我化了点淡妆,出门了。我按着yy 公司的提示,费了将近2 个小时才找到地方,真后悔没有买张地图。到yy 公司的时候已经是下午4 点了。面试我的是位女经理。30 分钟过后,我们谈得比较好。我自信满满的,呵呵。

最后经理问我期望的薪水时,我咬咬了牙,很小声的说了句3500.经理说,其实你比较符合我们的要求,但是薪水可能不会那么高。我小声问她能给我多少,她说句2000。但是我心都冷了,我来这个城市之前的工资也有1500 啊。我说了句考虑考虑后,出了yy 公司的大门。在传说中,这个城市不是每个人都拿高工资的么?怎么会这样?失望和痛苦同时袭来。

回到旅馆我仔细总结了一整天,得出结论:1.不是没有高工资,而是所掌握的技能门槛比较低,导致没有什么竞争力。2.一个规律:IT 技能(不精通的情况下),技术门槛低的入门较容易的,在市场上竞争力不大(精通后,每项IT 技能的竞争力相差不大。)。3.所以我决定,去学习新的东西,门槛稍稍高那么一点的东西。

注意拿定,我回顾了自己所学的东西,觉得C/C++ 基础还可以,而且上学的时候写过一段时间的VC,于是决定啃C/C++。我开始在网上投C/C++ 相关的职位,把薪水要求降到2500 ~3000。上天又一次眷顾了我,四天后我找到了一份工作,工资2500,包住宿。唉,总算是定下来了,接着我便写了个学习C++ 的详细计划,花了1500 元买了个二手电脑。工作后,我觉得极其的不适应,这个时候才知道,我对C++ 的理解是何其肤浅!基础太差了。。自尊心一向很强的我,受了很大的刺激。我觉得,是时候努力了!

在工作的时候我积极的请教同事,下班后我在宿舍里疯狂的肯C++, 在网上下载了教材。一行一行认真的读,上机练习,从基础开始。一步一步的来。在刚开始的一个月里,几乎每天都是凌晨才休息。但是我觉得很欣慰,因为我逐渐适应工作了,而且觉得越来越理解C++ 的内涵。连续这样3 个月后,我终于对工作得心应手了,VC 的底子也逐渐厚实。回想原来的夜郎自大,真的很好笑。现在我对C++ 无疑是敬畏的。原来以为自己有多厉害,其实自己差得要命。不懂虚函数有什么用,不知道除了构造函数,析构函数外还有拷贝函数,还有深浅拷贝之分。不懂什么是多态,不懂什么是抽象类,不知道C++ 里居然还有个STL 库。随便拿本VC 的书就写程序,甚至不知道APP WIZARD 生成程序的入口。

经过了三个月的苦心孤诣终于有点眉目了。我没有直接用VC,而是从SDK 入手,用SDK 写了将近一个月的程序。终于知道了windows 里面居然还有消息机制,每个应用程序还有消息队列。编译器分配存储空间的时候居然还有内存对齐。这些新奇的东西让我兴奋,我每天如饥似渴的读着各类电子书。

《深入浅出MFC 》, 《高质量C/C++ 编程》,都是我的宝贝。是的,正象很多人说的一样,没有几年是无法精通VC 的。但是,我们无需精通每个方面,我们只需足够熟悉我们工作所用到的部分。DLL, 数据库,组件技术,图形技术,进程调度,多线程等等,网络...太多太多了,MFC 是如此的庞大。也许是我心高气傲,当经理跟我说转正给我3000 的时候,我拒绝了,我觉得自己可以拿更高的薪水。于是我辞职了。

这次的离职,没有给我带来什么忧虑,可能通过前断时间的学习有了些许的底气。可能大家很奇怪,为什么上文多次提到工资,请原谅我的俗气!当爱情不能依靠时,金钱是能唯一给我安全感的东西。

这一次我打算找名气稍微强一点的企业。正好,TX 公司正开招聘会。我一大早赶到招聘会现场,很热闹,已经有很多人在那里面试了。等了大约半个小时,终于轮到我了。面试官没有象我想象的那样提一些基础知识,而是直接问我对UML 怎么理解,对UI 设计有什么心得这些抽象的问题。我回答得吞吞吐吐,语无伦次,结果是可想而知的。55555555,真的好惨,这个全国著名的SP 把我就这样简单的拒绝了,好打击人啊。但是这次来并非没有收获,因为在我走出招聘会场的时候,我留意到unix/linux 展台门可罗雀,于是一个计划又在我内心酝酿。我回家后在网上搜集linux 入门资料,然后把电脑硬盘格式化,为了表示学习linux 的决心,我给windows15G,给了linux 25G,就这样开始了我的学习linux 之旅!

第二天,我从朋友那里打听到GDNT 有个招聘会,于是又风风火火的赶去。GDNT 的面试也给了我重重一棒子,让我好痛苦。在痛苦中过了3 天后,一个高中同学说她们单位要招VC 方面的人。我当时真的很高兴,也很紧张,因为这次面对的公司是中国著名电信运营商的研发中心。由于朋友的引见,面试很快确定在2 天后。在这两天里,我把所有关于C/C++ 的知识点复习了一遍,然后阅读了一些网络方面的资料。果然功夫不负有心人,2 个小时的比试面试过去了,我成了她们的一员。最后PM 许诺试用期给我4K。

这里的工作环境很好,工作也比较轻松,也许所有国企都是这样的把。下午2:00 上班,中午可以休息两个小时。单位食堂的伙食丰富而且价格便宜,一般不超过5 元,最令人觉得温馨的是饭后偶尔还会发水果。:)真的是好幸福,呵呵。在这里主要做的是一些交换网管系统,在这期间我跟PM 学了不少东西。熟悉了HW,ZTE 的很多产品,以及COBAR 接口规范。私下还对7 号信令做了比较详细的阅读,而且对很多网络协议有所了解了,比如SNMP,RIPv2、OSPF、IGRP,还学会了怎样使用CLEARCASE 等工具。但是,最大的收获莫过于对UNIX 的学习了。在这里有很多UNIX 机器,HP*UNIX ,IBM*AIX,SUNOS 等等。。

每天下班后我没有直接回家,而是留在了单位telnet 到SUNOS 上,开始了我学习unix 的计划。几乎天天都是10:00 以后才离开单位, 搞不懂的就问人或者在网上找资料。回家以后,我继续在linux 上学习一直到转钟。这期间我真的学了很多,跟windows 上写程序完全不同了,似乎更关心细节,更关心操作系统了。经过大约3 个月的摸索,终于对unix 有所了解了,觉得好多东西豁然开朗。进程通讯,进程管理,页面置换,信号灯,线程池这些东西是我在windows 下写程序从未接触过的。

觉得学习unix 真的很幸福,每天进步一点,会让我睡得踏实。把《unix 高级环境编程》学完后,我开始慢慢的请教前辈,有关嵌入式的开发的问题。

慢慢学着分析内核情景,裁减内核,底层的东西让我觉得好奇。还有一件让人特兴奋的事儿,咱们科室好多开发人员都是女同志,PM 也是女人。

时间飞快,转眼四个月已经过去了。我觉得是时候该离开这个安逸的国企了,说真的,真有些舍不得,我向PM 提出辞职时,经理非常真诚的挽留我,说我工作做得不错,叫我考虑考虑再走。这里的人真的很好,学习的气氛也很浓,也许我希望日子过得紧张一些。经理说我这样跳来跳去不利于自身的发展。也许她是对的,也许是我太倔犟,终于还是走了。我知道,当我交出那张卡,就再也不能回来了,走出大门站在华景的天桥上我默默的站了10 分钟,仰望着那熟悉的大厦。

晚上回去改了改简历,然后在网上投。躺在床上,看着天花板,突然之间觉得好孤单,这里一个亲人也没有,鼻子很酸,好想哭。客厅电视机里传来世界杯预选赛的呐喊(我和一个男生一个女生合租三室一厅)。我走出客厅和那个男生谈了很多,也知道了他很多事情。现在才知道,虽然是合租,但是彼此沟通真的很少。他原来是在XTKJ 工作,后来跳到外企,也是搞IT 的,也是程序员。一个人到南方。

当时聊了很多,不觉到了凌晨。不过我们都没有睡意,于是他问我会是际否,我一拍即合。他很惊讶的看着我:你真的会。我说试试就知道。于是我们各自回房打开电脑,比赛开始了,呵呵。也许是他太轻敌,第一场,我选虫族,他选人族,结果被我出快狗偷袭成功,不过后来几场我都输得很惨,呵呵。

第二天睡到中午才起来,1 点多的时候突然来了个电话,通知我去面试,职位是linux 程序员。我赶快打扮起来:)。照镜子才发现,自己瘦了好多,也憔悴了不少。我穿上了自己最漂亮的衣服,然后简单了画了一下眉,打了粉底和眼影,并且还画龙点睛的摸了腮红。呵呵,自己对着镜子傻笑。

到了面试的公司(一个刚成立不久的外企,VOIP 设备商),和PM 谈得很顺利。他问的问题也很简单:函数传值传址的区别,常用的进程通讯方式,和我做过的一些项目等等。最后PM 问我期望的薪水是多少。我怯怯的说了句:5K。经理摸了摸前额想了想对我说:这样把,你好好干,试用期我给你5.5K。出了公司门,感觉天空一片蔚蓝。

经验分享

(五)一个还不太老的程序员的体会

(一)文章由来及个人经历

我是一名计算机专业的本科毕业生,毕业已经1 年多了。毕业后从事的是软件编程工作,经常有其他专业的朋友想从事软件编程工作,向我请教如何,因为我自觉涉行不深,不敢信口开河,无奈朋友信任,我不得不郑重考虑一下这个问题了,来帮助朋友选择和回报朋友的信任。这也就是此文的由来。

还是先谈谈我个人的经历吧。(是不是有点俗套,但我觉得了解我的经历,有助于理解我话的含义;我一向认为不了解古龙的生活经历的,不会真正读懂古龙的作品和古龙笔下的英雄的)我本科就读于南方一所著名的高校(因为自己的不成气,愧谈母校名谓),学的就是计算机专业。上本科时,几乎没有认真的听完一门专业课程,上课看报纸睡大觉,下课看录像看小说看球赛,临考抱佛脚,每次考试和课程设计都是蒙混过关。(于之相对是,我选修的工商管理和经济贸易方面的课到是听得不亦乐乎,考的分数颇高,也许这才是我的真正兴趣所在。)

总而言之,大学是混过来了,对专业的理解和掌握程度,应该没有达到毕业要求的合格水平。(也很后悔,但是有什么用呢,当时不知道珍惜;如果上天再给我一次机会的话,我一定会抓住,多看点美国大片少看点港片;现在,重回校园是我的一大理想)但是大学的学习使我有了一个简单的知识框架(总算学费没白交),我对一个朋友这样形容过我的这个知识框架,“它不是钢筋铸的,是稻草扎的”,哈哈哈,不要笑,真的,我敢说很多本科毕业的朋友的本专业的知识框架也只不过是“稻草扎的”。直到现在,我一直觉得自己的基础知识还是很薄弱,一直想抓点时间,把基础书本好好的温习一下。(此项任务正在计划和实施中)

毕业后,分配到某研究所工作。当领导让我选择自己以后的工作方向时,我毫不犹豫的选择了软件(也不知道到底是对还是错,但我决不后悔)。此研究所主要是以硬件为核心搞通信控制设备的研发生产;软件是辅助,所以也不受什么重视,很多搞软件的人都跳槽走了,留下来的大都是一些已经废掉和行将废掉的“伪/ 萎”程序员(名副其实的“软件人员”)。在这里感觉不到什么高紧张和高技术程度的研究和开发;软件开发的技术含量极低,以致于大部分人只有半年的学习和开发经验,以后都是这些知识和经验的重复利用。(我问过其他到研究所工作的同学,他们说都一样,呜呼,我们的国防科研开发呀)对于软件的开发,领导的意志和老掉牙的经验在新课题的技术采用和开发中起了决定性作用,没有明确的需求,没有明确的开发计划和进度,大家在一天一天一周一周的浪费着宝贵的时间,最后开发出来的东西修来改去,直至它变成垃圾。我越来越认识到一点,要么象那些废人一样废掉,要么自己去努力寻求出路,反正别指望从工作中得到什么高明的经验了(教训倒也许有)。期间发生了一些感情上的纠纷,严重的影响了学习计划和效果,直到现在浮躁的心仍然有些浮躁。

期间,我读了一些书,看了一些文章,编过一些小例程,搞了一些没有什么技术含量的开发工作,也和一些前辈和高手们谈过聊过。我一直在思考几个问题;如何学习软件开发?如何搞软件开发,国外的软件开发到底其秘诀在何处?为何我们的软件业一直在低水平徘徊?我们难道真的离了Microsoft 就活不了?我们的程序员到底在浪费时间干些什么?软件开发到底是如何分类的?我们如何走自己的民族软件之路?

我想了很久,一些想通了,一些还在想。但我知道有一点是肯定的,那就是我们一定要靠我们自己走出自己的软件之路!跟在别人屁股后面永远受制于人!

好了,关于经历和牢骚就先写这些吧,该进入我们的正题了。

(二)你适合当程序员吗,你知道编程序是怎么回事吗? 1、程序员意味着要编程序。(如果你仅仅想得到一份高薪水的工作,喝喝咖啡就等老板发薪水,我奉劝你还是另找一份更合适的工作,譬如练摊,真的,兄弟,这份工作不适合你)、你是学文的还是学理的,编程序也许需要浪漫,但更需要逻辑和严谨。(说坦白点就是,在你没有找到乐趣以前,它很枯燥)、你有对新技术追求的热情吗?你有刨根问底的探索精神吗?(热情绝对是最重要的!你仔细思考一下自己的性格适合当程序员吗?)、当程序员决不是什么好差事,时刻需要学习,需要思考。(直到你成为那个可以引导别人去学习和思考的人,你才可以偷偷的嘿嘿笑,又一群傻蛋)、程序员的未来很迷茫。(但我认为关键看你自己!我希望你是一个有追求的人,不仅仅是混碗饭吃。因为真正的乐趣在于创造;如果你能改变软件业的历史,那才是英雄;不想成为Bill Gates,不想成为Dennis Ritchie 和 Bjarne Stroustrup,我会说你没有追求。有个关于程序员未来的笑话,也许你还没听过,你该听一听,摘抄如下:

一个程序员对自己的未来很迷茫,于是去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”

上帝说“我的孩子,你去问Lippman,他现在领导的程序员的队伍可能是地球上最大的”

于是他去问Lippman。

Lippman 说“程序员的未来就是驾驭程序员”

这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”

上帝说“我的孩子,你去问Gates,他现在所拥有的财产可能是地球上最多的” 于是他去问Gates。

Gates 说“程序员的未来就是榨取程序员”

这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?”

上帝说“我的孩子,你去问侯捷,他写的计算机书的读者可能是地球上最多的” 于是他去问侯捷。

侯捷说“程序员的未来就是诱惑程序员”

这个程序员对这个未来不满意,于是他又去问上帝。“万能的上帝呀,请你告诉我,我的未来会怎样?” 上帝摇摇头“唉,我的孩子,你还是别当程序员了”)

6、当程序员还是很有乐趣的。(当你学到新知识时,当你有新的思想见解时,当你有新的产品问世时,和知己探讨你的成果时…我问你,觉得这些是乐趣吗?)、当程序员不易也不难。(世间事有难易乎?为之…;不为…。你有决心和信心吗?)、你真的要当程序员?是你自己的想法?、你舍得花钱买书吗?(读好书绝对是学习编程的最佳捷径。你一定会说,现在电脑书籍真T.M.D 贵,没法子,谁让知识和技术在人家的脑袋,在人家的书里呢;等你写书时可以把价格定低一点,记着还有好多没钱但想买书的兄弟很困难呀。要舍得买书,买好书,不好的的书不如不读,其害大于其益,关于买什么书,你可以问高手或看候捷的书评;准备一个小本子记录你想买的书的名字,逛书店时看看,如果好就买下,记住要读,别光买不看。)、我告诉你,程序就是:任何有目的的、预想好的动作序列,它是一种软件。、编程序就是编写程序。、你想好了吗?(如果你想好了还是决定要当程序员,可以继续往下读;否则,你可以继续寻找别的出路了。)

(三)一个程序员应该具备的基础知识和概念、计算机是有什么组成的,CPU 是什么东西,其工作原理是什么。(对于这些以及下面将要提到的概念我不会告诉你什么答案,你可以看相应的教材,关于教材我会在下一部分详述,记住理解最重要!)、机器语言和微指令集的概念。、程序的概念。、汇编语言是低级语言但不是机器语言。、高级语言主要有那些?(C,C ++,Basic,Pascal,Fortran,C#,Java 等等;如果你是中国软件业的英雄,你也写一门语言,最好不用英语)6、编译程序和解释程序的概念和其原理。(编译器是高手和专家编写的)、HTML、XML 等是标识性语言。

8、Prolog 是人工智能语言。、操作系统OS 的概念和原理。(Windows98,Windows2000,Windows NT,UNIX,Linux,等等都是OS,还有一些实时OS,嵌入OS,编这些的绝对是高手)、Windows 编程说白了就是Windows API 的调用。(中国的程序员很多只是会编windows 程序,用的是VB,我的建议是这些程序员顶多只是低级编码员,我称其是coder)、VC ++、VB、BC、BCB、Delphi、VF 等都只是编程的工具和环境,不是编程语言。、面向结构的设计概念。、面向对象的概念。(好好理解,兄弟,这个东西还是很重要的)、软件工程的概念和原理。(如果你想当老总就需要好好研究了,系统分析员比编码员要高一个等级,薪水也高哟)、数据库的概念。(要熟悉一些著名的数据库系统和语言的名字,如Orcle,SQL,DB2,DyBase等)、了解网络概念。、了解多媒体概念。、熟悉和掌握数据结构和基本算法。、是不是要求太高了,别着急慢慢来,进步在不知不觉之中。(一旦开始学习,一个月以后你就会有一个基本的概念;两个月以后你就会感觉自己有了全面的基础知识;当你知道编程序是怎么回事时,说明你已经入门了。也有很多人编了很多年程序还没有入门呢,你不会希望自己步其后尘吧。要有信心和耐心。沉不住气怎么能成大事?!)

(四)教材推荐

推荐的教材主要还是针对概念来的,最好选用名校的教学用书。、《计算机组成原理》(熟悉)2、《数据结构》(掌握)3、《操作系统》(了解*> 熟悉)4、《The C language 》(掌握)5、《编译原理》(了解原理)6、《汇编语言》(了解)7、《计算机网络》(了解)8、《软件工程》(了解)9、《关系数据库》(熟悉)、《The C ++Languege 》(掌握)、《面向对象设计》(掌握;结合C++ 学习)

(五)一些经验和体会

(五)一些经验和体会、真正的程序员用C++ ;(一位专家说的)2、动手去编程序; 3、动脑去思考;、要有良好的编程风格;、读书,读好书,尽量读原版书!(我反复强调这一点,读书要有选择,坚持读好书,名家出的经典书,不要浪费实践在一些粗制滥造的书上面;坚持博览群书)6、有自己的学习计划;、总结自己的经验教训;(准备一个笔记本,记录错误和心得)8、不要怕学新东西; 9、要有软件工程的思想;、善于发现问题,然后去寻找答案; 11、向高手请教;(要虚心直到你成为高手)12、和同行交流;(不善于交流肯定不行)、懂得软件的实质,不要被千变万化的表象所迷惑;、真正要学习用的是编程语言和方法,不是什么库,什么类,什么工具;(学用那些什么库都比较简单,但 光会这些库,我觉得还远远不够)、学习wiodows 编程主要是学习windows OS 和win32 API ; 16、有空了解一下嵌入式开发; 17、有空了解一下PDA 软件开发;、了解一下.NET 框架和C# 语言,也许它是你新的衣食父母;、要有耐心,不要作浮躁的人; 20、对程序加注释,并保留你的老程序; 21、学到的东西越多,了解的越多,你就越接近专家; 22、有空去逛逛CSDN,那里有你很多知己; 23、要有信心成为一个优秀的程序;

(六)一些好书的推荐、《The C Programming language 》(Keinighan & Dennis Ritchie 1988)2、《The C++ Programming Languague 》(Bjarne Stroustrup 1997)3、《Inside The C++ Object Model 》(lippmans)4、《Effective C++ 》(同上)5、《More Effective C++ 》(同上)6、《Exceptional c++ 》 7、《C++ 面向对象高效编程》 8、《设计模式》 9、《Thinking In C++ 》、《The Standard C++ Bible 》(一般推荐)11、《The Art of Computer Programming 》、《Programming Windows 》(Charles Petzold)13、《VC++5.0 技术内幕》 14、《MFC 深入浅出》 15、《软件需求》、《Advanced Windows 》 17、《C++ primer 》、《win32 程序员参考手册》 19、《用TCP/IP 进行网际互连》 20、《COM 本质论》

(七)学习计划

这个学习计划是我个人定的,也共享给大家参考一下,共同进步吧。、《计算机组成原理》 2、《操作系统》 3、《数据结构》 4、《汇编语言》 5、《 C 》 6、《 C++ 》 7、《VC 技术内幕》、《Programming Windows 》 9、《深入浅出MFC 》 10、《Advanced Windows 》、《Inside The C++ Object Model 》 12、《Thinking in C++ 》 13、《Effective C++ 》 14、数据库 15、网络、嵌入式OS 和编程 17、硬件单片机 18、.NET 和C# 19、软件工程 20、UNIX 和Linux

(八)后记

一年来浪费了大量的时间去摸索,去思考,走了很多的弯路,直到现在我还觉得自己是个编程的门外汉。我把我的一些体会和想法说出来(当然,很多都不一定正确,欢迎大家指正和讨论),也许对一些想加入程序员行列的朋友有一些建议和帮助。希望能帮助这些朋友顺利走上编程之路,成为高手。

如果真能如此,我也就很高兴了。欢迎有兴趣的朋友给我发E_mailsjpsky@163.net);我这个人有两大业余爱好,其一就是读武侠小说,其二就是结交英雄侠士。

后记:此文我用analyster 的名字登录,发表在“csdn -程序人生”上了,有很多网友看了,回了,还收到几个网友发来邮件,和我探讨,我很感谢大家对我的信任和鼓励。

我要说明的就是我的这篇小文,主要是想给“一些想成为程序员”的朋友一些建议,帮他们寻找一条自我培训的捷径,(其实世界上没有什么捷径的,我觉得一切都在于悟性,师傅领进门,修行在个人,譬如我就修行不够)少象我一样作大量的无用功。还有,主要就是一个程序员应该具备的基本功(个人看法), 有人称其为“内功”,我觉得很对。没有扎实的基本功,我们如何能够做到游刃有余的编写高质量高性能的优秀程序呢?

经验分享

(六)一个程序员给初学编程人的建议!绝对的好!

想学习程序设计而又很迷惘的朋友,希望可以带来一点帮助。

我第一次接触电脑是在小学二年级的时候。那时纯粹是因为喜欢打电子游戏,听别人说电脑上的游戏十分好玩,于是就漫漫开始与之接触了。在三年级时父母出于我对计算机浓厚的兴趣送我去了一个BASIC 编程学习班,从那时起我才真正开始走上编程这条不归之路。虽然说现在程序设计这门专业在社会上很热,竞争十分激烈,但是这只是学习编程的人比较多而已。真正能够掌握以至于精通的人实际上很少,毕竟中国的软件业才刚刚起步不久。现在社会对优秀的程序设计人员的需求量还是相当大的,但是前提是必须要优秀。我自己虽然也谈不上优秀,但多少还是有些感触。在这里想讲述自己对于一般程序员和优秀程序员之间在技术上的一些认识(什么敬业精神生活态度我就不多说了):

首先作为一个优秀的程序员,数学是十分重要的。数学是自然科学的基础,计算机科学实际上是数学的一个分支。数学主要能让人懂得一种分析问题的方法,然后再通过编程去实现它。计算机内部的许多原理也都牵涉到比较复杂的数学知识。它是我们用来解决现实问题的最高效的工具。很多学习编程的朋友对数学觉得不屑一顾,觉得对于编程没有什么关系。实际上优秀程序员和一般程序员拉开档次很大一个程度上就是取决于对数学的能力。一些项目有时需要很复杂的数学建模和利用数学对于系统效率进行分析,而这些项目对于一般的程序员是很困难的。正确应用数学知识有时候能使你的程序的效率产生质的飞跃。现在的程序员在数学上普遍是薄弱环节,这点是大家应该引起足够重视的。当别人对于这些项目感到无从下手,而你却能够完成,这个时候你的价值也就表现出来了。真正优秀的程序员是能够最基本的一点就是要能够通过自己的知识来解决一般程序员所无法完成的问题。而数学能力就是一个很重要的环节。

其次就是要对数据结构引起足够的重视。如果说计算机专业的学生与非计算机专业的最根本的差别绝对是数据结构(数学大家都一样学了,主要看你自己学得好坏)。对数据结构的掌握与运用能力是衡量你编程能力的一个很重要的指标。有的人对于看了链表,栈,树,广义表这些东西就头痛。然而这些东西往往能使你的程序的效率比别人高出百倍。由于一直搞信息学竞赛,到了大学又搞ACM,所以我对数学和数据结构都掌握得相对较好。这使我在应聘与工作中明显感到胜人一酬。记得自己大学时去一家公司应聘的经历,当时去应凭的还有3 个人,有2 个大学毕业,有个也工作了一段时间了。他们几个都在大讲自己的能力如何之强,会使用的语言及编程工具如何之多,经验如何之丰富。按理说我应该是资质最浅的。当时也是初生牛X 不怕虎,也就硬着头皮去了。当时面试的题目是一个公司的资金管理项目的一个问题,要求每个人都在思考后给出自己的设计方案。其中比较核心的一个问题就是要计算一个资金最小波动值的问题,给出的数据量相当大,对效率要求很高。对于整个程序的面向对象化的分析我们几个都是差不多的,毕竟这些东西在学校里是很重视的,而且不是真正的难点。然而到了最关键的问题时其余的人都卡壳了,有两个是用简单的双重循环,时间复杂度(N^2),惨不忍睹。还有一个在冥思苦想了好一阵以后说用树,具体技术细节又讲不清楚,效率分析也很马虎。只有我当时很快就给出了采取AVL 树的方案,并且利用高等数学推导作出了很详细的效率分析和时空换算,并提出了引入汇编的方法。很自然的我得到了这分工作。在这里大家显然可以看到数学和数据结构对于一个优秀程序员是多么重要,它们是和一般的程序员打开档次的最关键的地方。这样向“枣子”碰到的那种情况应该很轻松的就可以想到。

如果你是一位想学习编程的朋友,我经过多年的学习总结出来了一个学习的线路希望对你有所帮助。要学习编程是要有很大恒心和毅力的,首先你要明确自己的目标,想好自己编程是为了干什么。如果你学习仅仅只是一时想编出QUAKE 和成为比尔盖次的冲动,那么我劝你还是应该还是不要开始学习,应为这样的目标很难支持你日后大量的学习。而且你的年龄不能太大(最好是中学或者大学生)。如果你想好目标并决定开始奋斗,那就让我们开始吧。如果你一开始对电脑一无所知,那么你应该先熟悉一些电脑的一些最基本的原理和操作,这个不需要特别细致的学习,只要大概知道二进制和一些基本操作就可以了。接下来你应该先学习BASIC 语言,这个语言并不会耽误你太多的时间,学习它完全是为了入门,让你对电脑编程有一个比较初步的认识。这时候你应该多编一些小的程序,知道一些最基本每条语句的功能,搞清楚一些基本的数据结构(尤其是数组)对于一些其余用途的函数最好不要做任何学习,因为这样只会分散你的注意力。当你能够可以熟练的运用BASIC 编出猴子选大王,以及电脑出题考试之类的程序时,你就可以开始后面的学习了。接下来如果觉得自己接受能力强的话就可以开始学C 了(注意不是C++),如果感觉有困难也可以先学Pascal 过度一下。还有很重要的一点就是千万不要一开始就学VB,DELPHI,VC之类的东西,这些东西在一开始学会对你造成很坏的影响。有可能会把你引入另外一个错误的学习方向而忽略了真正应该掌握的东西。学C 主要是学过程话的程序设计,学会把自己的程序分成许多的函数(或过程),养成良好的编程习惯。这时可以多看一下高人的程序,不一定要懂意思,主要是学会别人程序的格式(比如变量如何起名,怎么划分函数)。除开掌握基本的控制流语句外,应该学习一些很简单的I/O 函数和数学函数。C 的学习主要是你舍弃原来BASIC 程序那种把所有语句积成一大堆的风格,要学会使用函数,提高代码重用性。对于指针之类的东西如果实在看不懂可以先不去管,到后面会有办法。当你能够比较自如的用C 编写一些小的计算程序时,你就可以开始你的数据结构的学习了(数学的学习主要是在学校,自

己要多用心)。数据结构你可以一点一点漫漫看,并不需要专门空出一段时间来专门研究,这样的目的是让你能够很好的掌握它,要学会用数据结构的知识来规范自己的程序设计和提高程序的效率。学完C 我认为接着最好学习汇编。这个或许有许多人都会反对,然而我个人认为这样是很好的。从最基本的DOS 汇编开始,买本《IBM PC 汇编程序设计》(清华黄皮)一定要一点一点吃透,实在看不懂就跳,反复的严读是一定可以看懂的。汇编是一定要掌握的,因为它涉及到很多最基本的知识。掌握了汇编和对I/O 有了个很彻底的认识后,应该去学编译原理。这个东西并不要精通,但是一定要知道,在大脑里要有一个这样的概念,这对你对程序语言的控制能力都有很大的帮助。这样最基本的学习就算完成了。一般智力正常的人前一段东西应该都是可以掌握的。接着后面的学习就要看你自身的造化了。这个时候你应该研究一下数据结构,不要分散自己学习的注意力,要知道数据结构是异常重要的(相信我,绝对没错)如果你觉得自己已经对于树,连表,堆栈之类的东西和排序,递归之类的算法已经十分清楚,就可以开始学习C++了。学习前一定要有个正确的认识,那就是C 和C++ 是两个不同的东西。学习C++ 是为了学习面向对象的程序设计,这个时候你对于指针应该也能够掌握了(有汇编的基础),主要抓住C++ 和C 相比的一些新特性,对于多态之类的特性要注意理解掌握,如果没有搞懂就坚决不要往下学习。一些基本的概念掌握以后可以看一些别人设计的程序,学习别人怎么利用面向对象的方

法来设计程序的。这个东西也是人之间拉开档次的一个环节,可以和数据结构放在同等重要的地位。我就见过有的人都大学毕业了还搞不懂virtual 到底是怎么一回事情。其实我认为学到这里你已经为你成为一个优秀的程序员打下了很好的基础,你已经能够应用C++,懂得面向对象程序设计,对数据结构掌握很好,掌握汇编和编 译原理。接下来的学习就是基于操作平台的了,一般是先学windows(Microsoft 毕竟是老大),先学win32api,搞请windows 基本消息机制和原理,有汇编基础基本上不会碰到什么困难。其实只要会了API,其余什么MFC,VCL 都是囊中之物了,都不过是对于API 的小装而已。VC,C++Builder 都可轻松拿下,这只是开发工具的问题。以后的OLE(ActiveX),.NET,数据库就要看自己的发展方向而定了。我在这里强调的是前面的基本能力的学习,后面操作平台虽然知识体系庞大,然而毕竟比较死,更好掌握。最后编程能力的高低主要还是有以下几点决定:1。编程的习惯 2。数学能力(包括逻辑思维,分析问题的能力)3。对数据结构的认识能力 4。经验的多少(包括多使用语言的掌握能力)。

经验分享

(七)算法的力量

算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时要求的编程语言五花八门,就产生了一种误解,认为学计算机就是学各种编程语言,或者认为,学习最新的语言、技术、标准就是最好的铺路方法。其实,大家被这些公司误导了。编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论,例如数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等等。在“开复学生网”上,有位同学生动地把这些基础课程比拟为“内功”,把新的语言、技术、标准比拟为“外功”。整天赶时髦的人最后只懂得招式,没有功力,是不可能成为高手的。

算法与我

当我在1980 年转入计算机科学系时,还没有多少人的专业方向是计算机科学。有许多其他系的人嘲笑我们说:

“知道为什么只有你们系要加一个„科学‟,而没有„物理科学系‟或„化学科学系‟吗?因为人家是真的科学, 不需要画蛇添足,而你们自己心虚,生怕不„科学‟,才这样欲盖弥彰。” 其实,这点他们彻底弄错了。真正学懂计算机的人(不只是“编程匠”)都对数学有相当的造诣,既能用科学家的严谨思维来求证,也能用工程师的务实手段来解决问题——而这种思维和手段的最佳演绎就是“算法”。

记得我读博时写的Othello 对弈软件获得了世界冠军。当时,得第二名的人认为我是靠侥幸才打赢他,不服气地问我的程序平均每秒能搜索多少步棋,当他发现我的软件在搜索效率上比他快60 多倍时,才彻底服输。为什么在同样的机器上,我可以多做60 倍的工作呢?这是因为我用了一个最新的算法,能够把一个指数函数转换成四个近似的表,只要用常数时间就可得到近似的答案。在这个例子中,是否用对算法才是能否赢得世界冠军的关键。

还记得1988 年贝尔实验室副总裁亲自来访问我的学校,目的就是为了想了解为什么他们的语音识别系统比我开发的慢几十倍,而且,在扩大至大词汇系统后,速度差异更有几百倍之多。他们虽然买了几台超级计算机,勉强让系统跑了起来,但这么贵的计算资源让他们的产品部门很反感,因为“昂贵”的技术是没有应用前景的。在与他们探讨的过程中,我惊讶地发现一个O(n*m)的动态规划(dynamic programming)居然被他们做成了O(n*n*m)。更惊讶的是,他们还为此发表了不少文章,甚至为自己的算法起了一个很特别的名字,并将算法提名到一个科学会议里,希望能得到大奖。当时,贝尔实验室的研究员当然绝顶聪明,但他们全都是学数学、物理或电机出身,从未学过计算机科学或算法,才犯了这么基本的错误。我想那些人以后再也不会嘲笑学计算机科学的人了吧!

网络时代的算法

有人也许会说:“今天计算机这么快,算法还重要吗? ”其实永远不会有太快的计算机,因为我们总会想出新的应用。虽然在摩尔定律的作用下,计算机的计算能力每年都在飞快增长,价格也在不断下降。可我们不要忘记,需要处理的信息量更是呈指数级的增长。现在每人每天都会创造出大量数据(照片,视频,语音,文本等等)。日益先进的记录和存储手段使我们每个人的信息量都在爆炸式的增长。互联网的信息流量和日志容量也在飞快增长。在科学研究方面,随着研究手段的进步,数据量更是达到了前所未有的程度。无论是三维图形、海量数据处理、机器学习、语音识别,都需要极大的计算量。在网络时代,越来越多的挑战需要靠卓越的算法来解决。

再举另一个网络时代的例子。在互联网和手机搜索上,如果要找附近的咖啡店,那么搜索引擎该怎么处理这个请求呢?

最简单的办法就是把整个城市的咖啡馆都找出来, 然后计算出它们的所在位置与你之间的距离, 再进行排序, 然后返回最近的结果。但该如何计算距离呢?图论里有不少算法可以解决这个问题。

这么做也许是最直观的,但绝对不是最迅速的。如果一个城市只有为数不多的咖啡馆, 那这么做应该没什么问题, 反正计算量不大。但如果一个城市里有很多咖啡馆, 又有很多用户都需要类似的搜索, 那么服务器所承受的压力就大多了。在这种情况下, 我们该怎样优化算法呢? 首先,我们可以把整个城市的咖啡馆做一次“预处理”。比如,把一个城市分成若干个“格子(grid)”, 然后根据用户所在的位置把他放到某一个格子里,只对格子里的咖啡馆进行距离排序。

问题又来了,如果格子大小一样,那么绝大多数结果都可能出现在市中心的一个格子里,而郊区的格子里只有极少的结果。在这种情况下,我们应该把市中心多分出几个格子。更进一步,格子应该是一个“树结构”,最顶层是一个大格——整个城市,然后逐层下降,格子越来越小,这样有利于用户进行精确搜索——如果在最底层的格子里搜索结果不多,用户可以逐级上升,放大搜索范围。

上述算法对咖啡馆的例子很实用,但是它具有通用性吗?答案是否定的。把咖啡馆抽象一下,它是一个“点”,如果要搜索一个“面”该怎么办呢?比如,用户想去一个水库玩,而一个水库有好几个入口,那么哪一个离用户最近呢?这个时候,上述“树结构”就要改成“r*tree ”, 因为树中间的每一个节点都是一个范围,一个有边界的范围(参考:http://)。这个算法能够在很多种计算中达到相当高的效率,而且是可扩展的(也就是说,一千台机器就算不能达到一千倍的效果,至少也可以达到几百倍的效果)。Map and Reduce 的另外一大特色是它可以利用大批廉价的机器组成功能强大的server farm。最后,它的容错性能异常出色,就算一个server farm 里面的机器down 掉一半,整个farm 依然能够运行。正是因为这个天才的认识, 才有了Map and Reduce 算法。借助该算法,Google 几乎能无限地增加计算量,与日新月异的互联网应用一同成长。

算法并不局限于计算机和网络

举一个计算机领域外的例子:在高能物理研究方面,很多实验每秒钟都产生几个TB 的数据量。但因为处理能力和存储能力的不足,科学家不得不把绝大部分未经处理的数据丢弃掉。可大家要知道,新元素的信息很有可能就藏在我们来不及处理的数据里面。同样的,在其他任何领域里,算法都可以改变人类的生活。例如人类基因的研究,就可能因为算法而发明新的医疗方式。在国家安全领域,有效的算法可能避免下一个911 的发生。在气象方面,算法可以更好地预测未来天灾的发生,以拯救生命。

所以,如果你把计算机的发展放到应用和数据飞速增长的大环境下,你一定会发现,算法的重要性不是在日益减小,而是在日益加强。

给程序员的七个建议

(1)练内功。不要只花功夫学习各种流行的编程语言和工具,以及某些公司招聘广告上要求的科目。要把数据结构、算法、数据库、操作系统原理、计算机体系结构、计算机网络,离散数学等基础课程学好。大家不妨试试高德纳所著The Art of Computer Programming 里的题目,如果你能够解决其中的大部分题目,就说明你在算法方面有一定的功力了。

(2)多实战。通过编程的实战积累经验、巩固知识。很多中国大学毕业生缺乏编程和调试经验;学习C语言,考试过关就算学会了;课题项目中,只要程序能够编译,运行,并且输入输出满足要求就算了事。这些做法是不行的。写程序的时候,大家必须多想想如何把程序写得更加精炼、高效、高质量。建议大家争取在大学四年中积累编写十万行代码的经验。我们必须明白的是:好程序员是写出来的,不是学出来的。

(3)求实干。不要轻视任何实际工作,比如一些看似简单的编码或测试。要不懈追求对细节一丝不苟的实干作风与敬业精神。我发现不少程序员对于知识的掌握很肤浅,不求甚解,没有好奇心,不会刨根问底。比如,学会了C++,是否了解一个对象在编译后,在汇编代码中是如何被初始化的?这个对象的各个成员在内存中是如何存放的?当一个成员函数被调用时,编译器在汇编代码中加入了哪些额外的动作?虚函数的调用是如何实现的? 这些东西恐怕在编程语言或编译原理中都没有详细提到,只有通过踏实的实干才能真正掌握。

(4)重视数学学习。数学是思维的体操,数学无处不在。学计算机至少要学习离散数学、概率论、布尔代数、集合论和数理逻辑。这些知识并不难,但是对你未来的工作帮助会很大。尤其当你对一些“数学密集型”的领域如视频、图像处理等有兴趣时,这些知识将成为你手中的利器。

(5)培养团队精神,学会与人合作。今天的软件工程早已经不是一个人可以单独操作的,而必须靠团队合作才能成功。不懂得合作的人是不能成大器的。大家要多去寻找可以与人一起做项目的机会。

(6)激励创新意识,培养好奇心,不要死记硬背。没有掌握某种算法技术的根本原理,就不会有应变和创新的能力。想成为一位好程序员(其实从事任何一个行业都是如此),重要的是要养成钻研,好奇,创新,动手,合作的优秀习惯,不满足于填鸭,不满足于考试交差,不满足于表象。这不是学几门课能够一蹴而就的。

(7)有策略地“打工”。在不影响学业的前提下,寻找真正有意义的暑期工作或兼职。去找一个重视技术的公司,在一个好的“老板”指导下完成真正会被用户使用的程序。不要急于去一个要你做“头”而独挡一面的地方,因为向别人学习才是你的目的。找工作也是一样,不要只看待遇和职衔,要挑一个你能够学习的环境,一个愿意培养员工的企业,一个重视你的专业的公司。最后,还要挑一个好老板。

希望大家都能把握机会,养成好的学习习惯,把算法学精学透;希望大家都能有一个美好的未来!

经验分享

(八)不要迷失在技术的海洋中

技术就好像一片汪洋大海,越深入越望不到边际。就拿自己的体会说吧,2000 年的时候在学校搞ASP,觉得网页开发就是这么简单,把数据库中的数据格式化一下显示在页面上,把用户的输入组装成添加删除和修改的SQL 提交到数据库中去。几年后的今天,我对自己了解或听说过的ASP.NET 相关(注意:仅仅是ASP.NET 或者说网站制作相关)技术列了一下:

在这些语言、技术、工具、理念中,每一项都能扩展出很多还要细化的技术,每一项要达到熟悉的程度可能都会花去一年的时间,如果这些都要达到熟悉的话,大概也 就快退休了。不但如此,每一个技术都在飞速发展,今年语言到了明年就有更简单的语法,今年的技术到了明年就有更好的技术来替代,今年的工具到明年已经面目 全非,今年的理念到了明年已不再流行。

或许你现在:

在为面试而去搜索接口和抽象类的区别;

在为新技术来不及学习而烦恼;

在为看不懂高深的技术文章而烦恼;

在为项目不能提高自己的编码水平而发愁;

„„„„

我觉得:不管做什么,学什么,一要心态好,二要态度好。所谓心态好就是不要着急、不用担心;所谓态度好是多分享、多讨论、学出自己的心得。分享的意义是很大的,在分享之后的认知水平往往比分享之前的高,而且在很多时候分享给别人1 点,别人能回报给你2 点。有些人在团队中不愿意分享,怕团队中的其它人水平提升了影响到自己的地位,其实这种想法是没有什么道理的,也是对自己不利的。有些人又在羡慕别人的技术NB,崇拜高手,为自己的技术差感到烦恼,如果你对自己信心又有什么技术是花时间学不到的那?

从学习的内容上来说,要坚持两个原则,如果你没有时间的话,那么学新技术不如学基础、学应用不如学思想。举例来说,如果你只熟悉C# 的基本语法的话,那么学好C# 这个语言比学会编写留言本更有意义,如果你关注MVC、ORM 的话,那么学习它们的思想比学会使用MONORAIL 以及NHIBERNMATE 更好。技术虽然一直在变,但是越是基础和越是抽象的技术变化越慢,越是偏向应用越是具体的技术变化越是快,从性价比上说,学习基础知识性价比更高。再举一个直白的例子,DIY 电脑的时候,在显示器上多花费500 元的意义一定比在显卡上多花费500 元的意义大,而就是有些人宁可在显卡上多花费500 元。在很多大型软件公司,招聘的时候只看人(看人品、看聪明程度、看态度)不看技术的,因为它们需要的是能快速发展,适应企业文化的人,而不需要你那些所谓的精通和熟悉。

不要过于专著于技术,这里的技术指工作中用于开发的技术。在几年之后,当你只有.NET 可以和你的孩子分享的话,是不是太可悲了。在软件行业,技术虽然一定程度决定了薪水、决定了职位,但是我们的生活并不是100% 是工作,有时间为技术而发愁,为何不综合提升自己的其它能力呢?并且随着职位的上升,往往沟通能力、经济知识以及文学艺术修养比技术显得更重要,这个时候叹息自己过于专著技术往往为时过晚。

虽然国内很多公司的技术层次不同和文化也有差异,但是在大多数的时候公司或别人能教给你的东西很少,要学东西还是要靠自己主动。有的人一直觉得在公司学不到 东西,想换一个环境,往往他换了一个环境之后发现还是学不到什么东西。国内的项目大多还是急功近利的,不要期望有这么多微软研究院,空闲的时间踏踏实实学 一些东西比到处找工作强很多,做项目的时候多分享一下自己的心得给团队成员比抱怨团队技术实力差强很多。

在工作中,要始终提醒自己“谦恭”、“真诚”和“规矩”,谦恭真诚对别人,把规矩留给自己。技术再强也要“谦恭”,离开了“谦恭”的技术就会失去光芒,社会 再险恶也要“真诚”,一切虚伪会在“真”诚面前低头,职位再高也要“规矩”(不迟到,不早退,以身作则),否则再大的权力也只能变成人员的流失。如果能做 到这六个子,那么无论你的技术怎么样,无论你到哪里都会得到领导的重用,在事业上有所发展。

现在的你不再为面试而去搜索接口和抽象类的区别,而是在面试的时候告诉考官你并不知道它们之间的区别,但是愿意在一个月内系统学习面向对象的知识;为新技术来不及学习而烦恼,而是明确了自己最需要学习的技术,一边学习一边分享;为看不懂高深的技术文章而烦恼,而是拿起《C# 高级编程》踏踏实实从头到底边阅读边做试验;为项目不能提高自己的编码水平而发愁,而是在进度允许的情况下尽可能让项目变得可扩展、可维护以及高效;

„„„„

看到身边的一些人为技术所累,在技术的海洋中航行的很辛苦,因此有了本文。本文的主要目的是提醒大家找到方向,时不时回岸边休息一下,思考一下新的航向,不要迷失在技术的海洋中让自己筋疲力尽,在技术之外的有很多东西的意义远大于技术,请大家踊跃讨论„„„„

更新(本文或许过于杂乱,总结一下观点): 学习靠自己,不要期望别人教你什么,学习要主动;

不管水平高低,不要看不起自己,也不能看不起别人,学习要心态好; 不能不思进取,也不用让自己为技术所累,给自己多一点技术之外的时间; 如果时间不充裕,优先考虑学习基础的内容,同时也可以多关注一些新的思想; 如果别人能从你这里学到知识的话,那么你自己也一定学到了知识,请坚持分享;

经验分享

(九)给所有入门程序员的建议(1)--句句是诤言 希望大家认真读完

编了这么久的程序,一直想找机会总结下其中的心得和方法,但回想我这段编程道路,又很难说清楚,如果按照我走过的所有路来说,显然星不可能的!当我看完了云风的《游戏之旅**编程感悟》和梁肇新的《编程高手箴言》我突然瞄道我要从何说起,我要怎么说了!

从接触编程到现在已经至少要6年,虽然时间短,但我几乎每天都在编,而编程上突飞猛进的还星最近一两年,单纯编程上的进步,很简单就星经验,但你要理解才可以进步的快!这就星说,你的理论课要学好,才能学好编程,操作系统,网络原理,计算机体系结构,数据结构,编译原理,你哪个学的不好,你根本不配成为编程高手,我见过的高手,这些学的都不错!这些都星计算机的支柱,你连它的支柱都不了解,怎么编程,即使你编写的程序好——只有一个原因,你用的星高级语言或脚本语言,因为它们封闭大量低层语言细节,让你不用了解就可以编写,你不了解低层细节你咋成为高手!解释什么叫编程?

我觉得现在很多同学,根本不瞄道什么叫编程!我现在告诉你,单纯的编程,也就星就瞄道语法瞄识的编程,根本不叫编程,只会单纯的语法的编程连低级程序员都不如!

编程不仅仅星你对语法的掌握,你还要把各种技术混合到里面,这样才叫编程,你编程的时候,你应该问问自己,你的程序有算法吗?你的程序写的够简单吗?速度足够快吗?占用空间足够少吗?代码写的规范吗?语句写的标准吗?你的程序之间的结构合理吗?你类定义的合适吗?方法和属性合理吗?接口合理吗?等等等,包含很多东西!这就星高级程序员为什么赚这么多钱!要付出相当大的脑力劳动!

调试对你也很重要,一个程序高手,也星调试专家,其实调试很多方法,但大多数都星实践中得到的!

指正现在人对学计算机误区

现在我每天在和汇编,硬件指令,c和c++或一些低层API打交道,有些时候编程这个东西很难说清楚,只有你经历了,你才能感受到,你没有经历,就永远体验不到!

我现在要更正几个现在学计算机人的误区,我想回答的星,学什么才星学计算机!

学计算机的两个方向:一个星纯搞理论的,一个星搞实践的。搞理论的无可厚非的,大家都承认星学计算机。那么实践呢?我很难给出一个定义,但我会列出那些才星真正学计算机学的:

(1)编程,这里的编程,我要抛出FLASH,PHOTOSHOP,3DMAX等,它们虽然也有语言,但都星为了给美术人员提供的!也就星几乎封闭了大量的低层细节,对于一个学计算机的人来说,如果你努力学它们,你还星不要学计算机了,去学美术把!网页编程能接触到至少两种类型语言,HTML和ASP或JSP(PHP),HTML说实话,不应该星计算机人学的,你应该学的星ASP,JSP等!

按严格意义上讲(但实际没有这么严格)如果你的主要必修语言,不星c,c++,JAVA,或者硬件指令,都不算星真正学计算机的,之所以这么说,我举个例子,比如你用JSP,它星一个脚本语言,如果你用过这个语言,你认为你用好这门语言需要了解硬件结构瞄识吗?显然不用,如果你纯星JSP程序员,你需要只星,JSP语法,一些简单的JAVA语言,SQL之类的数据库瞄识,其余的你什么都不需要,至于分析流程,那星系统分析师的事,不要和编程混为一谈,我学JSP学了3个月,现学现买就做出了功能齐全的网上书店(当时星老师布置的作业),如果再努点力,就可以投如使用!所以说,学JSP根本就不需要太多的专业瞄识,不星学计算机的也很容易就学会!

学c++,我都学了好几年了,用它写程序都几十万行,我也不敢说我学的精通!就星因为它太灵活了!不同人,用的效果就星不一样!所以按严格意义上讲,如果你的主要必修语言,不星c,c++,JAVA,或者硬件指令,都不算星真正学计算机的,也就星说,学那些对计算机专业瞄识不需要太多了解的语言,就不叫学计算机的!

(2)

从事软件方法实践研究,这个纯星软件工程方面的,如果你没有容入一个大项目中很难体会它的重要性,想一想,一个程序,几十万,几百万行代码,能这么好的实现,并运行,它的功劳不封!

(3)

从事低层硬件开发,这里可能和搞电子的专业有些重叠,但事实就星这样,他们也星学计算机的!其余的,装系统了,装电脑了,用人家编好的软件实现些图片音乐等功能的,那都星计算机的门外汉,不要和真正学计算机的混为一谈!

我经常被问到:

你会盗qq不?我晕,学计算机的就要会盗qq? 你会装电脑不?虽然我会,但不会并不可耻 你会装系统不?虽然我会,但不会并不可耻 „„„„„„„„ „„„„„„„„

等等把,有好多,通过我上面解释,你应该理解学计算机的应该会什么,不会什么也星应该的!

正式入题,怎么学好编程!

世面上好象只有这两本星中国人写的关于编程心得的书,中国编程好的人很多,但写出方法很难!第一本《游戏之旅**编程感悟》前面几章写的星云风的编程经历,后面几章写的星编程经验!总的来说本书很容易读懂!《编程高手箴言》书很难,尤其写操作系统那章!正如作者所说,真正写一门编程方法学的书很难!本书前几张概括了当前中国软件面临的形式,我强烈建议看一下,写的很经典!以前我不瞄道程序和软件的区别星什么,现在我瞄道了!后面几张写的都星编程方法和编程要具备的瞄识!

总结他们两人所说的,我准备按照下面提纲来写编程方法!

1。如果你感兴趣,学计算机星一种光荣,如果你不感兴趣,那么它星地狱!2。理论对你很重要,尤其星你一名搞技术的程序工程师!3。学会自学,学会思考,学会合作与交流!

4。要想成为高手,一定要从底层学起,底层星什么?CPU,汇编等硬件指令!5。编程需要经验积累,学会调试对你尤其重要!

6。全局把握整个工程,具体到每个类的属性和方法以及各个类的关系!一定确保你设计的类和类模式和类间关系能够有效,利于修改和升级!概括说就星软件工程。下面我就分别说一下

一.如果你感兴趣,学计算机星一种光荣,如果你不感兴趣,那么它星地狱!

我经常听很多同学说,开始他对计算机很感兴趣,但随着大学里的学习,越来越感觉无聊甚至厌烦!你之所以这么想,其实一点也不怪你!从高中的应试教育到大学里的自由学习方式上的转变,我们几乎都不适应,一到大学,突然有一种解放的感觉,没有老师的强硬指示学习,自己根本不瞄道怎么学,学什么!所以说,教育对我们很不负责任!

如果你在大学以前已经瞄道编程怎么回事,那到没什么事情!但好象很少有人象云风这样从封就接触了编程教育!所以我们在没有上大学前几乎星零起步!

其实,按我的理解,刚上大学开始学编程有些晚了,之所以这么说,不星因为单纯的编程很难,如果你很努力,几年完全可以搞定,其他的你去公司的经验可以弥补!我这里想说的星,一个真正的程序员不单单要有强硬的编程实力,还要有强大的理论后盾!你只会编程,没有强大的理论做后盾,你也就不会把理论转化成实际的代码,你也不会做出高效,高技能的程序!在计算机理论中,图论,人工智能等等都星很难的理论,但如果你能把它们有效的用在计算机领域,功德无量!国人能做这点的很少,本来厉害的程序员就很少,有高尖端理论技术并把它应用的更星凤毛麟角!

(这里可以推荐大家一本书《游戏编程中的人工智能技术》,这本书抛开了传统的自动机,产生式,各种规则的传统的人工智能理论,而星讲的更前沿的计算智能——生物遗传算法,人工神经网络!这本书,不单纯讲理论,还用c++语言结合理论实现各种游戏程序!有时抽象的理论都星基于数学基础之上,如果没有一定数学基础星很难看懂的,但正因为它有数学证明星正确的,所以它星可行的!能把它用语言实现更星可观!)所以,如果你热爱计算机,在大学以前,就应该成为一个程序高手,而大学以后,主要专研各种技术的实现,和各种技术的学习,如果你把他留在工作里,可能很难,我的同学在参加工作后,很少有继续看技术书籍,因为技术书籍很难,不星一下两下就看懂的,有几个还有这样的耐力和精力去搞!这些怎么在编程上实现,都在等着老外,咱们COPY,这样我们的软件技术能强大吗?

可星在大学以前成为一个编程高手几乎不可能,我们没有良好的学习编程的环境,而且面对着中考,高考的各种压力,几乎没有机会去学习编程!其实,封学,初中,高学,那些课程没有必要象我们这样反复的复习,反复的作题,浪费了大量时间,我们要学会什么?学会一种技能,能够应付各种变化的技能,就星自学,学会思考,学会自己解决问题,学会团结合作!初等教育,打的口号很好,实际上,完全压制了这种学习方式!所以我们应该以最快的速度,在大学里容入一个热爱计算机的氛围!说到这又很难,当代大学生迷茫呀!不瞄道作什么,有些瞄道自己该好好编程,但光说不做!有些人,写了几段代码,出现了问题,不会调试,就放弃了!大家都这样,所以以寝室为单位没有人编程,逐渐以整个计算机学院为单位逐渐编程!确实我们的计算机老师,会编程的很少,我们应该瞄道,中国计算机引进并发展才短短20年,正星这样老一辈的,把这些计算机理论上确立,他们不会编程理所当然,大学的老师主要研究理论,国外的也星,因为理论太难了!

所以大学里学习编程要完全考自己,你要有信心,有意志把它学好才可以,而且这个过程星循序渐进的!以最快方式,找到你编程的爱好和兴趣!我介绍几个方法,学习方式,希望你能找到兴趣,起码我星这样做的,记住如果跌倒了,你要站起来

1.一定要和喜欢编程的,或编程厉害的,或经常编程的人,在一起,经常探讨问题!初学编程会有很多问题出现,你自己很难解决

2. 我建议VB和c一起学习,这个只星我的建议!我为什么这样说呢?如果你开始只学c,你会厌烦整天在DOS下,没有图象的程序!如果你直接学WINDOW编程会很难,所以我建议学VB,VB这星个语法简单,很快可以见到你编写程序的画面,这样你就会逐渐喜欢编程,没有画面很枯燥的,你不这样认为吗?反正我星这样认为的,你编写的好坏,没有画面也很难用眼睛直接看出来!VB星最简单的语言了!不存在c的复杂语法结构,程序出错概率相对c 来说很少,因为VB封状的很好,帮你解决了复杂的过程!其实象JAVA,MFC,c#完全可以作到VB效果,但上手相对困难!c星我们一定要学的,它星一种很接近底层的语言!如果你要成为高手,应该学这个!C星个纯面向过程的语言,它的语法不星很难,你用它大约一年半多左右,就完全可以掌握它,记住这需要你的实践,多做程序,主要星算法程序,最好把你教科书的后的的习题都做了。大家几乎学的都星潭浩强的书,这本书我开始认为很好,但我看了很多国外的书,和很多国外人所打的代码后,和国内高级程序员所说的话,我只能说这本书,只能星你的开端,但不能 让你更深层次了解语言。但你要问我初学者用什么书,我还会介绍这本书。C的精髓在于指针,你能灵活运用指针就几乎等于你掌握了 C语言,这星一种高效的语法支持,快的让你无法想象,我很有感触,在VB下要慢的多。那么我们学VB究竟做什么,很简单,做WINDOWS程序,控件的使用,数据库的使用等等,还有一个很重要的星,你可以练习你学的数据结构,各种计算机算法,很快就可以用图形的方式显现出来!你现在瞄道这些就可以,等你以后学了真正WINDOWS编程,你会对你以前所实现的东西有很深的理解,究竟什么星API,什么星动态连接库,什么星控件,象VB,MFC这样的东西,究竟封状了什么让我们用起来这么简单!

3. 如果你能作到,以上两点,(加上你学的专业,如果你很努力,课大约1年)我想你会对计算机感兴趣的!你逐渐容入爱学计算机的氛围!接下来有两个方向你要去做,一个星努力学好其他计算机专业课,二星在巩固c语言的基础上,你可以选择学习c++ 或者WINDWOS编程!这两个先学哪个都无所谓。记住你大学时学的10大专业课,数学,离散数学,数据结构,编译原理,汇编,数据库,计算机体系结构,操作系统,计算机网络,软件工程,你要尽力把它们学好,这个星整个计算机系统的精髓,这些都星相互贯穿的,相互联系的,你可能学某科没学懂,但学了别的后,可能会懂的!切记,在你学好编程的同时,一定要学好这些理论,以后你会受益匪浅的。

4.在你觉的c或者VB学的没什么问题,或者你学会WINDOWS编程,记住一定要自己有个想法,做个封的可视化程序,封游戏也好,封应用软件也好,都可以,这个步骤,你一定要做,你会学到很多东西!在这期间,你还会遇到很多问题,你要自己多想,多问别人,多去网上查资料!但你做的程序,最好不要COPY别人的,如果都星你自己做的,自己想的,你收获最大,哪怕你星模仿别人的 程序,你用你自己的想法实现了,也星厉害的!其次,你可以COPY部分代码,作为自己的。在你对你的想法,瞄道怎么实现后,写代码只星浪费时间的时候,而且你写的效率没有现成的代码效率高,你就可以完全COPY,但如果你星初学者,你千万不要这么做!否则 你会对它产生依赖,有一天真正让你自己去写,你会无从下手!所以开始时,你可以试着COPY,逐渐摆脱对它们的依赖,以后摆脱了,这个时候,你才可以总依赖它们。

5.大学期间,有很多程序的实验课,你要认真做,做出来收获星自己的,也可以作为自己的一个封项目!大学期间加上实验课,基本上自主编程或者团队自主编写的总封软件数目应该不少于7,8个,如果你做的程序很大,可以少些!以上,我把如果学习计算机入门和提起 你兴趣的方法告诉你了!我相信你按照我的去做,应该没有问题的!对于每个细节,我会在接下来详细为你们写出的!

经验分享

(十)数学对编程的重要作用

可能有很多朋友在网上看过google公司早几年的招聘广告,它的第一题如下了:{first 10*digit prime found inconsecutive digits e}.com,e中出现的连续的第一个10个数字组成的质数。据说当时这个试题在美国很多地铁的出站口都有大幅广告,只要正确解答了这道题,在浏览器的地址栏中输入这个答案,就可以进入下一轮的测试,整个测试过程如同一个数学迷宫,直到你成为google的一员。

又如Intel某年的一道面试题目:巴拿赫病故于1945年8月31日。他的出生年份恰好是他在世时某年年龄的平方,问:他是哪年出生的?这道看似很简单的数学问题,你能不能能快地解答呢?

下面则是一道世界第一大软件公司微软的招聘测试题:中间只隔一个数字的两个素数被称为素数对,比如5和7,17和19,证明素数对之间的数字总能被6整除(假设这两个素数都大于6),现在证明没有由三个素数组成的素数对。这样的试题还有很多很多,这些题目乍初看上去都是一些数学问题。但是世界上一些著名的公司都把它们用于招聘测试,可见它们对新员工数学基础的重视。数学试题与应用程序试题是许多大型软件公司面试中指向性最明显的一类试题,这些试题就是考察应聘者的数学能力与计算机能力。

某咨询公司的一名高级顾问曾说:微软是一家电脑软件公司,当然要求其员工有一定的计算机和数学能力,面试中自然就会考察这类能力。微软的面试题目就考察了应聘人员对基础知识的掌握程度、对基础知识的应用能力,甚至暗含了对计算机基本原理的考察。所以,这样的面试题目的确很“毒辣”,足以筛选到合适的人。

四川大学数学学院的曹广福教授曾说过:“一个大学生将来的作为与他的数学修养有很大的关系”。大学计算机专业学生都有感触,计算机专业课程中最难的几门课程莫过于离散数学、编译原理、数据结构,当然像组合数学、密码学、计算机图形学等课程也令许多人学起来相当吃力,很多自认为数据库学得很好的学生在范式、函数依赖、传递依赖等数学性比较强的概念面前感到力不从心,这些都是因为数学基础或者说数学知识的缺乏所造成的。

数学是计算机的基础,这也是为什么考计算机专业研究生数学都采用最难试题(数学一)的原因,当然这也能促使一些新的交叉学科如数学与应用软件、信息与计算科学专业等飞速发展。许多天才程序员本身就是数学尖子,众所周知,BillGates的数学成绩一直都很棒,他甚至曾经期望当一名数学教授,他的母校——湖滨中学的数学系主任弗雷福?赖特曾这样谈起过他的学生:“他能用一种最简单的方法来解决某个代数或计算机问题,他可以用数学的方法来找到一条处理问题的捷径,我教了这么多年的书,没见过像他这样天分的数学奇才。他甚至可以和我工作过多年的那些优秀数学家媲美。当然,比尔也各方面表现得都很优秀,不仅仅是数学,他的知识面非常广泛,数学仅是他众多特长之一。”。影响一代中国程序人的金山软件股份有限公司董事长求伯君当年高考数学成绩满分进一步说明了问题。很多数学基础很好的人,一旦熟悉了某种计算机语言,他可以很快地理解一些算法的精髓,使之能够运用自如,并可能写出时间与空间复杂度都有明显改善的算法。

程序设计当中解决的相当一部分问题都会涉及各种各样的科学计算,这需要程序员具有什么样的基础呢?实际问题转换为程序,要经过一个对问题抽象的过程,建立起完善的数学模型,只有这样,我们才能建立一个设计良好的程序。从中我们不难看出数学在程序设计领域的重要性。算法与计算理论是计算机程序设计领域的灵魂所在,是发挥程序设计者严谨,敏锐思维的有效工具,任何的程序设计语言都试图将之发挥得淋漓尽致。

程序员需要一定的数学修养,不但是编程本身的需要,同时也是培养逻辑思维以及严谨的编程作风的需要。数学可以锻炼我们的思维能力,可以帮助我们解决现实中的问题。可以帮助我们更高的学习哲学。为什么经常有人对一些科学计算程序一筹莫展,他可以读懂每一行代码,但是却无法预测程序的预测结果,甚至对程序的结构与功能也一知半解,给他一个稍微复杂点的数学公式,他可能就不知道怎么把它变成计算机程序。很多程序员还停留在做做简单的MIS,设计一下MDI,写写简单的Class或用SQL语句实现查询等基础的编程工作上,对于一些需要用到数学知识的编程工作就避而远之,当然实现一个累加程序或者一个税率的换算程序还是很容易的,因为它们并不需要什么高深的数学知识。

一名有过10多年开发经验的老程序员曾说过:“所有程序的本质就是逻辑。技术你已经较好地掌握了,但只有完成逻辑能力的提高,你才能成为一名职业程序员。打一个比方吧,你会XXXXX般武艺,刀枪棍棒都很精通,但就是力气不够,所以永远都上不了战场,这个力气对程序员而言就是逻辑能力(其本质是一个人的数学修养,注意,不是数学知识)。”

程序员的数学修养不是一朝一夕就可以培养的。数学修养与数学知识不一样,修养需要一个长期的过程,而知识的学习可能只是一段短暂的时间。下面是一些我个人对于程序员怎么样提高与培养自己的数学修养的基本看法

首先,应该意识到数学修养的重要性。作为一个优秀的程序员,一定的数学修养是十分重要也是必要的。数学是自然科学的基础,计算机科学实际上是数学的一个分支。计算机理论其实是很多数学知识的融合,软件工程需要图论,密码学需要数论,软件测试需要组合数学,计算机程序的编制更需要很多的数学知识,如集合论、排队论、离散数学、统计学,当然还有微积分。计算机科学一个最大的特征是信息与知识更新速度很快,随着数学知识与计算机理论的进一步结合,数据挖掘、模式识别、神经网络等分支科学得到了迅速发展,控制论、模糊数学、耗散理论、分形科学都促进了计算机软件理论、信息管理技术的发展。严格的说,一个数学基础不扎实的程序不能算一个合格的程序员,很多介绍计算机算法的书籍本身也就是数学知识的应用与计算机实现手册。

其次,自身数学知识的积累,培养自己的空间思维能力和逻辑判断能力。数学是一门分支众多的学科,我们无法在短暂的一生中学会所有的数学知识,像泛函理论、混沌理论以及一些非线性数学问题不是三五几天就可以掌握的。数学修养的培养并不在与数学知识的多少,但要求程序员有良好的数学学习能力,能够很快地把一些数学知识和自己正在解决的问题联系起来,很多理学大师虽然不是数学出身,但是他们对数学有很强的理解能力和敏锐的观察力,于是一系列新的学科诞生了,如计算化学、计算生物学、生物信息学、化学信息学、计算物理学,计算材料学等等。数学是自然学科的基础,计算机技术作为理论与实践的结合,更需要把数学的一些精髓融入其中。从计算机的诞生来看它就是在数学的基础上产生的,最简单的0、1进制就是一个古老的数学问题。程序设计作为一项创造性很强的职业,它需要程序员有一定的数学修养,也具有一定的数学知识的积累,可以更好地把一些数学原理与思想应用于实际的编程工作中去。学无止境,不断的学习是提高修养的必经之路。第三,多在实践中运用数学。有些高等学校开设了一门这样的课程——《数学建模》。我在大学时期也曾学过,这是一门内容很丰富的课程。它把很多相关的学科与数学都联系在一起,通过很多数学模型来解决实际的生产生活问题,很多问题的解决需要计算机程序来实现。我在大学和研究生阶段都参加过数学建模竞赛,获得了不少的经验,同时也进一步提高了自己的数学修养。实际上,现在的程序设计从某些角度来看就是一个数学建模的过程,模型的好坏关系到系统的成败,现在数学建模的思想已经用于计算机的许多相关学科中,不单只是计算机程序设计与算法分析。应该知道,数学是一门需要在实践中展示其魅力的科学,而计算机程序也是为帮助解决实际问题而编制的,因此,应该尽量使它们结合起来,在这个方面,计算机密码学是我认为运用数学知识最深最广泛的,每一个好的加密算法后面都有一个数学理论的支持,如椭圆曲线、背包问题、素数理论等。作为一名优秀的程序员,应该在实际工作中根据需要灵活运用数学知识,培养一定的数学建模能力,善于归纳总结,慢慢使自己的数学知识更加全面,数学修养得到进一步提高。

第四,程序员培养制度与教学的改革。许多程序员培养体制存在很多缺陷,一开始就要求学员能够快速精通某种语言,以语言为中心,对算法的核心思想与相关的数学知识都一笔带过,讲得很少,这造成很多程序员成为背程序的机器,这样不利于程序员自身的快速成长,也不利于程序员解决新问题。我在长期的程序员培训与计算机教学工作采用了一些与传统方式不一致的方法,收到了一定的效果。很多初学程序的人往往写程序时有时候会有思维中断,或者对一些稍难的程序觉得无法下手,我采用了一些课前解决数学小问题的方法来激励大家的学习兴趣,这些小问题不单单是脑筋急转弯,其中不少是很有代表意义的数学思考题。通过数学问题来做编程的热身运动,让学员在数学试题中激发自己的思维能力,记得有位专家曾经说过,经常做做数学题目会使自己变聪明,很长时间不去接触数学问题会使自己思维迟钝。通过一些经典的数学问题来培养学员的思维的严谨性和跳跃性。很多人可能不以为然,其实有些看似简单的问题并不一定能够快速给出答案,大脑也在不断的运用中变更加灵活的。不信吗?大家有兴趣可以做做下面这道题目,看看能不能在1分钟之内想到答案,这只是一道小学数学课后习题。很多人认为自己的数学基础很好,但是据说这道题目90%以上的人不能在一个小时内给出正确答案。

证明:AB+AC>DB+DC(D为三角形ABC的一个内点)。

最后,多学多问,多看好书,看经典。我在这里向大家推荐两部可能大家已经很熟悉的经典的计算机算法教材,它们中间很多内容其实就是数学知识的介绍。第一部是《算法导论》,英文名称:Introduction toAlgorithms,作者:Thomas H.Cormen,Charles E.Leiserson,RonaldL.Rivest,Clifford Stein。本书的主要作者来自麻省理工大学计算机,作者之一Ronald L.Rivest由于其在公开秘钥密码算法RSA上的贡献获得了图灵奖。这本书目前是算法的标准教材,美国许多名校的计算机系都使用它,国内有些院校也将本书作为算法课程的教材。另外许多专业人员也经常引用它。本书基本包含了所有的经典算法,程序全部由伪代码实现,这更增添了本书的通用性,使得利用各种程序设计语言进行程序开发的程序员都可以作为参考。语言方面通俗,很适合作为算法教材和自学算法之用。另一部是很多人都应该知道的Donald.E.Knuth所著《计算机程序设计艺术》,英文名称:The Art ofComputer Programming。

Donald.E.Knuth人生最辉煌的时刻在斯坦福大学计算机系渡过,美国计算机协会图灵奖的获得者,是本领域内当之无愧的泰斗。有戏言称搞计算机程序设计的不认识Knuth就等于搞物理的不知道爱因斯坦,搞数学的不知道欧拉,搞化学的不知道道尔顿。被简称为TAOCP的这本巨著内容博大精深,几乎涵盖了计算机程序设计算法与理论最重要的内容。现在发行的只有三卷,分别为基础运算法则,半数值算法,以及排序和搜索(在写本文之际,第四卷已经出来了,我也在第一时间抢购了一本)。本书结合大量数学知识,分析不同应用领域中的各种算法,研究算法的复杂性,即算法的时间、空间效率,探讨各种适用算法等,其理论和实践价值得到了全世界计算机工作者的公认。书中引入的许多术语、得到的许多结论都变成了计算机领域的标准术语和被广泛引用的结果。另外,作者对有关领域的科学发展史也有深入研究,因此本书介绍众多研究成果的同时,也对其历史渊源和发展过程做了很好的介绍,这种特色在全球科学著作中是不多见的。至于本书的价值我觉得BillGates先生的话足以说明问题:“如果你认为你是一名真正优秀的程序员读Knuth的《计算机程序设计艺术》,如果你能读懂整套书的话,请给我发一份你的简历”。作者数学方面的功底造就了本书严谨的风格,虽然本书不是用当今流行的程序设计语言描述的,但这丝毫不损伤它“程序设计史诗”的地位。道理很简单,它内涵的设计思想是永远不会过时的。除非英语实在有困难,否则建议读者选用英文版。

经验分享

(十一)给学习计算机的同僚们(初学者,进阶者,包括Linux爱好者)的学习建议

为什么我们要学习计算机,为什么我们要学习编程,有很多很多的原因,但当我们踏进计算机的世界里的时候,我们找到了可以任由我们发挥,任由我们施展拳脚的天地,我们有了一种对学习计算机,甚至是学好计算机的渴望,但是任何一门学科都不是那么容易学的好的,计算机更是如此,我想我们大多数人都是从编程开始学习的,逐渐形成了对学习编程的兴趣,但是如果想真正的学好计算机,单单学习高级语言是不能达到效果的,就算你说我只想学好一门高级语言,把它学的精通就可以了,但问题就是那么的简单么,我想不是吧。

计算机是一个整体,学习任何一门计算机课都是和其他课程联系在一起的,要学习就要有足够的深度和广度,不然不可能有深入的了解就像学习c语言一样,如果你想知道他是怎样在计算机的内存中分布的,具体是怎么运行的,就要学习汇编语言,当然计算机体系结构,计算机组成原理,是你理解计算机的基础,计算机大师knuth都非常重视汇编语言(汇编语言和机器语言是一一对应的),要想学好软件,脱离硬件是不可能,因为软件最终要靠硬件来运转的。当然了如果是初学者还是要一步步学的,如果你想知道c语言是怎么运行的,想了解指针和数组的真正区别,那多学一门语言汇编语言吧,人们都说汇编语言是与机器相关的,不能移植的,但想在的pc机上用的几乎都是AMD,和intel的处理器,他们有都是互相兼容的,所以指令集的体系结构都是IA*32当然了现在都有64位的处理器了,但是这并没有什么很大的区别,仅仅是位数变多了,所能表达的数字变大了,精度也变的更长了等等。就像学习高级语言一样学习汇编语言也是相通的,因为他们的功能都差不多,而且更加简单,你会发现在高级语言中的语法会在汇编语言中消失,仅存的就只是指令的书写格式(相当如词法吧,当然了我可能也说的不太对,因为对汇编语言学的不是很深入,所以现在也正在有计划的去学习)。如果你学习的java,vb,c#等等那么就请您多多看看c和c++吧,我们常常听说某种语言实现了垃圾回收机制,用某种算法不定期的把你程序中不再使用的内存回收掉,最好的例子就是JAVA了(关于它的一句话说的挺好,一次编译到处运行,非常适用于嵌入式计算机程序的编写),不过你能用JAVA语言写出内存回收的程序么我想应该是不可能,JAVA对于这方面做了太多的限制,但在c/c++中却没有,你可以用库函数malloc等等去分配内存,free去释放内存,c++中对应的是(new,delete)实现的跟方便些,你也可以用系统调用brk(其实库函数也是调用了他,只不过做了一些更加完善的工作而已)去分配,而且他可以直接去操作数据到位(&,|,~),如果说高级语言是汇编语言的一个子集的话,那么JAVA在这方面就是C/C++的一个子集,我并没有说java不用学,不好,而是在学习他之前应该多去学学C/C++,(注意语法不是特别的重要,重要的是你怎么能在学完语言以后去灵活的运用他),计算机体系结构对于你理解。

软硬件非常的重要给大家推荐一本书,书名 :计算机组成与设计——硬件/软件接口作者:DavidA.Patterson John L.hennessy 出版社:机械工业出版社,这本书很不错,能够很好的把软硬件的关系数清楚,而且不像一些国内的体系结构教材,看的非常的费劲谁然讲的都是很清楚,但不能从读者的角度去考虑问题,这本书会让你看的爱不释手的,恩,对于我来说却是如此,不适合初学c语言的,要有一定的c语言基础。我想还有一点要和大家分享一下,就是学习计算机切忌浮躁,不要像追是族一样,看到一项新出的技术就去学习,新技术会不断的变的,而且很容易让你迷失方向,一定要打好基础,关于计算机基础的书一定要多看,不要死记硬背,但你发现你需要死记硬背去记住书中的知识的时候,那么我可以给你个建议把此书放在书架里,去看一些能够引导你一步步的从本质上理解知识的书,首选一些计算机科学丛书,图灵丛书(机械工业出版社,人民邮电出版社,电子工业出版社),我们学校用的是清华大学自己出版的计算机书籍,虽说清华大学在工科方面很不错,但是出版的计算机书籍就我个人来说真的不怎么好,相对于国外的计算机书籍来说差的真是太远了,我很不明白为什么要用清华出的,有一本关于Linux/unix内核的书我觉得挺好的,书名是Linux内核源代码情景分析浙江大学出版的,我目前正在潜心学习这本书,虽然很难,但真的不错,很少有由我们自己写的关于Linux内核这方面的好书,这本就是不可多得的好书。说了太多关于计算机书籍的话题了,但我认为一本好的书籍真的能给我们很大的帮助还能从中得到快乐。如果你只想学习计算机去赚钱的话,那么你大可以不必去学习很多东西,对于你也没有用处,如果你是对计算机有着非常浓厚的兴趣的话,那么就塌下心来,一步一步去在计算机的海洋里傲游吧,真是一件美妙的事情。

现在我告诉大家自己认为的关于学习计算机的路程

(1)

c语言(可以去学谭浩强写的c语言的书,如果能找到K&R C 那就更好,自己是没有找到,要想进一步去学习的话去看 c缺陷与陷阱,c专家编程,这两本书很经典的)

(2)

c++语言(c和c++其实并不一样,可以说c++是继承了c,增加了面向对象的思想,如果能找到c++program languagec++之父写的就很好,不过自己没有找到,要想进一步去学习的话去看effective c++ more effective c++,挺不容易懂的,因为自己要看Linux内核所以没有多少时间去看,c++沉思录(c缺陷与陷阱 的作者与他的妻子)也非常的不错,还是没有时间去看,只看了200多页,讲的太好了,有时间自己一定会去看完的,这本书讲的主要是教你怎么运用C++语言去写出好的文章)算法和数据之间的结构的理解也很重要,我想如果你有了c++的学习经验学习数据结构应该不太困难,一直以来我都不是很明白抽象的数据结构(abstract data type ADT)的抽象是怎么回事是什么意思,之后看了c++沉思录才恍然大悟,抽象就是把想关注事务的部分拿出来,不关心的不去考虑,就像我们人类,人有很多属性,姓名,年龄,体重等等,当我们研究具体问题是也许只关心人的属性的某些方面,例如姓名,年龄,那么就把它拿出来也就是术语抽象,在c/c++语言就用用户自定义的数据类型来去定义人:struct people{charname[10];int age;};struct 是structure(结构)的缩写,这样理解就非常简单了么,所以c++沉思录非常的好。

(3)

算法与数据结构(有很多好的书籍,大家可以去找找,反正清华出的不敢恭维)

(4)

汇编语言,计算机组成原理,计算机体系结构 微机原理(我认为刚才我说计算机组成与设计——硬件/软件接口就很好的包含了这些内容挺不错的,当然了学习是无止境的。)之后才能开始os的学习,我认为OS是让你在学习计算机上有一个质的飞跃,因为现代的程序设计一般都是基于OS的,如果不了解OS,那么就不可能学好程序设计,就像建造房子一样,房子要建在地上,如果你不了解当地的环境,地质,这么怎么能建造好的房子呢?

(5)

操作系统原理的学习,数据库原理的学习(有一本挺好的书,自己是看完了一遍,电子工业出版社的操作系统设计与精髓作者 stalling 忘了具体怎么拼了,理论性很强,不过是一本好书,要理解性的看)。

至于网络原理,软件工程,通信安全,鉴于尚在学习中,就不说了。哦,还有编译原理,是一门教你怎么把语言翻译成汇编语言,机器语言的一门课,有很多很难的算法,LR算法就很不好理解,至于要什么时候学那就在学好语言和算法的基础上去学习吧。记住千万不要赶时髦去学什么VC,BC,包括MFC之类的,他们只是开发程序的工具而已帮你做了一些辅助性的工作,所以好好学习语言吧!还有就是对于什么等级考试一点作用都没有,如果要是我说现在的等级考试只是人家赚钱的一种方式,已经变质了,我不知道为什么不跟上时代的脚步,把它们给取消了,不止是计算机等级考试,英语等级考试也没有用,不管怎么说他都是一门纸上的考试,对于提高自己没有作用,反而会有反作用。如果你只是为了拿一个计算机考试的凭证,那我劝你还是止步吧,我们是为了学习计算机而学习计算机而不是为了学习计算机而去拿那个一文不值得证,不然我真不知道你学习计算机还有什么意思。如果真的是对计算机感兴趣那就塌下心来,一步一个脚印的去探索计算机世界的奥秘,多么美好的事情呀。很多人开始学习的人都是梦想成为黑客,用几个程序去攻击别人的漏洞,但什么是黑客,天才的程序员才能配的上,就像Linus等一样,我们的目的是去建造宏伟的建筑,而不是去炸毁他那是骇客所做的事情,如果你认为别人的建筑有不足之处大可以指出来。这只是我个人的意见,有不足之处请指出,谢谢了!

还有就是谈谈自己对于Linux学习的看法。学完os以后自己就觉得应该去学习os的内核了,其实当自己刚学os的时候就特别特别特别的想去自己写一个os,看了很多东西还是一无所获,当然了这是必然的,因为自己连os有什么功能,进程线程,进程调度,虚拟内存,进程间的通信,文件系统,系统调用与中断,都是不知所云,所以当时很是郁闷,很是茫然,在学完os之后才对操作系统有一个感性的认识,但是还是太理论了,没有任何源代码的分析,没有任何设计os的细节,所以自己只好去看linux源代码了,但是还有一件重要的事没有做,写源代码我要在一个环境中去写在哪去写呢,那就是在类UNIX操作系统上(我用的是fedora 9.0的发行版,内核是2.6版的),怎样去编译源代码呢用的是一种特殊的格式(其实这种特殊的格式就是在写make命令时,所规定的make认识的文件)书写去告诉编译器编译的过程是什么,也就是用make命令去解释,在windows上我们所用的几乎都是IDE(集成的开发环境,编辑器,编译器,调试器等都组装在一个程序中)的开发环境所以想,对于编译的

英语课堂学习共同体运行程序设计 篇3

关键词:英语课堂 学习共同体 运行程序设计

科层制学校组织形式以权威、控制、竞争、孤立为教育特征,压抑学生学习的主动性,抹杀学生学习的创造性。教育界试图通过建立适应现代创新性人才培养的新范式——学习共同体,来解决这一问题。伴随着社会建构主义学习理论、分布式认知理论以及隐性知识学习理论的出现,学习共同体概念应运而生。1995年,著名教育家Ernest Boyer首次提出了学习共同体概念。他认为,学习共同体是所有人基于共同体的使命并朝向共同的愿景而开展协作学习的组织[1]。之后学者又把学习共同体看作是一种学习型环境,或者是一个动态化的学习结构。学习共同体经过数十年的发展,创建了全新的学习观:学习既是个体的认知过程,也是个体参与社会实践的交互过程;学习发生在社会交互系统之中,受到社会文化的影响;学习是各个水平的学习者的异质交互过程,学习不仅发生在同辈群体中,更应该发生在代际交往中[2]。学习共同体理论强调学习的社会强化功能和信息交流功能。

一、英语学习与课堂学习共同体

课堂学习共同体是学习共同体理念在课堂教学中的具体应用。国内外关于课堂学习共同体的研究涉及概念、目标、任务、活动模式、学习资源、实施策略、创建路径、效果特征等方面。如Watkins在《课堂作为学习共同体》中就课堂学习共同体诸问题的阐述为教师改变传统教学模式提供了实践指南[3]。钟启泉视学习共同体为新型的学习与教学组织形式,它在优化合作互动的学习环境、促进知识的建构、保障学生学力与人格成长等方面发挥着重要作用[4]。Liberman和Miller强调学习共同体的合作、对话、实践、知识的建构和分享功能,他们通过5项个案研究后认为:课堂学习共同体有助于促进教师专业发展和学生学习进步[5]。赵迎将课堂学习共同体特征归纳为共同愿景、协作交流、相互合作、民主平等[6]。

英语课堂教学是一个由学习者、教师、教学材料和环境等要素构成的系统。该系统呈现静态和动态两种形态。以往受以“学习是反应的强化”为教学隐喻的行为主义学习理论和以“学习是知识的获得”为教学隐喻的信息加工理论的影响,英语课堂教学呈现的是一种相对的静态,教师满堂灌,学生被动接受。社会建构主义视学习为知识的社会协商,主张师生课堂有效合作,相互影响。情境学习理论和分布认知学习理论将学习看作是一种社会参与,主张师生课堂动态交互,课堂教学形态趋于动态化,学习共同体由此而形成。研究表明,“学习共同体将从组织层面上实现对‘以教师为中心’和‘以学生为中心’的两极教学方式的超越,完成教学组织形式向学习组织形式的过渡”[7]。

英语认知结构是学习者储存在大脑的一种关于英语知能的信息结构。该结构的形成是学习者获取新知识并应用新结构解决学习问题极为重要的能量。学习者建构英语认知结构的方式影响他们摄入英语信息的数量、加工英语信息的程度和输出英语信息的效率,更影响他们应用英语的灵活性。学习者建构英语认知结构有应试式和应用式。应试式将应试程式潜移默化地灌输给学习者,帮助学习者考试获得高分,因其脱离语言应用情境,难以促成学习者语言应用自动性。但语言应用不像计算机操作那样是按照事先编好的程序运行,而是随着交际环境的变化和交际双方语言使用的变化而不断地调整。应用式建立在现代建构主义理论、互动理论、社会文化理论、基于使用的语言学习理论的基础上。二语习得理论认为,影响学习者语言认知结构生成的因素除了学习者自身的情感之外,还有学习环境以及与学习相关的人。学习环境包括课堂和网络学习环境,人包括教师、学伴以及助学者。研究发现,人在助推学习者语言认知结构生成过程中起决定性作用。环境再好,如果人和人之间缺少交互,环境中的语言信息是难以内化到学习者语言认知结构之中的。

二、英语课堂学习共同体运行程序

1.准备环节

(1)确立学习目标

学习目标是共同体运行的方向和归宿。学习共同体的目标是教师“教”的目标和学生“学”的目标的有效整合。英语课堂学习共同体运行的核心目标是,共同体成员通过分享学习资源并开展协商对话活动,促进共同体成员语言知识增值和语言应用能力提升。

(2)建设学习资源

共同体学习资源既是成员丰富自我认知结构的基本材料,又是合作解决学习问题的信息储备库。师生建设共同体学习资源,要以学习主题为基础,以探究问题为核心,借助参考书、图书馆、中国知网等渠道,搜集、整理、分类学习资源,构建网络化的信息资源库。

(3)制定活动规则

英语课堂学习共同体活动属于特殊的社会实践活动,其运行要遵循分配、交换、转化、实现等规则。分配规则要求,教师要设计学习问题,分解学习任务,明确成员职责,调动成员参与活动的积极性。交换规则强调,学习成员要相互交流物化形态和智能形态的学习资源。物化形态的学习资源包括学习辅导书、学习课件、网络视频等,智能形态的学习资源包括学习信念、学习方法等。转化规则主张,成员间要乐于借鉴并吸收其他成员的学习资源,以体现知识的共享和共生价值。实现规则要求,学习成员既要促进自我知能增值,还要达成共同体学习目标。

(4)构建协商对话机制

学习共同体目标的实现,有赖于共同体环境、成员、表征媒体间的动态交互。共同体成员可以分享个人体验,陈述个人观点。如果共同体成员赞同他人的思想、观点,就会将其同化到自己原有经验中;如果不认同,就会通过意义协商,改变原有认知结构,建构新的认知结构[8]。建构共同体成员协商对话机制,关键在于形成以分享、参与、奉献为特质的共同体文化。具体而言,共同体成员要建立个人学习空间,允许其他成员进入,分享空间资源,建立相互信任感;积极参与学习活动,感受共同体对自我发展的意义和价值,形成对共同体的认同感;树立人人为我、我为人人的奉献精神,促进个人和共同体协同发展,从共同体中获取成就感。

(5)制定共同体运行绩效评估指标体系

情境学习理论认为,绩效评估重在考量学习者将知识与技能应用于真实情境中的表现,而不是简单地考量成员对学习任务的完成状况[9]。为此,学习共同体绩效评估应聚焦成员的知识应用,而不是成员按照教师的指示在完成学习任务中的简单参与。基于这样的评估原则,教师要制定层递化评估体系,做好评估准备工作。

2.实施环节

(1)提出研究的问题

提出、探寻、解决并评估学习问题是英语课堂学习共同体运行的主线。为此,教师要基于文本学习材料,结合现实生活需要,提出开放性、复杂性和真实性的问题,鼓励学生探究问题,例如,依据Earthquake中的文化背景教学内容,我们提出以下三个问题:①What is earthquake?②How does earthquake happen?③When earthquake happens, what is the best way to keep people safe?

(2)确立学习目标

通过资料搜集、文本阅读与课堂讨论等方法,掌握earthquake的基本概念;通过影视观看、课堂辩论等方法,了解自然灾害尤其是earthquake对人类生命财产的严重危害性;通过理论学习与实践应用,掌握地震发生时的有效逃生策略。

(3)建立学习资源库

学习资源信息库包括地震内涵资源库、地震成因资源库、地震逃生策略资源库。共同体成员分工协作,借助网络、图书馆等渠道,搜集学习资料;通过QQ、微信等平台,创设学习资源信息库。

(4)开展协商对话和反思活动

首先,教师通过以下两种途径营造相对真实的学习情境:陈述对地震的亲身体验;借助教学视频,如2008年四川汶川5·12大地震的真实影像、冯小刚拍摄的《唐山大地震》等。营造相对真实的学习情境旨在为共同体成员将课文学习内容和生活经验有效整合建构一个支撑场域,激活共同体成员的创造性思维,培养他们的语言想象力。然后,师生要开展关联性活动。①自主研读活动。教师将学生分成若干个学习小组,安排研讨问题;各组基于研讨问题,结合搜集到的学习资源,自主研读;撰写研读报告,形成关于地震知识的个人看法。小组开展自主研读时,每个成员要阐明个人看法,评价组员观点,提出难以解决的问题,供小组协同探讨。自主研读活动的开展,旨在形成个人和小组关于地震的初步认知。②集体研读活动。各组向全班同学汇报本组研讨内容和结果;汇报结束后,其他小组提出相关问题和建议;教师再播放影评和视频材料,共同体成员一起观看,适时分析并点评。开展集体研读活动旨在实现集体性知识和个体性知识的有效碰撞、对接和生成。③自我反思和提升活动。各组在完成汇报任务之后,结合其他小组的反馈意见和建议,对小组学习资料的搜集状况、学习过程、课堂汇报进行反思;参考其他小组建议,完善本组学习资源信息库,充实地震知识结构;撰写反思报告,提升对地震知识的理解和认知能力。教师参与到学生的反思活动中去,观察、点拨、评价学生反思过程和结果,旨在实现共同体知识向个体知识有效转化。

3.评估环节

首先,确定学习共同体绩效评估对象为成员评估和共同体评估。成员评估指标包括成员对共同体的学习目标认知度、对学习资料信息库建设的贡献度、对共同体有效运行所提建议的创新性、对地震知识的理解和认知效果,以及在共同体运行中的知识共享性,在解决研究问题中的合作性,语言知识应用的灵活性,学习资料搜集的完整性、新颖性等。共同体评估指标有共同体成员的合作性、默契性、问题解决的高效性,共同体学习资源建设效果,共同体成员知识共享效果,共同体成员交互频率和效果,共同体促进成员理解地震知识的有效性等。其次,通过问卷调查、深度访谈、课堂观察、案例分析等方法搜集资料。最后,借助视频案例分析法和统计分析法分析资料。视频案例分析法用于分析处理课堂视频案例中共同体成员的课堂学习行为;统计分析法用于综合处理定量数据,反映共同体成员关于地震知识的发展状况。

英语课堂学习共同体通过集聚共同体成员智慧、建立学习资源信息库、共享学习智慧和学习资源、合作解决学习问题等手段,能有效实现教学方式从“以教为主”转向“以学为主”,从而促进学生语言知识和语言技能的增值。

参考文献

[1] Boyer E.The Basic School:A Community for Learning.Princeton NJ:the Carnegie Foundation for the Advancement of teaching,1995.

[2] 赵健.学习共同体的构建[M].上海:上海教育出版社,2008.

[3] Watkins,G.Classroom as Learning Communities: A Review of Research [J].London Review of Education,2005a(3).

[4] 钟启泉.教育的挑战[M].上海:华东师范大学出版社,2008.

[5] Liberman.A.&L.Miller.Learning Communities:The Starting Point for Professional Learning is in Schools and in the Classrooms[J].Journal of Staff Development,2011(32).

[6] 赵迎.课堂学习共同体——一种值得大学英语教学借鉴的理论策略[J].山东外语教学,2013(4).

[7] 高文.基于学习创新的课程与教学研究——研究背景、改革理念与研究方法[J].全球教育展望,2008(5).

[8] 王作亮.建构课堂学习共同体,提升师范生实践智慧[J].中国高等教育,2014(10).

[9] Wiggins,G..Assessment:Authenticity,Context,and Validity[J].Phi Delta Kappan.1993(3).

[作者:屈社明(1965-),男,陕西眉县人,宝鸡文理学院外语系教授,硕士。]

学习程序 篇4

Visual Basic是由微软公司推出的一套完整的Windows系统软件开发工具, 可用于开发Windows环境下的各类应用程序, 是一种可视化、真正面向对象、采用事件驱动方式的结构化高级程序设计语言和工具的完美集成。它编程简单、方便、功能强大, 具有与其它语言及环境的良好接口, 不需要编程开发人员具备C/C++或者Turbo Pascal语言知识和特别高深的专业知识, 只要懂得Windows的界面及其基本操作, 就可以迅速上手, 而VB在程序界面设计、多媒体开发方面更是独具优势。因此非常适合像我们职业学校学生这样的初学者来选择学习。

2 学好visual basic的重要性

visual basic作为一种强大的语言, 你所能想到的编程任务, 它基本都能完成。从设计新型的用户界面到利用其它应用程序的对象;从处理文字图象到使用数据库;从开发个人或小组使用的小工具, 到大型企业应用系统, 甚至通过Internet的遍及全球分布式应用程序, 都可在Visual Basic提供的工具中各取所需。作为计算机专业的一名学生, 作为一名编程人员, 学好visual basic, 利用visual basic可以解决在软件使用中所遇到的问题, 改进现有软件, 可以为自己找到一份理想的工作添加重要的砝码, 有利于在求职道路上谋得一个好的职位。学习编程还能锻炼思维, 使我们的逻辑思维更加严密;能够不断享受到创新的乐趣, 将一直有机会走在高科技的前沿, 因为程序设计本身是一种创造性的工作。

3 学好Visual Basic的方法

3.1 注重基本概念的理解

在Visual Basic学习过程中, 我们在看一本程序设计的书时, 看到的无非都是一些变量类型、函数、条件语句、循环语句等概念。对于我们初学者来说一定要深入理解这些概念, 在理解的基础上应用, 只有这样我们才能做到对编程的理解。在教学过程中我非常重视学生对这些基本概念的理解, 在学习数据的类型这节中, 我常举下面的例子来告诉学生理解基本概念的重要性:比如说有两个数据123和456, 如果它们是整型数据类型, 那么在进行“+”操作时结果就是579;但是如果它们是字符串数据类型, 那么在进行“+”操作时结果就是123456, 可见不同类型的数据得到的结果是不同的。显然对于初学者来说对概念的理解是相当重要的, 我们只有把这些基本的概念理解透了, 才能在以后的编程过程中做到举一反三, 触类旁通。

3.2 遇到问题多思考

在学习Visual Basic过程中, 我们会遇到很多的问题, 那么在遇到这些问题时首先想到的不是去问他人, 而是自己先好好想一想, 试着解决这个问题。为什么先要自己想一想呢, 因为当你自己想过好多办法, 解决一个问题, 可能解决的办法并不是最好的办法, 但绝对有利于你自己的提高, 一个人水平的提高主要是通过独立的解决问题来得到的。如果自己最后还是没有解决问题, 但你自己思考过了, 最后别人帮你解决, 你也会想得很深入, 以后再碰到类似的问题, 也就能自己找到方法解决了。比如还是上面的那个问题, 有好多学生会问为什么它们的结果不一样呢?这时候我们就要思考, 结果不同的原因是什么?它们的不同点究竟在什么地方?带着这样的问题, 我们会发现它们惟一区别就是在定义时的数据类型不同, 知道这个不同点后我们就会明白, 数据类型是整型时“+”操作就是执行四则运算的加法操作, 而数据类型是字符串时“+”操作就是执行字符之间的连接操作, 也就是字符串之间“&”操作。这就是我们思考的结果, 以后再遇到这样相同的问题或相似的问题时, 就能很轻松地解决了, 同时也很好地提高了自己的编程水平。

3.3 自己动手编写程序

学好Visual Basic的一个重要方法就是自己动手编写程序, 不管这样的程序是简单的还是复杂的。因此在程序设计入门阶段我们要经常自己动手抄写或编写一些小程序, 亲自动手进行程序设计是创造性思维应用的体现, 是培养逻辑思维的好方法。因此一定要多动手编写程序, 而且要从小程序开发开始, 逐渐提高写程序的能力。Visual Basic的重要特点就是它的可视化, 在教学过程中, 每学习一个知识点我都要求学生自己上机调试运行程序, 看看最终的结果是怎样的一个状态, 是否与自己想象中的结果一样, 从而培养他们的动手能力和养成他们独立完成事件的习惯。在讲课过程中, 在讲到文本框中可以输入密码时, 我跟学生们讲到, 这就相当于我们输入自己银行卡的密码一样, 别人看到的全都是“*”号, 只要自己知道这些“*”号代表什么数字。然后我将前面学习过的按钮事件跟文本框结合起来, 要求学生自己编写一个银行卡的密码程序, 并上机调试运行, 学生在这一过程中既养成了自己动手编写程序的习惯, 又充分理解消化了所学习的知识点, 真是一举两得。

作为一个初学者在掌握了以上几种学习方法后, 一定会对自己今后在编程程序学习方面有很大的帮助。当然学习编程是符合“理论→实践→再理论→再实践”的一个认识过程。一开始要具有一定的计算机理论基础知识, 包括编程所需的数学基础知识, 具备了入门的条件, 就可以开始编程的实践, 从实践中可以发现问题需要加强计算机理论知识的再学习。程序人人皆可编, 但当你发现编到一定程度很难再提高的时候, 就要回头来学习一些计算机科学和数学基础理论。学过之后, 很多以前遇到的问题都会迎刃而解, 使人有豁然开朗之感。因此在学习编程的过程中要不断地针对应用中的困惑和问题深入学习数据结构、算法、计算机原理、编译原理、操作系统原理、软件工程等计算机科学的理论基础和数理逻辑、代数系统、图论、离散数学等数学理论基础知识。这样经过不断的学习, 再努力地实践, 编程水平一定会不断提高到一个新高度。

参考文献

[1]刘钢, 杨崇礼, 等.Visual Basic6.0程序设计实用教程[M].北京:中国民航出版社, 2000.

程序文件学习心得1 篇5

本公司《质量体系程序文件》共有22个控制程序,作为工艺员及理化负责人,主要涉及到其中的12个控制程序,并计划利用3周时间对其进行重点学习。

程序文件就是为了完成管理体系要素所规定的方法,用于支持管理手册的相关要求。通常包括活动的目的和范围,做什么和谁来做;何时、何地以及如何做;应采用什么材料、设备和文件;如何对活动进行控制和记录。其内容是描述实施管理体系要素所涉及到的各职能部门的活动。程序文件详细的规定了公司各个部门的过程职责,并指导各项管理工作的实际运行步骤和方法。

本周重点学习了“文件控制程序”、“顾客提供产品管理程序”、“工艺质量管理程序”和“焊接系统质量管理程序”;对“合同控制程序”和“采购与原材料控制程序”进行了了解性学习。通过一周的程序文件学习,受益非浅。这样的学习很有必要,不但要对程序文件学以致用,更重要的是通过这次学习,让我对自己的岗位过程职责、步骤、方法有了一个新的认识,意识上有了进一步的提高。严格的贯彻执行每个程序要求,必然会使我们的管理水平和产品质量提高一个台阶。

XXX

学习程序 篇6

【关键词】scratch程序设计  程序设计教学  引导式学习单

【中图分类号】G622 【文献标识码】A 【文章编号】2095-3089(2016)35-0228-01

2007年麻省理工科学院实验室推广使用scratch程序的语言,scratch提供了图像和积木拼图操作界面,并结合网络社群功能,以多元想象力,深入的思考性为理论,同时也延续他们之前的产品logo所注重的探索式学习方式,使学生在开放的环境中尽情发挥创意。

一、scratch的介绍

scratch是一种具有导向特性的语言,教师若掌握scratch导向特质,引导学生依据导向分析与设计,逐步独立设计。在教学过程中,要求学生重点关注有助于提升学习效率而易被忽视的重要步骤。例如程序完成之后的反思。因此scratch教学适用于引导式教学,将教学策略可以延伸至非程序式语言,本文将讨论引导式学习策略,适用于小学程序设计教学的重要性。

在教学中我们常发现,学生因为无法构思出问题解决的方法而陷入困境。如果在问题解决的过程中适当给予学生提示,有的学者认为采用老师提问学生回答的方式,让学生通过回答老师问题的过程增加理解层次,使学生能反省自己的策略。台湾地区的学者吕俊龙和康景成两位教授分别针对logo语言以及KPL语言进行引导式教学的研究,均发现学生在学习效果中有显著提升。

二、scratch的核心教学目标和策略

由于scratch是具有搭建特质的程序语言,因此若将引导式程序分析和设计方法应用于教学,能让学生更快地掌握这种语言的设计方式。

而程序设计课程的核心教学目标是:1.学生理解教学问题的内容。2.能独立构思解决问题的方法。3.使用正确的程序来完成目标。

而课堂中的教学过程应结合以下的策略:1.当学生遭遇困难时,适时引导以避免学生陷入放弃以及胡乱尝试的情况。2.在编写程序前明确引导学生理解意义,并且具体构思程序的编写方式。3.通过作业或测试方式给予学生充分的练习,进一步让学生掌握正确的概念使用方法。

三、针对教学目标老师开展教学的方法

第一,由浅入深的进度。在前期课程让学生先学习规划程序的能力,并在课程后期逐渐增加案例中角色之间的互动,并且在每一个新知识点讲授完成后搭配对应的测验,加深学生的理解,提高学习效率。第二,掌握scratch的导向特质,在课堂讲解和课例制作时,参与导向程序分析与设计,系统地引导学生逐步进行制作,帮助学生理解正确的制作流程,同时加强学生观察分析案例的能力,并且在教学过程中使学生体会导向分析的设计思维。

四、小学阶段学习scratch程序设计应用引导式学习单的作用

第一,引導式学习单有助于培养学生观察分析程序的能力,使用引导式学习单的班级,在笔试测验中的表现优于传统教学的班级,应用引导式学习单的班级着重学生观察、分析程序的能力。因而可以探究学习单中的问题,而且能较深入地观察、分析程序编码方式。并将此能力迁移到纸质测验中,从而使两组不同的班级在测验中表现出较大的差异。第二,引导式学习单有助于培养学生的程序编写能力,在难度较高的实例中效果更明显。在简单的程序中,两组学生表现差异较小,但当难度提高后,应用学习单的学生实际表现均优于传统教学班级,可见学习单引导式学习确实能增进学生的程序编写能力。

五、使用引导式学习单开展教学时应注意的方式

(一)在课堂教学中引进学习单,促进以学生为中心的学习方式。引导式学习单,让学生通过预设问题思考和探究的方式,深入课堂教学内容,达到提高学习效果的目的。因此,在小学阶段,教师应针对课程内容设计合适的学习单。使学生通过学习单开展自主学习,深入理解学习内容。

(二)scratch程序设计有助于培养学生高阶思维能力,许多学校都在高年级开展了scratch的教学,但是由于程序设计课程难度较高,许多学生出现学习困难的情况。而引导式学习单的应用,能让学生更容易理解多个角色之间的互动关系,理清思路,设计出正确的程序。

我认为只要教材难易适中,并结合有效的教学方式,学生就会喜欢scratch程序设计课程,而在教学过程中应用引导式学习单,会使学生更加容易理解程序的难点和关键点,让他们取得良好的学习效果,创作出风格迥异的作品,真正提升他们的信息素养。

参考文献:

[1]施渭妃.“三本教学法”的有效应用[J].新课程(综合版),2011.07.

[2]覃海慧.冯旭初和他的“四合一”教学法[J].黄金时代(学生族),2007,12.

[3]魏焕萍,单娜娜,刘静,单云官.关于用PBL教学法需注意的几个问题[A].全国学术会议论文集[C],2007.

作者简介:

学习程序 篇7

Android是由Google研发的一种基于Linux的自由及开放源代码的操作系统, 主要使用于便携设备, 如智能手机和平板电脑。2005年由Google组建开放手机联盟, 2011年第一季度, Android在全球的市场份额首次超过塞班系统, 跃居全球第一。2012年7月数据, Android占据全球智能手机操作系统市场59%的份额, 中国市场占有率为76.7%。Android操作系统的普及和推广, 激发了一大批基于Android应用程序的出现, Android程序开发逐渐成为一个新的热门方向。传统的程序设计学习方法是在教室, 机房等室内环境下进行的, 受多种环境设备因素的限制。几年来, 随着互联网、移动设备的迅速发展, 出现了“移动学习”的概念。2000年开始, 美国加州大学伯克利分校人机交互研究室启动了“Mobile Education”项目, 移动学习 (M-Learning) 的概念开始引起研究人员的广泛关注。将Android程序开发与移动学习的概念结合, 本文提出了“Android程序开发学习平台”模型, 为程序开发爱好者提供了一种学习Android程序开发的新方式, 可以通过手机随时随地学习, 摆脱了受时间、地点、环境等因素影响的传统学习方式的弊端, 具有良好的实用性和创新性。

2 系统设计

平台分为手机端和服务器端, 手机端用于用户日常学习, 服务器端提供课程资源。手机端分五个功能模块:多媒体课件、实验指导、作品赏析、开发案例和视频教学, 适用于Android2.2以上版本的智能手机, 安装软件的同时, 将软件资源库Resources文件夹放入SD卡 (sdcard) 根目录下。软件资源库中的各类资源可以在服务器端提供的资源库网站中下载 (见图1) 。

2.1 多媒体课件模块主要功能是利用手机显示移动程序开发的多媒体课件。

点击主界面进入显示PPT窗口。在展示演示文档时, 提供以下功能:载入:通过点击“载入”按钮将手机SD卡PPT目录下选择的演示文稿载入到屏幕中。上一张 (下一张) :以当前幻灯片为基准, 前后切换。画图:利用画图功能, 在学习的同时可以在当前的幻灯片上做相应标记。重写:点击键盘中的菜单按钮, 系统会提供重写功能, 此时, 之前在幻灯片上所做的一切标识将被删除。撤销:点击键盘中的菜单按钮, 系统会提供撤销功能, 撤销之前最后一次所做的标识。画笔颜色:点击键盘中的菜单按钮, 系统会提供选择画笔颜色的功能, 提供了三种可供选择的颜色, 以方便区分。画笔宽度:点击键盘中的菜单按钮, 系统会提供选择画笔宽度的功能, 针对不同的文字大小可以选择不同粗细的画笔。备忘录:点击键盘中的菜单按钮, 系统会提供备忘录功能, 如想要对所学内容做笔记, 则可以选择备忘录, 此功能新建一个TXT文档供用户记录大篇幅的文字。

2.2 实验指导模块主要功能是供用户浏览查看Word格式的实验文档。

点击主界面进入实验文档查看窗口。可以用右下角的放大缩小按钮改变文档的显示效果, 也可以通过滑动屏幕移动文档。在使用时先将要显示的试验文件 (doc类型) 放到Resources/DOC文件夹内。

2.3 作品赏析模块主要功能是供用户查看程序开发作品。

通过作品赏析模块可直接进入Android程序的运行。操作时先将要显示的作品工程文件放到Resources/Show文件夹内, 然后将文件夹内的APK文件安装到手机上, 即可在程序中运行。

2.4 开发案例模块主要功能是为用户以树形结构的形式展示开发程序的源代码。

用户可通过此模块查看一个完整的Android程序开发案例的所有文件夹结构以及文件内容。将要显示的Android开发案例的工程文件夹放到Resources/Show文件夹内, 选中要打开的文件, 点击菜单选项打开文件。

2.5 视频教学模块主要功能是播放教学视频。

选中教学视频文件后, 点击菜单按钮, 则屏幕下方出现“装载”, “播放”, “暂停”三个按钮。点击“装载”按钮加载视频文件→点击“播放”按钮即可播放教学视频。需要将要播放的教学视频文件先放到Resources/Movie文件夹内, 播放的教学视频文件格式为MP4。

2.6 为方便用户使用该软件进行学习以及资源更新, 该平台同时设计

了服务器端的资源库网站, 作为手机端软件的后台支持, 提供了大量的课件、实验、教学视频、电子文档等资源, 可供用户下载至手机中进行学习。资源库的内容将随着课程内容的扩充不断更新。资源库分为七大模块:课程概况、多媒体课件、实验指导、教学视频、资源下载、参考资料和发展前沿。课程概况下设四个资源类别:课程简介、授课计划、教学大纲和相关链接。多媒体课件包括授课过程中使用的电子教案。实验指导根据课程特点设计了若干上机实验指导, 供学生实际动手操作练习。教学视频提供学生更直观生动的学习方式, 设计了相关的教学视频, 供学生课后巩固复习。资源下载包含作品赏析、安装程序和开发案例几个部分。作品赏析搜集了历届google举办的Android大学生程序开发挑战赛的优秀作品, 供学生参考。安装程序中列出了学习开发Android程序所需的一些列软件。开发案例提供了完整的程序源代码。参考资料提供一系列有关移动平台程序设计开发的参考书。另外, 还包括电子学习文档。发展前沿包含了移动程序设计和智能手机领域的前沿观点和展望。

3 特色与总结

3.1 新的学习方式。

为Android程序开发提供了移动学习的新方式, 摆脱受时间、地点、环境等因素影响的传统学习方式的弊端。

3.2 操作性强。

只要是安装了Android操作系统的移动设备, 既可以使用该平台。

3.3 教学资源多样性。

平台提供了与Android程序开发相关的多媒体课件、实验指导、教学视频、作品赏析、案例分析几种不同形式的教学资源。通过多媒体课件学习理论知识→实验指导练习动手实践→教学视频针对Android开发的专项问题详细讲解→作品赏析提供优秀的Android平台软件开发的作品供学习者参考借鉴→案例分析模块提供了完整案例的全部开发源代码。内容丰富, 循序渐进。

3.4 可扩展性。

平台是针对Android程序开发设计的, 但其中的多媒体课件、实验指导、教学视频、案例分析等模块也可用作其他课程的教学使用, 只需将不同的资源文件放到相应的目录下即可。

摘要:移动通信技术及移动终端设备的发展使移动学习的普遍使用成为可能, 同时Android操作系统近年来的发展也为程序开发人员提供了新的发展方向。“Android程序开发学习平台”是运行在Android操作系统手机上的一款软件, 为Android程序开发爱好者提供了一种新型的学习Android程序开发的方式, 可以通过手机随时随地进行学习, 摆脱了受时间、地点、环境等因素影响的传统学习方式的弊端。经适当扩展, 平台也可应用到其他课程的学习中, 具有良好的实用性、创新性和扩展性。

计算机程序设计学习的三重境界 篇8

●第一境界:望尽天涯路

第一境界从跨越“循环结构”这道坎开始。

1.知识内在规律与教学策略

程序基本语言的学习如履平地, 初学者一般感觉相当轻松, 他们遇到的第一道难过的坎是循环结构的学习。通常这部分学习有三个难点要关注。

第一个难点是初学者对计数器、累加器等包含迭代思想的语句的理解。教师要有足够的估计和应对的预案, 选好例题, 并设计多种变式练习进行训练, 如下例:

s=1+2+3+……+100

变式训练:

S=2+4+6+……+100

S=1+1/2+1/3+……+1/100

第二个难点是学生难以理解循环的三种结构 (FOR循环、While循环、Repeat循环) 的区别和联系, 以致影响灵活运用。这个难点的突破可以从最简单的问题入手。例如, S=1+2+3+……+100, 尝试用三种不同语句完成, 便于比较三种循环语句的联系和区别, 加上一定的变式训练, 教师可以帮助学生轻松地突破这个难点。

第三个难点是初学者对多重循环的理解有困难。要解决第三个难点, 需要设置有梯度的问题, 同时这些问题有内部关联。可以从打印一个“*”到打印一行“*”, 再到打印多行“*”, 帮助学生理解二重循环的行、列对应关系, 关于后面二维数组的数组元素读写存储等操作, 也很容易理解。多重循环的本质理解了, 学生再学习多维数组就轻松多了, 排序算法也就迎刃而解了。

2.第一境界

程序设计学习过程中第一道分水岭是循环结构, 有相当一批学生在循环结构这部分败下阵来。循环结构的理解也是学好数组部分的关键。对于有1~2年左右学习计算机经历的初中以下学生来说, 能熟练地使用数组来解决问题是未来晋级的基础。因此, 循环部分的教与学很重要。跨过“循环结构”这道坎, 程序设计的学习进入第一境界——“望尽天涯路”。对初学者, 教师要关注这个坎, 同时也要培养学生养成规范、严谨、细致的思维习惯和编程习惯, 包括良好程序书写习惯, 为后续学习做好先期的准备。

●第二境界:为伊消得人憔悴

第二境界从突破“过程与函数”这道坎开始。

1.知识内在规律与教学策略

选择函数还是过程?遇到多个数值需要传递, 应该如何选择呢?如何正确地书写参数, 过程调用时遇到数字调用返回时如何设计参数等, 都是这部分学习的重点和难点。函数、过程本身蕴含的数学思想, 数和过程的编写, 函数和过程两类子程序之间的区别、全局变量、局部变量的概念, 结合对过去知识的回望, 可以逐步将这些思想和概念落实到平时的程序设计训练中去。同时, “函数与过程”也直接指向下一道坎——递归, 递归本身也是特殊的过程与函数的调用。因此这部分的学习, 能够帮助学生形成正确的知识图谱。这要求教师有足够的预案, 还应对栈、队列、链表等后期的知识有足够的了解, 能够适当地进行知识扩展。

2.第二境界

从接触线性表, 学生慢慢地体会到程序中每个数据不是孤立的点, 数据之间的逻辑关系、物理关系让他们从崭新的视角看到了程序设计中数据结构设计的“风景”。

过程与函数, 将给学生打开一扇崭新的窗。结构化程序设计思想所蕴含的丰富哲理, 不仅能够帮助学生更好地分析问题、解决问题, 还可以让学生收获一生受益的思维习惯。“过程与函数”学习的意义首先在于, 我们面对一个问题, 无论其复杂、简单, 要有规划的意识, 要有全局的观念, 学会从全局着手考虑问题、分析问题, 构建数学模型, 再将大问题分解为小问题。其次, 要让学生体会程序设计模块化思想的意义, 自上而下, 将大问题分解为若干小问题, 由小问题逐步求精的模块化思想将使我们要解决的问题、要书写的程序更有条理、更清晰。这部分的学习将进一步让学生体会“全局与局部”之间的调用关系, 让后期算法的实施、程序的编写到程序的调式变得更有针对性。

过了这道坎, 程序之美会一点一点打动学生, 不久他们会达到“衣带渐宽不悔, 为伊消得人憔悴”的境界。无论教师还是学生都要关注这部分知识的学习。

●第三境界:那人却在灯火阑珊处

第三境界, 从越过“递归”这道坎开始。

1.知识内在规律与教学策略

从简单的最大公约数、费波拉契数列问题开始, 引导学生理解递归就是自己直接或间接调用自己的函数或过程。“Hanoi”问题最能体现递归的优点, 程序简洁漂亮, 教师可以进一步剖析递归自己调用自己过程中参数传递的情况, 帮助学生理解系统栈在调用过程中的原理和调用过程中间变量的存储情况。当学生面对“Hanoi”优美的代码发自内心感叹并真正理解递归的优点时, 喜悦在他们的心底定然能够绽放出花朵, 程序设计的学习将进入新的天地。

从递归到栈、递推、回溯、深度优先算法、广度优先算法……一扇一扇新的大门次第打开!接着有贪心算法、回溯算法, 还有动态规划……不断地向前走, 我们会遇到很多新的东西, 树、图可以帮助我们设计出更有创意的数据结构, 使我们更灵活地实现算法, 写出漂亮的代码。

这部分的学习并不轻松, 但是只有越过递归这道坎, 我们才有可能看到无限风光。从递归开始, 教师还要帮助学生弄清楚递归与递推及它们之间的联系, 然后是递归、栈、递归与回溯算法, 再到队列、搜索, 接下来我们理解树、图的作用也就不难了。从点到面, 从面到图, 直到知识结构趋于完整。

2.第三境界

跨过递归是学生程序设计学习入道的标志。此时, 教师可以放手, 让学生自己走, 培养他们的自主学习能力, 不断地挑战自己, 一题多解, 关注知识之间的内在联系。再过一段时间, 可以参与网络做题、网络测试。

另外, 这个阶段教师一定不能忽视团队的管理和建设, 定期实战训练, 适时组织头脑风暴式的讨论课, 鼓励学生思考, 学会表达和沟通, 最终让学生明白团队和个人的关系, 懂得感恩、懂得珍惜、懂得宽容、懂得欣赏、懂得世界任何一个人都不可能是完美的, 但我们可以打造一个完美的团队, 完美的团队会是一个人成长的沃土。

至此, “众里寻他千百度, 蓦然回首, 那人却在灯火阑珊处。”第三境界拉开帷幕……

程序设计的学习和游戏闯关一样, 有的人, 只能越过第一关;有的人, 可以越过第二关;只有很少的人, 能够到达高山之巅, 看尽无限风光……一个真正能够站在巅峰的人, 一定不是源自对名利的追逐, 而是源自内心对程序设计的热爱。真正到达顶峰的人, 收获的不仅是程序设计的基础知识和技能, 更有规划的能力、创新的精神、团队协作的意识、懂得感恩、热爱生活等魅力人格。这也是全人视野下的程序设计教育教学追求。

学习程序 篇9

1大学体育健美操课程教学概述

健美操是在音乐伴奏下,以身体练习为基本手段,以有氧运动为基础,达到增进健康、塑造形体和娱乐目的的一项体育运动。它的动作简单易学,适合不同年龄段的人群进行健身锻炼,同时还具有很强的艺术性,易于吸引广大群众走向操场、走进大自然,积极参加体育锻炼。但因为受应试教育的影响,中学对健美操运动大多不够重视,导致中学开课率比较低。而中学生这个年龄阶段的学生都处于长身体和塑造形体的黄金时期,学习健美操不仅可以增强体质、增进健康、塑造形体、娱乐身心和培养学生良好的道德情操,同时也可以让中学体育课变得更加丰富多彩。音乐的表现能力是在听到音乐后所产生的意识动作及反映能力,而健美操练习者的表现能力同音乐感受能力是息息相关的。人面部的口、鼻、耳、眼周围都分布着表情肌,而表情肌的运动变化是构成喜怒哀乐等面部表现的重要因素。健美操的表情主要通过参与健美操训练时的情绪来体现,表现出对动作的想象、对音乐的领会和自信的流露。增强表现力的重要途径是练习者完成动作的身体姿态,通过身体姿态能够反映练习者的内心世界。而健美操训练旨在通过身体动作,展现优美身体动作的同时,利用身体姿态来进行展现,从而通过协助自我暗示,提高表现力。良好的表现力是形成一个人气质风度的重要原因,而健美操以自身独特的魅力,吸引练习者克服自身困难,磨练意志,参与长期的锻炼逐步提高自身自制性、果断性和自觉性。

2目前健美操教学中存在的问题

2 . 1教材以及教学内容存在一定的问题

我国大学体育教学中,部分学校并未采用专门的健美操教材,对教学内容的选择也存在较大的随意性和自主性。部分教师仅仅是结合本校的教学特点,采用查阅资料和书籍来选择教学内容。对于健美操课程而言,其开展形式是多种多样的,可以涵盖和包括普拉提、瑜伽、街舞、搏击操和有氧操等。实际看来,我国绝大多数大学健美操教学中,通常是以有氧操为主,选择的教学内容多以大众健美操一级至三级作为主要内容。教学过程中需要重复练习,动作较为单一,缺乏美观性和新颖性,缺乏吸引力。

2 . 2师资队伍有待加强、教学条件有待改善

部分大学健美操教师并非是健美操专业出身,多半为“现学现卖”,通常由体育教师直接负责。教师专业技能水平不高,缺乏理论基础知识,自身水平不高,同时缺乏参与进修和学习的机会,再加上学校领导对教师在职继续教育的重视度不够,导致健美操教学效果不佳。学校对健美操教学所投入的资金不足,开展健美操教学时通常在室外进行,而训练场的噪音较大,学生无法集中精力听讲。部分学校没有设置专门的健身房,教学中在坚硬的水泥地板上进行,缺乏练习镜、把杆、地毯等辅助练习设备,对教师和学生身体造成损伤,不利于健美操教学的顺利开展。

2 . 3教学方法和评价存在问题

大学健美操教学过程中,通常采用传统的教学手段和方法,采用教师讲解、动作示范和学生练习的教学模式。教学中未采用现代先进教学手段和教学方法,导致教学效果无法达到预期标准。教学评价方法是影响学生学习积极性的重要因素,教师为合理开展教学评价,未紧密围绕教学内容开展教学评价,导致无法准确表述学生练习中存在的问题,不利于学生综合能力的提高。教师过分注重终结性评价和对学生个人能力评价,忽略过程评价,对学生学习状况未深入了解,导致评价不科学,对学生学习积极性造成影响。

3构建“程序—合作学习”教学模式策略

3 . 1合理地选择教学内容是关键

针对艺术生的特点,增加其他艺术形式,将街舞、搏击操等时尚健身操引入健美操教学中为了更好地提高学生对健美操的兴趣,在教学中有意地穿插街舞、搏击操、拉丁舞等时尚运动,增加了学生学习的兴趣,又达到健身的目的,提高了教学质量。比如艺术形体就是可以增加的较为合适的艺术元素及教学内容,形体课是以创造形体美为目的的身体活动,通过练习塑造出优美、健美的体态,从而提高练习者的美感、韵律感,对于具有丰富的想象力和表现力的大学生而言锻炼价值极佳。特别是大学女生,正处于身体发育的最后阶段,雌激素分泌增加,此阶段的女生自尊心强,爱美心切并且希望拥有优美的体型,因此增加形体训练正是迎合了女生的生理和心理需求。形体训练还具有一定的强度,使大学生在体型、形态、姿态上得到改善,从而为健美操工作更好的掌握也提供良好基础,更重要的是能够更好的贴合艺术生有一定专业基础的特点。

3 . 2树立终身体育运动的观念

终身体育的观念主要包括终身从事体育运动的兴趣、意识、习惯和能力,让学生就业后,仍然能够自觉地进行科学的体育锻炼。健美操是大众比较喜爱的体育运动项目。当一个人对某项活动产生了兴趣,并且形成相对稳定的心理倾向,就能充分调动主观能动性,执著地去追求,这对习惯的形成是至关重要的。健美操运动能给人带来欢乐与愉悦的体验,人们在追求健康、健美的过程中,身体上、心理上、情绪上都得到充分的满足,从而能够变被动运动为主动运动,体验成功感,从而实现终身体育运动的观念。

3 . 3全身性与局部性热身相结合

健美操是一种有氧代谢运动,一般一套简单的健美操时间大概在4-5分钟,通过强度适中的身体练习,对身体各关节、韧带、各主要肌群和内脏器官施加合理的运动负荷,从而有效地提高心血管、呼吸系统等内脏器官的机能,发展力量、灵敏、柔韧等运动素质,增强体质,促进小学生良好的生长发育。比如,体操技巧类的课,就要全身性的热身;球类课也需要全身性的热身练习,这样才能预防运动伤害的发生。可以用球来做道具,进行球操的练习,做到一材多用。而且学生感兴趣,课堂气氛活跃,这样的热身运动屡试不爽。还可以针对上课的内容进行局部热身。比如,投掷类的课,可以重点拉伸肩关节和腰部肌肉,多做上肢轮臂和转腰扭跨动作;跳远课,可以重点拉伸腿部肌肉,膝关节蹲起,踝关节提踵等练习等等。

3 . 4动作与音乐相结合

音乐与健美操有着十分密切的联系。音乐是健美操的灵魂,音乐能烘托健美操的气氛,表现健美操的特点,二者紧密结合,不仅能增强健美操的感染力,而且还能使人得到健与美的享受。旋律优美、节奏感强的音乐,有助于练习者牢固地记忆动作顺序和掌握动作;而欢快、热烈、富有节奏的音乐,能有效地激发练习者的积极性和热情,使练习者闻声自娱,欲动不止。音乐不仅能够培养练习者的节奏感和动作的协调性,而且也是激发练习者情绪,启发和帮助练习者更有效地进行训练的一种手段。

3 . 5构建良好师生关系

在传统教学过程中,为了确保教学效果的实现,教师通常都是板着面孔进行教学,通过示范、指导动作等程序进行教学,导致学生学习积极性下降,学习效率不高,教学效果无法得到保证。教师的表情比较严肃,导致学生容易紧张,产生害怕情绪,在健美操课程中容易出现反应迟钝、动作僵硬、精神紧张等现象,导致无法高效参与课程教学中。通过构建“程序-合作学习”的教学模式,让教师在音乐中立于肢体语言来进行表现,动作语言表现力较强,容易对学生产生较大的情感影响。教学过程中,教师和学生在音乐中一起运动,通过构建良好的师生关系,让课堂气氛活跃起来,从而开展双向教育活动,达到教学目标。

4结语

在大学体育健美操教学过程中,构建“程序—合作学习”的教学模式,能够有效避免传统教学弊病,有利于提高学生学习积极性,能够确保教学效果的提高。传统教学模式已经无法适应现代社会体育教学的需要,要从社会发展及课程改革方面入手,寻求适合当代大学体育健美操实际需要的教学模式。通过构建“程序-合作学习”的教学模式,合理选择教学内容,构建良好师生关系,加强运动同身体的结合,改进教学方法,科学开展教学评价,从而促使大学生健美操教学质量的提高。

摘要:大学体育课程教学中,健美操课程属于重要组成部分。健美操对于大学生形体训练具有重要作用。健美操课程教学中,教学模式的选择对于教学效果具有重要影响。传统的教学模式无法适应时代发展需求,迫切需要对教育模式和教学体制进行改革。通过构建“程序—合作学习”的教学模式,将程序教学和合作学习紧密联合起来,有利于教学目标的实现,促进教学效果的达标。构建“程序-合作学习”模式对于提高当代大学健美操教学质量具有重要意义。该文对大学体育健美操课程“程序—合作学习”教学模式的构建进行探讨。

学习程序 篇10

我国几十年的教学成绩和国内外的实验结果, 证明了程序设计学习对于提高学生的逻辑思维能力、规划能力、分析和解决问题的能力都非常有帮助。中小学教学的目标是让学生学习程序设计的思想。在中学信息技术学科的学习过程中涉及到程序设计的部分有:初中第二册第2章“程序设计初步”, 高一必修模块第三章第二节“信息的编程加工”, 高二选修模块《算法与程序设计》, 此外一些课外活动如信息学奥林匹克竞赛也有系统的程序设计学习内容。

对于程序设计这部分的内容, 师生们普遍认为太深了、太难了, 究其原因有:一是信息技术的课时少且间隔较长, 而程序设计又是具有连贯性的课程内容;二是学习内容较抽象, 学生觉得枯燥且不易理解;三是学生认为学习程序设计不实用;四是学生编程时容易出错, 一旦出错就可能导致程序不能运行, 打击学习积极性;五是学生合作讨论不足, 受座位约束较大;六是教师评价更注重结果。

如果教师不想办法改变教学的方法和思路, 师生认为“难”的想法不会得到改变。为了提高程序设计教学的有效性, 笔者认真钻研方法和思考策略以改变现状, 在实践过程中运用网络学习社区以探索改进的学习方式和教学模式。

网络学习社区是以建构主义理论为基础的。由于网络学习的发展, 网络学习社区 (Networked/On-line learning communities) 逐渐引起了教育者们的重视, 加之互联网在家庭和学校的普及, 网络学习社区的发展非常迅速[1]。网络学习社区要充分展现课程内容的系统性、内在联系和完整性, 设计制作应该有利于学生理解。当前搭建网络学习社区的平台有很多, 例如E-Class、Blackboard、Web CT、Moodle等。笔者采用的是二次开发和设计的基于Moodle的网络学习社区, 主要模块有系统管理模块、学生管理模块、课程资源模块、活动任务模块、讨论模块、作业提交与评价模块、测验模块等。

二、研究方法

为了用好网络学习社区开展教学, 新注册的学生要进行的一些必要的培训。通过培训, 学生在一定程度上适应网络学习社区的环境, 掌握下载学习资源、开展网上讨论、接受在线指导、提交作业、测验等操作技能。

本研究通过对比研究实验班和对照班的高中学生两年学习程序设计的差异, 探讨使用网络学习社区对程序设计教学的改进。在进行研究的过程中笔者采用了理论研究、调查研究和比较研究相结合的方法。研究初期笔者搜集和阅读了大量关于网络学习社区、建构主义学习理论以及程序设计教学理论的有关文献和书籍, 同时访问浏览了大量的网络学习社区, 对它们进行调研分析后认为网络学习社区对程序设计教学效果有改进。

笔者选择了广州市铁一中学2010届高中学生为研究对象, 学生人数为570人, 高二选修模块皆为《算法与程序设计》。笔者跟踪学生进行程序设计学习历时两年, 将学生分为两组:实验班和对照班。其中1、3、5、7、9、11班为实验班 (314人) , 在程序设计教学中使用网络学习社区来开展学习;2、4、6、8、10班为对照班 (256人) , 沿用之前的方法来进行教学。

为了研究的准确性, 在研究初期, 在实验班和对照班中做了调查, 问卷由25个问题构成, 主要询问了学生对程序的认识、学习编程的基础等问题, 得到的统计数据显示实验班和对照班的学生学习程序设计的平均起点大致是相同的。经统计后得到如下表1所示数据, 实验班和对照班的回答选项所占比例是很接近的。

三、网络学习社区对程序设计教学的改进

1. 改进调查方式, 搞好课前侦察

问卷调查让教师更好掌握学情, 使教学有的放矢, 大部分教师都采用问卷调查的方式来辅助教学。传统教学教师只能采用纸质的方法来进行调查, 学生人数多的情况下此种方式统计起来非常费时麻烦。

教师通过网络学习社区中的问卷调查功能, 可以迅速便捷地统计调查数据并分析, 从而了解学生的基本情况, 以便更好地安排教学内容和设计教学。在教学中展开问卷调查, 是一个简单易行且行之有效的办法。

2. 设计学习活动, 激发自主探究

教师要改善学生对抽象理论知识的学习兴趣, 可以在网络学习社区中设计难度适中的学习活动, 让学生通过实际操作去探究和领悟概念, 这比教师用强加或灌输的方式更让学生印象深刻。建构主义正是要求学生身体力行去体验和感受。设计时教师要遵循学生的认知规律, 由浅入深、由表及里、由简入繁、循序渐进, 使学习活动呈阶梯式相互依存且层层推进, 从而激发学生自主探究和举一反三的能力, 真正达到让学生建构知识的目的。

但是也需注意, 并不是所有学习活动都适合在网络学习社区中进行, 教师在设计时要考虑好这一点。开放性的、真实性的、复杂性的、趣味性的学习活动可以促进学生之间的协作与交流, 应尽量设计这一类的学习活动, 促使学生积极参与[3]。

3. 多样化课堂活动, 提高课堂实效

(1) 浏览回顾旧知, 巩固学习知识

信息技术课一般周课时只有一节或两节, 根据艾宾浩斯遗忘规律, 不及时复习和强化的知识会慢慢遗忘。网络学习社区可以很方便地把课堂教学过程“存储”起来, 学生课后在家中或者下节课上课前, 都可进入网络学习社区回顾旧知, 巩固学习。网络学习社区使程序设计学习突破了“时空”的限制。

(2) 创设生活情境, 感受实用编程

建构主义认为:知识不是通过教师的传授获得, 而学习者在一定的情境下, 借助教师和学习组织的帮助, 借助必要的学习媒体, 通过意义建构的方式获得[4]。程序设计教学可以在网络学习社区下创设与学生生活或其他学科紧密相联的情境, 从学生的生活经验和已有学科知识出发, 感受编程序的实用。

例如, 学生在生活中做过不少心理测试题, 在学习“分支结构”时, 笔者在网络学习社区中添加了一个用VB程序完成的“心理测试小软件”。学生选择不同的答案, 小软件就会给出不同的心理分析结果。当同学们玩得起劲的时候, 笔者随即提出问题:“同学们, 我们现在玩的就是用程序编写的, 你也能完成一个吗?”学生打开网络学习社区选择自己喜欢的心理测试题资源, 跃跃欲试。

例如:学生在数学课程上学习了求一元二次方程的方法, 笔者在网络学习社区中添加了一个用VB程序编写的“求一元二次方程根的小软件”。学生输入a, b, c的系数, 程序给出答案。学生们一边尝试一边开玩笑说解数学题就方便了。

网络学习社区使教师创设情境时有更大的发挥空间, 让学生认识到学习程序设计知识对解决生活和学习中碰到的实际问题有很大的帮助, 亲身感受到学习程序设计非常有用, 转变“编程无用”的观点, 从而产生学习程序设计的需求情感, 被激发出强烈的学习动力, 学习不觉得枯燥。

(3) 化抽象为具体, 演示突破难点

学习难点是从学生角度来审视程序设计的学习过程。特别对于一些抽象的程序设计规则的学习, 教师既要从程序设计规则的严谨性和科学性, 又要从学生的年龄特点和心理规律来考虑如何突破难点。教师运用网络学习社区往往能找到突破学习难点的途径。

例如, 在学习冒泡排序法时, 理解排序的执行过程是本节课的学习难点。为了学生能理解执行过程从而掌握排序算法思想, 针对不同学生的思维方式和过程差异, 笔者制作了一个冒泡排序法的Flash交互动画添置到网络学习社区中, 让学生通过输入几个实例亲身观察体验, 满足学生不同的探究需求。通过动态演示模拟冒泡排序的过程, 应用多种实例使抽象概念具体化, 使学生通过形象直观的演示加深学生对此排序法的理解。

在上述案例中, 教师把相关难点设计成交互动态的对应演示课件或者动画, 然后再放在网络学习社区中供学生探究, 营造出一个图文并茂、生动直观的教学环境, 把抽象的问题直观化, 突破了学习难点。

(4) 分组讨论协作, 营造合作氛围

建构主义强调学生之间的协作, “人人都要学习, 人人皆可为师”。在网络学习社区下进行分组讨论协作有四个好处:一是在网络学习社区中可突破空间的限制, 分组将不再受座位距离的限制, 教师可针对学生的情况进行更合理的分组;二是学生在检查其他小组成员错误的过程中提高了自身的能力, 并在帮助同学的过程中收获了满足感, 被帮助的同学解决问题后有利于建立积极的情绪, 并促使其主动反思;三是营造了良好的合作氛围, 师生、学生之间的关系变得更紧密和融洽;四是能有效缓解教师“满堂跑”的压力, 腾出时间有侧重地对课堂疑难或重点问题进行关注, 使课堂能有序推进。

例如, 在学习分支结构的时候, 笔者发布了一个在线讨论的话题:“由键盘输入三个整数, 如何编写程序才能输出其中最大的数?”学生通过密码进入自己的小组中学习, 并以帖子的形式进行在线讨论。假设有位学生在进行练习的时候出现了一些编译错误, 此时他可以通过发表主题帖来寻找帮助, 小组成员可通过回帖的形式来帮忙。对于很难检查出来的错误, 由小组的其他成员来检查往往能起到“旁观者清”的效果。教师可以随时查看学生的讨论情况, 发现学生普遍存在的问题或困难进行集中讲解。

在讨论协作过程前教师要与学生“约法三章”, 并注意引导学生不要偏离主题, 提醒学生注意帖子的质量。教师担当学生学习组织者的角色尤为关键和重要, 因为只有有效监督和引导, 才能保证课堂正常开展, 不至于变得不可控制。

(5) 照顾个性差异, 满足不同需求

“世界上没有完全相同的两片树叶。”网络学习社区能照顾个性差异, 为个性化教学创造物质条件, 在单位时间内满足不同学生的不同需求。传统的课堂教学难以达到这个目的, 因为事实上, 教师是以全班学生的平均水平来确定教学起点的。平均水平是一个理论假设, 也许在全班也找不到一个处于平均水平的学生。网络学习社区中的学习能够很好地解决这个问题, 因为它是在特定学习目标导向下的自主学习, 能够较理想地实施“因材施教”[5]。学生根据自身基础, 选择所要学习的内容, 选择适合自己的内容和练习形式。

4. 提高测评效率, 检验学习效果

(1) 测验

测验帮助教师评估教学成效, 检查学生对知识点的理解程度。但是频繁的测验耗费了教师大量的改卷和统计时间。教师通过使用网络学习社区的测验模块, 可以大大提高测验的有效性。教师在网络学习社区上预先设计测验题, 学生登陆在线完成, 由系统自动评分, 且学生马上得到反馈。网络学习社区大都提供了跟踪测验者并提供分析的功能, 此外还能显示统计资料以及对这些结果的分析。教师通过分析数据, 发现问题, 及时调控好教学, 重点讲解学生易出错的知识点。

(2) 评价

程序设计的特点是一旦出一点小错就导致程序运行不了或运行错误。如果教师仅仅评价结果而不重视学习过程, 这对学生来说是很受打击的。而网络学习社区的出现, 帮助教师改进了评价的方式, 使得形成性评价能更好的进行。教师通过网络学习社区作为学生学习情况的电子档案, 对学生进行形成性评价, 作为反馈学生的学习情况的整理。

具体做法如下:学生在网络学习社区中除了提交作业, 还可发帖子提问、回帖发表见解, 这些都反映出学生在学习过程中产生的问题、关于问题的想法和思路、问题的解决过程, 使得教师能更有效地了解学生的学习过程。通过统计每位小组成员的发帖和回帖的次数, 并利用投票模块, 由学生选出发言好的学生、讨论合作最好的小组, 登记在学生电子档案中。教师还可以通过网络学习社区的评价模块让学生根据评价指标对作业进行自评与互评。学生通过互评进行横向比较, 反思自己的不足, 学习优秀作业之长, 补己之短, 改进自己的作业。

四、实践成效

1. 问卷调查对比

为了得到运用网络学习社区进行程序设计教学的成效, 在研究过程中, 笔者设计了多份问卷调查进行跟踪。从调查结果的数据分析可以看出, 实验班的学生在学习兴趣、课堂认真程度、合作和探究学习积极性等多方面都比对照班的学生优胜得多。在研究后期阶段, 笔者又对编程的难易程度进行调查, 经统计后得到如下表2所示数据:

从上述对比表中可以看到, 实验班的学生回答“很难”和“比较难”的比例都下降了, 而回答“没有难度”和“还可以”的比例均有所上升。网络学习社区转变了学生对于程序设计“难”的这种主观印象。

2. 测验分数对比

在研究后期阶段笔者统计了实验班和对照班的期末、平时测验的平均分。其中实验班的期末测验平均分比对照班的分数高出了27.67分, 实验班的平时测试平均分也比对照班的分数高出了28.19分。统计数据如表3所示。

3. 课外活动对比

实验班有多位同学参加了信息学奥林匹克分区联赛、中小学电脑制作活动比赛、中小学智能机器人和电脑虚拟机器人比赛, 均取得了不错的成绩, 获奖人数总共达到35人次。相较之下, 对照班的学生获奖人数只达到2人次。

4. 学生的非智力品质对比

除了调查问卷外, 笔者还结合课堂观察、访谈等方式, 了解学生的情况。实验班学生的非智力品质明显得到更好的培养, 师生关系更为亲密和融洽, 学生的集体荣誉感和班级凝聚力都有明显的增强。不仅如此, 实验班学生的性情得到良好的熏陶, 不少性格内向羞于表达的学生, 在课堂上的表现变得活跃和主动。

五、结束语

根据上述对比研究分析, 笔者得出结论:在程序设计教学中善用网络学习社区这个“利器”, 枯燥的程序设计学习也会其乐无穷, 教学达到事半功倍。通过使用网络学习社区提供的各种工具, 教师对学生学习过程的控制手段和方法更加科学化。教师不再是知识的灌输者, 而是教学工作的组织者、管理者, 同时还是学生的辅导者、促进者和助学者。而学生也可以在学习工具的帮助下展开多种形式有效的学习, 如自主学习、合作学习等。

随着越来越多先进的技术被应用于教学, 不仅给教师教学内容、教学方式带来了变革, 提高了课堂效果、优化了课堂结构, 而且为学生的学习和发展提供了丰富多彩的教育环境和有力的学习工具。教师要做的就是充分发掘这些平台中蕴涵的教学策略, 使这些技术真正融入到日常课堂教学中, 提高教学效率, 最终达到提升学生信息素养的目的。

摘要:在程序设计教学中善用网络学习社区, 可以大大提高学生课堂学习的效果, 使教学事半功倍。本文从为什么运用网络学习社区开展程序设计教学出发, 介绍了网络学习社区下程序设计教学的研究背景方法和对象, 论述了网络学习社区对程序设计教学的改进, 以及运用网络学习社区进行程序设计教学的研究成效, 最后得出研究结论。

关键词:网络学习社区,程序设计

参考文献

[1]赵建华.网络学习社区构建的基本方法.现代远距离教育[J], 2007, (05) :26-29

[2]王顺晔, 孟德光.基于建构主义理论的虚拟学习社区平台的搭建.[EB/OL].[2010-4].http://www.chinaqking.com/yc/2010/78067.html

[3]梁银英, 王海燕.虚拟学习社区社会网络构建策略.中国电化教育[J], 2011, (10) :64-69

[4]蒋念念, 雷体南.基于网络学习环境下的共享学习方式研究.中国教育技术装备[J].2010, (36) :14-15

学习程序 篇11

【关键词】高职;VB程序设计;主动性

VB程序设计是当前各大高职院校计算机教学中普遍开设的一门课程,其主要教学目标是让学生从简单问题出发,在设计出问题解法的基础上,通过编写程序代码有效实现解法以解决问题,并在此过程中提升学生的计算机应用技能,同时有效培养学生的创新思维、意识与能力。然而,现阶段几乎所有VB程序设计教学都遵循统一性的教学原则,忽略了学生个体差异,让学生在整个学生过程中始终处于非常被动、从属的位置,从而使学生渐渐丧失了学习热情,甚至还会产生一定的抵触心理,最终降低了学习成效。

一、学生自主学习的内涵及特征分析

自主学习是指学生在学习过程中自行设置学习目标,然后制定完整、有序的学习规划,并通过建立主动学习过程体系,采用多种学习形式与方法,最终达成学习目的、形成自主发展的重要过程。其内核的核心宗旨就是学生学习的自觉性、主动性与能动性。

自主学习具备以下特征:首先,自主学习更加注重学习主体在进行学习的过程中能够自我控制学习动机与学习行为。其次,自主学习过程中具有反馈循环的特性,并非是单向发展的,学习主体可以通过自身所理解的特殊方式对学习方法、效果进行有效的监管。最后,自主学习的主体能够根据不同情况采用更为适合自己的学习方式方法,能够更好地适应不同的学习环境或者学习环境的变化,因此学习效率较高。

二、高职《VB程序设计》教学中提升学生学习主动性的策略

(一)构建有利于提升学生学习主动性的教学模式

现阶段,高校在开展VB程序设计教学时,仍然存在较多的问题需要完善。如,教师对教学理念的革新与转变不够重视,大部分教师仍然采用先进行语法讲解、然后讲解控件对象的使用,这种教学模式虽然能够让学生了解VB程序设计课程的知识内容,但课堂时间毕竟有限,教师采用这种填鸭式的教学方法,会极大程度地限制学生的主动性与创新性,学生很容易失去学习的兴趣和热情。

因此,想要更好培养学生学习的主动性与积极性,应当构建有利于提升学生学习主动性的教学模式,具体策略有:首先,将教学内容项目化,把学习VB程序设计的每一节课都设置成具体的实践项目,引导学生积极参与其中;具体操作过程是先按照不同的教学内容,设计出相对应的实践项目,然后把需要讲授的语法及控件融入其中。其次,教师在项目教学过程中起引导和监督的作用,鼓励每位学生自主设计程序项目,然后自主学习项目中的知识点,以此来调动学生学习的积极性、主动性。最后,教师应当对学生学习过程进行客观的评价,帮助学生纠正学习中的错误,并对学生表现优异的地方进行鼓励与赞扬。

(二)培养学生主动学习的意识与方法

通过构建自主性、主动性的教学模式,能够有效改变学生在教学中的被动地位,从而有效培养他们的自主学习意识。在此过程中应注意以下几点:首先,教师要引导学生尽量采取科学、适宜自身状况的学习方法,帮助学生制定合适的学习方案,然后督促他们认真按照计划开展学习,最终实现学习目标和教学目标。其次,教师要引导学生采用反馈式的学习方法,确保学生能够在自我评价和他人评价的信息中,找到自身的不足,然后积极主动的去优化、调整学习方案,以此来更加快速、高效的达成学习目标。最后,引导学生多采用以问题导向的探究式学习方法,带着问题开展学习,并在学习过程中积极地查阅资料、与同学开展探讨,最终寻找到解决问题的正确方案。

显而易见,引导学生采取适宜自身状况的学习方法、反馈式学习方法及探究式教学方法,更有利于发挥学生的积极主动性,让学生获得更大的参与感,进而培养出他们自主学习的热情和兴趣。

(三)建立有利于学生主动学习的平台

针对VB程序设计教学的特点,院校可以利用校园网络资源,构建VB程序设计的学习平台。首先,教师可以将需要主要内容、重点及目标要求等以文字、图片或者视频的方式上传到网络平台上,让学生参考着开展自主学习。其次,针对每节课的重点,教师可以将相关的案例、资料等上传到网络平台,让学生在学习过程中,注重联系实际,并拓展自身的认知,达成学以致用的目的。最后,学校还可以通过如QQ、微信等建立学习交流平台,让老师与学生、学生与学生之间可以相互交流,以有效提升学生自主学习能力。

三、结语

在VB程序设计课程学习中,学生的自主学习能力至关重要。因此,教师应当充分发挥引导者、督促者的作用,通过采用完善教学模式、培养学生自主学习方法、创建有利学生主动学习的环境等措施,有效提升学生学习的主动性,帮助他们实现综合素质、学习能力的提升。

参考文献:

[1]汪兰英.项目教学法在《VB程序设计》教学中的研究与应用[J].软件.2012(06)

学习程序 篇12

一、明确学习目的, 激发学生学习兴趣

学习C语言的第一节课就要强调其重要性及学习的必要性, 学习C语言的方法及教材内容框架。以解决简单的实例入手, 编写小的程序, 调试得到所需要的结果, 引起学生学习的好奇心, 并且告诉学生C语言与其他课程的联系, 如数据结构、操作系统、面向对象的高级语言设计等课程, 达到学生有学习C语言的渴望要求。 (

二、丰富教学形式

采用案例分析<?>?任务驱动等教学手段, 培养学生学习兴趣。在教与学的过程中, 教师和学生都是不可缺少的, 离开老师的学和离开学生的教都是不行的, 二者必须统一起来, 才能培养学生学习C语言的兴趣。首先要让学生知道编写程序的一般步骤:建立数据结构;输入 (初始化) ;计算或数据模型的表达;输出。在每一单元的课堂教学前要精心设计好案例, 通过案例可以揭示所学内容, 用多媒体教学、启发式教学、互动式教学等方法使知识有连贯性, 让学生的思维有过度性, 形成学生的知识框架到思维框架, 如指针的难点思维逻辑结构:指针数组、数组指针、指针函数、函数指针;还有指针与一维、二维之间的关系等。学生在课堂教学上集中于一个教学模式的时间不会太长, 所以在课堂上还应该换一个模式——任务驱动式教学, 课前设计好任务, 引导学生去思考问题、发现问题, 通过师生相互之间提问互动、小组讨论等形式解决问题。解决问题之后需要评价, 可以是学生互评, 或是老师评价, 最终要加以鼓励使学生获得信心, 有成就感, 以培养其学习兴趣。

三、因材施教

教学环境离不开老师和学生, 学生接受知识的能力, 建立数学模型的能力, 思维能力是有差异的, 必须了解自己的学生, 才能达到教学目标, 教师必须关爱每一个学生, 在课上以班级为单位, 要想辅导和答疑照顾到每个学生很困难, 为更有效地、全面地提高学生的学习效率, 在上C语言课之前就要将学生进行分组, 组员的层次可以是不同的, 学习时可以相互讨论, 互相促进, 取长补短。在项目设计中可以锻炼学生的合作精神, 每个组选出一个组长, 定期汇报每个学生的学习情况, 另外, 教师无论在多媒体教室、实验室, 还是课外, 都要时刻关注学生的动态, 了解学生的层次, 不管是课上、课下或网上, 要积极与每一位学生交流, 在此基础上, 设计不同的任务给不同层次的学生, 设计的任务相对于每一个层次, 难度要适中, 使学生能够在能力范围内完成, 让学生体验学习的乐趣, 提高学生发现问题、解决问题的能力, 促使每个层次的学生学有所获, 提高学习兴趣。

四、项目综合, 课程应用

在学习课程的后期阶段, 需要进行综合知识的沉淀和总结, 在过程性评价时要注意综合项目的积累, 每一段小的项目是最后综合项目的分支, 这样项目的难度就会降低并具有可完成性, 使学生愿意和主动学习;作为教师可以将C语言的应用前沿介绍给学生, 也可以将学生竞赛应用C语言的实际案例给学生做, 让学生的思维上升一个空间, 保持学习兴趣的可持续性。

五、结语

学生学习C语言程序设计, 离不开教师的引导和帮助, 通过开始、过程中和结束三阶段的案例分析, 任务驱动, 因材施教, 综合应用等教学模式培养和保持学生的兴趣, 在教学方式上, 运用多媒体模式和网络平台, 课内、课外互动和交流, 在教学元素的相互碰撞中让学生学会交流, 学会合作, 学会思考问题, 在愉悦的环境中完成知识的建构, 养成良好的学习习惯, 为后续课程打下良好基础。经过课题组成员的实践, 这种阶段性保持学生的学习兴趣是行之有效的, 并具有一定的可移植性。

摘要:就如何保持和提高学生学习C语言的兴趣提出了教师在教学活动的开始、过程中和结束三个阶段的教学方法和模式, 经过教学实践, 达到了良好的教学效果。

关键词:C语言,程序设计,兴趣,任务驱动,因材施教

参考文献

[1]张桃红, 彭珍, 杨炳儒, 等.C程序设计”课程的KM教学法研究[J].计算机教育, 2010 (2) .

[2]何钦铭, 颜晖.C语言程序设计[M].北京:高等教育出版社, 2008.

上一篇:焊接施工技术下一篇:发放方式