Java教程

程序员的财务自由之路(二)- 有的放矢

本文主要是介绍程序员的财务自由之路(二)- 有的放矢,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

    • 一、前言
    • 二、如何制定目标
      • 1、目标蓝图
      • 2、技术栈
      • 3、反向激励
    • 三、C++ 入门
      • 1、C++ 是世界上最好的语言
      • 2、编码能力
      • 3、算法
      • 4、小试牛刀
        • 1)标准输入输出
        • 2)ASCII 基础知识
        • 3)STL 排序函数 sort 的 应用
        • 4)简单字符串处理
        • 5)简单进制转换
        • 6)利用字符绘图
    • 四、结尾彩蛋
      • 1、巧用位运算
      • 2、结语

一、前言

  • 我们那个年代上大学的时候有个网站叫 校内网,相信那个年代的人都知道,期末复习功课的时候总是要刷一下,就像现在的抖音一样,有毒!最近我再去看的时候,发现密码已经完全忘记了,怎么试都试不出来。后来(BGM:我总算学会了,如何去爱!可惜你,早已远去,消失在人海),我终于意识到,我失去的又岂止是一个密码,更重要的,是我逝去的青春!
  • 我们总是在想,当初的我们如果能够这样那样就好了,但是,你有没有想一下,如果现在不动起来,到了未来,你同样还是会后悔!所以:

与其后悔当初,不如把握当下

  • 给自己树立一个目标是非常重要的,有目标才会有方向,有目标才会有动力,有目标才会有人生的意义;
  • 虽然我现在算得上衣食无忧,但是离财务自由还有很漫长的路要走,然而我不会放弃,因为这是我的最终目标,路漫漫其修远兮,吾将上下而穷索!

这里用到了一个穷字,乃 ‘穷其一生去求索’ 的意思,当然,也代表了我的真实写照:穷!

  • 接下来我就给大家分享一下,我在朝着这个目标努力的路上是如何前行的。
  • 当然,我不需要太多人点赞,你自己偷偷收藏就好,因为我不想太多人知道!毕竟有个词叫 ‘闷声发大财’ !

二、如何制定目标

1、目标蓝图

  • 既然已经很明确了,目标是财务自由,那么我们就来把这个蓝图规划一下:
贫穷的我 ... 财务自由
  • 为了让这个事情看起来更加可行,我们需要把一些事情量化,比如赚多少钱以后才能称得上财务自由,估计算10亿吧,10个亿离财务自由应该也只剩临门一脚了,至少我是这么认为的,我一直认同一句话:

你永远赚不到超出你认知范围外的钱,就算赚到了,也往往会凭实力亏掉;
你所赚的每一分钱,都是你对这个世界认知的变现;

10亿人民币暂时已经超出了我的认知,再往上我无法想象,所以我们可以把蓝图更加细化一点,如下:

贫穷的我 ... 拥有10亿人民币 财务自由
  • 当然,我们还可以有其它途径,比如拥有 2000 套房,每套500万,其实也算10亿资产了,而且余生基本就靠收租就行了,还得雇人帮你收,当然理想是美好的,现实是残酷的。啊呸!怎么能说泄气的话,蓝图加上!
贫穷的我 ... 拥有10亿人民币 拥有1000套房 财务自由
  • 但是看起来还是那么的不靠谱,因为 这两个目标对于 ‘贫穷的我’ 来说,并不是那么容易达到的,我们还需要再理出一些中间环节。
  • 所以在大目标面前,我们需要制定一些小目标,比如 1个亿,1000万,100块 等等;
贫穷的我 拥有10万人民币 拥有100万人民币 拥有1000万人民币 拥有1亿人民币 拥有10亿人民币 拥有1000套房 财务自由
  • 这里有个问题,我们只订立了要赚多少钱,然而这是一个虚无缥缈的目标,所以我们需要把它具象化。
  • 因为知识就是金钱,所以我们首先要扩充我们的知识体系,毕竟是 程序员的财务自由之路,技术栈才是我们最应该关心的;
  • 于是,我们找到了我们的另一条支线,然后你会发现,随着你的技术栈的提升,财务自由是水到渠成的事情;
