全栈数据工程师:从0到1

全栈的定义

1. 具备在简单产品项目上将产品理念快速、有效地转化为产品价值的全部技术能力

2. 对于软件工程的生命周期的复杂性有初步认识,并能使用成熟方法和工具来控制复杂性

职能描述

你的主要任务是把代码写对(Code Right)。

一个合格的助理devops,能够维护一个Linux/unix的开发环境,进行利用既有平台工具实现单一应用服务的持续集成和持续部署(CI/CD)。为此,你应该掌握常见的shell脚本;掌握基于git的项目流程管理;熟练使用pipenv来维护软件虚拟环境;并使用docker及其关联的平台组件来构建CI/CD流程。

一个合格的助理工程师,能够独立完成一个模块的开发和测试。你能够向一个架构明确的项目中增补功能而不破坏现有代码或者降低整体代码质量;你能够编写必要的单元测试、集成测试和网页自动化测试;如果给你提供线上报错的堆栈,你能在合理的时间内找到bug所在并消灭之。为此,你应该了解计算机科学的基础性知识,熟悉最基本的设计模式,并践行测试驱动的代码开发和重构。

一个合格的助理前端开发,能够根据原型图实现网页开发。你能够渲染基础的网页组件;处理简单用户交互带来的前后端数据交互;你对于用户交互体验有基本的认知,能够察觉并优化易用性问题。为此,你应该熟悉H5和CSS的基本语法,了解MVC模式,能够使用一种前端框架,并且了解用户界面设计的基本原则。

一个合格的初级数据科学家,能够对于一个应用场景明确、数据操作化定义明晰的业务问题进行描述统计、简单假设检验、分类与预测。你能够从不同来源的数据库中获得你想要的原始数据,通过数据清洗构建特征,并利用成熟数据模型和流程得到结论。为此,你应该了解基本的统计学知识,掌握OLS/logit模型,学会调用常见的机器学习模型,并且具备基本的业务分析(Business Intelligence)能力。

在大多数公司,上述四个角色是4个不同的职位;而在我们团队,只有1个职位。因此,你一年内需要学习的,可能相当于别人三四年的经验。这是对你天赋、毅力和时间管理能力的重要考验。除了向书本和教程学习,你更需要向前辈和同僚学习:能够在code review过程中接受他们的建设性意见,并且积极向他们提出有意思的问题。

最后,你需要“学会上班”。遵守公司/团队的组织纪律,学会高效利用上班时间,学会团队合作,并开始有自己职业规划。


晋升规则

分数分布:

  1. 非技术要求 – 10
  1. 基础知识 – 20
  1. IT/CS – 5
  1. 编程 – 10
  1. 统计学 – 5
  1. 技术要求 – 70
  1. Server, Network and Hosting Environment – 10
  1. Data Modeling – 13
  1. Business Logic – 20
  1. Action Layer – 11
  1. User Interface – 6
  1. User Experimence – 5
  1. Product Value – 5

得分规则

(1a) 考核方法为项目,需要由申请者提交项目报告书;团队技术评审通过后,得到全部分数

(1b) 考核方法为面试,由面试官打分;考核方法为笔试,按笔试成绩比例给分

(1c) 未标明考核方法的,由申请者提交自评分数和陈述;团队技术评审酌情给分

(2)额外奖励分数由团队技术评审酌情授予

入职要求

完成全部必修课程(标记黄色高亮的是必修内容)

  1. 总积分达到50分
  1. 分类别积分最低积分要求
  1. 基础知识 >= 16
  1. 技术要求 – Server, Network and Hosting Environemtn >= 6
  1. 技术要求 – Data Modeling >= 9
  1. 技术要求 – Business Logic >= 10
  1. 技术要求 – Action Layer >= 6
  1. 技术要求 – User Interface >= 3

加薪要求

每积20分可以要求加薪一次

晋升T2要求

  1. 总积分达到90分以上
  1. 分类别积分要求:
  1. 非技术要求得分率不低于95%
  1. 基础知识满分
  1. 技术要求中的Data Modeling、Business Logic和Action Layer得分率不低于95%
  1. 技术要求中的单项得分率不为0

1.非技术要求 [10]
1.1 Google It [2]

