美文网首页技术读书摘录
《程序员修炼之道》-摘录与思考

《程序员修炼之道》-摘录与思考

作者: ___TheOne___ | 来源:发表于2024-02-04 09:47 被阅读0次

    1.务实的(Pragmatic)程序员,不仅把工作做完,并且把工作做好。

    【Chap1 务实的哲学】

    1.务实的编程 源于 务实思考的哲学。

    2.不要放任破窗
    “破窗”:指的是糟糕的设计、错误的决定、低劣的代码等。

    3.石头做的汤
    做推动变革的催化剂(驱动力)。
    找出你的合理请求,然后不断完善。

    4.煮熟的青蛙
    牢记全景:持续审视你身边发生的事情,而不要只专注于你个人在做的事情。

    5.“投资知识,收益最佳”------本杰明.富兰克林

    6.知识组合
    程序员所了解的一切有关计算过程的事实、工作的应用领域、经验等。

    7.对知识组合做定期投资。

    8.时间总是不够用的,所以请提前准备好,确保在无聊的时候有东西可读。

    9.批判性地分析你读到和听到的东西。
    要有自己的思考,而不是全盘接收。

    10.说什么和怎么说同样重要。
    What、How

    【Chap2 务实的方法】

    1.ETC(Easier To Chang) 更易变更
    优秀的设计比糟糕的设计更容易变更。

    2.ETC是一种价值观念,不是一条规则。
    说明:Java中23种设计模式,本质就是为了使代码ETC!

    3.DRY(Do not repeat yourself) 不要重复自己

    4.DRY-在一个系统中,每一处知识都必须单一、明确、权威地表达。
    好处:项目更容易理解和维护。

    5.正交性
    象征:独立性 或 解耦性
    好处:提高生产力 和 降低风险。

    6.“改了一个代码Bug,但又出现了多个新Bug。”---周同学
    说明目标代码未遵循正交性设计,耦合度太高,请及时重构代码。

    7.计算机的语言会影响你怎样思考问题。
    说明:同一个问题,用Java 或 Python解决时思路是完全不同的。

    8.所有的估算都是基于对问题的建模。

    9.估算技巧:PERT(Program Evaluation Review Techningue)计划评审技术
    每一个PERT任务都有一个乐观的、一个最有可能的、一个悲观的估算。

    10.不断提升你的估算能力
    将你的估算做一个记录,跟踪估算准确程度。
    如果误差超过了50%,试着找到估算错误的原因。

    【Chap3 基础工具】

    1.自省、机敏
    每次发现自己又在重复做某件事情的时候,要习惯性地想到“或许有更好的方法”,然后找到这个方法。
    以此精进自身的技能、提高开发效率。
    Eg: 项目升级脚本、IDEA JPA Buddy插件(由表自动生成bean)等。

    2.永远使用版本控制。

    3.去解决问题,而不是责备。
    没有人能写出完美的软件,既然Bug无法彻底避免,那么发现Bug时,请集中精力在解决问题上,而不是归咎他人。

    4.不要恐慌,冷静思考解决。
    代码出Bug时受到惊吓的程序,与对正在运行的代码信任程度城正比。

    5.Bug复盘
    如果修复一个Bug花费了很长时间,寻找一下原因。
    思考能做些什么让下次修复这个Bug更加容易?

    6.工程日记
    上面记录所做的事情、所学的东西、想法的草图和代码调试时的当前值等---基本上都是各种与工作相关的东西。

    7.工程日记的好处
    1> 比记忆可靠;
    2> 利于保证概念的完整性。

    【Chap4 务实的偏执】

    【Chap5 宁弯不折】

    1.所有的程序其实都是对数据的一种变换---将输入转换为输出。

    2.编程讲的是代码,而程序谈的是数据。
    我们在构思设计时,不仅要考虑类和模块、数据结构和算法、语言和框架,还要将程序视为从输入到输出的一个变换。
    好处:结构更清晰、错误处理更加一致、耦合性降低。

    【Chap6 并发】

    1.使用黑板来协调工作流。
    保障项目相关人员对同一个需求的概念一致性。

    【Chap7 当你编码时】

    1.重构:代码需要演化,它不是一个静态的东西。

    2.重构的开始时机、结束时机要恰当。
    1>不要过早地优化:在投入宝贵的时间改进算法之前,确保算法确实成为了瓶颈。
    2>对重构优化的目标要明确,一旦达到目标就请结束重构。

    3.读读《重构:改善既有代码的设计》---重构方面的著作。

    4.命名:好好取名,需要时更名。
    1> 命名时,不断寻找更合适的名称阐明你的意思,这种行为本身将使你在编写代码时更好地理解代码。
    2> 如果你不注意随时更新名字,很快就会陷入比毫无暗示的名字更糟糕的噩梦:误导性的名字。

    【Chap8 项目启动之前】

    1.需求之坑:无人确切知道自己想要什么。

    2.程序员帮助客户理解他们想要什么。
    这可能是程序员最有价值的属性。

    3.需求是从反馈循环(Feedback Loop)中得到的。
    开发者获取需求(所有50美元以上的购书订单免除运费)并将结果反馈给客户,这开启了探索之旅。
    在探索的过程中,随着客户尝试不同的解决方案,你可能得到更多的反馈。
    这是所有需求采集的现实情况。

    4.和用户一起工作以便从用户角度思考。

    5.需求不是架构、需求无关设计、也非用户界面---需求就是需要的东西。

    6.维护一张项目术语表
    1> 项目术语表,记录项目中所有额定术语和词汇的定义。
    2> 项目的所有参与者,都使用同一张术语表来确保一致性(使用相同名称指代相同的事物)。

    7.跳出框框思考的关键---找到框框。
    当遇到难题时,经常使用“跳出框框思考”提醒自己。
    关健不在于你是在框框里还是在框框外思考,而在于找到框框---识别真正的约束条件。

    8.找到框框的具体方法
    1> 当面对一个棘手问题时,把你能想到的所有解决方法都列举出来,不要忽略任何东西,无论听起来多么无用。
    2> 现在遍历列举出来的方法,逐条阐述为什么不能选择当前这个方法。
    你确定吗?你能证明吗?
    以此找到真正的约束条件,而非臆想的约束条件。

    9.结对编程
    结对编程 是 极限编程(XP) 的实践之一。
    在结对编程中,一个开发人员操作键盘,另一个不操作。他们一起解决问题,还可以根据需要切换打字任务。

    10.结对编程的好处
    1> 充当打字员的开发者专注于语法和编码风格的底层细节,另一个开发者可在更高层次范畴思考问题。
    由于人类大脑带宽有限,这样做将带来更多的脑力供我们支配。
    (尤其是当凌晨通宵发布遇到棘手问题时,结对编程通常是更好的选择)
    2> 有助于克服脆弱的瞬间,提振面对问题的勇气,并且便于尽早避免低级代码错误。

    11.敏捷的本质:对变化的响应。

    【Chap9 务实的项目】

    1.程序员有点像猫:聪明、独立、意志坚强、固执己见。

    2.维持小而稳定的团队。

    3.排上日程以待其成
    如果团队对改进和创新是认真的,那么就需要将其排入日程表。
    “只要有空闲时间”就去做,意味着这件事永远不会发生。(真实且深刻)

    4.团队的工作,不应仅致力于开发新功能,还可能包括:
    1> 旧系统的维护;
    如果团队被赋予这样的任务,那么就去做吧,真正地去做。
    2> 流程的反思与精炼
    太多的团队忙于排水,而没有时间修补洞口(点餐对账服务开发)。
    3> 实验新技术
    慎重考察候选技术,尝试后分析结果。
    4> 学习和提升技能
    个人学习和提高是一个很好的开始,但很多技能在团队范围传播时更有效。

    5.使用版本控制来驱动构建、测试和发布。

    6.测试环境应与生产环境紧密匹配,任何缝隙都是Bug的滋生的地方。

    7.务实程序员的本质---是解决问题的人。
    用户真正要的不是代码,他们要的是某个业务问题,在目标和预算范围内被妥善地解决。
    如果你的头衔只是“软件开发者” 或 “软件工程师”的某种变体,而事实上这个头衔应该是“解决问题的人”。

    相关文章

      网友评论

        本文标题:《程序员修炼之道》-摘录与思考

        本文链接:https://www.haomeiwen.com/subject/kclfadtx.html