之前非常有幸收到 脉脉不得语 的邀请参加 郑州GDG1 举办的 DevFest2 活动,并上台分享了一下自己的拙见,回来之后我将自己演讲的内容整理了一下,并分享给大家,希望对一些人有帮助,关于 郑州GDG 更多的活动内容,大家可以到 GDGZhengzou 查看。另外,欢迎关注我的 GitHub 和 微博 。
我在本次活动中的演讲主题是《程序员练级指北》,主要内容如何从零开始,并逐渐成长为一名合格的程序员,里面的内容是基于自身的经历和见解所书写的,并不一定适合所有人,建议选择性采纳。
为了演讲不那么枯燥乏味,我用了很多口语化的描述,并将程序员分了等级,从零装备的新手到钻石级别套装的大佬,其实各个等级之间并没有严格的分界点,只是大致的划分,大家理解便好。另外本文和现场演讲可能稍有差别,下面开始正文。
Hello,大家好,我是 GcsSloop,今天是我第一次在这么多陌生人面前装逼,啊不,演讲,心里很是忐忑,现在我还能感受到自己的心扑通扑通的跳。
我呢,主要学习 Android,爱好装逼,喜欢钱,目前正在向段子手的方向上越走越远。
非常高兴今天能站在这里向大家分享我自己的观点,因为在坐的的技术牛人太多了,作为一个没什么技术实力的新人,不敢在这里班门弄斧讲技术,要不然正讲着哪位大牛突然站起来说我讲的不对,这不就尴尬了么。
由于本人爱好装逼,自然也研究了一些心得,所以我今天分享一下程序员如何在不同阶段正确的装逼。
第一阶段 - 新手村
作为编程的新手,自然是不能在大佬面前装逼的,否则分分钟被吊打。这一阶段我们要先给自己定一个小目标,什么是小目标呢?例如挣他个一百万?这对于我们来说当然是不现实的,作为编程菜鸟,小目标当然是稍微努力一下就能完成的,例如:看完几个新手教程,时间不要太长,两三天能完成的任务量就够了。当然了,光看还不行的,要发在朋友圈,让大家觉得你是一个非常有上进心的人。
为什么要发在朋友圈呢?装逼是一方面,除此之外,过了两天你就会发现,这两天光顾着打游戏了,新手教程居然忘记看了,这时候去看看朋友圈,再看看上面的赞,心里想如果这要是不弄完以后还如何在朋友面前装逼,自己装的逼跪着也要学完。
这一阶段注意两点:
- 任务周期要短,任务量要小,如果周期太长,例如一个月,到月底发现弄不完了,就会想反正也弄不完了,就这样吧,容易破罐子破摔。
- 要形成周围的监督机制,如果没人看着,反正也没人知道,那就随便学喽,过不了几天自己就放弃了。
如果按照计划执行了第一阶段的任务,那么经过大约一两个月的时间,新手教程基本上就看完了,相当于集齐了一套新手装备,顺利进入下一阶段。
第二阶段 - 初级套装
初级套装虽然攻击和防御力都很弱,但至少能单挑一些野怪了,有了一定的装逼资本,这时候就要在新手村附近刷一些野怪练级。
既然是刷怪升级,自然要选一个怪物比较集中的地方,最好还要有不同等级的怪物,这样方便刷经验,这个地方是哪里呢?个人觉得最适合的地方就是学校OJ题库,不一定要是自己学校的,大部分学校的OJ题库都是开放的,这里面的题目比较多,难度也分了很多等级,是非常适合新手练习的场所。不熟悉OJ系统的建议搜索了解一下。
这一阶段非常容易卡关,经常发现自己有两点不会,就是这也不会,那也不会。
然而作为编程界的新手,我们遇到的大部分问题肯定已经有大神踩过坑了,在99%的情况下,用百度或者Google搜索题目描述就能得到攻略方式,但不要偷懒直接复制,要自己亲自写一遍代码,这样有助于自己了解不同类型题目的模式。
如果你发现了一道题的答案搜索不到,但是自己解决了,那么恭喜你捡到宝了,说明你遇到了一个稀有的或者新增的怪物,赶紧整理一下攻略过程发博客吧,又能装逼了。
这样过了一段时间你就会发现,这些野怪大部分都很弱,只会几种常见的套路而已,除了最基础的题型外,归纳起来就是:堆、栈、树、表、图。
每一类野怪都有特定的攻略方法,常用的有:枚举,遍历,分治,贪婪,动态,线性,暴力打表 以及 抖机灵。
我在大一的时候加入了学校的打野攻略组,就是传说中的ACM,在里面待了大约有一年的时间,虽然没拿过大奖项,但好在通过刷题把自己的基础巩固了。
这一阶段反映自己进步的最好标准就是 做题量 和 排行榜,我最高在校内排到前5,两年没有更新的情况下目前依旧在前50之内,不要问我哪个学校的,是我学校的,看一下OJ排行榜自然能认出我,我在排行榜上也叫GcsSloop。
装逼完毕,进入下一阶段。
第三阶段 - 青铜套装
刷野怪时间长了就会发现其实也挺没意思的,不过好在能够练装备,把数据结构知识和一些常见的算法弄明白,熟悉敌人的攻击套路,这样经过一段时间后,装备基本也升级到青铜了,这时候就应该尝试去挑战一下区域小boss了。
什么是挑战区域小boss呢,就是尝试制作一个完整的项目并发布出去,有人使用即可。
挑战小boss可以组团或者单挑,个人虽然喜欢组团,但无奈我们学校这个服务器太弱了,基本找不到合适的队友,尝试了几次组队最终都以失败而告终,无奈只能去单挑。
单挑boss要量力而行,不能找太强的boss,根据我自己的经验,单挑太强的boss会死的很难看,自己曾经有无数个项目胎死腹中或者半路夭折。
选择一个比较弱的boss,例如:发布一个简单的 app 到应用市场,获取到一定的下载量,或者写一个开源库,获得一点 star。
这一阶段锻炼的是项目构建能力,能够完整的构建一个项目并发布出去,有人使用就算成功了。
这样既能带来成就感,又能装逼,发完之后记得告诉身边的人自己有内容发布了,再次装一波。
第四阶段 - 白银套装
单挑完一些区域小boss后,将套装升级为白银,有了一定的装逼资本,此时发现总在朋友圈装逼成就感太差了,这时候可以去论坛、贴吧、社区、微博等地方好好的装一把,让那些装备还没有升级起来的小白看看这套锃亮的白银套装是多么耀眼,不过仍要注意不能太过火,在出来帮助新手解决问题的时候顺便展示一下白银套装的威力就行了,装的太狠容易被大佬发现抓起来吊打,这不就尴尬了么。
顺便说一下,如果从培训机构出来的,正常应该是白银初级,自身有基础加上比较努力可能会达到白银中级,能拿到白银套装说明已经达到了职业程序员最基本的标准。
很多人打到白银就开始迷茫了,去挑战小boss吧太没成就感,那些看起来就很肥美的中级和高级boss基本已经被大公司瓜分了,自己根本无从插手。所以这时候就要考虑加入公司的问题了。
那些比较好的公司,例如:网易、阿里、腾讯 等肯定有一堆人挤破头都想进,作为一个刚刚拿到白银套装的人想挤进去不能说没有机会,但肯定很难。但作为拥有白银套装的人,想加入一些小公司倒还算比较容易。
个人建议初期有条件优先选择比较大的公司,因为这些公司资源多,有成熟的体系,可以帮助我们快速的在某一方向上获得长足的发展。
后期则优先选择发展型的小公司,如果是从大公司跳向一个小公司,一般都会担任不错的职位,这可以帮助我们锻炼技术之外的能力,另外一个原因是随着公司成长可以分得一些红利。
加入公司自然要考虑自身和公司的关系。
个人觉得最核心的一点就是不要依附于公司,也不要抱有敌意,最好的办法就是和公司成为利益共同体,在自己为公司创造价值的同时利用公司强大的资源提升自己的能力。
如果太过于依附公司,认为自己努力工作一定能得到相应回报的,根据经济学的假设,人都是自私而理性的,老板亦是如此,所以这类人大部分情况下都不会得到预期的结果。
对公司抱有敌意,认为自己就是打工赚钱的,想偷懒干最少的活,拿最多的钱,因为在偷懒的同时错失了很多发展机会,所以这类人大部分会随着技术的升级而被淘汰掉。
如何与公司成为利益共同体呢?首先要明确自己的目标,自己加入公司是为了提升自己的能力,而不仅仅是来打工赚钱的,想要实现这一目标则是想办法干更多的活,这样老板肯定乐意,而我们通过干更多的活来接触更多的信息,并且把接触到的信息沉淀成为自己的经验积累,对自身发展也是有益的。
当然了,我们也不是傻子,当我们自身产生的价值远远超过公司给我们的薪资并且公司资源已经无法支撑我们继续提升的时候,就该抛弃这家公司跳槽了,这一次跳槽势必能进入一个更好的公司深造,可以利用更庞大的资源来辅助我们发展,接触到更多的信息。在信息时代,信息就是金钱,将信息沉淀成为个人经验并不能第一时间转化为金钱,但是总能在未来的某一时刻爆发出惊人的力量。
第五阶段 - 黄金套装
在白银阶段,就具备了职业程序员的基本素养,但是离出任CTO,迎娶白富美,走上人生巅峰还差的很远呢,想要实现这些目标,首先要拿到黄金套装。
一般来说技术发现有两个方向可走:深度 和 广度。
我自己使用的是树形型结构,大树的树,一到两门追求深度,做树木主干,其余的最求广度,做树木枝叶。
有些人也称为T型知识结构,不过我觉得树形更佳贴切,因为我的所有周边技能都是围绕主干展开的,并且是可生长(拓展)的。
我的主方向 Android,自学了 C、Java、Python、Web、Photoshop 等相关知识,除了主方向Android之外,其他方向作为辅助方向,仅仅了解了最基础的内容,也就是能够靠着搜索引擎写一些简单小程序的程度。
树型知识架构有很多好处:
- 不被单一语言束缚,在实际场景中可以选择最合适的语言。
- 可以跨领域突破,我在研究 Android 2D 绘图逻辑的时候就借鉴了很多 PS 的知识。
- 预留发展空间大,假设某一天,Android市场饱和了或者前景变差了,我可以快速的从树枝中选择一支比较擅长的发展成为主干,而不用每次都从零开始。
其实我们大部分人都是俗人,是不是黄金套装都无所谓,能赚钱才行,很多人来做技术也是为了赚钱,所以接下来我说的是如何想办法用最小的代价产生最大的价值。想要赚钱首先要明白最基本的商业逻辑,如果我们通过正常的方式从别人那里赚到钱了,说明我们为别人提供了价值,这样别人才愿意付费给我们。
所以我们要想办法用最小的代价为别人提供最大的价值,我写代码之前会多思考,没错,就是学生时代老师经常说的多思考。不过那时候没有人告诉我们该思考什么,因此我自己摸索出来了一套东西。
- 思考核心目标,我们是为了某一件事情而写程序,并不是因为写程序了所以要完成这件事情。核心目标是完成这件事情,而不是写程序。
- 思考是否可以偷懒,我是否可以用更简单的方式完成目标,例如不写代码,少写代码。
- 如果写代码了,是否可以产生附加价值,例如我写这一段代码是否可以抽取成为一个开源库,是否可以将其中的设计思想整理成文共享出去。
- 如何产生更大的价值,我的开源库或者文章如何才能服务更多人,让更多人了解到我的东西。因为只有服务更多人,才能产生更大的价值,我们也才可能从中拿走一部分利润。
经历过这几步的思考,基本上就已经能将所写的每一段代码的价值潜力都发掘出来,进而用最小的力气服务最多的人。当然了,为了别人服务,只是产生了价值,在通常情况下,这部分价值是无法直接提现的,也就是说仅仅产生了价值但自身并没有收益。
不过非常值得庆幸的是,今年很有可能成为内容付费元年,今年已经出来了很多内容变现工具,我知道的就有,微博长文打赏,简书打赏,知乎live,diycode原创打赏 和 掘金原创打赏。
另外,最重要的是,随着社会的快速发展,很多人有钱了,开始愿意为自己喜欢的事物打赏,这是一切的基础。所以看到这里你就不想给我打赏一下?让我有动力写出更好的文章!
第六阶段 - 钻石套装
能拿到钻石套装的人在全球范围内都是屈指可数的,这一类人通常是某一领域的开拓者,就是我们所说的 XXX之父。这些开拓者已经将自己的影响力渗透进了社会的各行各业,说他们推动了社会的进步也是可以的,我有生之年不说集齐套装,仅仅能拿一件钻石武器便足以令我心满意足了。
结语
前面啰嗦了这么多,最后告诉大家一个小秘密,如果你想要研究一个人发展的根本,不要直接去问他,因为别人很少会告诉你自己赖以生存的核心技能,他们只会告诉你看起来很光鲜的皮毛,就是所谓的心灵鸡汤,这些听起来很励志,但落实在自己身上通常没什么用,大多数情况下只会给你带来两三天的激情而已。
正确的方法是观察他在做什么事情,以及分析他做这些事情的背后逻辑。如果你能把这些逻辑想清楚了,就把别人真正的核心技能偷过来了。之后根据自身情况一步一步的学着做就行了。
所以说,你们如果你们想了解我在做什么,为什么不考虑关注一下我的 新浪微博 呢?关注一下又不会吃亏!