这是篇很好文章,看了后感到无地自容,感到全身充满力量。
1.读计算机研究生最好要有实际际开发经验
这里所说的“有实际开发工作经验”通常应该具备:1)你已经认为C++和汇编语言都是很简单的语言,并能够自如地运用; 2)你完全理解STL为什么这么重要;3)你能够在30分钟之内想到正确的五子棋AI算法设计思路和方向;4)你能够独立地解决所有的编译与链接问题,哪怕你从来没有遇到的问题,你也不需要询问任何人;5)英文网站是你的首要信息来源; 6)能够读懂英语写成的国际标准,比如NTFS磁盘格式标准。 7)你经常站在集合论的角度思考算法问题;8)能够理解一个简单的驱动程序,能够理解一个简单3D交互程序;9)你能够认识到线性代数和概率论在实际编程工作中的极端重要性;10)你完全理解COM的设计思想,尤其能够理解COM为什么要设计成这样; 11)当我说到虚函数的重要作用时,你不会急着去找书来翻; 12)你能够说出C++为什么比其他语言优秀的理由,记住这种理由应该来自于你的开发体会,而不是因为其他人都这么说。此外还有很多判断标准,但如果你同时具备5条以上,可以认为你已经具备相应的开发经验了。在这种状态下读研,你将取得读研效益的最大值。
当然,如果你有实际开发工作经验,感觉自己的水平和实力进入了一个高原期,迫切需要从理论上提高,那么计算机学院是唯一选择。因为计算机学院才能让你在理论上更上一层楼。当然能不能更上一层楼最终还是完全取决于你自己。需要特别说明的是,工作经验并不一定等于开发经验,我见过很多工作2-3年的人,但是没有一点开发经验。比如我。我原先的室友,研究生毕业,现在留校当老师,他好象从来都不写程序,好象也写不来程序。还需要说明的是,考计算机的人未必个个都是高手,严格来说,大部分都不会编程序。也就是说,庸庸碌碌之辈仍然占绝大多数。我的许多研究生毕业的师兄都只有到高校教书等,甚至找不到工作。所以不要寄希望于拿一张研究生文凭出去赚高薪。但是,对于有实际开发工作经验的人,要想自己在3年之中有一个真正的提高的话,计算机学院提供了广阔的平台。
2.为什么要读计算机研究生(目的)
读研最重要的是要明白你自己要干什么,不能等导师来告诉你你应该干什么。研究生的优势在于理论功底深厚,思维具有穿透力,当然编程能力首先要过关,不要读完研究生还不知道MFC程序的WinMain函数在哪里。所以,研究生期间,你一定要做有理论深度的算法设计,比如大规模数据的搜索算法,性能是首要考虑因素,不要奢望SQL函数能够帮你解决问题,所有的问题你都必须自己解决,你必须解决内外存交换的性能瓶颈。再比如极品飞车的3D场景生成,图形变换,碰撞检测,物性模拟,纹理映射,灯光模型等等,这些都是可以保证你能拿到2万以上月薪的技术。如果你认为这些东西太难,不可能做得出来的话,那么你就不适合读研。真的,要是你认为读研之后还是要去搞一般的程序设计,如信息管理系统之类的软件,那么你读研的价值就完全不会得到体现,因为这些工作根本就不需要读研。 如果你只想成为软件开发高手(比如认为会编驱动程序或杀毒软件就是高手的那种),建议工作,不要考研;完全没有工作经验的,也不建议考研,你进来了只有瞎混一通。如果你有上述工作经验且想成为高级软件工程师(能够独立理解并设计出快速傅立叶变换算法的那种软件工程师)的话,那么强烈建议考研。考研让你有3年放松思考的机会,也有3年让你思想和技术积累沉淀的机会。非常难得的机会。不考研的话,这种机会就是一种奢侈,可望而不可即的那么一种奢侈。同时,不管你是哪一种情况,都不建议考软件学院。除非你是女生,把能够成为一个研究生当着一生最大满足的那种女生。
3.读计算机研究生投入与产出分析
1)机会成本。这是个经济学问题。读研的机会成本的确是很高。任何人都可以简单地计算出来。所以,我也不赞成所有的人都去读研。读研只适合那些痛感数学在编程中的极端重要性的人。如果对理论工具和理论思维的极端重要性没有切肤的认识,那么读研的价值几乎为0;读研的好处在于:A,把你自己放在一个学术和工程的交叉点上;B,让你具备了进入微软等世界顶级软件研发机构的可能性;记住只是可能性。但是不读研这种可能性为0;C,如前所述,如果没有读研的机会,你也就没有静下心来好好钻研几年理论的机会;一边工作拿高薪,一边深入地学习各种理论,诸位认为这可能吗?我反正认为不可能,我觉得学习钻研理论最需要的就是一个长期安静独处的环境,一边工作一边读书是不可能有这样的环境的,你会觉得每天都在疲于奔命。而读研正好可以提供这样一个环境。我同时还反对整天跟着导师的屁股后面跑,这样会浪费很多时间。读计算机的研究生,主要依靠自己去查阅最新文献,自己去研读文献,和导师的口头交流一个月一次就足够了,前提还需要导师的水平足够牛。如果导师的水平不牛,这也没关系,不理他就是了,自己做好自己的事情即可。
2)教学质量。就如网上一个人说,全国都是“洪桐县中无好人”,尤其在计算科学领域,大牛极少。那为什么还要去读研?大哉问!把读研的收获寄托在名校或名师的名我认为气上,是注定要失败的。读研全靠自学,研究生之间的差距全部体现在自学能力上面。又有人问,既然是自学,为什么非要读研?回答是:因为读研就是为你买一份保险,就是买一份你自学三年之后不会失业的保险。这份保险主要是一种心理上的后盾,让你在自学过程中经得起诱惑,能够从容镇定地去追寻计算机理论发展的坚实足迹,从欧拉,费马,高斯,康托,图灵等巨匠那里寻找方法论的珠宝。倘若没有这份保证,你在家里面自学3个月,保证你会被失业的压力压得喘不过气来,何谈安心学习?
3)理论与实践。这没有定论,如前所述,管理信息系统,设备驱动开发,工具软件开发,软件病毒剖析等等这些工作不太需要创造性,需要的是耐心和经验,需要的是对既有规范的准确理解,这类开发工作最适合在实战中提高,理论学习没什么作用。但是在人工智能,模式识别,图像压缩,虚拟现实,巨量数据检索,自然语言理解,计算机图形学等等领域,理论学习就占据着绝对的统治地位!这些领域的突破对人类的生活的影响是极其巨大而深刻的。某些领域处于一个极其快速发展的态势之中,比如计算机图形学,相信诸君能够从众多3D游戏的灿烂辉煌中体认到我的这种说法。在这些领域,如果没有扎实的理论功底,一切都是那么遥远,不管你花了多少时间在编程上面。
4)知识结构。首先声明,我不是一个纯粹理论激进分子,即认为除了理论之外,一切都不重要。我认为,纯熟的编程技能是最基本但也是最必不可少的技能。没有这个基础,一切计算机理论就是空谈(研究图灵可计算性理论的研究者除外)。有了这个基础之后,一些基本理论学习方向必须重点突破。
4.读计算机研究生应具备的理论素养
1,科学哲学。这是核心中的核心!可惜国内不开这门课。不但不开课,而且还作为批判对象来引用,实在是遗憾至极!这是一门教你如何“钓鱼”的学科,在一切科学研究中居于最核心的地位。它是古今科研方法和思维方法的集大成者,很难想象一个成熟的研究者没有一套自己的方法论体系。科学哲学最需要的是领会与总结,它的思想与启示会伴随我们的一生。
2,康托集合论,矩阵方法,离散结构,图论方法,群论方法之间的紧密关系。最重要的认识这些理论对实践的重要启示和方法引导。我始终认为,如果你学了一门理论之后,却不知道这门理论有什么作用,那么你的理论就白学了,你什么东西都没有捞着。所以,学习任何理论之前,先问自己:它有什么用?在哪里用?如何用?带着这些问题去学习理论,你才会真正地学到东西。用这三个问题去问你的理论课老师,他的回答就是判断其实际水平的最佳标准。
3,思维要有极强的穿透力,学会看透文献作者没有写出来的动机。绝大部分大师都有隐瞒自己最具有方法论启示意义的思考环节的习惯。牛顿和华罗庚先生都有这个坏习惯。这让大家认为他们是天才,因为很多问题他想到了,我们想不到。但是为什么他们能想到,我们想不到?他们是怎样想到的?没有人告诉我们牛顿发现万有引力定律时的思考过程,当然,牛顿可以慷慨地把他的思考结果告诉我们,但是,他那可以点石成金的“金手指”却没有教给我们。我们的任务就是要培养透过文章看穿作者背后意图和动机的能力,在这方面,台湾的侯捷和美国的Donbox是绝佳典范。这两只老狐狸(呵呵,是爱称)凭着其猎犬一般的嗅觉,抽丝剥茧,一个把COM背后的幕后设计动机揭开并暴露到了光天化日之下,另一个把MFC的宏观架构做了一次完美的外科手术。其非凡的思维穿透力令人惊叹。
最后,英语这个狐狸精。英语本身不重要,但是用英语写成的文献就极其重要了。所以,专门把英语作为一个重头戏列出来。大家不要相信英语无用论的鬼话。对于搞计算机的而言,英语就是你的母语!英语是科学家的工作语言,就如普通话是教师的工作语言一样,一个不会普通话的老师,一定是最早该下课的老师,一个讲着方言的人,一定是没有什么文化含量的人,一个到处是方言的学校,一定是三流或者三流一下,甚至是Y学校,一个只讲方言的寝室要么是不团结,要么是地方学校,要么都是一群没有眼光的人,没有什么出息。
其它的具体理论还有很多,但是都不如这几个个方面重要,因为我觉得这几个个方面是最具有根本性,全局性的能力培养环节。需要指出的是,很多高深理论对你的工作是无意义的,当心时间陷进去。一定要把效率最高的时间段用在最具有决定性意义的理论学习上。关于读研之后的出路是否光明的问题。我们应该承认,读研之后,你的工作机会不是变多了,而是变少了。而且越是高手,他的工作机会和工作范围就越少。这是因为,越是搞前沿研发的公司,其数量越少,在这个圈子的人也就越少。你找工作的范围就越小,试问:如果微软的OS设计专家出来找工作,能够让他选择的公司能有几家?但是,这种公司数量的减少是以工资待遇的急剧上升为补偿的,同时,你在工作中所受到的充分尊重也是在一般公司中体会不到的。所以不要担心学了高科技用不上,呵呵,你只会越来越感觉自己学的不够用。既然选择了理论深入,那么就应该把眼光放得更远。
参考链接:
http://www.javaeye.com/topic/124612
http://www.javaeye.com/topic/2832
http://www.javaeye.com/topic/8283
http://www.javaeye.com/topic/151187
http://www.javaeye.com/topic/2312
http://www.itpub.net/viewthread.php?tid=510215&extra=&page=1
以下摘几个我自己认同的观点:
1, 其实有一段时间我们的开发人员也有这种想法,以为程序可以控制好
后来发现没有外键的表里经常有垃圾数据(找不到父亲的孩子),然后又把外键一一加上去,后面测试才发现是应用的BUG,在特定情况下才会发生的BUG。
如果没有外键那数据库就不会报错,也就是说垃圾数据不能阻止。
2,在复杂的业务逻辑下,程序来保证这个是极不可靠的,只有交给数据库从底层来保证才能避免出错。
当然,如果是稳定的程序中把外键去掉会怎么样,这又是另一回事了。
外键的存在对数据库的维护来说是有一些不方便的地方。
3,我们以前做开发的时候,在开发、测试阶段,是所有业务逻辑需要的外键都加上的。数据量小,并发少,也无所谓什么性能什么的。等测试和试运行一段时间后,再将外键去掉,以提高性能。
4,怎么这么多人不用外键的,外键可是逻辑的约束啊!说外键影响性能,可以denormalize外键表啊,但是插入更新必须要符合约束啊,我觉得这是不可替代的啊
对数据的约束最好尽可能放到db里,集中管理清晰准确,以前吃过应用管理约束的亏,不过好好看看oracle sap这些范式做的都还不错啊,他们都这样做我想多少能说明点问题吧
5,你看看oracle系统数据表的设计,再看看大型数据库表的设计,你就明白,外键约束无处不在。
6,该用的地方,就一定要用!前几天我们的应用程序发现一个bug,后来我仔细一查,就是由于没有使用外建,数据不匹配导致的。教训深刻!
7,如果现在要我来选择,我决定是要用的一定要用,这是系统设计的严谨性的要求,不然产生一堆垃圾数据,这是在一个好的系统中是不允许的。
8,呵呵,做过开发的DBA应该都会有这样的体会
当统计报表中的数据不对的时候就知道什么叫问题严重了,要一点点数据去核查。
9,最好还是使用数据库外键这个最直观的功能吧
至于性能不知有没有什么测试数据,究竟能慢到什么程度,不要听说会慢就不用吧(呵呵,从TOM的书里学到的)
10,这要看是建立哪种类型的数据库了
如果是操作类型的数据库 OLTP 面向应用的
数据的规范化是很有必要的.. 该用外键的情况一定要用.
如果是面向部门 用于OLAP或建立数据仓库.
这种时候 往往需要反规范化 存取效率是首要因素
我自己的结论:如果是做企业级的OLTP应用,并且数据量不是非常大的话,一定要建外键。毕竟对于企业来说,保证数据的正确性是最重要的。但如果经过长时间的运行证明代码可靠、并且数据量已经很大,这时也可以去掉外键以提高运行速度。
原文链接:http://www.blogjava.net/leekiang/archive/2008/04/14/192910.html
看似有差不多的作用,加了Key的表与建立了Index的表,都可以进行快速的数据查询。
他们之间的区别在于处于不同的层面上。
Key即键值,是关系模型理论中的一部份,比如有主键(Primary Key),外键(Foreign Key)等,用于数据完整性检否与唯一性约束等。
而Index则处于实现层面,比如可以对表个的任意列建立索引,那么当建立索引的列处于SQL语句中的Where条件中时,就可以得到快速的数据定 位,从而快速检索。至于Unique Index,则只是属于Index中的一种而已,建立了Unique Index表示此列数据不可重复,猜想MySQL对Unique Index类型的索引可以做进一步特殊优化吧。
于是乎,在设计表的时候,Key只是要处于模型层面的,而当需要进行查询优化,则对相关列建立索引即可。
另外,在MySQL中,对于一个Primary Key的列,MySQL已经自动对其建立了Unique Index,无需重复再在上面建立索引了。
搜索到的一段解释:
Note that “primary” is called PRIMARY KEY not INDEX.
KEY is something on the logical level, describes your table and database design (i.e. enforces referential integrity …)
INDEX is something on the physical level, helps improve access time for table operations.
Behind every PK there is (usually) unique index created (automatically).
原文链接:http://yali-wang.iteye.com/blog/854414
是让生活过得索然无味,还是积极向上,决定权就在自己的手中。每天问自己10个问题,然后去奋斗!
如果你想走出常规,放松心情,以积极的心态开始每一天,那就很有必要以自问的方式开始一天,这些问题会给我们带来力量和好心情。

