Improve yourself in client development

这篇文章并没有发表过,是我的一个同事给他们team成员的一封信,在这里我把它公开了,以时刻提醒自己!

Dear Client Team Members,

 

写这封邮件,希望能引起大家对工作的思考,希望大家能在技术上有更高的追求,思考如何在CM开发过程中增加自己的实力。这个可能有些大而空,不过请大家相信我是善意的、真诚的。

 

我们中的大部分同事在这里已经工作了一年多的时间,大家不妨回顾一下在这段时间里有没有什么收获,当然,作为R&Der,我们这里主要讨论工程技术。这里我先列一些在做CM过程中曾想过的问题,比较零散,也不是很全:

 

  • 作为Wi-Fi客户端的研发人员,你对Wi-Fi的知识了解了多少?在公司平时的工作中,会接触到大量Wi-Fi相关的名词:Association,Deassociation,OPEN,WEP,8021x,EAP, WPA,WPA2,TKIP,CCMP,…,你对他们足够了解了吗?如果有人(客户、其它Team的成员、或是你身边的朋友)需要咨询一下你这位从事Wi-Fi开发的专家时,你能解释清楚吗?是值得信任的吗?
  • 你的心里是不是有这样一种想法,我们只需要熟悉自己平台的Wi-Fi接口就OK了?甚至连Wi-Fi接口都不需要太熟悉,要用到的时候简单的查一下文档,然后Google一段能用的代码就OK了?
  • 作为通信公司的研发工程师,你对工作相关的通信知识了解了多少?你是不是认为自己在Client Team里面做的只是Mobile App,离通信还是太远?你是否觉得通信知识只能通过加入相应的项目开发才能获取?
  • 作为国际数据漫游业务供公司的研发人员,你对国际数据漫游业务了解了多少?有没有想过怎么去了解公司的业务?
  • 我们的Client需要和各种各样的HTTP Server连接,那么你对HTTP Server了解了多少?对HTTP/HTTPS协议了解了多少?还记得曾今QA测试Hotspot Downloading时Kill掉Server之后,客户端这里显示下载正常的情形吗?对于QA的问题,作为开发人员不知道如何回答是不是有些尴尬呢?现在再来一次,是不是知道答案了呢?
  • 现在还有人对自己平台线程相关的机制不熟悉吗?还记得当初iOS上面开线程内调用异步网络接口之后接收不到数据的问题吗?现在能够清晰的理解并讲给大家吗?
  • 还有人写Java代码对异常处理不分青红皂白try catch加print log吗?还有人不知道iOS Autorelease究竟是何时release吗?还有人不理解引用计数,不知道内存什么时候被释放吗?
  • 当看到很多开源项目在用面向对象的方式组织C代码的时候,我们是不是还有人拿着C++/Java/Object-C写着过程化的代码?我们有没有认真思考过代码结构的问题?当我们的代码看上去一团糟的时候,我们是该佩服自己能完成这么复杂的代码呢,还是感觉脸红?当别人指出问题时,是觉得委屈呢,还是脸红?会不会有人觉得OO、“设计模式“之类的名词只是拿来应付面试和装x用的?
  • 你遇到过字符编码引起的问题吗?当经过长时间调试之后问题突然好了,你是否满意的笑了笑然后就走开了呢?客户遇到乱码了,需要你作为研发专家给他解释一下,专业的你能讲清楚吗?Unicode和UTF-8是什么关系啊?那一堆乱七八糟的编码之间是什么关系啊?我们如果打算支持中文的SSID,你觉得有那些问题我们需要先弄清楚呢,还是先写代码测一下,不对了再改再试?为什么我下载了你上传的代码,打开之后有乱码呢?你上传代码的时候有没有注意到过呢?为什么控制台输出是乱码呢?作为Android/iOS开发人员,你有没有觉得Windows上面出了太多的编解码问题?有没有想过为什么自己的平台为什么在编解码的问题上相对那么顺畅?
  • 不像Windows系统,我们似乎到现在还没有一个能在Mac上面解密Phonebook的小工具,有人会觉得这个有问题吗?我们在字符串需要大量整理的时候,这种枯燥乏味且容易出错的工作是否让你想爆粗口?作为Developer你采取什么措施了吗?哪怕只是想想?
  • 作为Windows开发人员,Win7的安全机制你能给我们清楚的讲解吗?你能在软件设计的阶段处理好安全问题,而不是做出来之后再去测试调试吗?我们能在写代码之前能胸有成竹吗?
  • 写完了代码,要测试起来是不是很麻烦?你是不是也说过”这个怎么测啊“?。作为工作多年的Developer,Unit test是不是还只是一种概念?你所做的项目工程里面,是不是还没有任何关于单元测试的代码?你是不是甚至还不知道怎么引入单元测试框架,以及如何使用?你是不是还在等待谁来要求一下,讲解一下应该由你完成的最基本的工作?
  • 除了工作需要,你是不是不会在关注开源项目?是不是不会阅读别人的代码?
  • 写文档是不是很难呢?是不是不知道从何下笔呢?是不是不知道该写些什么才能描述清楚问题呢?有没有想过如何提高呢?你是不是把Design Doc写出来只是为了走走过场呢?是不是觉得在模板里面改的乱糟糟的文档能拿给别人去理解你的需求和设计呢?
  • 你是否抱怨过流程的混乱?你在其中做了些什么保证自己的工作不混乱吗?能保证自己合理管理分配给自己的任务吗?能保证积极主动的完成任务并更新状态吗?

 

