[翻译]Top 5 trends and technologies in software development

March 5th, 2010 No comments

不翻译了,有兴趣自己看原文,地址:http://blog.mostof.it/top-5-trends-in-software-development
在目前多变的软件开发的世界中,保持对当前技术,方法,趋势的了解是极其重要的. 但这不是那么容易就能做到的,简单的,不是每个人在工作和生活的同时还拥有足够的时间学习这些新玩意. 因此选择是关键,巧妙的选择一些进行学习,这样就不会错过一些重要的东西,而且也可以让我们远离那些垃圾或不重要的趋势.
我写了这篇文章列举了一些小的甚至不完整的事项, 我觉的这些是我要关心和实践的. 有些可能已经陈旧的,但是还没有充分的掌握.

1: Learn and use a modern scripting language
学习并使用一种现代的脚本语言,如:Ruby,Python,Groovy

2: Learn thogoughly and embrace the philosophy of a modern version control system
学习,拥抱现在代版本可控制的理念,如:svn,cvs

3: Be familiar with NoSQL solutions like MongoDB, CouchDB
熟悉NoSql的方案,如MongoDB,CouchDB

4: Learn a functional language – or more than one
学一些功能性的语言,如:Erlang

5: Study agile methods and concepts
学习敏捷开发的方法和思想,如:
TDD-Test Driven Development 测试驱动开发
iteration-based development 迭代开发
BDD-Behavior Driven Development 行为驱动开发
XP-Extreme Programmingn 极限编程
CI- Continuous Integration 持续集成
Scrum

Categories: translation Tags:

[翻译]On the road to being a better developer

March 5th, 2010 No comments

[翻译]On the road to being a better developer
原文地址:http://blog.mostof.it/being-a-better-developer
每个人都想在其所在的岗位上做的出色,这是人类的本性,这就是为什么我们会成长. 关键是持续不断的提升,不因小的失败和过程中的起起落落而失望. 在过去的10年中,我作为一个开发者,我认为我已经学到很多有价值的经验,许多是可以应用到生活和工作的其他领域. 现在我将与你分享我的经验.
以下没有特定的顺序:
Lesson #1-See the big picture(关注大局)
在细节上容易迷失方向,专注于小事而丢掉了重点和方向. 整体总是超出它的所有部分的总和. 即使你是个刚入行的程序员,尽量关注项目的其他方面,如,商业,沟通,尽可能的多的方面. 当你把这个工作作为你的专业时,编码是欧莱雅艺术而艺术不再欧莱雅 – 它有一个理由,一个目标。我们的目标绝对不是’完成编码任务’. 它是和在敏捷开发中的”done done”的概念是同一个事情,即:一个项目只有经过了测试,被人认可,健康的,再经过压力测试和回归测试后才算完结. 最后的测试应该较少的注重技术方面,而应该把更多的精力关注与操作,利益,品牌建设和客户满意度. 在这样的方式下获得成功,你的视野中必须始终拥有项目的全局目标.

Lesson #2-Take your time(慢慢来)
这听起来是容易,自然的,但是这通常是很困难的,当deadline逼近的时候. 不要追求速度,速度会带来重点的丢失和疏忽,制造bugs. 在后期你要花费大量的时间,精力及情绪. 速度自然而然的来自于好的设计和架构的选择及解决方案,另外加上经验和熟练程度. 这些事你不可能在匆忙中得到. 请注意,它已无关懒惰或者挑灯夜战,那些都是坏习惯.