定义:

使用Google作为搜索引擎;(大部分情况下)使用stack overflow

训练方法:

将Google做为默认地址栏搜索工具

将英语做为默认搜索语言

1.2 Ask Right Question [5]

定义:

你可以问一个愚蠢的问题,但是你不应该问一个没有思考过、没有探索过的问题

训练方法:

How to ask questions the smartest way By Eric Raymond and Rick Moen

How do I ask a good question by StackOverflow

面试考核:展示一个你在stackoverflow/github上提交的问题/issue,并说明它符合社区规范

1.3 Be A Team Player [3]

定义:

Trust, conflict, committment, accountability, results

Care personally, challenge directly

Radically Transparent

训练方法:

阅读 Five Dysfunctions of a Team by Patrick Lecioni

阅读 Radical Candor By Kim Scott

阅读 Principles By Ray Dalio

笔试考核

2 基础知识 [20]
2.1 IT/CS 基础知识 [5]

定义

理解互联网协议:IP地址,端口,socket,TCP协议

理解web工作方式:URL/DNS,HTTP协议,request种类,response结构,状态码

CPU管理:CPU, Core, 进程/线程/协程

训练方法:

互联网协议入门 by 阮一峰

web工作方式 by Asta Xie

Intro to Threads and Processes in Python, by Breden Fortuner

笔试考核

2.2 编程基础知识 [10]

2.2.1 数据类型 [2]

string,int,float

list,tuple, dictionary, namedtuple

data abstraction

2.2.2 控制 [2]

if, for, while, yield

2.2.3 组件 [3]

function, higher order function(decorator)

recursion

object

function oriented programming

object oriented programming

2.2.4 IO [1]

txt, csv, json的读写

bytes

unicode

2.2.5 python包 [2]

os(主要是path函数)

sys(主要是subprocess和命令行传参)

collections(这里面函数值得研究)

black

ipdb

datetime

训练方法:

cs61a by UC Berkeley

Learn python the hard way by Zed Shaw

A Hitchhiker’s guide to Python by realPython

笔试考核

2.3 统计学 [5]

事件/随机变量

条件概率/独立事件/贝叶斯

常见离散分布(Bernoulli,Binomial, Poisson)

常见连续分布(Uniform,Normal,Beta)

统计量(均值,方差,分位数)

从分布中抽样

训练方法:

Think Stats(Chp.1,2,5,7) by Allen B Downey

Think Stats(Chp.3,4,6) by Allen B Downey

笔试考核

3技术要求 [70]
3.1 Server, Network, and Hosting Environment [8]
3.1.1 Shell [2]

定义:

yum/apt-get/brew isntall

nohup

文件通道符

crontab

grep

训练方法:

The art of command line by jlevy

笔试考核

3.1.2 GIT [4]

定义:

git pull – commit – push

git checkout

git rebase

git merge / resolve conflict

git tag

训练方法:

Git tutorial,着重学习workflow management

面试考核:在一个toy project上展示上述git操作

3.1.3 PIPENV [2]

定义:

pipenv –py / –three/two / –rm

pipenv install (–dev) (–skip-lock)

pipenv install git+

pipenv shell

pipenv graph

理解Pipfile和Pipfile.lock的作用

训练方法:

pipenv 文档

面试考核:从0构建一个pipenv,分开安装生产/开发包,通过git在另一个服务器上复制该环境

3.1.4 vim [2]

定义

(1) 学使用vim,并配置以下插件

syntastic(或其他语法检查)

youcompleteme(或其他自动补全)

black

(2) 能够自定义快捷键

训练方法

https://vim-adventures.com

面试考核:在vim8(with python3 support)上配置vimrc来安装这些包,确保可以使用

3.2 Data Modeling [13]
3.2.1 数据库类型 [1]

定义:

解SQL和NO SQL的概念和优劣

理解Key-Value Store的优势和局限

理解ElasticSearch的基本原理

训练方法:

Database by 付剑

笔试考核

3.2.2 MySQL [4]

定义:

create table的基本语法

left /inner / right join

group by

order by

index

insert (overwrite)

load data in file

(transaction)update

训练方法

HackerRank SQL module

sqlalchemy tutorial

