0%

视觉里程计

主要目标:

  • 理解图像特征点的意义,掌握单幅图像提取特征点及多幅图像中匹配特征点的方法
  • 理解对极几何原理,利用对极约束,恢复图像之间的camera位姿
  • 理解PnP问题,利用已知三维结构与图像对应关系,求解camera位姿
  • 理解ICP问题,利用点云匹配关系,求解camera位姿
  • 理解三角化获得二维图像上对应点的三维结构

图像特征性质:多图可重复、可区别、高效率、本地性

对极几何:从两张RGB图的特征匹配中求解本质矩阵,从而推出R,t.由8组特征匹配对SVD求解有4个可能解,幸运地只有一个解均在两个相机的光轴正向。但因缺乏深度尺度,所以t为单位1.
不稳定的问题:1.初始化纯旋转t为0,三角化R不稳定; 2.多于8个特征匹配点可用最小二乘或者RANSAC方法求E,F,H;

三角测量:将两个二维点对以及之间的位姿变换输入opencv的triangulatePoints中,得到点对的三维空间坐标;由于三角测量由平移产生,引出核心矛盾:平移小,则像素有较大深度不确定性;平移大,则图像外观变化大,特征匹配困难。

PnP:载入两张RGB图及其中一张对齐的Depth图,使用opencv的solvePnP解三维点对及二维点对的外参位姿变化R,t;

Bundle Adjustment:用于最小化重投影误差,将观测到的三维空间点与当前估计位姿投影位置得到的误差。考虑匹配特征点上的最优化重投影。

ICP方法:载入两个位姿状态的RGBD图,图像匹配后获得匹配好的3D点对,直接采用线性代数的求解(SVD)及BA优化获得最佳外参位姿即可。

课后习题

1.图像特征点原理及区别
Harris角点:基于图像灰度的一阶导数滤波检测,主要依赖与移动方向窗口内图像块的相似性。

SIFT/SURF:1.构建高斯差分金字塔 2.准确提取关键点 3.结合邻域构建描述子

2.opencv接口,SIFT::create(nfeatures, nOctavelLayers, constrastThreshold, edgeThreshold, sigma);
特征数量,金字塔最小层数,特征过滤阈值,边缘过滤阈值,高斯层级。
默认参数下,1000个SIFT特征点用时0.15s;

3.如何让特征点分布更均匀:goodFeatureToTrack(GFTT)方法

4.特征匹配方法有哪些?
FLANN快速最近邻搜索包,大数据下比BFMatcher暴力搜索要佳。FLANN主要三种算法:KD tree, k-means tree, hiearachy tree;

5.其他PNP方法:EPNP精度较高,复杂度为O(N).DLT更快,精度下降。

6.G2O可把两图的空间点都加进来一起优化

7.图像误匹配影响整体优化效果,可以通过鲁棒核函数降低影响程度,同时引入RANSAC.

视觉里程计2

本章目标:

  • 理解光流法特征点跟踪
  • 理解直接法估计相机位姿
  • 使用G2O进行直接法计算

相机与图像

本章目标:

  • 理解针孔模型、内参以及径向畸变参数
  • 理解空间点如何投影到相机成像平面
  • 掌握OpenCV图像存储与表达
  • 掌握基本的摄像头标定方法

针孔模型

三维空间点与相机成像平面建模关系
$$\frac{Z}{f} = \frac{X}{X^,} = \frac{Y}{Y^,}$$

像素坐标系与成像平面间相差了一个缩放原点的平移: $u = \alpha X^, + c_x, v=\beta Y^, + c_y$

将空间点与成像平面的公式代入,习惯性把Z左挪得到下式
.其中f单位为米,$\alpha,\beta$单位为像素每米,$f_x,f_y$单位为像素。K为相机内参,通常厂商会帮你标定给出,有时候需要自己确定或精细测量,就是摄像头标定

为了更好成像效果,通常加入透镜,因此带来影响:1.透镜自身形状对光线传播的影响;2.机械组装透镜与成像平面不可能完全平行; 因此引入径向畸变和桶形畸变,它们引入的畸变均随着离中心的距离增加而增加。

纠正畸变过程:

  • 1.将三维空间点投影到归一化图像平面,坐标为$[x,y]^T$
  • 2.归一化平面的点进行经过5个参数进行径向和切向畸变校正:
    $$x_{corrected} = x(1+k_1r^2+k_2r^4+k_3r^6) +2p_1xy +p_2(r^2+2x^2) $$
    $$y_{corrected} = y(1+k_1r^2 +k_2r^4+k_3r^6)+p_1(r^2+2y^2)+2p_2xy$$
  • 3.纠正后的点通过内参矩阵投影到像素平面,得到图像上正确的位置,生成新的纠正后的图像
    $$u=f_xx_{corrected}+c_x$$
    $$v=f_yy_{corrected}+c_y$$

总结单目相机成像过程:

  • 1.首先世界坐标系下有一个固定点P,世界坐标为$P_w$
  • 2.由于相机在运动,它运动由R,t或者变换矩阵T描述。P的相机坐标为$\hat{P_c} = RP_w +t$
  • 3.此时$\hat{P_c}$仍由X,Y,Z三个量表示,需要投影到归一化平面Z=1上,得到P的归一化相机坐标:$P_c=[X/Z,Y/Z,1]^T$
  • 4.最后将归一化坐标经过内参对应到像素坐标:$P_{uv}=KP_c$

个人思考:归一化坐标主要因为内参标定建立在一个参考平面,最general的就是建立在z=1米的参考平面上。这是由内参标定的参考平面决定的。

双目模型

水平放置左右相机在x轴上位移,有基线b。将左右成像中的像素匹配,求出视差图d。结合模型获得深度图。视差越大,距离越近。基线长则测得距离远,计算量和精度问题,且需要图像纹理丰富变化。

RGBD相机

红外结构光:Intel RealSense 以及面TOF相机

非线性优化

目标:

  • 理解最小二乘含义和处理方式
  • 理解高斯牛顿和LM下降
  • 学习Ceres和g2o用法

EKF不考虑历史,只关心当前时刻的状态估计;而非线性优化使用了所有时刻采集的数据进行状态估计。


贝叶斯法则,x为相机位姿,z为路标在图像上的像素位置。进一步,假设观测路标与位姿满足高斯分布,用最小化负对数可便利地求MLE。

直观而言,由于观测和运动方程噪声存在,当把估计的轨迹与地图代入SLAM模型时,方程组不会完美成立。因此对位姿的估计值进行微调,使得总体误差下降,当降到极小值即优化完毕。这就是典型的非线性优化过程。

SLAM的最小二乘具有特定结构:

  • 目标函数由许多个误差的平方和组成,每个误差项只与上一时刻相关,小规模的约束
  • 总体误差的增量方程具有一定的稀疏性
  • 使用李代数时为无约束的最小二乘问题,若旋转矩阵引入额外约束而复杂
  • 可用其他范数构建优化问题

最小二乘问题

$$min_x \frac{1}{2} ||f(x)||_2^2$$
若f(x)形式简单,可用解析解对f求x上的导数为0的极值点,再回代比较;但是SLAM的李代数导数形式时非线性方程,所以要用计算机中迭代的过程逼近:

  • 1.给定初始值$x_0$
  • 2.对第k次迭代寻找增量$\Delta x_k$使目标函数极小
  • 3.若$\Delta x_k$足够小(位姿误差),则停止
  • 4.否则$x_(k+1) = x_k + \Delta x_k$,继续2.
    只需要找到local minimum,主要问题变为如何确定增量$\Delta x_k$
    导数展开,只取一阶导雅可比为0,最速下降法,但过于贪心容易锯齿反而增加迭代
    只取二阶导为0则引入海塞矩阵,问题规模较大使二阶导系数H不容易计算。如此一来,便促使研究引入更为实用的高斯牛顿法和LM列文伯格-马夸尔特方法。


不同于对x求导,这里对$\Delta x$求导

如此GN用$J^TJ$作为牛顿法中二阶Hessian矩阵的近似,优化了计算。但要求保证近似H可逆正定。但实际中可能出现为奇异矩阵或者病态,此时增量稳定性不佳导致算法不收敛。虽然GN有不少问题,但很多实用方法是从这个思想优化延伸的。

LM阻尼牛顿法

GN采用近似二阶泰勒只能在展开点附近有较好近似效果,因此对$\Delta x$添加信赖域区域,使它不能过大而不准确,这类方法也叫信赖区域法(Trust Region Method)。
如何确定可用的信赖区域? 比较近似模型跟实际函数之间的差异

工作流程:

LM求解过程一定程度上避免线性方程组的系数矩阵非奇异和病态问题,提供更稳定准确的增量$\Delta x$

小结

数值优化和最优化是解决实际问题中的基本数学工具,可以感兴趣多了解。
非线性优化的迭代求解方案均需要提供一个良好的初始值,不同的初始值导致不同的计算即过,这是通病。因此如何提供科学的初始值以及算法阈值是很重要的事情!

对大矩阵求逆可以用QR、Cholesky分解;对大的稀疏矩阵也有相关消元分解,求增量的方法具体可了解矩阵论。

Ceres为谷歌开源库,针对非线性优化问题,主要用法:

  • 定义cost function模型。书写类,定义带模板参数的()运算符,使成为拟函数Functor,从而像调用函数一样使用如类a()
  • 调用AddResidualBlock将采集数据的误差项添加到目标函数:通常使用Ceres自动求导
  • 设定好后调用solve函数求解

g2o进一步把SLAM优化问题用图论描述,成为图优化问题。节点表示优化变量,边为误差项。
使用流程:
1.顶点的更新函数:位姿更新需要重新定义左乘或者右乘的更新
2.顶点重置以及边的误差计算,获得所有边连接顶点的估计值
3.读写结果

课后习题总结:
1.矩阵A正定,则rank(A) = n, 可求逆。欠定则有多组解,超定则无解,有最小二乘解。
2.最速法过于贪心二迭代次数多,牛顿法需计算海塞矩阵,二者均不实用;SLAM常用GN,LM和Dog-Leg狗腿法:高斯牛顿简单高效,但病态矩阵时容易发散;LM是可信域法,略满于GN但正定性强,不易发散;狗腿与LM类似,为解决GN近似计算Hessian不准确而提出的。一般的优化库还包括Nlopt,slam++等。
3.A不满秩时,近似的H也半正定,越不正定越接近0矩阵,求逆误差越大,因此$\Delta x$越不可靠
4.狗腿法具体看https://blog.csdn.net/qq_35590091/article/details/94628887

三维空间刚体运动

目标:

  • 理解三维空间的刚体运动描述方式:旋转、变换、四元数和欧拉角
  • 掌握Eigen库的矩阵和几何模块

基本概念:
坐标:一方面与向量本身有关,另一方面与坐标系选取有关。
向量:可以是空间中的一样东西
外积可表示旋转:右手系叉乘
欧式变换:保证同一个向量在各个坐标系下的长度和夹角都不会变化,则可由一个旋转和平移组成
旋转矩阵的性质:行列式为1的正交矩阵,SO(n)是特殊正交群
齐次坐标:把旋转和平移写入一个矩阵,且保持整个关系为线性关系
变换矩阵T:左上为旋转,右侧为平移,左下为0,右下为1的特殊欧式群

旋转的表达

1.旋转矩阵:正交阵且行列式为1,行列向量相互正交;内积为0;

