小土刀的技能发展指南

在人工智能时代来临的前夕,作为一名软件工程师,要以什么样的方式来发展自己的技能以避免自己有朝一日被机器取代呢?本文是我的计划、思考以及相关资源整理。


更新历史

  • 2017.02.15: 内容补充与重构
  • 2016.09.09: 完成初稿

写在前面

成长的道路需要策略,坚持是最好的策略,深度要有,广度更不能少。作为工程师,最重要的是解决问题的能力以及持续学习和进步的能力。软件开发能力体系由高到低分为

    • 创造能力:一部分天赋
    • 逻辑能力:训练提高
    • 理解能力:经验积累
    • 基础知识:知识类,计算机、数学、算法、逻辑,通过书本
    • 编程技能:语言相关,多学几门
    • 领域知识:工作具体方向。多媒体要熟悉图形图像声音等等,企业级硬要要熟悉管理制度财务成本仓储

人绝不应该成为工具的奴隶,所有的工具都是为了提高我们的开发效率而存在的。尽量不要重复设计和制造轮子,在巨人肩上起步,做到知其然而知其所以然。正所谓大道至简无招胜有招,收集各种资料并不意味着掌握,反而只是浪费了时间,真正沉下心去做,自然会有不一样的收获。

接下来会按照几个大的板块来简单介绍设计软件开发各个环节的要点。

初入江湖

初入江湖三件事:

  1. 修炼内功打好基础,不然学不到上乘武功
  2. 习武道场多多切磋,不然缺少实战经验
  3. 武林大会会天下英杰,不然跟不上历史的进程

内功修炼

除了跟老司机取经,最方便的就是利用网络公开课来自学(注:不推荐任何的培训班):

除此之外,该读的经典也是需要读一读的,更完整的列表参见这里

  1. 《深入理解计算机系统》 CSAPP | 第二版书摘 & 第三版书摘 & 读薄 CSAPP | 每个程序员都应该读一读的入门书
  2. 《计算机程序的构造和解释》 SICP | 书摘 | 修炼内功必备
  3. 《算法导论》 | 修炼内功必备
  4. 《计算机程序设计艺术》 | 信仰充值
  5. 《数据结构与算法分析:C 语言描述 》 | 待整理
  6. 《编译原理:原理、技术与工具》 | 待整理
  7. 《计算机系统要素》 | 书摘 | 不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之;学至于行而止矣
  8. 《编码:隐匿在计算机软硬件背后的语言》 | 书摘 | 经典计算机入门
  9. 《哥德尔 艾舍尔 巴赫 - 集异璧之大成》 | 书摘 | 门槛很高的一本奇书
  10. 《大教堂与集市》 | 书摘 | 终于可以称书中的 CMU 为母校了
  11. 《设计模式:可复用面向对象软件的基础》 | 待整理
  12. 《操作系统 精髓与设计原理》 | 书摘 | 操作系统处于中间位置,它的一边是应用程序、实用程序和用户,另一边是计算机系统的硬件
  13. 《鸟哥的 Linux 私房菜》 | 书摘 | 也许是从零开始最友好的一本书
  14. 《深入理解LINUX内核》 | 想读
  15. 《代码大全》 | 书摘 | 名不虚传 - Code Complete
  16. 《重构:改善既有代码的设计》 | 书摘 | 在代码写好之后改进它的设计
  17. 《Unix 编程艺术》 | 书摘 | 不懂 Unix 的人注定最终还要重复发明一个蹩脚的 Unix
  18. 《高效程序的奥秘》 | 书评 | 编写最优化编译器或者高性能的代码
  19. 《修改代码的艺术》 | 书摘 | 六六三十六,数中有术,术中有数
  20. 《代码整洁之道》 | 书摘 | 神在细节之中
  21. 《代码之美》 | 想读
  22. 《编程珠玑》 | 书摘 | 刷题背后的思考
  23. 《编写可读代码的艺术》 | 书摘 | 解释清楚我们希望让计算机做什么
  24. 《C++ Primer》 | 书摘 | 入门经典
  25. 《Effective C++》 | 想读
  26. 《C++ 编程思想》 | 书摘 | 我的 C++ 启蒙书
  27. 《程序员修炼之道》| 书摘 | 程序员的自我修养
  28. 《卓有成效的程序员》 | 书摘 | 关注本质,而非形式
  29. 《松本行弘的程序世界》 | 书摘 | 所有应用程序的开发过程都可以说是设计语言的过程
  30. 《代码的未来》 | 书摘 | 编程的本质是思考
  31. 《程序员的思维修炼》 | 书摘 & 书评 | 即使不是程序员也同样值得一读
  32. 《黑客与画家》 | 书摘 & 书评 | 有的时候现实和理想的差距就是有这么大,但是生活的艺术家会拿出一个解决方案的
  33. 《卓越程序员密码》 | 书评 | 这些都是学校不会教给你的
  34. 《我编程,我快乐》 | 书摘 & 书评 | 做喜欢的事情,才可能有真正的快乐
  35. 《高效程序员的 45 个习惯》 | 书摘 | 好习惯即是效率
  36. 《软技能》 | 书摘 | 会过日子比会写代码更重要

