很少被教的软件开发基础(转)
2014-11-12 14:04
232 查看
英文原文:The Rarely-Taught Basics of Building Software
译文/腊八粥
我经常想忘掉,在没有经验的团队里开发软件有多糟糕。他们的大部分开发实践和 Hobbes 关于原始人的描述类似。生活是“孤独、贫穷、肮脏、野蛮和短暂的”。就像原始人一样,这些人认识不到更好的生活是什么样子。
生活不必是这样的。我推崇的工具是软件,拷贝它们是自由的,唯一的成本就是人们需要学习该工具的时间。缺乏的是了解,人们需要知道如何使用这些工具,他们需要知道这些工具解决什么问题。最重要的是,他们需要知道这些工具是现成的。
下面是我认为基础工具的概览,它们是我认为合理的工具,缺少它们就像缺少电力和抽水马桶。悲催的是,它们都没有出现在我的计算机科学教育里。
备份
这适用于每个人,但是大量技术高手没有备份,我对此感到吃惊。如果你缺少备份,你将最终失去重要数据。我希望每个人在小学时就经历过硬盘坏掉的遭遇。就算丢失数据的几率很低,也要吸取备份的教训。
不管你用什么操作系统,备份总是比安装容易:
OS X 有时光机。
Windows 有文件 File History。
Linux 没有标准的备份方案。Ubuntu 有一个备份功能,但是它有些难用,我从来没有用它尝试过还原。Ubuntu 的社区维基有一些关于备份的优秀资料。
我不能夸大备份的重要性,如果你要接受本文建议中的一条,那就是备份。
源代码控制
源代码控制记录了谁在什么时间改动了什么地方,可以轻松回退到已知良好的版本。它让每个人对他们做的修改负责,也让每个人容易地看到代码库随时间的变化情况。即使只有你一个人在维护代码,也要使用源代码控制!
Subversion、Git、Mercurial,你用哪种软件不重要,用任何软件都比不用强。与编程相比,这些工具学习起来没有难度。每一个流行的源代码控制软件都有与之相关的免费书籍:
Pro Git Book
Mercurial: The Definitive Guide
Version Control with Subversion
SSH Keys
在 ssh 中使用密码验证是坏习惯,SSH Keys 允许你不用给远程服务器发送密码就可以身份验证。Arch Linux【注1】 wiki 提供了一份优秀的 SSH Keys 指导。
避免用 Root
使用 sudo 而非 root,较容易地让你避免昂贵的错误。
人们扫描 ssh 服务器,并猜测普通的 root 密码是很常见的。为了应对这种攻击,关掉 root 登录,通过 ssh 设置/etc/ssh/sshd_config 里的 PermitRootLogin 为 no。
保持学习
提高开发和部署软件的经验,有无数种方法,人们每天都在创造新的工具,我只是列出了我认为绝对基础的一些工具。一个人的知识很容易停滞不前,一定要坚持从书本、朋友和同事那里学习。如果你坚持了,有一天你可能尝试开发属于自己的工具。
注1:Arch Linux 是朝向轻量(lightweight)以及简单(simple)的 Linux 发行版。其中“简单”(Simplicity)被定义为“避免不必要或复杂的修改”,也就是说,是由开发者角度定义,而非用户角度思考。http://zh.wikipedia.org/wiki/Arch_Linux
http://news.cnblogs.com/n/508351/
译文/腊八粥
我经常想忘掉,在没有经验的团队里开发软件有多糟糕。他们的大部分开发实践和 Hobbes 关于原始人的描述类似。生活是“孤独、贫穷、肮脏、野蛮和短暂的”。就像原始人一样,这些人认识不到更好的生活是什么样子。
生活不必是这样的。我推崇的工具是软件,拷贝它们是自由的,唯一的成本就是人们需要学习该工具的时间。缺乏的是了解,人们需要知道如何使用这些工具,他们需要知道这些工具解决什么问题。最重要的是,他们需要知道这些工具是现成的。
下面是我认为基础工具的概览,它们是我认为合理的工具,缺少它们就像缺少电力和抽水马桶。悲催的是,它们都没有出现在我的计算机科学教育里。
备份
这适用于每个人,但是大量技术高手没有备份,我对此感到吃惊。如果你缺少备份,你将最终失去重要数据。我希望每个人在小学时就经历过硬盘坏掉的遭遇。就算丢失数据的几率很低,也要吸取备份的教训。
不管你用什么操作系统,备份总是比安装容易:
OS X 有时光机。
Windows 有文件 File History。
Linux 没有标准的备份方案。Ubuntu 有一个备份功能,但是它有些难用,我从来没有用它尝试过还原。Ubuntu 的社区维基有一些关于备份的优秀资料。
我不能夸大备份的重要性,如果你要接受本文建议中的一条,那就是备份。
源代码控制
源代码控制记录了谁在什么时间改动了什么地方,可以轻松回退到已知良好的版本。它让每个人对他们做的修改负责,也让每个人容易地看到代码库随时间的变化情况。即使只有你一个人在维护代码,也要使用源代码控制!
Subversion、Git、Mercurial,你用哪种软件不重要,用任何软件都比不用强。与编程相比,这些工具学习起来没有难度。每一个流行的源代码控制软件都有与之相关的免费书籍:
Pro Git Book
Mercurial: The Definitive Guide
Version Control with Subversion
SSH Keys
在 ssh 中使用密码验证是坏习惯,SSH Keys 允许你不用给远程服务器发送密码就可以身份验证。Arch Linux【注1】 wiki 提供了一份优秀的 SSH Keys 指导。
避免用 Root
使用 sudo 而非 root,较容易地让你避免昂贵的错误。
人们扫描 ssh 服务器,并猜测普通的 root 密码是很常见的。为了应对这种攻击,关掉 root 登录,通过 ssh 设置/etc/ssh/sshd_config 里的 PermitRootLogin 为 no。
保持学习
提高开发和部署软件的经验,有无数种方法,人们每天都在创造新的工具,我只是列出了我认为绝对基础的一些工具。一个人的知识很容易停滞不前,一定要坚持从书本、朋友和同事那里学习。如果你坚持了,有一天你可能尝试开发属于自己的工具。
注1:Arch Linux 是朝向轻量(lightweight)以及简单(simple)的 Linux 发行版。其中“简单”(Simplicity)被定义为“避免不必要或复杂的修改”,也就是说,是由开发者角度定义,而非用户角度思考。http://zh.wikipedia.org/wiki/Arch_Linux
http://news.cnblogs.com/n/508351/
相关文章推荐
- Java手机软件图形界面API之Form相关API-Java基础-Java-编程开发
- 每一个软件开发人员绝对必须掌握的关于 Unicode 和字符集的最基础的知识
- Java咖啡馆(9)——一个压缩归档实用软件-Java基础-Java-编程开发
- 敏捷软件开发基础: 持续集成环境的构建
- 《.NET软件技术开发基础》通识选修课完美收尾
- 也谈数学基础与软件开发-追寻曾经的梦想(一)
- 敏捷软件开发基础: 持续集成环境的构建
- 软件开发的基础知识—软件版本号详解
- 敏捷软件开发基础:进行有效的客户协作
- 也谈数学基础与软件开发-追寻曾经的梦想(一)
- (转贴) 每一个软件开发人员绝对必须掌握的关于 Unicode 和字符集的最基础的知识
- 每一个软件开发人员绝对必须掌握的关于 Unicode 和字符集的最基础的知识 (转)
- 敏捷软件开发基础:进行有效的客户协作
- 每一个软件开发人员绝对必须掌握的关于 Unicode 和字符集的最基础的知识 - A
- 关于以“安徽.NET俱乐部”为基础成立“安徽软件开发私活联盟”的倡仪(2005-8-20)
- 进入软件开发行业必须要掌握的基础知识(2005-5-18)
- 也谈数学基础与软件开发-追寻曾经的梦想(一)
- 用Java设计下载软件-Java基础-Java-编程开发
- 软件开发的三层架构基础概念
- 每一个软件开发人员绝对必须掌握的关于 Unicode 和字符集的最基础的知识