Lesson #3-When things go wrong, be ready for a paradigm shift(当出乱子的时候,做好转变的准备)
这也需要时间和经验,但这是宝贵的东西. 当目前的技术和方案变得缓慢或不可用时,你应该停止用旧的方式解决新问题,应该寻找替代方案. 近期的NoSql运动就是这样一个例子(什么是NoSql?如:google的bigtable, apache的hadoop). 但是当旧的方案被证明还是有用的时候,不要用目前炒作的,流行的lib或软件. 假如你的好的旧的关系型数据可以很好解决你的问题,那么就没有理由使用NoSql服务. 同样的对于函数式语言,如果只是因为你可以有一个更完美的解决方案的话,就不要在你的代码库里引入新的语言. 从另一面来说,你的面向对象的方式不能自然的,不能有效的解决你的问题,那么去找一个功能性的方法. 为此,保持对新趋势的了解,阅读一些新技术的文章,至少每周一次.

Lesson #4-Keep your brain trained(保持大脑思维能力)
不要满足于日常的工作,做一些额外的训练. 可以到codegolf或Eler项目的网站上找一些问题,想出尽可能多的解决方案,然后比较他们. 也可以练习算术,特别是状态,图形和集合的理论. 当你遇到一些复杂的算法问题,他们可以真正拯救你. 作为一个开发者不要在下班后就停止与其相关的事- 这是一种生活方式. 很多好的点子往往是从生活中来的.

Lesson #5-Have/get a life(享受生活)
这可能是最重要的. 年青的爱好者看起来像编码的神(指他们精力充沛),但是火可以快速烧尽. 如果没有适当的休息和意志,你不可能长期从事此职业. 在做好本职工作的情况下尽量少加班,与项目管理者适当的搞好关系, 可以适当的规划. 睡觉,睡觉,睡觉. 有些时候通宵一两个晚上是必然的, 但要小心因为这容易形成一种模式-你的大脑需要休息. 即使睡眠减少你也不会得到更多. 多与人交往,拥有家庭和朋友可以得到更多的快乐, 你的大脑也需要各样的思考.

Lesson #6-Focus(专注)
同一个时间专注于一个事情(不能丢了大局). 尽可能的避免多工作业. 有些时候,在你的工作环境下,单工作业是不大可能的,多个任务在你的大脑中有同样的权重,如同在并发编程中:任务的切换对大脑也是相当堵塞乏味. 你失去了专注点和灵感,并且需要花很多时间去找回他们.

Lesson #7-Be persistent(坚持)
在失败的时候不要放弃. 不断尝试. 你会在你的错误中学到更多,而不是在你的成功故事里. 假如经历了很多次失败后,可以尝试其他的方式解决问题,这和Lesson 3有点关联. 相信我,在大多数的情况下你花了时间就可以找到正确的方法. 不要害怕或者羞于向别人请教-一个新人看待一个问题如同在做奇迹,而老人则不然.

Lesson #8-Measure(衡量)
衡量你可能衡量的任何事情. 不要只”想着”你的方案是最好的. 不要假设,不要太自我. 哪个色彩方案能够吸引更多的用户注册呢?做一下A/B测试,你就会知道. 人类的判断和预测是不准的. 有时候你会对估计和实际的巨大偏差感到惊奇.

Lesson #9-Don’t focus on code performance(不要专注于代码性能)
大多数的情况下,这是不着边际的. 不要花两天或更多的时间优化一个页面的性能,从加载一次550ms变成500ms. 这是不值得的. 你的用户感受不到这样的差异,而你却浪费了宝贵的时间,你应该接着做下一件事. 事实上代码中有些更为重要的因素如:清晰,简单,优雅.

Lesson #10-Be ready to chop off features(准备好砍掉功能)
有些时候,你肯定无法在指定的时间内完成任务. 那么就要准备作出一些牺牲,根据重要性原则重排你的功能,至少砍掉一个重要功能. 然后你可以重新安排时间,完成剩余的功能. 不要认为做不到. 我们的工作就是这样.

Lesson #11-Have ‘coding standards’(编码规范)
即使你不在一个团队中,也要尽量的保持一致. 虽然编码规范是一个可以并且需要发展的标准列表,然而还是一直要尽量的保持一致. 这可以为你和你的团队节省很多时间.