习武道场

程序员的好处在于,有许许多多热爱分享的人,可以一同切磋进步,跨越时空的限制:

武林大会

天下大势虽然作为个人难以左右,但是还是应该简单了解一下的:

各大门派

软件已经成为了如此庞大的行业,各种技术领域的细分也越来越明确,相当于江湖中的各个门派了。对大多数人来说,还是要选择一个门派,然后努力修行的。

兵器谱

开发中的基本常识工具和套路了

  • 命令行工具: tmux(screen), bash, zsh(oh-my-zsh), git
  • 操作系统: Ubuntu, macOS
  • 语言: Go, Java(maven, gradle), Python(pip, ipython), Javascript(node.js), Ruby(gem)
  • 文档: markdown, gitbook
  • 编辑器: Visual Studio Code, Vim
  • 流程: Scrum, Crystal, FDD
  • 持续集成: Jenkins, Travis-ci
  • 协作: Teambition, Slack, Trello
  • 数据结构: JSON, cPickle, protobuf
  • 网络: TCP/IP, VLANs, DNS, CDN, HTTP/HTTPS 协议
  • 网络调试: Postman(RESTful, api test), Charles, Fiddler, wireshark
  • 日志聚合: graylog, ELK
  • 版本控制: git
  • 自动配置: Ansible, Puppet
  • 调度
    • crontab 最原生的定时调度
    • 基于 redis 实现的分布式调度
    • 基于 rpyc 实现的分布式调度
    • celery/gearman 等调度
  • 并发
    • 协程 gevent
    • 线程池
    • 多进程 os.fork, idea multiprocessing
  • 调试
    • pdb, logging, Sentry, lsof, strace, trace
    • top, htop, free, iostat, vmstat, ifconfig, iftop
  • 算法
    • 一致性: Paxos, Raft, Gossip
    • 数据结构: 栈、队列、链表, 散列表, 二叉树、红黑树、B 树, 图
    • 常用算法: 插入排序, 桶排序, 堆排序, 快速排序, 最大子数组, 最长公共子序列, 最小生成树, 最短路径, 矩阵的存储和运算

大数据

  • 云计算: SaaS/PaaS/Iaas, Openstack, Docker
  • 大数据通用处理平台: Spark, Hadoop, ELK
  • 资源调度: Yarn, Mesos
  • SQL: MySQL, Sqlite, AWS RDS, PostgreSQL
  • NoSQL: MongoDB, Cassandra, DynamoDB, MongoDB, HBase
  • 缓存: Memcached, Redis, AWS ElastiCache
  • 检索: Solr, ElasticSearch, AWS ElasticSearch
  • 数据分析: Pig, Hive, Spark SQL, Spark DataFrame, Impala, Phoenix, ELK
  • 消息队列: Kafka, RocketMQ, ZeroMQ, ActiveMQ, RabbitMQ
  • 流式计算: Storm/JStorm, Spark Streaming, AWS Kinesis
  • 日志收集: ELK, Scribe, Flume, Fluentd, AWS CloudTrail
  • 机器学习: Mahout, Spark Mlib, TensorFlow(Google), Amazon Machine Learning, DMTK(MS), scikit learn

架构

  • 计算
    • 自动扩展: AWS Autoscaling, OpenStack/Hoo!
    • 负载均衡: AWS ELB, HAProxy, Nginx
    • 虚拟化: Hypervisor, Xen, KVM, Hyper-V
    • 容器: Docker, CoreOS, UnixLXC
  • 分布式消息
    • 消息队列: ZeroMQ, ActiveMQ, RabbitMQ, AWS SQS
    • 事件/消息驱动: AWS SWS, AWS Lambda, AKKA
    • RPC: Thrift, Protobuf
  • 存储
    • 网络存储: AWS EBS, NFS v4, Ceph, Apache CloudStack
    • 对象存储: AWS S3, OpenStack Swift
    • 块存储: SAN, AWS EBS, RAID 概念
    • 灾难恢复
    • 文件系统: ext4, XFS
  • 安全: Firewall, DDoS, iptables, WAF, IDS/IPS, VPN
  • 身份认证: SAML, OpenID, Microsoft AD, AWS IAM
  • 监控: ZABBIX, OBSERVIUM, INICGA, AWS CloudWatch
    • 系统, 日志, 流量, 接口, 数据库
  • 理论: Microservices, RESTful, CAP
  • 设计: 扩展性, 可用性, 可靠性, 一致性, 负载均衡, 过载保护
  • 协议: 二进制协议, 文本协议
  • 接入层: DNS 轮训, 动静态分离, 静态化, 反向代理, LVS, F5, CDN
    • nginx, apache, lighttpd, tomcat
  • 逻辑层: 连接池, 串行化, 批量写入, 配置中心, 去中心化
  • 数据层: 缓存优化, DAO, ORM, 双主架构, 主从同步, 读写分离
  • 同步通讯: RPC, RMI
  • 异步通讯: MQ, Cron
  • 性能优化
    • 代码层: 关联代码优化, cache 对齐, 分之预测, Copy on Write, 内联优化
    • 工具: OProfile, Gprof, JDK 工具
    • 系统优化: 缓存, 延迟计算, 数据预读, 异步, 轮询与通知, 内存池, 模块化
  • 测试: 单元测试, 接口测试, 性能测试, 集成测试

