程序员成长之路(一)_附教程下载

本文深入探讨了成为一名专业程序员的关键要素,不仅关注于技术层面的代码规范,如命名规则、排版布局和封装原则,还强调了培养专业态度的重要性。通过对比业余程序员与专业程序员在代码风格、工作态度和思维方式上的区别,文章旨在帮助读者快速提升编程技能,迈向专业人士的行列。

    Java程序设计入门教程.pdf 

        什么时候才能成为一个专业程序员呢?三年还是五年工作经验?其实不用的,你马上就可以了,我没有骗你,因为专业程序员与业余程序员的区别主要在于一种态度,如果缺乏这种态度,拥有十年工作经验也还是业余的。

什么态度?专业态度!也就是星爷常说的专业精神。专业态度有多种表现形式,以后我们会一一介绍的。这里先介绍一下有关形象的态度,专业的程序员是很注重自己的形象的,当然程序员的形象不是表现在衣着和言谈上,而是表现在代码风格上,代码就是程序员的社交工具,代码风格可是攸关形象的大事。

有人说过,傻瓜都可以写出机器能读懂的代码,但只有专业程序员才能写出人能读懂的代码。作为专业程序员,每当写下一行代码时,要记得程序首先是给人读的,其次才是给机器读的。你要从一个业余程序员转向专业程序员,就要先从代码风格开始,并从此养成一种严谨的工作态度,生活上的不拘小节可不能带到编程中来。

代码风格有很多种,Windows 和Linux都有自己主流的代码风格,每个团队、每个公司也可能有自己的代码风格,争论哪种风格好哪种风格坏根本没有什么意义。有助于其他程序员理解的代码风格都是可以接受的,因为遵循特定代码风格的目的就是为了便于交流。

1 命名要展示对象的功能

1.1 文件名

文件名一定要能传达文件的内容信息,别人一看到文件名就能知道文件中放的是什么内容。把一个类的代码或者某一类代码放在一起是好的习惯,这样就很容易给文件取一个直观的名字。业余爱好者常常把很多没关系的代码糅到一个文件中,结果造成代码杂乱无章,也很难给它取一个恰当的名字.

1.2 函数名

单词小写,多个单词用下划线分隔。如:find_node

一个函数只完成单一功能。不要用代码的长度来衡量是否要把一段代码独立成一个函数。即使只有几行代码,只要这些代码完成的是一项独立的功能,都应该将其写为一个单独的函数,而函数名要能够直观地反应出它的功能。如果在给函数起名时遇到了困难,通常是函数设计不合理,则应该仔细思考一下并对函数进行相应修改。

1.3 结构/枚举/联合名

首字母大写,多个单词连写。如:struct _DListNode

宏名:单词大写,多个单词下划线分隔。

如:#define MAX_PATH 260

变量名:单词小写,多个单词下划线分隔。

如:DListNode* node = NULL;

1.4 面向对象命名方式

(1) 以对象为中心,采用“主语(对象)+谓语(动作)”的形式来命名,取代传统的“谓语(动作)+宾语(目标)”的形式。

如:dlist_append

(2) 第一个参数为对象,并用thiz命名。

如:dlist_append(DList* thiz, void* value);

(3) 对象有自己的生命周期,因此都有相应的创建和销毁函数。

2 排版布局要美观大方

2.1 合理使用空行

函数体之间用空行分隔。

结构/联合/枚举声明用空行分隔。

不同功能的代码块之间用空行分隔。

将功能类似的代码(如宏定义、类型定义、函数声明和全局变量)放在一起,和其他部分用空行分隔。

使用空行时,一行就够了,不要使用连续多个空行,那样会让人感觉代码段空荡荡的。

2.2 合理使用空格

等号两边用空格。如:int a = 100;

参数之间用空格。如:test(int a, int b, int c)

语句末的分号与前面内容不要加空格。如:test(a, b, c);

其他能让代码更美观的地方。

2.3 合理使用括号

用括号分隔子表达式,不要只靠默认优先级来判断。((a && b) || (c && d))

用括号分隔if/while/for等语句的代码块,那怕代码只有一行。

2.4 合理缩进

每一级都正常缩进,用tab缩进取代空格缩进(Linux内核源代码也遵循此规则)。用空格缩进的目的是防止代码因编辑器的tab宽度不同而变乱,这个担心现在是多余的 了,代码编辑器都支持tab宽度设置了。如果代码缩进的层次太多(比如超过三层),则可能是代码设计上出了问题。

2.5 遵从团队的习惯

这一点是最重要的,一个团队就要有一个团队的样子,不管你的水平有多高,遵循团队的规则是一个程序员的基本素养。如果团队的规则确实不好,大家应该一起完善它。做到这一点,你已经离成为专业程序员这个目标更近一步了,重新做一遍练习吧。随着后面的学习,你就可以真正走进专业程序员这个行列了。

3 谁动了你的隐私

3.1 什么是封装

