mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-09-17 08:46:40 +08:00
829 lines
57 KiB
HTML
829 lines
57 KiB
HTML
<!DOCTYPE html>
|
||
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
|
||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||
<head>
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
|
||
<link rel="icon" href="/static/favicon.png">
|
||
<title>072 程序员练级攻略(2018):程序员修养.md.html</title>
|
||
<!-- Spectre.css framework -->
|
||
<link rel="stylesheet" href="/static/index.css">
|
||
<!-- theme css & js -->
|
||
<meta name="generator" content="Hexo 4.2.0">
|
||
</head>
|
||
<body>
|
||
<div class="book-container">
|
||
<div class="book-sidebar">
|
||
<div class="book-brand">
|
||
<a href="/">
|
||
<img src="/static/favicon.png">
|
||
<span>技术文章摘抄</span>
|
||
</a>
|
||
</div>
|
||
<div class="book-menu uncollapsible">
|
||
<ul class="uncollapsible">
|
||
<li><a href="/" class="current-tab">首页</a></li>
|
||
</ul>
|
||
<ul class="uncollapsible">
|
||
<li><a href="../">上一级</a></li>
|
||
</ul>
|
||
<ul class="uncollapsible">
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/000 开篇词 洞悉技术的本质,享受科技的乐趣.md.html">000 开篇词 洞悉技术的本质,享受科技的乐趣.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/001 程序员如何用技术变现(上).md.html">001 程序员如何用技术变现(上).md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/002 程序员如何用技术变现(下).md.html">002 程序员如何用技术变现(下).md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/003 Equifax信息泄露始末.md.html">003 Equifax信息泄露始末.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/004 从Equifax信息泄露看数据安全.md.html">004 从Equifax信息泄露看数据安全.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/005 何为技术领导力.md.html">005 何为技术领导力.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/006 如何拥有技术领导力.md.html">006 如何拥有技术领导力.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/007 推荐阅读:每个程序员都该知道的事.md.html">007 推荐阅读:每个程序员都该知道的事.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/008 Go语言,Docker和新技术.md.html">008 Go语言,Docker和新技术.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/009 答疑解惑:渴望、热情和选择.md.html">009 答疑解惑:渴望、热情和选择.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/010 如何成为一个大家愿意追随的Leader?.md.html">010 如何成为一个大家愿意追随的Leader?.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/011 程序中的错误处理:错误返回码和异常捕捉.md.html">011 程序中的错误处理:错误返回码和异常捕捉.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/012 程序中的错误处理:异步编程和最佳实践.md.html">012 程序中的错误处理:异步编程和最佳实践.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/013 魔数 0x5f3759df.md.html">013 魔数 0x5f3759df.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/014 推荐阅读:机器学习101.md.html">014 推荐阅读:机器学习101.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/015 时间管理:同扭曲时间的事儿抗争.md.html">015 时间管理:同扭曲时间的事儿抗争.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/016 时间管理:投资赚取时间.md.html">016 时间管理:投资赚取时间.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/017 故障处理最佳实践:应对故障.md.html">017 故障处理最佳实践:应对故障.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/018 故障处理最佳实践:故障改进.md.html">018 故障处理最佳实践:故障改进.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/019 答疑解惑:我们应该能够识别的表象和本质.md.html">019 答疑解惑:我们应该能够识别的表象和本质.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/020 分布式系统架构的冰与火.md.html">020 分布式系统架构的冰与火.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/021 从亚马逊的实践,谈分布式系统的难点.md.html">021 从亚马逊的实践,谈分布式系统的难点.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/022 分布式系统的技术栈.md.html">022 分布式系统的技术栈.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/023 分布式系统关键技术:全栈监控.md.html">023 分布式系统关键技术:全栈监控.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/024 分布式系统关键技术:服务调度.md.html">024 分布式系统关键技术:服务调度.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/025 分布式系统关键技术:流量与数据调度.md.html">025 分布式系统关键技术:流量与数据调度.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/026 洞悉PaaS平台的本质.md.html">026 洞悉PaaS平台的本质.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/027 推荐阅读:分布式系统架构经典资料.md.html">027 推荐阅读:分布式系统架构经典资料.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/028 编程范式游记(1)- 起源.md.html">028 编程范式游记(1)- 起源.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/029 编程范式游记(2)- 泛型编程.md.html">029 编程范式游记(2)- 泛型编程.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/030 编程范式游记(3) - 类型系统和泛型的本质.md.html">030 编程范式游记(3) - 类型系统和泛型的本质.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/031 Git协同工作流,你该怎样选.md.html">031 Git协同工作流,你该怎样选.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/032 推荐阅读:分布式数据调度相关论文.md.html">032 推荐阅读:分布式数据调度相关论文.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/033 编程范式游记(4)- 函数式编程.md.html">033 编程范式游记(4)- 函数式编程.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/034 编程范式游记(5)- 修饰器模式.md.html">034 编程范式游记(5)- 修饰器模式.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/035 编程范式游记(6)- 面向对象编程.md.html">035 编程范式游记(6)- 面向对象编程.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/036 编程范式游记(7)- 基于原型的编程范式.md.html">036 编程范式游记(7)- 基于原型的编程范式.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/037 编程范式游记(8)- Go 语言的委托模式.md.html">037 编程范式游记(8)- Go 语言的委托模式.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/038 编程范式游记(9)- 编程的本质.md.html">038 编程范式游记(9)- 编程的本质.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/039 编程范式游记(10)- 逻辑编程范式.md.html">039 编程范式游记(10)- 逻辑编程范式.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/040 编程范式游记(11)- 程序世界里的编程范式.md.html">040 编程范式游记(11)- 程序世界里的编程范式.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/041 弹力设计篇之“认识故障和弹力设计”.md.html">041 弹力设计篇之“认识故障和弹力设计”.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/042 弹力设计篇之“隔离设计”.md.html">042 弹力设计篇之“隔离设计”.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/043 弹力设计篇之“异步通讯设计”.md.html">043 弹力设计篇之“异步通讯设计”.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/044 弹力设计篇之“幂等性设计”.md.html">044 弹力设计篇之“幂等性设计”.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/045 弹力设计篇之“服务的状态”.md.html">045 弹力设计篇之“服务的状态”.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/046 弹力设计篇之“补偿事务”.md.html">046 弹力设计篇之“补偿事务”.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/047 弹力设计篇之“重试设计”.md.html">047 弹力设计篇之“重试设计”.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/048 弹力设计篇之“熔断设计”.md.html">048 弹力设计篇之“熔断设计”.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/049 弹力设计篇之“限流设计”.md.html">049 弹力设计篇之“限流设计”.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/050 弹力设计篇之“降级设计”.md.html">050 弹力设计篇之“降级设计”.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/051 弹力设计篇之“弹力设计总结”.md.html">051 弹力设计篇之“弹力设计总结”.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/052 区块链技术 - 区块链的革命性及技术概要.md.html">052 区块链技术 - 区块链的革命性及技术概要.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/053 区块链技术 - 区块链技术细节 - 哈希算法.md.html">053 区块链技术 - 区块链技术细节 - 哈希算法.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/054 区块链技术 - 区块链技术细节 - 加密和挖矿.md.html">054 区块链技术 - 区块链技术细节 - 加密和挖矿.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/055 区块链技术 - 去中心化的共识机制.md.html">055 区块链技术 - 去中心化的共识机制.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/056 区块链技术 - 智能合约.md.html">056 区块链技术 - 智能合约.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/057 区块链技术 - 传统金融和虚拟货币.md.html">057 区块链技术 - 传统金融和虚拟货币.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/058 管理设计篇之分布式锁.md.html">058 管理设计篇之分布式锁.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/059 管理设计篇之配置中心.md.html">059 管理设计篇之配置中心.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/060 管理设计篇之边车模式.md.html">060 管理设计篇之边车模式.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/061 管理设计篇之服务网格.md.html">061 管理设计篇之服务网格.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/062 管理设计篇之网关模式.md.html">062 管理设计篇之网关模式.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/063 管理设计篇之部署升级策略.md.html">063 管理设计篇之部署升级策略.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/064 性能设计篇之缓存.md.html">064 性能设计篇之缓存.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/065 性能设计篇之异步处理.md.html">065 性能设计篇之异步处理.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/066 性能设计篇之数据库扩展.md.html">066 性能设计篇之数据库扩展.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/067 性能设计篇之秒杀.md.html">067 性能设计篇之秒杀.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/068 性能设计篇之边缘计算.md.html">068 性能设计篇之边缘计算.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/069 程序员练级攻略(2018):开篇词.md.html">069 程序员练级攻略(2018):开篇词.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/070 程序员练级攻略(2018):零基础启蒙.md.html">070 程序员练级攻略(2018):零基础启蒙.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/071 程序员练级攻略(2018):正式入门.md.html">071 程序员练级攻略(2018):正式入门.md.html</a>
|
||
</li>
|
||
<li>
|
||
<a class="current-tab" href="/专栏/左耳听风/072 程序员练级攻略(2018):程序员修养.md.html">072 程序员练级攻略(2018):程序员修养.md.html</a>
|
||
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/073 程序员练级攻略(2018):编程语言.md.html">073 程序员练级攻略(2018):编程语言.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/074 程序员练级攻略:理论学科.md.html">074 程序员练级攻略:理论学科.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/075 程序员练级攻略(2018):系统知识.md.html">075 程序员练级攻略(2018):系统知识.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/076 程序员练级攻略(2018):软件设计.md.html">076 程序员练级攻略(2018):软件设计.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/077 程序员练级攻略(2018):Linux系统、内存和网络.md.html">077 程序员练级攻略(2018):Linux系统、内存和网络.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/078 程序员练级攻略(2018):异步IO模型和Lock-Free编程.md.html">078 程序员练级攻略(2018):异步IO模型和Lock-Free编程.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/079 程序员练级攻略(2018):Java底层知识.md.html">079 程序员练级攻略(2018):Java底层知识.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/080 程序员练级攻略(2018):数据库.md.html">080 程序员练级攻略(2018):数据库.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/081 程序员练级攻略(2018):分布式架构入门.md.html">081 程序员练级攻略(2018):分布式架构入门.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/082 程序员练级攻略(2018):分布式架构经典图书和论文.md.html">082 程序员练级攻略(2018):分布式架构经典图书和论文.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/083 程序员练级攻略(2018):分布式架构工程设计.md.html">083 程序员练级攻略(2018):分布式架构工程设计.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/084 程序员练级攻略(2018):微服务.md.html">084 程序员练级攻略(2018):微服务.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/085 程序员练级攻略(2018):容器化和自动化运维.md.html">085 程序员练级攻略(2018):容器化和自动化运维.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/086 程序员练级攻略(2018):机器学习和人工智能.md.html">086 程序员练级攻略(2018):机器学习和人工智能.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/087 程序员练级攻略(2018):前端基础和底层原理.md.html">087 程序员练级攻略(2018):前端基础和底层原理.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/088 程序员练级攻略(2018):前端性能优化和框架.md.html">088 程序员练级攻略(2018):前端性能优化和框架.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/089 程序员练级攻略(2018):UIUX设计.md.html">089 程序员练级攻略(2018):UIUX设计.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/090 程序员练级攻略(2018):技术资源集散地.md.html">090 程序员练级攻略(2018):技术资源集散地.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/091 程序员面试攻略:面试前的准备.md.html">091 程序员面试攻略:面试前的准备.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/092 程序员面试攻略:面试中的技巧.md.html">092 程序员面试攻略:面试中的技巧.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/093 程序员面试攻略:面试风格.md.html">093 程序员面试攻略:面试风格.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/094 程序员面试攻略:实力才是王中王.md.html">094 程序员面试攻略:实力才是王中王.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/095 高效学习:端正学习态度.md.html">095 高效学习:端正学习态度.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/096 高效学习:源头、原理和知识地图.md.html">096 高效学习:源头、原理和知识地图.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/097 高效学习:深度,归纳和坚持实践.md.html">097 高效学习:深度,归纳和坚持实践.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/098 高效学习:如何学习和阅读代码.md.html">098 高效学习:如何学习和阅读代码.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/099 高效学习:面对枯燥和量大的知识.md.html">099 高效学习:面对枯燥和量大的知识.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/100 高效沟通:Talk和Code同等重要.md.html">100 高效沟通:Talk和Code同等重要.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/101 高效沟通:沟通阻碍和应对方法.md.html">101 高效沟通:沟通阻碍和应对方法.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/102 高效沟通:沟通方式及技巧.md.html">102 高效沟通:沟通方式及技巧.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/103 高效沟通:沟通技术.md.html">103 高效沟通:沟通技术.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/104 高效沟通:好老板要善于提问.md.html">104 高效沟通:好老板要善于提问.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/105 高效沟通:好好说话的艺术.md.html">105 高效沟通:好好说话的艺术.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/106 加餐 谈谈我的“三观”.md.html">106 加餐 谈谈我的“三观”.md.html</a>
|
||
</li>
|
||
<li>
|
||
|
||
<a href="/专栏/左耳听风/107 结束语 业精于勤,行成于思.md.html">107 结束语 业精于勤,行成于思.md.html</a>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
|
||
<div class="sidebar-toggle-inner"></div>
|
||
</div>
|
||
<script>
|
||
function add_inner() {
|
||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||
inner.classList.add('show')
|
||
}
|
||
function remove_inner() {
|
||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||
inner.classList.remove('show')
|
||
}
|
||
function sidebar_toggle() {
|
||
let sidebar_toggle = document.querySelector('.sidebar-toggle')
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
let content = document.querySelector('.off-canvas-content')
|
||
if (sidebar_toggle.classList.contains('extend')) { // show
|
||
sidebar_toggle.classList.remove('extend')
|
||
sidebar.classList.remove('hide')
|
||
content.classList.remove('extend')
|
||
} else { // hide
|
||
sidebar_toggle.classList.add('extend')
|
||
sidebar.classList.add('hide')
|
||
content.classList.add('extend')
|
||
}
|
||
}
|
||
|
||
function open_sidebar() {
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
let overlay = document.querySelector('.off-canvas-overlay')
|
||
sidebar.classList.add('show')
|
||
overlay.classList.add('show')
|
||
}
|
||
function hide_canvas() {
|
||
let sidebar = document.querySelector('.book-sidebar')
|
||
let overlay = document.querySelector('.off-canvas-overlay')
|
||
sidebar.classList.remove('show')
|
||
overlay.classList.remove('show')
|
||
}
|
||
</script>
|
||
<div class="off-canvas-content">
|
||
<div class="columns">
|
||
<div class="column col-12 col-lg-12">
|
||
<div class="book-navbar">
|
||
<!-- For Responsive Layout -->
|
||
<header class="navbar">
|
||
<section class="navbar-section">
|
||
<a onclick="open_sidebar()">
|
||
<i class="icon icon-menu"></i>
|
||
</a>
|
||
</section>
|
||
</header>
|
||
</div>
|
||
<div class="book-content" style="max-width: 960px; margin: 0 auto;
|
||
overflow-x: auto;
|
||
overflow-y: hidden;">
|
||
<div class="book-post">
|
||
<p id="tip" align="center"></p>
|
||
<div><h1>072 程序员练级攻略(2018):程序员修养</h1>
|
||
<p>在完成上述的入门知识学习之后,我们要向专业的计算机软件开发进军了。但是在学习那些专业的知识前,我们先要抽一部分的篇幅来说一下程序员的修养。这是程序员的工程师文化,也就是程序员的价值观,因为如果你的技术修养不够的话,你学再多的知识也是没有用的。</p>
|
||
<p>要了解程序员的修养,你可以先从 Quora 上的这个贴子开始 “<a href="https://www.quora.com/What-are-some-of-the-most-basic-things-every-programmer-should-know">What are some of the most basic things every programmer should know?</a>”,我摘录一些在这里供你参考。</p>
|
||
<ul>
|
||
<li>Bad architecture causes more problems than bad code.</li>
|
||
<li>You will spend more time thinking than coding.</li>
|
||
<li>The best programmers are always building things.</li>
|
||
<li>There’s always a better way.</li>
|
||
<li>Code reviews by your peers will make all of you better.</li>
|
||
<li>Fewer features for better code is always the right answer in the end.</li>
|
||
<li>If it’s not tested, it doesn’t work.</li>
|
||
<li>Don’t reinvent the wheel, library code is there to help.</li>
|
||
<li>Code that’s hard to understand is hard to maintain.</li>
|
||
<li>Code that’s hard to maintain is next to useless.</li>
|
||
<li>Always know how your business makes money, that determines who gets paid what.</li>
|
||
<li>If you want to feel important as a software developer, work at a tech company.</li>
|
||
</ul>
|
||
<p>然后是 《<a href="https://97-things-every-x-should-know.gitbooks.io/97-things-every-programmer-should-know/content/en/index.html">97 Things Every Programmer Should Know</a>》,其中有 97 个非常不错的编程方面的建议。这篇文章是比较经典的,别被 "97" 吓住,你可以快速浏览一下,会让你有不同的感觉的。另外,在工作一段时间后再来读,你会更有感觉。</p>
|
||
<h1>英文能力</h1>
|
||
<p>必须指出,再往下走,有一个技能非常重要,那就是英文。如果对这个技能发怵的话,那么你可能无缘成为一个程序员高手了。因为我们所有的计算机技术全部来自于西方国家,所以如果你要想成为一个高手的话,那么必须到信息的源头去。英文的世界真是有价值的信息的集散地。你可以在那里,到官网上直接阅读手册,到 StackOverflow 上问问题,到 YouTube 上看很多演讲和教学,到 GitHub 上参与社区,用 Google 查询相关的知识,到国际名校上参加公开课……</p>
|
||
<p>如果你的英文能力有问题的话,那么基本上来说,你无法成为一个高手。因此,学好英文是非常有必要的,我说的不只是读写,还有听和说。相信你在学校里学过英文,有一定的基础。所以,我给你下面的这些建议。</p>
|
||
<ol>
|
||
<li>坚持 Google 英文关键词,而不是在 Google 里搜中文。</li>
|
||
<li>在 GitHub 上只用英文。用英文写代码注释,写 Code Commit 信息,用英文写 Issue 和 Pull Request,以及用英文写 Wiki。</li>
|
||
<li>坚持到 YouTube 上每天看 5 分钟的视频。YouTube 上有相关的机器字幕,实在不行就打开字幕。</li>
|
||
<li>坚持用英文词典而不是中文的。比如:<a href="https://dictionary.cambridge.org/">剑桥英语词典</a> 或是 <a href="http://www.dictionary.com/">Dictionary.com</a> 。你可以安装一个 Chrome 插件 <a href="https://chrome.google.com/webstore/detail/google-dictionary-by-goog/mgijmajocgfcbeboacabfgobmjgjcoja">Google Dictionary</a>。</li>
|
||
<li>坚持用英文的教材而不是中文的。比如:<a href="https://www.bbc.co.uk/learningenglish/">BBC 的 Learning English</a> ,或是到一些 ESL 网站上看看,如 <a href="https://www.rong-chang.com/">ESL: English as a Second Language</a> 上有一些课程。</li>
|
||
<li>花钱参加一些线上的英文课程,用视频和老外练习。</li>
|
||
</ol>
|
||
<h1>问问题的能力</h1>
|
||
<p>提问的智慧(<a href="http://www.catb.org/~esr/faqs/smart-questions.html">How To Ask Questions The Smart Way</a>)一文最早是由 Eric Steven Raymond 所撰写的,详细描述了发问者事前应该做好什么,而什么又是不该做的。作者认为这样能让问题容易令人理解,而且发问者自己也能学到较多东西。</p>
|
||
<p>此文一经发出,就广受好评,被广泛转载并奉为经典。该文也有 <a href="http://doc.zengrong.net/smart-questions/cn.html">简体中文翻译版</a> 被流传着,所以在华人界也是篇很有名的文章。有两个著名的缩写 STFW(Search the fxxking web)以及 RTFM(Read the fxxking manual)就是出自本文。</p>
|
||
<p>另外,还有一个经典的问题叫 <a href="http://xyproblem.info/">X-Y Problem</a>。对我来说,这是一个很容易犯的错误,所以,你也要小心避免(我曾经在我的 Coolshell 上写过这个事《<a href="https://coolshell.cn/articles/10804.html">X-Y 问题</a>》)。</p>
|
||
<p>然后,你可以到 StackOverflow 上看看如何问问题的一些提示 -- “<a href="https://meta.stackexchange.com/questions/7931/faq-for-stack-exchange-sites">FAQ for StackExchange Site</a>”。</p>
|
||
<p>作为一个程序员,不做伸手党,你必需要读一读这几篇文章,并努力践行。</p>
|
||
<h1>写代码的修养</h1>
|
||
<p>除了《代码大全》外,你还需要补充一些如何写好代码的知识,有以下几本书推荐。</p>
|
||
<ul>
|
||
<li>《<a href="https://book.douban.com/subject/4262627/">重构:改善既有代码的设计</a>》,这本书是 Martin Fowler 的经典之作。这本书的意义不仅仅在于 " 改善既有代码的设计 ",也指导了我们如何从零开始构建代码的时候避免不良的代码风格。这是一本程序员必读的书。</li>
|
||
<li>《<a href="https://book.douban.com/subject/2248759/">修改代码的艺术</a>》,这本书是继《重构》之后探讨修改代码技术的又一里程碑式的著作,而且从涵盖面和深度上都超过了前两部经典(《代码大全》和《重构》)。作者将理解、测试和修改代码的原理、技术和最新工具(自动化重构工具、单元测试框架、仿对象、集成测试框架等),与解依赖技术和大量开发和设计优秀代码的原则、最佳实践相结合,许多内容非常深入。这本书可以让你不仅能掌握最顶尖的修改代码技术,还可以大大提高对代码和软件开发的领悟力。</li>
|
||
<li>《<a href="https://book.douban.com/subject/4199741/">代码整洁之道</a>》,这本书提出一种观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护和升级奠定了良好基础。本书作者给出了一系列行之有效的整洁代码操作实践。这些实践在本书中体现为一条条规则(或称 " 启示 "),并辅以来自现实项目正反两面的范例。</li>
|
||
<li>《<a href="https://book.douban.com/subject/11614538/">程序员的职业素养</a>》,这本书是编程大师 Bob 大叔 40 余年编程生涯的心得体会,讲解成为真正专业的程序员需要什么样的态度、原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来人引路,助其职业生涯迈上更高台阶。</li>
|
||
</ul>
|
||
<p>另外,作为一个程序员,Code Review 是非常重要的程序员修养。 Code Review 对我的成长非常有帮助,我认为没有 Code Review 的公司都没有必要呆(因为不做 Code Review 的公司一定是不尊重技术的)。下面有几篇我觉得还不错的 Code Review 的文章,供你参考。</p>
|
||
<ul>
|
||
<li><a href="https://medium.com/@palantir/code-review-best-practices-19e02780015f">Code Review Best Practices</a></li>
|
||
<li><a href="https://dzone.com/articles/how-google-does-code-review">How Google Does Code Review</a></li>
|
||
<li><a href="https://thenewstack.io/linkedin-code-review/">LinkedIn’s Tips for Highly Effective Code Review</a></li>
|
||
</ul>
|
||
<p>除了 Code Review 之外,Unit Test 也是程序员的一个很重要的修养。写 Unit Test 的框架一般来说都是从 JUnit 衍生出来的,比如 CppUnit 之类的。学习 JUnit 使用的最好方式就是到其官网上看 <a href="https://junit.org/junit5/docs/current/user-guide/">JUnit User Guide</a>(<a href="http://sjyuan.cc/junit5/user-guide-cn/">中文版</a>)。然后,有几篇文章你可以看看(也可以自行 Google):</p>
|
||
<ul>
|
||
<li><a href="https://stackify.com/unit-testing-basics-best-practices/">You Still Don’t Know How to Do Unit Testing</a></li>
|
||
<li><a href="https://dzone.com/articles/unit-testing-best-practices">Unit Testing Best Practices: JUnit Reference Guide</a></li>
|
||
<li><a href="http://www.kyleblaney.com/junit-best-practices/">JUnit Best Practices</a></li>
|
||
</ul>
|
||
<h1>安全防范</h1>
|
||
<p>在代码中没有最基本的安全漏洞问题,也是我们程序员必需要保证的重要大事,尤其是对外暴露 Web 服务的软件,其安全性就更为重要了。对于在 Web 上经常出现的安全问题,有必要介绍一下 <a href="https://www.owasp.org/index.php/Main_Page">OWASP - Open Web Application Security Project</a>。</p>
|
||
<p>OWASP 是一个开源的、非盈利的全球性安全组织,致力于应用软件的安全研究。其被视为 Web 应用安全领域的权威参考。2009 年,国际信用卡数据安全技术 PCI 标准将其列为必要组件,美国国防信息系统局、欧洲网络与信息安全局、美国国家安全局等政府机构所发布的美国国家和国际立法、标准、准则和行业实务守则参考引用了 OWASP。</p>
|
||
<p>美国联邦贸易委员会(FTC)强烈建议所有企业需遵循 OWASP 十大 Web 弱点防护守则。所以,对于[https://www.owasp.org/index.php/Category:OWASP_T](http://localhost:8080/01 左耳听风/html版本/ op_Ten_Project">OWASP Top 10 项目 是程序员非常需要关注的最基本的也是最严重的安全问题,现在其已经成了一种标准,这里是其中文版《<a href="https://www.owasp.org/images/d/dc/OWASP_Top_10_2017_中文版v1.3.pdf">OWASP Top 10 2017 PDF 中文版</a>》。</p>
|
||
<p>下面是安全编程方面的一些 Guideline。</p>
|
||
<ul>
|
||
<li><a href="https://security.berkeley.edu/secure-coding-practice-guidelines">伯克立大学的 Secure Coding Practice Guidelines</a>。</li>
|
||
<li><a href="https://wiki.sei.cmu.edu/confluence/display/seccode/SEI+CERT+Coding+Standards">卡内基梅隆大学的 SEI CERT Coding Standards</a>。</li>
|
||
</ul>
|
||
<p>此外,有一篇和 HTTP 相关的安全文章也是每个程序员必需要读的——《<a href="https://www.keycdn.com/blog/http-security-headers/">Hardening Your HTTP Security Headers</a>》。</p>
|
||
<p>最后想说的是 " 防御性编程 ",英文叫<a href="https://en.wikipedia.org/wiki/Defensive_programming">Defensive Programming</a>,它是为了保证对程序的不可预见的使用,不会造成程序功能上的损坏。它可以被看作是为了减少或消除墨菲定律效力的想法。防御式编程主要用于可能被滥用,恶作剧或无意地造成灾难性影响的程序上。下面是一些文章。</p>
|
||
<ul>
|
||
<li><a href="https://medium.com/web-engineering-vox/the-art-of-defensive-programming-6789a9743ed4">The Art of Defensive Programming</a>。</li>
|
||
<li>当然,也别太过渡了,这篇文章可以看看,<a href="https://medium.com/@cvitullo/overly-defensive-programming-e7a1b3d234c2">Overly defensive programming</a>。</li>
|
||
</ul>
|
||
<h1>软件工程和上线</h1>
|
||
<p>系统上线是一件比较严肃的事,这表明你写的软件不是跑在自己的机器上的玩具,或是实验室里的实验品,而是交互给用户使用的,甚至是用户付费的软件。对于这样的软件或系统,我们需要遵守一些上线规范,比如,需要认真测试,并做上线前检查,以及上线后监控。下面是几个简单的规范,供你参考。</p>
|
||
<ul>
|
||
<li>关于测试,推荐两本书。
|
||
<ul>
|
||
<li>《<a href="https://book.douban.com/subject/4187479/">完美软件:对软件测试的各种幻想</a>》,这本书重点讨论了与软件测试有关的各种心理问题及其表现与应对方法。作者首先阐述软件测试之所以如此困难的原因–人的思维不是完美的,而软件测试的最终目的就是发现对改善软件产品和软件开发过程有益的信息,故软件测试是一个信息获取的过程。</li>
|
||
<li>《<a href="https://book.douban.com/subject/25742200/">Google 软件测试之道</a>》,描述了测试解决方案,揭示了测试架构是如何设计、实现和运行的,介绍了软件测试工程师的角色;讲解了技术测试人员应该具有的技术技能;阐述了测试工程师在产品生命周期中的职责;讲述了测试管理,并对在 Google 的测试历史上或者主要产品上发挥了重要作用的工程师的访谈,这令那些试图建立类似 Google 的测试流程或团队的人受益很大。</li>
|
||
</ul>
|
||
</li>
|
||
<li>当你的系统要上线时,你是不是已经做好上线的准备了?这里有两个 Checklist 供你做上线前的一些检查。
|
||
<ul>
|
||
<li><a href="https://github.com/mtdvio/going-to-production/blob/master/serverside-checklist.md.html">Server Side checklist</a></li>
|
||
<li><a href="https://github.com/mtdvio/going-to-production/blob/master/spa-checklist.md.html">Single Page App Checklist</a></li>
|
||
</ul>
|
||
</li>
|
||
<li>《<a href="https://www.datadoghq.com/blog/monitoring-101-collecting-data/">Monitoring 101</a>》这是一篇运维方面的入门文章,告诉你最基本的监控线上运行软件的方法和实践。</li>
|
||
</ul>
|
||
<h1>小结</h1>
|
||
<p>好了,总结一下今天分享的主要内容。程序员修养看似与程序员练级关系不大,实际上却能反映出程序员的工程师特质和价值观,决定了这条路你到底能走多远。<strong>有修养的程序员才可能成长为真正的工程师和架构师,而没有修养的程序员只能沦为码农</strong>。</p>
|
||
<p>因此,在这篇文章中,我指出了我认为比较重要的几个方面:英文能力、问问题的能力、写代码的修养、安全防范意识、软件工程和上线规范等。这些能力的训练和培养将为后续的学习和发展夯实基础。</p>
|
||
<h1>附录:编程规范</h1>
|
||
<p>我们在写代码时,最好参考一些已有的最佳实践。为什么要有编程规范和最佳实践,要让所有人按一定的规范来编程呢?有下面几个主要原因。</p>
|
||
<ul>
|
||
<li>可以让你的代码很规整,这有利于代码易读性,从而可以更容易地维护。</li>
|
||
<li>提升开发效率,我们知道,效率来自于结构化,而不是杂乱。</li>
|
||
<li>可以让你的软件避免一些容易掉坑的陷阱,也让 Bug 更少,质量更高。</li>
|
||
<li>可以让团队成员更高效率地协作。</li>
|
||
</ul>
|
||
<p>如果一个程序员没有这类规范和最佳实践的沉淀,那么是很难成为真正的程序员的,只能沦为码农。</p>
|
||
<p>当然,对于一些代码风格方面的东西,比如左大括号是否要换行,缩进是用 tab 还是空格等等,我觉得没有对错,只要团队统一就好了。</p>
|
||
<p>下面,我罗列了一堆各种语言的编程规范,供你参考。</p>
|
||
<h2>编程语言相关</h2>
|
||
<p><strong>C 语言</strong></p>
|
||
<ul>
|
||
<li><a href="http://homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf">NASA C Style</a>。</li>
|
||
<li><a href="https://users.ece.cmu.edu/~eno/coding/CCodingStandard.html">C Coding Standard</a>。</li>
|
||
<li><a href="https://en.wikibooks.org/wiki/C_Programming/Structure_and_style">C Programming/Structure and style</a>。</li>
|
||
<li><a href="https://www.kernel.org/doc/html/latest/process/coding-style.html">Linux kernel coding style</a>。</li>
|
||
<li><a href="https://www.gnu.org/prep/standards/html_node/Writing-C.html">GNU Coding Standard</a>,GNU 的编码规范。</li>
|
||
</ul>
|
||
<p><strong>C++ 语言</strong></p>
|
||
<ul>
|
||
<li><a href="https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines">C++ Core Guidelines</a>,这个文档是各种 C++ 的大拿包括原作者在内在持续讨论更新的和 C++ 语言相关的各种最佳实践。</li>
|
||
<li><a href="https://google.github.io/styleguide/cppguide.html">Google C++ Style Guide</a>。</li>
|
||
</ul>
|
||
<p><strong>Go 语言</strong></p>
|
||
<ul>
|
||
<li><a href="https://golang.org/doc/effective_go.html">Effective Go</a> ,Go 的语法不复杂,所以,Go 语言的最佳实践只需要看这篇官方文档就够了。</li>
|
||
</ul>
|
||
<p><strong>Java 语言</strong></p>
|
||
<ul>
|
||
<li><a href="http://www.oracle.com/technetwork/java/codeconvtoc-136057.html">Code Conventions for the Java™ Programming Language</a> ,Java 官方的编程规范。</li>
|
||
<li><a href="https://google.github.io/styleguide/javaguide.html">Google Java Style Guide</a>,Google 的 Java 编码规范。</li>
|
||
</ul>
|
||
<p><strong>JavaScript 语言</strong></p>
|
||
<ul>
|
||
<li><a href="http://jstherightway.org/">JavaScript The Right Way</a> ,一个相对比较容读的 JavaScript 编程规范,其中不但有代码规范,还有设计模式,测试工具,编程框架,游戏引擎……</li>
|
||
<li><a href="https://google.github.io/styleguide/jsguide.html">Google JavaScript Style Guide</a>,Google 公司的 JavaScript 的编码规范,一个非常大而全的编程规范。</li>
|
||
<li><a href="https://github.com/airbnb/javascript">Airbnb JavaScript Style Guide</a>,Airbnb 的 JavaScript 编程规范。没 Google 的这么大而全,但是也很丰富了。</li>
|
||
<li><a href="https://contribute.jquery.org/style-guide/js/">jQuery Core Style Guide</a>,jQuery 的代码规范。</li>
|
||
<li><a href="https://github.com/ryanmcdermott/clean-code-javascript">JavaScript Clean Code</a>,前面推荐过的《代码整洁之道》一书中的 JavaScript 的实践 。</li>
|
||
</ul>
|
||
<p>还有一些其它相对比较简单的 JavaScript 编程规范。</p>
|
||
<ul>
|
||
<li><a href="https://addyosmani.com/blog/javascript-style-guides-and-beautifiers/">JavaScript Style Guides And Beautifiers</a> ,这是一篇推荐 JavaScript 编程规范的文章,你可以看看。</li>
|
||
<li><a href="https://www.w3schools.com/js/js_conventions.asp">JavaScript Style Guide and Coding Conventions</a>,这是 W3Schools 的 JavaScript。</li>
|
||
<li><a href="http://crockford.com/javascript/code.html">Code Conventions for the JavaScript</a>。</li>
|
||
</ul>
|
||
<p><strong>PHP 语言</strong></p>
|
||
<ul>
|
||
<li><a href="http://www.php-fig.org/psr/">PHP FIG</a>,PHP 编码规范及标准推荐。</li>
|
||
<li><a href="http://www.phptherightway.com/">PHP The Right Way</a>,除了编码规范之外的各种 PHP 的最佳实践,还包括一些设计模式,安全问题,以及服务部署,Docker 虚拟化以及各种资源。</li>
|
||
<li><a href="https://github.com/jupeter/clean-code-php">Clean Code PHP</a>,《代码整洁之道》的 PHP 实践。</li>
|
||
</ul>
|
||
<p><strong>Python 语言</strong></p>
|
||
<ul>
|
||
<li><a href="https://www.python.org/dev/peps/pep-0008/">Style Guide for Python Code</a>,Python 官方的编程码规范。</li>
|
||
<li><a href="https://google.github.io/styleguide/pyguide.html">Google Python Style Guide</a>,Google 公司的 Python 编码规范。</li>
|
||
<li><a href="http://docs.python-guide.org/en/latest/">The Hitchhiker’s Guide to Python</a>,这不只是 Python 的编程规范,还是 Python 资源的集散地,强烈推荐。</li>
|
||
</ul>
|
||
<p><strong>Ruby 语言</strong></p>
|
||
<ul>
|
||
<li><a href="https://github.com/airbnb/ruby">Ruby Style Guide</a>,Airbnb 公司的 Ruby 编程规范。</li>
|
||
<li><a href="https://github.com/bbatsov/ruby-style-guide">Ruby Style Guide</a> 。</li>
|
||
</ul>
|
||
<p><strong>Rust 语言</strong></p>
|
||
<ul>
|
||
<li><a href="https://github.com/rust-lang-nursery/fmt-rfcs/blob/master/guide/guide.md.html">Rust Style Guide</a>。</li>
|
||
<li><a href="https://aturon.github.io/">Rust Guidelines</a> 开源社区里最好的 Rust 编程规范。</li>
|
||
</ul>
|
||
<p><strong>Scala 语言</strong></p>
|
||
<ul>
|
||
<li><a href="https://docs.scala-lang.org/style/">Scala Style Guide</a>,Scala 官方的编程规范。</li>
|
||
<li><a href="https://github.com/databricks/scala-style-guide">Databricks Scala Guide</a> - Databricks 的 Scala 编程规范。</li>
|
||
<li><a href="https://github.com/alexandru/scala-best-practices">Scala Best Practices</a>。</li>
|
||
</ul>
|
||
<p><strong>Shell 语言</strong></p>
|
||
<ul>
|
||
<li><a href="https://google.github.io/styleguide/shell.xml">Google Shell Style Guide</a>,Google 的 Shell 脚本编程规范。</li>
|
||
</ul>
|
||
<p><strong>Node.js 相关</strong></p>
|
||
<ul>
|
||
<li><a href="https://docs.npmjs.com/misc/coding-style">npm-coding-style</a>。</li>
|
||
<li><a href="https://github.com/Microsoft/nodejs-guidelines">Microsoft + Node.js Guidelines</a>。</li>
|
||
<li><a href="https://github.com/felixge/node-style-guide">Node.js Style Guide</a>。</li>
|
||
</ul>
|
||
<p><strong>Mozilla 的编程规范</strong></p>
|
||
<ul>
|
||
<li><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style">Mozilla Coding Style Guide</a>,其中包括 C、C++、Java、Python、JavaScript、Makefile 和 SVG 等编程规范。</li>
|
||
</ul>
|
||
<h2>前端开发相关</h2>
|
||
<ul>
|
||
<li><a href="https://cssguidelin.es/">CSS Guidelines</a>,CSS 容易学,但是不好写,这篇规范会教你如何写出一个健全的、可管理的,并可以扩展的 CSS。</li>
|
||
<li><a href="https://smacss.com/">Scalable and Modular Architecture for CSS</a>,这是一本教你如何写出可扩展和模块化的 CSS 的电子书,非常不错。</li>
|
||
<li><a href="https://github.com/bendc/frontend-guidelines">Frontend Guidelines</a>,一些和 HTML、CSS、JavaScript 相关的最佳实践。</li>
|
||
<li><a href="https://sass-guidelin.es/">Sass Guidelines</a>,Sass 作为 CSS 的补充,其要让 CSS 变得更容易扩展。然而,也变得更灵活,这意味着可以被更容易滥用。这里这篇 " 富有主见 " 的规范值得你一读。</li>
|
||
<li><a href="https://github.com/airbnb/css">Airbnb CSS / Sass Styleguide</a>, Airbnb 的 CSS/Sass 规范。</li>
|
||
<li>说了 Sass 就不得不说 LESS,这里有几篇和 LESS 相关的:<a href="https://gist.github.com/radermacher/f84b24af816111faf0ef">LESS Coding Guidelines</a>、<a href="https://github.com/odoo/odoo/wiki/LESS-coding-guidelines">LESS Coding Guidelines</a>、<a href="http://devdocs.magento.com/guides/v2.0/coding-standards/code-standard-less.html">LESS coding standard</a>。</li>
|
||
<li><a href="https://github.com/marcobiedermann/html-style-guide">HTML Style Guide</a>,一个教你如何写出性能更高,结构更好,容易编程和扩展的 HTML 的规范。</li>
|
||
<li><a href="http://codeguide.co/">HTML + CSS Code Guide</a>,如何写出比较灵活、耐用、可持续改进的 HTML 和 CSS 的规范。</li>
|
||
<li><a href="https://github.com/polarmobile/coffeescript-style-guide">CoffeeScript Style Guide</a>,CoffeeScript 的最佳实践和编程规范。</li>
|
||
<li><a href="https://google.github.io/styleguide/htmlcssguide.html">Google HTML/CSS Style Guide</a>,Google 的 HTML/CSS 的编程规范。</li>
|
||
<li><a href="https://www.smashingmagazine.com/2011/01/guidelines-for-responsive-web-design/">Guidelines for Responsive Web Design</a> ,响应式 Web 设计的规范和最佳实践。</li>
|
||
<li><a href="https://standards.usa.gov/">U.S. Web Design Standards</a>,这是美国政府网端要求的一些 UI 交互可视化的一些规范。</li>
|
||
</ul>
|
||
<p>最后是一个前端开发的各种注意事项列表,非常有用。</p>
|
||
<ul>
|
||
<li><a href="https://github.com/thedaviddias/Front-End-Checklist">Front-End Checklist</a> ,一个前端开发的 Checklist,其中包括 HTML、CSS 和 JavaScript,还和图片、字体、SEO、性能相关,还包括关一些和安全相关的事项,这个列表真的是太好了。</li>
|
||
</ul>
|
||
<h2>移动端相关</h2>
|
||
<p><strong>Kotlin</strong></p>
|
||
<ul>
|
||
<li><a href="https://kotlinlang.org/docs/reference/coding-conventions.html">Coding Conventions</a>。</li>
|
||
</ul>
|
||
<p><strong>Objective-C 语言</strong></p>
|
||
<ul>
|
||
<li><a href="https://github.com/github/objective-c-style-guide">Objective-C Style guide</a>,Style guide & coding conventions for Objective-C projects。</li>
|
||
<li><a href="https://google.github.io/styleguide/objcguide.xml">Google Objective-C Style Guide</a>。</li>
|
||
<li><a href="https://github.com/NYTimes/objective-c-style-guide">NYTimes Objective-C Style Guide</a> ,The Objective-C Style Guide used by The New York Times。</li>
|
||
</ul>
|
||
<p><strong>Swift 语言</strong></p>
|
||
<ul>
|
||
<li><a href="https://swift.org/documentation/api-design-guidelines/">API Design Guidelines</a>。</li>
|
||
<li><a href="https://github.com/github/swift-style-guide">Swift</a> - 一个 Swift 的相关编程规范的教程。</li>
|
||
<li><a href="https://github.com/raywenderlich/swift-style-guide">Swift style guide</a>。</li>
|
||
<li><a href="https://github.com/linkedin/swift-style-guide">Swift Style Guide</a> - LinkedIn 的官方 Swift 编程规范。</li>
|
||
<li><a href="https://github.com/metova/swift-style-guide">Metova’s Swift style guide</a>。</li>
|
||
<li><a href="https://github.com/xmartlabs/Swift-Style-Guide">Xmartlabs Swift Style Guide</a>,Xmartlabs 的 Swift 编程规范。</li>
|
||
</ul>
|
||
<h2>API 相关</h2>
|
||
<ul>
|
||
<li><a href="http://stateless.co/hal_specification.html">HAL</a>,一个简单的 API 规范教程。</li>
|
||
<li><a href="https://github.com/Microsoft/api-guidelines">Microsoft REST API Guidelines</a>,微软软的 Rest API 规范。</li>
|
||
<li><a href="https://apiguide.readthedocs.io/en/latest/">API Design Guide</a>。</li>
|
||
<li><a href="https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9">RESTful API Designing guidelines - The best practices</a>。</li>
|
||
<li><a href="http://jsonapi.org/recommendations">JSON API - Recommendations</a>,JSON 相关的 API 的一些推荐实践。</li>
|
||
<li><a href="https://github.com/shieldfy/API-Security-Checklist">API Security Checklist</a> ,API 的安全问题的检查列表。</li>
|
||
</ul>
|
||
<h2>开发工具相关</h2>
|
||
<p><strong>Markdown 相关</strong></p>
|
||
<ul>
|
||
<li><a href="https://github.com/google/styleguide/blob/gh-pages/docguide/style.md.html">Google Markdown Style Guide</a>。</li>
|
||
<li><a href="http://www.cirosantilli.com/markdown-style-guide/">Markdown Style Guide</a>。</li>
|
||
</ul>
|
||
<p><strong>JSON</strong></p>
|
||
<ul>
|
||
<li><a href="https://google.github.io/styleguide/jsoncstyleguide.xml">Google JSON Style Guide</a>。</li>
|
||
<li><a href="http://www.w3resource.com/slides/json-style-guide.php">JSON Style Guide</a>。</li>
|
||
</ul>
|
||
<p><strong>Git 相关</strong></p>
|
||
<ul>
|
||
<li><a href="https://github.com/agis/git-style-guide">Git Style Guide</a>。</li>
|
||
<li><a href="https://github.com/git/git/blob/master/Documentation/CodingGuidelines">Few Rules from Git Documentation</a>。</li>
|
||
</ul>
|
||
<p><strong>正则表达式相关</strong></p>
|
||
<ul>
|
||
<li><a href="https://github.com/regexhq">RegexHQ</a>。</li>
|
||
<li><a href="https://github.com/zeeshanu/learn-regex">Learn regex the easy way</a>。</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<div>
|
||
<div style="float: left">
|
||
<a href="/专栏/左耳听风/071 程序员练级攻略(2018):正式入门.md.html">上一页</a>
|
||
</div>
|
||
<div style="float: right">
|
||
<a href="/专栏/左耳听风/073 程序员练级攻略(2018):编程语言.md.html">下一页</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
|
||
</div>
|
||
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"70997877c84d3cfa","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
|
||
</body>
|
||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
|
||
<script>
|
||
window.dataLayer = window.dataLayer || [];
|
||
function gtag() {
|
||
dataLayer.push(arguments);
|
||
}
|
||
gtag('js', new Date());
|
||
gtag('config', 'G-NPSEEVD756');
|
||
var path = window.location.pathname
|
||
var cookie = getCookie("lastPath");
|
||
console.log(path)
|
||
if (path.replace("/", "") === "") {
|
||
if (cookie.replace("/", "") !== "") {
|
||
console.log(cookie)
|
||
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
|
||
}
|
||
} else {
|
||
setCookie("lastPath", path)
|
||
}
|
||
function setCookie(cname, cvalue) {
|
||
var d = new Date();
|
||
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
|
||
var expires = "expires=" + d.toGMTString();
|
||
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
|
||
}
|
||
function getCookie(cname) {
|
||
var name = cname + "=";
|
||
var ca = document.cookie.split(';');
|
||
for (var i = 0; i < ca.length; i++) {
|
||
var c = ca[i].trim();
|
||
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
|
||
}
|
||
return "";
|
||
}
|
||
</script>
|
||
</html>
|