翁99

小翁正在上课,隔着外面马路,我能清楚听见他的大嗓门:“是不是,说.....是不是?"不知情的以为这是国民党反动派在严刑逼供我地下党员,其实只是小翁在课堂上问学生问题。

为什么喊他小翁,已不得而知!1米6几的身高,说话喜欢咧嘴笑,一惯性衣冠不整,背有点驼,这样显得更矮了;给老师们的印象是手里拿着书急匆匆的赶到教室,上课嗓门洪亮,每次临近考试,印卷子时,弄得满脸油墨的样子。其实小翁比我年长好几岁,本地工学院毕业,一直未婚,各方面条件都不达标,导致这事就耽误下来了。

有一次,晚自习后,作为学校网络管理员的我发现小翁的电脑正在浏览色情网站,其中有个网址包括99,第二天就在办公室大声把这事儿说了,男老师们开心过后,就直呼翁99,从此流传开了,这个事情让小翁一直耿耿于怀,找机会报复我。机会来了,有次一个女学生生病,需要赶紧送医院,女学生非要求我来背她,这以后,小翁每次见到我,就投来诡异的眼神,阴阳怪气的说:”小杨老师,你来背我嘛!“我回一句:”99,不要这样嘛!“

那一年,小翁当上了班主任,因为学校招生太好,班级新增过快,小翁就上了。教书小翁是把好手,但是当上班主任后,不知道是不是用力过猛,隔三差五总是有女学生来告状,说翁老师像在逼供,哪像师生之间的正常交流,弄得女生们哭哭啼啼!这事反应多了,小翁就不在当班主任了,继续教他的书,学校里面又经常听到他的大嗓门了。

小翁喜欢逛书店,每次去市里面,喜欢在各种书店里面逗留很久,有时候一个人能待一天。喜欢看书,但是不喜欢买。小翁比较抠门,吃饭时候总是不主动掏钱,有次被逼请客,扭捏了好久,才掏钱付账,义正言辞说:”下次你要请我“。

后来,小翁离开学校,听说去了其他学校教书,有次qq上聊天,我问他在哪里?他就问我在哪里,我说在北京,他说他也在北京,我说你在北京什么地方,他说你在北京什么地方,我说在丰台,他说他也在丰台。后来我就下线了,从此没有联系过,多年过去,不知道现在如何?再也听不到小翁上课时洪亮的嗓门了。

2017/7/28

送给一起加班的兄弟们

IMG_1669

算了一下,从开工到12月18号上线,接近三个月,三个月时间里,做了一些东西,一个垂直行业的B2B商城,后端pc管理,前端用户商城,移动端包括IOS和Android,整个过程惊心动魄,因为不可能完成的东西居然上线了。

一般来说一个做互联网产品的公司,产品经理、程序员、技术总监、测试、运维等都是标配,这些我们都是有的,而且我们还有deadline,有了deadline才有激情,这个才是真理。任务分配好后,就撸起袖子开始干了!

“喂!哥们!这数据库的表字段是啥意思啊?有数据库设计文档吗?”,”文档,什么文档!我们没有,自己看数据库吧!“

“老大!订单这块需要考虑对账吗?”,“什么对账!先把订单功能完成再说,二期在考虑对账!(你懂得)”

“产品兄弟,这块逻辑要怎么处理?你这原型图上面反应不出来啊?”,“我来和你讲,这样这样这样就行了!文档后期再补,先上线!”

两个月过去了,明天是第一次联调的日子,“今晚和移动端的接口一定要调通,否则都不能回去!”老大发话了。消灭掉最后一个排骨,兄弟们把嘴巴擦干净,提枪上阵。

一个星期后,公司内部要做一次全流程演示,可目前线上签约还没通!那只能老鸟上场了,加班加点,核对签约服务商的每一行代码,排除前人留下的每一个bug,终于在演示前一天晚上11点整,流程跑通!老鸟的眼睛已经彻底红了,其他兄弟也都倒在桌子边,杀场一片狼藉。“为保证明天演示成功,今天在做最后一次全流程测试!测完通过就回家睡觉!”,领导这个时候又发话了。

上线日降临,全部技术人员严阵以待,配合发布会现场的演示,后台运营人员的协作有条不紊,截止下午发布会结束,系统运行正常,订单正常生成,流量稳定,压力平稳,整个流程走完闭环!

