阅读《构建之法》后的一些问题
在阅读此书的时候,我尽量和自己的实际经历结合起来思考,的确产生了一些想法。
1. 第三章:软件工程师的成长
年轻学生都志向远大,上了一些课,就很想解决高层次的问题,一些学生非常想做高层次的“科研”,觉得“工程”是基础,没意思。而且他们认为“我已经知道怎么做了”。
我应该是书上例子的反面,最开始就是打算解决中低等层次的问题。在学习理论知识的时候,觉得高层次的问题非常抽象。比如对于高级算法的学习,常常是花了很多时间学习,但是过一段时间后就忘了,感觉个人收获很少。
所以没有把重点放在进实验室做“科研”的方向上,而是去了解移动端开发和传统后端开发的知识,着手做小的项目。在完成了能够运行的网站之后,的确觉得在Web后端CRUD搬砖有点无聊,开始涉及机器学习,发现“科研”[算法]实际上对数学素养的要求很高,而个人数学水准只是应付考试的样子。
在企业实习之后,发现把自己写的代码被merge到master分支,然后到线上环境被很多人使用,是非常有成就感的事情,所以感觉做“工程”也不止是搬砖,压力和成就感都是“工程”能够带给自己的,并且由于实际需求,很多时候工程开发不一定比论文灌水更简单。
2. 第四章:两人合作
代码规范可以分成两个部分:
1. 代码风格规范,主要是文字上的规定,看似表面文章,实际上非常重要。
之前其实对代码风格是非常不在意的,但是最近重新认识到了良好代码风格的重要性。
在企业软件开发的过程中,个人最开始不注重代码风格,结果发现自己写的代码不能通过线上的代码规范校验,采坑举例:
- 所有全局变量必须用
g_
开始,并且全局变量的申明之后必修留空一行。 - PHP中不能使用
private const
字样,因为这是PHP6.x之后支持的用法,而已有代码很多使用的PHP5.5和5.6,所以不能使用不兼容的语言特性。
后来阅读别人的代码意识到,软件的研发阶段时间是很少的, 而维护的时间占比最大,一般来说,看到的代码可能是上一个离职的人留下的代码,况且很多程序员根本不写注释,这时候如果代码命名很烂,风格很差,接手代码的人会很痛苦。
3. 第四章:结对编程
在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工作。他们并排坐在一台电脑前,面对同一个显示器,使用同一个键盘、同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起做单元测试,一起做集成测试,一起写文档,等等。
根据定义,我在网上找到的结对编程是这样的:
然而我在短期的企业实践中很少观察到这种编程方式,根据我的观察,如果出现两个人对着同一个屏幕,更多时候是在讨论为什么出现了这样一个bug,怎样去修好(并且这种情况下还是因为其中一个人搞不定),而不是怎样设计文档以及编程的过程。
虽然两个人一起工作能够更为全面的审视代码,但是个人感觉是一种降低效率的方式,不同的人思维不同,代码风格不同,话说两个人坐在一起写同一个函数会不会因为大括号到底要不要换行而吵起来呢?
4. 第十六章:IT行业的创新
- 用户体验的创新
- www.hao123.com有什么技术上的创新么?
关于hao123.com是如何做大的,书中并没有具体的描述。
在200x那几年hao123的确是个现象级网站,那个时代很多网吧上网导航都默认是hao123。hao123在早期来看的确是一个没有技术含量的网站,只是单纯的收集各种网站的链接,看起来好像很容易被复制,但是查阅了一些资料总结一下:
而在这一年,互联网也遭遇了一个寒冬,很多粗制滥造的小网站纷纷倒闭,不过hao123却是挺幸运,熬过了这一关。这并非意外,而在于李兴平执着坚定的收录原则:不收录有不良内容或提供不良内容链接的,以及网站名称或内容违反国家有关法规的网站;不收录无实用内容的网站,包括那些尚无完整内容正在建设的网站;不收录含有病毒、木马、弹出插件或恶意更改他人电脑设置的或有多个弹窗广告的网站;不收录挂靠别人的网站下的网站,即没有自己单独域名的网站;不收录在正常情况下无法正常连接或浏览的网站……正是因为坚持这几大原则,hao123更为健康,得到用户的喜爱。[摘自CSDN]
实际上是因为保证了网站质量,而的确不是因为技术上的创新。
5. 第6章:敏捷开发
这一章没有什么问题,但是更加清晰地认识到了敏捷开发的流程。每个Sprint迭代中给每个团队成员分配卡片任务,时间以天数为单位,同时每周例行站会和每周总结,比较适合快速迭代的开发,但是这种开发模式,文档这些方面会弱势一些。
『软件』和「软件工程」
『软件工程』一词最早是由 Margaret Hamilton 在阿波罗11号登月计划准备期间提出的,她最开始使用Soft Engineering词是为了和硬件以及其他工程学做出区别。
『软件』术语最早出现在出版刊物是在1953-8月,被Richard R. Carhart提出,而最早使用“software”是在JSTOR电子刊物的一篇调研。
源程序版本管理软件和项目管理软件
使用排名:
- GitHub
- Bitbucket
- Launchpad
- SourceForge
软件特点:
- GitHub
- GitHub 对 Git 版本库提供了完整的协议支持,支持 HTTP协议、SSH 协议。
- 项目的 Fork 和 Pull Request 构成 GitHub 最独具一格的工作模式。对提交代码的逐行评注及 Pull Request 构成 GitHub 特色的代码审核,国内很多公司内部平台如icode也模仿了这种方式。
- 因为GFW,国内访问速度太慢
- Mercurial
- Mercurial 是一种轻量级分布式版本控制系统
- 传统的版本控制系统使用集中式的 repository,一些和 repository相关的管理就只能由管理员一个人进行。由于采用了分布式的模型,Mercurial 中就没有这样的困扰,每个用户管理自己的 repository,管理员只需协调同步这些repository。
- 国内很少人使用,所以中文资料匮乏。
- Trac
- SCM配置管理平台
- 不显示中文名,中文支持很差
- Bugzilla
- 缺陷管理,免费,支持中文
- 功能不及GitHub