程序员练级攻略 笔记

  • 1 程序员练级攻略 入门:零基础入门

    • 1.1 第一份入门教程: 编程是什么

      + 与孩子一起学编程 % 以Python语言教你如何写程序
      - 在线编程入门1 Codeacademy 付费
      - 在线编程入门2 People Can Program 免费
      - 在线编程小练习 CodeAbbey
    • 1.2 第二份入门教程: 做点实际有用的东西 网页

      - MDN的Web开发入门
      - 这个教程会带着你建立一个网站。然后,你可以把你的网页发布在GitHub 上。
    • 1.3 编程入门

      • 1.3.1 入门语言 Python
        + Python编程快速上手 % 偏文本处理
        + Python编程:从入门到实践 % Web项目 代码部署 时间有限看这本
      • 1.3.2 入门语言 JavaScript
        - MDN JavaScript教程 从初级到中级再到高级 语言方面非常全
        - W3School JavaScript教程 偏Web方面
        - JavaScript全栈教程 廖雪峰 偏Web和Node.js方面
      • 1.3.3 操作系统入门 Linux
        - W3CSchool Linux教程
      • 1.3.4 编程工具 Visual Studio Code
        • 用其开发Python JavaScript Java Go C/C++
          - 官方教程中文翻译gitbook
      • 1.3.5 Web编程入门
        • 学习要点
          • HTML基本语法
          • CSS如何选中HTML元素并应用样式
          • 使用Chrome查看网页结构 动态修改
          • 在一台Linux机器配置LEMP环境 Ubuntu+Nginx+MySQL+PHP
          • PHP与HTML进行数据交互; 了解服务器响应浏览器请求; 实现表单提交和反显功能
          • PHP连接MySQL
        • 后端语言的选择
          • Python > PHP > Node.js
          • Python应用场景广泛 机器学习/AI/爬虫/中间件
          • PHP 比较主流的简单语言 一般玩玩就行
          • Node.js 可用作后端粘合层 不能承担后端的大任
        • 前端基础 系统学习CSS/HTML/JavaScript
          • 了解CSS和HTML如何相互作用 文档用来查找知识的
            - MDN CSS文档
            - MDN HTML文档
          • 理解DOM和动态网页
            - W3School JS HTML DOM教程
        • 后端基础 省事:直接用Python/Node.js
          • 脚本型主流编程语言:PHP
            - W3School PHP教程
            - PHP官方文档
    • 1.4 实践项目

      • 1.4.1 简单的Blog系统/BBS系统
        • 用户登录/注册
        • 用户发帖/评论 只需要支持纯文本
      • 1.4.2 技术要点
        • 密码不保存为明文 而是MD5+Salt
        • 用户自己的帖子可以重新编辑和删除
        • 数据库设计: 用户表+问政表+评论表
          @ PHP如何建表
      • 1.4.3 可以顺便研究的东西
        • 图片验证码
        • 图片上传
        • 阻止用户上传带HTML或JavaScript的内容
        • 防止SQL注入
          @ 微软SQL注入文档
          @ PHP官方文档
  • 2 程序员练级攻略 入门:正式入门 [1-2年]

    • 2.1 编程技能

      • 2.1.1 如何有效地快速提高编程能力
        @ The Key To Accelerating Your Coding Skills
      • 2.1.2 编程技巧 怎么把程序写好
        + 代码大全 % 不需要马上读完 不同阶段读不同收获
      • 2.1.3 编程语言 Java + Spring(IoC/AOP..)
        + Java核心技术卷1 % Java语法+OOP思想
        + Head First Java % 难度更低
        + Spring in Action
        + Spring Boot实战 % 直接从最新Spring Boot开始
      • 2.1.4 操作系统 Linux
        + 鸟哥的Linux私房菜 % 非常全面 操作系统/管理和操作Linux 不适合初学者
      • 2.1.5 网络协议 HTTP
        - MDN HTTP文档
        - 关键点:HTTP头/请求方法/返回码/Cookie/缓存/会话/链接管理 不需要知道所有东西
      • 2.1.6 数据库设计 理论 + MySQL
        - 慕课课程 数据库设计的那些事 全部不到2小时 搞清楚几个范式 SQL
        + MySQL必知必会
      • 2.1.7 前端 jQuery + Bootstrap
        - jQuery文档
        - Bootstrap文档
        • 学习Ajax请求后端
        • 学习Promise模式 阮一峰翻译ES6
      • 2.1.8 字段编码方面 ASCII Unicode
        @ [关于字符编码,你所需要知道的]
        @ [The history of Character Encoding]
        @ [Wikipedia - Character encoding]
    • 2.2 为什么转成 Java 语言

      • Java是所有语言里综合实力最强的 工业级编程语言(Python JavaScript不是) 几乎所有大型互联网/分布式架构基本都是Java技术栈
      • Python比Java更加适合入门 不费脑子
      • 有了编程基础再切到工业级编程语言 只有C/C++/Java等静态语言才能让你真正进阶
      • 掌握几门语言是非常正常的事情
    • 2.3 编程工具

      • 2.3.1 IDE Intellij IDEA 主要用在Java
        - Intellij IDEA官方文档中文翻译
      • 2.3.2 版本管理工具 Git + Github
        - Pro Git第二版 非常系统
        - 猴子都能懂的Git入门
        @ Github and Git 图文教程
        @ Git图文教程及详解
      • 2.3.3 调试前端程序 Chrome
        @ 超完整的Chrome浏览器客户端调试大全
      • 2.3.4 数据库设计工具 MySQL WorkBench
        @ MySQL WorkBench文档
    • 2.4 实践项目

      • 2.4.1 投票系统
        • 登录后才能生成投票表单
        • 投票选可以单选/多选
        • 投票后显示投票结果 不能刷票
        • 投票有倒计时 需显示
        • 投票结果用不同颜色不同长度横条 显示百分比/人数
      • 2.4.2 技术要点
        • Java Spring Boot实现 后端返回JSon
        • 前端JQuery操作HTML展示
        • 响应式页面: 手机端和电脑端有不同呈现 Bootstrap
      • 2.4.3 可以顺便研究的东西
        • 通过微信授权记录用户信息 防止刷票
        • 不用刷页面 动态看到投票结果变化
        • 使用Google画图表的JS库
  • 3 程序员练级攻略 修养:程序员修养

    • 3.1 程序员的修养

      @ [Quora What are some of the most basic things every programmer should know?]
      - gitbook 97 Things Every Programmer Should Know
    • 3.2 英语能力 略

    • 3.3 问问题的能力

      @ 提问的智慧
      @ X-Y PROBLEM
      @ Asking questions
    • 3.4 写代码的修养

      + 重构:改善既有代码的设计 % 如何从零开始构建代码时避免不良代码风格
      + 修改代码的艺术
      + 代码整洁之道 % 观点: 代码质量与其整洁度成正比 一系列整洁代码操作实践
      + 程序员的职业素养
      • 3.4.1 Code Review
        @ Code Review Best Practices
        @ How Google Does Code Review
        @ LinkedIn’s Tips for Highly Effective Code Review
      • 3.4.2 Unit Test
        - JUnit官方文档中文翻译
        @ You Still Don’t Know How to Do Unit Testing
        @ Unit Testing Best Practices: JUnit Reference Guide
        @ JUnit Best Practices
    • 3.5 安全防范

      - OWASP Top 10 2017
      • 3.5.1 安全编程Guideline
        @ 伯克利大学Secure Coding Practice
        @ 卡梅隆大学SEI CERT Coding Standards
      • 3.5.2 HTTP相关的安全文章 必读
        @ Hardening Your HTTP Security Headers
      • 3.5.3 防御性编程 保证对程序不可预见的使用不会造成程序功能上的损坏 减小墨菲定律的影响
        @ The Art of Defensive Programming
        @ Overly defensive programming
    • 3.6 软件工程和上线

      • 3.6.1 系统上线:表明写的软件不在自己机器上跑 需要遵守上线规范
        + 完美软件:对软件测试的各种幻想 % 与测试有关的各种心理问题和应对方法
        + Google软件测试之道
      • 3.6.2 上线前的检查CHecklist
        @ Serverside checklist
        @ Single Page App Checklist
        @ Monitoring 101 运维入门文章
    • 3.7 附录 编程规范 最佳实践

      • 包括大部分主流语言的编程规范 略
      • 资源池汇总
        @ JavaScript JS The Right Way
        @ Python Python最佳实践指南
        @ HTML+CSS 前端开发Checklist
        @ regex learn regex the easy way
      • JavaScript
        @ jQuery官方规范
        @ 《代码整洁之道》中的JavaScript实践
        @ 简单规范1 [JavaScript Style Guides And Beautifiers]
        @ 简单规范2 W3Schools JavaScript规范
        @ 简单规范3 crockford规范
      • Python
        @ Python官方规范
        @ Google Python Style Guide
      • Scala
        @ Databricks编程规范
        @ Scala Best Practices
      • Shell
        @ Google Shell Style Guide
      • 前端开发相关
        @ Frontend Guidelines
        @ HTML + CSS Code Guide
        @ Google HTML/CSS Style Guide
      • Markdown
        @ Google Markdown Style Guide
      • JSon
        @ Google JSon Style Guide
      • Git
        @ Git 风格指南
        @ Git官方文档 CodingGuidelines
  • 4 程序员练级攻略 专业基础:编程语言 [4-5年]

    @ 程序员的荒谬之言还是至理名言
    • 4.1 Java

      • 4.1.1 入门
        + Java核心技术卷1 % Sun公司官方用书 很多与C++的比较
        + Spring in Action % 传统Spring
        + Spring Boot实战 % 新式微服务的Spring只看一本选这本
      • 4.1.2 升级
        + Effective Java第三版 % 高效代码 Google Guava库是这些经验的实践代表
        + Java并发编程实战 % 并发 Java并发参考手册
        + Java性能权威指南 % 优化
        + 深入理解Java虚拟机 % 底层细节
        + Java编程思想 % 宏观角度讲思想
        + 精通Spring 4.x % 分析原理 工具书
      • 4.1.3 设计模式
        + 设计模式
        + Head First设计模式 % 较简单
        • 两个原则
          • Program to an 'interface', not an 'implementation'
            • 使用者不需要知道数据类型 结构 算法的细节
            • 使用者不需要知道实现细节,只需要知道提供的接口
            • 利于抽象、封装、动态绑定、多态,符合OOP的特质和理念
          • Favor 'object composition' over 'class inheritance'
            • 继承需要给子类暴露一些父类的设计和实现细节
            • 父类实现的改变会造成子类也需要改变
            • 我们以为继承主要是为了代码重用,实际上在子类中需要重新实现很多父类的方法
            • 继承更多的应该是为了多态
    • 4.2 C

      • 世界上绝大多数语言都是C-like语言
        + C程序设计语言 % 不是ANSI标准,而是原作者的标准 K&R C
        + C语言程序设计现代方法 % C99标准 探讨了现代编译器实现 与C++的兼容
        + C陷阱与缺陷 % C里面的一些坑
    • 4.3 C++

      • 复杂难学 做的最好的范式是"泛型编程"
        @ C++的坑真的多吗
        + C++ Primer 中文版 % 关键点:多态+模板+重载操作符+STL 其他:泛型+函数式编程
        + Effective C++
        + More Effective C++
        + 深度探索C++对象模型
        @ C++虚函数表解析
        @ C++对象内存布局
    • 4.4 Go

      • C太原始 C++太复杂 Java太高级
      • Go成为云计算事实标准语言 突出之处是并发编程
        - 入门教程 Go by Example
        - Go 101
        @ GO 语言简介
        @ Go官方 Effective Go
        @ Rob Pike 并发编程模式1 Go Concurrency Patterns
        @ Rob Pike 并发编程模式2 Advanced Go Concurrency Patterns
  • 5 程序员练级攻略 专业基础:理论学科

    • 5.1 数据结构和算法

      + 算法 % 基础 程序员应知应会的50个算法
      + 算法图解 % 基础 有趣
      + 算法导论 % 偏理论
      + 编程珠玑 % 思维改善
      - [LeetCode] % 练习
      - [Data Structure Visualizations] % 数据结构动态图
    • 5.2 其他理论基础知识 三大系统基础知识:计算(OS) 存储(DB) 网络(Network)

      + 数据结构与算法分析 Mark Allen Weiss
      + 数据库系统概念 % 名校教材
      + 现代操作系统
      + 计算机网络 自顶向下方法
      + 计算机程序的构造和解释 % MIT教材 程序的本质 Scheme/Lisp
      + 编译原理 % 龙书
  • 6 程序员练级攻略 专业基础:系统知识

    + 深入理解计算机系统 % 程序员所需要了解的计算机知识
    • 6.1 学习要点/任务

      • 用这些系统知识操作一下FS 实现可以拷贝目录树的小程序
      • 用fork/wait/waitpid写多进程程序,用pthread写多线程带同步/互斥程序 如多进程购票程序
      • 用signal/kill/raise/alarm/pause/sigprocmask实现多进程间的信号量通信的程序
        @ 用gdb调试程序
        @ 跟我一起写 makefile
      • Socket进程间通信 用C写一个1对1聊天小程序,或一个简单的HTTP服务器
    • 6.2 Richard Stevens 经典

      + Unix高级环境编程
      + Unix网络编程卷1 套接口API
      + Unix网络编程卷2 进程间通信
      + TCP/IP详解卷1 协议 % 深入浅出 几百张时序图
    • 6.3 通俗易懂的书

      + Linux C 编程一站式学习 宋劲杉
      + TCP/IP网络编程 [韩]尹圣雨
      + 图解TCP/IP [日]竹下隆史
      - The TCP/IP Guide 里面的图很精彩
    • 6.4 后续看的材料

      + Wireshark数据包分析实战 % 网络协议学习实践 抓包
      + Linux/UNIX系统编程手册 % APUE后打铁趁热看看
      + Linux 系统编程 Robert Love % APUE后或者这本 主要突出Linux关键技术和相关系统调用
      @ 网络编程系列文章
    • 6.5 C10K问题 Dan Kegel

      • 本质上是操作系统处理大并发请求的问题
      • 大并发导致数据拷贝频繁,进程/线程上下文切换消耗大,从而资源耗尽而崩溃,是问题的本质
        @ C10K Problems 中文翻译
        @ C10M问题
    • 6.6 实践项目

      • telnet版本的聊天服务器
      • 简单HTTP服务器
      • 生产者/消费者消息队列服务
  • 7 程序员练级攻略 软件设计:软件设计

    • 7.1 编程范式 各种语言的编程方式

      - 极客时间 编程范式游记
      @ Wikipedia: Programming paradigm
      @ 六个编程范型将改变你对编程的看法
      - 六种不太常见的编程范式,结合六种没怎么听过的语言
      @ Programming Paradigms for Dummies 编程语言在历史上的演进
      - 斯坦福公开课 编程范式
      - 适合初学者 分别讲述C/C++/并发编程/Scheme/Python各自不同的编程范式
    • 7.2 一些软件设计的相关原则

      @ High Cohesion & Loose coupling 高内聚低耦合
      - 内聚:指一个模块内各个元素彼此结合的紧密程度 "重用和独立"
      - 耦合:不同模块间互联程度的度量 "牵一发动全身"
      @ CoC = Convention over Configuration 惯例优于配置原则
      - 将公认的配置方式作为内部缺省的规则使用
      - maven也使用CoC原则 mvn -compile 不需要指定源文件放在什么地方
      @ DRY = Don’t Repeat Yourself
      @ KISS = Keep It Simple, Stupid
      • Program to an interface, not an implementation 设计模式最根本的哲学
        @ YAGNI = You Ain’t Gonna Need It 勿过度设计
        @ Law of Demeter 迪米特法则 aka 最少知识原则
        @ 面向对象的S.O.L.I.D原则
        • Single Responsibility 职责(引起变化的原因)单一原则 一个类只做一件事 只有一个引起它变化的原因
        • Open/closed 开闭原则 模块是可扩展,但不可修改的
        • Liskov substitution 里氏代换原则 子类必须可以替换任何基类出现的地方 替换后代码能正常工作
        • Interface segregation 接口隔离原则 把功能实现在接口中 而不是类中 使用多个专门接口比使用单一总接口要好
        • Dependency inversion 依赖倒置原则 高层模块不应该依赖于底层模块实现 而是依赖于高层抽象
          @ CCP = Common Closure Principe 共同封闭原则
          @ CRP = Common Reuse Principe 共同重用原则
          @ Hollywood Principe 好莱坞原则
        • don’t call us, we’ll call you 所有组件都是被动的 组件初始化和调用都由容器负责
          @ IoC = Inversion of Control
          @ DI = Dependency Injection
          @ SoC = Separation of Concerns 关注点分离
          @ DbC = Design by Contract 契约式设计
          @ ADP = Acyclic Dependencies Principe 无环依赖原则
    • 7.3 软件设计读物

      + UNIX编程艺术 Eric Raymond
      + 领域驱动设计
      @ The Problem With Logging 关于程序打日志的短文
      @ Clean Architecture
      - 12-factor中文翻译 构建SaaS应用方法论 https://12factor.net/zh_cn/
      @ [Modern Software Over-Engineering Mistakes]
      @ Instagram 工程的三个黄金法则
      @ How To Design A Good API and Why it Matters
      - [Concurrent Programming for Scalable Web Architecture]

你可能感兴趣的:(程序员练级攻略 笔记)