0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

成为优秀程序员的7个方法

工程师人生 来源:网络整理 作者:工程师吴畏 2018-11-21 11:18 次阅读

程序员总是有很多的决定,不是吗?如果你的新年待办事项还是空白的话,那么可以考虑使用下面这些程序员的想法。即使是最聪明的人,也还有成长空间。以下内容摘录自 Kevlin Henney 的《程序员应该知道的97件事》。

1.在怪罪其他东西之前先检查自己的代码

质疑一下你自己和他人的预设情况。来自不同供应商的工具,可能内置有不同的预设,也有可能相同的供应商提供不同的工具。

当有人想你报告一个你无法重复的问题之时,去看看他们做了些什么。他们可能会做一些你没有想到的事情,或者是按照不同的顺序来做那件事。

我的原则是,如果我遇到一个我无法避免的bug时,我会首先考虑是编译器的错误,然后我就会去检查堆栈是否被破坏了。这可以通过跟踪代码来实现,可以有效地移除问题。多线程问题是另一个绞尽脑汁也不容易找到的错误来源,通常还伴随着机器的错误。当一个系统使用多线程的时候,所有的简单的代码的错误都会成倍地增长。不能依靠调试和单元测试去发现这样的兼容性问题,所以简单的设计是最重要的。

总之,在你怪罪你的编译器之前,请记住福尔摩斯的忠告:“当你把所有的不可能都排除了,那么剩下的东西,无论他有多么的不可能,都必定是真相。”Dirk Gently也说了类似的话。

——Allan Kelly

2.持续学习

我们生活在一个有趣的时代。随着全球化的发展,你要知道有大量的人都能胜任你的工作。你需要不断地学习,以维持竞争力。否则,你会成为一个落伍的人,永远做着相同的工作,直到你不再被需要,或者这个工作被廉价外包给其他人的那一天。

因此,你打算做些什么呢?有些大方的老板会提供训练来拓宽你的技能。而其他的公司并不会给你空闲的时间和金钱去做任何的训练。所以为了工作的稳定,你需要为自己的教育负责。

这里是一些让你持续学习的方法清单。其中许多都能够随便在网上找到:

阅读书籍、杂志、博客、Twitter和其他网站。如果你想对一个目标进行更深入的研究,考虑添加一个邮件列表或新闻组

如果你真想专注于某一种技术,那就动起手来——写一些代码

成为行业的顶尖人物可能会妨碍你的学习,你得尽量与导师合作。虽然你可以从任何人那里学到东西,但是从那些比你更聪明或更有经验的人那里你能够学得更多。如果你不能找到一个导师,那就继续去找

使用虚拟的导师。在网上找一些作者或者开发人员,他们写的东西你都会喜欢并且都会看的。订阅他们的博客

了解你所使用的框架和库。知道了他们是如何工作的,你使用起来就更得心应手。如果他们是开源的,你就很幸运了。使用调试器来单步执行,去观察他们内部是如何运作的。你将会看到那些真正聪明的人所编写和审阅的代码

当你做错了或者是在修复bug,或者是碰到一个问题的时候,尝试去深入了解到底发生了什么。有可能其他人也遇到了同样的问题,并且把2他发布在了网上。Google这时候就非常有用了

学习一样东西的一个好方法就是去传授和谈论它。当人们想要听你讲解并且想问你问题的时候,你就会更加积极地去学习。在工作中使用lunch-‘ n’-learn方法,可以是一个用户组或者是一个本地的协会

加入或者创办一个研究小组(社区的模式)或本地用户组,可以研究你们感兴趣的语言,技术或者是法律

多去参加会议。如果你不能去,很多的会议都会把内容免费发布到网上的

想要长期通勤?听一下博客吧

你是否曾经在一个代码库上运行一个静态分析工具或者在你的IDE里看到一些警告?弄明白他们报告的是什么,为什么要报告

遵循高效程序员的建议,每年学习一门新的语言。至少学习一门新的技术或者是一个新的工具。弄一个分支出来添加上你的想法,以便你能够在你目前的知识库里使用

并不是你应该学的每一样东西都必须跟技术有关。学习你工作领域的一些东西,能够让你更加了解需求,并且能够给帮助你解决一些商业问题。学习如何提高工作效率,学习怎样更高效低工作是一个不错的选择

返回学校

如果你有《黑客帝国》里的尼奥那样的能力就好了,能够直接下载我们需要的东西到大脑里面去。但是我们并没有,所以必须花费一定的时间去学习。你不必每时每刻都在学习。一点点时间足以,比如一周一次,有总比没有好。我们总得有一些工作之外的生活。

