程序员练级攻略

芝兰生于幽林,不以无人而不芳;君子修道立德,不为穷困而改节
– 致敬 陈皓

程序员练级攻略
开篇词

用十年学会编程


最好的学习方式:实践!

the most effective learning requires a well-defined task with an appropriate difficulty level for the particular individual, informative feedback, and opportunities for repetition and corrections of errors

最有效的学习方式需要:
1. 明确的目标任务
2. 因人而异的难度
3. 丰富的信息反馈
4. 重复试错的机会


程序员的谎谬之言还是至理名言? | 酷 壳 - CoolShell

你不知道你不知道的

(例如:如果你对搜索和约束传播(constraint propagation)有点了解的话,那你就可能 容易地解决数独问题,否则的话, 这的确是 非常 难的)。你无法学习一种不知道或是你不知道用在哪里的算法。你也不可能去用一个你以为不存在的技术去解决一个问题。同样,你身边也不可以一直都有一个高人随时在给你指引正确的方向。
广度知识只是深度知识的副产品, 记忆不深刻是因为没深入研究

永远做最重要的事情(你学的足够快吗?)

我在这里想说几个我的观点:
我特别同意作者的,如果你把一个技术搞精搞深,你的知识面自然会很广的。
面对于各种比较深的东西(比如C++的奇技淫巧),作为一个实用主义者可能很不屑,但是你也会为此而失去开阔眼界的机会。
为明天做一些技术储备,因为你不知道你所缺的东西。多多阅读,多多交流,最好能把自己的心得写下来强化自己的认识和记忆。
不要只寄望于在工作中学习,工作没有覆盖的地方你就不学了。真正的高手在工作之余都会花很多时间去自己研究点东西的。
永远和高手一起工作。如果你面试的公司的面试太简单了,那就不要去,因为简单的面试通常意味着平庸。去那样的公司工作只会让你的学习速度变慢,甚至倒退。
很多东西在概念上是相通的,在哲学层次上是相通的,这是你需要去追求的学习知识的境界。
最后echo一下作者的话——“很多时候,你缺少的不是知识而是热情”!

  • 《易经》有云:“取法其上,得乎其中,取法其中,得乎其下,取法其下,法不得也”

程序员修养

  • 提问的智慧(How To Ask Questions The Smart Way)
    How To Ask Questions The Smart Way

  • 警惕X-Y问题
    X-Y Problem | 酷 壳 - CoolShell

  • 《代码大全》

  • 《重构:改善既有代码的设计》

    Code Review 对我的成长非常有帮助,我认为没有 Code Review 的公司都没有必要呆(因为不做 Code Review 的公司一定是不尊重技术的)

  • OWASP
    美国联邦贸易委员会(FTC)强烈建议所有企业需遵循 OWASP 十大 Web 弱点防护守则。
    OWASP Top 10 项目 是程序员非常需要关注的最基本的也是最严重的安全问题,现在其已经成了一种标准
    OWASP Top 10 - 2017

  • HTTP 安全
    Hardening Your HTTP Security Headers - KeyCDN

  • 什么数据需要监控,指标
    Monitoring 101: Collecting the Right Data | Datadog (datadoghq.com)

    1. Work Metrics
      image
    2. Resource Metrics
      image
    3. Event Metrics
      image

程序员基础知识

五种IO模型

  • 阻塞 I/0
  • 非阻塞I/0
  • I/O 的多路复用(select和 poll)
  • 信号驱动的 I/O (SIGIO)
  • 异步 I/O (POSIX的 aio functions)

Scalable IO in Java

JVM规范说明书
The Java® Virtual Machine Specification (oracle.com)

解剖JVM(JVM Anatomy Quarks)

Java字节码,动态修改或是动态生成Java字节码
Introduction to Java Bytecode


分布式架构

分布式架构中的核心思想
Distributed systems for fun and profit

设计数据密集应用

可扩展的web架构和分布式系统

软件即服务(SaaS)
The Twelve-Factor App (简体中文)

自动化部署根本不够,还需要对环境和运行时的管理和运维才够,而只有 Docker 和 Kubernetes 才是未来!

Docker使用
Docker overview

Docker原理
Docker基础技术:Linux Namespace