什么是全栈开发者?

简介: 纯粹基于道德而掌握开发堆栈的每一方面的预期是合理的吗?可能不是,但Facebook这样要求。一个Facebook的员工在OSCON告诉我,Facebook只雇佣全栈开发者。那么全栈开发者是什么意思呢?对我来说全栈开发者是对每一层都熟悉的人,如果不真正对所有的软件技术感兴趣不会对它们精通。好的开发者熟悉整个堆栈,他们是知道如何使生活周边的事更容易的人。这就是为什么在办公室我如此反对偏执的原因,当然,政治及沟通挑战在大型组织中还是按固有的套路。我认为Facebook所持有的招聘政策是:如果聪明的人用脑用心,就能在更短的时间内构件更好的产品

纯粹基于道德而掌握开发堆栈的每一方面的预期是合理的吗?可能不是,但Facebook这样要求。一个Facebook的员工在OSCON告诉我,Facebook只雇佣全栈开发者。那么全栈开发者是什么意思呢?


对我来说全栈开发者是对每一层都熟悉的人,如果不真正对所有的软件技术感兴趣不会对它们精通。


好的开发者熟悉整个堆栈,他们是知道如何使生活周边的事更容易的人。这就是为什么在办公室我如此反对偏执的原因,当然,政治及沟通挑战在大型组织中还是按固有的套路。我认为Facebook所持有的招聘政策是:如果聪明的人用脑用心,就能在更短的时间内构件更好的产品。


全栈的层:

1. 服务器、网络和服务器环境

  1. 知道哪里可能崩了和为什么会崩,没有什么是理所当然的。
  2. 适当的使用文件系统,云存储、网络资源,必须具备数据冗余和可用性的概念。
  3. 知道应用的伸缩性对硬件的需求。
  4. 什么是多线程和竞争条件?想想看,在开发机上你可能看不到这些,但是现实环境中它们就是会发生。
  5. 全栈coder还要能与运维并肩作战。提供有价值的错误信息和日志。确保它们是可靠的,因为运维会在你之前看到这些东西。(原文为 DevOps


2. 数据建模

  1. 如果数据模型有缺陷,业务逻辑和上层逻辑就要用奇怪的代码(很丑)来弥补数据模型的缺陷。
  2. 全栈开发者要能够建立合理的、标准的关系模型,包括外键、索引、视图、查找表等。
  3. 全栈开发者要熟悉非关系型数据存储(应该指的不止是NoSQL),并且知道它们相对关系型存储优势所在。


3. 业务逻辑

  1. 应用提供的核心价值。
  2. 可靠的面向对象技能。
  3. 可能会用到的框架。


4. API层、Action Layer、MVC

  1. 理解外部对数据模型和业务逻辑的操作。
  2. 处于该层的框架应该被大量应用。
  3. 全栈开发者要具备编写干净、一致和易用的接口。过高的复杂度让人厌恶。


5. UI

  1. 全栈coder:a)知道如何创建可读的页面布局;b)或者具备足以协助设计师的知识。A或B,关键是要能有好的视觉设计。
  2. 掌握HTML5和CSS。
  3. JS正在逐步成为语言新锐,Javascript的世界里已经完成了很多激动人心的工作(node, backbone, knockout...)。


6. 用户体验

  1. 全栈coder要知道用户需要的就是It works!
  2. 一个好的系统不会废了用户的手腕和眼睛。一个全栈coder会发现和审视需要8次3点击、3步操作的流程,并最终把它一键搞定。
  3. 提供有价值的错误信息。如果崩溃了,就要向用户致歉。有时候程序员会写出让用户自我感觉很二的错误信息。


7. 知道用户和业务到底要什么

  1. 至此我们模糊了开发与架构的界限,但是角色转换很重要。
  2. 全栈coder要明确知道用户使用软件时的场景,而且要领会业务。

关于这个问题的其它方面:

  1. 编写高质量的单元测试能力。顺便说一下现如今连JS也可以做单元测试了。
  2. 持续集成。发掘程序构建中重复、可自动化的流程,在一定程度上自动完成测试、文档和部署。
  3. 对安全性的敏感,不同的层都可能有自己的脆弱点。


最后:

应用严重依赖一个特定的第三方实现(lib、系统、硬件等)是非常糟糕的实践。全栈开发者要知道了解全面不代表就可以走捷径。当然在抛弃原型法中,他们可以这么干。