客户端这边可能忙一点,在这里列这些问题,是希望大家再忙也不要忘记思考和学习,要尽可能的提高自己的技术实力。个人认为,技术实力应该体现在两个方面:扎实的软件开发能力和扎实的领域知识(当然更重要的是快速学习领域知识的能力)。

 

在软件开发能力方面,写代码是最最基础的部分,如果作为开发人员不能保证代码的品质,那你就危险了。我们工作最基本的事情是编写代码,大家应该可以想象一下现在整个IT行业有多少人能满足这个条件,每年有多少新鲜血液注入,如果大家对自己的要求仅仅停留在Coding的层面上,那么可以随时被任何人替换,竞争力将无从谈起。

 

不知道大家对这方面的认识是怎样的,我记得以前看到文章介绍Google的代码评审,如果一个人写的代码修改两三次都还不被大家认可,那他可能就没机会了。在这封邮件里,我不打算和大家在这个方面谈太多。我们在Code Review的会上提过不少,另外我们内部也有非常优秀的Coder,这个方面大家可以相互交流。OO、设计模式方面的书很多,另外各个语言最佳实践的著作也不少(例如Effective XXX系列),大家多多学习。如果你有心思,可以关注一下应届生找工作时被问到的问题,我们至少应该比这个强一点。

 

我不希望我们的团队只有小作坊的水平,请记住代码质量是底线,不要在这里待太久。

 

软件工程是软件开发的另外一个基础部分,我想大家在以前的开发中能总结出来不少的反面例子,以及其后果。反面的东西不是一点用处也没有,它能够让我们更加深刻地理解软件工程的重要性。希望大家能够珍惜公司推动TL9000的这个机会,积极主动地规范自己的开发流程,而不是被动的等待。希望我们以后能建立起这样的观念:开发是一个过程,Coding只是开发中的一个小环节,开发时间短是要求我们花更短的时间执行完流程,而不是乱来。

 

在领域知识方面,我相信大家从事软件开发,早就熟悉这个概念,我想这应该是研发人员差异化的最重要指标,是你能在一堆优秀的Developer脱颖而出的根本。在Aicent从事Wi-Fi国际漫游客户端的研发过程中,我们可以积累哪些领域知识呢?我想有以下几点(非常欢迎大家纠正与补充,多谢!):

  • 智能手机/PC应用软件开发知识
  • 计算机网络与安全知识
  • Wi-Fi基础知识
  • Wi-Fi漫游业务知识
  • 其它数据漫游业务知识

如果一年多下来,大家只是在Google的技巧上面提高了,而对自己工作的领域知识感觉似是而非,是不是很可惜呢?会不会有一些危机感?

 

在网易上面看《算法导论》的公开课时,有位老师说了一段话,大概是:其实这个课不是必须上的,很多人工作十年之后,也能够积累丰富的经验来处理这些问题。当然,如果你学习了这门课程的话,只需要工作两年就行了。我们这样的工程实践入门很容易,但要积累足够的领域知识却相对较难,较为漫长,如果你能抓住一些理论学习的机会,会事半功倍。就Wi-Fi CM这块,下面是我知道的一些相关知识的学习资源,供大家参考,同样非常欢迎大家补充,互相交流。

 

1.安全/加解密

 

在你阅读一些网络协议时,你可能会发现安全的概念无处不在。如果有一些安全方面的知识,你不会一头雾水。

 

《SSL与TLS》这本书我会放到网盘上面供大家参考。这本书简单通俗的描述了安全的基本问题,引导读者建立SSL/TLS的基本框架,并介绍了采用C和Java进行SSL/TLS编程。另外对HTTPS也有专门的描述。我们的Client会与许多HTTPS站点交互,现在各个平台提供的API封装,让大家基本上不用在关心SSL的细节,不过大家还是应该清楚的了解API背后发生的事情,提高分析和解决问题的能力。当客户遇到SSL连接问题时,至少你可以和他讨论几句,对吧?

