编程培训心得体会(精选多篇)

第一篇:java编程心得体会

编程培训心得体会(精选多篇)

java编程心得

计算机3班

窦金霞

20144773

最近几周一直在弄程序,说实话真的很累,但累中也有成功的快乐。我觉得学到了很多东西,这是只看课本知识所不能学到的。

说实话,以前我一直没学过java虽然我也知道java的重要性,可是即使上课听了,不实践还是掌握不了。因为种种原因,今年我没有买笔记本。没有机器,仅仅靠每周一次的上机练习是绝对不够的。所以我就插空调程序,在舍友们不用的时候自己再接她们的电脑调。

调上一个web版的通讯录程序时我已经感觉到学的很吃力,好多东西都不懂。这次做的这个学生成绩管理系统更复杂了,所以一开始调的时候感觉特别吃力.所以我告诉自己不能放弃,慢慢来,就这样我从最基本的sql语句session对象开始学起,我觉得我还有太多不懂得所以要比别人付出更多的努力。就这样我一点一点的学着??

说心里话,在做上一个web版的通讯录时,我就感觉到成功的喜悦。好多地方我都是一点一点的问的,在问的过程中,我也学会了很多,像:servlet和jsp之间跳不过去时有两种解决办法,一是关闭底层类中的e;二是将servlet中的throws exception改成try catch以捕捉异常;我还学到了集中查找错误的方法,可以加上两个双斜杠“//”将具体的方法屏蔽掉,一检查是方法错误还是servlet错误,还有就是写上tln()将获得的数据输出,用来检查数据传输过程有没有错误等等

虽然在别人看来,这些方法可能都很常规,但是确实我自己学会的,我觉得很有成就感。我已经做好计划了,暑假的时候去买本本用自己的本本练习一下java,虽然下学期不学java了,但是我对java的热情不会因为这个而削减的!

做完这个学生成绩管理系统后,我觉得我对java的看法已经改变了。一前总以为java很繁琐很难,听同学说java不好学,开始又有一些听不懂,所以一直很畏惧java。但真正做了这个系统以后我才感觉到其实任何事都没有难与不难之分,只要你肯努力的去做,世上无难事只怕有心人!

我现在对java学习充满了热情,我知道我还有很多的不足

还有很多需要努力的地方,所以我的java之旅将继续进行??

第二篇:socket编程实验心得体会

实验心得体会

在本次实验中,我通过对网络课上所学知识的应用,学到了很多实践中的知识。并且加深了我对课本知识的理解和认识,在实验过程中,更容易记忆和深入理解各种协议的工作以及在网络编程中应该注意的一系列问题。

我们的第一个实验是对arp、icmp、ftp和http协议的分析和验证。在利用软件etherpeek抓取在主机通信中的报文,得到了很多的关于这些协议的具体参数。在课程学习过程中,书本和老师给我的感觉就是太枯燥,通过课本的学习根本没有办法理解各种协议的工作细节。有很多的细微之处是想不通的。但是,在本次实验中,我就通过各种报文的分析,看到了网络中不同层次协议之间的协做过程。对应不同层之间就是通过协议来使用,我对整个网路的大体架构有了一个统筹的了解,虽然对很多的更深入的知识不是很了解,但是比我在课上学的东西要更有趣,而且容易学习,更能够我学习的兴趣。 第二个实验是socket编程实验。在编写网络程序之前,我对网路通信可以说一无所知,根本不知道那些网路上的程序是怎么通过网路进行通信的。在本次实验中,终于揭开了他们神秘的面纱。当然在实验中出现了很多的插曲,我是在linux环境下编写的程序,很多技术方面的问题都无法解决。查阅书籍和网上咨询才弄懂了他们的来龙去脉,最终是将我的程序编写完了。开始接触网路编程时,那是一头雾水,根本不知从何下手。在看了辅导教员给我们程序之后才有了很

