《高效能程序员的修炼》- 读书笔记

在编程以外的闲暇时间,打算读一点有助于程序员扩展视野和提高素养的书籍。

笔者找到了这本《高效能程序员的修炼》:本书作者是Stack Overflow的创始人Jeff Atwood,内容是有关代码以外的,需要每个程序员思考和注意的事情。

该读书笔记没有提到书中所说的每个方面,只是针对了笔者觉得比较重要的几点并结合了自己的想法和感悟整理而成

关于选择工作

我更建议人们先花时间想想,什么样的问题才是他们真正热爱和感兴趣的,然后再好好研究这些问题。生命中最难的,是想清楚你真正想要做的事情,而不是学上一堆假设将来会有用的东西。

所以说在决定这种人生大事上,确实要花上心思,就好比笔者自己在通信工程专业从本科一直念完了硕士,拿到硕士学位证后花了一周的深思熟虑,毅然决定做软件,顶住各方压力(因为毕竟是换专业择业,不过还好父母还是一直很支持我的)三个月的时间自学了iOS开发,然后就来到了上海找到了第一份工作。

入职以后,在工作学习中甚感愉快,虽然有时会有压力,但是每天都过得很开心,因为这正是我想做的。

关于程序员的表达能力

杰出的程序员和勉强过得去的程序员之间的差别是他们能不能把他们的想法表达清楚。

大家应该不会怀疑程序员的平均智商,但是程序员中每个人的表达能力却参差不齐,差别极大。其实有些时候头脑中想到的方法可能是在潜意识下想到的,如果这时候需要我们有条理地说出来,确实不是一件容易的事。

像这种用意识层面的语言来表达潜意识的思考的能力确实是值得锻炼的。试想一下,如果我们能把自己潜意识层面的思考准确地再现于意识层面,那么这显然会有助于帮助我们检查思维的缜密性和正确性,而且也会锻炼我们的逻辑思维,从而能更好地去思考,形成良性循环。

因此表达能力越好的程序员,往往越能解决好问题:因为TA可以将问题和思考清晰地理出来,对解决问题帮助很大。

关于程序员的学习

勤加练习固然重要,但是只顾着买头写代码,没有讨论和反思的时间,那么是无法得到真正的进步的。在阅读博客和相关书籍的过程中,从自身利益出发去考虑,如果我们能从中找到哪怕一点对我们有用的东西,其实就已经很赚了。

复习和反思是学习过程中很重要的环节,如果没有及时的复习与反思,那么往往事倍公半:忘记知识,而且就算不忘,也无法高效地将知识提取出来。作为程序员,应该适当脱离键盘反复思考,将学到的知识高效地整合到自己的知识结构中,有助于知识的提取和运用。

关于代码

  • 评价及代码的几个维度:从简洁性开始,依据测试的结果按需提升其他的维度。

  1. 代码简洁度
  2. 功能完整性
  3. 执行速度
  4. 编码所花费时间
  5. 健壮性
  6. 灵活性
  • 你的代码越多,bug能藏身的地方就越多。
  • 最好的代码就是完全没有代码。

关于代码的注释

  • 注释需要说:程序为什么这样工作。
  • 你应该总是专注于编写代码,而忘了还有注释这种东西的存在。
  • 当我脑子里了一个明确的目标,并且有一段复杂的代码要写时,我会把时间花在时间代码上面,而不是写下他的故事,讲给我自己听。
  • 如果你的代码在没有注释的情况下显得过于复杂,很难被人理解,那只能说明你的代码写得太早了,重写代码,直到它不再需要任何注释。

读到这里的时候笔者很是惭愧。因为笔者在写代码的时候,是将代码和注释一起写的。所以应该将这个习惯改过来:写代码的时候忘记注释,应该尽全力用代码自己解释逻辑。到最后逻辑达到很清晰的程度后,再加上必要的注释:为什么用的是这个逻辑。

关于请教问题

  • 向别人请教问题:
    1. 提供足够多的细节描述发生的状况
    2. 说明你为什么需要这个答案
    3. 表述你所做的研究和发现
  • 如果你想让别人花上宝贵的时间来帮助你,你也要花了宝贵的时间酝酿出一个合格的问题才算公平。

笔者在工作中也会请教同事问题,前几次问的时候发现自己将问题说出来之后,自己头脑里已经有了解决的办法,而且觉得很简单。所以后来想问问题的时候,保证自己先解决一般问题,将问题深入,然后尽可能问出高质量的问题来。

关于提出问题

  • 提出正确的问题差不多已经把问题解决了一半。
  • 完全投入地向一个假想中的人或者是没有生命的物体问一个透彻而相近的问题。

笔者认为如果是对一个无生命体,大脑中负责情感的部分会被抑制,会更加促进理性分析,更加清晰地表述问题(因为你的潜意识知道小黄鸭*是不会“理解”你的话里半点遗漏的点)。

关于创意和执行

  • 如果你想要赚钱,你必须把这两者相乘,除非创意被执行,否则它一文不值,执行是创意的倍增器,真正价值巨大的是执行。
  • 与其担心你全心投入等下一个创意是否足够出色,不如担心你能执行的多好。
  • 在软件开发领域,执行意味着专注于构成你的应用程序的所有微小细节,如果你不是始终沉迷于你的应用程序的每个方面,不去优化和赶紧它的每一处细节,那么你就不是在执行,至少,不是在很好地执行。

