工作已经两个月, 有一些汗水, 有一些收获, 有一些欢乐, 有一些郁闷. 前方的路依然光明, 我要继续走下去.
整理一下两个月的收获和问题,说的不全,完全以这段时间的实践为主线。
一 面向对象 VS 面向过程
1.我们的选择
项目开始时,技术经理那边决定使用面向过程作为我们的主要开发方式,当时主要的考虑点是效率和项目人员对OO和面向过程的熟悉程度。
我们的项目是一个交易平台,预计并发、高负载、快速响应会是项目最重要的问题,再结合PHP本身的特点,我们觉得面向过程应该是我们的更好选择。
另外,项目中,除了我本人接触的OO较多外,其他人对于OO的理解还仅仅位于“对象”上, 对OOA/OOD/Design Pattern等基本无概念,而由于我们的时间和现有资源的问题,我们也不可能进行这方面的入职培训。 所以最终我们决定使用面向过程。
2.如何选择
很多人大谈OO或者面向过程的好处,互相攻击对方的方法缺陷。就讨论本身而言,辩论有利于更好的交流以及对知识更深层次的理解。但也容易带来一些偏见,这些往往是由于个人的阅历经验、对新事物的心态以及是否辩证看待事物有关。每个人的工作环境、项目要求等等都不尽相同,而OO和面向过程都不是万能的解决方案,他们有各自的优缺点,有各自的适应环境(所以不能一概而论, 不能断定哪种方式绝对的好),同时也有重叠的部分(既然有重叠,那么在某些情况下使用OO和面向过程皆可,具体使用哪一种,主要取决于个人的偏好)。
因而我们讨论两种方法,重点在于分析他们各自的利弊、适应环境,而不是打败对方。我们的目的在于赢得真理, 而不是赢得讨论。无论枪有多好,刀也不会淘汰;同时枪也的确比刀强大很多—某些情况下。 继续阅读 »
拿到《测试驱动开发》这本书10天左右, 我便"粗鲁"的把它看了一遍, 说是粗鲁, 是因为我这是我一次正式的阅读关于极限编程的书籍, 同时又看的比较快, 对于诸多内容有些囫囵吞枣的嫌疑. 尽管如此, 我还是不得不感叹 Kent Beck(作者)的伟大思想, 给我感觉测试驱动开发更是一门方法学, 而非简单的软件工程解决方案.
激动与感慨之余, 顺便从书中摘抄了一些比较重要的TIps.
1.从测试开始, 而不是从建立对象开始.
2.测试开始之前, 写一个包含所有你认为必须要编写的测试的清单. 最后, 列出所有你认为这一轮编程结束后为了获得整洁代码而必须要完成的重构.
3.开始时的目的是为了让测试能够运行, 而非获得完美的解决方案.
4.测试驱动培养的是你在软件开发中一小步一小步的进行开发的能力, 而非教条的一小步一小步的进行开发.
5.首先解决目标的可用性, 之后再解决代码整洁性的问题.
6.尽量减少测试程序和代码之间的耦合度.
7.如果引入了新的测试, 你需要把新的测试记在清单上.
8.除非有更好的动机,否则不要引入过多的设计.
9.每一个周期,考虑重构一次代码,去掉重复部分.clear一下代码.
10.各种测试之间应该没有任何的相互影响.
11.相互独立的测试意味着所有的测试都是不依赖于顺序的.
12.试着从一开始就编写断言.
13.使用让人容易理解的测试数据.
14.测试从不做任何工作开始.
15.一次只解决一个问题.
16.注意休息.
相关资源:
1 PHP测试驱动开发介绍
2 豆瓣讨论
fork函数用于linux下创建进程, fork的字面意思为"叉子", 从之后的内容中将会了解到"叉子"是非常的贴切的.
fork原型为 pid_t fork() , 如果成功则返回子进程的进程id, 如果失败则返回-1, 通常在系统内存不够或者进程数已经达到上限时, fork才会失败.
让我们来看一段代码 继续阅读 »
今天连公司mysql服务器时, 遇到10061错误
ERROR 2003 (HY000): Can’t connect to MySQL server on ‘192.168.0.106′ (10061)
按照正常的情形, 应该是mysql服务没有启动, 但是奇怪的是从phpmyadmin可以连接上, 那就说明不是mysql服务的问题. 查看了一下本地mysql客户端和服务器上mysql服务端的版本, 发现本地的要比服务器上的新(本地5.1.34, 服务器5.1.32), 呵呵, 看来高版本客户端连接低版本服务端可能是不被支持的, 至少在我的版本情形下是不被支持的. 立刻更换本地连接客户端为5.0.37(比服务端低或相等皆可), 再次连接, ok!