写这篇之前我先絮叨两句,印象中很久前有一个家伙给我Mail问我user-agent的相关,往来数封信后,问了我是干嘛的,苏洋同学自然是诚实的回复他,高三应届小P孩了,于是乎,便没了后文,真心的希望那个家伙是了解了user-agent以及的不同,而不是因为鄙夷我这个高中生还继续去Google过期的AD…
下面是一条旧博客的评论,今天看留言看到的,有点感触,于是写一篇日志。
大一的时候学过点vb不过现在都学B/S的东东了.每在意过vb!
本条评论由 keelii 于 2009, May 23, 3:14 PM 发表 #1
作为Code fans & Vb fans的我,对于这个问题我打算这么回复一下,
我不打算讨论VB重要与否,以及C时如何从B的影子中走出的,其实语言都一样的,只是一个工具而已,就和我们学英语日语一直,只是为了表达我们的想法。
唯一不同的是,语言的语法语义有别,比如dim在vb中是声明变量,而到了c就只能作为变量以及函数名称,printf在c中是标准输出函数,但是到了vb里就只能充当变量和函数名一样了。
点击阅读全文可以继续浏览哦~
另外无论是C/S还是B/S只要是编程语言就是可以实现的,区别只是在于实现的难易以及效率了,对于熟悉的人来说一句代码将会比菜菜的10句代码更有效果的哦~
说了这句话不知道某只猫兄会不会来砸我…
上面的或许keelii会觉得有点空,那么我们来个实际的吧。
考验程序效率的方法无非是压力测试,我这里列举一个简单的,多叉树统计字符个数。basic对于字符操作一直是弱项,由于数据类型为ole_txt[需要初始化],所以basic中处理字符是最痛苦的,但是看过本文或许你的观点会改变一些,当然使用内存操作以及内嵌其他语言的手段也可以大幅提高效率,我们暂且不谈。
孟子曰:“舜发于畎亩之中,傅说举于版筑之间,胶鬲举于鱼盐之中,管夷吾举于士,孙叔敖举于海,百里奚举于市。故天将降大任于是人也,必先苦其心志,劳其盘骨,儿其体肤,空管其身行,指乱其所为,所以动心忍性,曾益其所不能。人恒过,然后能改。困于心,衡于虑,而后作。徵于色,发于声,而后喻。入则无法家拂士,出则无敌国外患者,国恒亡。然后知生于忧患难与共,而死于安乐也。”
上面这段358字节的语段是孟子的告天下,我很喜欢~就用它来现身说法了。
下面有一段程序,可以说写的比较草,但是实现了功能。
http://zhidao.baidu.com/question/28498709.html
'要准确地统计字数,可逐一将字符串转换为ASCII码,依据其值判断是为中文字符还是英文字符。0——127之间的为大小写字母及数字、半角标点符号、回车、换行等,中文字符的ASCII值则不在0——127之列了。这样,纯汉字的字数统计是很容易的,倒是英文的统计复杂,因为英文统计应以单词为单位,而要判断是否为单词并不是简单的事。我们可以这么处理:如果被检测的字符为大小写字母,则判断其后面的字符是否为一个单词的标志(如空格、标点符号、回车符等),如是,则判断为一个单词。 '以下代码能较准确地统计出TextBox控件中的中、英文字数和数字字符数,并将全部字节数(含各种控制符如回车等)也统计出来。适用于中英文编排环境。 '注释:窗体级声明 Dim c As Long, e_word As Long 注释:中英文字数 Dim Num As Long, s As Long 注释:数字及全部字符数 '注释:统计—— Private Sub Command1_Click() Dim Str As String 注释:总字符 Dim k As Long 注释:计数器 Dim tmpStr As String 注释:逐一检测的字符 c = 0: e_word = 0: Num = 0: s = 0 注释:清空变量 Str = Text1.Text & " " 注释:加一空格便于意外时计算最后一个字符 For k = 1 To Len(Str) - 1 tmpStr = Mid$(Str, k, 1) If Asc(tmpStr) >= 65 And Asc(tmpStr) <= 90 Then 注释:小写字母 If Asc(Mid$(Str, k + 1, 1)) <= 64 Then e_word = e_word + 1 If Asc(Mid$(Str, k + 1, 1)) > 90 And Asc(Mid$(Str, k + 1, 1)) < 97 Then e_word = e_word + 1 If Asc(Mid$(Str, k + 1, 1)) > 122 Then e_word = e_word + 1 If Asc(Mid$(Str, k + 1, 1)) = 39 Or Asc(Mid$(Str, k + 1, 1)) = 45 Then e_word = e_word - 1 注释:是符号注释:或-时 ElseIf Asc(tmpStr) >= 97 And Asc(tmpStr) <= 122 Then 注释:大写字母 If Asc(Mid$(Str, k + 1, 1)) < 65 Then e_word = e_word + 1 If Asc(Mid$(Str, k + 1, 1)) > 90 And Asc(Mid$(Str, k + 1, 1)) < 97 Then e_word = e_word + 1 If Asc(Mid$(Str, k + 1, 1)) > 122 Then e_word = e_word + 1 If Asc(Mid$(Str, k + 1, 1)) = 39 Or Asc(Mid$(Str, k + 1, 1)) = 45 Then e_word = e_word - 1 注释:是符号注释:或-时 ElseIf Asc(tmpStr) >= 48 And Asc(tmpStr) <= 57 Then 注释:阿拉伯数字数字 If Asc(Mid$(Str, k + 1, 1)) < 48 Or Asc(Mid$(Str, k + 1, 1)) > 57 Then Num = Num + 1 ElseIf Asc(tmpStr) > 127 Or Asc(tmpStr) < 0 Then 注释:中文字符 c = c + 1 End If Next s = LenB(StrConv(Text1.Text, vbFromUnicode)) 注释:全部字符 MsgBox "本文共有:" & vbCrLf & vbCrLf & "汉字字数: " & c & _ " 个 (含全角标点)" & vbCrLf & "英文单词: " & e_word & " 个 (不含半角标点)" & vbCrLf & _ "数字: " & Num & " 个" & vbCrLf & "全部字节: " & s & " 个", vbInformation, "字数统计" End Sub |
再次说明上面这个是随手搜索的百度得到的一个答案..不是刻意找麻烦的哦~
在过程前加一句
Dim tim As Single: tim = Timer |
过程结束前的对话框前加一句
MsgBox "处理完成,消耗时间: " & Format(Timer - tim, "@@@@@@") & " ms" |
然后叫它处理一下孟子的告天下…
弹出结果之后又弹出了一个对话框,显示0.015625ms…
我的笔记本由于长期开始或许影响了运算速度,请作者别介意哈~
但是苏洋同学还是觉得不爽了…程序就是要节约生命的~于是乎,修改一下吧。
Option Explicit Dim lngZH As Long, lngEN As Long, lngNum As Long, lngTotal As Long Private Sub Command1_Click() lngZH = 0: lngEN = 0: lngNum = 0: lngTotal = 0 Dim tim As Single: tim = Timer Dim strTmp As String, strChar As String, strNext As String Dim lngLength As Long, lngIndex As Long, lngChar As Long lngLength = 0: lngIndex = 0 strTmp = Text1.Text & " " lngLength = Len(strTmp) - 1 For lngIndex = 1 To lngLength strChar = Mid$(strTmp, lngIndex, 1) lngChar = Asc(strChar) If lngChar >= 65 And lngChar <= 90 Then strNext = Mid$(strTmp, lngIndex + 1, 1) lngChar = Asc(strNext) If lngChar <= 64 Then lngEN = lngEN + 1 If lngChar > 90 And lngChar < 97 Then lngEN = lngEN + 1 If lngChar > 122 Then lngEN = lngEN + 1 If lngChar = 39 Or lngChar = 45 Then lngEN = lngEN - 1 ElseIf lngChar >= 97 And lngChar <= 122 Then strNext = Mid$(strTmp, lngIndex + 1, 1) lngChar = Asc(strNext) If lngChar < 65 Then lngEN = lngEN + 1 If lngChar > 90 And lngChar < 97 Then lngEN = lngEN + 1 If lngChar > 122 Then lngEN = lngEN + 1 If lngChar = 39 Or lngChar = 45 Then lngEN = lngEN - 1 ElseIf lngChar >= 48 And lngChar <= 57 Then strNext = Mid$(strTmp, lngIndex + 1, 1) lngChar = Asc(strNext) If lngChar < 48 Or lngChar > 57 Then lngNum = lngNum + 1 ElseIf lngChar > 127 Or lngChar < 0 Then lngZH = lngZH + 1 End If Next lngTotal = LenB(StrConv(Text1.Text, vbFromUnicode)) MsgBox "处理完成,消耗时间: " & Format(Timer - tim, "@@@@@@") & " ms" MsgBox "本文共有:" & vbCrLf & vbCrLf & "汉字字数: " & lngZH & " 个 (含全角标点)" & vbCrLf & "英文单词: " & lngEN & " 个 (不含半角标点)" & vbCrLf & "数字: " & lngNum & " 个" & vbCrLf & "全部字节: " & lngTotal & " 个", vbInformation, "字数统计" End Sub |
修改完后出现一个小问题…告天下对于刚刚的程序来说数据量太小了,
于是我换成了”暮光之城 破晓.txt” 大约是292kb,运行后弹出0.109375ms。
还凑乎吧~数据量提高了750倍后仅仅多用了0.08ms多,如果把结果除以750
等量的话,那么我们的效率高了多少呢~我的这个修改也是很简单的,还是一样的算法,况且这个多叉树已经写的很完善了,
我没有进行修改,修改的仅仅是细节而已。
有时候我们不在意的细节,会使得结果造成很大的区别。
无论是vb,.net,还是c#,css等,道理是相同的。
当然术业有专攻,比如处理数据,还是c来的快,
遍历网页元素,我们绝对会选择css而不是js。
keelii同学,这个只是一个浅显的例子,
但是可以说明一个简单的道理,学校里学到的永远是不够的,这句话已经有很多人和我说过了,
我现在也送给你,在学习的路上,我们要学会慎独。(俺还没有专门的学过计算机的说)
有时候看起来越是简单的东西,细节方面越是需要我们去注意。
这篇文章由苏洋乱笔写下,如有冲突,还请海涵。
如果有错误的话,欢迎指正。



@uoian 涉猎未尝不可的吧~现在的前端开发以及软件开发的Tester不都是要求精通或者熟悉很多方面么~
其实学习的系统,透彻的话,会有用武之地的,你看我的Blog上有那么多的类别,就知道,我肯定是相关方面都懂点,苦在不精啊!还不如将其中一样学的精呢!
@uoian 时不我与,只能争取咯~
看起来,你像干了四年的,而我倒像读高三的!呵呵
@keelii
呵呵,你用别的我就看不懂了
@LAONB
不好意思英语很烂,只会用just^!^
@keelii

@bolo bolo不来不两句么…
@LAONB 楼上刚说NB..你就来了..
看完感触很深,忽然觉得自己浪费了太多时间。。。。配合着keelii的Just miss you用点时间思考,
我这30来年学到啥了。
牛b,好好学习一下
@苏洋
自古英雄出少年,加油吧~
@soncy
完全是错觉,不过也难怪很多人都这样认为…suai
@苏洋
Just agree with you^!^
@keelii
我之前和你的想法一样,可是似乎事与愿违,时间总是不够,你分给这个,那个就不够了,突然感觉在知识的门前,我永远是刚刚起步的状态,每天都会觉得自己前一天的表现太嫩。
那句“什么都了解一点,生活会更精彩”我也很喜欢,甚至我的QQ说明里也有一句“略懂。”
了解和懂的含义很模糊,现在很多人只是见过或者看过一个东西就会去说,懂了或了解了,
但是一遇到就会出问题,归根到底还是不够专注的原因。现在很多企业出现就业信任问题也是和这个扯不开的。
我也举两个例子来阐述我接下来要说的观点,路德维希·凡·贝多芬大家都知道,如果说音乐上瘾的话,他可以说是最著名的“病例”了,他被公认为二十世纪最杰出的XX家…
再说一例,梁肇新,你应该知道的吧,我印象中看过他写过的一个chm文档,包含了一些很实用的算法相关,从字里行间中可以看出他也是一个“上瘾”很大的人,但是他很成功,超级解霸和WPS都是他的儿子。
如果贝大爷不是执着的玩音乐,而是一会玩音乐一会写文章的话,我觉得世人不会给他如此高的评价。
梁高人不是VC++程序员,而是RAD程序员,我相信他是无法成功的。
上面两个人都印证了下面的这句话,也是我迷茫的根源:“知识改变命运,专注成就未来。”
或许前端是唯一可以涉猎广泛,又可以专注编码的工作了。
我怎么始终觉得keelii是个MM呢…
@soncy
猫猫的眼神好迷惘^!^
@苏洋
这又让我想起了一句名言:
“除了诱惑,我什么都能抗拒…”
仔细想想,只要是个有思想的人,抗拒负面的诱惑是很容易的事儿.
关键问题是很多时候我们还得面临的许多”正面”的诱惑.要抗拒它们绝非易事.
就像是说:我喜欢计算机.我就立志学计算机;我又喜欢音乐,那我是不是也要立志做音乐呢….
我始终相信:没人可以把两件事都做到极致…
我们要不要取舍呢?
记得有个老兄的博客说:
“什么都了解一点,生活会更精彩.”
但许多人还是喜欢把一件事做到极致.
这是两种不同的做事观,但我觉得这正表现出了两种不同的”生活价值观”.
正如先秦诸子中儒家的”有为”和道家的”无所为”一样.其实这就是人性的问题了,所谓人各有志.每个人都有选择自己生活方式的权利.这两种观点永远也没有对错之分…
随便表达一下我的观点^!^
我所期待或者说是向往的一种生活状态是:
“把自己喜欢的事都了解一点,然后在某一样上做到专注–至少立足点要比大多数人高…”
我是路过的~
@keelii 逆过来想一下,为什么人计算效率“低”呢,或许是因为人所考虑的东西太多了,说完这句话我想到了龟兔赛跑,专注才是王道。
@keelii
我现在也面临着你的问题,喜欢的太多了,而精力根本达不到。有些事情是无法彻底弄清的,人是一种糊涂的动物,具有不稳定性,有一点和你说的不同的是,我不喜欢跟着潮流走。实话说,我现在正处于一个很模糊的状态,我似乎知道我该去选择什么,但是又不知道我该去选择什么,人生八九不如意的,我们唯一能做的就是做好我们自己能做的事情了吧,与其临渊羡鱼不如退而结网。突然想起以前有过科学家的梦想,太扯了。把握剩下的生命吧。
@白巴
“越是简单的东西越值得我们去研究”
学计算机这么多年了,真是深深体会到了这一点.
1+1是最简单的东西了吧?我们都会异口同声的说2
但是有几人曾想过:
“计算机之所以做事效率最高是因为它把1+1算得比谁都快…”
一个不成熟的观点,望指教^!^
虚心接受指导…
我在上高中的时候就特别喜欢计算机,当时觉得能编程的人都是高手,所以就想上大学以后选计算机专业.上了大学也学了计算机才发现编程写代码并不是我当时想像的那样容易.直到现在我才体会到有的东西并不是你脑袋一时发热兴起就能做好的.学东西前最重要的是*彻底*搞清楚你喜欢什么,而不是根着所谓的潮流,就像是生活一样:如果只是为了赚钱去做一些自己并不喜欢的事,那么你也只能得到钱…而在我的人生观里我喜欢把那句流行的金钱论反过来说”没有钱是万万不能的,但是钱绝对不是万能的”.
有一点和你比较像,我也喜欢孟子:
“富贵不能淫,贫贱不能移,威武不能屈:此之谓大丈夫…”
我的大学可能与别人不一样,或许我的大学没学到什么东西,但是唯一使我庆兴的是我搞清楚了我什么才是我真正想要追求的.这一点是我一生中任何时间段都无法给予我的.
说实话我看了苏洋同学的这篇文章心里很是沉重,让我回想起了这几年的生活经历.这就勉强算是个反思留言吧.还有很多东西自己心里清楚就行了…
@白巴 你神出鬼没的…真的很有兴趣知道阁下现在从事什么工作,编码么?
都是多叉树~
@carp 编程匠艺很棒~可以看看.二叉树进化便是多叉树,呵呵.如果一根筋的走下去,那也可以完成的,但是代码要很长,很长,很长了…
你要是不说后者是用多叉树来处理的,我还真没看出其中的玄机。
在大二学数据结构时,学过二叉树这些算法,但是仅仅是理论上的,而且出的题只是从理论上来去让我们写个遍历结果等等,如今早就忘掉了。
我一直以为那些算法在一般编程中用不着呢,今天第一次看到在实际中的应用,没想到可以在这么平凡的事情中使用到,看来以后还要重新读读算法书了,编程也是一种艺术……
“有时候看起来越是简单的东西,细节方面越是需要我们去注意。”
这句收下.