三十年软件开发之路


  • 软件开发

    • 先明确问题,再开始写代码
    • 将步骤写为注释
    • Gherkin是帮助你了解期望(expectation)的好帮手
    • 单元测试很好,集成测试更好
    • 测试可以让API更好
    • 做你知道如何在命令行上运行的测试
    • 时刻准备好扔掉你的代码
    • 好的语言生来带有综合测试
    • 未来思路是垃圾思路
    • 文档是写给未来自己的情书
    • 功能文档是份合同
    • 如果一个函数的描述包含“和”,这就是不对的
    • 不要使用布尔型变量作为参数
    • 注意界面的变化
    • 好的语言自带集成的文档
    • 一门语言绝不仅仅是一门语言而已
    • 有时候,宁愿让应用程序崩溃也不要什么都不做
    • 如果你知道如何处理该问题,那么就处理它
    • 类型决定你的数据是个什么东西
    • 如果你的数据具有模式(schema),请使用结构(structure)来保留它
    • 理解并保持cargo cult的方式
    • 不要管所谓的“合适的生产力工具”,你只需要尽力去push进程
    • “正确的工具”比你想象的更明显
    • 不要跟你项目之外的事情纠缠
    • 数据流动比模式更重要
    • 设计模式是用来描述解决方案的,但它不能找到解决方案
    • 学习函数式编程的基础知识
    • 认知成本是可读性的杀手
    • Magical Number 7 ,正负二(7+-2的范围内)
    • 走捷径挺nice的,但只是在短期内如此
    • 抵制“轻松”的诱惑
    • 总是在你的日期中使用时区
    • 总是使用UTF-8
    • 从笨办法开始
    • 日志用于事件,而不是用户界面
    • Debugger们被高估了
    • 始终使用版本控制系统
    • 每次提交一个更改
    • 当你过度交换时,“git add -p”是你的朋友
    • 按数据/类型组织项目,而不是功能
    • 创建库
    • 学会监控
    • config文件是个好东西
    • 命令行选项很奇怪,但很有帮助
    • 不仅仅是功能组成,还有应用程序组成
    • 即使是做APP,也要从原始的东西开始
    • 优化是面向编译器的
    • 通过懒惰(评估)
  • 在团队/工作上
    • code review并不是为了彰显风格
    • 代码格式化工具还可以,但它们也不是无往不胜的
    • 代码风格:遵循它就是了
    • ...除非代码样式是Google Code样式
    • C / C ++只有一种编码风格:K&R
    • Python只有一种编码风格:PEP8
    • 显式优于隐式
    • 公司想要专才,但全才在公司待的时间更长
    • 心中有用户
    • 处理用户数据的最佳安全方法是压根不捕获它
    • 记下来那些“让我花了一个多小时才解决的愚蠢失误”
    • 如果它无法在你的计算机上运行,那么你就有麻烦了
  • 个人生活
    • 该停下来的时候,就停下来吧
    • CoC保护的是你,而不是别人
    • 学会说不
    • 你负责你代码的使用
    • 当还没完成时,不要说“已经完成了”
    • 你将从痛苦中了解你自身
    • 人们之所以会对代码/架构感到生气/烦恼,是出于关心
    • 从你的烦恼中学习
    • 注意人们对你的反应
    • 学会识别那些人格有毒的人,并远离他们
    • 谨防微观侵略
    • 不,我不认为这样的人是“会改正的”
    • 只有当你意识到自己是那类有毒的人/微侵略者时,才有可能自己改正
    • 英雄项目:总有一天你必须做的事情
    • 不要混淆“英雄项目”与“英雄综合症”
    • 知道何时该果断辞职
    • IT世界是一个非常小的“蛋”
    • 纸质笔记实际上很有帮助
    • Trello非常酷,但Post-it更好
    • 在博客中记录你笨手笨脚的解决方案仍然比什么都不写要好
    • ...但请关闭评论
    • 把你的笨手笨脚的解决方案发布到网上
    • 列出“我不知道的事情”

