系统程序员成长计划-走近专业程序员

转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静 <xianjimli at hotmail dot com>

需求简述

用C语言编写一个双向链表。如果你有一定的C语言编程经验,这自然是小菜一碟。有的读者可能连一个小程序都没有写过,那也不用害怕,可以参考任何一本《数据结构》和C语言的书籍。先弄明白基本概念,把书上的代码看明白,再把代码抄到电脑里,保证编译过去,调试它到正常运行。反复这个过程,直到你能独立完成它为止。写第一行代码是很痛苦的,我培训过好几个同事,他们不是计算机系毕业的,开始在电脑前坐一整天,一行代码都敲不出来,我最早写程序时的情况也好不了多少,不过没有关系,迈出这一步就好了。

花1-3天时间,完成这个任务后,再继续往下阅读。

转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静 <xianjimli at hotmail dot com>

当你读到这里的时候,相信你已经独立写出了一个双向链表。恭喜你!迈出这一步可是值得庆祝的,现在你已经走在通往程序员的光明大道上了。不过你还是个业余程序员,那当然了,你才写出第一个程序呢!什么时候才能成为一个专业程序员呢?三年还是五年工作经验?其实不用的,你马上就可以了,我没有骗你,因为专业程序员与业余程序员之分主要在于一种态度,如果缺乏这种态度,拥有十年工作经验也还是业余的。

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

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

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

这里介绍一下作者本人喜欢的代码风格,这种代码风格也在作者所在团队中使用。这里的命名风格与GTK+代码相近,排版风格Linux内核代码相近。

命名要展示对象的功能。

文件名:单词小写,多个单词用下划线分隔。
如: dlist.c (这里d代表double,是通用的缩写方法)

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

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

注意:同样,一个函数只完成单一功能,不要用代码的长度来衡量是不是要把一段代码独立成一个函数。即使只有几行代码,只要它完成的是一项独立的功能,都应该提为一个单独的函数,而函数名可以直观的反应出它的功能。如果在给函数起名时遇到了困难,通常是函数设计不合理,应该仔细思考一下。

结构/枚举/联合名:首字母大写,多个单词连写。
如:struct _DListNode;

宏名:单词大写,多个单词下划线分隔
如:#define MAX_PATH 260

变量名:单词小写,多个单词下划线分隔。
如:DListNode* node = NULL;

面向对象的命名方式:

1.以对象为中心,采用主语(对象)+谓语(动作),取代传统的谓语(动作)+宾语(目标)。
如:dlist_append

2.第一个参数为对象,并用thiz命名。
如:dlist_append(DList* thiz, void* value);

3.对象有自己的生命周期,都有create和destroy函数。

排版布局要美观大方。

合理使用空行:

1.函数体之间用空行分隔。

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

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

4.类似的代码放在一起,和其它部分用空行分隔。比如宏定义,类型定义,函数声明和全局变量放在一起。

5.使用空行时,一行就够了,不要使用连续多个空行,那样让人感觉空荡荡。

合理使用空格:

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

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

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

4.其它有助让代码更美观的地方。

合理使用括号:

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

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

if(a > b)
{return c;
}

合理的缩进方式:

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

如:

if(a > b)
{for(i = 0; i < 100; i++){…}
}

遵从团队的习惯。这个是最重要的,一个团队就要像一个团队的样子,不管你的水平有多高,遵循团队的规则是一个程序员的基本素养。如果团队的规则确实不好,大家应该一起完善它。

做到这一点,你已经走近专业程序员了,重新做一遍练习吧。随着后面的学习,你就可以真正走进专业程序员这个行列了。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 内置模块之 asyncio(异步iO)

python3.0&#xff0c;标准库里的异步网络模块&#xff1a;select(非常底层) &#xff0c;第三方异步网络库&#xff1a;Tornado&#xff0c;gevent python3.4&#xff0c;asyncio&#xff1a;支持 TCP &#xff0c;子进程 现在的asyncio&#xff0c;有了很多的模块已经在支持…