多的起色,才能够自己编写程序。在网络编程中,我最深的体会就是对具体的内部细节不熟悉,导致在调试的过程中感觉到很无力。在很多函数的作用下,经常就是一团乱麻。之后,我每次编写之前就是将用到的函数的用法温习一下,最后还是能够解决很多的问题的。

本次试验是我们学习网路的第一次。以前的课程从来没有接触到网路方面的知识。这次的新知识对我们的挑战还算不是太大,通过我们的努力,所有的困难时被克服掉了。其实,实验应该是我们的重点,在以后的工作中要的就是我们的实际的动手能力,如果我们在学习期间就是只学了书本上的知识,那样对理论的了解是不够深刻的,只有通过实验才能激发我们的学习兴趣。总之,我觉得实验才是检验理论的唯一标准。

第三篇:vhdl 编程的一些心得体会

vhdl 编程的一些心得体会(转)

vhdl 是由美国国防部为描述电子电路所开发的一种语言,其全称为(very high speed integrated circuit) hardware description language。 与另外一门硬件描述语言 verilog hdl 相比,vhdl 更善于描述高层的一些设计,包括系统级(算法、数据通路、控制)和行为级(寄存器传输级),而且 vhdl 具有设计重用、大型设计能力、可读性强、易于编译等优点逐渐受到硬件设计者的青睐。但是,vhdl 是一门语法相当严格的语言,易学性差,特别是对于刚开始接触 vhdl 的设计者而言,经常会因某些小细节处理不当导致综合无法通过。为此本文就其中一些比较典型的问题展开探讨,希望对初学者有所帮助,提高学习进度。

一.关于端口

vhdl 共定义了 5 种类型的端口,分别是 in, out,inout, buffer及 linkage,实际设计时只会用到前四种。in 和 out 端口的使用相对简单。这里,我们主要讲述关于 buffer和inout 使用时的注意事项。

与 out 端口比,buffer 端口具有回读功能,也即内部反馈,但在设计时最好不要使用 buffer,因为 buffer类型的端口不能连接到其他类型的端口上,无法把包含该类型端口的设计作为子模块元件例化,不利于大型设计和程序的可读性。若设计时需要实现某个输出的回读功能,可以通过增加中间信号作为缓冲,由该信号完成回读功能。

双向端口 inout 是四种端口类型中最为特殊的一种,最难以学习和掌握,为此专门提供一个简单程序进行阐述,部分程序如下:

... ?

①datab<=din when ce=’1’ and rd=’0’ else

② (others=>’z’);

③ dout<=datab when ce=’1’ and rd=’1’ else

④ ( others=>’1’ );

? ?

程序中 datab 为双向端口,编程时应注意的是,当 datab 作为输出且空闲时,必须将其设为高阻态挂起,即有类似第②行的语句,否则实现后会造成端口死锁。而当 datab 作为有效输入时, datab 输出必须处于高阻态,对于该例子中即,当 ce=’1’ and rd=’1’时,

二.信号和变量

常数、信号和变量是 vhdl 中最主要的对象,分别代表一定的物理意义。常数对应于数字电路中的电源或地;信号对应某条硬件连线;变量通常指临时数据的局部存储。信号和变量功能相近,用法上却有很大不同。

表 1信号与变量主要区别

号变量

赋值延迟至少有△延时无,立即变化

相关信息有,可以形成波形无,只有当前值进程敏

感是否全局性具有全局性,可存在于多个进程中只能在某个进程或子程序中有效相互赋值关系信号不能给变量赋值变量可以给信号赋值

对于变量赋值操作无延迟,初学者认为这个特性对 vhdl 设计非常有利,但这只是理论上的。基于以下几点原因,我们建议,编程时还是应以信号为主,尽量减少变量的使用。