这种场面每个互联网公司几乎都有,只是惨烈程度不同而已!一个初入市场的互联网产品,总是以功能为主,架构、优化那是后期的事情,在deadline和市场的压力下,是可以理解的,但是,下面发生的事情,就无法同情了!

上线后,对于二期的工作重点,除了重构以外,功能性需求也增加了很多,这样导致下一次上线前重构时间被严重压缩;从市场实际反馈来看,一味的堆积功能并没有多大的益处,而平台如果不做大手术,随着用户增多,后期重构风险也越来越大;由于前期数据库设计不合理,带来的业务层无法有效隔离,导致业务逻辑混乱,很难理清和分辨,不利于后期业务流程的扩展;整个平台工程划分不精简,后端服务没有统一,平台工程组织不合理,公共组件抽象不够,业务抽象不够,重复组件太多,业务编码不规范等等问题是急需要解决的。

而更可怕的是,从产品到研发流程,也是不够清晰的,说好的产品文档呢?产品需求评审哪里有?架构设计评审和重要模块的代码评审都没人想起来。代码依旧是嗖嗖的写,连测试到发布居然还是人肉,我想这些都应该是技术负责人份内的事情!没有安排好,没有提高效率,自然就只能堆积人力去完成需求了!最诡异的是,任务的分配也是欠妥的,一个人可能同时做几个不相关的模块,而一个模块可能由几个人在做,工作量分配也是不够理想的,接口理解几乎靠嘴巴,没有规范合格的接口文档,二期其实大家都不是很忙!

在有限的时间内,我们把平台工程用maven进行了重构,合并了多余的工程,抽取部分公共组件和后端服务,并且用新的分布式服务化框架替换了原始的PRC服务调用方式,为以后的扩展打下了一定的基础,并在安全和在线管理上做了加强。但是数据库还是没有时间重构,内部重复代码和坏味道的代码没有时间去剥离!在发布流程上部署了jenkins,做到了测试和预发布环境的持续集成发布,生产环境扔需人肉!

任何一个产品的市场化过程,都是一个充满血淋淋的深刻教训的过程,但是意识到问题后不修复,是无法原谅的!

以上文字仅怀念几个月来一起加班的兄弟们!

2017/3/11

贵阳大数据

贵阳在推大数据,其目的是打造世界范围类领先的数据交易市场,“弯道超车”是政府提出的理念,写在巨大的广告牌上,就是要告诉老百姓,我们贵阳要搞大数据了。那我们看看超车的“车”到底是个什么车!

• 政策

政府的顶层设计,从大数据基础设施建设,到大数据应用发展,3 年 5 年计划都是有的,没记错的话,今年应该是规划中大数据应用发展的第一年。这几年贵阳市区多个高新区落地建成,对于高新技术企业的政策鼓励是一套套的,比如前几年,通过小微高新技术企业认证后,给 20W 补助,拿去随便花!一个朋友是做电脑配件的,对!你没有听错,拿到了!

如果是政府引进的企业,不但税收上面有优惠,办公场地也是有免费或者便宜提供,甚至,如果你用本地的的云上贵州的话,免费!我司都欠很多了,其实是可以一笔勾销的。你看政府都这么有诚意了,不就是想万众创业创新吗!数博会都开了两届了,影响还是很大的,最起码大家除了遵义会址之外知道了有个地方叫贵阳,在搞大数据!

• 企业

如果你去高新区服务大厅看下,就知道这几年在高新区这边注册的高新企业的上升比例有多大了;注册一个企业目前门槛很低,三证合一后,就没门槛了,但是要看企业注册后都干嘛了!

在本地做大数据,云计算基础设施的建设是根本,这块蛋糕,一般本地企业根本搞不定,技术门槛太高,所以象浪潮、太极这些与政府合作比较紧密的传统 IT 企业会拿到单子,当然也有其他外地企业也在做,他们会在本地开设新公司,做云计算,比如某某翼云,都几年了,貌似市场上没有看到实际使用,看到比较多的基本上就是领导来检查了,大屏前合个影,数据中心来个俯拍。云上贵州是真正意义上的政府推出的本地云计算,用的是阿里云的系统,当然是阉割版的,从政府层面要求所有企业的数据必须放在云上贵州,只要是政府支持的一些企业的应用,你的数据库,你的应用,你的文件都必须放在上面,这个是行政命令,但是问题来了,为啥我的应用放在云上贵州就慢死,而放在阿里云上就没有问题,为啥本地的网络经常出现 ping 不通的现象,所以我司是云上贵州一套系统,阿里云上一套,平时都是用的阿里云,即使是收费;网络上联通和电信都有,随时切换。

