前几天有个做客户端开发的网友忽然给我发了一些与SDK相关的问题,希望得到我的解答;有些问题确实我也没有非常好的认识和答案,先把自己的一些想法分享在这里,后续会继续思考和完善。
其实我觉得没有什么开发人员的职业发展路线,或者规划;只有每个人自己的职业发展路线和规划。不管是偏SDK的开发,还是偏APP的开发,其实都是终端开发,他们的发展没有太大区别。而且这两者之前并没有那么明显的界限。而对于做技术的人来说,非要选择职业发展路线的话,目前看到身边比较多的案例基本上就三种选择:
学习路线严格意义上讲我不知道是指的什么,如果是需要什么知识或者技能的话,那SDK和终端开发差不多,如果是职业规划或者发展路线的话,我也没有一个非常准确的规划,因为现在时代变化太快了。这里简单的列一下个人觉得需要具备的基本的知识技能吧,可能不够全面:
网络相关
解决方案
日常工作
这里简单介绍一下吧,其实SDK分为两类,一类是业务SDK,一类是整合SDK。业务SDK就是把自己的业务能力封装为接口提供给第三方调用,例如直播的SDK,腾讯地图的SDK等等各种功能的SDK;另一类是整合SDK,这种SDK一般是把多个SDK的能力进一步整合为一个更方便第三方使用的SDK,有点偏统一的解决方案的。我做的比较多的是这种。
这两类SDK的技术点或者开发流程都很一致,没有太多区别;SDhttps://blog.bihe0832.com/太高深的技术,你的大部分时间和精力都是画在业务逻辑、业务流程上面;做SDhttps://blog.bihe0832.com/是最早参加开发的人,因为越来的早的人越知道里面的坑,而且越熟悉业务逻辑和流程。
这里有一篇我之前写的关于SDK的一些理解,你可以参考看看:http://blog.bihe0832.com/sdk_summary_sdk_of_my_explain.html
其实SDK和终端开发没有太多的区别,唯一的区别就是一个是完全的黑盒,一个是你要把你的功能通过几个接口提供给别人使用。平时开发中我们会把一些常用的代码封装了,然后用一个接口提供出来供团队内或者自己开发时使用,你可以认为这已经就是一个SDK了;唯一的区别就是SDK是一个接口实现了一堆功能,你封装的代码只是提供一个功能或者解决一个问题。
非要找一个区别的话,那就是SDK可能更关注业务逻辑,而且要考虑如果把这一套逻辑优雅的提供给别人使用,而客户端不用太关注,因为反正用户只关注功能,而不会关注你的代码优雅不优雅,你只要功能正常就可以了。因此确实个人感觉SDK的开发者会对代码的框架、扩展性、易用性等方面的要求会更多,对设计模式相关的要求可能更高一点。
另外SDK的开发涉及到UI的内容会非常少,而终端开发会多很多;因此如果是SDK开发转终端开发的话,我觉得这可能是最大的瓶颈。同样的由于SDK是提供给别人使用,因此经常会遇到各种问题,你需要熟悉各种定位问题的手段,因此SDK开发对于问题定位的要求会比较高。
而对于第三方的开源框架,一般来说SDK确实使用的相对较少,因为SDK更多的是业务逻辑,所以网络、数据库这些都相对简单,目前我们都是直接封装HTTPURLConnection和SQLiteHelper。一般不怎么使用开源框架的另一个原因是SDK要限制安装包的大小,而开源的各种框架的包都太大了。
综合下来,SDK开发转到终端开发,除了UI相关的内容以外,感觉没有别的瓶颈。应该不难。https://blog.bihe0832.com/https://blog.bihe0832.com/
这个不好评价,仁者见仁,智者见智吧。在上面关于两个的区别里面已经提过了,所以哪个更有挑战要结合自己的情况来判断,可能是因为自己做SDK太久了吧,对于我来说,我觉得终端开发更有挑战,因为这部分内容我并不是很熟悉,至于前途的话,我觉得没有太大区别,因为这行本来技术的更新换代就比较快。当然如果SDK的开发平时没有有意识的培养自己在UI上的短板的话,那转终端开发的时候可能会有一定的难度。
https://blog.bihe0832.com/https://blog.bihe0832.com/ 这个问题比较特殊,我就简单回答下,会的,我们这边都是开发没有明确的界限,如果有SDK的需求就开发SDK,没有的话就去做一些业务的需求。
对于SDK开发来说,要考虑的问题会有很多,并不只是高并发,而且高并发这个其实更多的是后台在处理,客户端可能会关注一些别的东西。你可以看下我画的这个SDK思维导图:http://blog.bihe0832.com/sdk_mind.html;目前来说不管是SDK还是客户端开发,在开发者遇到的比较大麻烦的问题就是兼容性的问题,这里最主要的手段还是通过各种兼容性测试来发现,去解决。由于SDK与UI相关的内容比较少,因此它的兼容性问题并不是很多很复杂。
最近工作比较忙,可能写的比较杂乱,这里有一个我写的SDK的系列,你应该看过,如果没看过的话,推荐你系统看一下,可能对你的理解会有一些帮助: