首页
社区
课程
招聘
[分享]我的演讲<程序员的革命>
发表于: 2011-9-1 08:36 27806

[分享]我的演讲<程序员的革命>

2011-9-1 08:36
27806
收藏
免费 0
支持
分享
最新回复 (83)
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
76
精彩,~顶涛哥~~~~~
顺带一说,易语言就是这样的,把  != 号换成了 ≠  把 >= 换成了 ≥  

建议楼主研究下 易语言 ,简直就是异曲同工之妙~

顺带一说,正如楼主所言,新科学不被旧学者接受,所以,易语言的处境也正如楼主所说~~~~
易语言官网 (我不是卖广告的`):http://www.dywt.com.cn/index.htm
2012-12-3 16:06
0
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
77
帖子的回复基本都是顶楼主的,说明那帮学生根本本就是没水平的一帮野猴子~

只能说,楼主,你找错对象授课了~~~
2012-12-3 16:25
0
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
78
再次震撼,对楼主的敬仰如滔滔江水~~~~~~~
2012-12-3 16:54
0
雪    币: 164
活跃值: (39)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
79
留着晚上下班看~
2012-12-4 08:24
0
雪    币: 156
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
80
这个必须顶。LTT威武
2012-12-4 09:18
0
雪    币: 347
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
81
这个要看一下
2012-12-4 09:29
0
雪    币: 327
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
82
新东西总是会受到旧体制的质疑的。望楼主多多分享自己的东东。是不是考虑把这个思想写个专题供论坛的大伙儿学习学习呢~~~
2012-12-4 09:59
0
雪    币: 239
活跃值: (190)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
83
涛哥的视频我看了,其中的一些想法与我以前的想法一致,那就是图形化编程,但我思考了这么多年,一直没有把其中一些细节想清楚 ,
比如一些函数十分大时,图形化咋表示?变量太多了,图形化咋个化法?

这种偿试,我想已有人走过了,看看易语言吧,虽然他并没有怎么图形化,但已走了一步了,这东西用起来就是不方便,因为他失去了C++的灵活性,适用于初级使用者,不适合高级场合

我建议涛哥可以换一种思路,涛哥的主要思想是提高编程效率,提高程序可理解性,提高代码安全质量。
其实对于 一个合格的C++程序员.你写的代码他是应该能看得懂的,唯一难懂的是,代码量太大,前后关联不起来,这才是最大的问题所在。

如果能减少代码量,其理解时间
与图形化编程,减少大脑阅读代码的时间相比,减少代码量更能减少理解时间。

这两年我基本上不去想图形化编程的问题。我没有找到他的实用性在哪里,

我下面举一个例子,看看怎么减少代码量,这是我工作中遇到实际问题,现在已解决
例子为网络数据包组包代码

如果有一个网络程序,需要进行二进制组包发送,当然这不是 asp之类的基本字符的协议,而是二 进制协议,在数据包中,含有不定长字符串,例子主要是讲怎么处理协议中含有不定长数据,如果协议中每个成员都是定长,那直接使用结构体来表示十分简单,不在本文讨论范围。

如果你的协议包中含有如下数据,咋处理呢?
DWORD a;
DWORD b;
string   c;//一个字符串
block d;//一个二进制流

一般处理流程如下,
1.往缓冲区写入两个DWORD,
2.再往缓冲区里写入字符串C的长度USHORT,再写入字符串C
3.写入D长度,再写入D

上面的做法安全不安全?不安全,表现在哪里,如果我协议变化了,我需要再往里面添加一个字符串,咋办呢?简单,修改代码,再添加第四步,但如果你服务器端修改了,下班了,累了,想放明天来修改客户端(我很懒散,下班后决不写代码,决不延时下班)。可以明天又忘了修改代码,然后编译,又懒得去测试,下午别人测试时,说程序崩溃了,
如果我想起了客户端没有修改,那好,去修改吧,读的顺序也是一样,

突然有一天,我又想修改一下协议,我觉得,后面那个字符串应该放前面去,好看一些(完善主义);于是又去修改,修改完服务器又下班了,明天又忘了修改客户端

这样看来,这工作量大,存在安全隐患,咋办呢。

总结上面方式 存在 的 问题:
问题1:代码量大
问题2:不方便更新协议,协议更新的话,尤其是其中的变量位置变化时,怕忘记修改对应代码
问题3:代码阅读性不佳,如果没有文档,别人看不清楚你的协议内容,时间长了,你自己都搞不清楚 。

这样看来还是结构体好用,如果用结构体去解析这个数据包,那方便许多 ,但是C++不支持这样的结构体,不支持含有不定长成员进行序列化,只支持定长成员序列化,咋办?

那好,看看下面的编程方式 如何 ?(灵感来自于googlebuffer,效率肯定比他高许多,方便许多)

class tt :public TXPackBuffer<tt>
{
public:
       
        TXRawValue<DWORD>        a;
        TXRawValue<DWORD>        b;
        CXStringValueA                c;
        TXBlockValue<BYTE>         c;

} tt;

写数据时
tt.SetBuffer( buffer,size );
tt.a = 1;
tt.b=2;
tt.c="test";
tt.c.SetBlock( "aaa",3);
int nRet = tt.ReadBuffer( outbuffer,outsize );//序列化到outbuffer,返回长度nRet

读数据时很简单

bool bRet = tt.ParserBuffer(outbuffer,nRet);//bRet 可以检测数据包是满足解析要求
DWORD a = tt.a;
string c = tt.c;

解析:
上面是一个类,看起来像是结构体,用起来跟结构体差不多,可以实现数据序列化,和解析 。
对变量赋值没有先后顺序,随便你咋样都行。
这样可以解决上面所有问题,
使得代码便于阅读(肯定不适合非专业人员),

无论是编程质量,代码量,还是效率,或是阅读,后者都优于 前者,

总结:

其实,对于 如何提高编程效率,这个问题,boost 是走在前面的,那就是库化,模块化,定制好一些模块,供大家使用,比如界面库,网络库,文件库等,进行封装,更易于使用,更安全,更效率,这才是硬道理 。
至于 图形化编程,有一定道理 ,但不能解决根本 问题,因为图形化编程,没有解决代码量大的问题,而且 有可能会损失一定C++的灵活性。
一些高级脚本 语言,解决了C++编程量大问题,但他们的缺点,大家都知道,就不多说了。
总之,条条大道通罗马,思路活跃才是最重要的,解决问题的方法有许多种,不要局限于小细节,不要拘泥于符号,图形,这些小细节。这些小细节随时都可以解决。解决大问题才是王道。
至于 涛哥的想法,你可以深入一些,细致一些,如果你解决了关键问题,有可能会成为一个神话。

建议楼主去写书,把现有的这种C++编程风格整理一下子,
现在许多 人在判断变量相等的时候,都是if( a==0 )...(教科书都是这样写的,我以前也是这样写的)
这样写不安全,容易忘记少写一个等号,写成if(a=0)...,这样的错误搞死你,浪费时间在调试纠错上面。
其实将常量 与变量变换一下就好 了,写成if(0==a)...
这样不会出错,如果少写了,会编译不成功。

还有检查函数返回值为BOOL时,许多 人这样检查,if( ret == TRUE )....

这样是不对的,应该写成if(ret)...,或者if( 0!=ret )...才对,因为BOOL和bool是两个不相同的东西。BOOL是int类型

如果能在中国养成一个良好的编程习惯,那将是一大进步,改变教育现状也是一种解决安全编程的方法。
2012-12-4 11:17
0
雪    币: 152
活跃值: (107)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
84
努力去实现吧,只纠结于如何实现,不要计较礼貌问题。
2012-12-4 12:04
0
游客
登录 | 注册 方可回帖
返回
//