云在天上,看得见抓不着,在没有弄清这个概念的前提下,贵阳已经有了七多云,涉及多个专业领域。聚集数据,为民所用!但是数据从那里来,各个领域的数据特性又不同,很难聚集,想从贵州本地起到大数据带头作用,就更难,因为贵州的 IT 水平普遍较低,各个行业的信息系统本身就老化,数据获取成本很高。官方报道中的七多云如何如何,其实你懂的,实际数据没有多少,基于这些数据分析后有价值的信息更是很少!七多云这样,其他可想而知!

但是,有希望的是,创业公司象下过雨后的蘑菇一个个冒出来,不管是有毒的还是能吃的!各种孵化器的出现,也算一个标配吧!有总比没有好,撇开大数据这朵浮云不说,希望就在这些创业公司之中,说不定那天就诞生一个贵阳的阿里巴巴或者滴滴啥的!据说,有政策公务员都可以停薪留职出来创业,还给补助!

• IT 人才

这个没什么好说的,一个地区的 IT 水平通过当地程序员就可以看出来!平时接触到最多的就是一线程序员以及在各个公司里面担任技术管理岗位的一些人,一线程序员大致分两类,一类是本土成长起来的,毕业后,不管是通过实战还是培训,一直在本地工作,这类目前流动性最大,技术水平一般,做些基本的功能模块;还有一类是外地回来的,在一些大企业待过,比如华为、惠普等知名企业,或者在北上广一线城市工作过,实际工作能力较强,并且有一定的软件设计能力的,这类基本在某个企业里面担当主力开发的责任,做的好的可能就是技术负责人的职位,比如..... 当然不是我了!这种流动性较小,同是这种也是目前贵阳 it 企业的骨架,他们的技术选型和管理逼格决定了贵阳的 it 水准!接触过 4 个做 IT 管理的,各具特色,一个是程序员里面最能吹的,一个是苦苦寻觅创业公司,希望将来上市翻身的,一个是时刻追求 Googel、Facebook 风范的,一个是弄不明白该用那种数据库做互联网产品存储的!技术有高有低,逼格大小不同,总体来说,企业成就不了他们,他们也没能让企业扬名在外!

人才是根本,想要把大数据玩转,不能总是拿来主义,没有实际经过大数据项目锻炼的人才,想做数据交易、数据清洗等等,不就是吹牛逼吗?皇帝的新装,谁都不敢说破!外包的始终不是亲生的,谁包谁知道!基本的应用系统能顺畅做好,维护得当都很难,何况数据项目!自己培养需要时间,引进人才需要理由,山清水秀不够啊!

好在,这几年程序员的工资水涨船高,这是实实在在的,希望贵阳可以再接再厉,安全超车成功!

2016/11/10

纪念我的Blog

由于在 Linode 上面的 Blog 被黑,所有数据丢失,好在 15 年之前所有文章有备份,但是也失去了近一年的文章,实在惋惜。遂申请了 DigitalOcean,买了一台 vps,最低组合,每月大致 5 美元,先试用下,看看效果如何,目前来看,很稳定,部署了 2 个应用,速度都不错。

写 Blog 从 2012 年开始,坚持到现在,不易,并且还将继续坚持下去,当初也是为了练习 Rails,所以就写了个简单的 blog,但是至今已经没有精力在从头写一个完整的 Blog 程序了,于是 github 上找到了一个基于 JAVA 的开源 Blog,也是非常好用,无需额外数据库,一键部署,它就是Solo,非常感谢有这么好且易用的 Blog 程序,并且社区还挺完善!另外,也用了社区的另外一款产品,基于 JAVA 的技术社区产品symphony,为本地 it 从业人员搭建了一个线上讨论社区。

Blog 还将继续写下去,世界上只剩下这块地可以随意播种了!

2016/7/15

程序员不是资源

在我入行的时候,项目经理的Excel或Project里面经常看到我的名字,作为一个资源存在,随时供调配。这个起初还没有什么,但是某一天当我遇到一个烂掉渣的项目经理之后,就对这个越来越反感了。程序员的名字不应该仅仅是表格里面的一个资源,而是企业价值的实现者,没有企业员工你企业屁都不是。

