程序员练级攻略 笔记
2018-08-09 本文已影响0人
hakase_nano
-
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
- 用其开发Python JavaScript Java Go C/C++
-
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教程
- 了解CSS和HTML如何相互作用 文档用来查找知识的
- 后端基础 省事:直接用Python/Node.js
- 脚本型主流编程语言:PHP
- W3School PHP教程
- PHP官方文档
- 脚本型主流编程语言:PHP
-
学习要点
-
1.3.1 入门语言 Python
-
1.4 实践项目
-
-
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.1.1 如何有效地快速提高编程能力
-
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.3.1 IDE Intellij IDEA 主要用在Java
-
2.4 实践项目
-
2.4.1 投票系统
- 登录后才能生成投票表单
- 投票选可以单选/多选
- 投票后显示投票结果 不能刷票
- 投票有倒计时 需显示
- 投票结果用不同颜色不同长度横条 显示百分比/人数
-
2.4.2 技术要点
- Java Spring Boot实现 后端返回JSon
- 前端JQuery操作HTML展示
- 响应式页面: 手机端和电脑端有不同呈现 Bootstrap
-
2.4.3 可以顺便研究的东西
- 通过微信授权记录用户信息 防止刷票
- 不用刷页面 动态看到投票结果变化
- 使用Google画图表的JS库
-
2.4.1 投票系统
-
-
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.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.5.1 安全编程Guideline
-
3.6 软件工程和上线
-
3.6.1 系统上线:表明写的软件不在自己机器上跑 需要遵守上线规范
+ 完美软件:对软件测试的各种幻想 % 与测试有关的各种心理问题和应对方法
+ Google软件测试之道 -
3.6.2 上线前的检查CHecklist
@ Serverside checklist
@ Single Page App Checklist
@ Monitoring 101 运维入门文章
-
3.6.1 系统上线:表明写的软件不在自己机器上跑 需要遵守上线规范
-
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'
- 继承需要给子类暴露一些父类的设计和实现细节
- 父类实现的改变会造成子类也需要改变
- 我们以为继承主要是为了代码重用,实际上在子类中需要重新实现很多父类的方法
- 继承更多的应该是为了多态
- Program to an 'interface', not an 'implementation'
- 两个原则
-
4.1.1 入门
-
4.2 C
- 世界上绝大多数语言都是C-like语言
+ C程序设计语言 % 不是ANSI标准,而是原作者的标准 K&R C
+ C语言程序设计现代方法 % C99标准 探讨了现代编译器实现 与C++的兼容
+ C陷阱与缺陷 % C里面的一些坑
- 世界上绝大多数语言都是C-like语言
-
4.3 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 无环依赖原则
- Program to an interface, not an implementation 设计模式最根本的哲学
-
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]
-