Table of Contents:

作用:
* 形成知识框架、知识地图
* 遇到问题、知识时可以快速定位,并和已有的知识建立联系
* 遇到新知识时知道把其挂在知识树的什么位置,如何跟已有的知识进行关联
* 排查自己的知识盲区,查漏补缺

知识

操作系统
    linux
        命令
        shell脚本
        系统编程
        内核原理
        内核源码
    windows


编译原理
    前端
    后端
    
计算机网络
    网络分层
        应用层
            DHCP  PEX  HTTP  HTTPS FTP  RTMP(流媒体协议)
        传输层
            tcp  udp
        网络层
            ip
        链路层
            arp
    网络编程
    工具
        tcpdump  wireshark



数据库(数据存储)
    关系型数据库
    非关系型数据库
    k-v型数据库
    内存型数据库


软件工程
    源码版本控制
    自动化编译
    自动化测试




平台经验
    windows、linux、ios、Android、嵌入式



见识
    下一代技术知识
        

技能

阅读代码
    快速了解程序的功能,程序的具体行为,语言方面, 数据结构和算法方面
    
软件设计
    使用什么样的代码技术达到怎么样的功能,而系统架构设计直接决定了软件的质量、性能和可维护性
    需求分析
        接受给定的需求和代码规格    
        能对规格的遗漏提出疑问    
        对有矛盾的地方可以识别出
        了解全面情况,提出需要被规格化的整体范围。    
        能够提出更好的可选方案,根据经验的浮现给出需求
    问题分解
    系统分解


编写程序
    代码组织
        同一文件、跨文件代码组织、源码树组织
    代码可读性、强健性、防御性编码、错误处理
    工具类库、编程框架的使用
    
    接口api的查找能力(快速上手)
    接口api的使用能力
    接口的封装和设计(功能抽象分封装)
    接口api的实现能力


熟悉软件工程
    每个程序员都应该明白软件工程是什么东西,都应该知道,需求分析,设计,编码,测试,Release和维护这几个阶段
    软件开发的方法论,比如:敏捷开发或瀑布模型。


使用程序库或框架
    一个程序员需要学会使用已有的代码,无论是标论的程序库,或是第三方的,还是自己公司内部的,
    站在前人的基础上,可以让你的工作事半功倍。


程序调试
    assert
    打印调试
    断点

单元测试
    单元测试框架


重构代码
    重构目前已有的代码,使代码达到最优但却不能影响任何的已有的功能


开发自动化
    批处理文件、shell脚本、python脚本
    自动化编译,自动化测试,自动化部署,系统集成


运维能力


快速学习的技能
    


与人的沟通能力
语言的表达能力
写作能力


团队协作能力
时间管理能力
故障处理能力    

参考链接