Lesson #12-Test(测试)
要把测试当然工作和计划的一部分,而不是那些乏味的额外工作. 花一些时间做一些适当的测试. 在多个层测试(如:数据层,商业逻辑层,表现层). 坚持不断的做测试,但更重要的是做单元测试. 很多人从事测试. 手头也有很多测试工具-测试服务器,测试软件,如:RSpec,Cucumber,PhpUnit等等.

Lesson #13-Usability(可用性)
当你在做UI的开发的时候,最重要的原则是保持可用性. 这是困难的,我们都有这样的意识,但是作为一个开发者永远不可能和真实的使用者理解一致. 这是事实,做一些实物模式,设计图展示给更多的人,特别是你的最终用户. 接受批评,这是过程的一部分,而不是对你的羞辱.

Categories: translation Tags: ,

一段btrace代码

February 21st, 2010 No comments

最近想要优化一下本地cache,不知道数据的使用情况,故写了一个btrace脚本来做分析,也可以顺便熟悉一下强大的btrace
btrace目前已经到了1.0,可以从下面的地址下载:
https://btrace.dev.java.net/files/documents/8510/135506/btrace-bin.tar.gz

以下是今天写的btrace脚本:

import java.util.Map;
 
import com.sun.btrace.BTraceUtils;
import com.sun.btrace.annotations.BTrace;
import com.sun.btrace.annotations.OnEvent;
import com.sun.btrace.annotations.OnMethod;
import com.sun.btrace.annotations.OnTimer;
import com.sun.btrace.annotations.Property;
 
/**
 * @author chua 2010-2-20 16:36:44
 */
@BTrace
public class CacheProbe {
 
    @Property
    private static Map map = BTraceUtils.newHashMap();
 
    @OnMethod(
        clazz = "com.meichua.sample.model.Cache", 
        method = "/getAllAttributes|getAllLocators/"
    )
    public static void visitCategory() {
        if (!BTraceUtils.containsKey(map, "category")) {
            BTraceUtils.put(map, "category", "yes");
        }
    }
 
    @OnMethod(clazz = "com.meichua.sample.model.Cache", method = "/getAreaMap|getAreaTree/")
    public static void visitArea() {
        if (!BTraceUtils.containsKey(map, "area")) {
            BTraceUtils.put(map, "area", "yes");
        }
    }
 
    .
    .
    .
 
    @OnEvent
    public static void onEvent() {
        BTraceUtils.println("BTrace probe will print the used original data:");
        BTraceUtils.printMap(map);
        BTraceUtils.println("BTrace program exits!");
        BTraceUtils.exit();
    } 
 
    @OnTimer(1000*60*5)
    public static void ontimer() {
        BTraceUtils.println("--------------------------------------:");
        BTraceUtils.printMap(map);
    }
 
}

@BTrace 这个annotation表明这个类是个btrace的脚本
@Property 这个annotation标注的field是可以在JMX client中,如jconsole中可以看到
@OnMethod 这个annotation标注要监控的类中的方法,我的例子中,是一个正则表达式,当然还可以是更复杂的正则表达式
@OnEvent 这个annotation表明事件处理时,打印map中的内容,这个事件,可以在运行btrace脚本的控制台中用ctrl+c,再选择2触发
@OnTimer 这个annotation是一个定时器,有定义的时间触发一次执行,打印map内容,时间单位是毫秒

另外: map的创建,操作,打印必须有BTraceUtils的方法创建,在一个事件中,不能调用任何自己写的方法
运行: btrace <pid> CacheProbe.java

Categories: base Tags: , , , , ,

搬砖 砌墙 盖教堂

January 26th, 2010 No comments

有一个人经过一个工地,看到一群建筑工人正在忙碌地工作着。于是,他凑上前去,问一个工人:“你在干什么?

那人没好气地答道:“你没看见我正在搬砖头吗?”

