1. 在你责怪别人之前,先检查自己的代码
先想一想自己的假设和其他人的假设。来自不同供应商的工具可能内置不同的假设,即便是相同的供应商对于不同的工具,其假设也可能不同。
当其他人正在报告一个你不能重复的问题的时候,去看看他们在做什么。他们可能会做一些你从来没有想到过的事情,或者他们的做事顺序与你的截然不同。
我个人的原则是,如果我有一个不能确定的错误,那么我会先考虑是不是编译器的问题,然后再去检查堆栈是否损坏。特别是当添加跟踪代码会使得问题移动的话就更要这么做了。多线程问题是 bug 的另一个来源,有时候令人焦躁得简直想拔光头发,或者直接想摔电脑。当系统是多线程的时候,最好倾向于简单的代码。我们不能依赖调试和单元测试来发现任何一致性的 bug,所以设计的简单性是最重要的。
所以,在你不分青红皂白地去责怪编译器之前,先想一想福尔摩斯的这条建议,“一旦你排除了种种不可能,剩下的不管有多么难以置信,一定就是真相”。
2. 不断学习
我们生活在一个有趣的时代。随着软件开发逐渐遍布全球各地,你会发现有很多人都可以干你的工作。所以你需要不断学习以保持竞争力。否则,你就会落伍,停滞不前,直到有一天,这份工作不再需要你,或外包给一些更廉价的劳动力。
那么我们能做些什么?有些雇主很慷慨,会提供培训以拓宽你的技能。也有的人会说我没时间或者没这个资金去接受任何培训。所以,关键是要摆正心态,学习是对自己的负责。
这里有一些学习的方法。而且许多资源都可以在互联网上免费获取:
•阅读书籍、杂志、博客、Twitter feeds 和网站。如果你想更深入地了解对象,可以考虑添加到邮件列表或新闻组。点击这里通过邮件订阅《快乐码农》杂志
•如果你真的很想学习某一种技术,那么就亲自动手写代码。
•
尽量与导师一起工作。虽然你从任何人身上都可以学到一些东西,但是从那些比你更聪明或更有经验的人身上,你能学到的更多。如果你实在找不到这样的良师益友,那么请继续往下看。•使用虚拟导师。在网络上找你真正喜欢的作者和开发人员,阅读他们写的内容。订阅他们的博客。
•了解你使用的框架和库。知道事物的工作原理,有助于你更好地应用它们。如果你使用的是开源资源,那么你真的很幸运。使用调试器单步执行代码,以查看内部究竟是怎么回事。你也可以去看看那些确实比你聪明的人是如何编写和审查代码的。
•当你犯了错误,修复 bug,或者遇到问题的时候,试着去真正理解发生了什么事情。很有可能其他人已经遇到过同样的问题,并且发布在了网上。谷歌搜索真的很有用。
•学习东西还有一个好方法就是所谓的“教学相长”。当别人在倾听你的言语,并问你问题的同时,你也会学到东西。可以建立用户组或本地会议。
•为自己感兴趣语言和技术加入或启动一个研究小组(模式社区),也可以创建本地的用户组。
•参加会议。如果去不了的话,也可以在网上看,许多会议会将其谈话免费发布到网上。
•收听播客。
•曾经对代码库运行过静态分析工具,又或者查看下你的 IDE 警告?了解它们报告了什么,以及其原因。
当然如果你有《黑客帝国》中 Neo 那样的超能力,自然这一切对你而言不过是小菜一碟。但很可惜,我们都是普通人,我们需要时间和精力,以及不断的努力才能促使自己不断的学习。不过,你不必成天学习。只要你能有意识地花点时间去学习就可以了,哪怕每天一小时,有总比没有好。人活着不是为了工作,你还应该有自己的生活。
3. 不要害怕破坏东西
每个具备行业经验的程序员肯定参与过代码库岌岌可危的项目。系统很糟糕,并且改变这边总是会破坏另一边不相关的功能。每次添加模块,程序员只能想着尽可能少地改变代码,每次发布都胆战心惊。这座软件的摩天大楼随时有坍塌的可能。之所以改动代码会如此伤脑筋是因为系统太糟糕了。但是即使你知道系统出了问题,却又因为投鼠忌器,而不得不听之任之。任何一个外科医生都懂得,伤口要想愈合就必须得切除腐肉。虽然手术会带来痛苦,但绝对比任伤口发炎溃烂要好。
不要害怕你的代码。没有人会在乎当你捣鼓代码的时候有没有暂时破坏了什么东西。只要你做的改变不会让项目重新回到开始状态,就不会令人崩溃。投入时间重构,能让你受益于项目整个生命周期。这样做还有一个额外的好处是,由于你有过这种处理病危系统的经验,所以你对它应该如何工作非常内行。要善于应用这些知识,千万不要反感这些宝贵的财富。重新定义内部接口,重构模块,重构复制粘贴代码,并通过减少依赖来简化设计。你可以通过消除特殊情况显著降低代码的复杂性,因为特殊情况往往是因为错误的耦合特点导致的。慢慢地从旧结构过渡到新结构,测试一路同行。如果你想要一下子完成一个大的重构,那么往往会因为各种频出的问题而考虑中途放弃。
4. 专业程序员
专业程序员的一个最重要的特点是有责任心。专业程序员会为他们的职业生涯、预算、日程安排承诺、错误、技能技巧负责。一个专业的程序员不会将责任推卸给别人。
如果你是专业的,那么你就需要为自己的职业生涯负责。你有责任去阅读和学习。你有责任去时刻关注最新的产业和技术。但是许多程序员觉得这应该是他们雇主的工作。NO,大错特错。想一想医生?想一想律师?他们都是靠自己来培养和训练自己的。他们的下班时间多用在了阅读杂志报刊上。他们时刻关注着最新的资讯动态。所以,我们也应该如此。你和你雇主之间的关系,已经在雇用合同上作了详细的说明,简而言之就是:你的雇主承诺支付你薪酬,而你承诺做好工作。
专业程序员会为他们编写的代码负责。除非他们知道这些代码是有效的,否则就不会发布代码。现在,好好思考这个问题:如果是你,你会不会在不透彻了解代码的情况下就直接发布代码?专业程序员不希望 QA 找到任何 bug,因为这些代码都是经过他测试之后才发布的。当然,QA 依然会发现一些问题,因为没有一个人是完美的。但作为专业程序员,我们的态度应该是让 QA 找不到任何缺陷。
专业程序员也是好的团队成员。他们负责地对待整个团队的输出,而不是只顾自己的工作。他们乐于助人,善于向彼此学习,在需要的时候甚至会鼎力相助,为了项目前仆后继。
5. 充分利用代码分析工具
测试的价值是编程早期阶段就灌输给软件开发者的一个理念。近年来,单元测试,测试驱动开发和敏捷方法的兴起,证实了我们开始注重于在开发周期的各个阶段进行测试。但是,测试只是你可以用来提高代码质量的许多工具之一。
回过头去看,当C语言还是一个新事物的时候,CPU 时间和任何类型的存储都是非常宝贵的。第一个C语言编译器注意到了这一点,所以选择了通过去掉一些语义分析,来减少代码之间的传递次数。这意味着,在编译时,编译器检查到的可能只是可被检测到的 bug 中的一小部分。为了弥补这个缺陷,Stephen Johnson 写了一个名为 lint 的工具——它将从你的代码中删除一些没有价值的东西——从而实现一些已被它的兄弟C语言编译器撤掉的静态分析功能。然而,静态分析工具却因为可以给出大范围的误报警告和一些没有必要遵循的静态文体惯例的警告而倍受赞誉。
现在的语言、编译器和静态分析工具的设计和以前已经大不相同。由于内存和 CPU 时间变得相对比较便宜,因此负担得起编译器检查更多的错误。几乎每一种语言都拥有至少一个工具,用来检查风格指南的违规行为、常见问题以及一些狡猾的有时候可能很难捕捉到的错误,如潜在取消引用空指针。更高级的工具,如C的 Splint,以及 Python 的 pylint,是可配置的,这意味着你可以通过命令行开关或在 IDE 中,使用配置文件来让工具选择放过其中的哪些错误和警告。Splint 甚至还能让你在注释中注解你的代码,以便于更好地提示你的程序是如何工作的。
6. 关心代码
优秀程序员能写出好代码,这是毋庸置疑的。坏程序员……则不能(他们能写出好代码,就不是坏程序员了,哈哈)。他们总是在生产其他人不得不消灭的怪兽。你的目标是写出好代码,对不?那么你应该成为好程序员。
好的代码并不是凭空而来的,也不能靠运气然后恰巧让你瞎猫碰到死老鼠。为了获得良好的代码,你必须努力的改进。过程是艰难的。但是如果你确实关心代码的话,那么你一定能收获好代码。
仅靠技术并不能成就好的编程。我碰到过一些非常聪明的程序员,他们能够产出令人印象深刻的算法,能够熟记语言标准,但却写出了最可怕的代码。这种代码,阅读起来很痛苦,使用起来很痛苦,修改起来更是令人痛不欲生。我也碰到过一些非常谦逊的程序员,因为坚持简单的代码,所以写出来的程序更优雅,更易于表达他的意思,和他们工作非常愉快。
基于我多年的软件生产经验,我得出的结论是,差强人意的程序员和伟大的程序员之间的真正区别是:态度。好的编程在于专业的方法,以及一种竭尽全力希望写出最好软件的期
望。要成为一个优秀的程序员,你必须对自己的代码负责,真正关心代码——养成积极向上的心态。伟大的代码是由大师精心雕琢的,而不是由那些马虎的程序员胡乱写出来的。
计算机专业句子翻译
You want subclasses in any package to have access to members of a superclass.Which is the most restrictive access that accopmlishes this objective? 我们希望任何封装子类可访问超类成员。
实现这一功能的过程中,最大限制因素是什么呢?Explicitly setting my A to null marks that instance to be eligible for garbage collection. 将myA设置为空,使该实例符合垃圾回收机制。
Private instances of A become eligible for barbage collection when instances of Alpha become eligible for farbage collection. 当Alpha实例符合垃圾回收机制时,A的私有实例也将符合垃圾回收机制。
关于JAVA垃圾回收的资料:http://dev.yesky.com/113/2160613.shtml
关于c++中的assert语句
在真正的大型程序中,出问题的概率是非常大的,而出了问题如何解决,有时比较困扰,因为代码可能几百万行就算你写if也只是做的一些规避正确的做法是加assert目的就在于,当条件是false时,assert让程序中止,输出错误所在的代码块,这样才方便分析和解决问题。
断言常用在程序开发过程中,程序员不想写更多的异常处理代码,又想立即定位到异常的位置,在DEBUG模式下断言就起到了关键的作用,大大提高开发效率。
...
java的问题 用for语句写
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。
Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等。
网页设计添加版权的语句怎么写
美国产权局关于版权声明格式的说明对于可视化的,或者图形的(比如书籍,电影,网页,软件)版权声明,应该具备如下三部分。
1。
符号©(字母C外加一个圆),或者单词“Copyright”版权,或者缩写“Copr.”以及 2。
作品初次公开发表的年份。
如果是之前发表材料的编辑或者衍生(编辑比如:文选,衍生比如:翻译或者编剧),有权利使用编辑或者衍生作品的最初发表年份。
画报,绘画或者雕塑复制在贺卡,明信片,文具,珠宝,玩偶,玩具或者其他有用的物品上,如果有伴随的文本材料时,年份可以省略。
以及 3。
作品的版权拥护者名称,或者可识别的拥有者名称缩写,或者是拥有者的其他为公众知晓的名称。
圆圈中一个字母C的标志只能使用在“可视化的拷贝”。
某类作品,比如音乐,戏剧和文学作品,可能没有在拷贝中,而是出现在音频记录中的声音。
音位音频记录比如音频磁带和留声机磁盘等,是唱片,而不是拷贝,圆圈中C的标志不被用来表明对记录在这里的音乐,戏剧和文学作品的保护。
来自民间的关于版权声明格式的说明从法律角度看,加入了伯尔尼公约的国家,版权保护是随着作品(无论是文字,还是图片)的问世的即刻就得到版权的保护的,并不是必须要声明。
但是作为惯例,这一小行文字还是有很好加强意识,提醒浏览者,所观看的内容是受到版权保护的。
正确的格式应该是:Copyright [dates] by [author/owner] © 通常可以代替Copyright, 但是不可以用(c)。
All Rights Reserved 在某些国家曾经是必须的,但是现在在大多数国家,都不是法律上必须有的字样。
参见下面几个正确的格式: ©1995-2004 Macromedia, Inc. All rights reserved. ©2004 Microsoft Corporation. All rights reserved. Copyright © 2004 Adobe Systems Incorporated. All rights reserved. ©1995-2004 Eric A. and Kathryn S. Meyer. All Rights Reserved. 请注意标点符号和大小写的用法,这也是专业精神的一种体现。
现在流行some rights reserved:creativecommons.orgsome rights reserved 和copyright 本身并不矛盾,但是其中的界限更多是一个道德问题,真正的保留一部分权力,是指给浏览者fair use 的权利,fair use的界定也决不是随便乱用,或者抄袭。
甚至说,除了copyright, 还有copyleft,它的定义是为了程序员开发能够共享源代码的一个方式,英文里free, 并不仅仅是免费。
而且这种的源码公开免费使用,和版权也一点都不冲突。
请大家不要误解。
对于从网上下载素材,如音乐,图片等版权问题, 有朋友问这个问题,答案很简单,所有的这些都有版权问题。
和这些作品的大小格式没有关系。
版权是互相的,因为每个人都在随时的拥有着你所刚刚创造的作品的版权,哪怕你的涂鸦之作已经被丢进垃圾桶,严格意义上,那也不可以被人抄袭的。
不然公司就不需要碎纸机了。
只有彼此的尊重,互相的尊重才能有真正意义上的共享,简单的拿来主义,或者因为我是经典的用户,所以别人就必须要尊重经典的版权,而我不必尊重别人的版权,是不会形成好的版权保护意识的。
版权其实并不意味着付费,和商业化也没有直接的关联。
很多时候,你如果真想使用版权保护的内容,只要发封邮件,询问一下许可就可以, 大多数的情形下,个人用户是很喜欢甚至欣赏这样的礼貌和尊重的。
版权问题中很多的灰色地带,我想与其总是用法律的角度来要求用户,还不如让我们都从自己的道德来判断,从尊重的角度来取舍。
描写小动物外貌的优美句子
淘气的小猫 叔叔家有一只活泼可爱的小猫。
它身穿雪白的衣服,尖尖的耳朵,眼睛亮晶晶的像两颗绿宝石,尾巴长长的,神气极了。
1兔子的耳朵又大又长,只要听见一点轻微的声音,就会“唰”地一下竖起来,灵巧地四面转动,寻找声音发出的地方,直到声音没有了,才恢复常态2小白兔吃饱了的时候,就仨一群俩一伙地在沙地上跑来跑去,像一个个小雪球在滚动3小花猫的脑袋圆圆的,顶着一对尖尖的小耳朵,那大大的绿眼睛瞪得像两盏小绿 4小猫“咪咪”的那一双大耳朵,一天到晚都直竖着,哪个地方有声音,马上往那边转,活像一架有特殊性能的雷达 5这只花猫的全身是白底黑斑,远看上去,像一团雪白的棉花点上了几滴墨汁7小黑猫长长的尾巴像小鞭子似的,左右摇摆 8小猫有一对透亮灵活的大眼睛,黑黑的瞳仁还会变:早晨,像枣核;中午,就成了细线;夜里,却变成两只绿灯泡,圆溜溜的,闪闪发光9小花猫早上起来先伸一下懒腰,然后再坐起来,用两只前爪在舌尖上舔一点唾沫,像人一样地洗着脸,再用舌头不停地舔着自己的毛皮,直到有一点光亮为止 10那条小狗一身金黄色的毛,闪闪发亮,像刚刚擦过油似的11这只天真可爱的卷毛狮子狗,小黑尾巴一摆动起来,像个滚动的小绒球12那条小黑狗,一身乌黑发亮的皮毛,就像黑缎子一般油亮光滑;雪白的小爪儿,像4朵梅花;那条撅着的小尾巴,总是悠闲不停地摇摆着 13那黑狗不吼不叫,像一个很有身分的武士,威严,一动不动蹲在那里,雄纠纠张开胸脯上绒样的长毛 14狗的叫声不像猫的咪咪声那样有气无力,也不像老虎的叫声那样恐怖,而是中气十足,使人听起来有雄壮干脆的感觉15这头大肥猪,屁股溜圆,肚子蛮大,由于脂肪过度丰富,它只得慢慢走着,像架子很大的老爷16这只猪吃东西的时,两个耳朵像扇子一样一扇一扇的,脑袋一颠一颠的,眼睛紧紧地盯着食物17猪吃完食乖乖地走到圈里,懒洋洋地躺下了,还不时地哼哼两声,好一副心满意足的样子 18这匹枣红马,长长的鬃毛披散着,跑起来,四只蹄子像不沾地似的19这匹高头大马,浑身的每个部分都搭配得那么得当,每块肌肉都显示出力量,让人一看就觉得那么柔和,那么健美20刹那间,“千里雪”平稳地腾到空中,简直像滑翔一般地飞过了深沟,轻轻地落在对岸,继续前奔21小毛驴是那样惹人喜爱,黑眼珠滴滴溜溜乱转,撒起欢儿来像一只小鹿 22“呱哒、呱哒、呱哒……”驴蹄声均匀而单调,像墙上那面挂钟的砣在摇摆。
那头骡子仰着头,皮笼头上的红缨,像是秋雨里一朵艳红的鸡冠花23这些奶牛,身上白一块黑一块的,好像穿着花棉袄 24这条牛的两只眼睛像铜铃一样大,两只弯角青里透亮,特别是那一身黄毛,像绸子一样光亮 25那黑牛性子暴烈、凶恶,两眼大如乒乓球,红如火焰,头上两只尖角,利如锋刃。
26雪白的羊群撒在碧绿的草原上,像花、像云、像圣洁的哈达。
27草原上游荡的羊群像是一堆堆滚动的白银。
28暴风雪越来越猛,刮得羊群像棉花团似的滚动着。
29一峰峰骆驼,在大漠的孤烟中慢慢移动着身影,像小舟在大海里航行,乘着风,迎着浪。
骆驼的眼睫毛是双重的,当风起沙扬的时候,双重的眼睫毛像卫士似的,将沙挡住,不使它吹进眼里。
30太阳鸟的嘴巴生得十分奇特,很像一把锥子,又尖又长,略微有点弯曲。
31太阳出来了,照在小鸟黄澄澄的羽毛上,全身变得金灿灿的,简直像神话中的金翅鸟一样。
到了林中,百鸟的喧鸣,仿佛奏起一曲永不休止的乐章,连微微颤动的树叶都好像在歌唱着。
32金翅雀唱着、跳跃着,有时也扑打着,像一群不知疲倦的孩子,给这幽静的山庄更增添了情趣。
33这林子里的鸟什么颜色都有,什么声调都有。
你听,高音的、中音的、粗嗓的、细嗓的,简直是各种流派的、各种声调的歌唱家,在这里举行着歌唱大比赛。
JAVA中的public语句是怎么写的?怎么可以跟那么多的static、void等?...
.你要明白定义一个方法到底都有什么东西最常见的main方法public static void main{}public是方法的访问权限 一个有4种static是说明这个方法是静态的 这个根据需要写的void表示没有返回值 如果这里是int String什么的就说明这个方法有返回值 方法里必须有对应的return语句