(1)变量赋值无延时是针对进程运行而言的,只是一个理想值,对于变量的操作往往被综合成为组合逻辑的形式,而硬件上的组合逻辑必然存在输入到输出延时。当进程内关于变量的操作越多,其组合逻辑就会变得越大越复杂。假设在一个进程内,有关于变量的 3 个级连操作,其输出延时分别为 5ns,6ns,7ns,则其最快的时钟只能达到 18ns。相反,采用信号编程,在时钟控制下,往往综合成触发器的形式,特别是对于 fpga 芯片而言,具有丰富的触发器结构,易形成流水作业,其时钟频率只受控于延时最大的那一级,而不会与变量一样层层累积。假设某个设计为 3 级流水作业,其每一级延时分别为 10ns,11ns,12ns,则其最快时钟可达 12ns。因此,采用信号反而更能提高设计的速度。

(2)由于变量不具备信息的相关性,只有当前值,因此也无法在仿真时观察其波形和状态改变情况,无法对设计的运行情况有效验证,而测试验证工作量往往会占到整个设计 70%~80%的工作量,采用信号则不会存在这类问题。

(3)变量有效范围只能局限在单个进程或子程序中,要想将其值带出与其余进程、子模块之间相互作用,必须借助信号,这在一定程度上会造成代码不够简洁,可读性下降等缺点。

当然,变量也具有其特殊的优点,特别是用来描述一些复杂的算法,如图像处理,多维数组变换等。

三.位(矢量)与逻辑(矢量)

bit 或其矢量形式 bit_vector只有’0’和’1’两种状态,数字电路中也只有’0’和’1’两种逻辑,因此会给初学者一个误区,认为采用位(矢量)则足够设计之用,而不必像std_logic那样出现’x’,’u’,’w’各种状态,增加编程难度。但实际情况却并非如此,以一个最简单 d型触发器设计为例

? ?

① process(clk)

② begin

③ if clk’event and clk=’1’ then

④ q<=d;

⑤ end if;

⑥ end process;

? ?

实际中 clk 对数据端 d的输入有一定的时间限制,即在 clk 上升沿附近(建立时间和保持时间之内),d必须保持稳定,否则 q输出会出现亚稳态,如下图所示。

当 clk 和 d时序关系不满足时,由于 bit 只有’0’或’1’,系统只能随机的从’0’和’1’中给 q 输出,这样的结果显然是不可信的;而采用 std_logic 类型,则时序仿真时会输出为一个’x’,提醒用户建立保持时间存在问题,应重新安排 d和 clk 之间时序关系。

此外,对于双向总线设计(前面已提及)、 fpga/cpld上电配置等问题,如果没有’z’,’x’等状态,根本无法进行设计和有效验证。

四.关于进程

进程(process)是 vhdl 中最为重要的部分,大部分设计都会用到 process 结构,因此掌握process 的使用显得尤为重要。以下是初学和使用 process 经常会出错的例子。

1.多余时钟的引入

在设计时往往会遇到这种情况,需要对外部某个输入信号进行判断,当其出现上跳或下跳沿时,执行相应的操作,而该信号不像正常时钟那样具有固定占空比和周期,而是很随机,需要程序设计判断其上跳沿出现与否。这时,很容易写出如下程序:

①process(ctl_a) -- ctl_a即为该输入信号

② begin

③ if ctl_a’event and ctl_a=’1’ then

④?? ; --执行相应操作

⑤ end if ;

⑥ end process;

由于出现第③行这类语句,综合工具自动默认 ctl_a 为时钟,某些 fpga 更会强行将该输入约束到时钟引脚上。而设计者的初衷只是想将其作为下位机的状态输入以进行判断。上面的程序容易造成多时钟现象,增加设计的难度。解决的办法可以如下,将 ctl_a 增加一级状态

ctl_areg 寄存,通过对 ctl_a 和ctl_areg 状态判断上跳与否,改正程序如下:① process(clk)

② begin

③ if clk’event and clk=’1’ then

④ ctl_areg<=ctl_a;--产生相邻状态