学习笔记之三十年软件开发之路 - Things I Learnt The Hard Way (in 30 Years of Software Development)的更多相关文章

  1. 【Java学习笔记之三十四】超详解Java多线程基础

    前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧. 正文 线程与进程 1 线程:进程中负责程序执行的 ...

  2. 【Java学习笔记之三十】详解Java单例(Singleton)模式

    概念: Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例.饿汉式单例.登记式单例. 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建 ...

  3. 【Java学习笔记之三十二】浅谈Java中throw与throws的用法及异常抛出处理机制剖析

    异常处理机制 异常处理是对可能出现的异常进行处理,以防止程序遇到异常时被卡死,处于一直等待,或死循环. 异常有两个过程,一个是抛出异常:一个是捕捉异常. 抛出异常 抛出异常有三种形式,一是throw, ...

  4. VSTO 学习笔记(十)Office 2010 Ribbon开发

    原文:VSTO 学习笔记(十)Office 2010 Ribbon开发 微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个R ...

  5. VSTO学习笔记(十五)Office 2013 初体验

    原文:VSTO学习笔记(十五)Office 2013 初体验 Office 2013 近期发布了首个面向消费者的预览版本,我也于第一时间进行了更新试用.从此开始VSTO系列全面转向Office 201 ...

  6. VSTO 学习笔记(十二)自定义公式与Ribbon

    原文:VSTO 学习笔记(十二)自定义公式与Ribbon 这几天工作中在开发一个Excel插件,包含自定义公式,根据条件从数据库中查询结果.这次我们来做一个简单的测试,达到类似的目的. 即在Excel ...

  7. Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...

  8. [转]Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例

    本文转自:https://www.cnblogs.com/zhongweiv/p/nodejs_koa2_webapp.html 目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装 ...

  9. Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例

    前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...

随机推荐

  1. SpringMVC异步处理 可使用的返回值类型

    CallableMethodReturnValueHandler Callable.class.isAssignableFrom(returnType.getParameterType()); Def ...

  2. Android之WebRTC介绍

    参考自:Introduction to WebRTC on AndroidAndroid之WebRTC介绍 WebRTC被誉为是web长期开源开发的一个新启元,是近年来web开发的最重要创新.WebR ...

  3. 【转载】 tf.ConfigProto和tf.GPUOptions用法总结

    原文地址: https://blog.csdn.net/C_chuxin/article/details/84990176 -------------------------------------- ...

  4. python初级(302) 6 对象(五)

    一.复习 1.什么是多态 2.什么是继承 二.继承:向父母学习 在面向对象编程中,类可以从其他类继承属性和方法.这样就有了类的整个家族,这个家族中的每个类共享相同的属性和方法.这样一来,每次向家族增加 ...

  5. EasyNVR摄像机网页无插件直播方案H5前端构建之:区分页面是自跳转页面还是分享页面

    背景分析 EasyNVR整套方案的架构中,涉及到前端设备(摄像机IPC.硬盘录像机NVR.编码器等).流媒体服务端(EasyNVR).客户端终端设备(PC.浏览器.Android.iOS.微信). 在 ...

  6. (十)redis源码解读

    一.redis工作机制 redis是 单线程,所有命令(set,get等)都会加入到队列中,然后一个个执行. 二.为什么redis速度快? 1.基于内存 2.redis协议resp 简单.可读.效率高 ...

  7. javascript之this、new、apply和call详解

    this指针的原理是个很复杂的问题,如果我们从javascript里this的实现机制来说明this,很多朋友可能会越来越糊涂,因此本篇打算换一个思路从应用的角度来讲解this指针,从这个角度理解th ...

  8. Centos7快速安装Rancher

    通过docker,我们可以快速安装rancher 安装步骤如下:[root@localhost ~]# #run运行,-d后台模式 --restart=always跟随docker启动,-p映射端口, ...

  9. IDEA中类文件显示J,IDEA Unable to import maven project: See logs for details

    今天用了下lemon清理了下垃圾后,IDEA打开项目类文件图标由C变为J,在IDEA右侧的Maven Project中点击刷新提示IDEA Unable to import maven project ...

  10. Linux下Ngnix的安装与配置

    由于我的博客项目在8084端口,需要Nginx来转发一下端口,记录一下安装过程和踩过的小坑. 一.下载 wget http://nginx.org/download/nginx-1.12.2.tar. ...