我为什么更喜欢用git

之前,我写了一篇文章《SVN为什么比git更好》,主要是从非常朴实和现实的角度,从一个为全团队选型的角度,分析了为什么SVN比git更好。但是公私分明,作为我个人来说,我想我还是更喜欢git的。 Continue reading “我为什么更喜欢用git”

我们为什么需要版本控制系统?

甚至早在踏上程序员的工作岗位的第一天之前,我就开始使用版本控制系统了,那时候,使用的是SVN。而现在工作五年多了,我使用的版本控制系统,换成了Git。现在,我试图通过一个分享,将我的同事,或者一般的小伙伴,带入到Git的世界,这时候,我就必须搞清楚很多基本的问题,比如,这个问题,为什么我们需要使用版本控制系统呢?

上周五,我们公司新加入的工程师,给大伙分享了Git的一点经验心得,谈及这一类的问题的时候,表达了类似非常理所当然的态度,甚至我都不记得他有提及过任何相关的词句。但是,假如我现在必须给一个从来没有用过版本控制,甚至不知道版本控制的人,讲解版本控制系统的必要性的时候,这个问题真的有那么理所当然么?

我想,答案是否定的。(谈及这个东西的时候,我忍不住又想啰嗦了,我在跟人沟通的时候,常常发现,很多人无法分清楚,什么是主观的,什么是客观的,更别提要求他们分清楚,什么是自己已经知道的事实,而这里面哪些东西,站在你对面的人其实并不清楚,也即信息的不对称程度到底达到什么级别?所有这些归结为三个字,就是“想当然”。所以,当你想当然地觉得,这还用说嘛,或者觉得,显然这是个正确的理由的时候,其实,对别人来说,确实没有那么的理所当然) Continue reading “我们为什么需要版本控制系统?”

低扇出,高扇入

我承认,判断一段代码的好坏,有很多主观的因素,你大可以来批评我,『你看不惯别人的代码,别人还看不惯你的代码呢,既然如此,何不和和气气,多包容包容』。我的回答是『No,不好就是不好,我在批评的时候,除了主观因素,确实还有一些客观标准的,不信拉倒』。 Continue reading “低扇出,高扇入”

永远都不要拷贝代码

经常,你可能会觉得,原来代码写得不好,想要重构,但是重构的时候,是先把原来的代码拷贝过来,确保不影响老的功能。然后新功能做好后,逐步修改老功能。最终实现完成重构,代码得到优化。

上面的故事和计划很美好,所以,它们十有八九不能被完整执行,后果往往就是,拷贝了一堆代码,老代码大摇大摆继续运行,新功能不断压来,系统里多了一堆代码的拷贝。这时候,只要祈祷不要出bug就好,不然就是双倍的工作量,恶劣的,还会造成数据不一致,新老代码操作数据有细微差别就会有这种情况,一般差别很细微,还特别不易发现。

如果相信我,一个一线写了五年代码的人,那就请相信,任何时候,都不是你拷贝代码的借口,哪怕是打着『重构』、『优化』这种冠冕堂皇的借口,也不可以,哪怕有 deadline,也不可以,哪怕时间紧也不可以,刀架脖子上了,那也不可以,那时候还写个屁代码啊?还不快跑。

拷贝代码,只会增加你自己的工作量,或者增加别人的工作量。不想越做越多的话,别那么干。

重构是一种艺术,如果你真想完全不破坏老的功能,正确的做法,是为老功能编写测试用例,然后直接改代码,抽取也好,剥离也好,就是不能拷贝,然后通过测试用例来判定,老功能是否受到破坏,而不是不敢动,通过拷贝来给自己做个沙盒,这一开始就是没有自信的表现,不能凭感觉,要靠科学。

股票 2015-07-02

2015年上半年,是牛市的半年。其实从去年开始,就陆续在牛市了,会玩的人,已经赚得很开心了。不能免俗的,我也进去了。现在来写这个文章的时候,我已经持续交易一两个月了。这时候出来写点感受,算是对自己心态的一个记录。

我进入牛市的时候,已经是人人挣钱,人人往里挤的时候了,历来,这也是牛市即将结束,即将套牢的时候了,事实嘛,也差不了太多了。

之前,看别人,随便怎么买都赚钱,我甚至到了借钱也往股市里砸的地步了。当然,说得夸张点,其实我没放进去多少钱,最多的时候,我在A股进去3万,本来打算捞一笔就走的,没想到,我进去的股票,竟然停牌了。真是太糟糕了。借的钱这下还不上了,只好拆了东墙补西墙,靠着工资的流水,勉强能支持。

另一方面,我认为A股可能已经太不规律,完全靠消息,做无可做,所以,我又加入了港股的市场。除了我以前一直买买卖卖的腾讯以外,我又做了点别的股票,比如比亚迪,元征科技,都取得了不错的效果。

然而,没有然而是不可能的,本来赚一笔就跑,虽然收益不多,也算是正收益,所谓人心不足蛇吞象。想我这种一点不懂的人,竟然持续往里进,尤其开始往自己没有了解,没有观察的股票里进,简直太过草率了。