2.三个旋转轴和旋转角:使用一个向量,方向与旋转轴一致,长度等于旋转角,即李代数。由Rodrigues’s Formula可得:$R = cos\theta I + (1-cos\theta)nn^T + sin\theta n^`$ 其中n’是向量到反对称的转换符,从旋转矩阵到旋转向量转换$\theta = arccos(\frac{tr(R)-1}{2})$
转轴n是矩阵R特征值1对应的特征向量。解此方程归一化可得旋转轴。

3.欧拉角:分离成三次绕坐标轴旋转即yaw-pitch-roll.注意著名的万向锁问题,+-90度时,丢失一个自由度,产生奇异性问题。因此不适于插值和迭代,往往只用于人机交互。

4.四元数:既是紧凑的,也没有奇异性的旋转表达。缺点不够直观和运算复杂。
熟悉相互表达之间的转换。

相似、仿射、射影变换

1.相似: $T_s = [sR t]$, 7个自由度,xyz坐标上均匀缩放
2.仿射: $T_A = [A t]$, 12个自由度,A是可逆矩阵而不必是正交矩阵
3.射影: $T_p $, 15个自由度,最不规则的

1
2
3
4
5
6
7
8
// Eigen rotate data structure
Eigen::Matrix3d; // 3*3 R matrix
Eigen::AngleAxisd; // 3*1 R vector
Eigen::Vector3d; // 3*1 Euler Angle
Eigen::Quaterniond; // 4*1 quaternion
Eigen::Isometry3d; // 4*4 T transformed
Eigen::Affine3d; // 4*4 affine matrix
Eigen::Projective3d; // 4*4 projective matrix

李群与李代数

目标:

  • 理解概念,掌握SO(3),SE(3)
  • 理解BCH近似意义
  • 李代数的扰动模型
  • 运用Sohpus对李代数运算

什么是Sophus? Sophus是Eigen的拓展,李代数库

为何引入李代数? 旋转矩阵自身带有正交和行列式为1的约束,作为优化变量引入额外的约束使得优化困难。通过李群和李代数的转换关系,使位姿估计变成无约束的优化问题,简化求解方式。

数学基础

什么是群? 一种集合加上一种运算的代数结构。封结幺逆
可以验证:

  • 旋转矩阵集合和矩阵乘法构成群
  • 变换矩阵和矩阵乘法也构成群
  • 因此它们为旋转矩阵群和交换矩阵群

矩阵中常见的群:

  • 一般线性群GL(n) : n*n的可逆矩阵,对矩阵乘法成群
  • 特殊正交群SO(n) : 旋转矩阵群SO(2)和SO(3)
  • 特殊欧式群SE(n) : 前面的n维欧式变换, SE(2)和SE(3)

什么是李群Lie Group? 指具有连续(光滑)性质的群,既是群也是流形。整数群是离散的,不属于。而SO和SE在实数空间连续运动,所以属于李群。SO(3)和SE(3)只有定义良好的乘法,没有加法所以难以进行取极限和求导的操作。将旋转矩阵用李代数逼近迭代优化。

一种李代数(小写)对应一种李群(大写)。

$RR^T = I$ 对连续时间求导得 $ R^, R^T = -(R^, R^T )^T $, $R^,$为对时间t的导数。即满足反对称矩阵。最后得$R(t) = exp(\phi_0t)$
这表示:

  • 1.给定某时刻的R,我们能求一个$\phi$描述R在局部的导数关系,正切空间邻域。$\phi$正是SO(3)上的李代数so(3)
  • 2.矩阵指数如何计算?事实上这正是李群与李代数之间的指数/对数映射

什么是李代数? 每个李群对应一个李代数,描述了李群单位元数的正切空间性质。满足封闭性、双线性、自反性、雅可比等价

什么是李括号?二元运算,表达了两个元素的差异。

指数与对数映射

// To do 后续补充,本章涉及较多数学和公式

初识cmake

主要特点:

  • 1.开放源代码
  • 2.跨平台,可生成native编译配置文件,在linux/unix平台生成makefile;在IOS平台生成xcode;在windows平台生成MSVC工程文件
  • 3.可管理大型项目,如KDE4
  • 4.简化编译构建过程和编译过程。工具链简单:cmake+make
  • 5.高效率,cmake构建KDE4的kdelibs要比autotools快40%,因为cmake工具链中没有libtool
  • 6.可拓展性,可以为cmake编写特定功能模块,扩展功能

缺点:

  • 1.相对简单,但是没有听起来或者想象简单
  • 2.cmake编写过程实际上是编程过程,使用的是cmake语言和语法
  • 3.cmake与已有体系配合不算理想如pkgconfig

作者建议:

  • 1.如果没有实际的项目需求,那么看到这里就可以停下来,因为cmake学习过程就是实践过程,没有实践读多少天也会忘记
  • 2.如果你的工程只有几个文件,直接编写Makefile是最好的选择
  • 3.如果使用c/c++/java以外的语言,请不要使用cmake
  • 4.如果使用的语言有非常完备的构建体系,如java的ant,也不需要学习cmake
  • 5.如果项目已经采用非常完备的工程管理工具,且不存在维护问题,没有必要迁移到cmake
  • 6.如果仅仅使用qt,没必要使用cmake。因为qmake在QT的专业性和自动化程度更高

态度决定一切

关于代码

直面代码问题,解决问题,而非寻根问底。勇于承认自己不知道答案,这会让人感觉放心。一个重大的错误应该被当做是一次学习而不是指责他人的机会。团队成员们在一起工作,应相互帮助,而不是互相指责。

使用代码复审,单元测试等方法。看到更小、更易于理解的代码模块。

建议:不要坠入快速的简单修复之中,要投入时间和精力保持代码整洁

关于会议

会议的目标也是一样的,聚焦于如何解决问题上。“你不需要很出色才能起步,但是你必须起步才能变得出色。”

团队决策可用的技术:设定最终期限,避免陷入无止境套路,没有最好,只有更适合;逆向思维,先认识优点再认识缺点,相对优的方案;设立仲裁人,让每个人都有发言机会,专注调停;一旦做出决定,全力支持做出的决定。

做法:

  • 尽力贡献自己的好想法
  • 只有更好,没有最好
  • 用合适的词和理由解释你为何不赞同,并提出明确的问题
  • 做正确的事,要诚实有勇气说出实情

学无止境

迭代和增量式的学习:每天计划一段时间学习新技术,记下那些你想学习的东西或者术语,以后有时间深入研究它。

了解新行情,参加本地的用户组活动,参加研讨会议,如饥似渴地阅读。了解新技术试图解决什么问题。有规律的午餐会议。

技术变化:计算设备昂贵转向人力成本,加快开发效率很重要。完全转入新的开发环境,相关集成的工具链,养成新的习惯。如饥似渴地阅读。不停地问为什么。

像减肥一样,一点点的成功也是很大的激励。小而可达的目标让每个人全速前进。庆祝每一次难忘的成功:共享美食和啤酒以及团队聚餐。

交付用户想要的

拥抱变化,及时让客户做决定,让设计指导,引入合适技术指导开发。

敏捷开发强调提早集成,频繁集成,实现自动化部署,使用演示获得频繁反馈,使用短迭代增量发布来经常发布新功能。

开发者能做最重要的决定是:判断哪些是自己决定不了的,应该让企业主做决定。

提前准备几个选择方案:从业务角度介绍每种方案的优缺点以及潜在成本和收益。具体到每个选择对时间和预算的影响,如何权衡。让你的客户做决定。

CRC(类-职责-协作)卡片设计,包括类名,职责(应该做什么)以及协作者(要完成工作,要与什么对象一起工作);好的设计是一张地图,它也会跟着进度进化。

最后合理地使用技术,考虑这个技术真能解决遇到的问题吗,你会被它栓柱吗,维护的成本是多少。你的代码写得越少,需要维护的东西越少。根据需要选择技术。

随时保持可发布的系统代码:1.在本地运行测试,通过所有单元测试和系统测试 2.检出最新代码,再编译运行测试 3.提交代码 (小步伐迭代集成测试)

版本管理可以阅读《版本控制之道-CVS》,一般需要每天集成几次,而非2~3天才集成一次。且考虑生产环境上的移植部署。

缩减演示会议的次数,只有做完一些东西可以演示的时候,大家才碰面。演示是用来让客户提出反馈的,有助于驾驭项目方向。如果缺少功能或者稳定性的时候,不应该拿来演示,那只能让人生气。可以及早说明期望的功能:让客户知道,他们看到的是一个正在开发中的应用,而不是一个最终已经完成的产品。

使用短迭代,增量式发布的解决方案:分析、设计、实现、测试以及获得反馈的整个过程,小步频繁前进是敏捷方法的核心。

确定使用户可用的核心功能,然后把它们放到生产环境中,越早交到用户手里越好。如果打算1~2年再交付,则应该分解成一块块有用的小系统-再进行增量开发。

有一堆理由值得尽快将软件交到用户手里:1.交到手里就有了收入,有更好的理由继续为产品投资; 2.从用户得到反馈,进一步理解什么是用户真正想要的。 3.及时了解市场真实的变化

使用短迭代和增量式开发让开发者更专注于自己的工作,本地构建->演示活动->内部发布->交付用户。增量开发:发布带有最小可用功能块的产品,每天增量开发中,使用1~4周左右迭代周期。

具体操作:

  • 每4周迭代开发中,加入一周的维护任务
  • 迭代时间不够可能是任务量大,也可能是迭代周期短,要把握好自己的节奏
  • 如果功能背离了用户需求:多半是迭代周期太长
  • 提供的价值是什么:这必须去询问用户

业务安排上:提议先构建系统最小、可用、核心的功能;下一个迭代时,用户选择新功能开发还是取消;

敏捷反馈

守护天使:自动化单元测试;在日常工作检查输出的过程更上了一层楼,保留了相关值并持续化可自动执行,每个语言均有对应的单元测试框架。

1.有了单元测试,就可以每次编译或者构建代码的时候运行测试,测试的结果和编译器一样,如果测试没有通过,那就跟编译没有通过一样糟糕。

2.接下来构建机器,不断获得最新版本的代码,然后编译代码并运行单元测试,如果有错误及时让你知道。这样一来,你就有了守护天使,这也是最容易修复错误,成本最低的时候。

拥有了回归测试,你就可以随意重构代码,根据需要进行实验、重新设计甚至重写代码;从而无须如履薄冰。《单元测试之道》《项目自动化之道》

自动化测试的理由:

  • 及时提供反馈
  • 提高代码健壮性
  • 有用的设计
  • 自信的后台
  • 解决问题的探测器
  • 可信的文档
  • 学习的工具,加深API认知
    单元测试就像高空作业的安全带:单元测试只有达到一定覆盖率才发挥作用,测试并非越多越好,只有有效才有质量

测试驱动设计时从代码用户的角度思考,有助于设计出更有用和更一致的接口,消除过度复杂的设计,专注于真正需要完成的工作。先用再实现。

判断工作进度最好是看实际花费的时间,而非估计的时间。可以使用待办事项,可以物理上从列表中划掉或者标识它是已完成的状态。当加入新任务,先排列它们的优先级,然后加入待办事项中;类似地,你可以有个人的待办事项,当前迭代的待办事项或者整个项目的待办事项。

实际操作:

  • 找一个合适的时间粒度分割事项,比如说3~4小时。
  • 关注功能的完成,而不是日程安排
  • 注意花足够的时间工作,少量的时间管理自我
  • 一周40小时,得准确计算思考编程的时间是减去会议、电话、电子邮件及相关活动时间之后的。

面对用户的反馈:每一个抱怨背后都隐藏一个事实。找出真相,修复真正的问题。
实际操作:

  • 没有愚蠢的用户,只有自大的开发人员
  • “它就是这样”不是好的答案
  • 如果代码解决不了,考虑通过修改文档或者培训弥补
  • 你的用户可能会阅读所有文档,记住所有内容,但也可能不会。

敏捷编码

代码清晰表达意图,增量式编程。
“可以工作且易于理解的代码当然好,但是让人觉得聪明更重要。别人给你钱是因为你脑子好使,如何让自己变得聪明。”
代码阅读次数远远超过编写的次数,所以让读起来尽量简单。代码清晰度应该排在执行效率前。

要在性能、生产力、优雅、成本以及上市时间中权衡考虑,使每一项都能达到最理想的状态。

没有适宜所有状况的最佳解决方案,你必须对手上的问题进行评估,选出最合适的解决方案。

实际操作:

  • 现在投入资源和精力,要确保未来会得到好处,会获得回报
  • 真正的高性能系统,从开始设计时就往这个方向努力
  • 过早优化乃万恶之源
  • 过去的解决方案对新问题可能适用,也可能不适,确认好当前的状况

开发可以工作的、最简单的解决方案。当你觉得所编写的代码中没有一行是多与的,并且仍能交付全部功能时,这种感觉就对了。这样的代码容易理解和修正。

让类的功能尽量集中,让组件尽量小。避免创建很大的类或组件,也不要带无所不包的大杂烩。相对于继承,委托更灵活;如果你不确定一个接口做出什么承诺,或是有什么需求,那就很难提供一个对其有意义的实现。

敏捷调试

不害怕问题,遇到问题时,保留以前的问题解决方案,以及提供发生问题时更多有用的细节。解决问题并建立记录问题解决日志,假定编译器警告就是错误,致力于解决它们。最后发生错误时,考虑用户的感受并提供有用的错误信息。

可以维护保存一个曾遇到的问题以及对应解决方案的日志,称为每日日志:

  • 问题发生日期
  • 问题简述
  • 解决方案详细描述
  • 引用文章或网址提供更多细节和相关信息
  • 任何代码片段截屏等
  • 最后要将日志保存为可供计算机搜索的格式

实际操作时:记录问题不能超过解决问题花费的时间,保持轻量级和简单;使用足够的关键词,以便查找;要记录发生问题的环境及特定版本,因为不同环境表现不一;记录团队的重要决策原因。

解决警告问题:

  • 尽可能提高编译器检查级别,消除所有警告
  • 指示编译器忽略无法避免的警告以找出真正的错误和警告
  • 尽量不使用弃用方法

将代码从运行环境分离出来,构建单元测试,有助于代码解耦以及隔离问题。
当发生问题时,让应用详细记录错误的相关数据。,最起码以文本文件的形式维护。提供调试试用的完整详细信息。

区分主要错误类型:

  • 程序缺陷:真正bug,用户或系统管理员对此束手无策
  • 环境问题:数据库、service链接、磁盘空间满、权限等问题,可有系统管理员解决
  • 用户错误:告知用户操作问题,重新执行

实际操作:

  • “无法找到文件”的错误信息无助于解决问题,“无法打开/project/main.yaml”更有效
  • 没必要等待抛出异常才解决问题,在代码关键点执行断言以保证一切正常
  • 提供更多信息同时,不要泄漏安全信息、个人隐私及商业秘密等
  • 提供用户信息可包含一个主键,以便在日志文件或者审核记录定位相关内容

敏捷协作

我不仅发挥了自己全部的能力,还将我所仰仗的人的能力发挥到极致 --威尔逊

项目的成功与否,依赖于团队中成员如何一起有效工作,如何互动,如何管理它们的活动。全员行动必须与项目相关,反过来每个人行为又会影响项目环境。

实际操作:

  • 定期安排会面时间
  • 架构师必须写代码
  • 实行代码集体所有制,以免成员缺席对项目造成影响
  • 修改个人编码习惯,准备好再共享代码
  • 一起代码复查及时通报进展与问题

举行站立会议,着重三个问题,人均2Min,到司后半个到一个小时内:

  • 昨天有什么收获
  • 今天计划做哪些工作
  • 面临哪些障碍

立会的好处:

  • 让大家尽快投入一天的工作中
  • 让某人某点上的问题可以公开,积极寻求帮助
  • 帮助管理层了解哪些领域需要更多帮助,重新分配人手
  • 让团队成员知道项目其他部分的进展
  • 帮助团队识别是否再某些东西上重复劳动浪费精力或者某个问题是否有人已有现成的解决方案
  • 促进代码和思路共享,提升开发速度
  • 鼓励向前的动力:看到别人报告的进度都在前进,会彼此形成鼓励

实际操作:

  • 10-15分钟比较理想,可预约1个小时,然后立会后可紧接一个小会
  • 迅速开始保证会议短小,不必浪费时间等着会议开始
  • 如果觉得立会在浪费时间,那可能是大家还没形成真正的团队意识,可以持续改进

优秀的设计从积极优秀的程序员那里开始演化:不愿意编程的架构师也不知道系统的真实情况,则无从展开设计。

架构、设计、编码和测试其实是同一类型活动,它们之间应该是不可分割的。

一方面如果一个开发者专门应对某领域的任务,他可以精通该领域并让后续开发任务高效;但另一方面多双眼睛盯着某段代码一定可以带来好处:可以提升代码的整体质量,使之易于维护理解并且降低出错率。

实际操作中:

  • 不要无意间丧失团队的专家技能,若某开发在某领域极其精通,不妨让他作为这方面的驻留专家
  • 大型项目中,如果每个人都可以随便改动任何代码,一定会弄得一团糟
  • 开发不必了解项目每一部分的每个细节,但也不能因为要处理某个模块的代码而惊恐
  • 有些场合不能采用代码集体所有制。也许需要特定的知识或者特定问题域的了解,比如高难度的实时控制系统
  • 如果不向整个团队分享知识,反而增加了丧失知识的风险

成为指导者:通过分享自己的知识,让身边的人变得更好。可以开设个人博客,贴一些代码和技术在上面。即使是一小段代码和解释,对别人也可能是有帮助的。

成为指导者意味着要分享,意味着对别人的所学和工作感兴趣,同时愿意为团队增加价值。一切都为了提高队友和你的能力与水平,而不是为了毁掉团队。付出的同时便有收获,还可以激励别人获得更好的成果,而且提升整个团队的实力。

实际生活中:

  • 如果就同一个主题对不同人反复阐述,可以考虑写篇文章甚至书本
  • 成为指导者是对团队进行投资的极佳方式
  • 结对编程是一种进行高效指导很自然的环境
  • 为团队成员寻求帮助前陷入某个问题,设置一小时的最大时限

用问题回答问题,只提示一下的好处:

  • 帮助他们学会如何解决问题
  • 除了答案可以学到更多
  • 不会就类似问题反复问
  • 帮助他们在你不能回答时自己想办法
  • 他们可能想出你没考虑过的方法主意,从而你也学到新东西

做好准备再共享代码:绝不提交尚未完成的代码。故意签入check in编译未通过或是没有通过单元测试的代码,对项目来说,这应被视作玩忽职守的犯罪行为。要明了整个团队就在源代码控制系统的另一端盯着你,一旦提交代码,别人就都可以访问了。

代码复查什么:

  • 代码能否被读懂和理解
  • 是否有任何明显的错误
  • 代码是否对应用的其他部分产生不良影响
  • 是否存在重复的代码
  • 是否存在可以改进或重构的部分

实际操作:

  • 代码复查必须进行阅读思考
  • 复查需要积极评估代码的设计和清晰程度
  • 除非你能让某段代码明确变得更好,否则don’t judge code
  • 及时跟进讨论给出的建议
  • 让每个人知道复查完所采取的行动

及时通报进展与问题:发布进展状况、新的想法和目前正在关注的主题,不要等者别人来问项目状态如何。

实际操作:

  • 每日立会可以让每个人明确最新的进展和形势
  • 展示进展状况要照顾受众的关注细节程度,如CEO等不会关注代码方面
  • 别花费太多时间在通报上,应该保证开发任务的顺利完成
  • 经常抬头看看四周,而非埋头于自己的工作

开始引入敏捷

入门级习惯:

  • 版本控制
  • 单元测试
  • 自动构建
    从日常,工作,生活中引入敏捷的思想和习惯,逐步产生更多更大的价值。

主要内容部分:职业生涯、自我营销、自我学习、生产力、理财、健康、精神。

职业篇

你所能犯的最大错误就是相信自己是在为别人工作。这样一来你对工作的安全感已然丧失。职业发展的驱动力一定是来自个体本身。记住:工作属于公司的,而职业生涯却属于你自己的。 -- 厄尔.南丁格尔

自我驱动

拥有商业心态:时刻将自己的软件开发事业当作一桩生意来对待,不要被愚弄了。当你为了谋生一头扎进代码世界时,其实你和中世纪小镇开铁匠铺的铁匠没有什么差别。不要让特定的岗位或者角色固化了你和你的整个职业生涯。转变心态,从卖身契的仆人转变为拥有自己生意的商人,从仰人鼻息的弱势地位转换成自我治理和自我引导的主动地位。

要做到:

  • 专注于你正在提供怎样的服务,以及如何营销这项服务;
  • 想方设法提升你的服务;
  • 思考你可以专注为哪一特定类型的客户或行业提供特定的服务;
  • 集中精力成为专家,专门为某一特定类型的客户提供专业的整体服务;(只有真正专注于一类客户,才能找到非常好的工作)
    再者,如何更好地宣传你的服务,更好地找到你的客户。

沟通能力

建议阅读《人性的弱点》–Dale Camegie

每个人都希望自己重要,永远不要批评,学会换位思考,思考他人而言什么才最重要。将注意力转移到他们身上,用他们的角度思考问题,什么让他们索然无味,什么让他们聚精会神。你的建议出发点理由可能是“让软件更稳定”或者“让软件按时交付”。

当你学会了如何以令人愉悦的方式与他人互动和交往时,自己的生活也越来越愉快,通过习得这些技能,积累了让自己获益终生的财富,这样的价值无法用金钱衡量。

还要学会逃离“毒瘤”,争吵时试着果断站在对手一边,结果可能会大吃一惊。

关于面试

高级的入职流程:
从期待加入的公司里找到联系人->与联系人建立紧密关系->获得个人推荐->面试

正式面试:自信的展示自己的能力,展示工作需要做的内容

从雇主的角度,招聘员工是一项投资,需要花费时间和金钱,当然希望看到良好的投资回报率。
明确知道自己要做什么以及怎样去做,需要集中精力证明自己是无需督促也能发自做好事情的员工。
确保自己技术能力,一直阅读技术书籍和博客,花时间提升自己的技能。
为了获得面试经验,也要去面试,多多练习。

采取行动:

  • 即使无需努力找工作,也要整理一份清单,列出想去的公司以及你认识的这些公司的人。
  • 如果公司一个人都不认识,那么制定计划至少去认识其中的一位员工并与之建立联系。
  • 在所在领域找出至少一个本地用户组,参与聚会,把自己介绍给尽可能多的人。

关于职业的选择:雇员、独立咨询师(外包服务)、创业者,从雇员稳定开始,结识各类型的朋友并向他们了解如何走上以及走好他们的路。

关于求职:缩小工作机会池,提高被录取的机会;如何选择专业:

  • 现在或以前工作的公司里,有哪些主要痛点?你能成为一名专门解决这些痛点的专家吗?
  • 有没有一种特定的工作无人能做,或者缺乏经验丰富的人?成为这个领域的专家,你会获得大量业务。
  • 在各种会议上和用户组中哪些话题最常出现?
  • 哪类问题你回复得最多,无论是针对同事还是Stack Overflow这样的网站上?
    尽可能地具体,使得在细分市场上更抢手。

采取行动:

  • 列出想到所有软件开发的专业领域,从广义范畴逐一细分,看看你能细化到多具体
  • 当前的专业领域是什么?如果没有,希望选择专攻哪个领域
  • 主流的招聘网站看看自己的专业领域市场行情如何,确定专业化道路让自己受益还是限制了自己的选择

关于公司
| 公司规模 | 优点 | 缺点 |
| 小 | 承担多种责任,工作影响力大 | 没法安静写代码,稳定性差 |
| 中 | 稳定,加班少 | 变化慢,难涉及前沿技术 |
| 大 | 完备的流程和规范,培训以及大型有影响力的项目 | 官僚主义,只负责代码库的小部分,难受关注 |

晋升之路

在更多金钱还是更多责任的选择上,长远看,正确选择几乎是更多责任。

如何让自己承担更多责任:

  • 不受重视的项目,你能负责它吗
  • 你能帮助团队里的新人快速成长吗
  • 你能负责文档制作流程,并保证及时更新文档吗
  • 哪项工作没有人愿意做,你愿意承担并将其简化或者自动化吗

如何让自己引人注目:

  • 每天记录自己的活动日志-把日志以周报的形式发送给经理
  • 提供演讲或培训-选择一个对团队有用的话题
  • 发表意见-只要在会议上就这么做,或者只要你能得到的机会就这么做
  • 保证“曝光度”-定期与老板会面,确保你经常被注意到

如何成为专业人士

The War of Art: 成为专业人士是一种心态。如果我们总是与恐惧、自毁、拖延和自我怀疑作斗争,那么问题就是:我们正在像外行那样思考问题。外行毫不起眼,外行人废话连篇,外行屈从于逆境。专业人士可不这么想。不管怎样,他引人注目,他恪尽职守,他始终如一。

认真规划自己的:已经做了什么、计划做什么、有哪些障碍

培养正确的习惯,推荐阅读《习惯的力量》

关于赢得自由:为自己工作

辞掉之前需要一个切实可行的计划,强烈推荐用业余时间启动想创建的业务,等从该业务中产生足以维持生计的收入时,你再转为全职。迫于现实现金流的问题,制订一个计划:什么时候就得认怂做回雇员。以后总可以东山再起,只要没有巨额信用卡债务,没有房屋抵押,没有从亲朋好友借钱而影响到自己的未来。

为自己工作的意义:1.会比为别人工作时更努力 2.你会更热爱在做的事情,但不要指望持续很久,时间的流逝会使热情变得捉摸不定甚至消逝殆尽 3.突如的工作量使得不止工作8小时
推荐书目《So Good They Can’t Ignore You》

如何行动
1.减每月开支并累积资金:确保生存
2.保障常规工作之余每周投入15小时做自己的事情,并坚持执行半年以上,确保收入
3.提前计算好确切日期,早在一年前做好准备

关于创业

了解孵化器或者加速器,注入小额资金换取公司小量股份,通常只持续数月并快速成长。
采取行动:

  • 研究以下一两家心仪的创业公司历史,注意它们是如何开始以及获得融资的
  • 创立时是单创始人还是多创始人
  • 创始人还成功创立过其他公司吗
  • 什么时候开始获得融资的,获得了多少
  • 这些公司启动时是否加入加速器计划

关于远程办公

接受新的工作模式以及迎接新挑战

  • 时间管理上:建立缜密规律的时间管理,提前计划安排,迎接变化
  • 自我激励上:建议阅读《驱动力》-Daniel Pink,用习惯驱动自己,排除干扰
  • 孤独感:周而复始孤独一个人肯定会产生负面影响,走出去,寻找社交生活:参与本地的软件开发者小组聚会,到咖啡馆或者书店工作,规律性到健身房或者运动
    开始关注允许远程工作的公司,或者完全分布式工作的团队

关于成功

“假装自己能成功”,进行自我心理暗示:

  • 你仿佛已经具备了成功完成任务的技能和天分
  • 你仿佛已经成为自己想成为的那类人
  • 仿佛战斗已经结束,而你大获全胜,因为你深知如果自己坚持不懈,胜利就在眼前
  • 你仿佛已经对即将踏上的未知道路驾轻就熟

这是有意识地让自己身处逆境,迫使自己学会拼搏。正是在生活中有这样的心态,带领自己勇敢走向未知领域,坚信挑战与机会并存。如果想学会“假装自己能成功”,你就必须拥有破釜沉舟的勇气。

采取行动:

  • 诚实地评估一下自己。面对困境,你的心态如何?当遭遇新问题或者不熟悉的问题时,你会怎样做?回想以下,上一次面对困难或者不熟悉的形势时,你是怎么做的?
  • 你该怎样树立一种自信而不自负的心态?自信与自负之间的区别是什么?为了强化“假装自己能成功”的能力,你现在应该做什么?
  • 小练习:有目的地将自己置于困境,演练以下自己既定的应对策略。
  • Fake it till you make it

关于技术

很多情况下,解决问题并不只有一个好的或者是最好的方法。同理,最好的编程语言、框架、操作系统甚至是文本编辑器都不会只有一种,你可找到最适合自己的技术和编程语言以及工具。

采取行动:

  • 列出你钟爱的所有技术,或者你觉得更胜一筹的技术
  • 针对表的每一项,想想它为什么吸引你,你做了哪些比较确定它确实“更胜一筹”?你真的使用过它们的竞争对手吗?
  • 挑选一门你厌恶的技术,找几个喜欢它的人,开诚布公讨论为什么他们喜欢,更进一步,你试着去使用

自我营销

营销追求“实现价值在先,要求回报在后”,你的营销越好,你的才华才能表现得越发淋漓尽致,自我营销的正确方式是为他人提供价值。

自我营销无非就是学习如何控制好要传达的信息,塑造好自己的形象,扩展信息传达的人群。当开始营销自己的时候,你就是在积极地管理自己的职业生涯,有目的地选择好如何塑造自己,以及将塑造好的自己主动推送给那些对你感兴趣的人。

采取行动:

  • 如果你还没有博客,开通一个吧。想想看,你会专注在哪些主题上?
  • 给你的新博客至少想出20篇文章
  • 现在做一个时间表,列出开通博客的具体时间以及内容编排

打造引人注目的品牌

品牌的四要素:要传递的信息、品牌一致性、品牌的视觉符号、品牌的曝光率

信息是目的性,传达承载的情感诉求;一致性、视觉符号以及曝光容易增强影响力;

步骤:

  • 明确传达的品牌信息
  • 挑选细分市场
  • 创建品牌口号
  • 创建电梯内销售概要:电梯时间介绍完自我
  • 创建视觉符号

博客的重要性

一方面面试评估技术技能非常困难,博客包含丰富的相关信息,代码示例以及深入分析;另一方面流量足够大可以用于推销自己产品的平台;带来一定的业界声望,提高你的沟通能力以及组织自己的思想转化成能力。提高内容的质量,尽量尝试编写高质量的博客文章。

提高访问量:尝试建设性的评论,并附上个人链接。增加方便分享的功能。

为他人增加价值

不要努力成为一个成功的人,而要努力成为一个有价值的人 --阿尔伯特.爱因斯坦

给人们想要的东西

通过现象看本质,找到方法来提供自己的价值。唯一的标准是通过你的方法,可以有效解决真实的问题。

采取行动

  • 什么样的内容会让你觉得最有价值?有没有哪个特别的博客会让你每周都去阅读,或者哪个博客的内容如此有价值让你欲罢不能,以至于一点都不想落下
  • 你可以提供给自己的受众或者你的细分市场最大价值是什么?你认为什么样的内容对于你的受众群体而言最有价值的?
  • 善于运用社交媒体:如何界定价值:你认为有用或有趣的。

通过社交媒体分享的内容

  • 博客文章:转帖一些博客文章或者自己的博客
  • 新闻报道:转载一些有趣的文章,尽量与自己的细分领域有关,或者与软件开发相关
  • 励志名言:名人名言,特别是鼓舞人心、非常流行的名言警句
  • 技巧、小窍门:任何你所了解的特殊技巧或者知识,别人会很欣赏
  • 幽默故事:发一点幽默故事挺不错的,但是一定要确保好笑,另外千万别冒犯别人
  • 吸引人的问题:这是一个很棒的吸引你的听众并和他们互动的方法
  • 自己的一些推广方式活动:别太多,并且跟其他内容混合在一起
    正如产品和服务90%免费一样,分享的内容也要90%有价值的

保持活跃度

社交媒体一大挑战需保持活跃度,如若没有持之以恒,很容易丢掉大量粉丝。选择一到两个心仪的平台,不同社交具有不同的功能划分。

演讲的地雷:对公众面前演讲怀有恐惧
没关系,大部分人都有此症,公共演讲恐惧症是最常见的一种恐惧症。对此你可以做什么呢?好的,有相关组织让你在舒适的氛围中克服公共演讲的恐惧,你可以加入他们。也可以从较小规模场合的演讲做起,比如会议上站起来发言,或者在一群你熟知的人面前做讲座。当你对此越来越轻车熟路,你就可以到更令人生畏的地方公开演讲了。
你要记住,作为人类,我们拥有良好的适应能力。只要你把一件事情重复足够多次,你自然就会接纳它。伞兵第一次跳出机舱时候都很害怕,但是经过成功跳伞之后,恐惧最终都会消失。如果你一直坚持公共场合发表演说,你一定会应对自如,恐惧感终将消散。

做培训

刚开始可以在免费视频网站youtube做一些教学,然后写书或者开展课程。
采取行动:

  • 列出你所在地区的所有用户组清单,同时列出你能去发表演讲的代码训练营清单。挑选一个自己觉得比较有把握的专题发表一次演讲
  • 列出网上提供的哪些针对软件开发人员的培训课程,无论是付费的还是免费的,关注并记录找出成功的培训师是怎么做的
  • 试着以截屏视频的形式创建自己的短时培训课程,然后在免费网站上发布
  • 创建一个列表,列出所有你可以发表演讲的主题

关于写书

如果某人在某特定主题写过书或者发表过文章,那么他们可能是这方面的专家。当人们坐下来读你写的书时,你会长期被他们关注。

一方面,书籍畅销带来收入;更重要的是,通过出版,你能获得更广泛的知名度和声望。

明确一个有市场需求的主题,同时能充分展示你作为该领域专家的学识。主题越聚焦越专注,越容易证明你的专业能力。准备一份翔实的写作提纲,清晰概括自己的写作目的,明确本书的目标读者,以及为何认为本书会成功,为何你是写作本书的最佳人选。最后就是每天坚持去写,开始主要是写些博客文章,随着实践推移你的写作技能终将会得到提升。

采取行动:

  • 查看亚马逊与软件开发相关的畅销书列表,找出哪种类型的书销量最好
  • 写长篇大作之前,先从杂志文章这样的短篇着手。找出一些发行量不高的软件开发类杂志,提交一篇文章摘要。

关于脆弱的自尊心

如果你想成功,你必须要学会收起自己脆弱的自尊心,勇敢走出去,别害怕让自己出丑。每一个著名的演员、音乐家、专业运动员和公共演说家都曾有过表现不佳的时候,他们自觉地选择了出走困境,尽力而为。成功终将会来,你不可能专注做某件事而毫无长进,你只要坚持足够长的时间就会有所收获。你的生存之道就是不必太在意,别害怕被人看作傻瓜。

采取行动:

  • 让自己勇敢起来,今天就是你的大日子。走出去做一些令你害怕的事情,大小都不要紧,迫使自己处于不自在的环境,并提醒自己“这没什么大不了的”
  • 现在,重复上一步,至少每周一次

学习篇

教育就是当一个人把在学校所学全部忘光之后剩下的东西 -爱因斯坦

代码世界变化万千,每天都有新的技术出现,昨天学的东西今天可能没有意义。
如何学习成为当代最重要的课题。动手实践和教会他人让我们学得更好。

快速学习

教育的首要目标,并不在于“知”而在于"行" -赫伯特.斯宾塞

可以把学到的新知识重新应用于实践,看看新方法能否解决已有问题。你可以继续探索新领域,发现需要解决的新问题。以解决实践过程中发现的问题为目标,在向着知识前进的道路上重复这个循环,周而复始。

采取行动

  • 你最近一次自学了什么?你的学习过程是怎样的?
  • 你上一次对兴趣爱好感到激动是在什么时候?你对此爱好了解多少?你是经过刻苦学习才培养此兴趣的,还是通过玩耍自然而然地就学会了?

快速学习三个要点:

  • 如何开始:想要开始使用自己所学的,我需要掌握哪些基本知识
  • 学科范围:我现在学的东西有多宏大?我应该怎么做?在开始阶段,我不需要了解每个细节,但是如果我能对该学科的轮廓有大致的了解,那么将来我就能发现更多细节
  • 基础知识:不止在开始阶段,要想使用一项特定的技术,我需要了解基本的用户案例和最常见的问题,也需要知道自己学的哪20%就能满足80%的日常应用

十步学习法体系

基本思想:要对自己要学的内容有个基本了解,了解自己不知道什么足矣。然后利用这些信息勾勒出学习的范围,即需要学哪些内容,以及学成之后又会收获什么。依靠这些知识,你可以找出各种资源来帮助自己学习。最后你可以创建自己的学习计划,列出要去学习哪些相关课程,筛选学习材料,只保留能帮助自己达成目标的优质内容。

一旦如此,你就可以把控自己的学习计划中的每个关键点,通过学习-实践-掌握-教授(Learning Doing Learning and Teaching, LDLT)的过程获得对该学科的深刻理解,也向着自己的目标前进。

十步学习法:

  • 1.了解全局
  • 2.确定范围
  • 3.定义目标
  • 4.寻找资源
  • 5.创建学习计划
  • 6.筛选资源
  • 7.开始学习,浅尝即止
  • 8.动手操作,边学边玩
  • 9.全面掌握,学以致用
  • 10.乐为人师,融会贯通
    这是通过“聚焦学习范围,让你关注重点内容”的快速学习方法,迫使你通过“自我探索”和“主动教学”的方式将真正重要的内容印刻在自己的大脑中。

采取行动:挑选一项你已经烂熟于胸的技术,看看你能否明确以下几点

  • 如何开始使用它
  • 该技术的应用广度如何
  • 利用你需要知道的20%发挥出80%功效

1-6只做一次

第一步需要对学的课题做一些基础性研究,有一个全局性的了解。第二步聚焦一个范围,尽可能保持专注。第三步清晰定义成功的标准。第四步查阅尽可能多的与自己所选主题相关的资源,此时无需考虑资源的质量。第五步学习是自然的过程,层层递进。需要找出最短的时间从A到Z的正确路径,并且到达沿途的重要地标。另一个好方法就是观察别人是如何教你这个感兴趣的主题的,此时可以翻看第四步中的图书目录,如果五位不同的作者都把内容分解为相同的模块和顺序,那我就会遵循这样的方法制订自己的学习计划。

至此你知道自己要学什么以及以什么顺序学,那么就是时候决定使用哪些资源来完成自己的学习任务了。在收集了与研究主题相关的所有资源,制订了个人学习计划后,对资源筛选并挑选最有价值的几项来帮助实现自己的目标。

采取行动:

  • 挑选你想要了解的一项课题,实际演练上述六个步骤。可以从规模较小的课题开始,以让自己习惯这一过程。注意的是,一定要实际运用。

7-10循环往复

学习到这一步开始最有趣的部分,你从掌握恰到好处可以开始的基础知识开始,然后通过操作来学习,同时也通过自我探索收集问题。之后,你掌握了足够多有用的知识。最后你能将自己学到的教给他人,以此来弥补自己在学习过程中的不足,同时通过深入思考巩固知识。

第七步谨慎两种错误:1.在知之不多的情况下盲目开始,即行动太快; 2.行动之前准备过多,即行动太晚。 要取得平衡,你掌握的知识恰到好处足以让你开始学习,但又不会多到让你无力探索。

第八步边玩边学,无需提前了解全部内容,首要的事就是亲自操作和亲身体验。通过探索和实践来学习,这个过程中你的大脑自然地产生各种问题:它是如何工作的?如果我这么做,会发生什么?我该如何解决这个问题?这些问题引导你走向真正重要的方向。回头寻找问题答案时,不只这些问题迎刃而解,你记得的东西比学习的要多得多。不要担心结果,勇敢探索。把一些暂时没有答案的问题记录下来,下一步有机会找出这些问题的答案。

第九步:好奇心时学习特别是自学的重要组成部分,通过动手操作法线的一些没有答案的问题,利用先前收集的资料深入学习,满足自我的好奇心。这一步阅读文字、观看视频、与人交流都是必要的手段,不要害怕回头去操作。给自己足够多的时间去深入理解自己的主题。

第十步: 你告诉我的,我都忘了。你教会我的,我都记得。让我乐在其中,我就一定能学会 -富兰克林

用多种方式将自己所学教给别人,可以是博客,可以是视频,也可以是探讨,将自己所学解释给他。重点在于要花实践将自己学到的东西从大脑提取出来,以别人能够理解的方式组织起来。经历整个过程之后会法线,有很多你以为自己明白了的知识点其实并没有摸透,于是之前没太明白的东西联系起来,简化已有的信息,将它们浓缩并经常复习。

教授知识的途径:

  • 撰写博客文章
  • 创建YOUTUBE视频教程
  • 发表演讲
  • 与朋友或爱人进行对话探讨
  • 在线上论坛回答问题

最后的思考:学会自我教育需要奉献精神和辛勤工作,但你也能从中收获无比丰厚的回报。十步学习法不能让你瞬间聪明伶俐,但可以让你的学习过程结构化,而非漫无目的地扎进浩渺的知识海洋中。这利用人天生的好奇心来帮助你吸收更多的知识,而我们大多数人正是通过好奇心驱使才学到很多本领的。

采取行动:

  • 针对学习计划的每一个模块执行7-10,完成学习实验
  • 现在不要跳过任何步骤,研究以下如何让该方法奏效,然后尝试优化它

寻找导师

检查单:

  • 他们做到了我想要去做的?
  • 他们曾经帮助他人做到了我想做的?
  • 他们现在取得了什么可以展示的成就?
  • 你能和这个人和睦相处?他充满智慧吗?

寻找导师的方式最好从自己的熟人、家人和密友推荐。
采取行动:

  • 在寻找之前,必须明确,需要导师帮忙解决什么问题?思考为何需要导师,希望从中获得什么
  • 列出所有你认识的人作为导师,希望别人也帮忙列出
  • 想一想为了换取导师帮助,你能给他提供什么

拥有一位导师是非常好的,而成为导师更是好上加好。回馈社会是非常重要的,不仅因为这是一件正确的事,还因为它可以让你自己受益无穷。

花点时间思考你会比谁领先一步,谁正在努力学习你已经知道的东西。

做导师的好处:

  • 帮助他人时的成就感
  • 深入学习和领悟知识的途径
  • 你的徒弟有朝一日会帮到你
  • 自身的成长。帮助别人成长的过程也就是你成长的过程

如何成为授业者:

  • 想出一个你可以教别人的话题并教给别人。本周你要尝试一些教学方法,如写博客、发表演讲、录制截屏等
  • 当你做教学准备的时候,要特别注意这些准备工作时如何提升自己对某个主题的理解的。对那些没打算去教别人就不可能发现的自己的知识短板要多加注意。

关于学位

拥有学位不是成功所必需的,但它肯定是一个限制性因素。软件开发不同于其他行业:领域总是不断变化,每天都有新的框架和技术问世,在教育机构中培养能适应真实工作环境的软件开发人员几乎不可能的。等到教材出版、课表排好的时候,很多东西已经改变了。但这不意味着软件开发不存在永恒不变的核心领域:比如算法、操作系统、关系型数据库理论和编译原理等主题。然而在工作中很少用到学校的技能,我们大部分的工作是如何使用新技术完成工作,很少需要回溯到计算机科学的本源,因此工作中取得成功的直接因素还是相关的工作经验。

采取行动:

  • 如果你没有学位,看看哪些网上课程或者业余课程可以参加。看看它会花费多少,多久会让你毕业
  • 如果你决定完全放弃学位教育,那么一定要确保自己有一个非常出色的作品集。花时间把写过的代码整理一下,证明你了解所做的工作。

找出自己的短板

如何识别? 看看哪些工作上花费大量时间,可以改进的重复性劳动,自己没有完全理解的东西,你回答不出来的面试题。

采取行动:

  • 接下来随身带个记事本,把遇到不明白的地方记下来
  • 在谈话中遇到自己不明白的地方,即使觉得尴尬,也要有意识地提问
  • 明确一天中的某些“痛点”,弥补知识上的短板,找出消除痛点的方法

生产力

外行静坐等待灵感,内行则唤起激情努力工作。 --斯蒂芬.金

一切始于专注

什么是专注? 就是注意力分散的对立面,全身心投入到单个项目上。

始终坚信专注是提高生产力的灵丹妙药,如果能买到专注,我会刷爆信用卡,有多少all in多少,因为我知道这笔投资回报绝对有保障。实际同样如此,专注就是如此重要。

专注的状态:你全心工作,感觉毫不费力。进入这种状态常常需要点时间,但是一旦找到状态,你就能短期内完成很多任务。

如何更专注?挑选一些耗时15-30分钟的任务,完全专注做这件事,不要想别的事情,只关注这一项任务。
要进入专注模式需要累积冲量,必须克服将自己的思绪集中于单一任务时那种痛感。关键在于要意识到,这种痛苦和不适只是暂时的,不会持续很久。

这里有个开车比作专注的例子,想象进入专注就是汽车在高速公路上行驶的提速过程,车子进入高速行驶之前需要更换几个档位,如果你总是不断起步停车,那么你的整体速度就会很慢很慢。要让车回到高速换到五档需要花点时间。但是,一旦开到五档,就能轻松巡航了。

一个好的方法是:坐在电脑前开始打字,旁若无人,心无杂念。用自己的意志力将注意力保持在手上的任务上,起初这种专注是被迫的,但是随着冲量建立,推动你进入专注状态。你的目标是熬过前5~10分钟,如果能撑过10分钟,你就有足够的冲量继续。在这种情形下,即使轻微的分心也不大可能打破你的专注

采取行动:

  • 想想你极度专注于工作的时候,那是一种什么感觉?是什么令你进入这种专注模式?又是什么最终打破了你的专注。
  • 时不时实践以下专注,选一项大概需要占用你半小时或者更长时间的任务,给完成这项任务分配一个完整的时间段。完全专注于这项任务,迫使自己只集中精力在这一项任务上。当你进入专注状态时,在心里记住是什么感觉。

提升计划

知名的方法有:GTD(getting things done),番茄工作法以及 Don’t break the chain等等。
作者建议把一周的时间分配给一个一个用时不超过两小时的小任务。使用看板安排一周的活动,看板主要有几个列,你可以轻松地在列之间移动任务项。用敏捷方法管理状态包括:未启动、进行中和已完成。具体做法可参考《看板实战》(Kanban in Action)

计划从“季度”开始,把一年分成4个季度,会尽力列出想在本季度完成的每一个大项目,同时制订一些较小的目标。然后思考每一周每一天分别完成哪些工作,让自己清楚了解自己的主要目标是什么,同时会让自己保持专注。按照设定的轨道运转对富有成效地工很重要,应该为自己设定一些制度,确保自己获得持续的成果,把每周的任务记下来,看看可以为自己制订一个能按月周天可重复使用的方法。

养成使用番茄钟的习惯,学会规划自己的25分钟的任务,跟踪记录番茄钟,安排好每天每个番茄钟。一个较好的用法:高效地跟踪自己一天内完成了多少个番茄钟,并为每天要完成的番茄钟的数量设定目标。以此真正评估自己每日工作的努力程度,也知晓自己的工作能力。同时以此调整自己的任务优先级以及工作量。正常而言,每天10个番茄钟已经非常繁重,一周50~55个。刚开始6个已然困难。开始你的番茄钟挑战把!

采取行动:

  • 尝试使用番茄工作法,不用担心要给每天设置多少个番茄钟的目标。列出一整周完成的工作
  • 一旦了解自己一周能完成多少个番茄钟,你就可以给下一周设定目标了,看看能否达标,留意你最后完成了多少工作,以及完成每天设定的番茄钟后感觉如何。

定额工作法

生产力提升方法主要问题:对于每天重复发生的任务似乎束手无策,且无法正常达到预期的计划

给计划实施定额制,长期如此可以将工作量和时间正相关并提前预估。
定额示例:

  • 每周跑步3次
  • 每周发布一篇博客
  • 写书:每天写一章
  • 每周完成50个番茄钟

定额不要太高,遵循一个规则:不能在定额必须完成的有效时间段内放弃。宁可降低定额的配额,保持对定额的尊重以及积极完成的习惯。

定额工作法的规则:

  • 挑选一项重复性任务
  • 明确有效时限,在此期间该任务被重复执行
  • 明确在给定的有效时间内完成该任务完成的次数配额
  • 给自己承诺:一定达到定额
  • 调整:适当地调高或者调低定额,但是不能在有效时间段之内调整
  • 开始的时候可以将该法只应用到一件事情上
    个人心得:定额工作法主要结合番茄钟形成个人习惯,并量化优化习惯的进度。
    该法成功的秘密:以缓慢但稳定的节奏工作,要优于快速但缺乏持久和坚持的工作方法。关键保证方法落实到位,保证自己每天每月每周都在进展即可。定额可以帮助克服意志力的问题,习惯消除了作出决策的部分,因此可以快速转化成行动。

采取行动:

  • 列出生活中需要重复做的所有任务,特别专注于那些目前你还无法持续完成但一旦完成就会从中受益的事情
  • 选择至少一项任务,承诺规定时间段内完成额度。认真对待这一承诺,试着坚持至少5个时间段。想象以下,如果自己能坚持几个月或者几年,会发生什么变化。

对自己负责

工作主要两大动机:来自内心的冬季和来自外部奖励或者惩罚的动机
通常内在动机比外在有效得多:自我的激励工作,我们能完成更多的工作,也更倾向于把工作做得更好。感兴趣可研读《内驱力》

内部问责:
每天按时上下班是对雇主负责,工作的责任感促使我们做一些自主决定不愿意做的事情,培养出没有人监督自己的时候也能高效工作的自我责任感非常重要,也可称为性格或者素质。如果缺乏对自我的责任感,你将永远依赖外部动机来驱使努力工作,自我控制是自我激励的艺术,核心在于自我责任感。
为自己制订一些规则,以便让自己的生活井然有序。

外部问责:
请别人来监督自己履行责任,每周例会讲解自己这周以及计划的任务,通过内部讨论每人的计划互相监督落实。

采取行动:

  • 抉择以下:你想如何度过自己的一生,花点时间创建一些自己的规则,确保自己朝着正确的方向前进
  • 创建自己的责任制度,帮助自己严格执行规则

选择批量处理而不是并行处理,适合批量处理的领域:处理电子邮件,打电话沟通,修复bug,开短会

采取行动:

  • 停止任何并非真正的多任务并行的多任务并行,每天力争一个时间段只做一件事。番茄工作法巩固加强这一方法
  • 一次性批量处理小任务,而非每天或者每周做许多次
  • 找出能够真正实现多任务并行的领域,将不需要耗费脑力的活动都可与其他活动结合。任何耗费脑力的活动可于简单体育运动结合。

职业倦怠的解药

生产力的最大障碍之一是身体和心理上的倦怠。

生物新鲜感和好奇心的原因,做事的动机和兴趣逐渐濒临谷底,同时成果并未到来,因此撞倒了那堵看不见的“墙”。大部分人没有穿过那堵墙看到成功的彼岸。只要坚持,越过大部分人,你将收获少数人带来的巨大成就感以及快乐。

采取行动:

  • 想一想以前哪些项目是你付出努力却没有最终完成而半途而废了。是什么原因让你放弃的?你现在对这件事有什么感受?
  • 下次开始新项目的时候,下定决心:你一定会完成或者完全掌握。设定规则和约束条件,强迫自己穿过那堵不可避免的墙
  • 如果你正面临职业生涯或者个人生活中的一堵墙,试着去穿越它。想想墙的另一侧有怎样的收获在等着你。想象自己的动机和兴趣终将获得回报。

时间怎样被浪费掉

减少被浪费的时间,停止电视等娱乐视频,注意社交时间以及开会。
一些常见的时间杀手:

  • 电视
  • 社交媒体
  • 新闻网站
  • 不必要会议
  • 烹饪
  • 电子游戏
  • 段视频

采取行动:

  • 下一周,精心地跟踪自己时间花费,获得精确的数字,了解每天每小时怎样花掉的,找出最大的2~3个时间杀手
  • 如果有看电视习惯,尝试离开电视一周,度过一个“无电视周”
  • 弄清楚哪些时间是可以“买回来的”,比如雇人做保洁,切断电视等

每天的惯例

挑选好大目标,接下来想清楚怎样才能每天每周推进,最终实现目标。如果想减肥,每周要减掉几斤。

采取行动:

  • 你目前有哪些惯例?跟踪一下你的日常活动,看看你已经在遵循的惯例有哪些
  • 选择一个大目标,以每个工作日为单位例行安排。计算以下,如果每天朝这个目前前进,一年下来你会取得多大的成就

培养习惯:刷新你的代码

成就我们的恰恰就是那些不断重复做的事情。因此,优秀不是一种行为,而是一种习惯 --亚里士多德

好的习惯推动我们前进,帮助我们成长。坏的习惯阻止我们前进,阻碍我们成长。养成良好的习惯,帮助你无需刻意努力就保持很高的生产效率。惯例是我们可以控制的,而习惯却不受我们控制。更深了解阅读《习惯的力量》

习惯三要素:暗示、惯例和奖励;一件事做得越多越能形成习惯,习惯力量基于奖励的价值。可变化的奖励要比已知的标准奖励更令人着迷。

重要的一点:找出坏习惯,改掉。比如说:坐在电脑前就不自觉浏览无聊资讯或者无益的内容。分析这个习惯过程:首先暗示是坐在电脑面前,接下来就是无益的行为,最后空虚快乐的奖励;

不要试图马上改变它,相反尽量找出习惯是被什么触发的。意识到奖励是期待能实现但从未兑现的承诺。一旦你能够掌控习惯本身,你就会发现自己对习惯可以保持更清醒的认知,甚至于近距离审视一个习惯而打破并改变它。同时努力找出是否有别的惯例可以代替当前这个为了某个习惯而执行的惯例,如果可能尽量寻找那些会带来相似的奖励甚至相同的奖励的事情。
最后也是最重要的部分是,强迫自己坚持足够长的时间,以使得新的习惯能取代旧有习惯。只要能在新习惯坚持足够久,新习惯一定会变得轻松而且自发的。

试想,你想要完成的大目标是什么,你是否能养成某种习惯,推动你奔向大目标的方向上前进,你的习惯越积极,你向着目标前进的过程就越轻松。

采取行动

  • 跟踪你的习惯,哪些习惯对你目前的生活影响最大?你认为其中多少是好习惯,多少是坏习惯
  • 挑选一项你的坏习惯,试图将它转变成好习惯。开始前,现在脑海里设想一周后,一月后以及一年后你有什么成果。

分解任务:如何吃掉一头大象

要吃掉一头大象,每次吃一口。 --克雷顿

克服拖延的提高生产力窍门之一:分解任务,让自己更有动力去完成它们,更加稳妥地朝目标前进。

大型任务给人带来沉重的心理负担。面对大问题,我们倾向于花更多时间思考问题本身,而不是采取实际行动去解决问题。人类倾向于选择阻力最小的路径。另外任务越大,越难明确定义。

采取行动:

  • 当前你因规模惊人而放弃了哪些大任务?你会在打扫车库、写博客文章、解决复杂算法事情上拖延吗
  • 选出当前面临的大问题,看看能否找到好办法将它分解成更小的任务。

努力工作的价值

努力工作是成功的必要条件,无法逃避。努力工作总是枯燥的。
人生长跑比的是谁耐力更长久,而不是看谁冲刺更有力。 --约翰杰克斯
只有少数人能到达顶峰,只有少数人能看到真正的成功,大多数人都在自己的职业生涯中碌碌无为。

必须认识到,想要实现目标,发挥出自己全部潜力,唯一的途径是自愿咬紧牙关,硬着头皮开始工作。

采取行动:

  • 你曾经投身哪些艰苦的工作中?有哪些任务你会因为不喜欢而拖延?找出其中一项任务,毫不犹豫地马上去做,养成雷厉风行的习惯并且立即在需要做的工作中付诸行动。

任何行动都比不采取行动好

任何行动往往都比没有行动好,特别是当你一直停滞在不愉快的情势下很长时间的时候。如果这是一个错误,至少你学到了一些东西。这样一来,它就不再是一个错误。如果你仍然停滞不前,那么你就学不到任何东西。 --《当下的力量》

无所行动的原因主要源于恐惧,害怕把事情搞砸。恐惧改变,恐惧做不一样的事情。很多时候我们宁可无所作为也不愿意选择次优方案或者承担失败的风险。跑起来的汽车更容易转向。

采取行动:

  • 挑选你知道你应该采取行动的事项,回答其中的问题:阻碍我采取行动的障碍是什么?如果我需要作出选择,选择是什么,我要从哪些中作出?错误的选择导致最坏的结果是什么?如果选择失误,我可以退回去其他选择吗,代价高吗?选择之间区别大吗,我能选立即行动的次优方案吗?我当前面临的问题有助于自我发现吗?如果采取一些行动,我在正确行动之前还能调整吗?如果我不行动,会发生什么,代价是什么,浪费时间错过机会还是损失金钱?

  • 识别过去因不采取行动而错过的机会,如购买出售股票,投资公司或创业

  • 如上述事项没如你希望那样发展,最坏的结果是什么

  • 最好的结果又是如何

  • 如果当前的行动目标过于复杂,难以决断,你能做哪些一丁点的决定来继续前进?例如你决定到底学吉他还是钢琴,你可以决定先暂时学哪一样,同时决定长期学习哪一样吗?

理财篇

金钱只是一种工具。它会带你去往任何你想去的地方,但不会取代你成为司机。 --爱思.然德

什么是资产? 实用价值高于维护成本的东西,能够带来比自身成本更高的价值。
什么是负债?成本高与带来价值的东西。

“任何能把钱装在你口袋里的东西才是资产,任何需要你把钱从口袋里掏出来的东西都是负债。”

采取行动:

  • 算以下每个月你经手的资金。看看每个月赚多少钱,这些钱最后去了哪里。是否大部分资金最后都变成了负债而非资产?
  • 计算一下,为了达到在银行存款500万的目标,每年你得存多少钱。再算一算,如果不做投资,你一辈子能赚够这么多钱吗?
  • 开始问自己“我能攒多少钱”,而不是“我能花多少钱。”

薪酬谈判

评价和把控所服务的公司对你的看法。

谈判能力很大程度受声望影响。基本策略尽可能让自己的名字出现在各种媒体上。写博客、做播客、写书或文章。获得工作的方式也至关重要。

招聘启示是最糟糕的方式,另外一种是通过他人推荐,这种绝对比自己申请职位好很多。应该尽量尝试获得个人推荐,一方面雇主不确定你在积极找工作,因此你不显得那么被动和迫切。另一方面你具备了一定的可信度。推荐人在公司的声誉越高,你的可信度就越高。

另外,最佳的方式显然是一家公司知道你,然后无需任何面试直接为你提供一份职位,这是建立在你的声望上的。

关于出价,一条重要法则就是先出价的人会处于明显的劣势。容易失去了议价权,如果被要求先出价,可以直接说“不”。可以刻意回避“在给出一个确切的数额之前,我更愿意多了解以下贵公司,多了解一些我未来职位的工作内容。基于此,你们对该职位的预算范围是多少?”“好吧,如果你告诉我预算范围,尽管我无法准确说出期望薪酬,但是我可以告诉贵司薪酬预算是否符合心理预期。”只有确切数额的Offer是真正的offer。事实上,一旦收到offer,不可能撤销,雇主投入了大量时间面试,做出offer,不会希望重来一遍。薪酬的理由绝对不是“我需要”,而是为什么“我值得”.

采取行动:

  • 尽可能练习谈判技巧,克服谈判的恐惧感。下次去商店买东西,试着讨价还价,即使不成功,也会获得一些宝贵经验。
  • 仔细研究以下行业薪酬水平,了解自己值什么价钱。试着找出所在领域的公司给职员的薪酬是多少,跟自己当前的薪资情况比较以下
  • 即使不找工作,也可以参加一下面试。也许你会发现,当你无所求的时候,谈判更容易。说不定能通过这种锻炼找到更好的工作。

期权:所有乐趣之所在

什么是期权?允许某人为未来的某个日期买入或卖出股票的权利付费。
支付权利金,如果大涨可以赚去涨幅;如果大跌可以不履行,亏损掉权利金。

采取行动:

  • 在熟悉的股票中找依照,能否找到“期权链”。
  • 了解一下该期期权链,计算一下购买未来一个月内的某个股票期权成本是多少。

房地产投资

房地产最大优点是稳定性,稳定的收入在于租金,瞄准租金收入。而且属于低风险,高负债的投资类型。以租养贷,你的贷款从根本上由你的租户偿还,你却可以免费得到一处房产。

为什么房地产是很好的投资?购置房产用于出租,并且每个月按固定贷款利率还款,从房产中的收入就会非常稳定;你可以利用银行的钱支付购买房产所需的大部分费用,从而让自己利用资本负债获得高额回报;如果通货膨胀,你的房产投资可将资本负债作为对冲工具从中受益。

但如果相信自己可以倒卖房产或者低价购买抵押房产快速致富,那终究会自食恶果。做好投入耐心、勤勉和大量时间的准备,20~30年后才盈利的打算。聘请物业管理公司打理租赁房产。要货比三家,找到最诚信,服务质量最佳的物业管理公司。

采取行动:

  • 找出本地一份你所在区域可供出租用的房产清单,看看是否有可能购买此处房产确保你的现金流是正向的,或者至少收支平衡。

你真的了解自己的退休计划吗

“慵懒地躺在沙滩上,捧一本书,酌一口冰镇朗姆酒,任海浪拍打在脚面上“ 这大概是梦想的退休生活,而且通常认为发生在60岁之后。事实上,从现在开始计划,可以让你的退休计划来得更早一些。

退休计划就是利用逆向思维:很多人认为退休人士的财务需求与在职人士一样,事实上当你拥有充裕的空闲时间的时候,当你再也不用储蓄或者上下班的时候,有些开销就会大幅减少。从现在起,缩减每个月的开支,不但不会令你感到生活水准下降,甚至让你提早退休。不用投资、不用工作也不必祈求加薪,没有什么比勤俭持家更能让你获益良多。勤俭节约才能细水长流。

加速退休进程的三个主要方法:1.削减开支:买租最小的公寓,或者免费跟父母住。买二手车或者无车生活,切断有线电视,不外出吃饭,买旧家具用。生活开支越少,省下来投资的钱越多 2.赚更多的钱:搬到薪水更高的大城市,如果可以,着手开始一份兼职或者自由职业 3.做有利可图的投资,投资越谨慎,获益越高资金增长越快。

采取行动:

  • 计算当前月支出,看看愿意作出一些牺牲,能削减多少开支
  • 精简后,每月要赚多少钱才能实现退休,及的给自己留有缓冲余地
  • 弄清楚不同投资回报(2%,5%,10%),要有多少钱才能退休的时候每个月有足够的收入

债务的危害,采取行动:

  • 列出你的所有债务清单,把它们区分两类:好的和不好的
  • 把不好的债务按照利率从高到低排序,计算多久可以清偿所有债务

我从不追求永远不再工作,但是我一直追求在不想工作的时候就不工作。

健身篇

人的身体就是人的灵魂最好写照 --路德维希.维特根斯坦

健身不仅是保持健康体魄的关键要素之一,也是灵活的具有创造性的脑力活动的基础。 --约翰.肯尼迪

当你总觉得疲倦、无心工作的时候,或者状态不佳时,改善饮食和加强锻炼可以让你的身心同时获得新活力。

健身让你的身体变得健康,同时带给你个人自信,自信的人更容易迈向成功。

采取行动:

  • 深入本章前,你要对自己的健康作出承诺。也许已经很健康了,那么各部分内容不过帮助你复习一下。但是,如果你知道自己需要获得健康,承诺你将认真对待自己的健康,也会在生活中作出一些改变。

设定你的健身标准

没有目标,你永远达不到目标,如同需要知道写的代码是用来做什么一样,你需要知道忍饥挨饿、挥汗如雨要得到怎样的结果,否则你就是浪费时间。

挑选具体的健身目标,可能是:

  • 减肥,减掉脂肪
  • 增肌,增长肌肉
  • 增加力量,不一定是肌肉,可能是某些项目的力量
  • 增加肌肉耐力(改善运动表现)
  • 改善心血管健康
  • 在某些运动上表现更好

建立里程碑,关注两周的目标,正确的方法测量进展,跟踪了解自己是否朝着正确的方向前进,选择单一主要的测量项。

采取行动:

  • 确定一个大的健身目标,写下来
  • 接着,列出一系列切合实际的里程碑来实现这一目标
  • 确定自己实现第一个里程碑要采取的行动

建议适合减重的运动:跳绳、游泳、爬楼梯、跑步、骑车、健身操、羽毛球、跳舞、瑜伽、走路、篮球。

控制好饮食,制造热量缺口,采取行动:

  • 跟踪至少3天摄入的卡路里总量,正确了解自己的热量摄入。跟踪记录前,做一个估算,看看是否与实际结果靠近
  • 计算自己的新陈代谢率,结合运动近似计算每天燃烧的热量近似值,结合卡路里数量观察自己的重量是在增加还是减少
  • 不论减肥还是增重,利用这些信息制订基础计划,同时考虑热量和运动量两方面

让你的屁股离开椅子

健身目标最难的是:获得并保持健身的动力。必须自我学会如何激励自己,如何持久地保持动力。

思考什么能激励自己前进,避免过早奖励自己。合理制订奖励计划,如坚持三个月跑步或者减重至67kg,可以奖励自己一双优质跑鞋等等。如坚持健康饮食一周,可以去买入更多优质健康的食品等。

保持动力的做法:事实上,在操作过程中会不断失去当初的动力。而此时,在各个地方张贴图片提醒自己想变成的样子是保持动力的一种好方法,制作进度图表并且不断提醒自己已经实现了多少也是有帮助的。最后另外一种强大的动力方法是游戏化,可以参考一些健身应用游戏。

例如:只有跑步或者举重的时候听播客或者有声书,因此每天期待运动。只有在跑步机上才可以看电视。外出跑步看风景。

最后当动力消失殆尽,需要用原则底线来代替激励。如一些人生格言激励:

  • 善始善终
  • 成功者决不放弃,而放弃者永远不会成功
  • 一分耕耘,一分收获
  • 时间短暂,如果生命中要做某件事,那么现在就去做
  • 一切都会过去
  • 坚持到底就是胜利

采取行动:

  • 列出你要健身或者改善健康状况的原因。从这份清单中,明确三项最重要的激励因素,打印出来并张贴在不同的地方,确保自己每天能看到
  • 将讲述保持动力的做法选几条,在生活实践。找几个可以激励你的人的照片,张贴出来,或者找一个新的健身应用,将锻炼变成乐趣
  • 在达成计划某个里程碑时给自己奖励,将进展状况画成图表,达成阶段奖励自己
  • 运动中断步伐的时候,问问自己如果坚持三个月,一年后,会变成怎样

增强肌肉主要分为推、拉、腿部练习等。关于腹肌,需要将身体的脂肪降到一个很低的百分比。这是与自己身体进行一场生死较量。

为什么跑步

跑步最大的好处是心血管健康,可以抑制食欲。同时是治疗轻度抑郁的天然良药,让你感觉更好。至于其他好处如增强膝盖和其他关节,提升骨密度,降低癌症风险也能延长寿命。

站立式办公及其他窍门

站立式比久坐办公要好得多,另外番茄钟间可以进行拉伸、俯卧撑、引体向上等练习。
饮食可以多摄入鸡蛋、低脂酸奶以及半成品的鸡肉,蔬菜等。

采取行动:

  • 查看哪些饮食窍门可以应用于生活,让你轻松实现健身目标
  • 查看现在的日程和健身计划,找出最耗时和恼人的部分。思考怎样做能找出窍门,让事情变得简单容易。

高科技健身

利用计步器fitbit来改变行为习惯,让你更具活力。无线体重计,不仅记录体重,体脂率,而且上传云端,看到自身的变化曲线。更多的组合设备可以测量心率、血氧含量、活动及体温。以及一幅好的耳机很重要。

精神篇

如果你不征服自己,你就会被自己征服 --拿破仑

世界存在着另一股强大的力量,它带领我们走上成功之路,把我们推向成功。你可以按照自己的意愿称呼这种力量,这里可以暂称为“精神”。它其实是身体与心灵之间的无形联系,它能激发我们采取行动,并最终控制我们充分发挥自己的潜能,或者只能退回到相信自己就是周遭环境受害者的无奈境地。

这里的目标是用精神工具武装自己,让你征服你所面对的最强大敌人-你自己。

心灵影响身体

信念决定思想,思想决定语言,语言决定行动,行动决定习惯,习惯决定价值,价值决定命运。 --圣雄甘地

采取行动:

  • 找出心灵和身体之间的联系。试着在自己的生活中找一个例子,什么样的想法给现实带来了积极的影响,什么样的想法又给现实带来了消极的影响?
  • 你最近一次取得巨大成功的时候,心态是什么样的。
  • 你最近一次遭遇重大挫败的时候,心态是什么样的。

拥有正确的心态:重新启动

积极思考不只外表乐观,而且对健康有益,能延年益寿,给生活提供其他好处,事实上积极的态度是可以传染的。

积极思考问题的根源来自一种信念:你比你所处的环境更伟大。这让你总先看到事物好的一面,无论身处何种环境,你都有能力改变自己的未来。积极的心态来自于这些美好想法的积累,随着时间推移这些想法由内而外地彻底改变你。当你拥有一个积极态度的时候,你就不是活在现实分离的虚幻世界里,而是生活在一个最理想的世界里,一个你能看到的最理想的未来世界,一个你一直以来都在苦苦追求并努力实现的未来世界。

积极思考带来正面的作用,带来幸福的感受:

  • 发展友谊
  • 婚姻美满
  • 收入更高
  • 身体更健康
  • 延年益寿
    当我保持一个积极的态度,我更愿意去面对任何障碍,把挑战看成要克服的困难,而不是消极地认为是环境把我逼到了绝境。

如何改变:养成积极思考的习惯,一定有力量选择更积极的想法。频繁练习这种思维方式,让自己假象一幅积极的画面,然后你看到一线曙光,你就越容易将它变成你的习惯。从而训练你的大脑从更积极的而不是从消极的角度看待问题。

花点时间养成冥想的习惯,更容易体会到正面情绪,从而提高你积极思维能力的修炼之道。

另外注意劳逸结合,许多负面情绪与忘记休息相关,适当休息更容易保持积极心态。推荐阅读《积极思考就是力量》,积极思考能让你活得更长久,更健康,更成功,同时也让你获得更有乐趣,同时影响你周围的人同样生活越来越有乐趣。

采取行动:

  • 捕捉你的想法,记录帮助你理解脑子里想什么,让你更专注于你想专注的事情。记一周的思维日志,只要有机会就把自己的想法写下来,不管是积极的还是消极的,每一天都将这一天发生的任何有意义的事情记录成日志,给每天固定的时间段都创建一个条目。
  • 审视你的思维日志。几乎都是积极的想法还是消极的想法?消极的想法源自哪里?积极的见解呢?
  • 试着控制自己的想法尽可能唤出积极的想法,当某件事发生在你身上的时候,花点时间去了解并非整个世界与你作对–并非只有你一人碰到这样的事,强迫自己找出一线曙光,不要只是消除消极的想法,同时要将消极想法替换成积极的想法。

构建积极的自我形象

那些不能激励自己的人,一定甘于平庸。无论他们的才能多么令人印象深刻。 --Andrew Carnegie

每个人内心深处,都有一个自己的形象,这将真实地反映出我们的大脑对真实的我们自己的看法。自我形象难以改变,同时也是自我设限。但始终要相信,“我可以决定我想成为怎样的人”这样的想法,才能真正改变自己。不断设想自己想成为的清晰形象,只有足够清晰才能带领你的大脑带领身体到达彼岸。

树立一个牢固的形象-“这就是我想要成为的形象,没有什么能够阻止我”。如同运动员在想象画面中提高自己的成绩。

采取行动:

  • 列出你的优点和缺点。不仅试着想想你是如何认知自己的,也试着想想别人是如何认知你的。这份清单不一定完全正确–你的自我形象很多方面被埋在了潜意识深处,但它会是很好的起点
  • 这里面的清单哪些方面无法改变?为什么?想想这些是永久性的还是因为信念带来的局限
  • 尝试至少改变自我形象的一个负面方面,试着“假装自己能成功”的方法和正面的肯定来强化自己的新信念。

提高个人魅力,采取行动:

  • 回想你怎样流露出“绝望”的情感,看看你和别人在社交媒体沟通的内容,你是如何与朋友互动,你的语言和表达是自信的还是空虚的
  • 你的交际圈多宽?你给自己足够机会寻找“真爱”了吗?走出去,去和别人接触,花点时间感受一下这是什么感觉。一旦你意识到这种感觉不错,接近他人时就更加自信,因为你不害怕后果
  • 切实做些事来提升自信心,比如开始执行一个健身计划或者涉及一些会对你自己感觉更好的其他活动

作者的成功书单

自我提升励志类:《The War of Art》《人性的弱点》《思考致富》《心理控制方法》《积极思考就是力量》《阿特拉斯耸耸肩》

软件开发类:《代码大全》《代码整洁之道》《Head First设计模式》

投资类:《The Millionaire Real Estate Investor》《富爸爸,穷爸爸》《No-Hype Options Trading:Myths, Realities, and Strategies That Really Work》

积极面对失败

跌到七次,爬起来八次。 --日本谚语

要实现不畏惧失败,第一步是真正意识到失败不是终点。能否从失败站起来,取决于是否决定为自己最值得拥有的东西战斗,取决于是否要享受获得成功后的喜悦和快乐,这些来自于战胜困难的成就感。

学会拥抱失败、期待失败、接受失败并准备直面失败。

大多数伟大的人取得最大成功与它们所精力的最大失败只有一步之遥

采取行动:

  • 对失败的恐惧如何让你退缩?想想生活中那些你想做但由于一时犹豫或者自尊受损而没有做的事情
  • 承诺至少做一件因为害怕失败而一直回避的事情。不要敷衍了事,很多人明知道有些事会失败还是去“尝试”,这样做不会让他们真正失败,因为“没有真正尝试过”才会是失败。真的去尝试,真的去体验失败吧

结语和附录

关于食物的热效应:指食物被人消化吸收耗掉原本能量的比例,例如蛋白质高达2~3成,例如纤维和粗粮。
未经加工的食物是最健康的食品:鸡肉、蔬菜、水果、红薯、糙米、蛋类、燕麦、坚果和鱼。

可以刻意练习的六种心态

1.旁观者心态
方法:任何不喜欢的事情发生了,你就想象一个画面-你从身体跳出来了,你在5米之外看自己。
作用:可以四两拨千斤,化解所有烦恼。开悟者常用,但一般需要经历太多苦修才能达到境界。

从旁观者看,这个人既陌生又熟悉,但这人终究是陌生人,他发生的任何事都和你没有关系,甚至很搞笑好玩。

原理:练习久了,你基本不会被情绪困扰,旁观者心态是不响应生理性、基因性、即时性、冲动性和本能性的反应。这些反应是所有痛苦的根源,不但解决不了问题,反而会让事情变得更加糟糕。

2.归零者心态
当感觉做人不容易,压力特别大,心情非常沮丧,非常迷茫的时候,用这个心态可以安静下来找到目标,让自己的人生变清晰,恢复自信。

方法:想象过去的一切一切都只是你的一个梦而以。既然过去的一切一切都是梦,全部归零了。现在的自己就是新生婴儿,未来的自己一切都是崭新的。

原理:既然是新生的,就不要带有包袱,不管是荣誉的还是耻辱的。人生最可怕的事情就是路径依赖。归零者厉害之初在于让你突破路径依赖,成为改变命运的起点。

3.一日囚心态
用于对抗消费主义陷阱,远离个人经济危机

方法:想买东西的时候,想象自己只能活在今天了,买来的东西今天用不上的话就会消失。

4.造物主心态
献给低自尊,低价值感,低存在感的同学们
是不是特别爱觉得对不起?是不是觉得自己终究是不配了?是不是觉得强者的世界中自己就像一颗无足轻重的露珠?

请大胆勇敢使用造物主心态

方法:这个世界是你创造的,所有人所有事都是你脑袋里长出来的,它们对你来说,才终究是不配了。

原理:这其实就是世界运作的本质和人生的真相,可以多读相关的书了解

应用场景:面对应试面试,演讲;面对弱智和杠精;教员就是造物主心态的代表性人物,参见相关诗词“五岭逶迤腾细浪,乌蒙磅翎走泥丸“

5.复仇者心态
弱者最大的问题在于甘于弱势地位,认为“大家不都这样过的吗”,但凡能成就的人都有卧薪尝胆的复仇之心,老天爷不会平白无故帮助一个过于佛系的人。

首先要找个仇人(不是真正意义上的,是为了成就自己找的一个靶子),可以虚构一个人出来。他和你有着不共戴天之仇,而且如果5年后比他钱少,他就能弄死你。反复构建比较细节,直到可恨。

方法:如何复仇?如何5年后弄死虚构的人;现在存的每一分钱都是对他的一记耳光。每一分钟认真的工作都是一记飞腿。每一次毫无意义的消费都是仇人射来的箭。每一次自甘堕落都是对手的励精图治。

可以用于办公室政治,追求对象,追求财富,追求成就上。

6.永生者心态

方法:就像永远不会死那样,去追求道德和精神生活的完善。

“积善之家必有余庆,及不善之家必有余殃”

总结:心态改变行为,行为改变命运。

高赞的回答

1.不内耗
不让负面情绪影响自己超过3天,不苦情。有想表达的事情勇敢争取表达;遇到负面反馈再应对,不猜测不内耗。

2.不让别人消耗自己
与简单的人做朋友,远离强势,带来压迫感,会负面打击别人的人。

3.戒掉虚荣心
认清事物的本质,刨去表面毫无用处的附加值

4.表达出来与内心完全一致,相信别人也如此
不害怕表达真实的自己,表达出来的跟内心完全一致,不让别人猜;推己及人,相信别人表达出来的也跟内心一致

5.练习深度工作
专注工作,控制自控力,集中精力在眼前有难度,有挑战的事情上。

6.做长期主义者
人人都渴望“快速成功”,但真正成功的事情都是经历播种、施肥、浇灌而成的。

7.社交时,不把自己放在被评价的位置
遇到比自己强的人,不要在意,承认对方优点,也不否定自我,没有必要太在意别人的看法。

8.克制自我的同理心
太敏感感知别人情绪,容易成为讨好型人格。

类的复用

上一节了解了public继承是is-a关系;C++ PRIMER第十四章重用讲解包含has-a的两种用法:1.组件包含 2.私有继承包含
大多数人会倾向于使用包含,一方面方便理解,另一方面多重继承容易引起问题;私有继承主要区别在于私有成员变成了继承而来的无名成员,调用成员时依赖this的类型转换。

多重继承

MI会带来许多新问题:1.两个基类的同名方法; 2.多个相关基类继承同一个类的多个实例问题;为此大家对MI有喜忧参半不同的态度。

祖先相同时,要用虚基类解决 class Singer:virtual public Worker,虚拟继承。禁止正常的信息再中间类自动传递。

MI中间隐含较多问题,尽量减少使用,要么就不用。

类模板

模板主要作用是提供参数化类型,将类型关键名作为参数传递给模板类或函数,从而实现最大程度代码复用。

模板类型使用指针时,代码实现上也得调整,所以一般减少依赖指针模板使用,尽量时bool,char,int,double,string,及一般对象等。

为容器类提供可重用代码是引入模板的主要动机。非类型参数可以是int,枚举,引用或指针,因此double m 不合法,但double *m是合法的。

模板多功能性,可用于基类,组件类以及其他模板的类型参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
template <class T>
class ARray
{
private:
T entry;
...
};

template <class Type>
class GrowArray:public Array<Type> {...}; // inheritance

template <calss Tp>
class Stack
{
Array<Tp> ar; // use an Array<> as a component
...
};

// need a blank between > >, show differ from >> operator
Array < Stack<int> > asi; // an array of stacks of int

// 模板也可传参
template<class T, int n>
ArrayTP<T, n>::ArrayTP(const T & v)
{
for(int i=0;i<n;i++>)
ar[i] = v;
}

// 显示具体化,用于专用定义,优先匹配
template<> class Ic<char *>
{
private:
public:
};

模板参数类似函数参数,带有隐式显式转换及参数匹配规则。

友元类

两个类关系既不是is-a也不是has-a,但存在控制的关系如电视和遥控。则可以定义遥控为电视的友元类,能够合理范围内修改电视的私有和保护的部分。相当于友元类需要直到朋友类的数据细节乃至实现细节。

优雅起床

熬夜:睡眠不规律,睡眠不足以及整夜不睡.而非指定睡觉时间,当然中医养生的角度应该是需要早睡早起,早上练功升阳.

如何优雅起床:

  1. 早起一杯温白开
  2. 感受阳光感受风,开窗通风
  3. 刷牙洗鼻如厕
  4. 吃好早餐
  5. 洗臉:干性用冷水,油性用热水

起床三不要:

  1. 不要起床太快,可以先拉伸慢慢活动开
  2. 晨练不要太剧烈,八段锦
  3. 如厕不能太用力,自然而为

避免起床气,其成因:混乱性觉醒,避险本能;不吃早餐危害:肥胖

完美早餐 = 主食 + 蛋白质 + 蔬菜 + 水果
主食可配粗粮红薯、玉米、红豆、紫米等

早高峰养生

正常脖子需成熟头部的压力约4~5公斤,但低头幅度达45度时,相当于顶着10瓶大可乐,应尽可能减少低头。长期前伸容易导致肌肉疼痛僵硬,久而久之出现劳损和椎间盘突出;影响心血管健康,血循环及脑供氧。莫憋屁尿,憋尿坏处多。

对抗久坐

久坐的坏处:肥胖,腿部血液流速减慢,大量静脉血淤积在小腿,肌肉和韧带等组织过度拉伸的酸胀,使人处于低代谢水平,影响内分泌功能。

解决方法:寻找站立办公的机会,多走动。小水杯,多厕所,绕远路.

正确坐姿:抬头挺胸收腹,目视前方

头部米字操,锻炼颈部后方肌肉

枕头:压缩后一拳大小,别太软要有支撑

改善腰部:桥式,飞燕,平板支撑

关于午休

吃完睡并不会长胖,多吃或者睡完又吃才会。午睡讲究火候,一般10-20恰到好处,起来神清气爽;如果超过一个小时则进入完全睡眠,起来身体很疲惫。

晚上难入睡的伙伴,建议中午攒攒睡意,等到晚上再一口气休息好。
善用垫枕和U型枕,尽量躺睡,如果不睡觉建议听点音乐作休息,另外善用降噪耳机。

关于外卖

正规店家要求《餐饮服务许可证》和《营业执照》
远离三种菜:干煸/干锅,“水煮”,炒土豆三鲜等;少油少盐少淀粉。
油脂单位热量高,而且代谢困难。减少油炸,重油食品,而且大部分吃到的油不新鲜,进入身体代谢严重影响健康。点菜要避免眼大肚小,饿的时候容易点多。更绝的是可以把油先蹭掉再蘸料吃,实现味道与健康的双赢。

爱吃炸鸡的朋友,可以把鸡皮扒开吃,尽量摄入非常油的食品。

针对甜点欲望,可以慢节奏吃+喝水,有效缓解甜品的高热量诱惑。
另外要打破杜绝浪费的观念,针对不健康的食品应该果断浪费,因为引起的健康问题反而得不偿失!

关于晚饭

正常是规律进食,除非当天中午或者下午吃多了,热量摄入足够了。再就是晚上8~9点入睡的朋友也可不吃,因为睡眠消耗比较小。

晚饭需要注意的是:1.早吃 2.不暴食

关于夜宵

夜宵的吸引力:1.无聊 2.压力 3.心情不佳
可以选择牛奶燕麦粥,少放盐

关于熬夜

危害多,长期的睡眠不足比急性通宵的影响更大;严重影响身体机能,免疫力以及反映力等。

熬夜的主要原因:追剧,小说,游戏。一线普遍12点后睡,日均7.8小时。
只要生活规律,睡眠质量高,一觉醒来活力四射,元气满满,那么这样的作息就是适合你的。

延缓衰老

25岁后,人的衰老主要是基础代谢下降,预防衰老第一步是维持高水平的代谢率。皮肤衰老首要原因是紫外线,注意防晒。有光就有太阳,有太阳就有紫外线,有紫外线就会变老。

饮食

主要方法:1.低油低糖不过饱,过度进食容易消化不良,影响肠胃正常运作 2.均衡饮食,三餐规律。

多摄入牛奶,酸奶和豆腐,高钙能缓解衰老。铁和锌,维生素ABCD等族群,起到意想不到的作用。

多摄入粗粮,粗粮最大的优点是带来饱腹感,膳食纤维能与脂肪和胆固醇结合,预防高血脂和脂肪肝等病。

减少多糖,糖基化是糖和蛋白质结合,使其失去正常的结构和颜色。

快乐

傻人有傻福,生活已经很苦,不要再给自己太大的压力,学会和自己和解,保持良好心情。长期高压下,导致失眠,毛孔粗大,脱发,皮肤暗沉等问题。试着让自己每天都快乐,接受和享受快乐。

运动

动起来,每天半小时的健身锻炼,让你的生理状态和精神面貌都年轻;长久不锻炼,肌肉会退化,人的反映也会变缓。

关于零食

每天一小包坚果是可行,但注意油炸和蟹黄等。可以考虑燕麦制品的零食,至于糖果巧克力则是甜蜜的负担,心情不好时可以来一下。最后果脯果干不能当水果吃,选择钠含量不超标的食物。辣条含钠量太高,基本卫生也无法保证,还是别吃了。同时也要减少吃冰制品。方便面垃圾不在于其他,只在于热量高,含盐量高,蛋白质和膳食纤维不足。尽量进食新鲜食材,而非加工制品。

胖子不是一口吃成的,你摄入的每一份糖和油脂都不是无辜的。

生活中的建议

  • 好好吃每一顿正餐,减少时长产生的饥饿感
  • 保持学习和工作环境的清爽,不把零食放到容易看见的地方,人的意志很容易动摇,不要自己给自己设置考验
  • 多喝水,有时你感觉饿了并不一定是身体真的缺少能量,也可能是缺水了,试试站起来倒杯水,补充水分,转移注意力,有时候就能骗过大脑
  • 买小包装或者分装,拆开一大包容易全部吃完
  • 定时摄入,稍微补充,而不是随时随地补充能量
  • 千万不要一边看剧综艺一边零食,否则根本想象不到自己吃了多少
    总之进食要注意糖、脂肪、热量、钠和蛋白质,尽量选低糖、低热量、低钠、高蛋白的食物,用全麦面包和燕麦来饱腹吧~

关于饮料

提神饮料可选茶叶,茶本身比较健康,无糖无脂低热量。咖啡可选美式,名字越好听越可能是健康陷阱。平时午饭后,可来一杯咖啡,小憩15-20分钟,即可在午后华丽转身。能量饮料中含有大量糖,而且咖啡因不能摄入过量,最多依赖茶叶,尽量不依赖功能饮料。

EIGEN简介

FROM WIKI: Eigen is a high-level C++ library of template headers for linear algebra, matrix and vector operations, geometrical transformations, numerical solvers and related algorithms.
简而言之C++开源模板库,支持线性代数、矩阵矢量运算和数值分析,是个方便好用的数学库。

更绝的是,EIGEN所有源码用头文件编写,所以只需要Include,无需编译链接过程,直接与平台无关,非常通用!

安装

安装过程也很简单,在UBUNTU下直接

1
sudo apt-get install libeigen3-dev

一般安装在/usr/include目录下

使用直接与标准库类似,#include <Eigen/Dense>等

主要模块

简单例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <eigen3/Eigen/Dense>

using namespace std;
using namespace Eigen;

int main()
{

Matrix3d m = Matrix3d::Random();
m = ( m + Matrix3d::Constant(1.2)) * 50;

cout << m << endl;
Vector3d v(3);
v << 1, 2, 3;
cout <<m*v << endl;

return 0;
}

这是fix_sized定义的写法,一般4*4以下的矩阵矢量用固定大小写法,对于比较大的才用不定量写法MatirxXd, VectorXd;

主要结构为1D对象Vector, Array和2D对象Matrix