zoukankan      html  css  js  c++  java
  • 《程序员修炼之道 》2

    第一章 注重实效的哲学

    1 我的源码让猫给吃了

    提供各种选择,不要寻找借口。

    2 软件的熵

    一句话:不以善小而不为,勿以恶小而为之.

    破窗户理论:一扇破窗户给人废弃感,慢慢人们也开始不关心周围的居住环境,开始乱丢垃圾,乱抹乱画,整个社区就废弃了。

    3 石头汤与煮青蛙

    先出一个『石头』一样的版本,催化大家一起完善它。

    不要做温水里的青蛙,随着开发的进行软件的熵可能越来越大,要留心大图景,及时做出反应。

    4足够好的软件

    不可能存在完美的软件,不要过分完美主义,从而去精雕细琢一些不是十分必要的细节。

    其实这暗含了『敏捷开发』的核心思想,我们需要尽快的开发出『可用』的软件,交给市场来反馈,而不是想当然的开发我们认为的『完美』的软件。

    5 你的知识资产

    对程序员来说,知识就是所有的资产,要像管理资产那样来管理自己的知识。『定期投资』,坚持学习。『多元化』和『管理风险』,意味着不要把鸡蛋放在一个篮子里,不要只关注java的技术栈,多了解其他技术以免被淘汰。『低买高卖』,和股票一样,在技术比较低潮的时候开始学习,这样等技术流行的时候就可以步入行业顶尖,得到很大的回报。不过个人不是很认同这一点,目前新技术层出不穷,与其随时跟风学新技术,不如深入学习一些难啃的底层的东西,比如研究『算法』和读一些大部头的经典的书,选择性的学习潮流。『重新评估和平衡』,学而时习之,不亦乐乎。

    6 交流

    『交流』在各行各业都是十分重要的能力,尤其作为一个程序员,交流能力甚至重要过coding的能力。『知道你自己想说什么』,要逻辑清晰,表达在点。『了解你的听众』,不要一味的强灌你自己的观念,说服的前提是倾听。选择时机和风格,这个都是经验得来的。做美观的文档,让听众参与,习惯倾听,锻炼自己的邮件能力。

    第二章 注重实效的途径

    7 重复的危害

    DRY: Don't repeat yourself.

    这句话可以说是最最重要的代码原则。当你为了追求绩效而去单纯的拷贝某一段现有的代码,而不做任何逻辑抽离和修饰时,你就已经是个『失足』程序员了。

    当你觉得复用变得困难时,再退一步审视一下自己的代码,肯定有重构的空间。

    8 正交性

    几何概念,互相垂直的两条线就是正交的。

    反应在软件设计中意味着,当一个组件的修改完全不会牵动另外一个时,这两者即正交。

    避免耦合,分层分模块,善用设计模式。让系统富有弹性,可以随需应变。

    9 可撤销性

    还是系统的可变性,是否可以快速应付其中一些改变而快速改变。一言以蔽之:面向接口编程。

    10 曳光弹

    当你狙击时,你需要曳光弹帮你定位目标。一言以蔽之:做大型项目时,先出一个简陋可运行可展示的版本。不要在黑夜中盲狙。

    11 原型与便笺

    作为曳光弹的替代,可以使用原型来架构。这方面实践不多。

    12 领域语言

    『语言的界限就是一个人世界的界限』维特根斯坦的这句名言就足够描述了。java程序员会习惯性的啰嗦,c++程序员可能是最严谨的。

    13 估算

    敏捷团队的程序员每时每刻都在估算,估算这个功能需要多少个story point,估算这次重构需要多久。当你觉得难以估算工作量的时候,试着拆分。敏捷团队需要每个人每时每刻都知道自己和项目的进度,知道自己所处的位置。

    第三章 基本工具

    14 纯文本的威力

    用纯文本来存储数据?

    哦。

    15 Shell游戏

    没什么好说的,奇技淫巧。

    16 强力编辑

    内容有些过时了。IDE是首要的,vi能掌握固然好,不过其他编辑器如atom和vs code都是不错的选择,容易配置上手。

    17 源码控制

    没什么好说的。

    18 调试

    Debug除了需要经验,更需要端正的心态。

    19 文本操纵

    这一节没理解它真正的含义,表面看来是讲可以使用程序来读取操作文本的信息,来加快工作效率,但是到底指什么呢?不明白。不过倒是在工作上,多次嫌手工执行一些转换数据库工作麻烦,而写一些简短的工具来做批处理,效果也很不错。

    20 代码生成器

    也是DRY原则的体现,不过好的代码生成器对代码能力有极高的要求,希望以后有机会可以接触到。

    21 按合约设计

    每个method或者subroutine都会做某件事情,在开始做事之前,它需要对世界的状态有种期望,也应该陈述系统结束时的状态。『前条件』,『后条件』,『类不变项』。

    22 死程序不说谎

    提早崩溃是件好事情!

    23 断言式编程

    断言的价值不应只体现在unit test里面。

    24 何时使用异常

    仅仅在异常的时候使用异常。听起来好像一句废话,不过确实见过有的代码里把异常当作goto一样使用,会极大破坏程序逻辑。

    25 怎样配平资源

    有始有终。打开资源以后必须要记得关闭,包括文件,内存,io。

  • 相关阅读:
    内存相关函数
    Redis入门
    libevent(九)evhttp
    Python基础00 教程
    Python之re模块
    Makefile入门
    cmake安装jsoncpp
    awk调用date命令
    SQLite使用(二)
    SQLite使用(一)
  • 原文地址:https://www.cnblogs.com/huaobin/p/14909388.html
Copyright © 2011-2022 走看看