前端js文件合并三种方式

最近在思考前端js文件该如何合并&#xff0c;当然不包括不能合并文件&#xff0c;而是我们能合并的文件&#xff0c;想了想应该也只有三种方式。 三个方式如下&#xff1a; 1. 一个大文件&#xff0c;所有js合并成一个大文件&#xff0c;所有页面都引用它。 2. 各个页面大文件&…

我们的系统检测到您的计算机网络中存在异常流量_如何建立我们的网络防线?入侵检测,确保我们的网络安全...

目前我们的网络安全趋势日益严峻&#xff0c;那么如何利用入侵检测系统确保我的网络安全呢&#xff1f;入侵检测又是什么呢&#xff1f;网络安全入侵检测技术是为保证计算机系统的安全&#xff0c;而设计与配置的一种能够及时发现并报告系统中未授权或异常现象的技术&#xff0…

sql修改链接服务器名称,SQL Server 创建链接服务器的脚本,自定义链路服务器的简短名称...

USE [master]GO/****** Object: LinkedServer [SQL01] Script Date: 2020/4/9 11:51:17 ******/EXEC master.dbo.sp_addlinkedserver server N‘SQL01‘, srvproductN‘‘, providerN‘SQLNCLI‘, datasrcN‘域名或者IP‘/* For security reasons the linked server remot…

mybatis $和#源代码分析

JDBC中&#xff0c;主要使用两种语句&#xff0c;一种是支持参数化和预编译的PreparedStatement,支持原生sql,支持设置占位符&#xff0c;参数化输入的参数&#xff0c;防止sql注入攻击&#xff0c;在mybatis的mapper配置文件中&#xff0c;我们通过使用#和$告诉mybatis我们需要…

git 命令详解和常见问题解决

功能一 提交&#xff1a;1:git init # 初始化&#xff0c;表示即将对当前文件夹进行版本控制2:git status # 查看Git当前状态&#xff0c;如&#xff1a;那些文件被修改过、那些文件还未提交到版本库等。3:git add . # 添加当前目录下所有文件到版本…

辞职日记----记录31岁的程序员跳槽心态

vcleaner http://topic.csdn.net/u/20080626/23/8f6a8ecc-c072-43ee-bf2d-7ac2286b6805.html http://topic.csdn.net/u/20080704/23/858fc00d-ec14-4db7-93be-34903b7f157a.html 转载他的离职日记&#xff0c;有许多东西值得我们认真思考&#xff0c;人活着到底为了什么&a…

从Android源码的角度分析Binder机制

IPC 为了弄懂IPC的来龙去脉&#xff0c;我将从以下三个方面为大家来讲解&#xff0c;希望对大家理解IPC会有帮助 什么是IPC IPC是Inter Process Communication的缩写&#xff0c;其意思就是进程间的通信&#xff0c;也就是两个进程之间的通信过程。我们都知道在Android系统中&a…

excel vba 调用webbrowser_VBA 公式与函数

一, 在单元格中输入公式的3种方法:1) 用VBA在单元格中输入普通公式Sub formula_1() Range("d2") ("B2 * C2") End Sub运行程序后,在D2的单元格内显示的是公式 B2 * C2 ,并非程序返回值.下文(二)中会介绍另外一种直接返回值的方式想要通过程序一…

内部类可以引用它的包含类的成员吗?有没有什么限制?

最近看到一道面试题&#xff1a;内部类可以引用它的包含类的成员吗&#xff1f;有没有什么限制&#xff1f; 答案大部分都是这样子的&#xff1a; 完全可以。如果不是静态内部类&#xff0c;那没有什么限制&#xff01; 一个内部类对象可以访问创建它的外部类对象的成员包括私有…

松下NPM服务器怎么备份系统,松下(Panasonic)-NPM校正amp;CPK完整版教程,一步步带你成为SMT设备大神!...

马上注册&#xff0c;结交更多技术专家&#xff0c;享用更多功能&#xff0c;让你轻松解决各种三星贴片机问题您需要 登录 才可以下载或查看&#xff0c;没有帐号&#xff1f;立即注册 xa8f80375060fa05b8aebe69ffa21080c.gif (5.26 KB, 下载次数: 3)2019-8-12 00:02 上传f5aae…

Python 模块之科学计算 Pandas

目录 一、Pandas简介 数据结构 二、Series series 的创建 Series值的获取 Series的运算 Series缺失值检测 Series自动对齐 Series及其索引的name属性 三、DataFrame 创建 Index对象 通过索引值或索引标签获取数据 自动化对齐 四、文件操作 文件读取 数据库数据…

根据 设备名(br0/eth0/em0)称获取 当前机器的IP地址与子网掩码信息

#!/usr/bin/env python 根据 设备名(br0/eth0/em0)称获取 当前机器的IP地址与子网掩码信息import socket, struct, fcntldef get_ipaddress(ifname eth0):s socket.socket(socket.AF_INET, socket.SOCK_DGRAM)return socket.inet_ntoa(fcntl.ioctl(s.fileno(),0x8915, # SI…

我的程序生涯

本文仅为爱好程序及向往真正之程序员者所作&#xff0c;其余人等可忽略下文。 如今&#xff0c;接触CS几近八年&#xff0c;不学无术&#xff0c;所精之物鲜也&#xff0c;以至一事无成。 现回忆吾程序之生涯&#xff0c;以整理繁杂之心绪。 1. 接触计算机和编程语言 02年始大…

机器学习中qa测试_如何对机器学习做单元测试

作者&#xff1a;Chase Roberts编译&#xff1a;ronghuaiyang导读养成良好的单元测试的习惯&#xff0c;真的是受益终身的&#xff0c;特别是机器学习代码&#xff0c;有些bug真不是看看就能看出来的。在过去的一年里&#xff0c;我把大部分的工作时间都花在了深度学习研究和实…

项目宝提供的服务器,开源WebSocket服务器项目宝贝鱼CshBBrain V4.0.1 和 V2.0.2发布

开源WebSocket服务器项目宝贝鱼CshBBrain V4.0.1 和 V2.0.2发布更新的功能列表如下&#xff1a;1.解决开启广播消息开关时&#xff0c;不能同时接入2个客户端的重大缺陷。2.对广播消息做了重大优化&#xff0c;从以前一个线程发送广播消息进化到使用工作线程池中的线程并行的发…

c# 无损高质量压缩图片代码

/// 无损压缩图片 /// <param name"sFile">原图片</param> /// <param name"dFile">压缩后保存位置</param> /// <param name"dHeight">高度</param> /// <param name"dWidth"…

一个从文本文件里“查找并替换”的功能

12345678910111213141516171819202122232425# -*- coding: UTF-8 -*-file input("请输入文件路径:") word1 input("请输入要替换的词:") word2 input("请输入新的词&#xff1a;") fopen(file,"r") AAAf.read() count 0 def BBB()…

机器学习算法之 KNN

K近邻法(k-nearst neighbors,KNN)是一种很基本的机器学习方法了&#xff0c;在我们平常的生活中也会不自主的应用。比如&#xff0c;我们判断一个人的人品&#xff0c;只需要观察他来往最密切的几个人的人品好坏就可以得出了。这里就运用了KNN的思想。KNN方法既可以做分类&…

安装云端服务器操作系统,安装云端服务器操作系统

安装云端服务器操作系统 内容精选换一换SAP云服务器规格在申请SAP ECS之前&#xff0c;请参考SAP标准Sizing方法进行SAPS值评估&#xff0c;并根据Sizing结果申请云端ECS服务器资源&#xff0c;详细信息请参考SAP Quick Sizer。SAP 各组件最低硬盘空间、RAM&#xff0c;以及软件…