TOC

Web 开发者的自我修养

做一个高效的、能为团队带来更多价值的 Web 开发者。

一、基本原则

  1. 我的职业是 Web 开发,做这份工作既是为了赚钱,也是因为我真的热爱 Web 开发。
    • 为了更好的工作,主要精力应当放在 Web 开发相关领域上。
    • 工作只是生活的一部分,我们还有更重要的事情需要关注,永远不要忘记这一点。
  2. 效率就是能力:程序运行效率、开发效率、维护效率。
  3. 不要太依赖工具,万一离开了自己熟悉的开发环境,难道只能眼睁睁的看着时间流逝?
  4. 开发流程中应该有以下两项:准备调试环境、单元测试(对自己的代码负责)。
  5. 技术为业务服务,不要想着做纯技术,要了解业务,也就是要了解你开发的产品。
    不了解业务的开发就叫做闭门造车。
  6. 善于利用已有的资源做出更大的成就,而不是总想着重复发明轮子。
    不过,为了深入地学习和研究某些关键的领域,我们还是会反复造轮子,这很正常。
    即便不用反复造轮子研究,关键的轮子还是需要熟练掌握、彻底理解。
  7. 自学、分享、总结、反省。
  8. 团结:多交朋友少结怨。
  9. 开发过程中遇到问题应该先尝试自己解决,至少不要在一个问题上找别人两次。
  10. 学习不是复制 + 粘贴,常用的知识点,一定要记在脑子里。
  11. 可以当面说的就不要 QQ 聊,重要的沟通成果一定要以邮件形式发给所有相关人员。
  12. 如果做不到就要说 NO,但如果说了 YES 就一定要做到。
    工作目标的达成,如果出现风险,一定要及时报告。
  13. 工作任务,工作目标,应该用一个 TODO 列表时刻提醒自己。
  14. 版权自律,至少在有选择的情况下,倾向于选择合法的产品。
  15. 爱护身体,早睡早起。
  16. 主人翁意识;团队合作精神;热爱技术、敢于挑战;抗压、抗挫折;执行力;
  17. 经验就是财富,尤其是大型互联网项目的设计和研发经验。

二、岗位职责

  1. 需求分析;参与需求评审,给出参考意见;
  2. 完成产品设计方案;
    • 复杂流程的抽象与简化;
  3. 技术实现:软件开发、自测、代码评审;

三、通用技能

  • 记笔记的习惯
  • 整理好自己的文档
    • 云存储

四、理论知识

  • TCP/IP
  • HTTP/HTTPS
  • W3C 标准:JSON、XML、XMLHttpRequest(Ajax)、WebSocket
  • ECMAScript
  • 程序设计语言
    这里并不是指编译原理什么的,而是指总结各种语言的一些基本要素,掌握学习方法,举一反三,一以贯之。
  • 数据结构与算法基础

软件工程

  • UML
  • 敏捷:极限编程、结对编程
  • 文档管理
  • 过程管理
  • 软件设计:数据流图设计、数据设计、界面设计、数据库设计、算法设计
  • 软件测试:测试用例
    • 测试周期:自测、单元测试、集成测试、回归测试
    • 制定测试计划
    • 设计和执行测试用例
    • 分配测试资源
    • 构建测试环境
    • 开发测试工具
    • 进行缺陷跟踪和软件质量分析
    • 测试流程和方法创新

团队管理

  • 工业管理与一般管理
  • 如何开会?
  • 研发团队日常管理
    • 规范的流程控制

数据库

  • SQL
  • 数据库的设计理论
  • 常用数据库管理系统

计算机网络

  • 网络管理的相关操作一定要非常熟练(比如:Linux iptables)。
  • TCP/IP、ARP、DNS
  • HTTP
  • 高并发网络编程

应试知识

  1. 数学:高等数学、线性代数、概率论与数理统计、离散数学
  2. 操作系统
  3. 计算机组成原理
  4. 微机原理与接口技术
  5. 计算机体系结构
  6. 编译原理
  7. C/C++、Java、汇编
  8. 其他
    • 相关法律法规
    • 标准化
    • 信息化与信息系统
    • 专业英语

业余稍微了解一下

  • 多媒体技术及其应用
  • 计算机图形学和数字图像处理技术
  • 信息检索与数据挖掘
  • 搜索引擎
  • 计算机网络安全
  • 密码学

五、开发技能

HTML + CSS + JS

Web 前端开发的三项最基本的技能。

可能我们还会用到以下知识:

  1. jQuery & jQueryUI
  2. ECharts
  3. HTML5 + CSS3
  4. React https://facebook.github.io/react/
  5. AngularJS
  6. BackboneJS
  7. Knockout.js
  8. RequireJS、SeaJS、CommonJS