贫穷的我 拥有10万人民币 成为初级程序员 拥有100万人民币 成为中级程序员 拥有1000万人民币 成为高级程序员 拥有1亿人民币 成为资深程序员 拥有10亿人民币 成为架构师 拥有1000套房 成为首席架构师 财务自由

2、技术栈

栈是计算机中的一种数据结构,线性表的一种,特点是先进后出;常用在函数传参的实现中;

  • 举个例子,你在学习乘法之前,如果没有学习过加法,是不是不好理解,但是如果有了加法的基础,是不是会好理解很多;如图所示,
  • 就是一个乘法转换为加法的例子;
依赖于 依赖于 依赖于 依赖于 乘法 加法 3X2 3+3 3X4 3X2+3X2 3+3+3+3
  • 同样道理,在我们学习某一个知识的时候,一定会有一些知识盲区,这个时候就需要你去互联网上找各种资料了,对于程序员来说,通过各种经验和实践解决问题的能力才是你的 核心竞争力 。有了核心竞争力,我们画的蓝图才能得以实现!
  • 但是我们的知识体系并不是简单的线性结构,它是一个交错复杂的具有强依赖关系的图结构;所以,与其说是技术栈,不如说是技术图;
  • 如图所示,当你接触到一个新的概念,叫三角函数 y = s i n ( x ) y = sin(x) y=sin(x) 的时候,你可能需要以下备用知识作铺垫,都是一些成年人一看就懂的概念,但是设想一下,如果你刚进入一个新的领域(比如 程序领域),扑面而来的技术面前可能你只是一个小婴儿,这个时候就像婴儿学习一样,必须从最基础的加法开始;
三角函数 函数 等式 交换律 结合律 乘法 除法 减法 加法 未知数 三角形 边 长度 单位 点

3、反向激励

  • 时刻激励自己,如果没有动力,那么尝试来看看下面这段话;
  • 如果你不去奋斗,你的代价是什么?
  • 有人会说,那就穷一点呗,但是我过得舒服啊,我穷我快乐;

的确如此

  • 如果你认为教育的成本太高,那你就看看无知的代价;

  • 如果你不去努力奋斗,那你就尝试看看你为贫穷付出的代价,别人能用钱去解决的问题,你将不得不用时间、健康、尊严、甚至生命去解决;

  • 当我们的父母逐渐老去,我们还没有出人头地的时候,你才会发现什么叫无助!大多数人憧憬希望,但是不会为了希望去努力;大多数人讨厌拼命,但是会为了攥在手里的东西去拼命;

  • 所以,为了目标奋斗吧,少年!

三、C++ 入门

1、C++ 是世界上最好的语言

  • 前面说了这么多,接下来才是我要说的正题;
  • C++ 是世界上最好的语言!所以我想要把它推荐给刚步入大学的少年,甚至是想转行学程序的中年朋友们,我想说的是学好C++走遍天下都不怕,那么如何才能让你快速入门 C++ 呢?

答案只有一个,就是 天道酬勤

  • 任何事情都是熟能生巧的,需要不断地练习,反复的尝试;

2、编码能力

  • 我们是程序员,程序员是有另一种物种,我们超出三界之外,不在五行之中,能够实现各种各样千奇百怪的功能,只要你能想到,我就能给你实现出来;
  • 那么如何锻炼我们的编码能力成为了重中之重,推荐一个 HDU Online Judge(杭电在线评测系统),你可以去上面刷水题,上面的水题,如滔滔江水,连绵不绝,又如黄河泛滥,一发不可收拾!至少我当年刷题的时候,进入了一种境界:

水能三日不饮,饭可七日不食,然题不可一日不刷

  • 因为那时候上大学,目的很纯粹,它有个排名系统,每天就盼着排名一点一点往前走,所谓有竞争才有进步;
  • 有时候真的很怀念大学的日子,逃课去机房敲代码刷题,那是我逝去的青春!
  • 做任何事情都要有仪式感,让自己产生激情,才能继续往下走;

3、算法

程 序 = 数 据 结 构 + 算 法 程序 = 数据结构 + 算法 程序=数据结构+算法

  • 很多人觉得算法是一个遥不可及的东西,其实并没有,只要按照好的习惯,遇到不懂就搞懂,逐渐强化自身的知识体系,总有一天算法会像你学习 1 + 1 时那么简单;