⑤ if ctl_areg=’0’ and ctl_a=’1’ then--上跳判断

⑥?? ; --执行相应操作

⑦ end if;

⑧ end if;

⑨ end process;

程序中第④行用以产生两个相邻状态,第⑤行对前后状态进行判断是否有上跳现

象发生。其中,需注意的是 clk 的时钟频率应明显快于 ctl_a信号的变化频率,以保证正确采样。

2.输出多驱动

误用 process经常会引起输出多驱动源的发生,即在两个以上的进程内对同一信号赋值操作。

以下程序就出现了这类情况:

⑴ proc_a: process(clk)

⑵ begin

⑶ if clk’event and clk=’1’ then

⑷ dout<=din_a;

⑸ end if

⑹ end process;;

⑻ proc_b:process(sel_en)

⑼ begin

⑽ if sel_en=’1’ then

⑾ dout<=din_b;

⑿ end if;

⒀ end process;

进程 proc_a 和 proc_b 中都出现了对 dout 的赋值语句,设计者原本的想法是,只要合理控制好 clk 和 sel_en 输入,使其不发生冲突,即 clk上升沿时 sel_en 不为’1’;sel_en 为’1’时,不出现 clk 的上升沿,这样 proc_a,proc_b 两个进程就不会发生冲突。但综合时,综合工具会将所有可能情况全部罗列进去,包括第⑶行和第⑽行同时成立的情况,此时对于 dout就有 din_a和 din_b 两个输入驱动,dout 不知接收哪一个,因此该程序无法综合,改正的方法是只要将两个进程合并成一个即可。

由于进程在 vhdl 中的重要性,对此专门做了一个总结如下:

(1)一个进程中不允许出现两个时钟沿触发,(xilinx 公司 coolrunner 系列 cpld 支持单个时双钟的双触发沿除外)

(2)对同一信号赋值的语句应出现在单个进程内,不要在时钟沿之后加上 else 语句,如 if clk’event and clk=’1’ then - else?的结构,现有综合工具支持不了这种特殊的触发器结构

(本文来源本站)(3)当出现多层 if语句嵌套时,最好采用 case 语句替代,一是减少多层嵌套带来的延时,二来可以增强程序的可读性

(4)顺序语句如 if语句、case 语句、loop 语句、变量赋值语句等必须出现在进程、函数或子程序内部,而不能单独出现在进程之外

(5)进程内部是顺序执行的,进程之间是并行运行的;vhdl 中的所有并行语句都可以理解为特殊的进程,只是不以 process结构出现,其输入信号和判断信号就是隐含的敏感表

五.关于 vhdl 学习中的几点说明

与软件语言相比,vhdl 最重要的特点就在于它的并行运行特性,当设计好的电路上电后,器件内部所有信号将同时并发工作,而不会以软件方式按照

程序顺序执行,即使在进程内部也是趋向并行工作的。例如以下程序:① process(clk)

② begin

③ if clk’event and clk=’1’ then

④ <= ;

⑤ <= ;

⑥ end if;;

⑦ end process;

综合的结果两个独立的 d 型触发器,虽然进程内部应按顺序执行,但是硬件实现后,只要采样到时钟上升沿,和 状态会同时翻转,而不会先执行的变化,然后才会去执行的转变。因此,vhdl 学习过程中,应加强硬件概念的理解,没有硬件概念或是硬件概念不强,在设计时,往往会将 vhdl 设计以软件编程的方式来处理,而得出一些不可思议的结果。

作为一门硬件描述语言,vhdl 几乎可以用来描述现有的大型系统数字电路、算法以及其它设计。但是,限于目前综合工具的水平,vhdl 中的许多语法还不能支持,例如:

dout<=din after 5 ns;

