博文
程序员的人生感慨的参考(转载)(2005-11-21 20:58:00)
摘要:程序员的人生感慨的参考(转载)
在我觉得我老了以后!
九月十一,是我生日,全世界都在关心拉登杰作周年纪念,也是我做计算机组成试验的第一天。我在面包板上发了几块74LS34,74LS194,74LS74等等,接好线,打开电源,清零,启动,然后就看到上面的指示灯按照我设计的节拍把放在锁存器里面的数据放到自己设计的四位总线上,然后在不同的节拍送到不同的芯片,一丝不苟,跟计算机里面的时钟周期一模一样......我突然觉得,我对软件设计,失去兴趣了.
回想最当初,也就是初中,用edit做一个bat出来,也是很大的乐趣,到了高中,用javascript做html,更是可以给同学大大炫耀一番.进入计算机系,浏览大大小小的网站,两年的大学生活更开阔我的眼界.不过,我的学习热情,都是从问为什么开始的.我记得我的第一个为什么就是"计算机在起动前为什么知道启动区在磁盘的什么地方?",然后就是"为什么字符串组成的代码能够让网页动起来",接着是"既然我的编译器要在操作系统下面才可以工作,那么操作系统又是怎么写出来的呢"甚至是"汇编语言的编译器是用机器语言写的,但是没有现成的程序,怎么让计算机识别键盘的输入呢......这些问题,伴随着我的学习过程,可以说是动力的来源.因为我每次了解了一个知识点,就有新的,而且往往是更基础的知识点冒出来,源源不断.所以就不断地学,不断地深入.但是,当我看到我在实验室做的"计算机的一部分"正常工作的时候,我突然感觉,那些所谓的"为什么"都不重要了,因为计算机大不了就是这么回事.因为我已经可以用基本的三态电路做个很简单的芯片和辅助系统出来了,用手动节拍来控制它的工作.到这里,再也问不下去为什么了.因为不管什么程序不管什么系统,也就是控制这个节拍的规律.突然觉得,虽然我还有很多不懂,但是,也不是我一直在寻找的本源了!
我不知道应该对这种感觉说什么,解脱?我回忆起学程序设计语言的过程,我当初学习的动力,并不是学了要解决什么实际问题,不过是想证明我能过让他动起来而已!但等我了解多一点以后,才发现高级语言没有其他基础的服务,也是不能让我随心所欲操纵的.所以就去看汇编,看操作系统,看进程源语.最开始写dos下的程序,对自己很不满,因为我用的都是在windows下运行的.等我可以写windows程序的时候,我却发现为了支持通配符和灵活的参数我更宁愿他在命令行执行.在我......
测测您的能力:微软程序员测试题(2005-11-21 20:54:00)
摘要:测测您的能力:微软程序员测试题
一.最基本题型(说明:此类题型比较简单) 1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧 绳的方法来计时一个小时十五分钟呢? 2.你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。抓取多少个就可以确定你肯定有两个同一颜色的果冻?(5秒-1分钟) 3.如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水?(40秒-3分钟) 4.一个岔路口分别通向诚实国和说谎国。来了两个人,已知一个是诚实国的,另一个是说谎国的。 诚实国永远说实话,说谎国永远说谎话。现在你要去说谎国,但不知道应该走哪条路,需要问这两个人。请问应该怎么问?(20秒-2分钟) 5.12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。13个 呢?(注意此题并未说明那个球的重量是轻是重,所以需要仔细考虑)(5分钟-1小时) 6.在9个点上画10条直线,要求每条直线上至少有三个点?(3分钟-20分钟) 7.在一天的24小时之中,时钟的时针、分针和秒针完全重合在一起的时候有几次?都分别是什么时间?你怎样算出来的?(5分钟-15分钟) 二.没有答案型(说明:这些题显然不是考你智力。而考的是你的反应能力。这种题大多数没有答案,但是要看你的反应喽!) 1.为什么下水道的盖子是圆的? 2.中国有多少辆汽车? 3.将汽车钥匙插入车门,向哪个方向旋转就可以打开车锁? 4.如果你要去掉中国的34个省(含自治区、直辖市和港澳特区及台湾省)中的任何一个,你会去掉哪一个,为什么? 5.多少个加油站才能满足中国的所有汽车? 6.想象你站在镜子前,请问,为什么镜子中的影象可以颠倒左右,却不能颠倒上下? 7.为什么在任何旅馆里,你打开热水,热水都会瞬间倾泻而出? 8.你怎样将Excel的用法解释给你的奶奶听? 9.你怎样重新改进和设计一个ATM银行自动取款机? 10.如果你不得不重新学习一种新的计算机语言,你打算怎样着手来开始? 11.如果你的生涯规划中打算在5年内受到奖励,那获取该项奖励的动机是什么?观众是谁? 12.如果微软告诉你,我们打算投资五百万美元来启动你的投资计划,你将开始什么样商业计划?为什么? 13.如果你能够将全世界的电脑厂商集合在一个办公......
C语言编程技巧汇萃(来自编程爱好者论坛)(2005-11-21 20:36:00)
摘要:C语言编程技巧汇萃(来自编程爱好者论坛)
编程函数集,详细内容如下:读键盘扫描码获取机器日期将浮点数转化为字符串清除屏幕显示时间打印一个矩形砍掉字符串中所有空格取子字符串从文件中读取字符字符串左靠齐取左字符串向文件写数据取右字符串打开或关闭光标喇叭发声时间延迟正点报时写整数于文件中从文件中读取整数报警字符串右靠齐字符串居中删除子字符串查找指定字符串产生空格产生字符串砍掉字符串左边空格砍掉字符串右边空格显示一个字符串定义屏幕颜色显示提示窗口显示警告窗口得到文件长度窗口滚屏扫描键盘插入字符串 检测磁盘是否准备就绪检测磁盘是否写保护修改文件的某一行成批拷贝文件拷贝一个文件建立目录得到目录得到文件名任意两个正整数相加(<80位)任意两个正整数相乘注意:该函数集省略了不少TC标准头文件,读者使用时要自行添加。而且由于该函数集内部函数间有的有调用关系,读者拆卸时要谨慎。/*编程技巧荟萃*//*从键盘中读取字符 功能:按下普通键时,返回其ASCII码 扫描码CODE=0*/int INKEY(int *code){int m;while(!bioskey(1))/*可加入无按键时代码*/;*code=bioskey(0);m=*code*255;if(!m) m=*code>>8;*code=*code&255;return m;}/*获取机器日期*/int DATE(char *s,char type){char dat[30];int num;struct tm *tblock;time_t t;t=time(NULL);tblock=localtime(&t);strcpy(dt,asctime(tblock));strcpy(s,"");switch(type){case 'N':num=(*tblock).tm_year+1900;itoa(num,s,10);break;case 'Y':num=(*tblock).tm_mon+1;itoa(num,s,10);break;case 'R':num=(*tblock).tm_mday;itoa(num,s,10);break;case 'S':strcpy(dt,asctime(tblock));MID(s,dt,12,8);break;}}return num;}/*将浮点数转化......
优秀程序员的两大要素:懒 + 笨(转载)(2005-11-21 20:24:00)
摘要:懒 只有懒惰的程序员才会去编写那些可以最终代替自己工作的自动化工具,才不会成天为了实现相似的功能去编写大段大段冗余重复的代码 - 这种代码往往是软件后期维护和重构的天敌。通常来说,由于惰性的驱使所产生出来的工具和程序将最终极大的提高生产开发的速度。当然,对于一个程序员来说,光光具备懒惰这个要素还是不够的。在享受懒惰之前,他必须以最大的热情和最高的效率去研究解放自己的途径,比如:找到最有助于开发的工具,最能体现“一次编写,多次复用”精神的代码架构的设计。只有在这些必要的工作之后,才可能真正享受轻松编程的乐趣。所以“懒”的精髓用一句老话来描述,那就是磨刀不误砍柴功。如果你不想办法磨亮手中的柴刀,就算一天二十四小时都在砍柴,效果也不如拿把锋利的斧头一天只砍一小时。从这个角度来说,Google给员工的20%自由时间是完全发挥了“懒”的能动力。为了更好的享受偷懒的乐趣,员工会更加具有创造力的去高效完成自己的任务。夸张一点来说,懒惰才是人类进步的原动力。笨 这一点似乎比懒更让人不能接受。在解释这里所说的笨的具体含义之前,我们先看看一个聪明人(或者说认为自己足够聪明)会做什么: 1) 停止学习新的东西2) 不愿意用批判的眼光去审视自己的工作 第1点将使我们很难去接受或者主动的去研究一项新的技术 - 即使新技术能带给他更多工作上的便利。第2点会使我们无法清晰的分析自身工作的问题所在,要对其进行改进或者重构就更加困难。从这两点来考虑,作为一个程序员太自以为是不见得是件好事情。由于对自身的过于自信,往往无法客观的看待自己和自己的工作。相反的,笨一点(确切的说,谦逊一点)有时候倒有助于开发的顺利进行。举例来说,当程序出现bug的时候,最好尽早承认问题是出在自己编写的代码上面而不是在于编译器(当然除非是字节高低位编码方式之类的问题,这种问题编译器会是错误的根源之一)。如果你太自负的认为自己的程序没有问题而去猜测可能是编译器或者其他的什么外部因素出问题的话,那么十有八九你会在调试过程中走上一长段的弯路。程序员应该笨一些的更为关键的原因在于,当需要思考问题的最佳解决方案的时候,往往要求我们首先要跳出思维定式。你对系统了解的越多,积累了越多的经验,就越难走出已有的局限,可以尝试的范围就越小。相反的,对于一个什么也不懂的门外汉来说,因为没有任何失败的记忆和潜规则的约束,也就没有什么是“不可能”的,......
Windows 开发书籍推荐(转载)(2005-11-21 20:18:00)
摘要:
Windows 开发书籍推荐(转载)
现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千,很多陌生的出版社,很多陌生的作者,很多陌生的译者,书名也是越来越夸张,什么××天精通××,精通××编程, ××宝典等等,书的印刷质量真的很好,纸张的质量也是今非昔比啊,但书的内容好象却是越来越让人失望,也许是我老了,我的思想我的观念已脱离现实社会,也许是外面的世界变化得太快,我编程数月,出去一走,路已不是原来的路……回家看着书架上的旧书发呆,听着李克勤的旧欢如梦,才发现自已原来太喜欢怀旧.笔者从事软件开发多年,其中有两年多的时间一直是与Windows底层打交道,涉及到驱动程序,嵌入式OS,Windows应用程序(如GUI,图形图像技术,多线程,组件技术等等)等方面的开发,写了很多很的源代码……也许我的阅读面过于狭小,书架里基本上都是Jeffrey Richter,Charles Petzold,侯捷老师以及潘爱民老师的书,这些书一直陪伴着我,并给我的编程工作带来了很大的帮助,希望我的推荐对你也有帮助。Windows编程类Windows 程序设计(第5版)(上、下册)原书名: Programming Windows (Fifth Edition) 原出版社:Microsoft Press作者:(美)Charles Petzold译者:北京博彦科技发展有限责任公司出版社:北京大学出版社出版日期:2001-03页码:1376定价:160:00RMB此书被认为是Windows编程最好的导论性读本。在1994年5月,此书的作者Charles Petzold被《Window Magazine》和Microsoft公司授予”Windows Pioneer”奖,以表彰他对Microsoft Windows的成功作出的贡献,可见该书的权威性,以至于“如果对Windows开发有什么问题的话,请翻阅PetZold的著作吧”几乎成了一句至理名言。本书覆盖了WINDOWS编程的方方面面,将windows编程的每一个元素(如输入,输出及对话框,图形,多媒体,线程,文档与视图,Internet等等)讲解得很清晰、简明,采用的大多是具有代表性的示例,代码风格好并且很有实用价值。笔者认为这本书是学习WINDOWS编程的经典入门好书,每一次的细心阅读都会对WINDOWS编程有......
请不要做浮躁的人(转)(2005-11-21 20:04:00)
摘要:请不要做浮躁的人(转载)
请自己识别其中跟自己相关的内容
1.不要看到别人的回复第一句话就说:给个代码吧!你应该想想为什么。当你自己想出来再参考别人的提示,你就知道自己和别人思路的差异。2.初学者请不要看太多太多的书那会误人子弟的,先找本系统的学,很多人用了很久都是只对部分功能熟悉而已,不系统还是不够的。3.看帮助,不要因为很难而自己是初学者所以就不看;帮助永远是最好的参考手册,虽然帮助的文字有时候很难看懂,总觉得不够直观。4.不要被对象、属性、方法等词汇所迷惑;最根本的是先了解最基础知识。5.不要放过任何一个看上去很简单的小问题——他们往往并不那么简单,或者可以引伸出很多知识点;不会举一反三你就永远学不会。6.知道一点东西,并不能说明你会写脚本,脚本是需要经验积累的。7.学脚本并不难,JSP、ASP、PHP等等也不过如此——难的是长期坚持实践和不遗余力的博览群书;8.看再多的书是学不全脚本的,要多实践。9.把时髦的技术挂在嘴边,还不如把过时的技术记在心里;10.学习脚本最好的方法之一就是多练习;11.在任何时刻都不要认为自己手中的书已经足够了;12.看得懂的书,请仔细看;看不懂的书,请硬着头皮看;13.别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍;14.请把书上的例子亲手到电脑上实践,即使配套光盘中有源文件;15.把在书中看到的有意义的例子扩充;并将其切实的运用到自己的工作中;16.不要漏掉书中任何一个练习——请全部做完并记录下思路;17.当你用脚本到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个代码的完整性,然后分析自己的错误并重新编写和工作。18.别心急,写脚本确实不容易;水平是在不断的实践中完善和发展的;19.每学到一个脚本难点的时候,尝试着对别人讲解这个知识点并让他理解----你能讲清楚才说明你真的理解了;20.记录下在和别人交流时发现的自己忽视或不理解的知识点;21.保存好你做过的所有的源文件----那是你最好的积累之一;22.对于网络,还是希望大家能多利用一下,很多问题不是非要到论坛来问的,首先你要学会自己找答案,比如google、百度都是很好的搜索引擎,你只要输入关键字就能找到很多相关资料,别老是等待别人给你希望,看的出你平时一定也很懒!23,到一个论坛,你学会去看以前的帖子,不要什么都不看就发......
我对这里的blog的建议(2006-01-14 18:53:00)
摘要:我对这里的blog的建议1.增加修改字体及其大小的功能,这个不知道是不是我不会用,反正每次帖都要自己在原来的地方修改一下字体,更关键的是原来的大小帖过来以后好像变化了。
下面这个是csdn的样式,可以参考一下,好丰富啊,我都想跳槽过去了。
此主题相关图片如下:
2.增加评论提醒,我有时希望看看我的文章大家是不是有好的建议,但是文章比较多,有时没有时间一篇一篇看,要是有个评论提醒就好了。(这个也实现了,呵呵)
3.增加首页设置,比如我希望我的哪些文章可以让读者一进我的blog就可以马上看到一些比较有意义的文章,而一些没什么意义的文章就让读者自己选择是不是要看了。比如我可以设置:一进我的blog,就直接进了“程序人生”区,而不是按时间排的那页,这样对阅读者来说可能更节省时间。
4.提供文章关键字搜索,比如我以前看到了一篇好了文章忘记了保存,现在想起来的时候就应该可以根据关键字来搜索到这篇文章,又或者有时需要参考哪个类型的文章时可以找得到。(这个已经实现,真的很不错,我搜索“C++”出来了很多需要的文章,谢谢)
5.取消评论的字数限制(200字,太少了,随便说几句话就超过了)。
6.允许非注册用户参与评论。从我个人而言,我的一些观点、文章除了个人私事外,我总是希望大家给点意见或者建议。如果不允许非注册用户评论,那限制实在太多了。在msn space和csdn都是允许非注册用户参与评论的。(这个已经实现了,谢谢)
7.把评论的顺序改变一下,先评论的应该在上面,后面评论的在下面,不然太影响视觉了。
期待大家的更多建议……......
听林斌的《如何编写优秀的程序》总结(2005-11-21 00:56:00)
摘要:听林斌的《如何编写优秀的程序》总结
一、写好程序的两大要素:1、设计(1)系统结构设计:由一些经验比较丰富的、经验比较足的工程师(架构师)来做(2)详细的开发设计:2、编程
二、设计文档的编写1、文档本身怎么写不是关键,关键是文档的内容2、最关键的一个部分是:design goals 影响着后面文档的编写,从而间接影响着后面的编码
三、一流代码可能需要很多特性,如鲁棒、简洁、高效等等。在林锐的《高质量程序设计指南C++/C语言》(第二版)里面曾经提到十点也就是
十大,在这里作者指出其实满足这些都可能不是问题,最难的就是在于如何取得一个平衡。比如,当你改善代码使其更高效的时候可能牺牲了
代码的可读性、清晰性。还有,开发的要求在各个开发阶段是不一样的,最初可能只是简单要求系统可以work,接下去就会考虑性能、鲁棒等
四、讲座中举了一些例子来说明了写代码所犯的一些错误1、不要定义自己的“语言”,怎么理解呢就是很多人喜欢定义一些宏来代替原来的语言格式,如在C/C++里面,如下define isnot !=define or ||define is ==
还有一些从pascal转过来的人可能会喜欢定义BEGIN和END来代替{和}如:define BEGIN {define END }这种习惯很不好,人家语言本身其实很好的,你这样做以后,别人可能看不懂你的程序了
2、函数的代码行应该在143行以内(1991年的研究结果,在86年IBM研究结果是在500以内,林锐的《高质量程序设计指南C++/C语言》(第二版
)里面的建议是在50行以内)
3、枪杆子的道理-Learn API32 seriously from MSDN ;Understand the ones you use,read the SDK doc in MSDN 。尽量使用库函数
4、使用指针的地方一定要判断指针是不是为NULL(当然,你声明指针的时候一定要初始化指针否则成为野指针就麻烦了),永远不要相信客户
给你的承诺(疑心重重写代码),比如:放心啦,我们永远不会给你传一个NULL的(这种你可不要相信,哪天可能就给你了哦,这时出问题就
查找起来就很麻烦了)。若是构造函数的多个参数需要指针的话,可以另外设定一个函数专门来做这个参数的指针的检查......
【转】提问的智慧(How To Ask Questions the Smart)(2005-11-20 13:56:00)
摘要:【转】提问的智慧(How To Ask Questions the Smart)文章链接:http://linuxmafia.com/faq/Essays/smart-questions.html 原文见附录,别人翻译的,特表示感谢.图谱化理解::
每个人,都希望得到帮助或帮助别人。但是大家的时间都很宝贵,不管是平常学习还是网络论坛,都应该学会提问问题,大家在提问之前请先看看这篇文章。相信对你会很有帮助,也为给你回答问题的人省去大可不必的麻烦!!希望提问的人能够遵循以下原则,将会事半功倍。 在黑客世界里,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出答案的难度,同样取决于你提问的方法。本指南旨在帮助你提高发问技巧,以获取你最想要的答案。 首先你必须明白,黑客们只偏爱艰巨的任务,或者能激发他们思维的好问题。 如若不然,我们还来干吗?如果你有值得我们反复咀嚼玩味的好问题,我们自会对你感激不尽。好问题是激励,是厚礼,可以提高我们的理解力,而且通常会暴露我们以前从没意识到或者思考过的问题。对黑客而言,“问得好!”是发自内心的大力称赞。 尽管黑客们有蔑视简单问题和不友善的坏名声,有时看起来似乎我们对新手,对知识贫乏者怀有敌意,但其实不是那样的。 我们不想掩饰对这样一些人的蔑视--他们不愿思考,或者在发问前不去完成他们应该做的事。这种人只会谋杀时间--他们只愿索取,从不付出,无端消耗我们的时间,而我们本可以把时间用在更有趣的问题或者更值得回答的人身上。 我们称这样的人为“失败者”(由于历史原因,我们有时把它拼作“lusers”)。 我们在很大程度上属于志愿者,从繁忙的生活中抽出时间来解惑答疑,而且时常被提问淹没。所以我们无情的滤掉一些话题,特别是抛弃那些看起来象失败者的家伙,以便更高效的利用时间来回答胜利者的问题。 如果你觉得我们过于傲慢的态度让你不爽,让你委屈,不妨设身处地想想。我们并没有要求你向我们屈服--事实上,我们中的大多数人最喜欢公平交易不过了,只要你付出小小努力来满足最起码的要求,我们就会欢迎你加入到我们的文化中来。但让我们帮助那些不愿意帮助自己的人是没有 意义的。如果你不能接受这种“歧视”,我们建议你花点钱找家商业公司签个技术支......
看某某老师给同学的观点有感(2005-11-19 21:15:00)
摘要:看某某老师给同学的观点有感http://www.programfan.com/club/showbbs.asp?id=122427
引用原文:我的老师昨天说,现在学软件只能从上往下钻,他的意思是:不管你懂不懂什么是数据结构,如果人家已经写出来的类,你只管继承和调用它就行了,你写不出来,即使你写得出来也不如人家写的好,无谓辛苦又不讨好。他还说,现在的软件业已是一个处于一个平流的行业了,不管你想做什么软件人家都已经有现成的类了。那些底层的东西你现在不需要懂将来也不需要懂。软件业的个人英雄时代已经过去了。他对PC软件业已经失去信心了,他说,你看现在世界上除了那几个软件巨头以外还有哪个软件公司过得滋润的?标准就是由软件巨头公司定的,比如你现在做出一个比微软的OFFICE还牛的软你认为有人会用它吗?事实上你也不可能做出来。他劝我不要学这门了,他还把他以前收藏的书送给我,他说他不干了。他特别介绍了一本关于MFC的书给我说,如果你还想学的话请跟好微软的脚步,它有什么新技术只要你会调用就有饭吃了。中国想搞像windows那样的操作系统那是不现实的,先不谈技术问题,首先是没有启动资金的,以后的商业价值也是一片迷茫。你让一帮人不吃不喝跟你写那些没用的东西是不现实的。试想一下如果LIUNX不是免费软件,你现在会知道还有一个操作系统叫LIUNX吗?不要说LIUNX怎么怎么好,LIUNX能做的windows也能做。它们只是收费和免费的差别而已。听他说了这些话以后我失落了好几天,他的话确实也有道理。试想一下,如果想开发一个windows程序不用API函数是不现实的。如果是那样的话我们学那些数据结构还有什么用呢?现在我们学C还有什么用呢?还是学VC和VB算了,在窗体上画控件,写一点事件过程就得了,什么TCP/IP,什么读/写让API自己去解决算了。我看软件是没什么搞头了,大家罢手吧!哈
我的观点:
1.“如果人家已经写出来的类,你只管继承和调用它就行”这个基本上是对的,这就是很多专家建议的,尽量使用库函数。但是这个说起来很容易做起来并不容易,现在每个语言、平台的函数库、类库里面的东西很多,你要懂得选择,因此懂得选择的人就比不懂的人强,更进一步说,你可能需要自己开发完全属于自己的东西,这时候就存在另一个问题,那就是模仿,你要懂得模仿好的程序,好的代码(包括风格)……而这些其实仍然需要学习,只......
