发新帖本帖赏金 15.03元(功能说明)我要提问
12下一页
返回列表
打印

编程感触

[复制链接]
3622|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 1026869700 于 2016-4-3 22:35 编辑

    最近,经常见到一些高手写的程序,看完之后,除了惊讶、佩服,更多的是反思;为什么别人可以写出那么漂亮的程序?为什么别人的程序的数据结构设计的那么工整?为什么别人的程序结构写的那么工整?为什么别人的命名那么准确?等等很多地方。想想自己,写程序虽然不多,但是也有3年多了。为什么还是写的那么烂(是指在结构、命名和可读性),近一年虽然在编程思想上有了很多改变,可是结构和命名依旧很烂?自己什么时候才能做到那样,可是改变意味着要经受折磨。自己改如何面对?
   说说别人写的程序吧!很明显的,数据、程序、配置分开。
   关于系统数据结构设计: 根据整个系统的结构,对数据分好类,以及做好有可能操作的的准备,整个数据结构是以结构体为主打,将数据全部分成一类一类的。然后根据数据属性进行划分,进行结构体嵌套。嵌套到系统最顶层时,就剩那么几大类数据类型,那么当需要操作数据时,可以按结构一级一级索引下去。即使增加或删减数据,都很方便。整个系统中枚举、共用体与位域用的也是相当多的。程序中,很大一部分选项是可以在有限的属性中选择的,因此用了枚举,使程序的可读性更高。共用体和位域的联合使用,使程序的整体性和操作性变的更好,当需要写位时,用位域写入,需要读取时,再共用体中整体读出,可以将多个同一类的标志位划分到一个字节中,大量节约了系统空间。
   关于数据与程序分开:当一个系统的需求定下来之后,那么基本上结构已经定了,更多的是需要改一些参数,那么对于一些全系统或者在系统中存在于很多地方的常量来说,需要不停的去修改,(本人曾经是把它们定义成一个全局变量,需要改变时,去改初始值)我看到的最NB的程序是,整个程序中,基本上看不到数字。数字跑哪儿去了?到被宏替换掉了。用宏代替常量的好处是,程序的可读性很高。修改也很方便。(当我每次看到这种程序时,总会发出感慨:真是变态的设计啊!!)
   关于配置结构的设计:需求定了,系统逻辑就定了,可是有很多可以变化、调整的东西;例如:系统的端口转移、系统时钟、PWM初始参数、定时器的初始参数、.....(此处省略几百字)太多东西需要变化的。怎么搞???加入到一个配置文件中,用宏将他们代替掉,那么程序的可读性又提高了修改配置也方便了。还有那些预编译开关的设计,那可真是逻辑性太强悍了,本人明白原理,可是从来没有用过,实在是不知道该怎么用,对于那些把预编译用的活灵活现的人,我是佩服的十体投地。那可真是对系统的结构从需求提出的那一刻,就已经知道有哪些内容的大神级别的人搞的。今天就说到这里了。

打赏榜单

bestchao 打赏了 0.01 元 2016-04-07

21ic小能手 打赏了 5.00 元 2016-04-07

相关帖子

沙发
1026869700|  楼主 | 2016-4-3 22:29 | 只看该作者
yyy71cj 发表于 2016-4-3 22:07
认识深刻了???

认识是深刻了,可是改变却很难啊!

使用特权

评论回复
板凳
Simon21ic| | 2016-4-3 23:16 | 只看该作者
不同的人,确实天分不同,3年时间足够培养出一个写代码的高手了
其实没啥改变不了,每个项目按照这个做了,就能改变了,既然你都知道,那只是不愿意改变而已

使用特权

评论回复
地板
江枫渔火| | 2016-4-4 14:26 | 只看该作者
不要太难过,以免增加自己的鸭梨~
程序这个东西你也要大事化小小事化了。
一言难尽唉,
单片机的话,就是做好一个定时器,定义好数据结构,分清楚生产者和消费者就无大碍了~

使用特权

评论回复
5
罗飞1002| | 2016-4-6 17:21 | 只看该作者
江枫渔火 发表于 2016-4-4 14:26
不要太难过,以免增加自己的鸭梨~
程序这个东西你也要大事化小小事化了。
一言难尽唉,

能不能请大师说一下生产者和消费者

使用特权

评论回复
6
江枫渔火| | 2016-4-6 20:07 | 只看该作者
罗飞1002 发表于 2016-4-6 17:21
能不能请大师说一下生产者和消费者

误会了,我不是大师,我就是爱灌水,增加点人气~
所谓生产者,就是产生数据的地方,消费者,就是使用数据的地方。而数据,就是一块内存。

使用特权

评论回复
7
江枫渔火| | 2016-4-6 20:07 | 只看该作者
罗飞1002 发表于 2016-4-6 17:21
能不能请大师说一下生产者和消费者

误会了,我不是大师,我就是爱灌水,增加点人气~
所谓生产者,就是产生数据的地方,消费者,就是使用数据的地方。而数据,就是一块内存。

使用特权

评论回复
8
bestchao| | 2016-4-7 11:46 | 只看该作者
学习了

使用特权

评论回复
9
犹豫的大三| | 2016-4-7 12:01 | 只看该作者
楼主发出来几个你认为牛掰的程序让我们看看啊!毕竟有图有真相