布局:

  1. Bootstrap

替代:

  1. Dart
  2. CoffeeScript
  3. TypeScript
  4. CSS 预处理框架:SASS、LESS、Stylus

后端开发

  • 深入理解语言特性
  • 熟练掌握标准库与第三方库的基本用法
  • 掌握各种调试技能

针对具体语言:

  • Python
    • 理解:Django(Pinax)、Tornado、eventlet
    • 掌握:Web.py、SQLAlchemy、twisted、Jinja、IPython
    • 了解:supervistor、HTTPie、requests、flask、BeautifulSoup
    • ini、json、conf、xml、html、xls、md 文件操作
  • PHP
    • ThinkPHP、Yii...
    • WordPress
  • Ruby(ROR)
  • Go
  • Node.js
  • R 数据分析

C/C++:

  • 编译与构建:make/scons、gcc
  • 调试:gdb
  • gcov、valgrind

六、软技能

  1. 浏览器兼容性
    • CSS Hack
    • JS 时间系统
    • 渐进增强,优雅降级
  2. 响应式布局
  3. WEB 安全
    • 同源策略
    • XSS 跨站点攻击
    • CSRF 跨站点请求伪造
    • 点击劫持
    • SQL 注入
  4. 性能优化
    • 压缩
    • CSS Sprites
    • 合并、减少请求
    • 缓存
    • CDN
    • 避免重定向
  5. 代码:语义性、可用性和可重用性
  6. 界面交互/用户体验
  7. 方便调试
    • 日志
    • 自带调试功能
  8. 代码风格
    • PHP:PSR
    • Python:PEP-8
  9. 高可用(大型 Web 站点架构设计)
    • 消息队列
    • 任务调度
    • 分布式计算
    • 负载均衡
    • 反向代理
  10. SEO

七、工具

服务器

  1. GNU/Linux 发行版:CentOS、Ubuntu
    • bash、zsh、rsync、telnet、ssh、nfs
    • iptable、selinux
  2. HTTP 服务器:Apache 和 Nginx
  3. 数据库管理系统:MySQL/MariaDB、SQLite、MongoDB
  4. Memcache、Redis
  5. RabbitMQ/ZeroMQ
  6. 需要了解的 NoSQL 数据库:Redis、CouchDB、MongoDB
    还有谷歌的 LevelDB、BigTable
  7. ...

资源

  • fontAwesome
  • IcoMoon

编码技能

  • virtualenv
  • tmux
  • 源代码管理/版本控制
    • SVN
    • Git
  • 排版:Tex & LaTex
  • 代码整理工具
  • 代码版本管理
  • IDE
    • PyCharm
    • WebStrom
    • PHPStrom
  • 编辑器
    • Vi、Emacs
    • Notepad++
    • Sublime + zencoding
    • UltraEdit
  • grunt
    • uglify
    • concat
    • cssmin
    • jshint
    • csslint
    • watch
  • gulp

调试

  • fiddler
  • 抓包 Wireshark

善用 GitHub

Web 开发

  • 浏览器
    • Firefox(Gecko)
    • Chrome(Blink)
    • IE(Trident)
    • Safari(WebKit)
  • 文件系统检测,某些时候真的很方便...
  • F12:谷歌浏览器开发者工具,或者 Firebug
  • 使用 PhotoShop、GIMP 做一些基础的图片处理工作
  • Inkscape 矢量图编辑器,CorelDraw、Illustrator
  • Dia,结构图工具,对应 MS Visio
  • freemind
  • 熟练掌握一门操作系统部署开发环境,我选择了 Linux。
    • 希望我有一天能够熟练到完全地自由定制发行 GNU/Linux 操作系统。
    • 另外,基于 “不依赖” 原则,Windows 的开发环境也要能熟练使用。
  • 容器和虚拟化,可以更好地管理好自己的开发和测试环境
  • 自动化部署
  • Gearman

八、业务

  1. 搜索技术
  2. 分布式系统和体系结构
    • 技术:MapReduce/BSP/实时计算
    • 系统:Hadoop、HBase、Spark、Storm
    • 分布式机器学习
    • 跨平台资源调度
  3. 流式计算
  4. 虚拟化
    • KVM + QEMU + libvirt
    • VirtualBox、vagrant
    • Xen
  5. 容器:Docker(LXC)、Kubernetes/OpenShift
  6. 云计算
    • OpenStack/DevOps

九、产品

  1. 个人技术博客
  2. 至少一个成功的开源项目

十、参考