科技发展如此迅速,我们不要被甩在后面了。

——Clint Shank

3.不要害怕破坏某些东西

每一个具有行业经验的人无疑曾在一个充满不稳定性的项目中工作过。这个系统是很难重构的,通常改变一个地方就会触及到另一个不相关的地方。每当要添加一个模块的时候,程序员的目标都是尽量少改动,在每一个版本中都是小心翼翼的。这就和把建造摩天大楼当做搭积木一样,容易造成灾难。修改对的时候是非常伤脑筋的,因为系统已经生病了。它需要一个医生,否则状况就会越来越差。虽然你已经知道了你系统发生了什么错误,但是你还是害怕“打破鸡蛋去煮你的煎蛋卷”。一个熟练的医生知道,为了做手术就必须开刀,而且她也知道开刀只是暂时的,而且很快就会愈合。对于最初的疼痛来说,做手术是非常有价值的,患者通常都会获得比做手术前更好的状态。

不要去担心你的代码。当你在做事的时候如果暂时被打断,谁会去担心呢?对改变的恐惧会让你的项目将进入这样的状态。花一些时间去重构项目会让你节约很多的时间。还有一个额外的好处就是一个团队面对这个损坏的系统的处理经验会让你们明白该怎样才能让它正常工作。要学会运用这些知识,而不是抵触他们。每个人都不应该把时间花在自己所讨厌的东西上。重新定义内部接口,重组模块,重构、复制、粘贴代码,并通过减少依赖来简化设计。你可以通过消除极端情况来减少代码的复杂度,他们通常会产生不当的耦合性。慢慢地将旧架构过渡到新的架构,边改边测试。试图在一个可能产生很多问题的大项目上进行一次大的重构,这些问题可能慧然你在中途就放弃之前所作的所有的努力。

作为一个医生,是不应该害怕切除患病的部位,以留出愈合的空间。态度是会传染的,并且会激励其他人去对那些一直拖延着的项目进行修改。去列出一个团队都感觉良好的项目的清单。虽然这些任务可能不会产生明显的效果,但你得去说服管理层,他们就会减少开支,加速对新版本的开发。永远不要停止关心代码的总体“健康度”。

——Mike Lewis

4.做专业的程序员

一个专业的程序员最重要的特征就是个人责任感。专业的程序员会对自己的生涯、自己的估计、自己的日程安排、自己的错误以及自己的作品负责。一个专业的程序员是不会把这些责任推给其他人的。

如果你是一个专业人员,那么你就会对自己的工作负责。你有责任阅读和学习。你有责任追赶业界及技术的潮流。而很多程序员都认为这是他们上司的工作。对不起,这是大错特错的。你认为医生也会那样做吗?你认为律师也是那样的吗?不是的,他们会利用自己的时间和金钱去学习。他们花费大量的下班时间去阅读期刊和做出计划。他们会时刻更新自己,我们也必须这样做。你和雇主之间的关系只是为了履行合同。总之:你的雇主承诺给你工资,你就得承诺去把这份工作做好。

专业的程序员会对他们编写的代码负责。如果他们不清楚代码是否会正常的工作,就绝不会轻易放出代码。试想一下,如果打算放出一个不确定的代码,你还有可能是一个专业的程序员吗?专业的程序员都不希望QA来发现他们的错误,因为他们如果不经严格测试是不会放出代码的。当然,QA也许会找到一些问题,因为没有什么是完美的嘛。但是作为专业人士,重要的是我们的态度,我们决不能让QA找到什么问题。

专业人士都是团队合作。他们会对整个团队的未来负责,这并不是他们个人的工作。他们互相帮助,彼此教导,互相学习,甚至包括别人需要的任何时候。当一个队友倒下,其他人都会去关心,因为他们知道他们都有互相需要的时候。

专业的人士是不会容忍一大串bug列表的。一个巨大的bug清单是非常粗心的。一个在问题跟踪数据库里有成百上千问题的系统是粗心酿成的悲剧。事实上,在大多数的项目中,如果非常依赖问题跟踪系统,那么他们肯定总是粗心大意的。只有非常大的系统才可能会又这么长的bug清单,这个时候需要的是自动化的管理。

