缘友平科技CEO袁友平谈软件服务端开发需要的新技能
2017-01-14 21:53
如果你没有接触过服务端开发,是否会好奇服务端的程序员究竟做了什么?仅仅是做数据增删改查这样的事情吗?
我的这篇文章告诉您:服务端的开发者都做了哪些事情,他们需要掌握和使用到哪方面的技术。本文适合有学习服务端开发想法或者初级的服务端开发者们阅读。不是技术干货但是希望能提供入门或初步进阶方向上的指引。
进入正题请关注头条号:缘晨枫
1.熟悉并能使用一门服务端语言,会使用一个开发框架
2.会在服务器上搭建环境。环境不会搭怎么搞生产哦,拿lamp来说linux和apache、mysql、php四者担任的角色要清楚。这个级别的开发者不说每个软件都能自己装,就算是集成环境也是你要会的,像wampserver、xampp这样的。当然,这些前提是你要基本会使用你所用的服务器比如linux。
3.会使用一种数据库。比如关系型数据库mysql,能熟练写出增删改的语句和不算很复杂的查询语句,再如了解各种方式的多表查询有哪些不同等数据库技能还是需要的。
4.了解http通信协议。跨平台的交互一般的http是使用比较广泛的,至少对它大概要了解,比如:http是HyperText Transfer Protocol的缩写,英文常忘的话至少中文要知道是超文本传输协议,再比如你得清楚请求报文通常包含哪些部分、常见的服务器返回码对应的含义。
5.会使用一种数据格式。服务端和移动(前)端建立了联系,数据的传输也需要一种协议格式去统一。json是目前使用最高的格式了。json的数据格式还是简单明了易学的,主要是要了解如何使用它较好的去定义接口,统一返回格式,举个code:"200","message":"OK","data":{"xx":"xx"}},code定义业务码,message显示服务端消息,返回数据写在data中,尽量写出对移动(前)端友好的接口。这里说个题外话,我们常说好的用户体验更能让用户接受和使用,那么,做为写接口的开发者为调用者提供的其实也是一种服务,调用者就是我们的用户,同样要注重体验。包括但不限于定义语义明确的字段、良好统一的传参方式和返回值风格、清晰易读的文档。
有了以上几种技能,基本上可以搭建出简单的服务端并写接口给其他端的开发同学调用了。
1.熟练运用一门或以上语言,了解常见服务端语言的异同和优势。如果你只了解一门语言那么你一定会少学到很多东西,例如:为什么php适合快速实现业务?为什么node.js适合处理高并发?为什么很多公司喜欢用java、c++去数据层服务?
2.熟练使用数据库,有不错的数据库优化能力。遵循木桶短板原理,服务端的性能瓶颈多出现在数据库方面,所以优秀的数据库操作方式能大幅度提高项目或系统的性能,所以开发者需要很熟悉自己所用的数据库的特点,比如关系型数据库和非关系型数据库的异同和其各自适应的业务,再比如mysql数据库中Innodb和mysiam之间的特点,再比如Innodb中如何更好的利用索引,再比如...
3.理解和熟悉各种网络协议。除了熟悉http外,了解https的原理为什么更安全。要学会如何在自己的服务器配置https服务,了解单/双向验证原理。再如要了解tcp/ip协议、长/短连接、socket等等。
4.良好的业务设计能力。坏的业务设计或者过于复杂,可能导致使用流程复杂,项目不好维护,资源浪费,影响新业务等一系列问题。举个站内信的例子:站长要给拥有500W用户量的所有用户发一条消息的并且要标记用户是否读取。如果按正常的逻辑在消息表为每个用户插入一条新消息然后标记为未读,等待用户读取时标记为已读,这个方式的话一次性就要插入500W条记录,这仅仅是一条消息,那么消息频繁发送呢?用户量更加多呢?越多数据同时插入数据库的性能也将大幅度下降,而且有些用户或许永远都不可能上线去看这条消息了,数据库资源也大大浪费。那么,换个解决方案,等待用户上线的时候去系统表查询是否有新的系统消息,有的话再作为未读消息插入到消息表里面。这样是不是就优化了很多呢,同时解决了插入大量数据和资源浪费的问题。
5.有一些自己的可靠的开发套路。其实就是踩过坑后的一些可行的解决方案,比如总结出自己的一些性能优化方案、高并发的解决方案。这个概念模糊不好描述但是不可缺少。
1.在level1、2的技能点上不断的深入、扩展理解。
2.模块化拆分能力,可扩展的编程思维。能将业务清晰理解并合理拆分模块,技术上比如单个项目拆分到数据层、缓存层、展示层、资源层、消息队列等更细分模块时,业务上比如电商系统拆分为用户模块、订单模块、商品模块等,做任何事情前先考虑如何拆分和扩展。再说扩展,假如缓存服务以前是由一台服务器提供要扩展到多台服务器时的解决方案,即为一台服务器扩展到多台服务器时能轻松过渡提前做好准备。
3.附加技能,不错的运维能力。有了这个能力能快速的排查系统故障,能自如的安装卸载自己需要的模块,能更好更方便的做压测调优,能清楚的知道项目的性能和承受力,修改优化起来得心应手好处多多。所以说,运维能力不必要吗?有运维能力的开发工程师才是好产品经理。
到这里你觉得服务端开发是难是易?我自己认为,服务端相对移动(前)端来说大部分情况需要的经验比编程能力要高。应届生中可以将一个app做到效果和体验很好的见过蛮多,但是能开出完整一套高性能高可用服务端的缺很少。
结合目前的经验和能力大概归纳了这几个等级,每个等级所涉及的技能多少有点主观性,但是大致方向如此。编程路上没有尽头,还需要不断的学习。坚持主动更新阅历,总结新旧知识,当有更多的见解时我也会继续总结出来。