全栈开发是要前端、后端、服务器运维都要熟练掌握吗?
是的。
我开发过iOS,Android macOS app的前端开发框架,包括一部分UI部分,异步消息处理,对http json,http 图片的异步处理,sqlite封装,一些常用文件处理,例如图片cache,日志模块,音频编码解码,视频解码,OpenGL,socket 通信的封装。iOS和Android都是原生UI为主,不用混合框架。这里工作量并不算太大,因为都是一套c的代码可以在三个系统之间移植,接近UI层的地方,iOS和macOS就用swift封装提供给UI层调用,Android就jna封装提供给java层使用。
网页前端:websocket,jq,ajax这些也写过不少,html/css这些必须懂,可是前端开发框架变化比较大,需要不断更新,学习有成本,而且受制于浏览器,近年尽量避免陷进去。
server 端方面postgres mysql这些数据库是标配,业务逻辑主要用java开发,也用java的nio开发高并发的通信程序,也开发过nginx模块,各种脚本也写过不少。
运维是一个很大的话题,不可能全部讲,只说一个方面:我整个服务端用的服务组件都是通过脚本源码编译,尽量不依赖系统的库,因此可以轻松在Linux各发行版和bsd之间迁移,软件的版本也不受限于当前操作系统,因为我就不用系统提供的,这里包括pcre,openssl,ncurses,libz,libpng,libjpeg,curl,libiconv,Image Magic,nginx,mysql,Postgres,libssh2,ffmpeg及相关的一堆软件库。
全栈至少来说应该掌握服务器,数据库,服务端编程语言,前端标记语言和脚本语言这些技术中的其中一个,还有电脑蓝屏怎么修,买什么型号的手机,无线网连不上怎么办等等。
在一般人的眼里,全栈就应该是这样,我们程序员是无所不能的。
其实一个全栈工程师在我看来,并不是他掌握了多少技术,而是他对出现的问题都能够有成熟的解决方案。
我见过很多就是这种用php+js+mysql写了一个项目,就以为是全栈了。实际上遇到问题根本不能解决,解决方案也经不起具体问题的检验。
这种全栈,啥的干,也啥都会,也啥都不会。
全栈在我看来应该是一个key,什么问题都有对应的value出来,至于这个value是啥,他总能够解决掉。
人的精力是有限的啊,只能在专一的领域里努力奋斗,做到触类旁通吧,一专多精,打好基础,打好基础。
按照百科的对全栈工程师嗯定义,全栈工程师是指掌握多种技能,并能利用多种技能独立完成产品的人。
它强调两点,一点是全面,掌握多种技能,一方面强调独立,就是不依靠他人技能做产品的。
从以上两点总结,全栈需要的技能有如下几点:
1.产品设计,知道整个产品的核心竞争力。
2.前端布局,可以根据原型图做出产品页面
3.APP 开发能力,可以使用原生或者混生开发,做app 并能上架
4.后端逻辑,前端是皮囊的话,后端就是产品的灵魂,需要能写后端代码
5.服务器部署,不管是网页还是APP 都需要服务器来部署后端代码
6.性能优化,安全优化,程序有问题,不管前端,还是后端,还是服务器,你都需要找到问题的解决办法。
全栈工程师和独立开发者很像,都需要独当一面,这是一个对广度要求比深度更高的职业。