杠精:我小时候学 1 + 1 的时候花了一年;
作者:吃我一拳!杠精!

  • 学到的要教人,赚到的要给人,帮助别人成长的同时,自己也在成长,多回复别人提出的提问,那些问题可能是你未知的领域,这时候才是你学习的最佳时机;这就是强者愈强的道理;有使自己变强的法则在,谁都无法超越,相信自己!
  • 所以,如果有新手程序员遇到什么解决不了的问题,可以给这篇文章底下留言,在下必定竭尽所能,倾我所有,知无不言,言无不尽!

4、小试牛刀

1)标准输入输出

HDU 2003 求绝对值

  • 浮点数求绝对值函数 fabs 的应用
#include <iostream>
#include <cmath>
using namespace std;
double R;
int main() {
	while (scanf("%lf", &R) != EOF) {
		printf("%.2lf\n", fabs(R));
	}
	return 0;
}

2)ASCII 基础知识

HDU 2026 首字母变大写

  • ASCII 码的基础应用,大小写字母转换
#include <iostream>
using namespace std;
char str[200];
bool isspace(char c) {
	return c == ' ' || c == '\t';
}
int main() {
	int i;
	while (gets(str)) {
		bool space = true;
		for (i = 0; str[i]; ++i) {
			if (!isspace(str[i])) {
				if (space) {
					space = false;
					if (str[i] >= 'a' && str[i] <= 'z') {
						str[i] = str[i] - 'a' + 'A';
					}
				}
			}else {
				space = true;
			}
		}
		puts(str);
	}
}

3)STL 排序函数 sort 的 应用

HDU 2000 ASCII码排序

  • STL sort 排序接口的简单应用;
#include <iostream>
#include <algorithm>
using namespace std;
char ch[10];
int main() {
	while (scanf("%s", ch) != EOF) {
		sort(ch, ch + 3);
		printf("%c %c %c\n", ch[0], ch[1], ch[2]);
	}
	return 0;
}

4)简单字符串处理

HDU 2081 手机短号

  • 遍历一个字符串的字符并进行输出
#include <iostream>
using namespace std;
char str[10000];
int main() {
	int t, i;
	scanf("%d", &t);
	while (t--) {
		scanf("%s", str);
		printf("6");
		for (i = 6; i < 11; ++i) {
			printf("%c", str[i]);
		}
		puts("");
	}
	return 0;
}

5)简单进制转换

HDU 2031 进制转换

  • 计算机数字进制转换的应用;取模,迭代除进制,逆序输出,注意考虑 负数、0 的情况;
#include <iostream>
#include <cstring>
using namespace std;
int val, R;
int sta[100];
void Print(int v) {
	if (v >= 10 && v <= 16) {
		printf("%c", v - 10 + 'A');
	}
	else {
		printf("%d", v);
	}
}
int main() {
	int i;
	while (scanf("%d %d", &val, &R) != EOF) {
		if (val == 0) {
			puts("0");
			continue;
		}
		else if (val < 0) {
			val = -val;
			printf("-");
		}
		sta[0] = 0;
		while (val) {
			sta[++sta[0]] = val % R;
			val /= R;
		}
		for (i = sta[0]; i > 0; --i) {
			Print(sta[i]);
		}
		puts("");
	}

	return 0;
}

6)利用字符绘图

HDU 2052 Picture

  • 简单的利用字符进行控制台输出;
#include <iostream>
using namespace std;
int main() {
	int n, m;
	int i, j;
	while (scanf("%d %d", &n, &m) != EOF) {
		printf("+");
		for (i = 0; i < n; ++i) printf("-");
		printf("+\n");
		for (i = 0; i < m; ++i) {
			printf("|");
			for (j = 0; j < n; ++j) printf(" ");
			printf("|\n");
		}
		printf("+");
		for (i = 0; i < n; ++i) printf("-");
		printf("+\n");
		puts("");
	}

	return 0;
}
  • 有需要练习的可以去 git hub 上看源码 :
  • 各类水题集锦(HDU2000 ~ HDU2099)
  • 各类算法模板

四、结尾彩蛋

1、巧用位运算

如何用一句话判断这个数是不是2的幂?

	x & (x - 1);

2、结语

  • 没什么好说的 ~
这篇关于程序员的财务自由之路(二)- 有的放矢的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!