通常一个公司在项目紧张的时候,程序员会面临加班赶进度,甚至熬夜的场景;由于市场环境和企业生存压力,可以理解,特别对于做项目的公司,客户从需求提出到上线,给你2个月时间,任性的要命。但是这种状况如果在一个公司是常态,程序员经常处于救火的状态,从一个项目到另外一个项目,不停切换,那就是公司的问题了。

程序员的劳动是一种较高强度的脑力密集型劳动,很难说将一个程序员放在什么地方,他就能产出多少的成果。一个好的程序员和一个差的程序员写出的程序,其性能,可读性,扩展性差几条街可能还找不到。如何让程序员自由发挥,产出超出预期的成果,是管理者的责任,也是一个好的技术管理者的衡量标准。在不停救火的状态下,程序员只能把你的功能实现,要说其他,那就算了吧!烂项目就是这么养成的,大家都是在自己的一定工作范围内把功能实现,否则老板会说你能力不行,还谈什么设计!还谈什么代码可读可维护!
几个具体建议:

给程序员提供一个宽敞的办公环境

有条件的话,可以提供较宽敞的办工桌和办公环境,不说什么人体工程学座椅,只要办工桌够大,办公室开阔,有思考问题的地方就行;没有条件也要创造条件。

倾听程序员的声音

项目到期完成不了,不是程序员的问题,是管理者的问题,如果能力不行,那么早开始你为什么看不出来,看出来了为什么不替换掉,不能替换为什么不重新调整工作计划;对进度把我不住,为什么不每天早会,每周周会进行进度调节;先听听程序员的说法,为什么没有完成,是几个项目同时进行,还是需求理解不透,还是技术遇到难点,作为管理者有没有及时发现问题,并帮助解决,见过烂的技术管理者,基本上只会责怪,只会催缴周报!

项目进度把控

虽然敏捷流行,但是一般公司也不会这个,但是你只要使用其中几个关键点就行,对项目也能进行把控,象上面说的早会,每个人说清楚自己昨天完成的事情和今天要做的事情,以及困难,这样项目进行中大家都能知道各自做的东西在整个项目中的作用;可以将每次迭代计划分配到人的每个任务写出来贴在墙上,精确到天,做完一个划掉一个,项目每个成员都看的清清楚楚,有压力的同时,动力自然也来了。

代码设计评审的重要性

相信现在阿里的代码也没能做到百分之百的评审后上线,但是这个不是你不进行代码设计评审的借口,特别是对于一个企业的核心系统,不然日积月累其结果就是,这个系统就是职业陷阱,谁接手谁离职!一次内部评审也就花个20分钟,说说思路就行,你说你没时间,你有没有想过你一天的工作效率多低,你一天真正集中写代码的时间也就三四个小时而已,其他时间被各种杂事占据,20分钟你也拿不出来。

让程序员承担起责任

不要让程序员只是作为一个功能的实现者,要让他们自己有能力的时候承担起一个系统来,人在被动接受任务的时候都会有种反抗心理,主动承担任务的时候,就截然相反了,对于有能力的程序员为什么不让他自己说了算呢!

团建的重要性

早前我在的一家公司,我所在的部门有个传统,每个季度都会有个大型的团建活动,把各个地方的员工一起聚在北京一起玩,让大家互相认识互相了解,潜移默化的就是以后工作起来大家比较默契,效率自然就高了。作为技术管理者,搞好搞活团建活动是个硬指标。
请听好了,程序员真的不是资源!

2015/12/20

Spring与SpringMVC的容器关系分析

Spring和SpringMVC作为Bean管理容器和MVC层的默认框架,已被众多WEB应用采用,而实际使用时,由于有了强大的注解功能,很多基于XML的配置方式已经被替代,但是在实际项目中,同时配置Spring和SpringMVC时会出现一些奇怪的异常,比如Bean被多次加载,多次实例化,或者依赖注入时,Bean不能被自动注入,但是明明你已经将该Bean注册了的。找原因还是要看问题的根源,我们从容器说起。
在Spring整体框架的核心概念中,容器是核心思想,就是用来管理Bean的整个生命周期的,而在一个项目中,容器不一定只有一个,Spring中可以包括多个容器,而且容器有上下层关系,目前最常见的一种场景就是在一个项目中引入Spring和SpringMVC这两个框架,其实就是2个容器,Spring是根容器,SpringMVC是其子容器,并且在Spring根容器中对于SpringMVC容器中的Bean是不可见的,而在SpringMVC容器中对于Spring根容器中的Bean是可见的,也就是子容器可以看见父容器中的注册的Bean,反之就不行。理解这点很重要,因为这是一个规则,是Spring自己设定的,但是往下看,我们会发现有些地方它并不默认使用这个规则。
当我们使用注解时,对于Bean注册这个功能的实现就不需要在给每个Bean配置XML了,只要使用统一的如下配置即可。

