How to 解决一个问题,找一个库,评价一个库
一步一步回答完下列的问题,我相信你的答案就呼之欲出了:
准备
-1.定义要解决的这个问题
-2.网上怎么分解这个问题,同行怎么分解这个问题
检索
-1.问题复杂度,项目工期,项目成员的能力,可以把握的资源
-2.开源项目、朋友使用推荐、同行解决方案
需求
-1.使用规模和限制、使用时间
-2.对源代码(需要添加外部库的代码)的熟悉程度,可更改程度
横评
外部
-1.口碑:大家都说好不一定好,大家都说不好,那就好不到哪去了
-2.目标清晰:这个库解决问题是否清晰
-3.可靠:库所依赖的工具,语言是否可靠通用
-4.热度和准确度:搜索第一页能找到你要的内容吗?第一页有多少是你要的信息
-5.授权:分发的license,对私人项目和公司项目影响最大
-6.集成的复杂度(高度模块化、最小入侵、对外部少假定)
-7.有可编译、可调式的源码
-8.活跃:库目前是否持续更新,作者是否接受了其他贡献者的pull-request,
-9.代码成熟度:有明确的分支,还是只有master
-10.源码提供是zip,还是fork,还是bin
-11.build步骤明确简单吗?build工具你需要经常用到吗?能否集成到自动化build?
内部
-1.库对外的使用方便吗?引用的文件多吗?
-2.接口清晰,而且命名规范,读起来少吗?
-3.库发布的形式灵活吗?lib/dll/MD/MT/x86/x64
-4.库的安全感(朋友推荐,靠谱程度)
-5.客户支持,维护工作量,可移植性
-6.学习曲线:网上分布中高低级教程分别都是些什么人,容易找到吗
-7.错误处理,稳定性,性能开销,工具
-8.日志系统,应一致处理运行时消息,易于集成到现有的日志系统。更好的应该是给予可以调节从高到低输出的开关
-9.内存管理(没有不必要的开销,所有分配和释放职责清楚、当分配超出时应该通知外部)
-10.对I/O访问处理,第三方库不应该自己猜测用户的输入方式,譬如自己用fopen
-11.有之前发布的release note吗
-12.未来:有发展方向的roadmap吗