专业人士不会把事情弄得一团糟,他们会对自己的工作引以为豪。他们保持代码的整洁,结构的良好,而且便于阅读。他们跟随着默认的标准而且做出了很好的实践。他们永远不会趋之若鹜。假设你能够在医生给你做开放式心脏手术的时候灵魂出窍。这个医生有一个最后期限(只是字面意义上的)。他必须在心肺循环功能损失过量血细胞之前完成。你觉得他该怎么做?你是想要他们像典型的软件开发人员那样匆忙而且混乱吗?或者想要他们说“我待会儿再回来解决”?还是你要他们小心地遵循着纪律,抓紧时间,相信他自己的做法是目前可以采取的最好的方法。你是想要一片混乱还是专业精神呢?

专业人员得有责任感。他们会对自己的事业负责。他们会对代码的正常运行负责。他们对自己工作的质量负责。即使最后期限迫在眉睫,他们也不会放弃自己的原则。事实上,当压力越来越大的时候,专业人员甚至会对这些原则要求得更紧,因为他们认为这是对的。

——Robert C. Martin (Uncle Bob)

5.利用代码分析工具

测试的价值是在他们编程之旅的早期阶段就灌输给开发者的。今年来,单元测试,测试驱动开发,以及敏捷方法的兴起都被大量地用于开发周期的每一个过程。然而,测试只是众多能够提高代码质量的工具之一。

回到早期阶段,当C语言还是一个新兴的技术的时候,CPU的时间和存储的形式都是非常珍贵的。第一个C语言编译器注意到了这一点,所以通过一些语义分析减少了便利代码的次数。这意味着在编译阶段,只能检测到一小部分的错误。为了弥补这个,Stephen Johnson编写了一个叫做lint的工具,这个工具能够取出你的代码中的一些冗余,实现了在其相似的C编译器中已经去除的静态分析。然而,静态分析工具,会增加大量的无用警告或者是一些关于文体问题的不必要的警告。

当前,语言、编译器和静态分析工具的情况是非常不同的。内存和CPU时间现在也变得非常的便宜,所以编译器能够承担更多的错误检测。几乎每一种语言都至少拥有一个工具来检查违规的格式和常见的问题,不过有时,那些隐含的错误并不会被检测到,比如潜在的空指针引用。对于更复杂的工具,比如针对C的SPlint,针对Python的Pylint,都是可配置的,也就是说,你可以通过一个配置文件选择这个工具在命令行或者是IDe里要发出什么错误和警告。SPlint甚至会让你在注释里注释你的代码,以给别人更多关于程序运行的提示。

如果一切都失败了,你发现你自己正在寻找一些你的编译器或IDE或lint工具没有捕获的简单的bug或者是一些违规行为,你就得收起你所有的静态分析工具。这并不像听起来那么困难。大多数编程语言,尤其是那些声称是动态的语言,都会把他们的抽象语法树和编译工具作为其标准库的一部分。去了解你正在使用的这个语言的开发团队的标准库的细节是非常有意义的,因为这样你就能发现一些有价值的东西,这对于静态分析和动态测试是非常有用的。比如:Python标准库包含了一个反汇编程序,它会告诉你生成一些编译程序和目标程序的字节代码。这对编译器作者python-dev团队来说貌似是一个不起眼的工具,但是它实际上在日常工作中发挥着不同寻常的作用。这个库能够反汇编出来你最后一次堆栈跟踪的信息,这会给你恰当的反馈,因为字节码指令会把最后一次未捕获的异常扔在那里。

所以,不要把测试放在质量保证工作的最后,利用好分析工具,不要害怕把自己的错误展示出来

——Sarah Mount

6.和你的朋友一起使用Ubuntu哲学

所以很多时候,我们独立地编写代码,这些代码反映了我们个人对问题的理解,也反映了一个非常个性化的解决方案。我们可能会是团队的一部分,但是我们仍然会是独立的,因为这是一个团队。我们很容易忘记这些独立编写的代码会被其他人所执行、使用、扩展和依赖。这是在开发软件中容易被忽略的社交的一面。创造软件是一个混合了技术和社交的活动。我们只需要经常抬头,这样才会意识到我们并不是孤立地工作的,我们都有责任去提高个人成功的可能性,而不只是为了开发团队。

你可以在孤立的环境下写出高质量的代码,但这样会失去自我。从一个角度来看,那是一个以自我为中心的方法(不是自大,而是自我)。这也是一个禅宗的观点,他就是针对你编写代码那一过程的。我总是试着进入这个环节,因为它会让我离高质量更加接近,但那之后我就会陷入这个环节。我的团队现在处于什么环节?我的环节和团队的是一样的吗?