<context:component-scan base-package=“com.test" />

根据Spring提供的参考手册,该配置的功能是扫描默认包下的所有的@Component注解,并且自动注册到容器中,同时也扫描@Controller,@Service,@Respository这三个注解,他们是继承自@Component。
除了以上我们使用的扫描配置,在项目中我们经常见到的就是<context:annotation-config/>这个配置,其实有了以上的配置,这个是可以省略掉的。
还有一个SpringMVC相关的是<mvc:annotation-driven />配置,经过验证,这个是必须要配置的,因为它是和@RequestMapping结合使用的,这里补充下SpringMVC框架相关的知识点。

HandlerMapping,是SpringMVC中用来处理Request请求URL到具体Controller的,其自身也分成很多种类;
HandlerAdapter,是SpringMVC中用来处理具体请求映射到具体方法的,其自身也分很多种类;

@RequestMapping这个注解的主要目的就是对具体的Controller和方法进行注册,以方便HandlerMapping用来处理请求的映射。但是@RequestMapping需要结合<mvc:annotation-driven />使用才能生效。

好了,有了以上基础知识的铺垫,我们看下现在这样的一个使用场景中,Spring与SpringMVC的容器冲突的原因在那里!
Spring配置文件applicationContext.xml,SpringMVC配置文件applicationContext-MVC.xml,这样项目中就有2个容器了,配置方式A,如下:
applicationContext.xml中配置了<context:component-scan base-package=“com.test" />,负责所有需要注册的Bean的扫描工作,applicationContext-MVC.xml中配置<mvc:annotation-driven />,负责springMVC相关注解的使用,启动项目发现,springMVC失效,无法进行跳转,开启log的DEBUG级别进行调试,发现springMVC容器中的请求好像没有映射到具体controller中;

配置方式B,如下:
为了快速验证效果,将<context:component-scan base-package=“com.test" />扫描配置到applicationContext-MVC.xml中,重启后,验证成功,springMVC跳转有效。
要想查看具体原因,翻看源码,从springMVC的DispatcherServlet开始看,在一个请求进来之后,发生了什么?漫长的查看之后,找到原因,如下。
springMVC初始化时,会寻找所有当前容器中的所有@Controller注解的Bean,来确定其是否是一个handler,而当前容器springMVC中注册的Bean中并没有@Controller注解的,注意,上面提及的配置方式A,所有的@Controller配置的Bean都注册在Spring这个父容器中了,看代码。

protected void initHandlerMethods() {
    if (logger.isDebugEnabled()) {
        logger.debug("Looking for request mappings in application context: " + getApplicationContext());
    }
    String[] beanNames = (this.detectHandlerMethodsInAncestorContexts ?
            BeanFactoryUtils.beanNamesForTypeIncludingAncestors(getApplicationContext(), Object.class) :
            getApplicationContext().getBeanNamesForType(Object.class));
    for (String beanName : beanNames) {
        if (isHandler(getApplicationContext().getType(beanName))){
            detectHandlerMethods(beanName);
        }
    }
    handlerMethodsInitialized(getHandlerMethods());
}

在方法isHandler中会判断当前bean的注解是否是controller,代码如下:

protected boolean isHandler(Class<?> beanType) {
    return AnnotationUtils.findAnnotation(beanType, Controller.class) != null;
}

在配置方式B中,springMVC容器中包括了所有的@Controller注解的Bean,所以自然就能找到了。
以上是原因,解决办法是什么?注意看initHandlerMethods()方法中,detectHandlerMethodsInAncestorContexts这个Switch,它主要控制从那里获取容器中的bean,是否包括父容器,默认是不包括的。所以解决办法是有的,即在springMVC的配置文件中配置HandlerMapping的detectHandlerMethodsInAncestorContexts属性为true即可(这里需要根据具体项目看使用的是哪种HandlerMapping),让其检测父容器的bean。如下:

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
    <property name="detectHandlerMethodsInAncestorContexts">
        <value>true</value>
    </property>
