分类: tech

  • 计算机编程新人入行指导

    从2003年加入现在的公司,已经有了快6个年头,自己也从一个计算机软件开发方面的新兵变成了老人。在公司里也做过几个不同的项目,有一些新的同事加入项目组,会有这样那样的疑惑和问题。在这里想简单说说,一个新人如何能快速的融入一个新的开发组,让其他同事能够接受自己。

    首先是读文档。计算机方面有个著名的黑话叫做RTFM,什么意思呢?按字面翻译就去“去读他妈的文档”,这是在新闻组或者论坛里可能常见的回复,一些人娇滴滴的说“我是妹妹,能指导一下这个问题么”或者贱兮兮的”跪求某某问题答案”。当然,同事之间不可能搞这些,不过也经常碰到有人问一些感觉非常简单问题,这些问题实际上都在项目文档或者软件规范里就明白写着。

    一个新人加入某个项目,或者转换到一个新项目,都会感觉到手足无措,就像老虎吃刺猬不知如何下嘴。领导不会让这样的新人去完成一些复杂模块的开发或者修改一些相对困难的bug,基本上都是先分一些界面上的小改动,或者是让他开发耦合程度低一些、相对独立一些的功能作为练手,这个时候作为一个新人就要尽快的掌握整个项目的大概,然后泛读一下项目的重要文档。如果要开发某个业内标准的实现软件,那这个标准的相关文档至少要通读一遍,不需要投入很长时间,可以快速掌握一下大概,做做简单的笔记,不懂的地方先记下来以后有空再说。读文档不要作为一个整体任务完成,可以用一些零碎时间来读,以免很长时间没有什么进展,领导看了还以为在磨洋工呢。

    **注意事项一,尽管有这样那样的软件支持,一支笔一个本子仍然是最方便最快速最实用的学习工具,我几乎每年都要写掉八九个大笔记本,里面写着项目开发的心得、文档书籍的感受、领导指示的一些开发问题等等,不需要有什么文章格式,先写下来就可以了。

    如果是第一次进入公司,项目组长会分一个任务作为对新人水平的考察,就好比网游中的新手任务。我们公司大多数的新手任务都是半个月一个月左右的时间,注意要尽量赶在期限结束前完成所有的编码和单元测试,而且最好完成代码清理和代码注释工作,注意命名规则,这样看起来比较专业一些。

    **注意事项二,接到一个项目第一个要问的就是这个项目结束期限(dead line)是什么,这样心里比较容易对进度有个估计,免得最后无法完成任务。领导可能会反过来咨询老程序员对分到的项目难度估计。一般来说,估计一个大概的编码时间,然后把估计时间乘二,留出一定余量比较好。

    接手一个新任务,必须要做的就是理解需求。一个开发人员如何不理解他想做什么,基本上这个任务一定会失败。我们高考时候都会写一篇大作文,对题目的理解非常重要,偏题跑题就没法拿到高分,开发也是如此。对需求的理解需要反复的进行,定期和项目组领导或者客户进行沟通,以免自己做了无用功。但是沟通之前一定要注意,自己先掌握一定的背景知识,比如前面提到的规范文档,或者是读一读已经有的代码,跑一跑成型的产品,免得问的都是不必要的问题。

    搜索一下可以找到一篇题为”提问的智慧“的文章,里面介绍如何在网上问问题。其实项目组内沟通也是如此,要注意问有意义的问题。打个比方说,有时候自己会有一种感觉,跑到别人面前,把问题说了一遍,还没等人回答,突然拍着脑袋说”啊我明白了“,也许是反应挺快,可是还是耽误了别人的功夫,像这样的问题,自己组织组织语言或者写出来,答案就很容易发现。另外也有的人,总是这是怎么回事那是怎么回事,其实到搜索引擎一搜或者是把动手做做就知道结果,但是非要张嘴问,这样的人说得难听点就是问题不经过大脑,其实一思考就能得到答案了。问问题之前也可以试着理清一下思路,看看前因后果,简化一下问题模型,也许经过这些方式,自己就能找到答案。有同组的同事问问题,很多时间我反问几句,把思路理清,他自己就知道答案是什么了。忘记在哪有看到一个轶事,在某个著名软件公司里,开发组的桌上会放着一只小熊,大家互相问问题之前,先对着小熊把问题说一遍,看能不能把问题描述的清晰,基本上说的比较有条理以后,答案也就随之而来了,大家可以试试这个办法。

    **注意事项三,提问之前,自己先试图看看能不能找到答案,我建议的寻找顺序是文档、google,最后才是张嘴问,问之前最好已经积累了一些材料,比如关于这个问题自己做了什么研究,搜索了什么关键字等等,这样问的有诚意,回答才能有诚意。

    另外,对于一个新人,需要多跟老同事沟通,了解项目的关键点是什么,比如开发一个通讯程序,用了什么协议,哪个网站比较有用,哪个文档需要精读,都是非常有意义的问题,这些问题可以少走一些弯路。早上到了公司,第一件事是接收业务邮件,然后记下一些需要回复或者要做的工作。邮件阅读以后,可以跟项目组长做个简单的沟通,了解一下哪个任务或者功能需要快一点完成,交流一下自己的想法,时间花费不多但是可以把一天的任务明确下来。

    如果比较努力而且有一定的开发能力,两三个月以后应该开始接触到项目比较核心的东西了,这个时候需要做的工作就是读代码。一个项目最重要的东西就是代码,至于文档、注释、测试,其实都是保证代码质量以及代码可维护型的一种辅助手段,作为一个开发人员,不熟悉代码就是致命的错误。

    读代码我这里有一些简单的体会。

    读代码要注意的第一条是从界面开始,深入到功能。打个比方说,一个桌面软件,其中有个格式转换功能,可以从菜单选择”格式转换“进行操作(注意,所谓格式转换就是一个例子,没有实际意义),那么就可以搜索菜单里的”格式转换“,找到相对应的界面函数,这就是一个相对独立的功能入口点了。然后从这个入口点顺藤摸瓜,就可以搞清楚格式转换这个功能需要的一系列界面函数以及逻辑实现函数。

    读代码的时候注意要随时做笔记,可以用word或者是powerpoint这样的软件做记录,搭配一个抓屏软件抓取界面变化、程序运行栈或者是一些关键数据就更好了。

    一个相对独立的功能基本上是由几个数据类或者数据结构,加上几个比较重要的逻辑函数实现的,抓住了这些关键就抓住了这个功能的核心。比如说一个通讯软件,重要的就是通讯数据格式和通讯协议实现。经过我的体验,这个小窍门还是很有用的。一般经常出现问题的也就是这些相对来说复杂一些的函数。

    阅读代码的同时还要经常问自己一些问题,比如这个地方为何这样实现,有没有其他的方案,哪个方案更好一些等等。这些问题可以让自己更好的理解当时开发人员的一些想法思路,另外也是将来代码进行重构的一个铺垫。

    **注意事项四,作为一个开发人员,多思考是非常必要的一个特质。

    一个新人,经过这些阶段,基本上可以成为项目组的中坚力量了,希望每个入行的新人都能成功晋级成为老手。

  • 我的上网经历

    晚上秀楠妈上网打滚子,我在边上跟她闲扯,突然聊起来第一次上网的经历,时间应该是九七九八年的样子,机器就是奔腾133的,modem牌子应该是贺氏(一个美国公司,已经破产了吧),第一次上的网好像还不是互联网,而是类似于169还是168的内部网站,就好比现在的教育网,一个大型局域网罢了,尽管如此,还是让我大开眼界。互联网给我一个完全不同的体验,这是个人计算机无法比拟的。

    也许现在的朋友不太能体会这种感觉,不过可以试验一下这样的场景,没有bp机,没有手机,没有短信,机器上只能玩单机游戏,所有的软件游戏,只能通过盗版商购买得来,这样生活个半年一年,然后再让你上网,是不是会有一种重见天日的感觉呢?这时候再加上一段澎湃的伴奏,完全就是《甲方乙方》里面那个把村子里的鸡都吃光了的大款形象了。

    当时的网络,因为是拨号限时上网,随之而来的是要控制上网时间,计时计费软件算是一个热门的分类。现在我只发现手机还有类似的软件存在,个人电脑上早就没有这种软件了。那时候上网都要有个目的,要事先想好了要干什么,比如上BBS看一个小说。然后立刻拨号,盯着那个状态栏的小图标,一旦标记联通网络了,立刻开动浏览器,然后进到想去的网站,开网页。几个网页都显示出来以后,立刻断开网络,这样,一个完整的上网活动不过需要几分钟而已,省钱而且完成了想做的事情。

    记得那时候买过几个光盘,里面都是些txt文本的小说或者散文之类,名字叫做cfido大全或者cfido软件什么的,在《大众软件》也经常推荐一些bluewave蓝波软件。

    什么叫做fidonet,或者中文叫做惠多网的这个东西呢?现在的人基本上都不知道,我也没有经历过,但是还算赶了个尾巴,有一些了解。当时玩这个东西的都有谁呢?如果你搜索一下“丁磊 求伯君 马化腾 bbs”,应该能搜到一些文字,比如这篇“http://www.techweb.com.cn/people/2008-12-03/378875.shtml”,摘选一下:

    这时的马化腾从未想过自己会改变几亿人的沟通方式,甚至,没有想过自己的未来。他只是狂热地 爱好着自己的爱好。虽然年纪不大,马化腾的网龄却非一般人能比。很少有人知道在真正的Internet普及之前,有许多网民已在惠多网(FidoNet, 它诞生在1984年的美国,非我们现在意义上的互联网)上早早体会到网络的乐趣,马化腾就是其中之一。

    1995年2月,在惠多网上挂了半年之后,马化腾义无反顾地投入了5万元,在家里连了4条电 话线和8台电脑,承担起了惠多网深圳站站长的角色,在接下来的很长一段时间内,深圳“马站”在惠多网上有着极高的人气。当时在BBS上混迹的还有丁磊和求 伯君,这时的丁磊早已经跳槽,来到了广州。“当年一起喝啤酒的时候,我们只是打工仔而已,都还不知道未来。丁磊后来的成功为我带来了启发,只要去做,没有 什么事情是不可能的。”

    这里面也没有解释为何不叫真正的互联网(internet),为何投入四万元,连电话线,买电脑,办网站还需要用电话线么?有网线就行了吧?

    惠多网,其实不是现在的互联网,所谓互联网,通俗的说就是基于tcp/ip网络,使用网线或者无线宽带上网(也有拨号到96163的,但应该已经很少了吧),用户需要开着浏览器连接网站的网络服务器(比如新浪搜狐腾讯)。而惠多网,是基于拨号网络的,拨号网络最基本的用法,是一台电脑激活了拨号服务(modem连上电话线,打开一些软件),而另外一台电脑,也是使用拨号服务,连接到主电脑上。简单的说就好比我知道马化腾搞了个fido的bbs,他的服务电话是10086,我就配置一个拨号到10086的拨号服务,就相当于我打个长途电话给马化腾差不多,只不过两个说话的人变成了两台计算机,而且需要运行一些特定软件罢了。

    惠多网的主计算机(也就是马化腾开站用的机器)需要运行一个bbs程序,(好像应该是firebird bbs,后来发展成为大部分校园网具有的telnent bbs(其实telnet就是fido的根本),比如大工的碧海青天bbs,清华的水木清华,别看现在都是web浏览,当时可都是dos界面下的程序,都是用键盘操作的。说远了)这台机器一直开着,然后各地的fido站友就用电脑一直给马化腾拨号,如果某个人比较幸运,可能一会就拨上去了,然后就要开动bluewave蓝波这个发信收信软件进行打包上传下载,大概几分钟以后,上传下载任务完成,自动断开。这时候占线的机器会有一点空闲,下一个拨号的站友就有机会继续进行跟刚才一样的操作。

    这里面有一些东西可能大家不太理解,比如为何不是直接浏览、在线写文章,而要用软件上传?因为电话线本身有着一个致命的缺点,就是同一个时刻服务的数目是有限的(我不确定,也许就是一对一的),简单比喻,就是某个人给你打电话,而你正在和另外一个人通话的时候,给你打电话的这个人只能听到嘟嘟的占线声音,一直到通话的两个人其中一方放下电话、通话结束了,才能拨到你的电话上。fido网整个通信过程跟两个人打电话是一样的,基于网络礼节或者为了更好地为更多人服务,两个人通话的时间一定要足够短,写文章、读文章这些不需要在线的操作(没有人必须连上网才能写字的怪癖吧?),就要放在通信过程之外完成,而且为了保证充分利用带宽,文字都要压缩打包。这样两个之间真正需要连接沟通的时间就很短了,一条电话线也可以尽可能的服务更多人。

    于是乎,当时的人上惠多网就是这样的流程,先看信(类似于现在论坛的一个帖子的概念),有必要的才进行回复,灌水或者废话是会被人鄙视的,然后写好文章内容,蓝波软件就是一个集中了看信、信件打包、上传下载过程的软件。另外需要检查是不是有错别字,一切稳妥后,拨号连接服务器,估计幸运的过十来分钟连上去了,蓝波会把写好的文章、以及关注的版块里面的新文章和最新回复都打包下载,因为资源的紧张,大家都不会写什么废话,打包下载也不需要很长时间,然后断开电话连接,就可以悠闲的看文章看回复了。

    惠多网本身是基于电话网和telnet协议建立的这么一个网络,在没有互联网之前,它是各地的网络爱好者互相交流的唯一方式,前面提到的一些奇怪的方式方法,都是因为电话网本身的限制造成的。但是应该承认,虽然有种种限制,当时fido网上的文章却是质量很高,精品很多,而且里面高手也是非常多,比如文章里提到的那三位,后来都成立了自己的公司,在网络上创出了一片广阔的天地。现在有了更方便自由的上网方式,但是却不见得对此有什么珍惜,未免有些可惜,特写此文留作纪念。

    最后转载一下维基上的介绍“

    中国惠多网

    维基百科,自由的百科全书

    中国惠多网络(CFido)是通过电话线路连结的BBS网络,网络之间互相通过点对点的方式转送信件。中国惠多网是中国计算机网络通讯爱好者自行创立并维持运作的业余网络系统。盛行于1993年1998年间,高峰时期全国有上百个站点,使用者达上万人。有名的BBS北京的轻松快车、长城、西点军校、天堂、舒克,广州的新月、深圳的Data Express、珠海的西点。CFido的网友算是中国最早的网民,后来多个CFido网友成为中国互联网名人,比如腾讯马化腾当时就是深圳的Data Express的站长,而金山软件公司求伯君是珠海西点的站长。发表“金州不相信眼泪!”而成名,后来担任8848网站董事长的网友老榕(王峻涛)是福州站的站长。

    1992年,北京的罗依建设的“长城”站和汕头黄耀浩建立的“手拉手”(后来改名PCUG)站成为国内按照FidoNet体系建立的最早bbs交换系统。由此形成cfido。金山的北京西点和珠海西点也曾担负南北网络转信服务。

    FidoNet R65C 罗依是cfido的第一个总协调人,求伯君是最后一个。

    CFido的价值观是:爱国、高尚、勇敢、忠实、进步、友爱、守分, 业余精神万岁! 后期在网络上的电子出版物叫《龙音》。CFido曾召开过全中国第一次、第二次的站长大会。

    技术背景

    CFido使用Telix拨号器,基于ZModem协议。信件组织类似新闻组服务,使用蓝波快信(BlueWave)系统,对所选信件进行分类,筛选,压缩打包传输以节省传输时间,亦可进行离线编辑阅读以节省电话费。 多数的站点基于最高28.8/33.6kbps的拨号系统,因为56Kbps是非对称协议需要与电信局合作才可架设服务器。

    因为整个系统运行在DOS下,需要使用DOS外挂中文系统。而Fido系统大量使用ASCII字符图形,与国标码中文有冲突,对外挂中文的要求比较高,促进了UCDOS等中文系统的发展。

  • c/c++程序员必读的十本书(上)

    这个题目大的有些离谱,实话说,只是想推荐一下自己觉得很好、值得收藏的一些技术方面的图书。如果不是程序员,或者关心的方向是网页开发、数据库开发,或者只是想了解一下开发流程,这些书不都是适合你,但也很值得收藏了。

    这篇文字的针对目标是,微软平台下的c/c++程序员,学过计算机基础学科,有一定的英语阅读能力。建议购买的顺序也是从上至下。

    建议大家阅读的第一本书是《编码的奥秘》(英文名《code》),豆瓣链接http://www.douban.com/subject/1024570/,这本书中文版应该已经绝版了,但好像有英文影印版。这本书没有讲该如何编程,如何写一个hello world。它深入浅出的介绍了计算机是如何组成的,比如二进制,比如逻辑门电路的实现,都是很浅显的。看了这本书,会对计算机有个知其所以然的了解,也就是机器如何实现的一加一等于二,如何能执行程序。《编码的奥秘》是计算机专业或者是初中高中对计算机感兴趣学生,应该一上学就读的一本书。

    第二本也是建议大家看到了立刻买下来,保证物有所值,就是《程序设计实践》(英文名The Practice of Programming),豆瓣链接http://www.douban.com/subject/1173548/。有了这本书,基本上《代码大全》、《程序员修炼之道》这几本后面推荐的书可以不买了,因为精华基本上都浓缩到这本书里面,当然,不同的作者写出来的还是不一样,如果有钱,还是都买了最好。《程序设计实践》的两位作者Brian W.Kernigham / Rob Pike,在计算机领域,就是大师级的人物,高山仰止,写出如此通俗易懂的计算机工程实践书,让我还能说什么仰慕的话啊。你不知道他们是谁?去搜wiki吧。里面每一章节都非常经典,甚至每章后面推荐延伸阅读的书籍,都是经典中的经典。一定要慢慢读反复读,如果这本书看完了以后,基本上就是一个计算机中级编程水平了。

    第三本书比较难选择一些,还是推荐这本好了《The C Programming Language 2nd Ed》,豆瓣链接http://www.douban.com/subject/1230004/。也就是传说中的K&R,如果你是一个计算机专业的学生,还没有这本书,那你在学校里学了什么就很值得怀疑。这本书272页,每页都很经典,基本上你碰到的所有c语言问题在这本薄薄的小书里都有涉及,但是限于篇幅,有些会简单带过。里面代码例子不多,但还是包含了一个相当完整的语法分析器程序。不多说了,如果没有这本书,赶快去买吧。

    现在大部分企业使用的是c++而不是c(比如google),除非是嵌入式或者操作系统内核级的程序,c++的性能与强大语法基本上可以满足各方面的需求,c++的入门书很多,选择也比较容易,推荐大家买奥莱理O‘Reilly的或者是c和c++经典著作这个系列的。第四本要推荐的不是c++编程方面的,而是一般类似于八卦c++历史的书《c++语言的设计与演化》,豆瓣链接http://www.douban.com/subject/1096216/。编程工作其实就是一个在不同的方案中进行选择权衡的一个过程,是该选择vector还是list,是该使用多线程还是多进程,是该使用xmlrpc还是dcom,是使用数据库还是注册表,有心的人会研究不同选择背后的深层技术问题,有些人基本上就是一套方案打天下。这本书就介绍了c++之父设计c++语言时选择的一些考量,为什么不用GC,为什么没有这个那个特性,为何不内置某某keyword。在我看来,这些考量的过程,对于一个编程人员来说要比如何使用c++更有价值。

    第五本书,我选择了《unix编程艺术》,它击败了《代码大全》《c专家编程》等诸多经典占据了这个位置,主要也是占了unix操作系统的光。豆瓣链接http://www.douban.com/subject/1467587/。之所以选择这本书,是因为对于一个windows平台上的程序员来说,尽量开阔眼界是非常必须的事情。我们经常说混血或者说杂交会让基因更加优秀,编程也是如此,windows平台的程序员,如果只懂mfc,只会注册表保存配置,只知道COM或者DotNet,是一件非常悲哀的事情,用成语来说就是井底之蛙坐井观天,只认为天就是这么大一片,编程就应该用这些东西。unix操作系统虽然不像windows占据了桌面平台,但是在其他方面,使用非常广泛,比如苹果的mac osx系统,比如sun的solaris,比如继承了unix精神的linux。尤其在当今桌面系统网络化的潮流下,unix系统天生的网络特性、多用户管理特性、安全特性,更是体现了超越时代的杰出思想。读一读这本书,体验一下不同的设计理念和不同的操作系统哲学,对于日常的编程工作都有非常大的帮助。Windows程序员尤其要学习的是:unix系统上script的使用,使用纯文本作为数据格式,使用管道,最最重要的一点就是,Keep it simple and stupid,一个程序只做一件事,只需要把这件事做到完美。这与windows的大而全思想有着本质上的不同。

    有空再给大家写剩下的五本书。

  • 技术笔记一月二十二日

    2009年,入行也有一些时间了,水平有限,没法写出什么有深度的文字,只能想起什么就写点,也许到了零九年年末,能积累一些东西出来。今天写的都是一些务虚的笔记。

    1,编程能力无所谓天才白痴之分,只有用不用心的区别。

    2,一个好的团队能让人发挥百分之二百的能力,而一个不和谐的部分能让木桶里的水都漏光。对于一个中型或者大型的项目来说,核心的成员应该是非常团结的。

    3,基本上现阶段所有的软件工程开发理论都没什么用,都是学院派搞出来骗人的。ISO9000,CMMI,六西格玛,莫不如此。而且,所有的软件工程辅助工具,都还处于非常初级的阶段。

    4,所有的技术革新或者是技术推动,应该是从上至下的,这一点,在企业里搞过管理信息系统的都知道。

    5,技术交流或者是技术分享,重点并不在于交流的成本有多高,而是在于人们是否有意愿去分享,或者说企业文化是否鼓励分享精神。

    6,开源或者免费软件的使用,是一个双刃剑,开源会减少表面上的成本,但是相应的学习成本以及部署成本也比较高。

    7,微软平台,已经不是开发的主流平台,java和web,是现阶段比较流行或者说占据了大部分市场(企业市场、个人消费市场),微软的强项,只剩下windows操作系统和office,而这两方面,都在被人不断的蚕食,微软的日子将会越来越难过。一提到微软基本上就是官司或者是被人嘲讽,这一点很致命。

    8,个人预测,苹果借助它的iphone,将会继续占据IT时尚前沿阵地,引领这两三年智能手机市场。手机开发将会是web开发之后的又一个流行趋势。随着国内3G市场的开放以及手机上网网速的提高,这些大网站都会推出手机专门浏览的入口,或者针对手机进行定制。手机软件会变得流行起来。而且,手机的在线特性,使得手机软件盗版变得困难,这一点可以从网络游戏得到证明。

    理想中的软件开发模式,应该是这样的:

    需求简洁清晰,问题明确,客户要求的变动在预期范围内。

    前期开发基础架构,不过多考虑扩展性,但是留出扩展的余地,高内聚低耦合,在早期允许冗余代码的存在,但也要注意代码味道,如果发现坏味或者是超过两次的代码重复,或者是超大的函数,就要开始重构或者重写。

    前期开发,测试人员就要进入,同时构建单元测试用例,而编程人员每完成一个特定的逻辑功能块,也要写相应的unittest,如果测试发现问题,也要先写unittest,然后进行修改。

    在前期就要确定整个系统的debug log体系以及错误处理方式(异常、返回值、message等等),并且伴随相应的一套unittest程序,对于非通用性软件来说,unittest程序基本上需要自己定制,而且需要定期维护,这个成本看起来比较高,可收益也是很大的,在我最近参与的项目中,unittest的使用保证了大部分功能的正确性。谈到这里还要跑题说一下,以前经常碰到有人说“这个地方不能改,非常关键,改了没法确定是不是对的”,主要就是因为缺少unittest的保证,关于unittest以后还要写写自己的一些心得体会,比如什么时候必须用,什么时候可以不用。

    当程序大的框架搭起来以后,或者经过一段时间的试用,客户需求会变得比较复杂,这时候要注意不断的调整代码结构,删掉或者重写坏味的代码,重构有问题的、或者比较复杂的函数,另外,定期维护unittest以及定期进行组内的code review都是必要的。

    对于大中型项目来说,客户要求需要进行项目管理,基本上就是建立defect管理系统,进行需求的优先级排列,如果是小公司,Python的Trac是一个很好的选择,可以集成svn这套版本管理软件,另外内置了bug列表和wiki功能。

    如何使用c++,以及windows的新技术,是一个需要权衡的问题,我个人的原则是,技术上尽量使用的简洁,比较常用就是vector以及string这两个stl模板类,也不使用什么炫目的模板编程技巧,也不过多的进行封装或者抽象,尽量少用COM或者是高级的windows技巧,选择通用的技术而非微软专用的技术。使用c的编程理念,加上c++的基本语义支持,足够了,至于什么偏特化、c++模板技术、dcom、连接点,都是非必要的。

    项目进入后期,需要考虑自动编译以及自动单元测试的实现,在这一点上,java要比c++容易得多,c++程序员或者说微软平台程序员,基本上不会去考虑类似的实现。另外,微软平台程序员缺少的技能是脚本编写能力以及正则表达式使用能力,在这一点我也有缺陷。

    c、python、web开发、iphone开发,是我在2009年比较感兴趣的技术,另外,有空学学外语也很必要,感觉自己这两年有些吃老本,是该充充电了。

  • [C Code] 为何需要typedef struct

    这是很基础的知识,只是c和c++相关内容容易混淆起来。

    我是在看一个人问c语言题时候发现这个知识点的。

    当时他的问题里包含了一个结构如下:

    typedef struct Str{

    int len;

    char data[128];

    } str;

    然后使用str(小写形式的)来声明一个新的变量。

    这个有点意思了,我的问题就是为何要用typedef struct这样的形式呢?

    后来发现,这个是c语言很基础的一个问题,只是c++用多了容易把c++的struct和c的混在一起。

    c++的struct实际就是class关键字的一种变体,默认的权限范围为public。

    但是c语言使用struct,一般是这样定义

    struct CStruct{

    int a;

    int b;

    };

    然后这样使用struct CStruct cdata;

    如果想省略定义时候使用的struct,就可以用typedef声明一个新的类型。类似:

    typedef struct

    {

    int a;

    int b;

    } new_struct;

    然后就可以直接使用new_struct dstruct;来定义变量了。

    说的有些罗嗦,只是为了自己知识的一个备忘。嘿嘿。