首次抛空后,我忍不住手痒,又重新在49块杀入比亚迪,因为那几天跌得很厉害,感觉还会起来。前两天A股大跌,我还很乐观,觉得机会来了,明天必然反弹,立马加仓,又在156杀入腾讯,再加上之前同事推荐我的精英国际,我重仓进入,成本9毛4,理想是赚一票就走的。结果,第二天,A股继续暴跌,形成今年来最大股灾,港股跟着暴跌,甚至更惨,没有跌停,我一天之间损失了20%。就是典型的那种白痴心态,亏了钱,不马上止损,还抱有幻想,害怕一抛就涨,反过来,涨了,及时跑掉,害怕拿着就错过赚钱机会,正反两种错误心态的加成下,我整体赚得不多,在股灾的时候,亏得惨重,现在基本亏到了成本了,也就是从最早玩票一般投入的2万,到今年年初加仓的3万,上个月投入的5万,总共10万,我一共赚了2万多港币,而现在基本已经全部亏进去了,两年来,投资收益是0附近吧,如果我记忆没错,应该还是正数。

从6月30日行情来看,国家救市是很不遗余力的,所以,大涨,而昨天7月1日,上午看似还不错的,下午就开始猛跌了,然后,大家就极度不淡定了,而现在是7月2日凌晨,群里又在持续公布更多的重大利好,到底该信谁,不该信谁?到底自己是谁?我连这种问题都已经迷茫不堪了。

比如,根据过往,我完全是一个最没经验的小散,亏了不割,赚一点点就跑那种,所以真的如此,我就应该跟着自己直觉的反面走,反倒是有可能赚。而我现在在一个群里,群主我认为还比较有经验的,又说2号一定要找时机抛空不要继续玩了,我之前两天跌怕了,有点倾向于相信了,那如果我相信了他,跟着他的意见操作,我到底还是不是小散了呢?如果还是的话,还是应该对着直觉反面来操作,反而胜率大,但是如果我的直觉就是直觉的反面呢?

所以,我现在完全迷茫状态,各种各样的信号,我都是不懂的,比如A50跌了,上证50和上证180股指期货,都有大量做空单子,这些又说明什么?银行大规模赎回银行理财,达到600亿,又说明什么呢?我全都看不懂,极度迷茫,困惑。

从以上经历,我就知道一点,我最近两三个月,都是一种很不爽的状态,每天上班时间,大量看盘,心绪不宁,基本都等收盘了才有心情工作,而下班了又玩命刷群,不断看各种信息,希望知道第二天的判断,宝贵的时间,都浪费了。而实际上呢,我根本还是不会炒股票的。有同事讥讽我为股神,这不是很可笑么,但是想想自己之前很多振振有词的言论,还真是可笑啊,在市场波动面前,不堪一击啊。

如果说,后面有什么策略的话,那就是尽快清仓出来,然后认认真真上班,安安心心学习,至少弄懂宏微观经济学,货币银行学,对整个世界有一个初步认识后,再来考虑到底应该如何在现今世界经济浪潮中自处。如果还有余力,余钱,空余时间,再考虑入市操作个一两下,争取不要亏钱就算是实践了所学吧。

不应该用public static function来改善系统的抽象层次

无论是在以前的团队,还是在现在的团队,都有人主张抽象出所谓的Service层,他们认为Model只负责跟数据库沟通,不应该混杂过多的东西,而同样也不赞成在Controller的Action里面,做太多事情,那样不利于复用。而他们赞成的方案,就是『抽象』出一层所谓的Service层,从而实现代码的复用。

而我通过观察他们具体的实现的代码,发现,这是一个很糟糕的想法。因为很少有人能忍住诱惑不去滥用。

在PHP里面,public static function其实就是最最原始的函数式编程模式的全局函数而已。任何一个软件里,如果全局函数满天飞,肯定不是一个『抽象』优秀的系统。如果不是绝对克制,那程序员会忍不住在任何地方,调用全局函数,甚至,只要一能复用代码,就忍不住去调用一下全局函数,得到好处后,就会进一步把更多的东西变成全局函数,而最后发现,所有的业务逻辑都在全局函数里了。

这种做法,其实就是饮鸩止渴而已,在单人工作模式下,绝对自我控制的人,你还能采用这种方式,但是一旦到了团队合作的时候,你很难阻止同伴滥用,哪怕滥用了一次,这种做法就会无休止蔓延,就好像破窗户理论说的,整个大楼一破再破,直到崩塌。

我举个简单例子,因为在全局函数里,你可以调用任何全局作用域的对象,当你那么做了以后,任何地方哪怕能复用到一部分这个方法,你就会忍不住去调用,因为是全局函数,总是可以被调用的,所以调用点的作用域,也全局化了。最后,整个系统就遍布着全局函数了。

可能说得比较绕吧,但是有个大原则我是信奉的,也希望读者你能看懂:全局函数和全局变量是邪恶的,我们应该拼尽全力去减少全局变量和全局函数,而不是增加他们。如果你想实现一个所谓的Service层的时候,请不要使用public static function,因为那根本就是全局函数。

另外,重申一下,不是说抽象Service层有多错误,我真正反对的是,使用public static function去进行所谓的抽象,那对抽象毫无帮助,说明你的抽象能力还停留在抽象一个函数的能力。