</bean>

以上已经有了2种解决方案了,但在实际工程中,会包括很多配置,根据不同的业务模块来划分,所以我们一般思路是各负其责,明确边界,Spring根容器负责所有其他非controller的Bean的注册,而SpringMVC只负责controller相关的Bean的注册。第三种方案如下:

Spring容器配置,排除所有@controller的Bean

<context:component-scan base-package="com.fsnip.open">
    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

SpringMVC容器配置,让其只包括@controller的Bean

<context:component-scan base-package="com.fsnip.open" use-default-filters="false">
    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>

个人比较推荐第三种方案。引申一下,项目中使用事务的配置方案,也会在这种场景下失效,归根结底也是由于2个容器的可见性问题导致,可以结合具体问题按照上面的思路进行查找原因!

2015/12/1

中年随想

前段时间小学同学建了个微信群,大家居然还称呼我“小 xx”,得知我抽烟,也是觉得很稀奇的事情,可能印象还停留在小学阶段吧!因为我当时是全班年纪、个头最小的,可是现在我已经是一个 3 岁小孩的父亲了。
得知老家一个弟弟大学毕业后,也走上程序员这个行业,突然意识到我这个前浪已经被推到沙滩上了,只是还没有死掉!技术日新月异,新人层出不穷,我们能做的除了保持技术敏感以外,还要保留一颗积极向上的心。
几年前和大学班长喝茶,说了一句话,觉得挺对:毕业后前十年是技术和人脉积累,接下来十年是人生事业爆发期,利用技术和人脉获取最大价值;当然到底能能不能财富自由,看天!
在中国程序员行业里面,35 岁后到底多少人仍在继续写代码,不得而知,从第一代中国程序员求伯君开始,到现在大数据时代,也就 20 年不到的时间,很多 35 岁后技术管理岗位的,并不是不能写代码,而是资源的最大化利用,比程序员能创造更大价值。所以到底 30 岁后还能不能开始学习编程这种问题,根本就不是年龄的问题,而是你能不能坚持的问题。
人到中年,明白了年轻时理想是实现不了了,那就选择一个喜欢的行业,重新定义个理想也是切实可行的,不求改变世界,但求做出一点成绩,有点价值,也很美好!

2015/9/3

贵阳是这样的一座城

提示:此篇携带强烈的个人视角,身体不适者请绕道!

十多年前,我坐了43个小时的火车,踏上贵阳这片土地,发现马路上跑的不仅仅是汽车,还有马,排的不仅仅是废气,还有马粪。在这片土地上,你站在任何一个地方,比上海东方明珠的塔尖还高,据此我来之前,特意去了趟上海,只是没有爬上东方明珠的塔顶。道路拥挤,开门见“山”,空气清爽,云淡风轻,这是贵阳给我的第一印象。

夏天,在老家大部分时候闷热的连蚊子都懒得出来,而在这里,第一个晚上睡觉就需要盖被子;我呆的地方有一个美丽的名字 — 花溪(贵阳本地人把这个名字给读废了— 华期),果真是有花有溪的地方,花溪公园,夏天是个绝好的去处,我在这里爬过山,游过泳,吃过烧烤,谈过恋爱,除此之外,花溪这个地方没有多少高层建筑,相对于贵阳市其他几个区显得整洁许多,重要的是贵州最重要的几所大学就在这里。我工作的地方门前有条河,花溪河(现在改名十里河滩,到处都是卖鸡qiao(鸡屁股)的小贩,完全被破坏),河水清澈的难以置信,我们几个男同事夜晚经常去裸泳,畅游在山水之间--无非就是这样。

贵阳城,不大,据说位于贵山之南,由此得名。城市特点就是山,但是它“山”的没有重庆那么野,可是对于我这种平原地区长大的孩子还是不习惯,感觉拥挤(也许是被山包围的缘故),还有就是各种地下通道,防不胜防;城市道路狭小拥挤,占道经营,路面卫生状况非常糟糕;但也因为山,赋予这个城市另一种特色,郁郁葱葱,满眼的绿,林城是贵阳的另外一个名字,城如其名。在这个绿色的城市里最能体现这个特色的,就是位于城中心的黔灵公园,一个天然氧吧,更奇特的是黔灵山山顶有一面湖,青山环绕,美不胜收,公园里常年猴子出没,从没把游客当外人,不给吃的,就主动从游客手里自己拿。