使用特权

评论回复
10
落叶行健ywm| | 2016-4-7 13:14 | 只看该作者
这个是考多看多思考才能搞到手的。多模仿,多练习呗!没天赋就得练

使用特权

评论回复
11
洛理小子| | 2016-4-7 17:36 | 只看该作者
编程思想确实重要,跟着学习了

使用特权

评论回复
12
cuya| | 2016-4-7 20:46 | 只看该作者
yyy71cj 发表于 2016-4-7 17:09
typedef union{
        unsigned char bs[32];

不 niubi. 把动物与人混为一谈了。人是动物, 但动物不一定是人。
niubidedaima.animal.weight = 100, niubidedaima.people.sex = ?

这方面 ood 语言有天然优势。


使用特权

评论回复
13
cuya| | 2016-4-7 22:19 | 只看该作者
yyy71cj 发表于 2016-4-7 21:10
typedef enum {female=0, male=!female} peoplesex;

没有用。animal 的重量肯定不为 0, 所以 people 的 sex 永远是男人

使用特权

评论回复
14
江枫渔火| | 2016-4-7 23:05 | 只看该作者
思路很重要,具体到语法的花哨,其实能不用就不要用。
我认为优雅漂亮的代码不是花哨的技巧,而是用平易近人的语法,清晰的逻辑写出来的,针的。那才是境界。

使用特权

评论回复
15
1026869700|  楼主 | 2016-4-7 23:55 | 只看该作者
应网友的要求,贴出几张图。
第一张图是一个配置宏文件预览图,先看看代码整体结构,很漂亮。
第二张图是配置文件里面的部分代码结构。就是我说的硬件配置可修改宏。
第三张图是数据类型结构。这里定义整个系统的数据类型。
第四张图就是将数字全部用宏代替,放在一个文件夹里面,这样,不管怎么修改都方便了。
第五张图就是预编译开关,和程序主体。看起来很是工整。
还有一些结构更漂亮的,是在一些群里面看到的,现在找不到图片了。

QQ截图20160407232954.png (89.27 KB )

QQ截图20160407232954.png

QQ截图20160407233245.png (495.64 KB )

QQ截图20160407233245.png

QQ截图20160407234139.png (226.75 KB )

QQ截图20160407234139.png

QQ截图20160407234557.png (463.68 KB )

QQ截图20160407234557.png

QQ截图20160407234733.png (511.05 KB )

QQ截图20160407234733.png

使用特权

评论回复
16
1026869700|  楼主 | 2016-4-8 00:23 | 只看该作者
Simon21ic 发表于 2016-4-3 23:16
不同的人,确实天分不同,3年时间足够培养出一个写代码的高手了
其实没啥改变不了,每个项目按照这个做了, ...

既然都总结出来了,怎么会懒的走最后一步呢!要慢慢的以一种自己能接受的方式学会;如果像邯郸学步式的生拉硬套,最终会成为四不像。

使用特权

评论回复
17
Simon21ic| | 2016-4-8 01:23 | 只看该作者
1026869700 发表于 2016-4-8 00:23
既然都总结出来了,怎么会懒的走最后一步呢!要慢慢的以一种自己能接受的方式学会;如果像邯郸学步式的生 ...

生拉硬套、四不像都没关系,我的代码也是自己独有的,并不像别人的。只要自己用的爽就行
摸着石头过河,各种都尝试一下,好的留下,不好的放弃就行了

使用特权

评论回复
18
Simon21ic| | 2016-4-8 01:35 | 只看该作者
本帖最后由 Simon21ic 于 2016-4-8 01:44 编辑
1026869700 发表于 2016-4-7 23:55
应网友的要求,贴出几张图。
第一张图是一个配置宏文件预览图,先看看代码整体结构,很漂亮。
第二张图是配 ...

你这代码谁写的?
这种配置方式类似我8年前做一些代码,不过现在都已经放弃这种方式了
我举个例子吧,里面的宏提供的功能,很多都是参照stm32实现的,如果换成新塘的处理器咋办?
我现在的硬件配置方式:
https://github.com/versaloon/vsf ... TM32/hw_cfg_STM32.h

这个就不依赖处理器了,应用层代码可以这样:
if (ifs->hwcfg->usbd.pullup.port != IFS_DUMMY_PORT)
{
        uint8_t port = ifs->hwcfg->usbd.pullup.port;
        uint8_t pin = ifs->hwcfg->usbd.pullup.pin;
        vsfhal_gpio_init(port);
        vsfhal_gpio_clear(port, 1 << pin);
        vsfhal_gpio_config_pin(port, pin, GPIO_OUTPP);
}
换不同处理器,也不需要修改代码

使用特权

评论回复
19
ticomi| | 2016-4-8 08:22 | 只看该作者
Simon21ic 发表于 2016-4-3 23:16
不同的人,确实天分不同,3年时间足够培养出一个写代码的高手了
其实没啥改变不了,每个项目按照这个做了, ...

写代码是一回事,编程是另外一回事!

使用特权

评论回复
20
yuchl| | 2016-4-8 17:48 | 只看该作者
学习了!

使用特权

评论回复
发新帖 本帖赏金 15.03元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

137

帖子

15

粉丝