Nodejs 全栈开发者是什么 What is a Full Stack developer?
Nodejs 全栈开发者是什么 What is a Full Stack developer?
纯粹基于道德而掌握开发堆栈的每一方面的预期是合理的吗?可能不是,但Facebook这样要求。一个Facebook的员工在OSCON告诉我,Facebook只雇佣全栈开发者。那么全栈开发者是什么意思呢? 对我来说全栈开发者是对每一层都熟悉的人,如果不真正对所有的软件技术感兴趣不会对它们精通。 好的开发者熟悉整个堆栈,他们是知道如何使生活周边的事更容易的人。这就是为什么在办公室我如此反对偏执的原因,当然,政治及沟通挑战在大型组织中还是按固有的套路。我认为Facebook所持有的招聘政策是:如果聪明的人用脑用心,就能在更短的时间内构件更好的产品。
全栈的层:
###1.服务器、网络和服务器环境
知道哪里可能崩了和为什么会崩,没有什么是理所当然的。 适当的使用文件系统,云存储、网络资源,必须具备数据冗余和可用性的概念。 知道应用的伸缩性对硬件的需求。 什么是多线程和竞争条件?想想看,在开发机上你可能看不到这些,但是现实环境中它们就是会发生。 全栈coder还要能与运维并肩作战。提供有价值的错误信息和日志。确保它们是可靠的,因为运维会在你之前看到这些东西。(原文为DevOps)
###2.数据建模 如果数据模型有缺陷,业务逻辑和上层逻辑就要用奇怪的代码(很丑)来弥补数据模型的缺陷。 全栈开发者要能够建立合理的、标准的关系模型,包括外键、索引、视图、查找表等。 全栈开发者要熟悉非关系型数据存储(应该指的不止是NoSQL),并且知道它们相对关系型存储优势所在。
###3,业务逻辑 应用提供的核心价值。 可靠的面向对象技能。 可能会用到的框架。 ###4,API层、Action 层、MVC
理解外部对数据模型和业务逻辑的操作。 该层会有很多框架应用。 全栈开发者要具备编写清晰、一致和易用的接口。过高的复杂度让人厌恶。
###5,UI 全栈coder:a)知道如何创建可读的页面布局;b)或者明白自己需要帮助设计师。A或B,关键是要能有好的视觉设计。 掌握HTML5和CSS。 JS正在逐步成为语言新锐,Javascript的世界里已经完成了很多激动人心的工作(node, backbone, knockout…)。 ###6.用户体验 全栈coder要知道用户需要的就是It works! 一个好的系统不会废了用户的手腕和眼睛。一个全栈coder会发现和审视需要8次点击、3步操作的流程,并最终把它一键搞定。 提供有价值的错误信息。如果崩溃了,就要向用户致歉。有时候程序员会写出让用户自我感觉很二的错误信息。 ###7.知道用户和业务到底要什么 现在我们模糊了架构的界限,但却可能远离了实际需求。 全栈coder要明确知道用户使用软件时的场景,而且要领会业务。
###关于这个问题的其它方面: 编写高质量的单元测试能力。顺便说一下现如今连JS也可以做单元测试了。 持续集成。发掘程序构建中重复、可自动化的流程,在一定程度上自动完成测试、文档和部署。 对安全性的敏感,不同的层都可能有自己的脆弱点。 最后: 应用严重依赖一个特定的第三方实现(lib、系统、硬件等)是非常糟糕的实践。全栈开发者要知道了解全面不代表就可以走捷径。当然在抛弃原型法中,他们可以这么干。 在技术起步时很需要全栈开发者的多面技能。然而,在团队定型后,会越来越需要专注技能。 我不觉得在具备了多语言、多平台甚至跨行业的职业生涯之前,你可以称自己为全栈开发者。全栈远超“高级工程师”,它更接近是多语言的开发者并且能在更高的角度看到之间的关联。注意在我的列表中只有3-5项涉及到编码。
转自:http://www.oschina.net/translate/what-is-a-full-stack-developer
Node.js 全栈开发者是什么
What is a Full Stack Developer?
在当今的软件开发领域,全栈开发者是指能够处理从服务器端到客户端整个技术栈的开发者。这不仅意味着他们需要掌握多种编程语言和技术,还意味着他们能够在不同层次上做出明智的设计决策。
纯粹基于道德而掌握开发堆栈的每一方面的预期是合理的吗?
可能不是,但Facebook这样要求。一个Facebook的员工在OSCON告诉我,Facebook只雇佣全栈开发者。那么全栈开发者是什么意思呢?
对我来说,全栈开发者是对每一层都熟悉的人,如果不真正对所有的软件技术感兴趣,是不会对它们精通的。
好的开发者熟悉整个堆栈,他们是知道如何使生活周边的事更容易的人。这就是为什么在办公室我如此反对偏执的原因,当然,政治及沟通挑战在大型组织中还是按固有的套路。我认为Facebook所持有的招聘政策是:如果聪明的人用脑用心,就能在更短的时间内构建更好的产品。
全栈的层
1. 服务器、网络和服务器环境
- 服务器和网络:知道哪里可能崩了和为什么会崩,没有什么是理所当然的。
- 文件系统和存储:适当的使用文件系统,云存储、网络资源,必须具备数据冗余和可用性的概念。
- 伸缩性:知道应用的伸缩性对硬件的需求。
- 并发编程:什么是多线程和竞争条件?想想看,在开发机上你可能看不到这些,但是在现实环境中它们就是会发生。
- DevOps:全栈开发者还要能与运维并肩作战。提供有价值的错误信息和日志。确保它们是可靠的,因为运维会在你之前看到这些东西。
// 示例代码:Node.js 中处理文件系统的简单示例
const fs = require('fs');
fs.readFile('/path/to/file', (err, data) => {
if (err) throw err;
console.log(data);
});
2. 数据建模
- 关系型数据库:全栈开发者要能够建立合理的、标准的关系模型,包括外键、索引、视图、查找表等。
- 非关系型数据库:全栈开发者要熟悉非关系型数据存储(应该指的不止是NoSQL),并且知道它们相对关系型存储的优势所在。
// 示例代码:使用MongoDB进行数据建模
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: String,
email: { type: String, unique: true },
password: String
});
const User = mongoose.model('User', userSchema);
module.exports = User;
3. 业务逻辑
- 面向对象编程:可靠的面向对象技能。
- 框架:可能会用到的框架。
// 示例代码:使用Express框架处理业务逻辑
const express = require('express');
const app = express();
app.get('/users', async (req, res) => {
const users = await User.find();
res.json(users);
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
4. API层、Action 层、MVC
- 接口设计:理解外部对数据模型和业务逻辑的操作。
- 框架:该层会有很多框架应用。
// 示例代码:使用Express构建RESTful API
app.post('/users', async (req, res) => {
const newUser = new User(req.body);
await newUser.save();
res.status(201).json(newUser);
});
5. UI
- HTML/CSS/JavaScript:全栈开发者要能创建可读的页面布局。
- 前端框架:掌握HTML5和CSS,以及JavaScript的世界里完成了很多激动人心的工作(如Node.js, Backbone, Knockout等)。
<!-- 示例代码:简单的HTML页面 -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Simple Page</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div id="content">
<h1>Welcome to My Website</h1>
<p>This is a simple example of a full stack application.</p>
</div>
<script src="script.js"></script>
</body>
</html>
6. 用户体验
- 简洁性和效率:一个好的系统不会废了用户的手腕和眼睛。一个全栈开发者会发现和审视需要8次点击、3步操作的流程,并最终把它一键搞定。
- 错误信息:提供有价值的错误信息。如果崩溃了,就要向用户致歉。
// 示例代码:处理用户输入错误
app.post('/login', (req, res) => {
const { username, password } = req.body;
if (!username || !password) {
return res.status(400).json({ error: 'Username and password are required' });
}
// 进行登录验证逻辑
});
7. 明确用户和业务需求
- 场景分析:全栈开发者要明确知道用户使用软件时的场景,而且要领会业务。
// 示例代码:根据用户需求调整功能
app.get('/profile', authenticate, (req, res) => {
// 根据用户角色返回不同的数据
if (req.user.isAdmin) {
res.json({ ...req.user, adminData: 'Some admin info' });
} else {
res.json(req.user);
}
});
其他方面
- 单元测试:编写高质量的单元测试能力。
- 持续集成:发掘程序构建中重复、可自动化的流程,在一定程度上自动完成测试、文档和部署。
- 安全性:对安全性敏感,不同的层都可能有自己的脆弱点。
- 依赖管理:避免过度依赖特定的第三方实现(lib、系统、硬件等)。
全栈开发者需要具备广泛的技术知识和技能,但并不意味着可以忽视某些细节。相反,他们应该知道何时深入研究某个问题,何时寻求帮助,以及何时利用现有的工具和框架。
全栈开发者指的是能够处理从底层服务器和网络配置到前端用户界面的所有工作的开发者。全栈开发者通常需要掌握多种技术,以便在项目中灵活地应对不同层面的需求。
以下是一些示例代码,展示了全栈开发者可能需要涉及的一些技术:
1. 服务器、网络和服务器环境
// 使用Express.js搭建简单的HTTP服务器
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
2. 数据建模
// 使用Mongoose定义一个简单的数据模型
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: String,
email: { type: String, unique: true },
password: String
});
const User = mongoose.model('User', userSchema);
module.exports = User;
3. 业务逻辑
// 示例业务逻辑:注册新用户
const User = require('./models/User');
async function registerUser(name, email, password) {
const user = new User({ name, email, password });
await user.save();
return user;
}
4. API层、Action层、MVC
// 使用Express.js定义一个简单的API
app.post('/register', async (req, res) => {
try {
const { name, email, password } = req.body;
const newUser = await registerUser(name, email, password);
res.status(201).json(newUser);
} catch (error) {
res.status(500).send(error.message);
}
});
5. UI
<!-- 示例HTML页面 -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>User Registration</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<form id="registrationForm">
<label for="name">Name:</label>
<input type="text" id="name" name="name" required>
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required>
<button type="submit">Register</button>
</form>
<script src="scripts.js"></script>
</body>
</html>
6. 用户体验
// 示例JavaScript代码以提升用户体验
document.getElementById('registrationForm').addEventListener('submit', async (event) => {
event.preventDefault();
const formData = new FormData(event.target);
const response = await fetch('/register', {
method: 'POST',
body: formData
});
if (response.ok) {
alert('Registration successful!');
} else {
alert('Registration failed. Please try again.');
}
});
全栈开发者不仅需要编写代码,还需要理解整个系统的工作原理,从而更好地优化性能、提高代码质量以及确保系统的安全性。