大家好,关于代码整洁之道电子书很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于代码整洁之道电子版的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
代码写的美是怎样一种体验
工作第二年时候的一个经验,第一次实实在在感觉到简洁代码的威力,整洁代码实乃保命保平安神器。
当时开发的是这个游戏:
实际游戏画面:
这个巅峰时期团队过百,一共前后做了4,5年,代码量那是大大的,我这里参与的是ps3版,使用的是unreal3引擎。
xbox360/ps3这一代,unreal在微软平台上做的很是不错,在ps3上面各种原因吧,做的很不到位,对应出的unrealtournament3在ps3上面各种缩水。
一定程度上也和ps3的机能不足以及奇怪的架构有关。
ps3的在cpu端基本架构是这样:
其中可以重点关注大家不太常见的叫做SPE的这个东西,这个可以说是ps3的一大特色,就是一个很强的协处理器,非常善于做vector类的“傻算”,单个能力超过现在的普通I7的单核cpu的计算能力,而且这样的东东有8个。。。
甚至sony开始希望这个spe搞定一切,连GPU都省了,但是后来发现不行,急急忙忙上的nvidia的缩水GTX7800级别的GPU。
但是SPE毕竟设计时候牛逼,后面大家拿这个东西来做计算蛋白质序列啊,在ps3的中后期,大家开始研究怎么用SPU做一些渲染的工作,一度能承担40%的GPU的工作,其战斗力可见一斑。
当时sony底层系统方面的能力比微软差不少,所以底层一大特色就是“裸”,你有两个选择,一个是opengl的api,这样使用默认的驱动,但是效率就是一个普通效率。
还有一个版本的就是叫gcm的一个api,就比较的底层,你自己来管理一切,从显存的管理到commandbuffer的flush都是自己来做。
近乎等于开发者自己来实现一个类似driver的东西了,为了效率这个是大家普遍的选择。
然后sony文档上有介绍说,SPE可以支持去执行这些gcm的命令的构建,也就是说可以把整个驱动实现出来,然后放到SPE上去跑,这样就进一步解放核心CPU的工作,达到更好的性能。
当时花了一些时间把ps3版的底层写好了,driver也都跑顺了,然后就开始做把driver往SPE上移植的工作。
这个过程就是一个把unreal底层进行拆解分离,把driver部分独立出来,然后实现到SPE上面,由SPE把命令构建好,送往GPU;为了进一步优化性能,自己实现的这个部分还可以提供更高层的一些api,把一些游戏常用的api直接打包成一个包,定制出一个比opengl更简单样子,但是效率非常的高。
刚刚写了第一版,直接就一团乱,跟了代码一瞅。。。代码段被冲了,这个之前都没见到过,正常系统上对代码段会有保护,冲过去会有warning什么的,SPE上面就是完全裸的,没有任何保护。
然后说回SPE,上面一个很小的localstorage,需要把命令送过去,然后管理本地的内存,进而执行代码等等,然后代码的执行是通过gpu来看的,所以如果出错了,你只能知道错了,不知道哪里错了。
而且ps3的早期,各种debug工具也不完整,debug能力就各种抓瞎。
当时工作也不久,经验也不足,就这样,扛着一个这种大游戏的底层,没日没夜的在SPE里面一直泡着,一个坑出来再进到另外一个坑。
中间一个问题憋了一个多星期,没有一点进展,甚至开始怀疑是不是这个SPE做driver是不可能的,毕竟只是文档上提一嘴。
在sony论坛上求教,还真有一个哥们,欧洲一个公司的,做网球游戏的,给我发来邮件说他也这么干的,能行;这真给我相当大的希望,继续又怼了1个星期,代码都快全背下来了,终于能够继续前进,刚刚长舒一口气
leader把我叫到办公室里问我还有多长时间能弄完,有点担心这个能不能行,在考虑要不要把任务cancel。。。当时的表情是这样的:
和leader晓之以理动之以情,软磨硬泡,最后leader再给2星期时间,必须能够跑得比较稳定,否则还是要卡擦掉。
然后继续猛怼,后面进展还算可以,但是由于项目已经比较靠后了,比较担心上了之后会出各种难查的问题(这个的情况比多线程要更棘手了)。
中间开发的过程已经明显感觉到,对于这种难以debug的情况,把设计做清晰,把代码写整洁有多么重要。
所以到最后就是不停的去重构代码,一直到代码已经整洁到自己想吐了,就是那种中考前复习的实在烦了,去tmd的考就考吧的感觉。
开始合入了主干,提测QA,然后买好红牛,等着bug彻夜奋战。
然后过了一天。。。没事,QA只是反映,帧数是更好了一些。
2天。。。没事
最后一周下来,就是零星2个小问题。
这对于这种规模应该说是比较少见了,最后实际profile下来,能节省6-8ms(面向30帧的游戏,一共33ms,所以对于性能来说是非常关键的一波)。
这波下来,有这样的感觉
整洁代码绝非装逼用的,简直就是保命保平安神器变得特别喜欢欣赏整洁代码的美妙之处,后来看insomniac的spu实现的计算水的fft(刚刚查了下已经没有了),真是如同欣赏水墨风景的怡然的感觉总的说来,谈不上美哭了,但是也有美的一面,整个过程连滚再爬也快哭了。。。
经典代码需要背诵吗
我觉得首先要弄清楚代码是什么?代码是一个人去抽象的表达世界的方式,是人与计算机沟通的渠道。
我认为好的代码体现在两个方面:
1、代码整洁度,规范化,标准化。
这是一个经验丰富的软件工程师所必备的技能,经验丰富的工程师在设计之初就会想到,如何拥抱产品的变化,变化是永恒的,没有不变的需求。所以为了能够最大限度的适应产品的变化,就要求代码去解耦,“一个函数只做一件事”等等良好的规范。
这种代码,我认为首先要做的是欣赏,然后在自己工作对照,进而就心领神会了,这种代码背也没用。
2、常用的算法
常用的算法,如二分查找、经典的排序算法,我认为还是需要在理解的基础上,多写一遍,从而达到背的结果,但是核心还是去理解算法的精髓。
3、经典的软件实现
比如redis,MySQL,Linux等等非常优秀的软件实现,这个时候我认为最关键的是,理解作者为什么这么设计,需要上升一层高度去理解它,这样才能扩宽自己的思维。如果是专门吃这碗饭的,比如dba,理解MySQL代码,才能端好这碗饭,如果能背下来,那肯定理解到不一般的地步了。
欢迎大家关注我~~
什么样的代码叫好代码
好代码,满足两个条件:能实现预定效果、能被人容易看懂。
代码的差别,不在于能否实现功能,更主要是实现的好坏。
有些代码虽然实现效果了,但换个程序员就看不懂,无法维护,也是烂代码。
现在的软件业,程序员加班都是普遍现象,疲劳工作,势必影响代码质量。
大部分都在着急实现功能需求,完成领导安排的任务,只是以完成为目标。
这种不考虑长远的工作方式,虽然短时间内达到了目的,但长期看问题很大。
程序员一旦离职,新来的需要花很久才能接手,项目的扩展性和稳定性都没保证。
尤其一些外行的领导,一味地只知道做出来给上级邀功,不能科学的排期。
功能需求说改就改,新功能拍脑袋就来,导致项目设计不断调整,损伤整体的架构稳定。
整个行业还没意识到代码质量的重要性,对代码没有敬畏之心,只看眼前不顾长远。
只有行业人员达到饱和,把不合格的程序员和产品经理都淘汰下去,好代码才能形成风气。
自学编程需要看哪些书
本文从以下几个方面给大家分享几本高价值书单,并不一定全面,欢迎读者补充,希望能对你有帮助。
1关于编码与重构
1.1代码整洁之道
英文名《Cleancode》,该书出自RobertCMartin之手,又被称为Bob大叔,是一位美国著名的软件工程师和作家,他已经写了有关敏捷软件开发的书籍。书中提到众多有名的编程原则:比如SOLID原则、LawofDemeter(LoD,又被称为最少知识原则)。
推荐理由:
每个程序员都必须拥有本书并阅读它。这是一本非常著名的书,它将完全改变您的编程风格,书中介绍的规则均来自作者多年的实践经验,涵盖从命名、数据结构、面向对象的设计原理到重构的多个编程方面,虽为一“家”之言,然诚有可资借鉴的价值。或许,真正整洁的代码真能让同行读起来像诗一样。
任何傻瓜都可以编写计算机可以理解的代码。优秀的程序员编写人类可以理解的代码。—马丁·福勒
如果只能读一本书,我就推荐这本。最后,基于本书,众多开发者还推出了各种语言的整洁之道:
?Javascript整洁之道
?PHP整洁之道
?ABAP整洁之道
?Java整洁之道
?.NET整洁之道
还有各大科技公司的代码风格指南:
?Google风格指南
?UberGo语言风格指南
Bob大叔的《架构整洁之道》也值得推荐,这本书是在架构领域的登峰之作,围绕“架构整洁”这一重要导向,系统地剖析其缘起、内涵及应用场景,涵盖软件研发完整过程及所有核心架构模式。
还有《程序员的职业素养》,作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来人引路,助其职业生涯迈上更高台阶。
1.2重构(第2版)
英文名:《Refactoring:ImprovingtheDesignofExistingCode,2ndEdition》,作者JoshuaKerievsky。本书是理论和实践最佳组合的罕见书籍之一。重构是一个使您的工作代码更加美丽的过程,这本书可以利用已经尝试和测试的软件开发世界的模式来为您提供帮助。
推荐理由:
重构一词经常在各种大会上被提及,那就是这本书带来的影响。重构也就是重写软件的过程,而无需更改其功能,以提高其可读性,可检验性或可维护性。重构是使工作代码美观的过程,重构有助于改进工作代码的设计。这也是优秀程序员的必备技巧之一,通常优秀的程序员也擅长重构。
本书将教你重构代码的艺术和科学。无论您是Java程序员、C++开发人员还是Python开发人员,每个程序员都可以从本书中受益。
与《重构》经常被提及的书就是大名鼎鼎的《代码大全》,书中解释的也是久经考验的技术和策略,能有效帮助程序员和软件开发人员。笔者也曾在大学的时候把这本书图书馆借出来,发现这本书太厚,啃不动,到期就立马归还了。
1.3代码之美
英文名:《BeautifulCode:LeadingProgrammersExplainHowTheyThink》,作者:GreyWilson。
推荐理由:
大牛前辈的博客合集,同时也是提高编码技能的好书之一,因为它为您提供了一个机会,让您了解专业程序员如何处理问题、编写的代码以及他们如何解决问题,并且仍然能够保持他们的代码美观。
这本书是一系列案例研究的集合,揭示了Emacs到Facebook等大型网站架构秘密,讲述了那些专家程序员,包括布莱恩·克尼原,乔恩·本特利(JonBentley)(编程珠玑的作者),蒂姆·布雷(TimBray),卡尔·福格尔(KarlFogel),迈克尔·菲瑟斯(MichaelFeathers)(有效地使用旧版代码的作者),以及许多更多伟大的作者和程序员。关于二分查找,在书中数次被不同作者提及,了解不同作者的观点。无论您使用哪种编码语言,例如Java,C#,Python或Ruby,都会在本书中找到有趣的东西。
代码之美调查了一项努力的人类发明和创造力的范围:计算机系统的开发。每章中的美观来自发现独特的解决方案,这是作者的力量超越界限,识别他人所忽略的需求,并找到令人惊讶的解决方案,以解决令人困扰的问题。
2关于职业成长
2.1程序员修炼之道(第2版)
英文名《Pragmaticprogrammer》,作者是AndrewHunt&DavidThomas。中文版的译者是大名鼎鼎的云风,副标题是:通向务实的最高境界。
推荐理由:
本书是时隔20年的新版,覆盖哲学、方法、工具、设计、解耦、并发、重构、需求、团队等务实话题的最佳实践及重大陷阱,以及易于改造、复用的架构技术。
刚出来的时候博文出版社举办了一个推广活动,在云风和皓子叔联袂推荐下,毫不犹豫的入手了本书。程序员往往最难得就是务实主义,总想追求新技术,炒新概念。工作后才逐渐明白,编程的本质,均不依赖于特定语言、框架和方法,技术改变世界在于能够有效解决用户的真实需求。
本书本质上是程序员的自助指南。它探索了良好的软件开发实践,并为您提供了出色的建议、提示和技巧,以更有效地编程。正是对经典和现代轶事、引人入胜的类比和发人深省的例子的创造性使用,使每个部分的学习都变得有趣而有趣。如果说大学期间读的都是类似于C语言圣经和HeadFirst系统书籍的话,工作后的人才会真正懂得为什么这本书籍不厚,读起来拍案叫好,这大概就是大道至简。
作者另一著作:《程序员修炼之道:从小工到专家》也是值得推荐的
2.2卓有成效的程序员
英文名:《TheProductiveProgrammer》,作者:NealFord。
推荐理由:
本书就是讲述如何在开发软件的过程中变得更加高效。同时,《卓有成效的程序员》的讲述将会跨语言和操作系统:很多技巧的讲述都会伴随多种程序语言的例子,并且会跨越三种主要的操作系统,Windows(多个版本),MacOSX以及*-nix(Unix或者Linux)。
贯穿全文的思想大概就是尽量让机器做机器该做的事情,让程序和程序打交道,发挥程序员在这方面的先天优势。学会善用工具,命令行、学会写脚本,学会宏。提供效率,不去做重复单调的工作。
最终的目的:成为一个“慵懒”的程序员。
2.3软技能:代码之外的生存指南
英文名:《SoftSkills:Thesoftwaredeveloper'slifemanual》,作者:JohnZ.Sonmez
推荐理由:
研究生期间读过最受益的一本非技术书。程序员都知道编码很重要,这是我们吃饭的硬技能。
可是实际工作上才发现不止写代码,代码之外的软技能也很重要:比如面临着与客户沟通、与产品打交道的沟通问题;比如应该关注自身发展,书中也介绍了怎么做职业突围;还有更多章节介绍了作者如何学习、如何理财、健身、自我营销等等。
分享书中有趣让我印象深刻的点是作者去面试,面试官浏览过他的博客文章,两人因此相谈甚欢。最后也想给阅读的朋友声明一下:这本书涉猎了很多方面,但是并不是没一点都是一套可以照抄的完美答案,毕竟作者也是从当时的环境和自己经历出发介绍这些内容,每个读者应该都有自己的选择,
综合而言,这本书挺适合各个阶段的人阅读的,尤其大学生和初入职场的朋友。
作者也出了《软技能2:软件开发者职业生涯指南》,如果说软技能关注于生活,那软技能2则更加关注于了软件开发职业。
3关于黑客与开源
3.1Unix编程艺术
书籍英文名:《TheArtofUNIXProgramming》,作者:《EricS.Raymond》从1982年开始就是UNIX开发者。
推荐理由:
本书涉及Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验,由公认的Unix编程大师、开源运动领袖人物之一EricS.Raymond倾力多年写作而成。
程序会过时,编程语言会更新,代码会跟随业务不断改动,但编程思想的生命力会长盛不衰,好的编程艺术也是具有穿透力的,尽管书中的案例已经偏老,但贯穿始终的KISS原则、思想文化体系、设计与开发哲学一定能够给你带来醍醐灌顶的感觉。
Keepitsimplestupid,简称KISS原则。在做软件设计的工作中,很多时候都不要想得过于复杂,也不要过度设计和过早优化,用最简单且行之有效的方案也就避免了复杂方案带来的各种额外成本。这样既有利与后续的维护,也有利于进一步的扩展。
另外,本书还可以与“左耳朵耗子”ef="">皓子叔推荐过的《UNIX传奇:历史与回忆》结合着一起看,了解UNIX的诞生记与发展史,贝尔实验室的幕后故事!本书不但书写Unix的历史,而且记录作者的回忆,一探Unix的起源,试图解释什么是Unix,Unix是如何产生的,以及Unix为何如此重要。
3.2大教堂与集市
英文名:《TheCathedral&theBazaar:MusingsonLinuxandOpenSourcebyanAccidentalRevolutionary》,《Unix编程艺术》作者EricS.Raymond的另一封神之作,副标题是《对Linux和开源革命的沉思》。
推荐理由:
大家都知道程序员热衷于开源文化,都在说不要重复造轮子。开源时代下的软件开发可能只需要三个键盘按钮:CTRL+C+V,开个玩笑。
说到开源文化,那么本书《大教堂与集市》是开源运动的《圣经》,颠覆了传统的软件开发思路,影响了整个软件开发领域。作者把软件开发思路类比于古代的大教堂文化和集市文化,讲述了集市如何变成大教堂,书中系统解释了开源软件是如何生产的,开源开发的优势在哪,开源软件的传承是如何做到的。
3.3黑客与画家
英文名:《HackersandPainters:BigIdeasfromtheComputerAge》,作者:PaulGraham,本书的译者是大名鼎鼎的阮一峰大佬。
推荐理由:
说到黑客文化,就不得不提到硅谷创业之父PaulGraham的这本书,本书主要介绍黑客Hacker,即优秀程序员的爱好和动机,讨论黑客成长、黑客对世界的贡献以及编程语言和黑客工作方法等所有对计算机时代感兴趣的人的一些话题。
本书是一本为黑客正名的技术散文集,看完书后第一次将我从电影中的黑客形象颠覆过来,才了解到并不是入侵系统、制作病毒、各种解密的人就是黑客,Hacker是专家级程序员,是一群与画家有着极大的相似性,他们都是在创造,而不是完成某个任务,“黑客”象征着第一流的能力,以及求解问题过程中产生的精神愉悦或享受。他们崇尚分享、开放、民主、计算机的自由使用和进步。而那些恶意入侵计算机系统的人更应该被称为cracker(骇客)。
4关于算法与设计模式
4.1算法设计手册
英文名:TheAlgorithmDesignManual(2ndEd.),作者:StevenSSkiena
推荐理由:
关于算法的重要性大家都知道,大家肯定都知道另外两本著名的《算法导论》和《算法4》:《算法导论》侧重与算法的数学推导,适合研究,而《算法4》侧重于算法的代码实现,适合入门。
而这次推荐的《算法设计手册(第2版)》却没有那么有名气,但也不失为设计实用且高效算法的最全面指导书。该书揭密了算法的设计与分析,以简单易懂的写作风格,介绍了各种算法技术,着重强调了算法分析。
目前市场上算法书层出不穷,但是经典的算法却一直在那里,不曾走远。
4.2HeadFirst设计模式
英文名:《Headfirstdesignpatterns》,作者:ElisabethFreeman//EricFreeman/BertBates/KathySierra/ElisabethRobson
推荐理由:
这本书完整地涵盖了GoF版本全部23个设计模式,毫不费力地解释了世界各地熟练的软件开发人员和程序员用来构建优雅、功能齐全、灵活和可重用的软件的几种软件设计模式。。图文并茂,配有大量说明性和启发性的示例,它们将使学习同时变得高效和有趣。与其他文本繁重的编程书籍不同,这本书具有引人深思、视觉丰富的格式。
HeadFirst系统书籍充满了幽默感,选题和编辑都很用心,值得一读。相信读完的读者逐步迈向对软件设计模式的深入了解。再来读GoF不失为一个不错的选择。
4.3设计模式:可复用面向对象软件的基础
英文名:《DesignPatterns:ElementsofReusableObject-OrientedSoftware》,又被简称为计算机领域的GoF,因为本书的作者是四个人:ErichGamma/RichardHelm/RalphJohnson/JohnVlissides。
推荐理由:
本书是任何使用面向对象代码的开发人员的必备入门读物。而且作者ErichGamma是jUnit、Eclipse、IBMJazz项目、VisualStudio、Azure和Office365的幕后推手。
如果您没有很好地掌握UML,您可能会发现很难吸收编程书中汇编的一些信息和示例。然而,这不会阻止您欣赏设计模式书中叙述的美妙之处,它既简单又内容丰富。
《设计模式》一书详尽地解释了23种软件设计模式,可帮助软件开发人员和设计人员制作更好、更优雅、更灵活的软件。这本书讨论了针对常见软件设计问题的大量简洁明了的解决方案。
如果说GoF太难读下去,那么就推荐程杰的《大话设计模式》,这本书通过对话的形式带领大家入门设计模式,人人都可以是好学的小菜和经验丰富的大鸟。
4.4编程珠玑(第2版?修订版)
英文名:《MoreProgrammingPearls,SecondEdition》,作者:JohnBentley
推荐理由:
这是一本带你真正领略计算机科学之美,融深邃思想、实战技术与趣味轶事于一炉的奇书。与大多数其他编程书籍不同,这本书侧重于基本问题和一般问题。它讨论了可以提高性能或减少内存需求的各种算法和技术。
作者选取许多具有典型意义的复杂编程和算法问题,生动描绘了历史上众大师们在探索解决方案中发生的轶事、走过的弯路和不断精益求精的历程。
就如书名一样,大浪淘沙,计算机科学中的智慧正如自然界里珍珠出自细沙对牡蛎的磨砺,留下一个个编程“珠肌”。
题外话:
上面的书都是本人曾经阅读过,或者说在图书馆中有借阅翻过的书。也是计算机领域评分很高、有口皆碑的书籍。但计算机行业的经典书籍太多,本人能推荐的也只是其中一部分,想要推荐的内容也不想针对某个特定编程语言和领域,所以像《C++编程思想》和《OnJava8》这类书籍没有进行推荐,推荐理由也不一定完全正确,欢迎大家批评指正。另外,看完上述的书并不能说自己就能在工作中就能运用到,看完就能成为一个顶尖的程序员。何况看书也不能完全接收前辈们的这些大智慧,但如果在某个瞬间(看书过程或者实践过程中)对自己有一种醍醐灌顶的感觉,就已足够。
参考链接:
?UNIX传奇(上篇)
?假期好读书
?Top5BookstoImproveCodingandProgrammingSkills
?http://www.osnews.com/images/comics/wtfm.jpg
本文分享自华为云社区《【云驻共创】对于编程思想和能力有重大提升的书有哪些》,作者:宇宙之一粟。
好了,文章到这里就结束啦,如果本次分享的代码整洁之道电子书和代码整洁之道电子版问题对您有所帮助,还望关注下本站哦!