
996,发际线,格子衬衫......
而豆苗颠覆了我对程序员的所有认知。
她是80后女生,豆苗Nicky,全球顶尖IT企业思科的女程序员,“视觉思维”培训师,斜杠宝妈。
在短短半年内,她打造拥有300个忠实种子用户的成长社群。
有人说,要么在平淡生活中修炼,要么放手一搏去寻找热爱,人总要做出选择。
而我在豆苗身上看到了,主业、副业,工作、家庭,多线程并行的饱满状态。
如何凭一己之力,打造个人品牌,扩大影响力?豆苗的故事分享给你:
我至今记得第一次和豆苗见面的场景
她身材小小,带着眼镜,一头利落的短发,看上去文文静静的。被邀请上台做分享,为大家介绍什么是“视觉思维”。
她微笑着,启发我们说:
“当我说‘苹果’这个词的时候,你的脑海中第一时间会联想到什么?”
“苹果手机”、“一只苹果”、“牛顿被苹果砸中”、“早上喝了苹果汁”......我们像课堂上的小朋友一样,点燃了想象,纷纷作答。
“是的是的,当我们自然思考时,思考的主要形式是图片和联想,没有人会马上联想到‘苹果’这两个汉字,对吧?”
在「007不写就出局」的这次线下活动中,豆苗用一个简单的互动,让我们轻松理解了“视觉思维”的基本原理。也让我们理解了,其实视觉思维与生俱来,对每一个人来说,是一种符合大脑思考原理的思维方式。
我们平时接触到的思维导图、鱼骨图、手账等等,都是视觉思维的呈现方式。每个人都可以借用视觉思维工具来辅助思考,既有趣又高效的帮我们理清问题。
在短短几分钟的分享中,我感受到从她口中蹦出来的每一个字,满带着热爱。
能化繁而简说明白一个概念,又用寥寥数语解开人们心中顾虑的人,思辨能力和学习能力往往优于常人。
那时,我并不知道她的集女程序员、培训师、宝妈等多种角色,从这次活动后,我开始慢慢了解这个宝藏girl。
她告诉我,在一次公司分享中接触到视觉思维。这是她第一次用图形表达思维的方式,一见钟情。她心想自己是个“手残党”根本不会画画,难以驾驭视觉思维中的图形,进一步了解才发现,事实并非如此。
她原来的认知被打破,图像的价值在于表达想法,而非艺术创作。
手残党也可以“把问题画明白”。
豆苗找到了工作之余的热爱,她致力于视觉思维培训,帮助更多人结构化的思考。
这并不是一个手残党逆袭,成为绘画大师的故事,而是一个终身成长者,斜杠打造个人品牌的进阶之路。
豆苗狠下功夫,不断深耕,拿到了国际职业培训师、思维导图法高阶讲师、思维导图世界理事会专业测评最高级等专业资质。
同时保持日更练习460多天,组织多场线上线下分享。越来越多朋友被她的作品吸引,她终于下定决心,在2019年上线系统化的课程。
但却状况连连,接连踩了3个大坑:
遇到问题、解决问题 。
她说幸好2020年遇到了贵人覃杰,在他的点播下,豆苗入驻了“不出局”旗下的“圈子”平台,知识付费之路越走越顺。
体验营、训练营、高阶课,稳稳立住了“苗绘思维”在不出局圈子平台中的地位。
从这份小而美的副业中,豆苗获得的不仅仅是分享的快乐,更赢得了个人影响力。
凭一己之力,在短短6个月中,带领300多位学员,践行视觉思维。
豆苗的圈子也因此当之无愧成为007不出局2020年度的“最具影响力圈子”。
女程序员如何斜杠打造出个人品牌?豆苗在和我的直播访谈中,分享了3条“成事心法”:
提供价值 、 趁早开始 、 找到组织
我们一条条来解读:
豆苗说:“我一直以来我坚定的相信,我一定要给别人提供价值。或者换言之,一定要有利他思维“。在绘制思维导图、视觉笔记等视觉作品时,指导原则也是利他。
因为只有当一个人懂得了利他,才能更好的去沟通,更好的去传播。
而比提供价值更难的,是持续不断的提供价值。
面对能力快速提升的学员,这就要求我们去持续学习,保持输出,压力也是动力。
正如「007不写就出局」的践行理念:用输出倒逼输入,让成长有迹可循。
《礼记·学记》中说,所谓教学相长,原因在于:“学然后知不足,教然后知困。知不足,然后能自反也;知困,然后能自强也。”
学过方知不足,教过才知盲点。
学习是一种成长,教学是一种修行。做一个终身学习者。用利他心态,持续为他人提供价值。
豆苗坦言,拖拖拉拉没有早点开始,是自己踩过的一个大坑,现在想来追悔莫及,希望分享自己的故事,让更多踌躇不前的伙伴们早早起步。
从2018年正式系统化学习视觉思维开始,豆苗不间断地联系460多天,不仅学得快,而且形成自己的风格。身边的朋友感兴趣跟着她学,公益课开了一轮又一轮,但始终没有迈出付费课程、打造品牌这一步。
原因很简单,和大部分迟迟没有起步的人一样,她希望什么都完美了再去推广、再去布局。
然而,我们总会忽视这个事实: 个人品牌并非一蹴而就,好产品不是做出来的,是迭代出来的。
“要不是去年遇到007创始人覃杰,可能我现在还没正式开始。”豆苗边说边笑,“我觉得开始的有点晚了啊,不然我现在说不定已经很厉害了呢!”
也正是因为这样,后来每当有人来咨询她,“我定位不清晰,个人品牌应该什么时候开始啊?“
豆苗会把这句话一遍遍地告诉他们: 定位不是你现在的位置,而是你想要去的方向。
可能想要去的方向,一段时间之后也会变,但是没关系,你要有这样的思维方式--
两条腿走路,一边积累,一边发声。
个人品牌是什么?
是影响力,是信任感。
唯让别人听到你、看到你,你服务才不会沦为自嗨的把戏,才有可能成为你独特的品牌。
“你一定要找到一个信任的平台,认可的导师,跟着他系统地学习。”豆苗特地在“一定”和“系统”两个词上加重了语气。
几乎所有的创造源于模仿。
在自我成长的道路上,你即使学习能力再强,也不可能完全靠自我摸索,把所有东西全部学光。
在思维导图学习中,豆苗拜师学艺,师从华人思维导图第一人孙易新老师。
在个人品牌学习中,追随「007不写就出局」创始人覃杰。她打开了内心卡点,迈出了系统打造品牌的第一步。
聊起覃杰和品牌营,一向理性淡定的程序员,整个人都兴奋起来,她说,“2020年,对我来说,最幸运的一件事,就是遇到了覃杰,参加了他的“007品牌孵化营”学习。”
“为什么会怎么信任他呢?”我忍不住问。
“首先覃杰是拿到结果的人,他把一个社群从7个人做到17,000多人,这本身很有说服力。而且,我私底下跟覃杰见过面。他的想法,他的为人,还有他的价值观,我特别特别认同,是我愿意去追随的。”
豆苗口中的价值观,其中一条“想法--行动--迭代”,被007er们奉为“ 成事 心法”,成就了诸多品牌孵化营的学员。
产品不是想出来的,丢到市场中,去拿反馈。即便是如今形成强大生态闭环的微信,在开发之初也常常忙于修复bug。
这就是豆苗所说的,“找到组织”意义:
系统化学习,抱团赋能,让你的想法落地。
“这也像大家跟我学习视觉思维一样,因为我走过的弯路,我踩过坑都可以帮你们规避掉”,豆苗又露出她独有的淡定微笑,像极了学生时代,老师谆谆教诲的样子。
念念不忘,必有回响。
豆苗从小的梦想是做一名老师,如今,兜兜转转找到了工作以外的热爱,也完成了当老师是梦想。
写在最后
在这个充满不确定性的时代,我们总在寻找确定性。而事实上,当下的确定性,放到时间轴上,都是暂时的。
张爱玲说,“出名要趁早”。其实还有后半句,“个人即使等得及,时代是仓促。”我们无法预测时代变化,也无法预测下一次黑天鹅事件何时发生。
无论在哪个时代,抓住时代红利、顺势而为的人,总能快人一步,笑对变化。
作为普通人,我们能做的,是多一点“说干就干”的孤勇,少一点“我再等等”的踌躇。
陈春花教授说,“时间线越来越短,每个人都要不断适应。”
如何适应?唯有成长。
如何成长?唯有践行。
在竞争中脱颖而出的方法,不是学习一门又一门课程,而是学一门用一门。
007品牌孵化营,陪你寻找1000个铁杆粉丝,打造属于自己的品牌。任它在时间长河中不断被锤炼和升华。
在不确定的时代,建立确定的影响力。
更重要的是,无论你是打工人还是创业者,拥有品牌口碑的人, 从来 不会输。
#include <iostream.h>#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
//#include "Deque.h"
//#include "error.h"
#define ISLAND_DIAMETER 15 /* 小岛的直径 */
#define LAKE_BOUNDARY_X 50 /* 小岛到湖边的距离,在x轴上 */
#define LAKE_BOUNDARY_Y 50 /* 小岛到湖边的距离,在y轴上 */
#define INFINITY 10000 /* 可以跳的步数的最大值 */
typedef unsigned int Vertex
typedef double Distance
typedef struct GraphNodeRecord{
int X /* x轴坐标 */
int Y /* y轴坐标 */
unsigned int Step /*跳至该点的步数 */
Vertex Path /*记录上一个点 */
} GraphNode
typedef GraphNode *Graph
Graph GraphNew(int NodeNum)
void GraphDelete(Graph G)
/* 判断007是否能从起始处跳至该点(x, y) */
int CheckForStart(int x, int y, Distance d)
/* 判断007是否能从该点跳至河岸 */
int CheckForEnd(int x, int y, Distance d)
/* 判断007是否能从点i跳至点j */
int CheckForConnect(Graph g, Vertex i, Vertex j, Distance d)
typedef unsigned int ElemType /* 在本程序中ElemType指定为int */
/* 链表形式 */
typedef struct NodeRecord{
ElemType Element
struct NodeRecord *Next/* 指向下一个node */
} *Node
typedef struct DequeRecord{
Node Front, Rear /* 分别指向Deque的前后两个点 */
} *Deque
Deque DequeNew()
void DequeDelete(Deque D)
void DequeClear(Deque D)
int IsEmpty(Deque D)
void Push(ElemType X, Deque D)
ElemType Pop(Deque D)
void Inject(ElemType X, Deque D)
#define CHECK(X) if(NULL == (X))Error("Out of space!!!")
void Error(const char *msg)
void Warning(const char *msg)
/******创建新的Graph******/
Graph GraphNew(int NodeNum)
{
Graph G
int i
if(NodeNum <= 0)return NULL
G =(GraphNodeRecord *) malloc(NodeNum * sizeof(GraphNode)) /* 分配空间 */
CHECK(G)
for(i = 0i <NodeNumi++) /* 初始化 */
{
G[i].X = 0
G[i].Y = 0
G[i].Step = INFINITY
G[i].Path = 0
}
return G
}
/******删除一个Graph)******/
void GraphDelete(Graph G)
{
if(G)free(G)
}
/*******判断007是否能从起始处跳至该点(x, y),步长是d******/
int CheckForStart(int x, int y, Distance d)
{
double t
t = (ISLAND_DIAMETER + (d * 2.0))
return (x*x + y*y) <= t*t/4.0
/* x^2 + y^2 <= (ISLAND_DIAMETER/2.0 + d)^2 */
}
/*******判断007是否能从该点跳至河岸,步长是d******/
int CheckForEnd(int x, int y, Distance d)
{
if(x <0)x = -x /* 取x的绝对值 */
if(y <0)y = -y /* 取y的绝对值 */
return (d >= LAKE_BOUNDARY_X - x) /* 由于湖是个正方形,只需检查这两个距离*/
|| (d >= LAKE_BOUNDARY_Y - y)
}
/*******判断007是否能从点i跳至点j,步长是d******/
int CheckForConnect(Graph g, Vertex i, Vertex j, Distance d)
{
int x, y
x = g[i].X - g[j].X
y = g[i].Y - g[j].Y
return x*x + y*y <= d*d
}
/******创建新的Deque******/
Deque DequeNew()
{
Deque D
D =(DequeRecord *) malloc(sizeof(struct DequeRecord))
CHECK(D)
D->Front = D->Rear =(NodeRecord *) malloc(sizeof(struct NodeRecord))/* 空的头 */
CHECK(D->Front)
D->Front->Element = 0 /* 初始化 */
D->Rear->Next = NULL
return D
}
/******删除Deque******/
void DequeDelete(Deque D)
{
if(D)
{
while(D->Front)
{
D->Rear = D->Front->Next
free(D->Front)
D->Front = D->Rear
}
free(D)
}
}
/******DequeClear删除所有的节点除了头节点******/
void DequeClear(Deque D)
{
if(D)
{
while(D->Front->Next) /* 删除第一个节点 */
{
D->Rear = D->Front->Next->Next
free(D->Front->Next)
D->Front->Next = D->Rear
}
D->Rear = D->Front
}
}
/******判断Deque是否为空******/
int IsEmpty(Deque D)
{
return D->Front == D->Rear
}
/******将X元素压占到D中******/
void Push(ElemType X, Deque D)
{
Node NewNode
NewNode =(NodeRecord *) malloc(sizeof(struct NodeRecord)) /* 建立新的节点 */
CHECK(NewNode)
NewNode->Element = X
NewNode->Next = D->Front->Next
if(D->Front == D->Rear) /* 如果D为空 */
D->Rear = NewNode
D->Front->Next = NewNode/* 压栈 */
}
/******将第一个元素出栈******/
ElemType Pop(Deque D)
{
Node Temp
ElemType Item
if(D->Front == D->Rear)
{
Error("Deque is empty")
return 0
}
else
{
Temp = D->Front->Next/* 得到第一个元素 */
D->Front->Next = Temp->Next /* 重置第一个元素 */
if(Temp == D->Rear) /* 如果只有一个元素 */
D->Rear = D->Front/* 将D置空 */
Item = Temp->Element
free(Temp)
return Item
}
}
/******插入元素X至D末尾******/
void Inject(ElemType X, Deque D)
{
Node NewNode
NewNode =(NodeRecord *) malloc(sizeof(struct NodeRecord)) /* 创建新节点 */
CHECK(NewNode)
NewNode->Element = X
NewNode->Next = NULL
D->Rear->Next = NewNode
D->Rear = NewNode
}
/******打印错误信息,并退出程序******/
void Error(const char *msg)
{
if(NULL != msg)
fprintf(stderr,"%s\n",msg)
exit(-1)
}
/******打印警告信息,但并不退出程序******/
void Warning(const char *msg)
{
if(NULL != msg)
fprintf(stderr,"%s\n",msg)
}
/******读入一个case返回一个Graph,*Bank 记录最短到达河岸的路径******/
Graph read_case(FILE *InFile, int num, Vertex* Bank, Deque D)
{
Graph G = NULL
Distance JamesJump
Vertex V
int x, y
int i, Times
*Bank = 0
fscanf(InFile, "%lf", &JamesJump)
if(CheckForEnd(0, 0, JamesJump + ISLAND_DIAMETER/2.0))
{
for(i = 0i <(num <<1)i++) /*一步便跳出的情况 */
fscanf(InFile, "%d", &x)
*Bank = 1
}
else if(num >0) /* 007必须经过鳄鱼头上的情况 */
{
num += 2
G = GraphNew(num)
for(i = 2i <numi++)/* 第三个node开始是鳄鱼 */
{
fscanf(InFile, "%d", &x)
fscanf(InFile, "%d", &y)
G[i].X = x
G[i].Y = y
if(CheckForStart(x, y, JamesJump)) /*判断是否能跳上该点*/
{
G[i].Path = 1 /*007可以跳到 */
G[i].Step = 1 /* 一步 */
if(CheckForEnd(x, y, JamesJump)) /* 判断该点是否能跳出 */
{
*Bank = i /* 007可以跳出 */
Times = (num - i - 1) <<1
for(i = 0i <Timesi++) /* 不必检验其他鳄鱼 */
fscanf(InFile, "%d", &y)
DequeClear(D)
break
}
else
Inject(i, D) /* 插入该点,并开始下一个检测 */
}
}
while(!IsEmpty(D))/*只经过一个鳄鱼无法跳出,必须还要跳到其它鳄鱼的情况 */
{
V = Pop(D)
for(i = 2i <numi++)/* 从这只鳄鱼跳到其他各个鳄鱼 */
{
if((G[i].Step >G[V].Step + 1)
&&CheckForConnect(G, V, i, JamesJump))
{
G[i].Path = V
G[i].Step = G[V].Step + 1
if((G[i].Step <G[*Bank].Step)
&&CheckForEnd(G[i].X, G[i].Y, JamesJump))
*Bank = i
else
Inject(i, D)
}
}
}
}
return G
}
/******写出结果,即最短路径******/
void write_result(FILE *OutFile, Vertex Bank, Graph G, Deque D)
{
unsigned int Times, i
Vertex V
switch(Bank){
case 0: /* 007无法跳出 */
fprintf(OutFile, "%d\n", -1)
break
case 1: /* 007可以直接跳出 */
fprintf(OutFile, "%d\n", 1)
break
default:
Times = G[Bank].Step + 1/* 跳的步数 */
while(Bank != 1) /* 跟踪路径 */
{
Push(Bank, D)
Bank = G[Bank].Path
}
fprintf(OutFile, "%d\n", Times)/* 输出 */
for(i = 1i <Timesi++)
{
V = Pop(D)
fprintf(OutFile, "%d ", G[V].X)
fprintf(OutFile, "%d\n", G[V].Y)
}
}
}
int main(int argc, char *argv[])
{
FILE *in, *out
Deque D
int VertexNum
Graph G = NULL
Vertex Bank = 0
in = fopen("input.txt", "r")
if(NULL == in)
{
fprintf(stderr, "Can not open input.txt")
exit(-1)
}
out = fopen("output.txt", "w")
if(NULL == out)
{
fprintf(stderr, "Can not open output.txt")
fclose(in)
exit(-1)
}
D = DequeNew()
while((EOF != fscanf(in, "%d", &VertexNum)) &&(0 <= VertexNum))
{
G = read_case(in, VertexNum, &Bank, D) /* 读文件直到结尾 */
write_result(out, Bank, G, D)
if(G)
GraphDelete(G)
}
fclose(in)
fclose(out)
DequeDelete(D)
return 0
}
这是你那个网址里的代码调试通过了,也得到了如例子里的结果。你自己试试吧。
要说明的是请把input.txt和程序放在里一文件夹下再运行程序
'\007'在C中是转义字符,007代表的是八进制,百对应ASCII码表可知含义是响铃。
字符常量中使用单引号和反斜杠以及字符常量中使用双引号和反斜杠时,都必须使用转义字符表度示,即在这些字符前加上反斜杠。
转义字符不属于控制字符;控制字符也不属于转义字符。如果控制字符的定义是非图形的字符,或者对输出设备(打印机、文本终端)有特殊意义的字符,那么针对这些设备的转义字符也是控制字符。但是程序设计用的转义字符是图形字符,因此它们不是控制字符。相反地,大多数ASCII控制字符单独都具有控制功能,因此它们不是转义字符。
扩展资料:
字符型常量
C语言中字符型常量所表示的值是int型所能包含的值。我们可以用ASCII表达式来表示一个字符型常量,或者用单引号内加反斜杠表示转义字符。
'A', '\x2f', '\013'
其中:\x表示后面的字符是十六进制数,\0表示后面的字符是八进制数。例如十进制的17用十六进制表示就是
‘\x11’,用八进制表示就是‘\021’
上面我们见到的\x,\n,\a等等都是叫转义字符,它告诉编译器需要用特殊的方式进行处理。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)