古镇青岩,离贵阳城很近,几十分钟的车程,是贵阳市民周末游的好去处,最爱吃的青岩卤猪脚加冰粉,绝配;宋城墙和高大的牌坊,以及那些被脚步和雨水磨光发亮的石板街是吸引游客的最大亮点。

贵阳城最大的特色不是白天,而是晚上10点以后的夜生活,出了名的合群路夜市,吃客人头攒动,各种娱乐场所,更是人们趋之若鹜的地方,吃喝玩乐是大部分年轻人向往的生活方式,消费才是这座城市的主题。贵阳有句谚语:地无三里平,天无三日晴,人无三两银,最后一句形容的就是人们消费观念非常超前,但是不劳动,不发展,光靠消费观念超前,到最后就只能喝西北风。还有一句话是这么说的,贵阳城有100万人口,其中20万在工作,其他80万在麻将馆;虽然夸张了点,但也反映出贵阳人民劳动积极性有多落后,特别是年轻人,找个差不多的工作,打打麻将,月月光就比较安逸了,在我接触到的年轻人中,能积极上进,居安思危的少之又少,简直就是屈指可数。举个极端的例子,以前一个同事,毕业后在同一个单位里面一直待到现在,即使原单位已经倒闭,现在还跟着原单位老板后面,不晓得一个年轻人要把青春糟蹋成什么样子,才能有一点自己的理想。

自己所在的IT圈子,本地的软件公司绝大部分属于小作坊,接到单子就挣点,技术积累和行业前瞻无从谈起,外地成规模的公司在本地一般都是接到电信、电力这些国企大单子,才会在本地设立分公司,使用总公司开发好的产品,然后招些本地的实施人员,进行后期维护,这种方式对本地软件人才的培养也起不到多大作用。贵阳唯一一家上市公司,作为政府重点扶持的IT高新技术公司,对贵州整个IT行业,并没有起到多大的带头作用,这里的原因据了解也是多方面的,当地政府拿上市公司作为招牌,为提高自己政绩完全不顾市场,而公司的发展也受限于政府等因素,不能独立自主发展。大环境的影响,导致优秀人才的离开也是再正常不过的了。
但是近年来,随着贵阳政府主导的大数据与云计算产业的发展,已经有一批较大的企业来本地投资发展,像惠普,富士康等,同时也涌现了一批以大数据为核心概念的企业,分别在自己的行业内深耕细作,基于本地生活同样也出现了很多小型的互联网创业公司,在政府大力扶持的背景下,一幅欣欣向荣的场景。虽然我个人对这种概念的炒作持保守态度,但还是希望有那么一两个企业能够脚踏实地,突出重围,繁荣贵阳的IT圈。我自己所在的食品安全行业是贵州七朵云之一,也是最靠谱,最有干货的一朵云,希望能做出一些有意义的事情。

2015/6/15

什么才是优秀的团队

头头

一个组织不管大小,都需要一个头头,否则主意多了不能统一,有问题了无人裁决,无人保护(损害)团队成员的利益。那么凭什么让你当头头?你来公司比我早!你技术比我牛逼!你有领导魅力!或你是大BOSS家亲戚!总之要有突出的点你才能当团队的头头。
一个优秀的团队头头是什么样子?我想首先要保证能和成员沟通顺畅,太有性格,或者缺乏基本沟通能力的,很难胜任!在此基础之上,任意发挥了。我初入江湖,遇到一领导,人称少勤,吸引我的就是人格,一个中年男性的魅力在他身上完美诠释,待人接物,遇事坦然,这些品质让我们这些社会新鲜人受用终身。如果是纯技术团队,那么做为头头,技术能力是必要条件。遇到过一些领导,幽默型的,圆滑型的,魅力型的都有,这些都是个人特色,都是加分项,但基本的还是这些。
沟通顺畅,不随意强加价值观,尊重团队成员,理解大家的劳动价值
这些是优秀团队头头的基本要求,如果你再能为大家争取一些合理利益的话,跳槽后肯定还会记得你的。头头千万不能把自己当领导看,要接地气,不然迟早摔下来。

成员

