第一篇:软件编程书籍清单
软件编程书籍·推荐清单
编程基础:
1、linux程序设计(第四版)
--学习linux的基本程序设计
2、数据结构(C++描述)
--相关的C++版本数据结构均可,学习基本的链表、栈、队列等基础数据结构
3、C++程序设计(谭浩强)
--学习C++程序中类的基本设计,如果有C++基础,就考虑看C++ primer4、C++ GUI Qt4编程
--学习图形化界面程序的开发及使用QT库
网络基础:
1、计算机网络(谢希仁)
--学习应用程序如何通过网络进行相互连通,主要看运输层、网络层
Tcp/ip
建议在学习的过程中,做一些小项目以锻炼动手能力,可以考虑做一个局域网聊天室。
编程进阶:
1、C++ primer
--深入理解C++程序设计
2、设计模式
--理解如何设计可复用、易维护的代码
3、unix网络编程
--理解如何构建高性能的网络应用程序
4、深入理解计算机系统
--理解程序是如何运行的,如何构建高性能的应用程序
第二篇:软件编程学习心得
软件编程学习心得
随着计算机技术的发展和工作的需要,为了能够更好的维护公司生产管理系统;公司安排我们到北大青鸟APTECH进修。我们选择了时下最流行、发展速度较快的语言C#。C#学习共分三个阶段,目前我只学习了第一个阶段;现将我在北大青鸟学习第一阶段为期两个月的学习心得总结如下:
C#是一种新的面向对象的编程语言,专门用于.NET运行时。C#编译器只能生成受管制的代码,也可以使用.NET基类。C#语言自C/C++演变而来。但是,它具有简单、现代、完全面向对象和类型安全等诸多特性。下面就简单说说简单和现代其中两种特性。
1、简单
C#具有C++所没有的一个优势就是学习简单。该语言首要的目标就是简单。很多功能(还不如说是缺少了C++的一些功能)有助于C#全方位的简单。
在C#中,没有C++中流行的指针。默认地,您工作在受管理的代码中,在那里不允许如直接存取内存等不安全的操作。我想没有C++程序员可以声称,从没有使用指针访问过不属于他们的内存。
C#弃用其它操作符,名字空间、成员和引用仅使用单个操作符 “.”。现在一个程序员所需要理解的就是嵌套名字的注解了。
C#使用统一的类型系统。这种系统充许您把各种类型作为一个对象查看,它是一个原始类型还是一个full-blown 类。和其它编程语言相比,由于加框(boxing)和消框(unboxing)的机制,把简单类型当作对象处理并不能获得性能的改善。稍后将详细解释加框和消框,但基本上仅当需要时才使用对象访问简单类型这种技术。
2、现代
投入学习C#的努力是一笔大投资,因为C#是为编写NGWS 应用程序的主要语言而设计。很多用C++可以实现或者很费力实现的功能,在C#中不过是一部分基本的功能而已。根据应用程序的特殊需求,可以很容易地创建出新的一种数据类型。
指针不再是编程武器的一部分。运行时NGWS提供了一个垃圾收集器,负责C#程序中的内存管理。因内存和应用程序都受到管理,所以很必要增强类型安全,以确保应用的稳定性。
异常处理是C#的主要功能。C#的异常处理与C++的不同点在于它是交叉语言的(运行时的另一个功能)。在没有C#之前,您必须处理怪异的HRESULTs,但现在由于使用了基于异常的健壮的出错处理,这一切都结束了。
对于现代的应用程序,安全是首要的,C#也不会例外。它提供了元数据语法,用于声明下述NGWS安全模式的能力和许可。元数据是NGWS运行时的一个关键的概念。
通两个多月学习,我能够很好的掌握C#语言的基本语句、语法以及老师补充的一些要点;能够编写简单的应用程序,例如电子邮件的收发等,为接下来的第二、第三阶段学习打下了良好的基础。
第三篇:软件编程规范总结
软件编程规范总结
本规范的内容包括:基本原则、布局、注释、命名规则、变量常量与类型、表达式与语句、函数与过程、可靠性、可测性、断言与错误处理等。
一、基本原则
1.2.3.4.5.6.7.保持代码的简明清晰,避免过分的编程技巧。所有的代码尽量遵循ANSI C标准。
编程时首先达到正确性,其次考虑效率。避免或少用全局变量。尽量避免使用GOTO语句。尽可能重用、修正老的代码。尽量减少同样的错误出现的次数。
二、文件布局
1.头文件必须要避免重复包含。
2.包含标准库头文件用尖括号 <>,包含非标准库头文件用双引号 “”。3.遵循统一的顺序书写类的定义及实现。类的定义(在定义文件中)按如下顺序书写:
公有属性
公有函数
保护属性
保护函数
私有属性
私有函数
类的实现(在实现文件中)按如下顺序书写:
构造函数
析构函数 公有函数 保护函数 私有函数
4.程序中一行的代码和注释不能超过80列。5.定义指针类型的变量,*应放在变量前。
6.源程序中关系较为紧密的代码应尽可能相邻。iLength iWidth = 10;
= 5;// 矩形的长与宽关系较密切,放在一起。
StrCaption = “Test”;
7.禁止使用TAB键,必须使用空格进行缩进。缩进为4个空格。
8.程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。{ }之内的代码块使用缩进规则对齐。
9.if、else、else if、for、while、do等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加 { }。
if(varible1 < varible2){
varible1 = varible2;}
10.11.声明类的时候,public、protected、private关键字与分界符{} 对齐,这些部分的内容要进行缩进。
12.结构型的数组、多维的数组如果在定义时初始化,按照数组的矩阵结构分行书写。13.相关的赋值语句等号对齐。
14.在switch语句中,每一个case分支和default要用{ }括起来,{ }中的内容需要缩进。
15.不同逻辑程序块之间要使用空行分隔。16.一元操作符如“!”、“~”、“++”、“--”、“*”、“&”(地址运算符)等前后不加空格。“[]”、“.”、“->”这类操作符前后不加空格。
17.多元运算符和它们的操作数之间至少需要一个空格。18.关键字之后要留空格。(if、for、while等关键字之后应留一个空格再跟左括号‘(’,以突出关键字。)
19.函数名之后不要留空格。(函数名后紧跟左括号‘(’,以与关键字区别。)20.(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。‘,’之后要留空格。‘;’不是行结束符号时其后要留空格。
21.长表达式(超过80列)要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐。
22.函数声明时,类型与名称不允许分行书写。
三、注释
1.一般情况下,源程序有效注释量必须在20%以上。2.注释符与注释内容之间要用一个空格进行分隔。
3.文件头部必须进行注释,包括:.h文件、.c文件、.cpp文件、.inc文件、.def文件、编译说明文件.cfg等。
4.函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、访问和修改的表、修改信息等。
5.包含在{ }中代码块的结束处应加注释,便于阅读。特别是多分支、多重嵌套的条件语句或循环语句。
void Main(){
if(…){
… while(…)
{
…
} /* end of while(…)*/ …
} /* end of if(…)*/ // 指明是哪条语句结束 } /* end of void main()*/
// 指明函数的结束 // 指明该条while语句结束
6.保证代码和注释的一致性。修改代码同时修改相应的注释,不再有用的注释要删除。7.注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。
8.全局变量要有详细的注释,包括对其功能、取值范围、访问信息及访问时注意事项等的说明。
9.注释与所描述内容进行同样的缩排。
10.对分支语句(条件分支、循环语句等)必须编写注释。11.尽量避免在注释中使用缩写,特别是不常用缩写。
四、命名规则
1.标识符要采用英文单词或其组合,便于记忆和阅读,切忌使用汉语拼音来命名。严格禁止使用连续的下划线,下划线也不能出现在标识符头或结尾(预编译开关除外)。
2.程序中不要出现仅靠大小写区分的相似的标识符。
3.用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。
4.宏、常量名都要使用大写字母, 用下划线 ‘_’分割单词。预编译开关的定义使用下划线 ‘_’开始。
5.变量名长度应小于31个字符,以保持与ANSI C标准一致。不得取单个字符(如i、j、k等)作为变量名,但是局部循环变量除外。
6.程序中局部变量不要与全局变量重名。7.使用一致的前缀来区分变量的作用域。
g_
:全局变量 s_
:模块内静态变量
空:局部变量不加范围前缀
8.使用一致的小写类型指示符作为前缀来区分变量的类型。说明:常用变量类型前缀列表如下:
i
: int
f
: float d : double c
: char uc
: unsigned char 或 BYTE l : long p
: pointer b
: BOOL h : HANDLE w
: unsigned short 或 WORD dw : DWORD或 unsigned long a
:数组,array of TYPE str
:字符串 t :结构类型
9.完整的变量名应由前缀+变量名主体组成,变量名的主体应当使用“名词”或者“形容词+名词”,且首字母必须大写。
float g_fValue;10.函数名用大写字母开头的单词组合而成,且应当使用“动词”或者“动词+名词”(动宾词组)。
11.结构名、联合名、枚举名由前缀T_ 开头。事件名由前缀EV_ 开头。12.标识符前最好不加项目、产品、部门的标识。
五、变量常量与类型
1.定义全局变量时必须仔细分析,明确其含义、作用、取值范围及与其它全局变量间的关系。
2.明确全局变量与操作此全局变量的函数或过程的关系。3.一个变量有且只有一个功能,不能把一个变量用作多种用途。4.循环语句与判断语句中,不允许对其它变量进行计算与赋值。5.宏定义中如果包含表达式或变量,表达式和变量必须用小括号括起来。6.使用宏定义多行语句时, 必须使用 { } 把这些语句括起来。
建议:
尽量构造仅有一个模块或函数可以修改、创建的全局变量,而其余有关模块或函数只能访问。
对于全局变量通过统一的函数访问。
尽量使用const说明常量数据,对于宏定义的常数,必须指出其类型。 最好不要在语句块内声明局部变量。
7.结构和联合必须被类型化。typedef struct {
char acName[NAME_SIZE];WORD wScore;} T_Student;
T_Student *ptStudent;
建议:
使用严格形式定义的、可移植的数据类型,尽量不要使用与具体硬件或软件环境关系密切的变量。
结构是针对一种事务的抽象,功能要单一,不要设计面面俱到的数据结构。 不同结构间的关系要尽量简单,若两个结构间关系较复杂、密切,那么应合为一个结构。
结构中元素的个数应适中。若结构中元素个数过多可考虑依据某种原则把元素组成不同的子结构,以减少原结构中元素的个数。
仔细设计结构中元素的布局与排列顺序,使结构容易理解、节省占用空间,并减少引起误用现象,对于结构中未用的位明确地给予保留。
结构的设计要尽量考虑向前兼容和以后的版本升级,并为某些未来可能的应用保留余地(如预留一些空间等)。
合理地设计数据并使用自定义数据类型,尽量减少没有必要的数据类型默认转换与强制转换。
当声明数据结构时,必须考虑机器的字节顺序、使用的位域及字节对齐等问题。
六、表达式与语句
1.在表达式中使用括号,使表达式的运算顺序更清晰。
if(((iYear % 4 == 0)&&(iYear % 100!= 0))||(iYear % 400 == 0))2.避免表达式中的附加功能,不要编写太复杂的复合表达式。3.不可将浮点变量用“==”或“!=”与任何数字比较。
4.应当将指针变量用“==”或“!=”与NULL比较。
5.在switch语句中,每一个case分支必须使用break结尾,最后一个分支必须是default分支。
6.不可在for 循环体内修改循环变量,防止for 循环失去控制。
建议:
循环嵌套次数不大于3次。
do while语句和while语句仅使用一个条件。 当switch语句的分支比较多时,采用数据驱动方式。
如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。
for语句的循环控制变量的取值采用“半开半闭区间”写法。 在进行“==”比较时,将常量或常数放在“==”号的左边。
七、参数
1.如果函数没有参数,则用void填充。
void SetValue(int iWidth, int iHeight);float GetValue(void);2.如果参数是指针,且仅作输入用,则应在类型前加const。(防止该指针在函数体内被意外修改。)
3.当结构变量作为参数时,应传送结构的指针而不传送整个结构体,并且不得修改结构中的元素,用作输出时除外。
4.不要省略返回值的类型,如果函数没有返回值,那么应声明为void类型。5.对于有返回值的函数,每一个分支都必须有返回值。(为了保证对被调用函数返回值的判断,有返回值的函数中的每一个退出点都需要有返回值)
6.对输入参数的正确性和有效性进行检查。7.防止将函数的参数作为工作变量。
void SumData(int iNum, int *piData, int *piSum){
int iCount;
int iSumTmp;// 存储“和”的临时变量
iSumTmp = 0;
for(iCount = 0;iCount < iNum;iCount++)
{
iSumTmp += piData[iCount];}
*piSum = iSumTmp;} 反例:
void SumData(int iNum, int *piData, int *piSum){
int iCount;
*piSum = 0;
for(iCount = 0;iCount < iNum;iCount++){
*piSum += piData[iCount];// piSum成了工作变量,不好。} }
8.必须对所调用函数的错误返回值进行处理。(函数返回错误,往往是因为输入的参数不合法,或者此时系统已经出现了异常。如果不对错误返回值进行必要的处理,会导致错误的扩大,甚至导致系统的崩溃。)
八、可靠性
1.在程序编制之前,必须了解编译系统的内存分配方式,特别是编译系统对不同类型的变量的内存分配规则,如局部变量在何处分配、静态变量在何处分配等。
2.防止内存操作越界。
3.必须对动态申请的内存做有效性检查,并进行初始化;动态内存的释放必须和分配成对以防止内存泄漏,释放后内存指针置为NULL。
4.变量在使用前应初始化,防止未经初始化的变量被引用。5.指针类型变量必须初始化为NULL。6.指针不要进行复杂的逻辑或算术操作。
7.如果指针类型明确不会改变,应该强制为const类型的指针,以加强编译器的检查。8.减少指针和数据类型的强制类型转化。9.移位操作一定要确定类型。
10.对变量进行赋值时,必须对其值进行合法性检查,防止越界等现象发生。11.类中的属性应声明为private,用公有的函数访问。
12.在编写派生类的赋值函数时,注意不要忘记对基类的成员变量重新赋值。13.构造函数应完成简单有效的功能,不应完成复杂的运算和大量的内存管理。14.不要在栈中分配类的实例,也不要生成全局类实例。
15.正确处理拷贝构造函数与赋值函数。
16.过程/函数中申请的(为打开文件而使用的)文件句柄,在过程/函数退出之前要关闭,除非要把这个句柄传递给其它函数使用。
九、可测试性
1.在同一项目组或产品组内,为准备集成测试和系统联调,要有一套统一的调测开关及相应信息输出函数,并且要有详细的说明。统一的调试接口和输出函数由模块设计和测试人员根据项目特性统一制订,由项目系统人员统一纳入系统设计中。
2.在同一个项目组或产品组内,调测打印出的信息串要有统一的格式。信息串中应当包含所在的模块名(或源文件名)及行号等信息。
3.在编写代码之前,应预先设计好程序调试与测试的方法和手段,并设计好各种调测开关及相应测试代码(如打印函数等)。
十、断言与错误处理
1.整个软件系统应该采用统一的断言。如果系统不提供断言,则应该自己构造一个统一的断言供编程时使用。
2.使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且是一定要作出处理的。
3.指向指针的指针及更多级的指针必须逐级检查。4.对较复杂的断言加上明确的注释。
5.用断言保证没有定义的特性或功能不被使用。
6.用调测开关来切换软件的DEBUG版和RELEASE版,而不要同时存在RELEASE版本和DEBUG版本的不同源文件,以减少维护的难度。
7.正式软件产品中应把断言及其它调测代码去掉(即把有关的调测开关关掉)。8.在软件系统中设置与取消有关测试手段,不能对软件实现的功能等产生影响。9.用断言来检查程序正常运行时不应发生但在调测时有可能发生的非法情况。
第四篇:java软件编程培训
最好的Java软件编程培训
西安雁塔尚学堂计算机学校创办于2009年,是陕西省培养计算机实用性人才的学校,学校以“程序运行人生,快乐魔力学堂”的口号名扬陕西,并且开创了V教学法等软件人才培养的模式先河。学校采用“理论+实践”并行的教学方式,使学生在这两者的结合中掌握一技之长,为社会培养和输送了大量的高级软件人才。
学校坐落于西安软件园交大捷普大厦,环境优美,更与国内外知名软件企业毗邻,人文气息浓厚。学校拥有自己的网站和机房供学生进行软件开发、设计等课程的实践。同时学校也是西安工业大学计算机与工程学院、陕西国际商贸学院、西安财经学院统计学院、陕西科技大学理学院、杨陵职业技术学 院等大学的实习就业项训基地。
开设课程软件编程培训,android高级课程,iphone高级课程
招生对象
1.iPhone培训课程面向希望把握历史性机遇,希望成为iPhone手机软件开发的紧缺人才。
2.计算机相关专业、大专以及以上学历。
3.本课程同样适用于希望了解iPhone手机软件开发,为未来业务转型奠定基础的企业技术团队。
免费复训 + 企业进阶课程 + 终身辅导
我们为学员专门开设QQ群、技术博客、微博等,学员到企业之后,如在技术和职业方向遇到任何瓶颈,都可以向导师请教。我们保持对行业和技术的高度敏感,不断优化和丰富课程内容,这些新技术毕业学员都可以免费学习,同时定期举办的技术讲座和活动,也是对学员免费开放的。
第五篇:软件编程学生毕业感言
介绍下学习软件专业的同学是怎样写毕业感言的在家呆了一个月说是休息不如说是一种煎熬,上了四年大学却连个工作都找不到?我自己都有点不敢相信,想想在大学悠闲的日子真是后悔莫及。后来一个同学跟我提到了嵌入式,也说到了xx,经过一番考察和搜集相关资料,最后我来到了xx,事实证明这是我长这么大做得最正确的决定。
在xx学习的四个月里,课程安排合理,各个阶段都分工明确,一套科学的培训流程让我受益匪浅。大学四年学到的东西很杂,在这里把相关的知识结合的很完美,经过一个月的c 语言强化训练让我打下了坚实的基础,再后来的系统编程,网络编程,文件i/o,多线程让我体现了不一样的c。从什么是c语言的编程风格,当时一点概念都没有,到慢慢的从老师那里学到了,现在良好的编程风格。以前听一个七期的师兄说过,c编程最后的强化训练要‘死人的’。现在想想,强度真的是很大。在这期间,俩字—值得!arm
是一个嵌入式最小系统的心脏,李老师也是最好的老师,讲的课逻辑清晰,教给我们的解决问题的方法也很好,我最喜欢老师的那个查找开发板出故障的方法,二分法,一个字—好!最后学的是驱动,以前提起驱动第一反映就是复杂,我从来没想过会跟驱动打上交道,因为我总感觉那是深不可测,我这样的初级学者的禁地,对我来说学驱动,是一件很‘恐怖’的事情。做第一个字符驱动实验,下课后何老师帮助我找问题,对我来说真的是很感动,对学生真的很好。后来通过学习编写字符设备驱动等程序,熟悉了驱动的框架以后才感到学习驱动原来也不是这么难嘛,只是你敢不敢踏出第一步,学到了这里也就学到了嵌入式的精髓。
最让我兴奋的是后来将在pc机上写的程序烧写到开发板上,程序运行开发板的灯亮灯灭蜂鸣器唱出儿时的歌谣,感动不是能够一两句话能够说出来的。
说到xx不能不提到这里的老师们,他们对传授知识的严谨态度,对学员问题的耐心讲解,学识的渊博,对中国嵌入式教育的贡献,都是我们的绝佳榜样,我心目中真正受的起老师这个尊称的人,在这里我学到了团队精神,我同样会把他带到工作中去,祝愿xx明天更美好,祝愿xx的老师们幸福安康!