关于团队

  • 如果你把一个好的创意给一个普通的团队,他们会把它搞砸。如果你把一个普通的创意给一个好的团队,他们会对它加以完善,或者他们会把那个创意丢掉,然后相处一些更棒的 - Catmull”
  • 如果你想取得成功,不要担心没有伟大的创意,转而去专注于培养卓越的团队。

关于会议

会议绝不应该超过一个小时。 每个会议都要有一个清晰的目标声明。 在开户之前做好功课:提前知道将要讨论和分享的内容。 把会议变成可选的:每一个人都因为他们想要在那里,或者需要在那里。 会议结束后,概括一下待办事项。

其实会议确实比较耗费时间,所以就要为了提升会议的效率和价值:

  1. 在会议开始前:熟悉会议内容并提前思考。
  2. 在会议结束前:整理会议结果,列个待办事项。
  3. 在会议结束后:执行!执行!执行!

关于用户和产品

  • 用户不会阅读你屏幕上的任何东西。用户只会读取屏幕上足以让他们完成任务的,最少量的文字。
  • 与世隔绝在实验室花上三个月的时间修复第一版里的问题,不如把这3个月的时间用于倾听来自真实世界里使用你的软件的用户提出的反馈。

这两条分别告诉我们:

  1. 我们在做产品的时候,应该把用户当成“弱视不会思考”的人。
  2. 用户可以“为我们所用”。

看似是矛盾的两点,但确是提升用户体验的“黄金理论”。

对于第一条,笔者深有体验:笔者做了一个类似新手引导的教程,因为队友修改了页面加载的逻辑,导致了用户只能通过,点击,滑动,手动加载后才能出现看到教程的情况,而刚看到页面时,教程是不会自动出来的,其实这个体验是很差的,因为用户需要自己动手。但是当时由于已经处于测试末尾阶段,我个人也没有在意。

在跟产品经理交流后,产品经理人很好,只是说了最好要加上。我想了想还是加了,添加的方法很简单,只是在viewWillAppear方法里加了触发的逻辑,但却发现体验直线上升。这件事对我感触很大,只是一两行代码就能明显改善用户体验,那么为什么不去做呢?为什么一定要去麻烦用户去动脑,去动手呢?

笔者结语:

本书中,作者说的点还是蛮多的,比较杂,但确是引发程序员代码之外思考的好的启蒙,有助于不让程序员局限于代码之中,能够多角度,多层面考虑问题。

原文发布于微信公众号 - 程序员维他命(J_Knight_)

原文发表时间:2018-07-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前沿技墅

踏上架构旅途 思考从未止步

普通程序员是编写代码的人。编写代码的方式有很多,只要能让程序跑起来,能正确地处理业务流程和对数据进行计算,就可以说“会编写代码”。程序员需要熟悉整个程序的逻辑及...

882
来自专栏VRPinea

忆往昔,谷歌I/O大会曾经的那些辉煌成就你真的了解吗?

3039
来自专栏杨建荣的学习笔记

学点Java里的编程思想(r12笔记第65天)

按照自己之前的计划,我觉得得看看关于开发的东西了,因为我对于并发,锁的认知总是有一个局限性,自己也在地铁上做了些功课。有了这个想法,再有拿起书的勇气,那就...

3617
来自专栏程序员的知识天地

Redis的之父九条忠告,如何成为“一打十”的程序员

据维基百科记载:“Redis是一个使用ANSI C编写的开源,支持网络,基于内存,可选持久性的键值对存储数据库。根据月度排行网站DB-Engines.com的数...

1211
来自专栏大数据文摘

[译]推荐!纽约媒体实验室等4家大牛合作开发的免费开源可视化工具

2065
来自专栏Java学习网

兴趣与坚持:程序员从初级到中级10个秘诀

  在一封与TechRepublic会员交流的邮件当中,他提到了面向程序员的博客、文章及杂志分成两类:面向初学者类(“hello world”这种类型的教程)以...

2827
来自专栏老九学堂

程序员高手和菜鸟的区别是什么?

程序员的价值绝对不在于技术本身,而在于做出好用且好看程序的能力,这是一个开放性的话题,每一个人都是菜鸟过来的,老九君希望每一个做技术的小伙伴都能尽快成为高手。 ...

3153
来自专栏斑斓

【第三格】如何实现领域驱动设计

从Eric Evans写下经典名著Domain-Driven Design: Tackling Complexity in the Heart of Softw...

3995
来自专栏贾老师の博客

《软件方法》学习1. 软件方法概述2. 愿景3. 业务建模4. 需求5. 总结6. 阅读延伸

1734
来自专栏Java帮帮-微信公众号-技术文章全总结

【大牛经验】一位10年经验架构师,聊Java

黄勇,从事近十年的 JavaEE 应用开发工作,现任阿里巴巴公司系统架构师。对分布式服务架构与大数据技术有深入研究,具有丰富的 B/S 架构开发经验与项目实战经...

1551

扫码关注云+社区

领取腾讯云代金券