在祖鲁语中,Ubuntu的哲学被概括为“Umuntu ngumuntu ngabantu”,可以大致翻译为“A person is a person through (other) persons.”(人与人之间是互相联系的。我会变得更好因为是你,通过你的行为让我变得更好。在另一方面,当我做自己的事做得糟糕的时候你也会在你所做的事情上变糟。对于开发者来说,我们可以这样理解“A developer is a developer throuth (other) developers.”(开发者与开发者之间是相互联系的),也可以说“Code is code through (other) code.”(代码与代码之间是相互联系的)

我写的代码的质量会影响到你写的代码的质量。如果我的代码质量很差会怎样呢?即使你写了很整洁的代码,但由于你会使用我的代码,所以你的代码也会降低到和我的代码质量差不多的地步。你可以使用很多模式和技术去降低损失,但是损失已经造成了。我建议你去做一些必须做的事之外的一些事情,这是因为当我在做自己的事情的时候我并不会去考虑你。

我会认为我的代码是非常整洁,但我还是认为如果我使用Ubuntu哲学我可以做得更好。Ubuntu哲学到底是什么?它看起来就像是一段良好的整洁的代码。它并不是简单的代码,而是一件艺术品。它是跟创造艺术有关的行为。和你的朋友一起使用Ubuntu哲学将会帮助你的团队守住你们的价值观,增强你们的原则。如果有其他人在任何情况下接触到你的代码,都会变成一个更加优秀的开发者。

禅宗是有关个人的。对于一群人来说,Ubuntu也是一种禅宗。我们几乎不会看到只为自己而写的代码。

——Aslam Khan

7.你必须关心你的代码

不用福尔摩斯我们就会知道好的程序员才能写出好的代码。糟糕的程序员嘛…就不会。他们会产生我们必须清理的垃圾。你想写出好的东西,是不是?那你其实就是想去做一个好的程序员。

优秀的代码并不会无中生有。它并不像行星对齐那样是靠运气才产生的。为了获得优秀的代码,你就得努力去争取。这有些辛苦。如果你真的关心优秀的代码你就会写出很好的代码。

优秀的程序并不单单来自技术能力。我曾见过一些有很高能力的程序员,他们能够写出给人很深印象的算法,他们把编程语言的标准烂熟于心,但是他们却写出了最糟糕的代码。这些代码阅读起来非常痛苦,用起来也痛苦,修改起来也痛苦。我也曾见过更多谦卑的程序员,他们坚持写出更加简单的代码,他们写出来非常优雅非常富有表现力的程序,和他们工作简直就是享受。

根据我在软件行业多年的经验,我得出了这样的结论,一般的程序员和伟大的程序员之间真正的区别是:态度。优秀的程序使用了专业的方法,并在现实世界的约束和软件产业压力之下尽量写出最好的软件。

代码的铺就都得有一个良好的计划。要想成为一个优秀的程序员,你就必须做出很好的计划,并且真正关心起代码——培养积极的观点,养成良好的态度。伟大的代码是由工匠大师精心打造的,绝不是由满湖的程序员或自称编码大师的程序员在不经意间就完成的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 程序员
    +关注

    关注

    4

    文章

    949

    浏览量

    29761
收藏 人收藏

    评论

    相关推荐

    Linux驱动程序程序员指南

    电子发烧友网站提供《Linux驱动程序程序员指南.pdf》资料免费下载
    发表于 11-22 15:53 0次下载
    Linux驱动<b class='flag-5'>程序</b><b class='flag-5'>程序员</b>指南

    AI编程工具会不会抢程序员饭碗

    AI编程工具可辅助编程,减少手动编码,提升效率,对程序员有积极影响也有挑战。程序员需深化技能、拓宽知识应对。长远看,AI与人类程序员将共生共荣。
    的头像 发表于 11-08 10:17 108次阅读

    第五届长沙·中国1024程序员节开幕

    据官方媒体报道,10月24日;  第五届长沙·中国1024程序员节在湖南湘江新区开幕;本次中国1024程序员节以“智能应用新生态”为主题。设置有岳麓对话、技术英雄会、主题峰会及赛事、展览等活动,一场
    的头像 发表于 10-25 15:42 156次阅读

    京东上万程序员都AI用它!

    对大模型生成代码进行智能修复,为程序员开启代码漏洞修复的“自动驾驶”模式,不但减少人工接入、提高工作效率,更为企业抵御内外部各种攻击构建起一道坚固的安全屏障,确保业务的连续性和稳定性。 JoyCoder是京东云自主研发的一款辅助开发人员
    的头像 发表于 07-17 16:29 225次阅读
    京东上万<b class='flag-5'>程序员</b>都AI用它!

    程序员节视频创意大赛,用串口屏赢取千元大奖

    10月24日,程序员专属的节日里,我们盛大开启“程序员节视频创意大赛”特别活动!这不仅是一场视觉的盛宴,更是智慧与创意的璀璨碰撞。我们诚挚邀请每一位程序员及编程爱好者,拿起你的镜头,记录下那些平凡日子中的不凡瞬间,让编程的魅力与
    的头像 发表于 07-08 10:38 72次阅读
    <b class='flag-5'>程序员</b>节视频创意大赛,用串口屏赢取千元大奖

    程序员节视频创意盛宴,邀您共襄盛举!

    10月24日,程序员专属的节日里,我们盛大开启“程序员节视频创意大赛”特别活动!这不仅是一场视觉的盛宴,更是智慧与创意的璀璨碰撞。我们诚挚邀请每一位程序员及编程爱好者,拿起你的镜头,记录下那些平凡日子中的不凡瞬间,让编程的魅力与
    的头像 发表于 07-04 09:00 67次阅读
    <b class='flag-5'>程序员</b>节视频创意盛宴,邀您共襄盛举!

    助力程序员告别困扰已久的梦魇-Bug

    程序员的噩梦是什么?不用怀疑,就是让你加班到崩溃的Bug!下面是经过业界大佬们“长期加班”积累的小妙招,助力你离早下班又进一步~一、定位Bug范围及性质要有效解决问题,首先要缩小范围,集中关注最近
    的头像 发表于 07-02 08:10 270次阅读
    助力<b class='flag-5'>程序员</b>告别困扰已久的梦魇-Bug

    大模型时代,程序员当下如何应对 AI 的挑战

    随着 AI 技术的飞速发展,特别是大模型的出现,传统的程序员角色正在经历深刻的变革,我们不得不重新对自己进行审视和思考。 通用领域大模型的“泛化能力” 在过去的二十年内,AI 领域的大部分研究
    的头像 发表于 06-28 16:19 502次阅读
    大模型时代,<b class='flag-5'>程序员</b>当下如何应对 AI 的挑战

    适者生存,程序员最终会流向哪……

    程序员没有永远的护城河!!就目前的互联网大环境来看,it行业已经是……
    的头像 发表于 03-11 17:11 388次阅读
    适者生存,<b class='flag-5'>程序员</b>最终会流向哪……

    薪资高、青春饭,是不是程序员=青楼?

    花期太短。技术迭代快,年龄大容易失业。 就这几年的互联网环境而言,不管是前端、Java、Android开发等等行业。已经感受到程序员不是太卷就是工作难找,薪资过低。以前高工现在拿着中低程序员薪资
    发表于 03-06 21:32

    GitHub Copilot:你的代码超级助手!程序员的最强福音

    今天小启给大家安利一款令人兴奋的AI工具——GitHubCopilot。它无疑是程序员们的最强福音!无论你是新手还是经验丰富的开发者,GitHubCopilot都将成为你的代码超级助手。想象一下
    的头像 发表于 03-05 08:04 1091次阅读
    GitHub Copilot:你的代码超级助手!<b class='flag-5'>程序员</b>的最强福音

    瑞萨Flash程序员V3 发布说明

    电子发烧友网站提供《瑞萨Flash程序员V3 发布说明.pdf》资料免费下载
    发表于 02-19 09:37 1次下载
    瑞萨Flash<b class='flag-5'>程序员</b>V3 发布说明

    2024程序员的未来方向如何走?还看今朝

    这几年的IT行业想必大家已经感受到了,Android、Java、前端等等程序员都经历了大厂……
    的头像 发表于 02-02 09:45 782次阅读
    2024<b class='flag-5'>程序员</b>的未来方向如何走?还看今朝

    1月18号“纯鸿蒙”千帆启航,程序员预备!

    。 如何正确看待鸿蒙? 我作为程序员来说,首先是看鸿蒙的发展、市场开发岗位、薪资以及前景。 这几年对鸿蒙的发展情况来分析,从2019年开始鸿蒙的出来今天,华为鸿蒙取得了很大的成就。从“不兼容
    发表于 01-16 22:13

    诚邀报名 | GPT驱动的新程序员时代,开发者如何编程?

    模式,开发者们迎来了编程范式的全新变革。传统的编程不再局限于编写线性代码和优化逻辑,自然语言取而代之,成为了编程的新工具,这大大降低了开发的门槛。 如今,以ChatGPT、Copilot等为代表的AI工具,将全球的知识库和代码库都呈现在用户面前,只要有足够的想象力,每个人都可以
    的头像 发表于 12-11 22:20 514次阅读