TOC

Web 开发者的自我修养

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

一、基本原则

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

二、岗位职责

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

三、通用技能

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

四、理论知识

  • 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. 其他
  9. 相关法律法规
  10. 标准化
  11. 信息化与信息系统
  12. 专业英语

业余稍微了解一下

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

五、开发技能

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
  5. 为您详细比较三个 CSS 预处理器(框架):Sass、LESS 和 Stylus
  6. 为什么要使用CSS预处理器?

后端开发

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

针对具体语言:

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

七、工具

服务器

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

资源

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

八、业务

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

九、产品

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

十、参考