2015年终总结与2016年度计划 - 第二部分

本篇是2015年度总结与2016年度计划的第二篇,

主要是对个人技能和能力做一个梳理和总结, 找到自己的定位.

之所以会有这样一篇, 有两个触发原因:

一是根据之前分享的知道创宇研发技能表,
也早就想按照这个研发技能表对自己的研发技能进行梳理;

二是近期看到这样一篇好文章——听说你又在写自嗨型的年度计划?
里面对如何写出有意义的年度总结和计划提出了很好的建议.

本篇blog首先比照知道创宇研发技能表, 进行技能梳理.

专业技能会放在通用技能前面(与原表的顺序不同), 并不是说专业技能比通用技能更重要,

仅是想优先整理一下专业技能.

前面是技能表里面的类别, 后面补充我对这个技能的理解.

然后对工作以来从事的主要项目进行一下总结.

专业技能

原则

  • 看完与练习好一本书(我看完并练习过的: Java核心技术卷I, Python基础教程)
  • 至少看过一遍官方文档(没有100%完成看过, 但是遇到问题一般都会先查官方文档)

基础必备

Office能力

  • Word文档
  • Excel统计与图表
  • PPT演讲分享
  • Visio画图

抓包与调试

  • wireshark(之前在通信公司工作用的非常多, 现在主要用在接口调试方面)
  • chrome console(主要用于页面调试和接口测试)
  • postman(接口测试)
  • tcpdump(linux上的抓包工具, 可另存为pcap文件供wireshark分析)

HTTP协议

  • 基本消息流程(wireshark查看: TCP握手, HTTP交互)
  • 基本消息及格式(GET, POST, Header, User-Agent, Cookie)
  • 常用结果码(200 OK, 201 Created, 204 No Content, 301 Moved Permanently, 302 Moved Temporarily, 304 Not Modified , 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not found, 500 Server Internal Error, 502 Bad Gateway)

Linux

  • 常用Ubuntu, CentOS

正则

  • 正则提取微博内容短链
  • 正则提取固定格式中的某段文本

研发能力

  • 熟悉开发模型(瀑布, 快速版本迭代)
  • 需求分析能力(在汽车相关项目中做过需求分析的工作)
  • 调试能力(根据bug现象, 迅速进行bug定位和修复)
  • 敏捷思想(任务拆分, 快速迭代)

翻墙

  • 自备ss + do vps + chrome + ss android&ios

Web安全和嵌入式安全

研发清单

编码环境

使用过的编码环境主要是:

  • Eclipse, Jetbrains
  • vi
  • notepad++

主要框架

用过的主流框架有:

  • SSH
  • Django, Flask
  • jQuery(包括datatable等插件)
  • Bootstrap
  • ECharts

部署环境

  • tomcat, jetty
  • uwsgi
  • nginx

版本控制

  • IBM-rational, svn, mercurial, git

爬虫

  • 使用Java开发过url爬虫(研究过开源Crawler4j框架)
  • 使用python(requests+beautifulsoup)开发过url爬虫(研究过开源scrpy框架)

调度

  • crontab
  • spring-quartz
  • celery

并发

  • Java编写的url爬虫中应用了future实现多线程
  • python开发中对于io bound的应用使用多线程

消息接口规范

  • SOAP
  • JSON
  • Protobuf

数据存储及处理

使用过的主流数据库有:

  • Mysql
  • Greenplum
  • Redis
  • Oracle 11g
  • sqlite
  • hsql

使用过的大数据处理平台和工具有:

  • Hadoop
  • MRv1
  • Hive
  • Pig
  • ElasticSearch

DevOps

  • Fabric

调试

  • visualVM
  • log4j
  • logging
  • vmstat

算法工具

  • 分词: IKAnalyzer, jieba
  • 贝叶斯: sklearn.naive_bayes
  • 聚类: sklearn.cluster(K-Means)
  • 关联规则挖掘(购物车推荐)

持续集成

  • Jenkins

设计思想

模块设计

  • 高内聚低耦合(从大模块到小方法, 均要遵循: 功能单一且完整, 对外暴露接口清晰简单)
  • 自顶向下逐步细化

接口设计

  • API接口
  • 消息接口
  • 队列接口(生产者消费者模式)

分布式

  • redis接口
  • 观察者模式(发布-订阅)

资源考虑与评估

  • CPU
  • 内存
  • 带宽

牛人1,2,3

  • 研究: 研究问题或是方案
  • 研发: 解决问题, 实现方案
  • 工程: 项目工程化, 去玩具化

通用技能

公司与个人

公司是盈利组织: 公司存在的目的就是为老板和股东带来收益

个人和公司必须双赢: 公司如果只考虑自身的利益, 而不考虑员工的, 这样的公司是不值得为之工作的

在认同公司理念且能够给公司创造足够价值的基础上, 为个人发展而工作

WHO AM I

研发工程师

如何做事

方法论

  • 动手之前先动脑
  • 找到最有效的解决方法

任务拆分

  • 优先级划分(任务四象限)
  • SMART原则(是否明确, 是否可度量, 是否能完成, 任务的相关性如何, 任务的时间)

团队

  • 一个优秀的leader会让团队效率大大提高
  • 团队的和谐和士气非常重要
  • 其次是合理分配并调度任务
  • 最后是团队内的评审和激励

沟通, 反馈与责任

  • 善于沟通, 沟通要平和, 不要做一个"封闭"的人
  • 反馈要及时(上级需要的是积极, 及时的反馈, 而不是出了问题才反馈)

责任心

  • 不光要为自己负责, 也要为公司负责
  • 自己的任务之外, 更要关心整体的任务情况