在招聘成员进团队的时候,在满足岗位技能要求的前提下,我觉得最看重的应该是做事风格和个人性格。大家以后都要一起共事,你说话总是咄咄逼人,本领在高超,没有团队的力量,事情也很难做成。遇到一位兄弟,本来一个功能很简单,使用平台现有的技术框架实现so easy,可偏偏抽象再抽象,抽象了好几层,导致主要功能不能按时开发完成,且同事理解起来也困难,后期这部分代码的维护可想而知;还有一位,能力一般,与人沟通时总是语气强烈,毫不谦虚,我们说程序员要低调,是有道理的,冷不丁你的小伙伴说不定就是一位世外高人。也遇到一些极好的同事,我初入一家it公司时,师傅带我,有次我在外地半夜上线失败,师傅夜里打车去公司帮我解决问题,实在是难得,而且学到了勇于承担责任这种优秀的品质。也遇到一些技术牛人,发现越牛越谦虚,总是乐于助人,遇到这些同事也算是福气了!
成为优秀团队
优秀的团队总是能够出色的完成公司交付的任务,给公司创造价值,并且团队成员自身也得到成长。优秀团队的头头能把合适的任务交给合适的人,发挥每个团队成员的潜力,并且使他们成长;优秀团队的头头能使团队成员积极主动,主动解决问题,而不是一味被动接受;优秀团队的头头能够打破团队成员之间的隔阂,明确团队整体目标,时刻提醒,每个人的行为要为团队负责;优秀团队的头头也能为团队争取最大利益。优秀团队的成员能勇于承担责任,压力下做事不慌乱,能及时总结,吸取教训,实现自身成长。优秀团队的成员之间能相互理解和帮助,气氛融洽。

如果有幸你在这个优秀的团队中,请好好珍惜!

2015/6/12

如何在帝都混技术会议

说来惭愧,在帝都几年,参加过一些技术会议 (台下站着听的那种类型),都没花过钱;有时会议是免费,有时是公司出钱,有时是自己刷脸,最后就是混了,反正是没出过银子。

帝都人才济济,大小 IT 公司林立,IT 相关媒体也很活跃,CSDN算是一个老牌的 IT 媒体,把 robbin 的 javaeye 并过来之后,显得更加庞大了,什么都做,也好像什么都没做;最近几年的infoQ,号称关注企业级开发领域,不过这个口号早就没了,现在以开各种技术类型大会挣钱,还挣的相当有成绩;而开源是 IT 界目前最流行的话题,相关的开源会议也满地开花,像OSC源创会等,除了这些比较大的媒体组织的会议,还有一些是程序员们或者企业自发组织的各类型会议,比如ruby大会,在 3w 咖啡馆,或者其他场所举行的不定期的 meetup,不一而足。

这些会议,对于所有参与者来说各取其利,站在台上的,讲技术,道情怀,给公司做广告,顺便把自己的脸也给刷了,技术吗!说说就行,不要完全相信;站在台下的,仰视大公司里面大牛的风采,重点在于学习各种技术 ppt,拼命的用手机狂拍,会后能与大牛们交流一二,也算不错了;站在场外的,就是各种 it 大小公司,技术图书出版社等等,使出浑身招数,美女,扫码送礼物等手段来广而告之;而最后对于主办方来说,即收了门票钱,也结识了很多 IT 界牛人,以后开会也好再请他们来。

作为一个站在台下的参会者,那么问题来了?如何才能免费参加?

根据个人经验,首先选择免费的会议参加,这种会议只要人去就行,说不定还有免费咖啡喝,也能接触一些 it 公司和人,说不定还能找到一份工作,其次如果要是公司出钱的话,也就没的说了,中午的免费午餐要多吃点,如果这些条件都不具备的话,那就看看会议里面的主持人你认识不,如果有个把你认识的,那就好办,托个人情,借牌子用下,就进去了,最后一招就是混进去,一般这种大型的会议都会开两天,第一天肯定很严,各个分会场门口都有主办方的同学在把手,你很难进去,会查胸牌,你可以观察下,如果那个小妹妹上厕所了,你就溜进去吧!没人怪你,我们是来学习的,如果实在是把手森严,就第二天来吧,一般第二天就很松懈了,你随便进!至于中餐,既然你都无需门票了,那就别指望了,出门左转麦当劳吧!

技术会议还是要参加一些,可以见识一下其他公司使用的技术,或者某个特定场景下如何选择某个技术,有时候还是非常有启发性的,当然,我觉得,如果要学习技术,还是看这些大牛们写的 blog,或者系统的看书才好!

这张照片是前不久在全球架构师峰会上拍的棒棒糖!

2015/3/28