容器

  • 核心: Docker, LXC, RunC, Rkt, Systemd-nspawn, Hyper, VMWare Photon, Jetpack, Kurma, Bosh
  • 监控: Sysdig, Guardrail, cAdvisor
  • 管理: DockerUI, Kitematic, Decking.io, Shipyard, StackEngine, Panamx, Fabric8, Triton
  • 基础设施集成: Nova-docker, Magnum, Clocker, Machine, MaestroNG, CloudFoundry Containers Service Broker, Mesos, Fit2Cloud, Boot2Docker
  • 编排调度: Crane, Compose, Swarm, Yarn, Kubernets, Fleet, Marathon, OpenShift, GearD, Rancher
  • 平台: Alauda, DaoCloud, TenxCloud, CSphere, AWS Container Service, Google Container Engine, StackDock, Orchard, Quay.io, Baremetal.io, Tutum, Giant Swarm
  • 服务发现: Consul, Etcd, Zookeeper, SkyDNS, Skydock
  • 日志收集: Splunk, Elasticsearch, Logstach, Kibana, Heka, Fluent, Flume
  • 相关发行版: CoreOS, Project Atomic, RancherOS, ClearLinux
  • 容器 PaaS: Dokku, Deis, Voxoz, Flynn, Octohost
  • 容器网络: Pipework, Flannel, Calico, Weave, Socketplane.io, Pertino, Nuage
  • 容器安全: Notary, SELinux on docker
  • 数据持久化: Flocker, Ceph
  • 开发流程工具: Drone.io, Shippable, Runnable, NodeChecker, Jenkins Docker plugin, Wercker, Totem, Packet, Docker Repository, Packer

运维

  • DevOps: SSH 证书, Fabric, SaltStack, puppet, pssh/dsh, 运维进阶
  • 部署: 蓝绿部署, 灰度发布, 金丝雀发布, Canary 部署, PHOENIX 部署, AWS CloudFormation
  • 基础服务: LAMP/LNMP, FTP, DNS, SAMBA, EMAIL, NTP, DHCP
  • 配置: Chef, Puppet, Ansible, AWS OpsWorks, Nagios, Zabbix, Cacti, SaltStack, pssh/dsh, Fabric
  • 安全: iptables, ipset
  • 网络: TCP/IP, tcpdump

引用自 Brendan Gregg

前端

  • 语言: JavaScript/Node.js, TypeScript
  • 编辑器: Vim, Visual Studio Code
  • 调试工具: Chrome Dev Tools
  • 框架: Vue.js, React, jQuery, Botostrap
  • 规范: HTTP/1.1 RFCs 7230-7235, HTTP/2, ECMAScript 5/6/7, DOM/BOM/XHTML/XML/JSON/JSONP, CommonJS Modules, MicroData/RDFa
  • 文档: JSDoc, Dox/Doxmate/Grunt-Doxmate
  • 构建工具: make/ant, GYP, Grunt, Gulp, Yeoman, FIS, Mod, Webpack
  • 安全: CSRF/XSS, CSP, Same-origin policy, ADsafe/Caja/Sandbox
  • 移动: HTML5/CSS3, 响应式网页设计, Zeptojs/iScroll, React Native/Week

藏宝图

这里有不少资源合集的索引,可不要成为叶公!

写在最后

贪多嚼不烂,师傅领进门,心急吃不了,勤为径,知行合一。

参考链接

广告时间

优秀人才不缺工作机会,只缺适合自己的好机会。但是他们往往没有精力从海量机会中找到最适合的那个。100offer 会对平台上的人才和企业进行严格筛选,让「最好的人才」和「最好的公司」相遇。

点击注册 100offer,谈谈你对下一份工作的期待,收获 5-10 个满足你要求的好机会。

捧个钱场?