综合时就无法达到如此精度,因此这条语句主要用来编写测试激励,而很少出现在设计实体中。类似的情况还有很多,目前 vhdl 设计使用的也只是整个标准中的一部分,这也正是vhdl 的“可综合子集”性质,它一定程度上限制了 vhdl 的广泛应用,但是随着综合技术的发展,这种情况会逐渐得以改善,vhdl 也将在各个领域中发挥出愈来愈重要的作用

第四篇:c语言高级编程心得体会

高级语言程序设计心得体会

通过这五天的高级语言程序设计学习,我学到了很多东西,同时也更深一层次的体会到c语言知识的奥妙和无穷,激起了我对c语言知识学习的兴趣和激情。

学好c语言,除了一些必须要记忆的关键字、语法和库函数,还要学会使用c语言的有关算术运算符,以及包含这些运算符的表达式,掌握赋值语句的使用方法和各种类型数据(例如熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法,掌握不同类型数值之间赋值的规律等)的输入输出方法,能正确使用各种格式转换符等,并且还需要靠自己的逻辑思维能力。

另外,上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它,然后,通过多次上机练习,就对语法知识慢慢有了感性的认识,时间久了,就会加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这就又加深了我们对c语言的认识。

还有就是在编程时我们要细心,编完后记得检查语法及符号遗漏或错误等相关的问题。

c语言课程设计和现代计算机技术的实际应用相结合,是我们在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验,从

开始的算法思路到运行调试以及另人兴奋的可用程序,都是一个很好的学习和锻炼的过程,使我们巩固了原有的理论知识,培养了我们灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力。使我们体会到自身知识和能力能在实际中的应用和发挥。不但可以激发创新意识,还可以开发创造能力、培养沟通能力。这次实习时间虽然仅有五天时间,但确实使我受益非浅。通过实习我丰富了计算机操作经验,更加深了对c语言的了解,熟悉了其环境,更增强了对visual c++的使用技巧。另外,实习中老师对我们进行了细心、耐心的指导,鼓励我们对程序进行合理改进,培养了我们的创新意识和创新能力。原来是我认为可怕的课程设计,就在种种辅助条件下完成了,心里有说不出的高兴。

在以后的三年大学专业学习乃至以后的就业工作中,c语言都起着巨大的作用,从很大程度上来说,我们专业的学生,要想在这个专业取得一定的成就,现在就得好好学好c语言,为未来埋下伏笔。总的来说,我觉得c语言并没想象中的那么晦涩难懂,关键是我们要先认真学会,熟悉它的语法知识,多多上机实践。只有先打好基础,我们才能学好c语言,才会熟练编程,最后才有所突破,有所建树。

第五篇:编程心得

由于大学的时候是网络方向的,没大接触编程,来到这个学校就开始自学c++,但是感觉不知道具体该做什么。听人说只学习c++的理论知识是不可能做出什么实际的东西的,而且vc和c++不是一回事,“vc只是一个开发环境,mfc才是它的精华”,我就是一只无头苍蝇,根本找不到学习编程的方向,因为导师没有项目,我不知道从何做起,同学告诉我从具体的小实例开始做,可以用mfc窗口界面编程。于是我就在图书馆借了本这方面的书(mfc windows应用程序设计)。这种c++的高级应用,mfc跟以前的控制台编程有比较大的差异,实现了部分可视化编程。对我来说真的很难很难,这本书上面好多小例子都是可以实现的,我就按照上面的代码进行模仿着写,实现之后感觉挺有成就感的,可是mfc的符号确实是很长很难记。但是我觉得如果按照大学里学习c语言这门初级语言的方法来学习的话是很可怕的,就像我们学了十几年的英语一样,单词背了几千个,会做题,会写作文,但是一碰到老外的时候,却像哑巴和聋子,说不出听不懂,我们最初学习c语言时就是搞懂每一个细节,在课本上纠错,记住语法规则却很少上机实践,不解决实际问题,等到真正编程的时候,就不知如何下手了。