在技术起步时很需要全栈开发者的多面技能。然而,在团队定型后,会越来越需要专注技能。


我不觉得在具备了多语言、多平台甚至跨行业的职业生涯之前,你可以称自己为全栈开发者。全栈远超“高级工程师”,它更接近是多语言的开发者并且能在更高的角度看到之间的关联。注意在我的列表中只有3-5项涉及到编码。

相关文章
|
Rust 数据可视化 网络安全
一款高颜值、现代化的 Git 可视化管理工具
GitButler 是由 GitHub 联合创始人 Scott Chacon 开源的 Git 客户端,采用 Tauri/Rust/Svelte 构建。它支持虚拟分支、轻松提交管理、GitHub 集成、SSH 密钥管理和 AI 工具等功能,目前仅支持 macOS 和 Linux 平台。用户可以通过拖拽方式快速聚合多个分支的改动,实现灵活的跨分支操作。
|
9月前
|
机器学习/深度学习 人工智能 前端开发
魔搭社区模型速递(3.23-3.29)
🙋魔搭ModelScope本期社区进展:619个模型,93个数据集,151个创新应用,7篇内容。
407 4
魔搭社区模型速递(3.23-3.29)
|
8月前
|
人工智能 Cloud Native 关系型数据库
三项第一,阿里云连续4年领跑游戏云市场
国际数据公司(IDC)最新发布《中国游戏云市场跟踪》报告显示,2024年阿里云在游戏云基础设施(IaaS)+ 云解决方案(Cloud Solution)、云基础设施(IaaS)、云解决方案(Cloud Solution)三个市场均取得第一。这已经是阿里云连续4年稳居游戏云整体市场份额第一。
|
安全 Android开发 iOS开发
Android vs iOS:哪个操作系统更适合你的智能设备?
在今天的移动设备市场上,Android和iOS是两个主要的操作系统选择。本文将分析它们的优缺点,帮助读者选择最适合自己需求的操作系统。 【7月更文挑战第6天】
277 2
|
安全 Java Linux
docker阿里云镜像加速
我们都知道因为某些原因我们访问外网都是比较慢的,比如我们使用maven下载依赖时是一个道理,同样的使用docker从docker.hub上下载镜像也是比较慢的。针对这种访问官网比较慢的情况有两种方案,第一种就是使用国内的仓库,第二种就是使用一个加速器。这里我们配置docker的镜像加速从来来实现提速。
14420 1
docker阿里云镜像加速
|
存储 安全 Java
🌟Java零基础-反序列化:从入门到精通
【10月更文挑战第21天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
301 5
|
缓存 监控 安全
Spring AOP 详细深入讲解+代码示例
Spring AOP(Aspect-Oriented Programming)是Spring框架提供的一种面向切面编程的技术。它通过将横切关注点(例如日志记录、事务管理、安全性检查等)从主业务逻辑代码中分离出来,以模块化的方式实现对这些关注点的管理和重用。 在Spring AOP中,切面(Aspect)是一个模块化的关注点,它可以跨越多个对象,例如日志记录、事务管理等。切面通过定义切点(Pointcut)和增强(Advice)来介入目标对象的方法执行过程。 切点是一个表达式,用于匹配目标对象的一组方法,在这些方法执行时切面会被触发。增强则定义了切面在目标对象方法执行前、执行后或抛出异常时所
17355 4
基于LangChain手工测试用例转Web自动化测试生成工具
该方案探索了利用大模型自动生成Web自动化测试用例的方法,替代传统的手动编写或录制方式。通过清晰定义功能测试步骤,结合LangChain的Agent和工具包,实现了从功能测试到自动化测试的转换,极大提升了效率。不仅减少了人工干预,还提高了测试用例的可维护性和实用性。
|
iOS开发 MacOS
CocoaPods安装失败解决方法
CocoaPods安装失败解决方法
337 2
|
机器学习/深度学习 人工智能 算法
在 AI Native 环境中实现自动超参数优化的微调方法
【8月更文第1天】随着人工智能技术的不断发展,深度学习模型的训练变得越来越复杂。为了达到最佳性能,需要对模型进行微调,特别是对超参数的选择。本文将探讨如何在 AI Native 环境下使用自动化工具和技术来优化模型的微调过程。
609 5