[这是个悲观主义者,为了生活而生活着,是地地道道的生活苦役。他只知道周而复始地机械地劳作,觉得前途暗淡、渺茫,当下的辛苦让他看不到朗朗的天空;更看不到光明的未来。]

第二个人平和地说:“我在砌墙。”

[这是个职业主义者,他看到的是局部的成品,坚守职业的底线。他没有看到劳作的目标,也就是说他只是有着孔子所说的“君子不器”中“器”的境界。(其实,人应该博学而放眼,广泛地涉猎各种知识,培养各种才能,才不会像器物一样,只能作有限目的之使用;应有宽广的胸襟来看待万事万物,气度应似江海纳百川,才不会像器物一般有容量之限制;待人处事时,不应像器物一般定型而一成不变,而应适时适地适人适事地采取合宜之行动。)]

第三个人说:“我在盖教堂。”

[第三个人目光透露出祥和的光芒,是个理想主义者。他的每一块砖、每一滴汗都是为梦想而歌,是为了一个伟大的梦想,正走着从自我脚下到崇高理想的一个艰难历程。他目光深邃,高瞻远瞩,正在努力为远大的理想而付出,他的付出是为了最终成就最为崇高的理想。]

———————————————————————
其实工作很多年了,没多大成绩,或许是我们没有明确的目标所致.

Categories: base Tags: , ,

香港印象

January 20th, 2010 No comments

上周末去了趟香港,办了点事,顺便逛了逛.
从深圳过关后就算是到了香港了,买了八达通卡,坐上港铁,一路前行,心中没有那种激动的感觉,很平常,以前总认为那是个令人向往的地方, 从小看着港片长大的, 也许心中有那么点点好奇. 港铁大概40分钟的样子,其中转了一趟车,我来到了油麻地预先订好的酒店,当然也是找了一会的,在那种小巷子里,400一晚的酒店在国内算不错了吧,在香港就是一个落脚地,10平方的样子,不过物品还算齐全. 破旧的房子,灰暗的街道. 人很多,特多,感觉拥挤. 到的时候已经是晚上了,酒店门口有一小吃店,长长的队伍,3,4十人排队,那小店吃啥没看清楚,对面又有很对人,在等牛杂. 在小巷里花了30港币左右吃了一个咖喱牛肉饭,味道还行. 步行10分钟到了旺角,找到办事的地方,顺便逛了下. 我没有去港岛不知道那些的情况,应该比九龙繁华,富丽很多吧. 旺角,油麻地,尖沙咀这三个地方差不多. 人多,街道拥挤,可以用破旧来形容. 但弥敦道车水马龙,绝对热闹. 旺角很多电器的商店,另外买鞋子,卖衣服的,有条路上到处是nike和adidas. 尖沙咀也是,很多卖衣服,鞋子的. 那些nike和adidas的鞋子,数码产品,免税点里的化妆品比国内便宜. 是个扫货的地方.
香港人的国语很差,基本上都不能标准发音. 到是经常看到店里的服务员能说上几句流利的英语,但是说国语就马马虎虎了. 但是无论是街边小店,还是百货商店,服务绝对到位. 我想那是第三产业发达地方的特征.
这几天香港最大的新闻是啥呢?当然不是我到香港游了,哈哈. 是珠三角高铁. 香港有部分反对,有部分支持, 闹着. 还有人放话要公投, 哈哈, 基本法里没有规定,香港人能公投决定事情, 这我就要说香港人了, 那些反对的人被自私淹没. 港人也是中国人. 要从大局想想,另外高铁建成后对香港未必有坏处.
2天时间,逛香港时间短了点,连逛街的时候都不够,更别说游玩了. 总是在匆匆中到那里赶到那里. 幸好香港比较少,搭上地铁坐个几站,下车后再步行几分钟就能到你想去的地方. 另外打了一次的士,10分钟左右的路程,花了40多港币,还是比较贵的. 这次去时间少了点,下次去逛逛港岛吧.

Categories: life Tags: