4年独立开发,我们能从中学到什么?

我之前做独立开发的朋友小 J,迎来了他的独立开发四周年。四年间做了比较多的尝试,包括独立开发模式的探索,还有近两年火热的vibe coding编程。趁着周末的功夫跟他做了一次深度的交流,获得了一些比较多的启发,记录在此,希望也能对其他人有所帮助。

这里采用对话体来展现整个交流的过程,同时为了让大家能够看得更清晰,我也人为的补充了一些信息,便于大家能够了解必要的背景信息。

好快呀,毕业都已经10多年了,独立开发也已经搞了四年了,还记得独立开发是怎么开始的吗?

确实挺令人感慨的,这可能跟我本身的性格有关,我自己追求的就是一个无拘无束,不喜欢被其他人束缚。

记得最开始的时候,我也是像其他人一样参加工作,在百度呆了三年,终于还是压不住追求自由的性子,开始辞掉工作,一人一车环游了整个中国。

后来开车到了成都,觉得挺喜欢那里就在当地找了份工作,一呆又是三年。也是三年的诅咒,又开始按捺不住自由的心,辞了工作回到了老家。

那段时间我看了很多书,包括李笑来的《七年就是一辈子》等等,想着人生何其浪漫。那个时候对自我的使命感越来越强烈,非常渴望能够按照自己的想法去做一些东西。

说干就干,于是也没有再去找工作的想法,凭藉自己多年的开发经验,开始去做一些手机上的应用软件。

我理解的独立开发,跟在公司工作是完全不一样的模式,最开始的阶段应该会很难转变的吧?

是啊,模式是完全不一样的。

不过我也给自己预留了过渡的时间,一开始更多的是自己慢慢地摸索练习。

说起这个还挺有意思的,独立开发界有三件套的说法,记账、日历、待办,不知道你听说过没。就是大家都会用的软件,而且实现起来需求也比较明确那个阶段,我就是靠着一个待办软件去提升自己的技能。

因为那个时间我也在学习吉他,也是一头扎进去忘乎所以,就靠着这些自己的需求去不断地完善待办软件。

但是结果其实是预料之中的,毕竟是名不虚传的新手三件套,市场足够饱和,再加上开发门槛不高,最终也只是我自己在使用。

我开始迎来转机,是在第二年。那时候想往游戏的方向转变,毕竟自己也挺喜欢游戏的(谁还没有自己写一个贪吃蛇的梦想呢,哈哈)。

说干就干,经过了一轮数据分析,对市面上的游戏品类也有了一个大体的了解,毕竟一个人的经历有限,所以最终铆定了休闲游戏的方向。

那个时候还是很有激情的,想着既然是要做就要做到最好,做到大家要玩某一个类型的游戏的时候,一想到的就是我的这个游戏。那个时候经常晚上越想越兴奋,兴奋到睡不着觉。

最终游戏成功上线了,也加了广告,自掏腰包拿出了点钱去买流量。后来慢慢地有了稳定的用户,也随之开始有稳定的收入(虽然收入不多,嘿嘿)。

但是现在回过头来想想,最开始的时光却是最初有这个想法,并且不断在脑海中打磨的过程。到最后上线的时候,虽然有了一些收入,但是已经有点精疲力尽了(虽然开发周期只有短短的半年)。

精疲力尽的原因,一方面是独立开发本身承担了大量的琐事,这些琐事在不断地消耗着我们的斗志;还有另外一方面就是看着好端端的代码变得越来越烂,自己却无能为力,心里很累。

理解。开发周期只有半年,游戏整体投入不是很大,有没有考虑过横向复制呢?比如一天收入100,如果10个那就是1000了。

这个问题问到点子上了,我当时也是这么想的,所以后面又陆续做了一些休闲风格的游戏。

但是之前做第一款游戏时的那种兴奋感已经荡然无存,曾经支撑我日日夜夜前进的那些动力不见了。发现这件事后,我有一种虚无感,感觉好些事情都没了方向,也没了意义,之后做的游戏都只是出了 demo 版本,并没有花太多的精力去投入了。

我觉得第一款游戏虽然有稳定的收入,但是收入不算多,后面的游戏却没有再继续认真做了。其中很大的一个因素就是我的初衷并不是钱,而是完成一个作品的成就感,这种成就感一旦丧失,即使前面还有很多钱在等待着我,我也没有那么大的干劲了。

还有一个我不能回避的原因,可能就是执行力了。每当我的游戏没有进展的时候,我就开始去弹吉他。其他又弹得烦了没有进展了,我又开始去练习画画。没办法把一件事情严格执行下去,导致我最后对自己都有一点点失望。

那你后悔选择这条路吗?

那肯定是不后悔的,我已经给自己洗脑过几千遍几万遍了,哈哈哈哈。

其实在这个过程中快乐也是真的快乐,还是一段很美好很充实的回忆,虽然最后能留下什么我不确定。独立开发这个选择跟我的个人的性格是强相关的,即使重新选择一次也还是会选择这条路。

当然,我也从这个过程中学到了很多,比如之前我对自己的项目是没有做项目管理的,要做多久、做到什么程度都是没有提前考虑好的,就是由着自己的心情,想到哪儿做到哪儿,就可能一个项目零零碎碎的拖个半年一年,但是可能一直都没有大的进展。后面我要给自己设立更明确的目标。

另外我最近不是找了工作嘛,虽然最后还是离开了公司选择继续独立开发这条路,但是感觉这次在工作中感悟到了更多的东西,我觉得我离成功又更近了一步。

后面有什么打算吗?

最近又开始独立开发了,这次尝试的方向是偏应用类的,给自己一些时间,也希望能够通过工具帮助大家真正解决生活中的一些实际问题吧。

另外最近也在主动拥抱一些比较新鲜的技术,比如 vibe coding,我在尝试借助他来生成新应用的MVP,感觉效率确实提升了一大截。

vibe coding 确实挺火的,你感觉他能替代传统的编程方式吗?

我感觉有点玄乎,毕竟我现在也只是拿它来写MVP。不得不承认他写的界面确实比较大气漂亮,但是总感觉代码有种过度设计。

vibe coding 在某些方面能够提高效率,但是长远来看,还是离不开个人的编码能力。我就发现特别是有时候在处理3D问题时,他就死活都搞不定,我猜测是因为他缺乏空间想象能力,更别说有的3D操作是在运行时的。

嗯嗯。跟独立开发相关联的还有一个概念叫做一人企业,你是怎么理解一人企业的呢?

其实一人企业更多的是讲一种商业模式,特别是在现在的个人媒体时代。每个人都是一个个体,可以在平台上创造内容,进而建立属于自己的IP,然后基于 IP去做一些流量变现。

而且一人企业强调的不是扩张,他也不可能扩张,因为从规模上讲,他虽然不是严格的一个人,但是毕竟不像传统企业的发展模式。

我挺认同一人企业的思想的,我感觉独立开发更像是一人企业的某种具体的表现,但是我感觉自己之前独立开发的方向也是有点偏离的,我只想到了用技术去变现,其实并没有很好的经营自己。

后面的话也是打算多输出一些内容,能让大家看到一个更加真实的自己。

对想要加入独立开发的同学有什么建议吗?

就是首先自己要想清楚了,并且对自己做的决定负责。

最后成功还是失败,很大一部分是要靠运气的,感觉不对劲了,学会及时止损。

另外,等我成功了,再补充一些成功秘诀,哈哈哈。

聊天怎么聊?

这个问题放在有的人眼里可能就是一个玩笑,聊天就聊呗,还能怎么聊。但是放在我这个i人这里就显得非常的有意义。

我之前见过有这样的人,就是跟陌生人也能夸夸其谈,而且妙语连珠,虽然我很是羡慕,但也知道自己很难做到。

我小时候是非常内向的一个人,就是那种见了亲戚也不怎么打招呼的小朋友,内向是那时候大家对我的一致评价。其实也真不是家教的问题,就是单纯的内心抗拒打招呼,也不想主动跟别人说话,总是呆在自己的内心世界里。

这份内向可能是从上一代遗传下来的。我前些时候跟我妈聊天,她羡慕的说二姨虽然不识字,但是是怎么靠着问别人,自己一个人搭乘飞机从山东到重庆去找他的儿子。她说如果是换作她要跟别人说话,她得愁死。

那个时候我才知道,原来他之前能说会道,只是因为跟别人比较熟,其实她自己也很抗拒跟陌生人聊天。也是那个时候我才知道,我不喜欢跟别人聊天的性格是从哪里来的。

但是在后面漫长的工作生涯中,我知道有些事不想做,但是还是要去做的,我也渐渐地尝试去融入大家的聊天环境。

我试图通过理解聊天的意义来帮我找到自己在聊天中的位置。从结果来看,这种方法是行得通的,所以我尝试着把这个思路再捋下来做进一步的巩固。

作用一:增进情感,建立与他人的连接

这是我能想到的最直接的作用。

之前有一个说法,我们到了一个新的环境,怎么能够快速融入,一个方法就是找别人一起吃饭。这是因为吃饭的过程中,大家心情比较放松,在这样的氛围下聊天更能激发大家之间的感情链接。

但是这里有一个问题,就是我们需要有足够的话题,否则就会变得比较尴尬。

好消息是有一些固定的开场话题可用,这个其实也是我在《如何完整的准备一场面试》那篇文章里提到的框架,对于不同的场合下、跟不同角色的人聊天是可以有一些经典主题的,而且针对不同的回答,又可以有一些应对模式。

比如吃饭时,我们可能会聊到自己的家庭,如果有的人家里有小孩子又可以引申出另外的话题,比如小孩子的教育问题等。

当然这个是因人而异的,或者换句话说,因不同的成长阶段而异,这个多样的世界下容得下各式各样的人。

比如说有的人就是有某些兴趣爱好,而对其他的事物丝毫不感兴趣,这种就是找到自己的圈子就好了,也没必要委屈了自己。

同时我也见过有一类人非常的有活力,对各个方面都有涉猎,你聊到哪里他都能接过来聊。

通过跟后者的聊天,我还真学到了一点诀窍,那就是给别人贴标签。就是字面意义上的标签,比如小A喜欢摄影,小B喜欢打台球,那么在日常中就可以积累相关主题的素材或者问题,下次聊天就可以一窥他们的视角,甚至有一天,我们也可以给他们提供一些不一样的启发性思考。

这里其实就说到了第二点作用了,也就是获取信息。

作用二:获取信息,增进与世界的连接

获取信息是奢侈的,因为毕竟这是一个轻松的聊天环境,并不是一个严肃的工作环境或者咨询场景。

我们其实最好不要期望聊天,能真的获得很多实质性的信息,因为聊天本身就是以吹水为主。如果真的获取到了某些有用的信息,那也是运气比较好。

这一点很有启发意义,换一个思路,我们也不用承担太大的压力,想着给对方完全准确的信息。聊天就是聊天,随便说也没什么大不了的。

我之前聊天还担心别人提的问题,自己回答不上来,现在回想起来有点过虑了,而且也真是难为了自己。

另外,我还发现有的人对聊天的目的不是很清晰,所以就可能会在某些问题上造成对峙的局面,场面可能会一度比较尴尬,其实是完全没必要的,因为是非对错并不在聊天作用的范围内。

作用三:了解他人想法,提升自我认知

我们生活中会接触到各种形形色色的人,每个人都有自己的角色,有自己的思考设定,所以大家对一些事情的理解会迥然不同。

通过聊天,我们可以了解到这个世界的多样性,可能理解不同的人,在自己的立场上是怎么考虑一件事情的。我觉得这个其实是聊天最最重要的一个作用。

我见过一些人,他们思维简单,对事情的理解也相对简单,大部分时候要揪个对错,而对思维的多样性却置之不理,也不理解对方说出某一句话时的背景。我仿佛看到了多年前的自己。

我也见过一些人,他们目标明晰,并且能够主动屏蔽一些无关紧要的杂枝错节,直达主题的核心。我也能从中窥见别人思维的魅力,同时也就更加注重聊天的价值了。

通过聊天,我也更能理解别人思维方式的源头,比如他从小的生活环境是怎么样的,遇到了些什么人、什么事,导致他当前是如何思考的,一切也就顺利成章了。

我相信人的行为是可以预测的,当我们了解了一个人的成长过程、角色定位以及思维模式。所以我总是比较在意,有些别人表达出来我却想不通的结论,为什么大家会这样思考,所以我会在聊天的过程中去询问他们的思考过程。这种理解也会随着聊天不断地加深,变成一个良性循环。

总结

好啊,总结下来的话,聊天就是一个我们不断跟外部建立连接,并且不断提升自我认知的过程。

理解了这个过程,聊天就会变成自然而然的一件事情。

借助Q语言理解编程核心思想

背景

前几年我在研究时序数据库时,了解到了kdb+这款当时号称全世界最快的数据库。kdb+主要的应用在金融领域,用在一些量化分析的场景下,在计算机领域用的相对比较少。

kdb+的最底层是K语言,他是一种基于符号的语言,继承了APL的核心思想,但是换用更标准的ascii符号来编码。而它的上层界面是在K语言基础上封装的Q语言,使用可读性更高的单词来代替符号。

最近由于需要对大规模的业务数据做一些分析,又重新学习了一下Q语言,对编程有了一些新的理解和感悟,在这里记录一下算是自我检查, 也希望对大家有所启发。

重新思考函数的本质

函数这个概念最开始是从数学中提出的,可能是从初中阶段引入的。

数学上的函数代表了一种映射关系。比如我们说平方函数,他代表着一个映射关系,可以将一个数字映射成它的平方。这种映射关系是明确的,也就是我输入一个A,必然会得到一个固定的B。

编程里的函数就没有那么幸运,因为他要处理的是现实世界的问题,,就不可能有数学函数定义的那么单纯。一方面它仍可以作为一种映射关系,同时又引入了一个副作用的概念,比如在一个函数中,它不仅有输出,可能还会有一些I/O操作,比如写文件。

与副作用相对的是一种叫做纯函数的编程范式,在纯函数式编程的范式下,函数的概念在数学和编程上达到了一致,一个输入就是对应着明确的输出,并且没有副作用。Haskell 就是纯函数式编程的代表,他用一些特殊的手段隔离了副作用。

但是就像前面说的,编程有很多时候是用来处理现实世界的问题,他不可能是数学世界那么单纯的理想模型,所以就导致纯函数听起来很美好,但是现实世界应用的并不多。

当然,我们这里说的Q语言也是一种函数式编程语言,但是同时他也引入了副作用,在函数式编程的同时保留了一定的灵活性。

这里举一个比较典型的例子来说明函数的本质是一种映射关系。

斐波那契数列是一个正整数组成的数列,数列的前两项都是1,后面的某一项是该项前面相邻两项的和。

假设我们要定义一个函数,该函数可以接受一个参数,返回对应位置的斐波纳契数字。按照传统习惯,位置从零开始计数,也就是输入是0或者是1的时候返回的都是1。

下面我们使用函数定义的方式来实现这个数列的逻辑计算,并且验证一下结果:

1
2
3
q)fib1: {$[x<=1; 1; fib1[x-1]+fib1[x-2]]}
q)fib1 9
55

然后我们来直接定义映射关系,并且检查一下他的结果:

1
2
3
q)fib2: 0 1 2 3 4 5 6 7 8 9!1 1 2 3 5 8 13 21 34 55
q)fib2 9
55

从调用的方式和实现的功能上来看,两者其实是完全等价的。也就是抛开副作用的话,函数的本质就是一种映射。

四则运算是函数吗?

四则运算和逻辑运算, 其实本质就是一种映射关系,只是因为他的使用过于高频,所以有很多语言把它作为了表达式的一部分。

举个例子,在 python里面,整数的加法底层仍然是一个函数,可以通过下面的命令去查看函数的具体定义:

1
2
3
4
5
>>> help(int.__add__)
Help on wrapper_descriptor:

__add__(self, value, /) unbound builtins.int method
Return self+value.

加法跟斐波纳契函数的一个不同之处在于它的参数是有两个,而且一般情况下,这两个参数是分布在加法的左右两侧的。

在Q语言里,我们可以看到加法的这两种不同的格式 (其中第二种格式为Q语言的函数调用格式):

1
2
3
4
q)1 + 2
3
q)+[1; 2]
3

所以我们知道函数是语言中很重要的一类组成部分, 在某些语言里函数也叫做verb, 即动词。

编程语言与自然语言的关系是什么?

刚才我们已经提到了动词, 这个本是自然语言的一个概念。回过头来看, 编程语言与自然语言的边界又在哪里呢?

编程语言跟自然语言的本质是相同的,都是为了沟通而存在的。不同点只是用于沟通的双方,是我们要跟机器沟通,还是要跟人沟通。

编程语言同样存在语法结构,而且同样存在多种语法结构迥异的语言分支。

我们已经了解了动词, 编程语言实际也有自己的名词和副词,甚至我了解到有些语言(比如J语言)在定义语言的组成元素时,就是使用了verb、noun和adverb。

动词表现形式就像上面说的, 在大部分语言里就是函数。

名词其实也挺好理解的,就是常量、变量或者对象。

副词是一个挺有意思的组成元素,有点像是Python里面的装饰器,主要作用就是改变动词的行为。这也是函数式编程的一个特点,由于函数是一个变量,所以他也可以作为副词修饰的目标(参数)。

下面是一个比较典型的示例,通过each这个副词,我们可以在保留原函数核心逻辑的情况下,很方便的改变函数的整体行为。

1
2
q)fib1 each 0 1 2 3 4 9
1 1 2 3 5 55

所以通过语言的类比, 编程语言其实也有自己的语法结构, 跟自然语言极其相似。

借助交互式理解SQL?

kdb+的牛逼之处,他通过Q语言提供了一个叫做qSQL的DSL,使其既能够像MySQL一样可以灵活的查询数据,同时又具有极高的可解释性。

下面我们来通过一个典型的案例,看一下qSQL的牛逼之处(这里需要再补充一点说明,就是Q语言的求值是从右向左的)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
q)tbl:([] id:1 1 2 2 2;val:100 200 300 400 500)
q)tbl
id val
------
1 100
1 200
2 300
2 400
2 500
q)select val by id from tbl where val < 500
id| val
--| -------
1 | 100 200
2 | 300 400

下面我们来看where的部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
q)tbl.val
100 200 300 400 500
q)tbl.val < 500
11110b
q)where tbl.val < 500
0 1 2 3
q)tbl where tbl.val < 500
id val
------
1 100
1 200
2 300
2 400

可以看到where本身其实就是一个动词,一个纯粹的可以单独使用的动词。所以其实不管这里的where多复杂都是可以实现的,他本身就是Q语言的一部分,并没有像MySQL语法上的限制,是完全完备的一种查询语法。

再来看select的部分:

1
2
3
4
q)tmp: tbl where tbl.val < 500
q)tmp.val group tmp.id
1| 100 200
2| 300 400

可以看到select仍然是一层薄薄的封装,并不需要在语法上的过多解析就可以执行。

所以从这里可以看到qSQL的牛逼之处在于以下几点:

  1. 语法的每个部分都是语言级别的支持,是完备的,完全不限制大家的想象
  2. qSQL只是一层薄薄的抽象,不需要做太多的解析,对性能上来说几乎是零损耗

如何完整的准备一场面试?

2025年对我来说挺重要的,我离开了自己工作了长达四五年的公司,开始切换到一个新的行业。

也同样在今年的四五月份,我做独立开发的朋友小A也来到了深圳找工作,从独立开发向打工人的身份转换。

由于我很长一段时间没有找工作,所以我花了点时间把找工作的思路重新捋顺了一下。同时借助这个思路,也帮朋友优化了简历和面试的过程,朋友也顺利地找到了工作,特别是在这样的环境下,所以我觉得这些方法论是有效的,记录在这里给大家参考。

当然,网上也有一些付费,帮助大家改简历或者提供面试咨询服务,我最开始各种看不惯,但是后来也释然了,因为有很多优秀的人恰恰因为表达能力不足,导致被埋没,对公司或者对个人,这何尝又不是一种遗憾。

当然,不同的面试对应聘者的要求可能有所区别,我这里主要针对技术岗位的面试做一个分析。

其实面试拆开来看也挺清晰,主要靠三个途径来了解应聘者的信息。

首先是简历,HR会通过简历对一些基础要求做一个筛选,面试官会通过简历去了解一个人的过往履历。

其次就是面试的过程,通过实际的沟通或者一些实际的面试题目,对应聘者的基础知识、个人品质和个人技能做一个进一步的了解。

再次就是面试前的背调了,当然这个过程主要是被动的,没有太多需要单独讲的。

下面我就前两个点展开来聊一下。

简历

简历是HR和面试官对应聘者的第一印象,简历的质量决定了我们能不能拿到面试机会。

小A在刚开始找工作时,跟我抱怨说简历发了很多,就是没有几个回应。他把简历发给我后,我一看,整篇整篇的都是自传,写他怎么出去玩,写他做了什么事。

我们要想清楚的一个事情,就是公司为什么要招这个岗位?必然是需要我们去解决某些问题的。

首先要说明为什么我们能解决。这当然是依靠我们的专业度,比如在历史上我们遇到了哪些问题,通过什么手段解决,达到了什么效果。这样公司就比较清晰,他之前做成过,现在也一定可以做成。

其次要说明为什么只有我们能解决,其他的应聘者解决不了。因为我们没有其他人的信息,所以首先要把自己的信息量化清楚,要让面试官能清晰地看到,我们是可以高质量完成目标的。

说明了为什么要招的问题,剩下的就是怎么把自己的过往履历整理的更加清晰易懂。

这里有一个比较好的实践,就是框架思维。框架思维的好处在于,它是相对固化的,而且可以随着时间的推移不停迭代的。搭一个通用的框架,然后把自己的经历放进去,每次面试完后,如果有框架没有覆盖到的点,就可以对框架做进一步的更新。

如果感觉比较模糊,我这里可以提供一个大致的思路。

比如公司经历介绍,我们在每一家公司的职位是什么,工作的职责是什么,最突出的贡献是什么?工作的流程怎么样子的?跟周边团队是怎么协作的?

比如项目经历介绍,每一个项目是在什么样的背景下产生的,要解决的是什么问题,解决方案是什么,最终效果怎么样?项目中的最大挑战是什么?是怎么解决的?

面试

假设简历最终通过了,我们成功拿到了面试机会,接下来该怎么准备面试呢?

我这里不讲刷题这类的硬性条件,不同岗位的刷题技巧是不一样的,而且也更加依靠大家自身的能力。这里主要谈一些软技巧,那种一个小时顶10个小时的技巧(这其实是一种不对称性,多加利用会有惊人的效果)。

框架有了,在面试前要多多基于框架练习,尤其是在我们讲话可能会紧张的场景下。这个我在文章《公共场合讲话紧张怎么办?》里有比较详细的描述,提前预演绝对是回报率超高的一种练习方式,你甚至可能会迫不及待地想验证你的演习是否有效。

另外有些同学可能担心,如果有些问题没有遇到过或者没有思考过该怎么办?

首先,上面的框架思维就可以在这种情况下发挥作用了。你可以把问题带到你的框架里,然后找他跟他相关联的信息,不一定完全按照问题来回答,有一些其他思路和想法也是可以展现出来的。

另外,多准备几个在实际工作中遇到的场景,去掉一些杂七杂八的小细节,保留下最核心的主干,并且多加练习。这样在沟通的过程中,即使有些场景没有遇到,也可以举一反三,聊一聊日常工作中遇到的案例,并且能传达你在这种类似场景下能做得很好的决心。

好的面试官会主动引导你,把你的能力最大化展示出来。那如果遇到那种故意刁难的面试官,就是要找到你的盲区才肯罢休,这种环境不去也罢。

保持好心态,面试是双向选择,一切随缘。

总结

  1. 了解面试的意义,数据呈现自己的能力
  2. 搭建面试框架,不断迭代升级
  3. 提前预演,对信息的表达更有自信
  4. 面试就像找对象,最后还得靠缘分

2025年,独立开发还有前途吗?

本来我是个打工人,这个问题跟我没有什么关系。但是正巧在最近,之前做独立游戏开发的朋友有一些变动,就顺便聊聊自己的一些看法。

关于这个朋友,在之前的文章我也有提到过一些,这里再简单概要一下。

朋友最开始在百度工作,呆了四年左右,感觉有点迷茫,就辞了工作四处游玩去了。从北京沿着新疆西藏一路玩到了成都,然后在成都找了份工作,又工作了两三年。完了又回到山东老家开启了长达四年的独立开发生涯。

随着时间的流逝,长期的低收入,再加上稀少的社交,导致朋友整个身心都到受着巨大的压力。再加上前面说的"自驾旅游"事件,所以今年四五月份朋友来到了深圳找工作。

不巧的是,由于个人技能跟工作环境的脱节,最终没有正常转正,三个月后又变成了自由的身份,继续按照自己的喜好去做开发。

朋友之前发出的一句感慨,我觉得挺感触的。他说这三个月的工资比他之前四年独立开发的收入还要高。

那回到问题,2025年独立游戏开发还有没有前途?

这个首先取决于我们对前途的定义,我个人揣测大家对前途的定义,还是说能不能维持正常的生活,所以第一目的还是挣钱,在这个基础上再获得一定的自由度。

前途必然是有的,但是放到个人上就不一定会有。

我观察过有创业经历的人,发现他们有一个明显的共同点,那就是他们的本职工作,同样也做得比较扎实。创业很难,扎实的基础几乎是一个必要条件。独立开发本身就是一种个人创业行为。

除掉一些专业技能,剩下的可能就是赌博的技巧了。比如如何从市场中发现机会,又如何在抓住机会后扩大收益,或者在发现判断错误后及时止损。

跟赌博不太一样的是,这个过程更加漫长难熬。决策时需要身心合一的一致性,执行时需要斩钉截铁的执行力,在放弃时,又需要自断手臂的魄力。对个人的综合素质要求比较高。

市场上有很多成功学,毒性都是比较大的。

比如永不放弃,本质上就是头铁,不然也不可能有那么多人会赌的倾家荡产。放到独立开发里,就是长期没有正向的反馈,还一直去坚持,最后失去目标性陷入一种无法跳出的循环,巨大的沉没成本会将我们的精神彻底消耗殆尽。

换成更有指导意义的测试题,我们有没有足够的技能支撑和时间去完成理想中的项目,规划有没有截止日期?有没有预期达成的效果?如果不达预期是否放弃?等等等等,这些都是需要在行动前就想清楚的。

再比如机会有很多,成功很简单。这里是一个幸存者偏差的问题,我们是看到了各行各业的成功案例,但是更有很多人在我们看不见的角落默默的付出。

特别是这种短视频的时代,大家对成功更是有种飘飘然的认知,感觉自己可能一不小心就成功了。我觉得我们对于成功还是要有最基本的敬畏。

洋洋洒洒写了这么多,我觉得独立开发对个人来说,更大的意义在于我们能找到自己热爱的事情,并且幸运的话,可以有人愿意为这份热爱买单。

另外,还有一层意义在于,他给了我们更多的选择机会,让生活看起来更加丰富多彩。我们有无限的可能性,不至于在某一颗歪脖子树上吊死。

之前就跟同事聊起这个话题,说是不是可以找一份兼职来获得更多的收入。有一个比较理性的答案是这样的,工作已经这么辛苦了,如果再找一份兼职,那我为什么不去找一份更累的工作,稳定性还更高。所以同理,兼职的意义也是在于机会和可能性,而不在于挣多少钱。

如果是单纯为了挣钱,我相信更简单直接的方式,仍然是找一份工作,通过自己的技能和时间赚钱。

如果是为了钱,结果可能会令大部分独立开发失望。做好预期管理吧,起码不让自己后悔。

如何提升自己的语言表达能力?

首先说明一个客观事实,良好的语言表达能力,其实并不完全是一个必备的技能。每一个公司都有自己的企业文化,我们也有自己的角色定位和成长路径,一些公司或者角色其实对员表达能力没有太高的要求。

下面我以我的经历举几个例子。

我毕业以后进入一家互联网公司,做内部平台的研发,就几乎不需要跟外部沟通。因为有一个比较强势而又想的清楚的领导,我几乎只需要按照他的需求实现具体的功能就可以了。

我的第二家公司是一个外企,团队风格偏扁平化,层级结构也没那么复杂,主要还是为业务提供技术支持。甚至后来做了管理,向上汇报也是偏简单化,那个时期也不需要太多的沟通技巧。

后来进入了一家互联网大厂,层级结构、利益关系都非常复杂,而且每天都是海量的信息。领导是一个喜欢透传压力的人,尤其要求大家对自己的事情都能讲的明白。这种情况下好的语言表达就变成了一个必备技能。

这里我结合着自己之前的一些实践经验,把自己认为一些比较好的能提升语言组织和表达能力的练习方法记录下来,对自己做一个复盘,也希望能帮到其他人。

当然,这里针对的主要还是职场环境,如果是一些聊天的场合,就有很大差别了。

聆听是良好沟通的前提

良好的语言表达能力,首先倒不在于语言,而在于聆听,更在于思考。

我们在职场环境中沟通,主要分为两个场景,一个是别人找我们咨询一些问题,这种是被动沟通的场景,一种是我们主动找别人了解问题或者主动找领导汇报工作,这种是主动沟通的场景。

先说被动沟通的场景,同事找我们咨询或者沟通,一般都是带着背景和目的的,了解了他们沟通的背景,就可以针对性的做出回答。

比如有人找我们了解平台的某个功能,有可能是他们遇到了某些问题,希望借助某个功能去解决。这里就需要首先了解他们遇到的原始问题,如果没有背景信息直接回答,很有可能不是最有效的解决方式。

我发现有很多偏执行的同学,有一个特点就是不太会去思考问题的背景,而把精力聚焦在做上。缺乏思考就会导致我们看不清别人的问题,自然没法给出直击要害的回答。

没有沟通清楚,很有可能动手的第一步就是错的。

再说主动沟通的场景,如果是找别人咨询问题,基于前面说的,那我们首先要描述清楚我们遇到的问题,以及期望别人给予我们什么帮助,这样有可能会得到更优的回答。另外不要急于争论对错,如果对错对下一步动作比较重要,找到明确的验证条件去验证就可以了。

如果是向上汇报的主动沟通,努力就要用在平时了。项目的背景以及需要达成的结果等等,需要在最开始就明确清楚,多听一下上级对这个事情的理解和关注点,后面就可以从更为关键的视角做出汇报。

同理心是良好沟通的基础

如果是在一个复杂的环境下,沟通就是一个技术活。

通过聆听,我们已经知道了对方的原始诉求。不同的人有不同的知识储备,需要在进一步沟通之前,确认对方掌握了哪些信息。

比如对方是一个技术岗位,那么我们可以假设他已经知道了计算机的基本原理。但是他对公司的业务了解程度是一个未知数,这种情况下,要么我们跟他们确认清楚,要么就假设他没有这块的信息。

换位思考一下,如果对方说了一些我们已知的信息也不要表现出不耐烦,这有可能恰恰说明了他的专业性,耐心的聆听也说明了我们的专业性。

说到这里,有一个比较典型的案例。我有一个朋友在其他公司就职,领导在跟他沟通的时候,说了一些他已经知道的信息,他就表现得非常的不耐烦,感觉领导技术能力太差。这种恰恰暴露了我们自身的一些问题,是不可取的,沟通过程还是要心存敬畏。

沟通要充分考虑逻辑性

有了聆听和同理心的加持,理论上已经可以很顺畅的沟通并达成结果。这里再对一些基于文本的沟通场景,做一些补充,来验证我们的聆听和同理心是否有效,也可以举一反三应用到其他场景。

比如我们有一个项目要跟进,领导来问某一个具体的数据。

这里就会涉及到几个要素,首先项目背景是怎么样的,要达到什么目标。总体数据的分布是怎么样子的,然后每一类分布是由哪位同学去跟进,进度怎么样子的,每一个子类有哪些卡点或者风险?这些应该是在项目开始时就明确下来的,任何一个时刻都是可以直接拉出来的数据。

那如果假设我们没有这种标准数据呢?就需要我们去了解领导的目的(领导也有责任描述清楚提出这个问题的背景),需要了解项目的大概进度,还是汇报需要某个信息?是要通过这个数据表达个人产出,还是要看整个项目后面的预期效果?

我就遇到过一类领导,想当然的问问题,也不能准确的描述问题的背景,结果导致多次返工,白白浪费很多时间。

再比如有人过来咨询某个问题,那我们就要了解清楚,他现在遇到的问题是啥?这个问题是在什么背景下产生的?是由于一些环境变化导致产生了新问题,还是问题一直都存在的(如果一直都存在,为什么是现在这个时间点提出来)?

具体的,比如A项目的负责人来咨询某一个场景的异常,能否通过日志监控起来。经过一顿沟通可以得到如下的一些信息。

背景:A项目可能会发生某类异常,在异常发生时日志文件里面会表现出某种特征。

当前方案:当前已有方案在运行,A项目维护了一个脚本,会定期去检测异常特征,检测到时告警。

当前问题:该方案在某一次技术评审时被提及,领导对该方案的合理性有疑问,希望有一个更标准通用的方案。

经过这样的梳理,我们就能更清晰地看到这次咨询的一个来龙去脉,更有针对性的从上层去提供支持。

这里还有一个绝招,就是在找别人提出问题时,尝试着先用一句话把核心问题描述清楚。这个绝对是物超所值的练习。

有的人找别人问问题,习惯性的先打开某个网页,但是其实很多问题,通过把握要害,两三句话就讲清楚了。

总结

好了,这里来做一个总结。

首先,要明确我们的工作是否真的需要提升沟通能力。

然后,通过聆听和同理心的加持,再加上在实际场景中的不断磨练不断迭代,让个个场景的信息都更加规范和固化。

最后,就是不断地练习了。

公众场合讲话紧张怎么办?

前段时间由于工作的需要,要在一百人的部门大会上汇报工作进展。

后来在跟同事吃饭的时候,同事问起做这种大型的汇报会不会紧张。所以就有了这么一篇文章。

要问会不会紧张?那自然是会紧张的。

同事跟我说,他在稍大一点的场合下(比如10人),发言的时候整个心脏都是在嘭嘭跳动的,有些问题也回答的不好。我也是一个很i 的人,这其实跟我的情况没什么二致。

但是经过一些事前练习,我总能从那种紧张的状态,进入到另外一种更加专注的状态,最后产生一种自己满意的效果。

这里说的事前练习,最重要的诀窍在于,他不是教你如何调整心态(实际上没用,不然你也不会紧张),而是拆解成可以实际操作的一些步骤,通过简单的练习就可以达到很好的效果。你需要做的,就是拿出些时间来跟着操练。

我把它记录到这里,希望对大家(包括我自己)都有帮助。

演讲材料

如何写材料不是本文的重点,但是有一些需要注意的地方列出来给大家参考。

首先,演讲的目标是要明确的,很难想象目标都不明确,能把内容讲得很清楚。

其次,拆解到每一张PPT,PPT要说明的子内容也是要明确的,每一张PPT都有自己要关注的重点。并且要注意整体的连贯性,逻辑不连贯,听众就很难跟上我们的思路。

再次,演讲不是朗读,每一块小的内容都应该有自己的关键字。围绕关键字展开,万变不离其宗。

提前预演

这一步要对着自己的材料,一遍又一遍地刻意练习。

这里的练习要包括完整的演讲内容,从最开始的自我介绍,到中间的内容讲解,再到最后的感谢或者答疑。力求一比一还原。

同时,在某一次开始练习之前,打开计时器开始计时。我们一定要对自己演讲的时间非常有把握。

通过多次练习,我们会明确地感受到,自己每一次的练习,对演讲的内容都有更深刻的把握能力。

另外,在你感觉对内容有足够把握的时候,比如练习到第三遍能够流畅表达了,就加入一些手势来强化关键的信息。

那么练习多少次合适呢?答案取决于这次演讲对应的价值。

比如你是在准备新工作的面试,你的表现决定了你以后每个月能多几千块钱或者是少几千块钱。这种场景下练习个一两天也不过分吧。

再比如是周例会的汇报,每周都会开一次。这么高的频率必然不会以你一次的表现为结果吧。我拿出个15分钟来准备也不算怠慢吧。

演讲风格

演讲风格实际上是在练习之前就要确定的,需要结合个人的一些特点,甚至是要演讲的主题。

记得在很多年前我们要去参加供应商组织的一个会议,我要在上面做一个30分钟的演讲。在过去之前部门领导叮嘱我,可以在演讲的时候放慢一下语速,这样更利于思考。

当然还有一种策略是加快语速,这样的话一些细小的问题也会被很快掩盖过去。

还有就是整个基调是幽默还是严肃,这个取决于演讲的内容。我之前的演讲基本上都是严肃为主。

所以风格的问题其实是偏好问题,怎么着都行,提前固定下来就可以了。

总结

核心思路其实就这些,主要还是依靠大家的实际练习。

我再把核心内容总结如下∶

材料∶

  1. 演讲的目的是啥?
  2. 通过怎样的过程一步步讲解,思路是否流畅?
  3. 每一步是否有独一无二的关键字?

刻意练习∶

  1. 提前定好演讲风格
  2. 拿出秒表,记录时间
  3. 练习内容一比一还原
  4. 记录练习的次数
  5. 引入手势强调关键信息
  6. 练习次数/时间取决于演讲价值

为什么我们工作越来越不开心了?

不开心的原因茫茫多。加班多,工资少,离家远,傻叉同事多,都可能是工作不开心的原因。

这里想说的是,为什么明明大家刚开始工作时充满干劲,结果做了几年越做越累了呢?

最近有两个事促发了我对这个问题的思考,一个是我独立开发的朋友没有过试用期,一个是我离职换了新工作,遇到了一些新的人。

我尽量分段描述,让大家看得更清晰些。

我做独立开发的朋友

上一篇文章说到,我做独立开发的朋友A,在外出游玩的时候,认识了一个女生。

无奈没有女生的联系方式,只知道女生工作地在深圳,于是结束了自己的独立开发生涯,来到深圳投身于找工作(和找人)的大军。

我记得他刚入职那会,我正好被摸不着头脑的工作搞的焦头烂额,但是他那边倒是充满新鲜,他一边吐槽着工作,一边讲着公司每天发生的一些新鲜事。

给我的感觉,仿佛这份工作还是给他带来了很多的生机。

奈何好景不长,有一天他突然跟我说,他可能要辞职了,甚至可能是裸辞。原因是他导师比他年轻,技术不如他,还整天挑他刺,他感觉自己被针对了。

终于在转正的当天,他收到公司的信息,说转正流程不再继续了,那一刻他有点放松了。

他又重新回到了独立开发者的行列。

他说他还是不习惯这种工作环境。

我那个消失的同事

B是我在新公司的一位同事,由于工作原因,我经常跟他一起聊天,慢慢的对B有了一些了解。

B是98年的一个小朋友,B工作很有激情,平时也是积极主动。由于工作内容较多,每天下班很晚,勤勤恳恳没有怠慢。从日常的交流中,也能看出他对工作的热爱。

在某一天吃完饭后,我们几个人在公园旁边散步,B突然说起,他有很久没涨工资了,去年别人都涨工资了,就他没涨。

再仔细问,之前的领导对他的评价都是,不知道他整天都在做啥。是一个典型的小透明,存在不被看到。

回想起每次周会汇报,B的内容也是这周就是做啥啥啥,每次汇报的内容都一样,不愿多透漏一点细节。

我让他把日常的工作列出来时,他列了很长的一串列表,当时我就非常奇怪,这么多工作量,领导竟然看不到他的价值。

不用说,这是典型的老实人了,完全不关注自己的利益,不想表达自己,完全沉浸在做事里,甚至不惜投入本属于自己的大量的时间。

后面我们开始帮他疏导,告诉他做事的流程如何如何,遇到问题如何如何,周会汇报的时候如何如何?

最开始他理解不了我们说的内容,表现得满是抗拒。通过持续的给他灌输这种思想,后面他终于慢慢地能理解。再后来他就开始反思之前的状态。

但是有一天在聊天的时候,他突然跟我说:〃G哥,我工作好像没以前那么开心了。〃

那会儿,我就知道他是真的听明白了,并且他也明白了有些事情不是我们愿意做的,而是我们必须要做的。

但是当时我却愣在那里,不知道该怎么疏导他的不开心。

后来我还陷入了另外一个问题,他做的事儿并没有改变。虽然做事的方式改变了,但是也没人明确跟他说就一定会有回报。但是从之前的开心到现在的不开心,确确实实是发生了,从这一点来看,事情貌似是朝着一个不好的方向发展了。这一点,我是没想明白的。

对自我的反思

换了新工作以后,我加入了一个〃新〃团队。这里的〃新〃不只是对我,对整个团队来说也是如此。团队里来的最早的同事,竟也还没有转正。

每个公司都有自己的文化价值观,基于这种价值观去做一些决策。但是由于这个团队过于新,以至没有人能明确的知道工作该基于怎样的价值观开展。

在那个迷茫的时期,我跟其他几个组员没少在饭后聊天,讨论为何会有这样的现状,未来该如何应对?

某天吃完饭跟同事聊天的过程中,我突然有感而发,最开始工作的那几年,哪里需要去管什么个人价值,又哪里需要去管怎么跟老板汇报,完全凭藉自己的热情,干就完事了。

但是回过头来一想,越做越难受才是更合理的趋势。回报在不停地增加,必然就需要做更多的思考,而且我们本身在老板那里的价值也在不断地增加。

就像刚参加工作的同学,那时候还处在出职场打基础的时候,最重要的自然是学习如何把知识应用到实际工作。但是过了这个时期,做事上已经游刃有余,自然就需要做更多的思考,比如老板在想什么,老板在做什么,尽可能的互相成就。

有的角色是来完成日常的工作内容的,有的角色是帮助老板想清楚方向的,有的角色是帮助老板完成价值呈现和价值汇报的。

所谓"月入1800,每天笑哈哈",可能是最好的诠释了。

回来了

最近又有了些兴致, 想继续写点东西.
看了一下上一篇文章, 嚯, 已经是两年前了, 不禁有些恍惚.
其实近几年即使有些文章, 也是一年两篇, H1一篇 H2一篇, 哈哈哈.

cube pb

两年半复盘

你知道这两年半我是怎么过的吗?

写上一篇文章的时候, 还是在23年1月份. 当时还在腾讯云做SRE.

23年, 正好是西安子公司在建设元年, 当时子公司团队在建设初期.

上半年, 派驻到了西安去做团队建设, 一搞就是半年.

下半年, 回到深圳, 重新找房子, 住到了公司旁边, 上下班通勤方便了很多, 幸福感也提升了很多.

24年, 应该是在腾讯四年多挑战最大的一年, 整体环境下行, 大家压力增加, 对员工的要求也变高了.

上半年, 由于团队工作调整, 加入了现网稳定性值班的队列, 同时存量的事项也还在进行.

当时最忙的时候, 同时跟进3个事项, 一周要发送3份周报.

下半年, 工作内容已经适应了很多, 虽然还是很忙, 但是在工具流程的加持下, 已经顺手很多.

25年, 是一个比较大的转折点. 由于工作内容跟我的个人规划偏差太大, 内部也没有很好的机会. 再三考虑下, 最终选择了从腾讯离职, 加入了智能驾驶的行业.

25年算是智能驾驶比较重要的一年, 市场高速发展. 3月底出现的小米SU7爆燃事故, 更是把自动驾驶推到了风口浪尖.

发生了哪些有趣或者值得关注的事

降本增效

22年左右腾讯开始了 “以人为本, 降本增效” 的策略.

从宏观角度看, 组内的降本增效包含了两个大的阶段:

  1. 低价值团队人员削减: 一些在公司看来不必要存在的团队被砍掉. 那个阶段经常遇到一个事, 就是找某个团队的接口人处理问题, 结果发现人不在了.
  2. 集团人员子公司化: 这个阶段团队的组织构成在发生显著的变化. 子公司的人员比例在快速增加, 最终的工作架构, 演为变一个集团同学带着一群子公司的同学干活. 有个有意思的数据, 我们团队子公司人员, 80% 都是从一线城市 (北上深) 回去的.

至于是否有第三个阶段, 就不得而知了.

魔方

我是在疫情期间开始玩魔方, 正好有比较多的时间宅在家里 (第一次玩魔方是小时候, 凭借自己的 “聪明才智”, 能勉强拼起一面 :-p).

这一次我才知道, 原来现在魔方都是磁力魔方了 (我小时候就想象过, 是否可以借助磁力提升魔方的交互, 没想到被魔方厂商验证了).

也是在这一次我才知道, 原来一个魔方可以卖到500块+, 可以包含陀螺仪和蓝牙.

期间, 我也做了一些有意思的事, 比如下面几个:

  • 破解GANCUBE蓝牙协议, 使用GANCUBE播放钢琴曲
  • 编写了手机上的一个魔方解谜游戏, 玩家需要使用最少操作将魔方拧成目标状态
  • 编写了一个白色十字练习工具, 根据某个状态, 预测最少操作

值得一提的是, 魔方解谜游戏还被一个哥们非法反编译了, 拿到taptap上重新发布, 据说好像一天盈利有个50刀左右 (我是怎么知道这个数据的呢? 我的游戏被我的朋友加了广告发布到了Google Play上, 那个哥们拿到TapTap上发布时, 刚开始没有修改广告商, 前几天的盈利发到了我朋友哪里 :-p).

对了, 我现在PB 29.67, 又好久没练习了, 不知道封存法是否管用, 会不会重新玩起来又精进了, 哈哈哈.

我做独立开发的朋友重新找工作了

我之前做独立开发的朋友, 经历了4年的独立开发生涯, 在25年, 来到了深圳开始找工作.

据称他之前的日收益有10刀左右, 在小地方够正常生活, 异常情况可能无法覆盖.

当然, 他所以来深圳找工作, 另有原因.

他之前跟一个同学出去玩, 喜欢上了同行一个女生.

但是当时没有要女生联系方式, 问同学要同学又不给. 他只知道女生在深圳某个企业上班.

为了找到女生, 也为了对女生说自己有一份稳定的工作, 于是来深圳开始找工作.

他尝试过去公司楼下找, 找了一星期无果. 他知道女生喜欢五月天, 所以发了小红书, 挂了女生昵称到圈子里打听, 结果招来了大家的责骂, 无奈删帖, 就此作罢.

对自由职业的看法呢, 我也是心向往之, 但是也知道现实情况, 行得通的概率极低. 呼兰有一个段子分享在下面:


今天我们聊职场。

我发现现在年轻人跟以前那些人很不一样。就现在年轻人工作的时候会思考意义,工作意义是什么。他想不明白他宁愿不工作。

前段时间我在马路边喝酒,来个年轻人,我说你做什么的?他说我是诗人。

我就知道没有工作嘛。

但咱情商这么高,我说你是那种一毕业就当诗人了吗。他说是。我说诗人稳定对吧至少。

后来他跟我聊他说他是东北的,我说那也算是个边塞诗人了是吧。

海量分布式运维差异

我跟我媳妇有时候会选择自己在家做饭。我帮她剥蒜,一颗一颗干干净净。

我们结婚的时候,全村人都到了,几十桌,请了做饭师傅,在祠堂举行。

我们去帮忙,搬搬桌子洗洗菜啥的。

蒜蓉基围虾需要很多大蒜。我们围在姑姑旁边,姑姑从袋子里掏出一捧蒜,放在地上,用刀背一拍,就交给我们处理了。

被刀拍过的蒜格外好剥,我们总能在吃饭前把大蒜处理好。

但是会不会有点脏呢?当然没有用手剥干净了。但是实际效果差别不大。

在我的技术生涯中,曾经有一段时间工作内容是开发新特性,并且维护平台的稳定性。那时我总能把每个问题跟进到底,处理的滴水不漏。

后来我有机会运维一些比较大的系统,开始引入SLA,从一种新的角度去对待自己的工作内容。

我们说4个9,这意味着我们要处理的请求量非常大了。我开始慢慢意识到不能像以前一样把系统打造得滴水不漏,事必躬亲,各种小概率导致的意外开始逐渐瓦解某种完整的印象。失控开始相继出现。

如果最后我们能良好的生存下来,必然需要某种平衡,从杂多的处理事项中识别出哪些更为重要。这是一种与对待小规模系统完全不同的思路。

现在,我们在学着享受在失控边缘的这种状态。而且可以确信的是,飘摇不定也是一种稳定的状态。