我个人感觉在学习mfc时msdn帮助文档特别重要,那些难记住的类,方法都可以查看msdn library,很多代码可以直接复制粘贴。

我是看孙鑫老师的教程学习的,但是感觉这个教程好难懂,好多东西都是理论知识,对实践应用不是很大。

绘制窗口时会出现严重的刷屏问题,

问了解决这一问题,

通过改变背景位图来替代过多的部分的重绘达到更好效果。

一个满载的二维、三维数组都可以用一个足够长的一维数组来装下。 mfc基础细节学习:学习了位图的使用,cbrush类,cdc类,cdialog

类的基本使用,对于菜单的设置初步了解了。

3、mfc编程的初步理解:通过自学了解到mfc编程的实现是通过建立消息映射表来实现各个函数的调用。

(1)通过declare_message_map声明消息映射;

(2)通过begin_message_map和宏end_message_map来包含消息映射宏, 创建消息映射列表;

(3)为消息处理函数添加代码,实现需要的响应。通过以上三大步实现消息映射。每种对话框的操作要通过先建立相应的cdialog类来具体进行。

mfc编程只是一种工具,而编程的核心还是代码的实现。我们在使用mfc编程时要想学得更好就要不断练习,更具体的了解其中的各种类、函数,各种工具,mfc是一个巨大的工具箱,但是如果不知道工具箱里面的工具怎么用,那在好的工具也无用武之地。所以,我认为此次编程小实习主要是让我初步接触了mfc如何实现可视化编程。未来要想真正掌握mfc编程还要不断的深入了解各种mfc工具,真正的与代码结合起来实现高效实用的编程效果. 最令我痛苦的是,学了一段时间回过头来看,感觉好像什么都没学到。

api函数是windows提供给应用程序的编程接口, 任何用户应用程序必须运行在api函数之上. 直接使用api编程是了解操作系统运行细节的最佳方式, 而且熟知api函数也是对程序开发者的一个最基本的要求. 这课程以api函数作为起点介绍windows编程, 使我撇开c++的特性专心熟悉win32编程思路和消息驱动机制.

虽然mfc仅仅是对api函数的简单封装, 由于我之前对c++语言的了解不够, 不清楚框架程序的工作机制, 即便是有经验的程序员在mfc复杂的结构面前也显得非常困惑. 他们会"用"mfc, 却不知道为什么这么"用", 在运行程序出错时这种现象带来的问题就很明显, 他们不会改.

其实,系统的学起来mfc还是比较清晰的,mfc工程程序肯定有两个类,一个是cwnd类,另一个就是应用程序类cwinapp类。也就是必须有应用程序类,和窗口类。

在编写mfc程序的过程中我也着实体验到了mfc编写程序的局限性。mfc虽然给开发者提供了一个现成的框架,着实便利的开发者的开发。但同样也造成了一个巨大的问题,开发者很难开发出具有个人特色的软件,想要重新改写程序整体的外观就比较困难,并且c++在编写程序时需要开发者自己定义变量的空间开辟和回收,这点上没有java开发时来的方便,尤其是c++当中的指针机制,一不注意还是很容易造成程序错误的。

虽然mfc中的方法比较难写,尤其是消息映射函数,庆幸的是好多都不需要自己去写,我们可以通过classwinzard类向导来指引我们进行选择,想添加什么消息映射只需鼠标操作即可。

通过mfc windows应用程序设计的学习,我掌握了一些知识: 应用程序类,框架窗口类,视图类,文档类构成了mfc应用程序框架,框架的功能是通过各类之间的协调工作实现的类。

mfc采用文档/试图结构来实现数据和数据表现的分离,文档试图的分离有利于数据和数据表现的单独改变。

mfc用类信息存储了动态创建类对象时所需要的消息。

经过这门课程的学习不但使我掌握了windows应用程序设计的基本方法,还可以使我进一步深刻,全面地理解面向对象程序设计的思想,从而把握程序设计方法的发展方向。