人有隐私,程序也有隐私。有隐私不是什么坏事,问题是不应该让别人知道自己的隐私,否则可能会对自己造成不小的伤害,甚至会连累相关人物跟着倒霉。程序隐私的暴露,造成的不良影响不一定会泄露个人隐私那么大,但也不容小觑。封装就是要保护好程序的隐私,不该让调用者知道的事,就坚决不要暴露出来。

3.2 为什么要封装

总的来说,封装主要有以下两大好处。

隔离变化。程序的隐私通常是程序最容易变化的部分,比如内部数据结构、内部使用的函数和全局变量等,我们需要把这些代码封装起来,从而让它们的变化不会影响系统的其他部分。

降低复杂度。接口最小化是软件设计的基本原则之一,最小化的接口容易被理解和使用。封装内部实现细节,只暴露最小的接口,会让系统变得简单明了,在一定程度上降低了系统的复杂度。

3.3 如何封装

总的来说,封装主要有以下两大好处(具体影响后面再说)。隔离变化。程序的隐私通常是程序最容易变化的部分,比如内部数据结构、内部使用的函数和全局变量等,我们需要把这些代码封装起来,从而让它们的变化不会影响系统的其他部分。降低复杂度。接口最小化是软件设计的基本原则之一,最小化的接口容易被理解和使用。封装内部实现细节,只暴露最小的接口,会让系统变得简单明了,在一定程度上降低了系统的复杂度。封装过程中应注意一下问题:

内部函数通常实现一些特定的算法(如果具有通用性,应该放到一个公共函数库里),对调用者没有多大用处,但它的暴露会干扰调用者的思路,让系统看起来比实际的复杂。函数名也会污染全局名字空间,造成重名问题。它还会诱导调用者绕过正规接口走捷径,造成不必要的耦合。隐藏内部函数的做法很简单。

(1)在头文件中,只放最少的接口函数的声明。

(2)在C文件中,所有内部函数都加上static关键字。

全局变量始终都会占用内存空间,共享库的全局变量是按页分配的,哪怕只有一个字节的全局变量也占用一个页,这样一来就会造成不必要内存空间浪费。全局变量也会给程序并发造成困难,想把程序从单线程改为多线程将会遇到麻烦。重要的是,如果调用者直接访问这些全局变量,会造成调用者和实现者之间的耦合。

4 Write once, run anywhere(WORA)

4.1 专用链表和通用链表各自的特点与适用范围

专用链表在这里是指该链表的实现和调用耦合在一起,只能被一个调用者使用,而不能单独在其他地方被重用。通用链表则相反,它具有通用性,可以在多处被重复使用。尽管通用链表相对专用链表来说有很多优越之处,不过草率地断定通用链表比专用链表好也是不公正的,因为它们都有自己的优点和适用范围。()

注意 在本节中,为了避免读起来拗口,我把双向链表简写成链表了,希望大家不要介意。

专用链表的优点

考虑到链表是最常用的数据结构之一,很多地方都会用到它,实现通用的链表会更有价值。接下来我们要实现一个通用的链表,不过请大家记住,实现通用的链表并不是我们的目标,而是我们学习软件设计方法的手段。前面我许诺过要以简单的数据结构讲述复杂的软件设计方法,链表就是其中的载体之一。

 

Java程序设计入门教程.pdf

 

 

 

  C++是在C语言的基础上发展而来的,但C++又可视为是门全新的语言,C++独有的面向对象特性使其极具生命力,获得了众多软件厂商和开发人员的青睐。 《程序员成长课堂:C++标准教程光盘)》内容共分4篇11章。其中,第1篇是C++概述篇,主要内容包括:C++的起源和特点、C++源程序的构成、C与C++的比较、C++代码规范、排版风格、命名规范以及代码设计风格等;第2篇是C++基本语言篇,主要内容包括:C++基本数据类型、表达式、运算符、操作符、C++语句以及C++标准模板库等;第3篇是C++面向对象编程篇,主要内容包括:类和对象、继承、多态、运算符重载等;第4篇是C++编程实践篇,通过教学管理系统的开发实例,讲解如何使用C++进行实际开发。 全书配合了大量实例及代码说明,随书光盘中含有视频讲解,非常适合入门读者阅读,以迅速掌握C++开发技术。对于已有相关编程经验的读者,《程序员成长课堂:C++标准教程光盘)》也可作为学习和开发的参考用书。 第篇 C++概述 第1章 由C迁移到C++ 2 第2章 C++代码规范 11 第二篇 C++基本语言 第3章 C++数据类型 40 第4章 表达式 96 第5章 C++语句 106 第6章 标准模板库STL 130 第三篇 C++面向对象编程 第7章 类 148 第8章 类的初始化、赋值和析构 169 第9章 模板 190 第10章 面向对象程序设计 213 第四篇 C++编程实践 第11章 教学管理系统的C++实现 260 录A Visual C++菜单中文注释 299 录B Visual C++操作技巧小代码 302
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值