• 《程序员修炼之道:从小工到专家》1~3章


    1. 如果你是初学者,可以获取编程技术和方法,拓展你的编程生涯。
    2. 如果你富有经验

    网站:http://www.flyingdonkey.com

    • 除了编程语言进行表达,程序还要做些什么?这是更深入的问题。
    • 开会-->也是编程,也是思考-->过了几年后就会形成解决方案(模式语言)。
    • 作为程序员,你既是倾听者,又是顾问;既是解释着,又是发好死了者,你设法捕捉难以捉摸的需求,并找到表达。设法简历文档让人去理解它。
      ===>编程是艰难的工作。

    注重实效的程序员:

    • 早期的采纳者/快速的改编者
    • 好奇
    • 批判的思考者
    • 现实感(问题的本质)
    • 多才多艺、

    第一章 注重实效的哲学

    1. 我的源码让猫给吃了

    所有弱点中,最大的弱点就是害怕暴露弱点。

    1.1 负责(分析和把控)

    2 软件的熵(无序“总量”)

    不要留着“破窗户”(低劣的设计、错误决策或是糟糕代码)

    2.1 灭火

    1. 石头汤与煮青蛙

    有试试请求许可去做,你会遇到拖延和漠然。如果每个人都会护卫自己的资产

    1. 足够好的软件

     欲更好,常常变得更糟。

    金融资产管理

    1. 定期投资习惯
    2. 多元化
    3. 保守、高风险之间平衡
    4. 最大回报
    5. 周期性评估和平衡资产

    知识资产:

    1. 每年至少学习一种新语言
    2. 每一季度阅读一本技术书籍
    3. 也要阅读非技术书籍
    4. 上课
    5. 参加本地用户组织
    6. 试验不同的环境
    7. 跟上潮流
    8. 持续投入

    学习的机会

    • 阅读
    • 搜索信息
    • 搜索知道信息的人

    批判性思考

    交流

    • 必须的
    • 知道你想说什么
    • 了解你的听众
    • 选择时机
    • 调整你的风格
    • 让听众参与
    • 做倾听者
    • 回复他人

    提示

    • 不要容忍破窗户
    • 做变化的催化剂
    • 记住大图景
    • 使质量成为需求的问题
    • 定期为你的知识资产投资
    • 批判地分析读到的和听到的
    • 你说什么和你怎么说同样重要

    第二章 注重实效的途径

    重复的危害(不要重复你自己,要有权威规范和标准)

    • 强加的重复(改了代码,也要改注释)
    • 无意的重复 (设计时没有考量到的)
    • 无奈的重复 (这里可以去拷贝?)
    • 开发者之间的重复(如何知识管理)

    2.1 正交性(消除无关事物的影响)
    内聚

    • 促进复用。
    • 降低风险
    • 更好地测试

    思考

    • 怎么划分职责
    • 怎么设计
    • 工具箱+库 ==> AOP

    需要

    • 不断测试
    • 写文档

    2.2 可消除性

    如果某个想法是你唯一的想法,再也没有比这更危险的事情了。

    变化==> 灵活架构

    代码与 薛定谔的猫。
    未来有多少个未来?你敢打开盒子么?

    拽光弹

    快速、直观和可重复地从需求出发满足系统的某个要求。
    让你有方向地调整。
    侦察与收集情报。

    优点:

    • 用户及早看到工作的东西
    • 构建一个开发者能在里面操作的结构。
    • 有自己的集成平台
    • 有了可演示的内容
    • 能感觉到工作的进展

    抽象,解耦。

    11 原型

    • 正确性(分析与揭示问题)
    • 完整性
    • 健壮性

    适当使用原型

    早期缺点和改正潜在的问题
    便宜、容易,节省成本。

    12 领域语言

    语言的界限就说一个人的世界的界限。——维特根斯坦

    计算机世界

    • 编程语言会影响你思考问题
    • 交流方式

    用一个工具去分析需求

    • 靠近问题思考
    • 抽象层中,专心解决领域问题的自由。
    • 构造数据结构
    • 可能是小的交互脚本(bat)

    思考

    • 易于开发还是易于维护?
    • 维护性的回报?

    13 估算

    思考

    • 传送一个40m文件需要多久?
    • 你编写的时候,知道需要哪些子模块么?
    • 多准确才足够准确?
    • 估算从哪里来?(模型基础)
      • 系统的模型
      • 创造性,也说有趣的
      • 哪些说确定的,哪些说不确定的。(分解+计算)
      • 有问题再重头再来估算
    • 项目进度
      • 检查需求
      • 分析风险
      • 设计、实现、集成
      • 向用户确认

    提示

    • 不要重复你自己
    • 让复用变得容易
    • 消除无关事物之间的影响
    • 不存在最终决策
    • 用拽光弹找你的目标
    • 为了学习而制作原型
    • 靠近问题领域编程
    • 估算,以避免发生意外
    • 通过代码对进度表进行迭代

    第3章 基本工具

    14 纯文本的威力

    工具可以放大你的才能。

    你的基本材料是什么?

    • 最为重要的知识存储
    • 最佳的格式的纯文本
      • XML, HTML,还是觉得Markdown比较好
      • 不过时,可以阅读
      • 杠杆作用,使用vim等小工具
    • 补充:
      • 代码生成器
      • 元程序设计
      • 黑板
      • 自动化

    15 shell游戏

    如何启动你的应用,调试器,浏览器,编辑器。

    能否超越GUI?

    • 比快更快?
    • 如何更简略?
    • 怎么实现自动化?
    • 如何更有效地组合各种工具?

    如果你没有花大量的时间研究你所用的系统上的shell命令的各种能力,这些命令会显得很吓人。
    学习之后,惊讶怎么能提高你的生产效率。

    虽然windows的命令和工具能用,但是。。。

    windows集成的Unix工具,区分大小写,空格,分隔符之类的问题。
    或则会有奇怪的问题。

    16 强力的编辑

    工具说手的延伸

    思考

    • 你精通哪个编辑器
    • 最好的编辑器是什么?(Emacs,vi,CRiSP,Brief)

    特性

    • 怎么配置?
    • 扩展
    • 可编程(IDE属性)
    • 生产率如何?

    学习,并用好你的编辑器。

    17 源码控制

    进步远非由变化组成的,而是取决于好记性。不能记住过去的人,被判重复过去。

    关注什么?

    • bug追踪
    • 审计
    • 性能
    • 质量
    • 源码控制与构建(自动化+单元测试,确保当天提交的代码没有问题)

    18 调试

    这是痛苦的事:
    看着你自己烦忧、并且知道
    不是别人、而是你自己一人所致。
    —— 《埃阿斯》

    bug

    软件缺陷以各种各样的方式表现自己,从被误解的需求到编码错误。
    糟糕的是,现代计算机系统依然局限于你告诉它的事情,而不一定你说你需要的事情。

    关注

    1. 调试为了解决问题(不要推诿,不要抵触)
    2. 你的思维是否正确?
    3. bug报告不是精密的科学,可能被误导。(仔细观察与分析)
    4. 知道如何重现?定位问题。(是否显而易见?)
    5. 能知道当前程序做了什么(debug)==>链路与栈踪迹
    6. 为什么说“不可能”?为什么会吃惊?

    此时,你才会意识到单元测试的重要性

    相关内容

    • 断言式编程
    • 靠巧合编程
    • 无处不在的自动化
    • 无情的测试

    19 文本操纵

    Unix开发者喜欢利用shell的力量,像awk和sed 。
    有的人喜欢用python,有的喜欢用perl
    ==> 这些都是你的醴陵。

    适用于

    • 数据库schema维护
    • Java属性访问
    • 生成测试数据
    • 对笔记,文本格式化
    • 与C底层接口测试
    • 生成web文档

    20 代码生成器

    使用代码生成器,实际上没有任何代价。

    类型

    • 被动代码生成器,运行一次来生成结果。(模板性质)
      • 创建的源文件
      • 在编程语言之间进行一次性转换。(如何检查与修正)
      • 生成查找表与其他在运行时计算很昂贵的资源。
    • 主动生成器,在每次需要其结果的时候被使用 。
      • 能衍生出形式,例如:schema与DB
      • 不一定很复杂
      • 不一定是代码,可以是文档,或者文本。

    提示

    • 20 用纯文本保存知识
    • 21 利用命令shell的力量
    • 22 用好的编辑器
    • 23 总是使用源码控制
    • 24 修正问题,而不是发出指责
    • 25 不要恐慌
    • 26 真的没有问题?
    • 27 不要假定,要证明
    • 28 学习一种文本操纵语言
    • 29 编写能编写代码的代码
  • 相关阅读:
    Chat Application using Web services in C#(转载)
    Asynchronous Method Invocation(转载)
    Passing Data between Windows Forms(转载)
    Fill in PDF Form Fields using the Open Source iTextSharp Dynamic Link Library(转载)
    The ShutDown Alarm(转载)
    使用blowery.Web.HttpCompress.dll对aspx压缩
    C# Voice and Tone Alert Generator(转载)
    Compress Folders with C# and the SharpZipLib(转载)
    Ubuntu 12.10 修改窗口按键布局(buttom_layout)到右边
    同步CM9源代码
  • 原文地址:https://www.cnblogs.com/carvendy/p/7881636.html
Copyright © 2020-2023  润新知