在这本书里面,只需要花很少时间阅读前面的部分就能了解到一些常用的概念:

  • 对称加密和非对称加密的概念,他们各自适合在什么地方应用
  • 非对称加密中的Public Key和Private Key。看完这些,iOS的同事至少应该理解Apple加入开发者那一套麻烦的证书申请步骤了,以及备份你的Keystore的重要性。
  • 数字摘要,MAC,HMAC,他们的相似(意味着容易混淆)和不同,各自应用的场景。看完这里,大家应该能估计App签名会做什么了。
  • 数字证书的结构和用途。

 

《Network Security Essentials - Applications and Standards》Fourth Edition,这本书可以让你了解许多加密算法的详细内容。我们Client里面大量使用了3DES加密,你可以在这里清楚的了解3DES的工作流程。更重要的是,你可以知道“3DES”这几个字符是不能够完整描述我们使用的算法的,你会了解到它属于”对称块加密“算法,所以还要指定“模式”以及“填充”。当你和Client外的系统对接时,你会了解到这些信息的重要。当你和真正了解这方面的人聊起来时,也不会被认为是半吊子:)

在这本书里面,介绍了很多加密算法和安全系统,有几点我想大家会比较感兴趣:

  • 多种对称加密算法和非对称加密算法。你可以了解到这些算法的全部信息,在将来需要时,你也可以考虑选择其它的加密算法。你可能发现,或许还有比3DES更合适在客户端里的算法。
  • Wi-Fi网络安全。你会了解到客户端Wi-Fi设备关联到Hotspot时有那些交互,802.1x EAP消息在什么阶段开始,完成什么样的工作。
  • IP Security。你会了解一些VPN相关的知识,至少以后听见我们和别的运营商之间通过VPN连接RADIUS,你也猜测大概做些什么事情,虽然VPN不一定采用IPsec.

2.Wi-Fi

《802.11? Wireless Networks The Definitive Guide》,我会放到网盘供大家参考。这本书应该包含了你能在API文档里面见到的所有关于Wi-Fi的概念,很适合作为参考书。另外有以下部分,我想大家会比较感兴趣:

  • User Authentication with 802.1x。这里你能了解到802.1x和EAP的关系,我想应该有很多人对这个有过疑惑吧?这里也介绍了EAP协议的基本架构和流程,以及一些EAP Method的工作原理。PEAP, EAP-SIM,EAP-TLS,我想大家听得耳朵都快起茧了吧:)。
  • Management Operations。看看它的几个子章节:Scanning, Authentication, Preauthentication, Association。是不是离我们的工作很近?
  • Using 802.11 on Windows
  • Security Architecture

这本书没有关于Hotspot2.0的内容。

 

《WISPr标准》,作为CM的核心,我想应该没人不熟悉了吧?这个文档能帮助你理解CM和RADIUS之间关系。

 

3.AAA

RADIUS是WISPr采用的AAA协议,也是公司提供Wi-Fi国际漫游的一个重要的基础性协议。大家将来如果作为CM Team的接口面对客户,是有很大的可能性讨论到CM在整个Wi-Fi漫游网络中的工作流程,而这中间肯定少不了这个协议。以下是一些参考文档,欢迎大家补充:

另外给大家推荐一个阅读RFC文档的开源工具qRFCView (http://qrfcview.berlios.de/ ,有个小Bug,不过很容易修正)。公司网盘上也有个类似的收费软件,大家可以找找。

 

4.漫游

 《Virtual Roaming Systems for GSM, GPRS And UMTS - Open Connectivity in Practice》。我想Team里面有很多人和我一样,想要了解公司其它的漫游业务却找不到合适的切入点,不知从何入手。这本书可以应该基本能够解决这个问题,大家如果感兴趣,我可以提供给大家复印。

 

5.文档编写

这个是很难的部分,这个邮件写成这样都花费了我们很长的时间,更何况要写一个清晰、准确的技术文档。好在公司有大量的文档模板,另外多参考其他Team的文档。大家不要抱怨QA对设计文档的要求,换位思考一下就会觉得这很合理而且很必要。除了公司内的资料,大家可以到网上多搜索如何写好设计文档的文章,例如IBM的developerworks上面又有很多不错的教程。当然,最好还是大家互相多指正多交流。

 

希望大家在后面的工作中,能够在提高自己软件开发能力的同时,更进一步的增加CM相关的专业知识,增强实力,成为真正的专家。希望我们以后能够从容淡定的给客户和其他咨询人员正确满意的回复,少一些类似于“等我再测试/确认一下”的回答。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值