周报

  • 不是单纯的给领导汇报工作, 而是对自己工作的总结和回顾, 找出自己工作的不足点
  • 不仅有本周工作总结, 也要有下周工作计划, 以及工作 心得/问题/建议 等
  • 大家相互了解任务和进度, 有利于整体了解公司情况
  • 多观察别人的总结和表达(说话)方式
  • 体现一个人的: 总结能力, 计划能力, 分享能力

成长

新事物的敏感性

  • 保持好奇心, 保持对业界的关注(适当订阅一些优秀博客和信息源)
  • 不要局限在自己既有的圈子(舒适区), 适当跨界(跳出舒适区, 进入学习区)

关于知识

  • stay hungry, stay foolish
  • 保持知识更新

和优秀的人一起工作

  • 优秀的人的指点往往是精华
  • 杜绝笨蛋爆炸(二流的人招进来的人不太可能是一流的, 久而久之一个团队就笨蛋爆炸了)

思考

  • 批判性思考
  • 换位思考

提问的智慧

  • 遇到问题先独立思考, 独立解决, 尽最大努力后再提问
  • 提问时, 清晰表达问题, 如有可能, 同时给出自己的思考和解决方式
  • 得到答案后, 尽快验证, 并且思考为什么自己之前想不到这样的解决方式
  • 对问题的积累和分享

小事心态

  • 越基础的事越关键, 越需要细心
  • 不要盲目追求"高级感/优越感", 忽略了 小事/简单事/基础事

沉淀

  • 无论是个人还是团队的成长都需要不断沉淀知识,没有沉淀根基不稳
  • 写博客, 周报, 做分享都是沉淀的手段

完成的定义

  • 搞清楚需求
  • 准备好测试用例
  • 理清思路, 做好设计
  • 动手写代码(代码是写给人看的)
  • 进行测试
  • 中间要及时反馈进度(困难, 完成情况)
  • 及时更新文档, 并进行沉淀

熟练的定义

  • 长时间(大于1000小时)反复的练习
  • 读过常用包的源码, 可以修改源码
  • 熟练之后的创新

好书推荐

主要项目

HSS

TD-LTE中的用户归属服务器(Home Subscriber Server)的开发.

功能

  • Web console, 完成HSS用户数据库和配置数据库的CRUD
  • Diameter protocol stack, 完成与其他网元的消息交互(RFC3588和3GPP协议相关开发为主)

收获

  • 关系型数据库的应用(先后使用过mysql, hsql, oracle 11g等关系型数据库)
  • 学习并实践了Java web开发(基于SSH, 部分直接使用Servlet; 使用HTML+原生JS制作JSP页面)
  • Java版本的Diameter协议栈的开发(使用多线程处理消息队列; 基于TCP, SCTP, UDP协议的通信模块开发; HSS相关的3GPP协议消息功能模块开发)
  • 软件管理和开发的流程(即软件工程的理论和流程等, 在中大规模的软件开发中这是必需的)
  • 测试驱动的开发(设计完成后, 先编写测试用例, 然后才开始编码实现, 接着按照之前编写的测试用例进行自测)

教训

  • 在web开发中基于SSH开发时, 因为各种框架都是搭建好的, 仅需要填充业务逻辑代码即可, 在这里对JAVA OOP的实践比较少(框架已经完成了)

爬虫

各种专用和通用爬虫的开发

功能

  • 爬虫的基本架构应是生产者(发现URL)-消费者(抓取URL的HTML数据并解析关心的内容)模式
  • 自己完成并开源的Java版本批量url爬虫(带有简单的web页面)
  • Python完成的各种专用爬虫(网易, 汽车之家等)
  • 基于selenium的浏览器爬虫(效率较低, 但是解析效果最好)

收获

  • 代码中模拟真实浏览器请求
  • 各种HTTP请求和解析的module的使用(HTTPClient, soup, requests, BeautifulSoup等)

教训

  • 欲速则不达

汽车产品(外包开发)

作为产品主要负责人, 进行产品需求收集和沟通, 编写需求文档, 招标外包团队, 与外包团队沟通并验收

功能

  • 实现一个简单的汽车垂直网站(带有车型库, 具备用户线索收集功能, 可以发布评测文章,软文和专题活动页面, 具有短信营销功能和简单的数据分析功能——主要针对专题页面)
  • 产品并不作为垂直网站推广, 而是"嵌入"其他综合媒体的汽车频道, 为他们提供车型数据, 车型文章并收集用户线索

收获

  • 产品从无到有的完整过程
  • 初创产品的艰难(无数的讨论, 加班, 外包的沟通和返工)
  • 产品刚上线问题较多时, 自己上阵修改PHP代码中的bug
  • 四处出差与媒体的汽车频道进行沟通和对接, 有时候白天开会讨论接口和数据, 晚上就要加班写接口文档并准备第二天的讨论
  • 产品的思路很好, 将一些低效(车型数据和文章等的管理维护)和高成本(研发,维护和运维)的东西封装在了产品内部, 提供给第三方使用时又提供了足够的灵活性(可以自由嵌入广告, 查看用户线索数据等)

教训

  • 国内的外包公司太不靠谱
  • 受媒体制约较大: 在与媒体的对接中, 我们属于乙方, 媒体是否同意接入这个产品决定了产品的生死

APP广告投放产品(自主研发 + 外包开发)

开始时作为自研数据分析部分的主要研发人员参与进项目,
中后期作为研发负责人.

功能

  • Web console, 实现广告数据CRUD, 以及数据分析任务管理, 报表数据的查看等
  • 对外接口部分, 对接移动广告投放平台, 下发广告数据触发投放
  • 数据分析部分, 实现投放日志数据的回收, ETL, 分析(报表分析和人群标签分析等)

收获

  • 见Part I部分

教训

  • 见Part I部分

Comments

blogroll

social