转载:
作为一个全栈开发人员("Full Stack Developer",简称FSD)需要熟悉以下领域的知识:关系数据库;服务器;网络和客户端。
数据库/数据源
需要清楚SQL和NoSQL区别,这是你进行架构选择的首要决定,你需要知道每种类型的区别和优缺点。至少你应该知道两种数据库的实现,比如MySQL和Oracle,需要掌握SQL语句,以及不同数据库的方言。
在NoSQL这里应该了解类似 MongoDB 和 ArangoDB之类数据库,对JSON之类语法和SQL风格的语法熟悉掌握,比如下面两种查询都是基于同样数据结构和同样用户意图:
// BSON
sample.bar.find({}, { foo: 1 }).limit(2)
// AQL
FOR row IN bar
LIMIT 2
RETURN { foo: row.foo }
此外,需要了解 DB normalization,对数据库进行normalize能够获得更好视图和扩展性,也能导致更小的数据和更好性能。除了normalization,每个DB都有特殊优化方式,比如FLOAT和DECIMAL不同会影响性能等等。
服务器/数据处理
首先询问自己的问题是:我的应用是如何工作的?使用许多静态内容?还是得动态产生内容?需要实时通讯吗?这些问题的答案会帮助你决定是需要Apache/Nginx Node.JS, Java, Go, Erlang, Python等服务器,如果你的站点有很多静态内容并不需要实时通信,你应该尽量简单化,一个简单的HTML预处理器,比如PHP 或 embedded JS 或 Mustache JS 就足够了,也许还会需要缓存,比如Varnish。
编写你自己的应用有很多苦难,需要你从众多语言中挑选,创建网络监听器,编写协议分析器,这些都是在你完成应用逻辑之后都需要做的,除了了解JSON和XML数据格式,还应该了解RESTful, RPC和会话,这些都是有关数据通讯或存储的方式,会话中保存的是用户是否登录的状态,状态作为变化数据的另外一种代称,是存储信息的唯一配置。
安全也是应该关注的地方,可以容易通过OWASP ASVS checklist实现。
设置好接口和通讯后,需要考虑优化性能,缓存是你应该考虑的事情;第二个提升性能办法是压缩数据,能够提升传输速度,最经常使用压缩算法是gzip,更小的blob数据比如小于256字节会在压缩时变得更大点。
网络/数据传输
虽然只需要通过很简单的HTTP代码就可以实现客户端浏览器和服务器之间的数据通讯,TCP/UDP等底层协议都被隐藏起来,但是为了提高性能、安全和流量,还是需要了解TCP基础知识,然后是HTTP协议,有许多头部信息和实现都必须详细了解。
在这些协议之上,通用的数据结构如XML和JSON应该知道如何使用。
客户端/数据表现
HTML CSS和Javascript是必须掌握。
语义HTML能够支持盲人阅读器或其他机器读取你的HTML,此外,可访问性也是很重要的,创建交互性用户体验。icroformat提供传输信息给用户的标准方式,能够增强UX用户体验。
CSS也需要了解normalization,HTML5Boilerplate是一个默认的CSS模板;你要知道响应式设计responsive design;小屏幕手机上client hints是有用的。考虑使用Bootstrap之类框架,能够进行增加规则,同时防止大框架造成的过载,移除不用规则,最小化使用它。
确定你需要JS框架才加入它们,如果你希望AJAX调用,VanillaJS就够用。JQuery、Angular和React都是现代常用框架。
通用编程
不管你使用JS或PHP或Ruby等,需要知道点如何创建坚固架构。
易于维护,易于开发,有性能hot-path,没有泄漏,有资源生态经济系统。
至少需要了解编程模式在心。同时试图更深理解你的标准库包是如何工作的,搞点黑技术。