1、我拥有什么?
通常我们会为自己没有的东西而苦恼,却看不到自己拥有的,如健康、可以听、可以看,可以爱与被爱,每天都有食物供我们享用等。正如那句口口相传的话所说的:“失去了才知道珍贵。”让我们走出哀怨,这样就可以看到什么是我们拥有的。
2、我应该为什么感到自豪?
为你已经取得的成绩而自豪。成绩不分大小,每一次成功都意味着向前迈出了一步。你可以为你刚刚战胜的一个挑战感到骄傲,可以为帮助了一个陌生人而感到幸福,可以为帮助了一个朋友露出微笑,也可以为结识了新朋友或读了一本新书而感到高兴。总之一切都值得你自豪。
3、我应对什么心存感激?
每天都有很多事情让我们为之心存感激,同时也有很多人值得我们感谢,因为他们在无形中教会了我们一些事情。生活的每一天对于我们来说都是一份珍贵的礼物。
4、我怎样才能充满活力?
每天都要计划好做一些积极的事情,让自己充满活力。例如,可以给那些一直以来你都很欣赏,却很久未联系的人打电话,对工作伙伴说一些鼓励的话,保持微笑,或者留出时间和孩子玩耍等。
5、我今天能解决什么问题?
设法把那些原本想留到明天才解决的问题今天就解决掉,尽量在当天完成手边的工作,要敢于面对那些棘手的问题,并换一种角度看待它们。
6、我能抛下过去的包袱吗?
“过去的包袱”就是指那些长年累积起来的伤心的经历和怨气。背着这些沉重的生活包袱有什么用呢?建议你对过去做一个总结,把值得借鉴的经验保存起来,然后永远地卸下重负。
7、我怎么换个角度看待问题?
人往住都是别人的建议者,却不是自己的。很多时候,根本问题就是我们看待事物的方式。很多人都经历过为一件事苦恼不堪,过后又觉得可笑的时候。悲和喜只是我们看问题的角度不同而已。
8、我怎样过好今天?
做些与往常不一样的事情。如果我们走出常规,学会享受生活,那么生活就是丰富多彩的。我们要敢于创造和创新。
9、今天我要拥抱谁?
拥抱是我们的精神食粮。曾经有一位心理学家说过,要想健康,每天要至少拥抱8次。身体接触是人最为基本的需求,它甚至可以帮助我们开发大脑。
10、我现在就开始行动?
不要认为这些都是“听起来不错”的建议,也不要认为生活很难是这样的。其实,每天的生活都不是你想像中的那样。是让生活过得索然无味,还是积极向上,决定权就在自己的手中。努力幸福地生活,你又会失去什么呢?
来自:互联网
导读:PHP是一门高效的网络编程语言,由于它具有编写灵活、运行快速等优点,迅速成为Web程序员的优选开发语言。但要成为一名 PHP编程高手却并不容易。并不像很多人想象的那样,只要能够飞快地编写几条简单的代码去解决一个复杂的问题就是PHP编程高手了,真正的PHP高手还需 要考虑更多的其它问题。
从某种程度上看,编程语言要实现的最终目的是一样的,用汇编的思想来考虑编程是个不错的选择。尽管用汇编、链接、加载的思维在编程中作用显著,但若是用高级程序语言编写的程序,用这样的思维理解起来比较有困难。
事实上,提高最基础的编程能力是有助于提高对特殊语言的灵活运用的;同样的,学习编程语言的细微差别和关注该语言所开发的应用软件同样重要。就好像一个木匠,他需要提高基本的测量能力,或者学习一些特定车床的使用方法,而事实上,优秀的木匠通常是需要兼具二者。
要想提高你的PHP编程能力,你可以做两件事情:1)更扎实的掌握基本编程技能;2)更细微、更深入地了解PHP。
以下总结出的几条指南导航将有助于提高开发者的PHP编程能力:
一、提高PHP编码能力的10个细节
或许你并不能从这些细节中学到绝对新的东西(例如“如何对变量和函数做好的命名”,“对代码做好注释”,“频繁测试代码”),而它们可以让你巩固基 础知识。以下几点解释了为什么最好的普通编程实践在PHP应用软件开发中尤为重要。其中10点建议分别为:1)如何开始良好的开发风格;2)合适的变量及 函数命名;3)注释代码;4)自己动手做大部分的工作;5)多方涉猎;6)了解开发语言的局限性;7)接受结构上的意见反馈;8)频繁的测试代码;9)在 自己的工程上内嵌程序;10)不要把每一个文件都分一个文件夹
二、写出更优PHP代码的7条法则
以下7种方法列举出了PHP开发商极有可能面对的问题(例如不使用模板,不合适的封装,在增删修改时PHP和SQL的混淆使用等等),对于那些很有 可能危害到PHP应用程序运行的各种复杂语句,该指南也提供了多种方法来清除(例如对大容量的网页减少数据库查询)。以下是文章中提到的关键点:1)在模 板中使用可选择的PHP语法;2)封装所有的东西;3)使用一个数据库对象;4)使用增删查改功能;5)与调试为友;6)重视命名;7)减少数据库查询。
三、多关注PHP技术论坛
这部分作者发布在codingforums.com上的PHP论坛版块, 该论坛所涉及的内容主要包括针对PHP和网页应用程序(HTML、CSS、JavaScript、PHP相关内容以及网页安全)和使用 PHP(MySQL、JavaScript)来开发特殊系统。对于任何没有PHP/SQL开发经验的人,哪怕是通常意义上的好程序员来说,若想做一些特别 的事情,拒绝平淡无奇,这里将为你提供最好的资源。
四、其他的资源
此外,CSDN还为您总结了一些精彩的PHP学习资源、开发工具和大师的经验之谈,包括:15个学习PHP的国外好站点推荐(国外学习PHP的精品站点,很多在线案例教程),10位顶级PHP大师的开发原则和最佳实践,PHP学习之路——工欲善其事,必先利其器 。
以上提供的这指南是否对您有价值呢?当然,这最终要取决于您所选择的方向。(CSDN陈荣梅/编译)
文章出自:Dzone
来自:CSDN
原文链接:http://sd.csdn.net/a/20111215/309192.html