项目考核

3.2.3 Mongo [5]

定义:

insert

delete

update

replace

find

unqiue

elemMatch

group_by / aggregate

训练方法

pymongo tutorial

mongoengine tutorial

项目考核

3.2.5 ELK [3]

定义:

Kafka的基本概念和用法

ElasticSearch基本语法

Kibana制作visualize dashboard

训练方法

python kafka tutorial

python elasticsearch tutorial by Julie Qiu

项目考核

3.3 Business Logic [22]
3.3.1 Acceptance Test [2]

定义

behavior driven development

behave框架

训练方法:

introduction to bdd by Dan North & Associates

笔试考核

3.3.2 Unit Test [2]

定义

单元测试编写的基本原则

python unittest(特别是mock和monkey patch)

训练方法

A programming episode by Robert C. Martin, Micah Martin

python web tdd by Harry Parcival

项目考核

3.3.3 测试自动化[1]

定义

使用selenium进行web测试自动化

训练方法

python selenium tutorial

3.3.4 设计模式 [5]

定义

Single Responsibility

Open Close Principle

Liskov Substitution Principle

Interface Segregation Principle

Dependency Inversion Principle

训练方法:

Agile Principles, Patterns, and Practices in C# (Chp.8-12) By Robert C. Martin, Micah Martin

SOLID in Python by dboyliao

项目考核:提交一个code refactor/design例子来证明你在工作中使用了这些原则(LSP可以不考核)

3.3.5 Refactor [4]

定义:

了解基本的重构原则

熟悉重构的一般步骤

train your nose for the smell of the bad code

训练方法:

Refactoring by Martin Folwer

Clean Code:A Handbook of Agile Software Craftmanship By Robert C. Martin

3.3.6 性能监控 [1]

定义:

使用python profiler和snakeviz对于代码进行性能监控

能够进行API压力测试

训练方法:

cProfile tutorial

3.3.7 经典统计(or 计量经济学)[3]

定义:

OLS模型进行预测

OLS进行假设检验

训练方法:

Think Stats(Chp.10,11) by Allen B Downey

面试考核

3.3.8 机器学习 [4]

定义:

数据清洗(ETL)

特征提取

svm/logit/decision tree/gbdt/random forest选型

cross-validation调参

训练方法:

sckit-learn CV调参官方教程

项目考核

3.4 Action Layer [11]
3.4.1 MVC [1]

定义

理解模型层、展现层和控制层的功能及这种设计模式的优点

训练方法

Simple Example of MVC Design

笔试考核

3.4.2 API [1]

定义

API设计

flask api服务

训练方法

Effective API Design

项目考核

3.4.3 交互控件 [2]

定义:

提供基本交互:按钮、下拉、alert、弹窗

训练方法:

Forms by 付剑

项目考核

3.4.4 Flask [4]

定义:

能够用flask完成后端驱动的网页服务

训练方法:

CURD application with Flask by Mbithe Nzomo

Test a Flask App with Selenium Web Driver by Mbithe Nzomo

Flask-bootstrap Tutorial

项目考核

3.4.5 Asyncio [3]

定义

asyncio

aiohttp

motor

训练方法

Get to grips with asyncio in Python 3 by Robert Smallshire

A Guide to Asynchronous Programming in Python with Asyncio by Roman Gaponov

项目考核

3.5 User Interface [6]
3.5.1 HTML5 & css[5]

定义:

元素:doc/ p / div / table / img/ hyperlink / iframe

属性:height, width, color, align, position, etc

事件:windows, form, keyboard, mouse, etc

训练方法

Learn HTML by CodeAcademy

项目考核

3.5.2 基础数据可视化工具 [1]

定义:

Tufte 可视化原则

散点图

条形图

线图

概率直方图

boxplot

训练方法:

Matplotlib Intro Tutorial

Matplotlib Tutorial

项目考核

3.6 User Experience [5]

定义

尼尔森十大交互原则

笔试考核

3.7 Product Value [5]

定义

给定AB Test数据,进行假设检验分析

Minimum Viable Product

训练方法

Think Stats(Chp.8,9) by Allen B Downey

面试考核

 

“全栈数据工程师:从0到1”的一个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注