- 博客(42)
- 收藏
- 关注
原创 物联网: 深圳创客活动亲历之现状
2016年3月,本人有机会在深圳盘桓多日,亲身小小体验了硬件硅谷当下风行一时的创客风潮。以下为本人有幸探访的几个创客热点对象。管窥之见,难免失之偏颇。不当之处,欢迎方家斧正。华强创客中心更像是个软件创业孵化器。场内基本看不到正在搭拆东西的创客;倒是有不少对着电脑苦思冥想的码农。场地条件不错;惜乎缺乏真正的创客。华强拿得出手的创客产品,就是好久以前做的WISHBONE宝宝测温仪。
2016-04-02 22:09:31
841
原创 软件开发管理: 编码规范(coding style)
编码规范(coding style)是与语言有关的,适合本部门情况的,详细代码书写格式说明,包括代码范例。编码规范,听起来是个鸡毛蒜皮的小事,实际上,它向所有写代码的团队成员表明了团队对于代码质量和代码可读性,是非常严肃的。每个团队都应该有一个不断维护着的编码规范,确保所有团队成员都熟悉规范的条例。
2016-03-23 12:14:52
778
原创 物联网 :概念
物联网这个名字取得好,准确体现了它的三个组成层次:物,是物体,设备;联,这些设备通过某种形式联接到外部系统,不是独立作用;网,那就是互联网和基于互联网的特定服务。物联网实际上就是物体的互联网(Internet of Things)。今天我们熟知的互联网,实际上是信息的互联网,其连接终端(信息的产生/消费端点),一般是电脑、平板电脑、手机。物联网的终端(神经末
2016-03-23 11:58:10
631
原创 软件开发技术:相互学习
每个程序员都希望提高自己的开发水平。每个程序员都希望自己的任务及时而高质量地完成。当自己力又有不能及时,最好的办法是求助于他人,向同事学习。如何让他人愿意花时间来帮你,这就是一个关键问题。你有没有什么回报,比如在你的专长领域帮助别人,或用其它形式补偿别人。首先,不能保守自私,要经常与同事共享新知识新发现;其次,要经常表扬他人,鼓励他人继续帮助别人;再次,要有意识地形成团队气氛,让大家感觉到帮助
2016-02-29 16:05:46
418
原创 软件开发技术:开源软件(open source)
开源软件是任何一个程序的软件工程师都无法避免的一个存在。开源运动方兴未艾,涵盖越来越多的领域。如果你的工作环境容许使用开源软件,那么恭喜你,你有机会利用全世界成千上万其它程序员的成果。如果你共享了你的改进代码,你的贡献反过来改进了开源软件,使其它程序员受益。在公司允许的条件下,在设计和实现一个软件项目时,并花些功夫搜寻/评估有关开源软件,是很有益处的。如果有可能,应尽量使用开源软件;如果有
2016-02-28 09:18:19
1101
原创 软件开发技术:过度设计
很多时候,我们都会听到有人评论说某段代码是过度设计。过度设计,就是把可以更简单实现的事情弄得没有必要的复杂,或者是具备暂时甚至永远不需要的功能。过度设计的评价有时会很伤程序员的自尊。但是,在很多时候,避免过度设计有它有意义的一面,使我们不写不必要的代码。克服过度设计的最佳办法,就是严格按照场景需求来完成功能,不要画蛇添足。
2016-02-27 09:22:49
951
原创 软件开发技术:设计模式
设计模式经"四人帮"的经典名著推广后,为广大程序员广泛接受。很多人非常热衷于学习并应用这些模式,有意识地在程序中使用或套用到各种场景,很多时候相当生搬硬套。这并不是运用设计模式的最佳方法。我的经验是运用设计模式开发软件,要自然而贴切地融入其场景,连择模式的各子系统自然地对应其场景的某个行为,而且以场景要求命名而非设计模式书本中的标准命名。这样,能防止生搬硬套地滥用设计模式。
2016-02-26 09:10:10
349
原创 软件开发技术:基于浏览器的集成测试
selenium 开源测试框架系统支持多种浏览器如Firefox, chrome, internet explorer等。测试自动化,如按钮,文本框输入,页面跳转。可以验证类似浏览器内置的对象结构。
2016-02-25 07:58:56
427
原创 软件开发技术:测试替身(mocker )
不会拔毫毛变小猴子的行者,不是好行者;不会用替身做单元测试的程序员,不是好程序员。单元测试的核心技术是替身(mock )。可以手工写一个专用于特定测试用例的替身派生类。但是,基于透明代理技术的替身能让你事半功倍。基本上各种语言,甚至包括C++语言, 都有开源的替身框架,提供基于透明代理的替身生成技术。代码的可测试性要求依赖子系统的接口设计大量使用抽象和虚拟修饰,以便替生派生接口的生成。一个
2016-02-24 08:24:25
1338
原创 软件开发技术:单元测试
单元测试是程序质量保证的第一道关口,最简单也最有效。软件的绝大部分,是由单元测试来覆盖的。根据经验。95%以上的测试用例,应该是单元测试。单元测试,应该由程序员来完成。单元测试应该百分之百自动化。与低开销的单元测试相比,高开销的系统测试和集成测试仅需实现最关键的少数场景。
2016-02-23 09:33:03
388
原创 软件开发技术:测试驱动开发TDD
test driven development 是一种软件开发方法,强调以测试用例来定义功能行为,引导代码编写。整个过程一般是"红绿"模式;红是指测试用例测试失败(因为功能尚未实现), 功能实现后,测试用例测试成功,这是绿。TDD 的功能实现也有讲究。一般地,以最小花销,最简代码(有时甚至用常量替代)实现而使测试用例(暂时)通过。该最简方式能保证我们的代码没有多余部分。当引入新的功能增加新
2016-02-22 09:17:52
336
原创 软件开发技术:测试覆盖率(coverage)
测试的目的,是确保软件开发的质量,是发现(防止)软件错误。追求所谓的百分之百测试覆盖,并不能保证软件无缺陷。首先,许多软件错误源于需求理解错误;其次,既使百分之百测试覆盖也不能检测到所有的代码错误,比如多条件组合;还有,许多很简单的代码如getter / setter, 没有必要特别测试。单元测试可以检测出大多数比较孤立的软件错误。集成和系统测试关注于子系统之间的行为。测试覆盖率在单元测试上有
2016-02-21 10:33:21
701
原创 软件开发技术:软件测试
软件测试是现代软件开发必不可少的一个部分。按测试方式,有人工测试,自动测试。按测试范围,有单元测试,集成测试,系统测试,验收测试。按测试目的,有回归(regression )测试,签入测试,用户体验测试,压力测试,性能测试和配置测试。还有冒烟(smoke )测试,粗验(sanity )测试,等等。冒烟测试是一个俚语,指极少数非常简单而又能验证关键功能的测试集合,就象狼烟一样能示警。粗验测试多数
2016-02-20 10:30:15
447
原创 软件开发技术:国际化(globalization )
如果你的潜在客户可能来自其它国家,代码的国际化就是一个必须适当处理的问题。源代码的大部是编程语言语法认可的关键词,操作符等。源代码使用的自定义变量/函数/类/名字空间等,应避免使用非英文字母。需要注意国际化的,是代码使用的文本资源,文字格式,货币/日期格式。文本资源尽量采用UNICODE 编码方式。格式化字符串/货币/日期时,要区分用户显示有关或无关情况。若与用户显示有关,应按照用户选
2016-02-19 09:58:33
780
原创 软件开发技术:流畅表达(fluent style)
也称为fluid coding, fluent programming,是增强代码可读性的代码设计技术,代码读起来比较自然流畅。其设计要点是函数返回有关类型,从而使多个函数调用前后链接, 阅读代码(省略点号)形似普通的口语句式。参见:fluent interface http://www.raychase.net/263fluent programming http://sta
2016-02-18 08:44:33
1022
原创 软件开发技术:松藕合(loose coupling)
也称低藕合。藕合度是度量一个代码单元在使用时与其他单元的关系。最理想,最松散的耦合,是一个单元无需其他代码单元特别的配合而可以使用。松藕合一般与高内聚相关。具备高内聚性的代码单元,一般都比较松藕合。通常,觉得一个代码单元和其他单元纠缠不清,特别难用,特别难以用对,很可能是藕合度过高。
2016-02-17 09:32:56
2268
原创 软件开发技术: 高内聚(high cohesion)
高内聚是指代码只完成一个定义清晰的任务。对函数,高内聚是一个函数只完成一个运算逻辑;对于类,高内聚就是一个类只完成此一个业务逻辑;对于库和包,高内聚是只对应一个业务领域。实际上,高内聚只是单一责任原则的另一种表述。具备高内聚的代码,易读,易于重用,易于测试,易于维护。
2016-02-16 09:18:59
1551
原创 软件开发技术:PRISM
P perform 较好效率。比如尽量使用const 修饰,i + 1 用i++(++i )代替。注意不要过于追求代码运算效率而影响代码可读性。R reliability 较高可靠。代码不仅能处理正常的输入,也可以处理正常之外的输入(返回错误代码,或抛出异常)。I intention 表达清晰。代码易读易懂,表达自然流畅,无需注释。S security 较高安全。避免使用有
2016-02-15 09:58:42
341
原创 软件开发技术:YAGNI
YAGNI 是 you aren't gonna need it 的首字母缩写,你可能不需要这个(功能/设计/实现)。在设计或者实现一个系统时,程序员可能意识到将来有可能需要一些新功能,从而在目前的设计或实现中预留下接口,甚至写出额外的代码。虽然出于好意,但是结局不会太好。目前(隐约地)觉得可能需要的,随着对用户需求和系统行为理解的深化,最终不需要或者以某种其它方式需要;目前所预留的会用不上。
2016-02-14 10:15:54
421
原创 软件开发技术:DRY
DRY 是Don't Repeat Yourself 的首字母缩写。说话别啰嗦,写代码也别重复地复制粘贴,把同样的代码东拷西拷。好的设计与实现,代码高度重用,鲜见重复代码片段。重复的代码,实质上是不良设计的体现。通常应考虑增加一个基类函数或一个辅类,把重复的代码移入,消除冗余代码。也可以考虑应用模板(或GENERIC)类或函数。
2016-02-13 10:00:26
348
原创 软件开发技术:代码之可读
有一类程序员,他们的代码写的非常"聪明",但不易读懂。还有一种程序员,他们的代码写得特别好懂。应该尽量的向第二种程序员学习,写出易读易懂代码。因为代码会被维护者读很多很多次。怎样才能写出易读的代码? 首先,代码要能清晰地表达意图。其次,代码体不宜过大,一般函数不应超过四十行,类体不超过二百行。类/函数/变量的命名尤其重要,要能洽当地融入上下文中,整个代码读起来相当通顺自然。
2016-02-12 08:50:58
335
原创 软件开发技术:轻重缓急
多少事,从来急。天地转,光阴迫。一万年太久,只争朝夕。手头事情多,有经验的程序员能分清它们的轻重缓急,恰当处理。对每个任务,都可以粗略地赋予一个优先级别。比如,P0对应于立即解决;P1也是核心功能,应予解决;P2 nice to have, 相当于锦上添花,但非核心功能;P3是有些许价值之任务,可能有助于软件未来之改进。随着项目开发的推进,程序员对任务的理解的逐渐清晰,他可以修改任务的优先级别
2016-02-11 07:30:08
269
原创 企业强则行业强,行业强则中国强:立此存照
昨夜偶遇30多年未见的老同学。他自豪地告诉我,他们的港口机械建设央企,已然是妥妥的世界第一,而且正在高歌猛进。谈及当年他们的辛勤付出,他微微地笑了:咱们的世界第一,就是靠大伙一步一步做出来的。细细盘点一下,做到世界第一的中国行业,已经为数不少。比如种岛(港机),高铁,路桥重装设备(盾机,架桥机),新型大电容。这些,围绕着基础建设领域,是一带一路克制岛链布局陆权的技术底气。在金融领域,支付和结算
2016-02-10 09:09:50
417
原创 软件开发技术:及时沟通
俗话说,计划没有变化快。在实现开发任务或修复软件错误时,经常会遇到令人困惑之处,如定义不清晰,信息不充分,手头工作难以顺利进行;抑或有临时突发高优先任务,需要马上处理, 等等。此时,程序员应立即与相关人员进行沟通,澄清问题或通报变化, 使大家知晓计划的变化。及时沟通,经常沟通。一般是非正式沟通,通过即时通讯,Email, 碰头短会等形式。较重要之信息,应在会后通过Email 文本确认,并向有关
2016-02-10 09:07:57
486
原创 软件开发技术:SOLID设计原则
SOLID 是以下5个词的首字母缩写,是公认的评估面向对象系统的详细设计的指南。single responsibility 单一责任原则。一个子系统,一个类,一个类函数,应该只关注于一个责任,只有一个原因使之发生改变。open closed 相对开放封闭原则。基础类的设计,对功能扩展开放,对实现修改封闭。增加功能,要以增加继承子类或接口优先,避免修改已经稳定的代码。liskov sub
2016-02-09 09:16:41
459
原创 软件开发技术:天才程序员与优秀团队成员
不可否认,在软件界存在着一些天才的程序员。他们在某些重要的领域极具洞察力,并写出极具效率的软件实现,他们成为软件业界的传奇人物,并激励着千千万万的程序员们。具体表现在,他们的程序既小又快,非常灵活,出乎人们预料。广为人知的是法国的 Fabrice Bellard 和Linux 之父Linus Torvalds。这样的程序员,就像武侠小说里身怀绝技的武林大侠风清扬,张三丰,为万人仰止,如泰山北斗。
2016-02-08 13:19:37
1057
1
原创 软件开发管理:敏捷开发之玉女心经
(改编于高效程序员的45个习惯)迭代开发,价值优先分解任务,真实进度站立会议,交流畅通用户参与,调整方向互审互查,代码质量测试驱动,安全可靠持续集成,尽早反馈自动部署,一键安装定期回顾,持续改进不断学习,提高能力。现在是2015的除夕之夜;软件开发团队管理系列就告一段落了。正月初一即将开始新的系列--软件开
2016-02-08 11:40:11
329
原创 软件开发管理: 创新
软件公司不是研究机构,它的主要任务是开发成品软件。但是,创新力是软件公司的一个重要指标;创新发展是软件公司生存成长壮大的重要动力。技术竞赛技术竞赛是公司范围或者部门范围内鼓励员工积极参与新技术的学习和应用。一般每年定期举办一次,采用展板和原型演示形式,由竞赛技术委员会评定名次,前几名给予表彰。专利专利是公司技术储备的量化。公司应有专人(专利秘书)负责专利申请的程序性
2016-02-07 09:22:24
849
原创 软件开发管理: 团队建设
新陈代谢开发团队有一个成长成熟的过程。新陈代谢有两个含义:一个是吐故纳新,吸收新成员,淘汰某些旧成员;另一个含义是团队成员自身的成长和提高。末位淘汰,分级评估: 团队管理人员从日常的项目开发活动如scrum ,和一对一会议,观察团队成员的能力和水平,作出比较客观的评估。可以从3个方面评价团队成员:对项目开发的实际贡献;对帮助其它成员的贡献;成长前景和空间。依据综合得分,给成员排位,
2016-02-06 09:52:45
1759
1
原创 软件开发管理: 迭代小结会(review meeting)
时间:在项目开发过程的一个迭代刚结束时。会议一般约为二个小时。人员:项目开发团队成员;相关人员(产品经理等);高层管理人员(非必须)目的:找到有待改进之处;若能找到改进之办法更好内容:再接再厉之处;可改进之处;急需改进之处;相互表彰最重要是改进之处;表扬和肯定也必须有,有利于提升士气。要点:鼓励每个团队成员对项目管理方式提出意见和反馈,对子任务的完成进度提出意见
2016-02-05 09:53:45
1131
原创 软件开发管理: 每日晨会(scrum)
每日晨会是敏捷开发过程中最为重要的一个环节。核心团队成员每天早上开一个非常短的碰头会,每人平均2到3分钟,介绍昨天做了什么,今天要做什么,有什么困难没有。主要目的是便于项目管理人员了解任务开发状态,发现潜在的隐患,督促团队成员勤勉工作,帮助解决困难。一般采用站立式非正规会议,集中在一个小会议室或者是在稍微偏僻一点的走廊。当项目管理人员发现某个团队成员工作不力或者是遇到困难的时候,除在会议上
2016-02-04 11:19:45
2943
原创 软件开发管理: 技术午餐会(brown bag)
技术午餐会是一度流行与于某些软件公司的一种团队技术共享形式。Brown bag来源于每个参加者自带从公司食堂拿来的外卖午餐(装在棕色纸袋内) 而得名。由某个团队成员利用午餐信息时间,在一个小时时限内,不正式地向团队介绍相关领域的新技术动态。目的是使团队层面跟踪业界技术发展,知晓其它团队或公司的动态。简而言之,(粗略)知彼。个人认为,如果能找到相关的网上技术视屏,网上视频的效果远好于团队技术午餐
2016-02-03 06:29:47
592
原创 软件开发管理:林总六大原则之对照
林总的六大战术原则(一点两面,三三制,三猛,三种情况三种打法,四快一慢,四组一队),是东北野战军华丽变身为百战百胜的无敌之师的练兵法宝。经调教后的东野,对手为之闻风丧胆,一声“戴狗皮帽子的部队来了”,对手了无斗志,土崩瓦解。林总打造东野的练兵秘诀,成就了中国军事上的一段传奇。六大原则,操作性强,不同的岗位采用不同的原则:决策级指挥员适用的是四快一慢,三种情况三种打法。战场指挥员适用的是
2016-02-02 07:24:07
1432
原创 软件开发管理: 场景为基础的项目任务分解
确定项目立项(即获得资源预算),如同规划三大战役,是统帅部也就是公司决策层的宏观战略。一个项目立项后,项目责任人(一般是开发经理或产品经理)将项目分解为多个场景(scenario),然后依场景的优先级规划多个迭代。每个迭代一般对应一两个场景,并将场景分解为多个子任务,分配给团队的各个成员。子任务的设计,是详细设计,集中关注有限范围內的组件及相互作用。在实现子任务时,程序员若发现有遗漏的子任务,应为
2016-01-31 11:05:45
1711
原创 软件开发管理:系统设计和技术原型
一个软件项目开发前,当然应该先有系统设计。系统设计不同于详细设计,系统设计不是详细设计。系统设计就象一个简略战役构想; 详细设计,就象依据具体地形和进展态势指挥一场战斗,才是软件子功能具体编程实现的有效指导。依靠战役构想(系统设计)指挥具体战斗(软件实现),是不可能的。 对于系统设计,我们可以采用非常正规化的设计规范,采集尽量完整的用户需求,制作尽可能完整的设计。推荐的轻量级设计,是以关键的设
2016-01-30 20:29:19
2036
1
原创 代码开发管理: 内部wiki 系统
软件开发团队不是仅负责软件(详细)设计和实现,而是整个软件产品的方方面面,比如用户支持内部文档。团队成员间也有设置,开发,测试的知识需要共同分享。内部wiki 系统即专为团队协作式文档工具。wiki 系统是共享式文档服务,内置版本支持功能。成功使用wiki 系统的关键,是每个团队成员有意识的,积极的参与;每个成员,不仅是文档的读者,也是文档的共同作者。应该鼓励团队成员经常地使用WIKI系统,随
2016-01-29 12:42:27
562
原创 代码开发管理: 持续集成
持续集成(continuous integration)意味着有一个自动化系统,持续不断的从代码版本主节点获得最新代码,编译构建,运行广泛的测试用例,如果需要甚至安装部署到中试环境(staging),和生产环境(production) 。这些测试用例,包含所有的签入测试,以及所有的集成测试,系统测试,性能测试。由持续集成系统运行的广泛测试,测试当前系统设计的各个方面,是保护系统实现质量自动化流
2016-01-28 08:37:15
342
原创 软件开发管理: 签入测试
签入测试(Check-In Test, 也称提交测试),是保证提交代码的质量的另一个重要工具(还记得代码互审吗?)。软件开发中最常见的代码错误,是新代码改变了某些语法(调用接口)或语义(行为),使得依赖于那些语法语义的其它代码不能正常如前工作。其次是以前修复的错误又死灰复燃。这两种错误,都应该有单元测试和集成测试来检查。签入测试由所有的单元测试和部分重
2016-01-27 10:46:31
414
原创 软件开发管理:代码互审(code peer review)
代码互审互查,是非常有效,第一重要的代码质量管理方法。另一个重要方法是代码自动测试。代码互审来得比自动测试更为重要,这是因为自动测试不一定适用于所有的项目;代码互审可发现设计缺陷和后门代码,而且让团队成员相互学习相互磨砥。在专业软件公司如微软,代码互审是非常严格的。一般地代码要经过几个互审回合(也称为迭代),最后经其它成员审核通过,加上签入测试(CIT )也通过,代码才能签入到主节点。
2016-01-27 04:46:47
1518
原创 软件开发管理:源码版本管理
引入软件开发管理应该循序渐进。不要试图一蹴而就;要给团队一个熟悉,学习,适应,提高的过程。尝试软件开发管理的第一步是引入源代码版本管理系统。如果你开始一个新项目,版本管理工具当然应该选Git 。Git 是一个开源的分布式版本管理系统,无需后台数据库或中央服务器,非常易于使用。当然,对一个开发项目,我们应该设立一个特殊的Git 节点为項目的正式签入代码目标(也可称为主节点)。这个签入节点本质
2016-01-27 04:44:45
1043
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人