预判了大模型的前景,却无法预判它的前景能持续多久 – 如果早知道会持续这么好几年,就应该早点多放精力把自己多向ML倾斜。偶像Greg的雄文 How I became a machine learning practitioner 我可是读了好几遍,除了佩服还是佩服。我打开过deep learning教程,也打开过Andrej Karpathy的古早教程,最终都是开了个头就放弃了。
大厂的金手铐是真实的,我属于想得比较开的了,不在乎什么大厂的名声(待了五年也够了),其他小恩小惠的福利对我来说也像是鸡肋,从来也懒得薅,但是钱却是真实的。在我拒绝那个startup之后不久,就得到了来自公司的正反馈,VP神神秘秘地给我拉了一个15分钟的会。我当时就想,这到底是要把我开了还是要给我额外发钱,因为一月刚给我发过一笔,当时也是拉了这样一个会,如果再来一笔那是不是too good to be true了,感觉还是要把我开了的概率更大。
当你费尽心思找到了足够多的人才(A player)时,你会发现他们真的能够很好的互相合作,因为他们之前从来没有得到过这样的机会(与这么多优秀的人一起共事)。他们也不会想要和水平不够的人共事(B and C player),于是就会形成一种自我监督,他们只会招募更多的人才。招募一些好的人才,然后这种情况就会在公司中传播,最后公司里就会充满了好的人才,这就是Mac团队的样子。
转组之前的几个月正值Google史上第一次大裁员,我当时的想法就是失望,我觉得Google不应该裁员,太他妈丢人了。转去的新组是正在负责Google I/O上的某个LLM相关的项目,我当时就想,啊,就让我来搞这些最新的东西,提振股价,消除未来的裁员吧! 站在2025年的当下,我发现我在这两件事上都错得离谱。首先Google并非不应该裁员,而是应该更小心有策略地裁员,大公司病是真实存在的,它折磨着许多人的每一天;其次我的工作跟股价也没什么关系,也许它们曾在某个时间点上align了,可是correlation does not imply causation。当然这些都是后话了。
Without purpose, we would not exist. It is purpose that created us. Purpose that connects us. Purpose that pulls us. That guides us. That drives us. It is purpose that defines us. Purpose that binds us…
不得不说,来了美国之后发现这里确实处处洋溢着世界第一的骄傲,比如说,在美国你可以领教到很多world-class的事,所谓的世界级。投简历的时候你会看到,类似于“Join us to do the world-class product”的描述;学生手册上写着“The PhD program prepares students for faculty careers at world-class universities and for research positions in leading government or industrial research labs”;就连夏村的消防车上都写着,“Charlottesville, a world-class city”。第一次面对如此多world-class的时候,我的心中怎么可能没有任何波澜呢?谁不曾想成为world-class的一份子?但是慢慢地我发现事情并没有那么简单。
回想我当初第一次看到学生手册上写的world-class,心潮澎湃,着了魔一般急切地想要投身于“world-class research”然后“expand the frontiers of knowledge”。那时候的我几乎是虔诚地对待这个词,我觉得world-class曾经是对我来说是触不可及的东西,我为自己朝着world-class迈进而感到无比高兴。这种感觉随着我读论文的数量增加,research的进度增长而慢慢消失,放眼望去,密密麻麻的都是重复性的,无聊的,炒冷饭式的工作。由于巨大的失望,最终彻底走到了这种感觉的对立面,我才知道所谓world-class是如此不堪一击。诚然,我们大部分人都耗费了巨大的精力才走到了这一步,走到了world-class的面前。可是如果此时你看见前方的生活并不是你想要的,你会回头吗?
老板与学生的关系向来都很微妙,尽管学生手册里写的是,“RAs and advisors are colleagues in research and the employer-employee relationship is rarely visible as they work together to expand the frontiers of knowledge”,但是事实并非如此。我的老板就经常把读PhD比做一场战争,而我则是其中的一个soldier :)
这个话术的精髓在于,引入一个看似正确的逻辑(if x then y else z)让学生闭嘴并且去干活,但是却闭口不提这个结果(y)所需要的苛刻的前置条件(x)。有哪个刚入学的PhD可以随随便便地指出老板的错误呢?如果不能指出错误,那么就只剩下了服从,在脑子一片迷茫的情况下服从,是我所不能忍受的事。正确的做法应该是真诚地对待学生,与学生建立良好的平等关系,及时地引导学生并解决学生的疑惑。或许有人会说,“你的要求太高了,怎么可能会有这种老板呢”,我觉得这种人就是典型的自我阉割惯了,把自己的要求降低到了一个不正常的维度,于是看到别人提出的正常的要求就会露出一副吓坏了的神色。
当然你会想,为什么要去蹭所谓的信息优势而不直面未知呢?那不是PhD的意义所在吗?说不定那些信息反而会限制你的思路,一个产生伟大研究的灵感就从你手上溜走了。头铁的我当然这么想过,但是老板是否会让你直面未知?特别是Assistant Prof.,要知道tenure的压力是很大的,AP决不会同意你冒着发不出论文的风险憋一个大招。就算你有了那种研究的自由*,你是否思考过直面未知的赢面又有多少?产生伟大研究的几率如此之低,而成本却是如此之高,与其沉浸在自己大多数时候都只能庸庸碌碌地做研究的痛苦之中,不如去寻找其他的方向。这让我想到Witten说过的一句话:“我们其实不需要100个弦论学者,只需要一两个就行了;但我们还是需要招100个研究弦论的学生,因为我们不知道他们之中哪一两个人能成为我们需要的弦论学者”。说实话,我不知道我是不是那百分之一(尽管我觉得我比我身边大部分人都强得多),可是我知道我百分之百可以成为一个很好的工程师,于是我的选择就渐渐清晰了。当然你可以鄙视地说,我看见了一笔不划算的投资,于是知难而退,which is very true. 说到底,人生太过短暂,我只想选择更能够实现自我价值的路。
“学术自由”
*: 其实作为一个PhD学生谈研究的自由是一件很搞笑的事,就像太监讨论性生活一样没有意义,因为本质上学生是为老板打工的(为什么大家把导师叫做老板?)。至于赢面问题,有兴趣的人可以看下The PhD grind,里面讲到了Klee-UC在Stanford诞生的故事,一个来自顶尖学校,功成名就的Full Prof.,想要学生实现他的一个想法,花了整整五年。代价是什么呢?在这五年里有四个学生尝试过这个project,只有一个学生成功了,剩下的两个直接像我一样quit PhD了,还有一个(作者自己)去寻找别的项目了。
> In the end, it took three attempts by four Ph.D. students over the course of five years before Dawson’s initial Klee-UC idea turned into a published paper. Of those four students, only one “survived” —— I quit the Klee project, and two others quit the Ph.D. program altogether. From an individual student’s perspective, the odds of success were low.↩︎
然而,把评价自己的权力牢牢抓在自己手上是危险的,“With great power comes great responsibility”。想象一下,如果全世界只有你自己可以评价你自己,那么你的评价会左右你对自己在这个世界中的定位,如果定位错误,那就有可能陷入巨大的困境。我的应对方式很简单,我非常非常虔诚地对待这种权力,时刻思考反省,自己对自己的评价是否公正,是否有失偏颇。一味地看高或者看低自己,都是我所不希望发生的。
再后来,到了该正式quit的时候,我拿着表格去找老板签字,快三个月没见了,去之前我还很好奇他会不会问我接下来要去哪。最后他还是问了,我说我应该要去Google了,我以为我说出这句话的时候会很爽,但是其实并没有,他很平静,我也很平静,就像某个学生来找一个素未谋面的教授签字一样。我从来不喜欢主动提出要走,就算签字已经签完了,我还是像以前一样坐在他面前,又像以前一样尴尬又沉默地过了三秒。最后还是像以前一样,“OK”,我先说,“OK”,他也说。我站起来准备走,他送我到门口,我想说点什么临别的话语,却脑子一片空白。我发现我还是像从前大多数的时候一样,来到这个办公室之前,总是没有准备好所有自己要说的话。只不过这一次,他应该不会再因为这个而感到不满了。慌乱之中,我留下一句“I may come back later to visit”,就这样吧。
*: 有朋友来信说很好奇为什么我之前写得雄心勃勃说想要做出伟大研究,而现在却只花了两三天就决定要退出。实际上,说是两三天,其实我只花了两三分钟,我给了我自己两三天只是因为我在强迫自己反复思考,我不希望自己后悔。至于只花了两三分钟的原因,自然是之前所有经历的总和累加起来的疲惫以及我发现读PhD这事根本不适合我。给大家分享一个我很喜欢的回答,我就是回答里那个“活在某种自我期许中的人” or “太成熟的人”。↩︎
uint8_t a = atoi(user_input()); // tainteduint32_t b = 0xfffffff; // not taintedb &= a; // tainted, but how?uint32_t c = b & 0xffff000; // is c tainted?
struct TaintInstVisitor : public InstVisitor<TaintInstVisitor> {// ...void visitStoreInst(StoreInst &I) {// syntax: store src, dst// if src is a constant, then dst is a constant Value *op1 = I.getOperand(0); // srcif (is_constant(op1)) { Value *operand2 = I.getOperand(1); // dst const_vars.insert(operand2); } }}
struct TaintInstVisitor : public InstVisitor<TaintInstVisitor> {// ...void visitLoadInst(LoadInst &I) {// syntax: dst = load src// if src is a const, then dst is a const Value *op = I.getOperand(0); // srcif (is_constant(op)) { // src is a const const_vars.insert(&I); // dst is also a const } }void visitCastInst(CastInst &I) {// syntax: dst = load src Value *op = I.getOperand(0);if (is_constant(op)) { const_vars.insert(&I); } }}
好吧就在这个时候,我跟着做research的教授,新来的,非常着急地在招学生,然后他又非常想拉我当他的phd,还老是出去请我吃饭,甚至跟我说you can transfer to phd anytime you want,说得我都不好意思了。当然我也挺想读他的phd,虽然他自己也刚phd毕业,但是我们的方向很match,而且我也觉得他挺厉害的。在第一个学期考完期末考之后,我依然没有找到实习,这时候我的感觉,说好听点,我觉得冥冥之中我注定要试一试读phd,说难听点,读phd是我那时候的最优解。然后我就毅然提交了转phd申请。大约一个月吧,申请就approve了,我读了一学期master之后,就转成了phd。
最后,我也必须承认我之前膨胀了,感觉ms太简单,以为phd也不过如此,也许只需多花点时间罢了,但是现在看来真不是这样,phd真的是一场艰苦的修行,而我才刚刚开始罢了。之前在瑞典的时候,教授们都会主动说不要叫他们professor,我就把这个习惯带到了美国,我导师让我别老是对别人直呼其名,因为很多人不喜欢这样。我心里还想,为啥美国的教授这么矫情,我以后拿了phd就希望人家直接叫我名字。现在我渐渐理解了,phd is not just a title, it means a lot…
(define (sum term a next b) (if (> a b)0 (+ (term a) (sum term (next a) next b))))
这样一来,我们就可以将我们之前的三个函数分别使用该模板来改写:
(define (sum-integers a b) (sum (lambda (x) x) a (lambda (x) (+ x 1)) b))(define (sum-squares a b) (sum (lambda (x) (* x x)) a (lambda (x) (+ x 1)) b))(define (pi-sum a b) (sum (lambda (x) (+ (/1.0 (* x (+ a 2))))) a (lambda (x) (+ x 4)) b))
可以看到,函数简洁且易读了很多,这就是抽象的力量。
2. 再抽象
\[
\prod_{n = a}^{b} f(n) = f(a) * ... * f(b)
\]
与求和类似,我们也可以轻易地定义一个乘积的模板,只需将求和模板中的+改为*即可:
(define (product term a next b) (if (> a b)0 (* (term a) (product term (next a) next b))))
(define (accumulate combiner null-value term a next b) (if (> a b) null-value (accumulate combiner (combiner (term a) null-value) term (next a) next b)))
然后再重新定义一下sum和product:
(define (product term a next b) (accumulate*1 term a next b))(define (sum term a next b) (accumulate+0 term a next b))
void remove_list_entry(linked_list* entry) { linked_list* prev = NULL; linked_list* walk = head;//Walk the list while (walk != entry) { prev = walk; walk = walk->next; }// Remove the entry by updating the// head or the previous entryif (!prev) { head = entry->next; } else { prev->next = entry->next; }}
void remove_list_entry(linked_list* entry) {// The "indirect" pointer points to the// *address* of the thing we'll update linked_list** indirect = &head;// Walk the list, looking for the thing that// points to the entry we want to removewhile ((*indirect) != entry) indirect = &(*indirect)->next;// .. and just remove it *indirect = entry->next;}
布鲁塞尔是个很小很精致的城市,就像比利时的其他城市一样,我并不是非常喜欢,因为建筑物之间的距离太近了,显得有些压抑。我刚到比利时的时候,就在公车上碰到一个五六十岁的老奶奶和她的孙子,她说她去过中国,包括北京,台湾。我们聊了一会乱七八糟的事,她告诉我在布鲁塞尔一定要注意安全,特别是在这样的深夜里(我总是深夜里到达一个城市…),她说“I am not trying to scare you, but they can be very violent”,她还跟我说坐在车上不要把自己的包放下来,我看了下她,发现她真的上了车还背着包的。
我在汉堡住了两三天,不过大部分时间都又回到荷兰的恩斯赫德去了,因为那时候我刚被University of Twente录取,想过去看一下,而这个学校正好在荷兰与德国的边境上。我对汉堡的印象并不是很深,就记得我去的时候基本都是阴天下雨,不过德国的啤酒和食物深得我心。记得比较清楚的一件事是,我在汉堡闯红灯,侧面有辆车开过来,完全没有减速的意思,我只好很快速而又狼狈地跑到对面。这与荷兰瑞典就大不相同,荷兰瑞典的司机一定不会这么干。有好多次,我一个人站着等红灯,司机直接就停下来让我先走了,我第一次碰到这个情况的时候简直一脸懵逼。感觉这是不是跟传说中的“德国人特别遵守规则”有关系,鉴于我遇到的例子太少,也许这只是我的脑子里的stereotype吧。
刚到卑尔根的时候,我准备去一家当地比较著名的餐厅吃午饭,到了之后发现那里已经没有座位了,于是就跟一个印度朋友,Pankaj,坐在一起聊了起来。Pankaj说他是来哥本哈根参加一个Docker的conference,结束之后顺便来挪威玩的,他说他在印度某high frequency trading工作,我一听他是搞IT的,就开始跟他聊了一些业界的事。他来挪威是参加了一个叫做Norway in a nutshell的项目,这个项目很棒,会带他去看挪威最美的峡湾,去划独木舟,去探险去泡温泉等等。他说他其实还有个朋友跟他一起来开会的,可是他朋友是个素食主义者,所以就不愿意和他一起来吃饭,他朋友去海洋公园看动物去了 :D 那天下雨,整个卑尔根都雾蒙蒙的,我和Pankaj在城里漫无目的地闲逛。卑尔根真的是个小城,就这样随便走走,我们已经逛完了大部分的卑尔根,包括鱼市,卑尔根古城,布吕根码头以及各个教堂。虽然是小雨,但是在小雨下淋几个小时也不是什么轻松的事,后来我们选择去喝咖啡暖一下,喝着喝着,Pankaj的朋友也过来了,这好像是我第一次跟一个素食主义者相处。他并没有显得跟我们有什么不一样,喝完咖啡之后,我和Pankaj在他面前若无其事地啃着鹿肉香肠,他也并没有什么反应,甚至还走到M记里买了一个素食汉堡。傍晚我们在某个广场分别,Pankaj和他的朋友第二天要去斯塔万格(Stavanger),而我则要留在卑尔根,希望他们一切都好。
第一天晚上我与Alberto站着聊天,他说他从来没有跟中国人聊过天,他对中国人的所有了解都来自于附近的中国商店,他只觉得中国人似乎很沉默,然后working crazy,然后我就试着解释了一下这些现象。不过这并不是重点,重点是我们聊天的时候有一只蚊子飞来飞去,我们都在骂damn mosquito,然后开始抓蚊子,Alberto成功把蚊子抓在了手里。当他发现这只蚊子还活着的时候,他说 “Let’s save this life”,然后就一路小跑打开窗户把蚊子给放了出去。说实话,这是对我冲击挺大的一件事,从前我一直以为这种事只会出现在艺术作品里,我真的从来从来没有想过要这么做,直到今天我还经常想起这件事,想起Alberto的举动。
第二天晚上Alberto和Dario都在,我们聊了一会关于中国的事,依然是关于现状,关于计划生育,关于GFW,关于我们的隐私。特别搞笑的是Alberto去上厕所了,我跟Dario就开始瞎扯,他说自己是物理phd,我马上就说那你一定知道Richard Feynman吧,他很惊讶地问我怎么知道Feynman的,他说“not a lot of people know Feynman”,我说是某个教我的professor告诉我的。我们聊了很多关于Feynman的事,包括他如何不屑于诺贝尔奖,包括费曼讲义如何使Dario获益。后来Dario刚说完“You know Feynman says physics is like sex…”,Alberto刚好走过来说“Are you talking about sex? Ah, woman, it’s always about woman”,于是我跟Dario相视一笑。
BYel='\e[0;33m';function m(){m_path=~/Music/song_num="$(ls$m_path|wc-l)"# Total number of songstimestamp=$(date +%s)# Timestamp as millsecond, e.g. 1523305473song_index=$(($timestamp%$song_num+1))# Generate a random song indexsong="$(ls$m_path|sed-n"$song_index"p)"# Get the name of the certain songecho-e"${BYel}$song"afplay"$m_path$song"# Play it!}
BYel='\e[0;33m';function m(){m_path=~/Music/keyword="."# default: play all the songsif[-n"$1"];then# play songs by keywordkeyword="$1"fisong_num="$(ls$m_path|grep-i-e$keyword|wc-l)"# Total num of qualified songsdummy1=$((RANDOM))timestamp=$(date +%s)dummy=$(($dummy1*$timestamp))song_index=$(($dummy%$song_num+1))# Generate a random song indexsong="$(ls$m_path|grep-i-e$keyword|sed-n"$song_index"p)"# Get the name of the qualified songecho-e"${BYel}$song"afplay"$m_path$song"&}
function m(){music_by_keyword$1&}BYel='\e[0;33m';function music_by_keyword(){m_path=~/Music/keyword="."# default: play all the songsif[-n"$1"];then# play songs by keywordkeyword="$1"fisong_num="$(ls$m_path|grep-i-e$keyword|wc-l)"# Total num of qualified songswhile[ 1 ]dodummy1=$((RANDOM))timestamp=$(date +%s)dummy=$(($dummy1*$timestamp))song_index=$(($dummy%$song_num+1))# Generate a random song indexsong="$(ls$m_path|grep-i-e$keyword|sed-n"$song_index"p)"# Get the name of the qualified songecho-e"${BYel}$song"afplay"$m_path$song"waitdone}
当你费尽心思找到了足够多的人才(A player)时,你会发现他们真的能够很好的互相合作,因为他们之前从来没有得到过这样的机会(与这么多优秀的人一起共事)。他们也不会想要和水平不够的人共事(B and C player),于是就会形成一种自我监督,他们只会招募更多的人才。招募一些好的人才,然后这种情况就会在公司中传播,最后公司里就会充满了好的人才,这就是Mac团队的样子。
主持人问到乔布斯你怎么知道哪个才是正确的方向:
You know, 这最终取决于品味(taste),取决于你要挖掘人类最好的那些东西,然后尝试着将这些好东西放到你正在做的产品里面。毕加索说过能工摹形,巧匠窃意(good artists copy, great artists steal),而我们总是在“无耻”地偷窃伟大的想法。我认为Macintosh之所以伟大的一部分原因在于,开发Macintosh的人是音乐家们、诗人们、艺术家们、动物学家们和历史学家们,他们又碰巧是世界上最好的计算机科学家,如果这些人不从事计算机科学,他们就会去做其他领域的美好的事情。我们努力想要将我们在其他领域看到的最好的东西放进这个领域里,如果你的眼光非常狭窄,我不认为你能做到这一步。
Disrespect是我的父亲教给我的众多东西之一。他翻到New York Times上的一张图片,图片上也许是个什么将军,他就会说“看看这些人类吧”,他说,“这个人就站在这里,而其他人都在向他鞠躬。他们有什么区别?为什么其他人都要向他鞠躬?只是因为他的名字与他的地位罢了,因为他身穿的制服,而并不是因为他做了什么了不得的事情。”
我是一个很喜欢回忆的人,回忆使我感恩我所拥有的一切,使我感恩我曾经遇到的人,回忆也使我将从前发生过的那些事连接起来,帮助我更好地理解当下。我最近很喜欢的一种表达方式是,“如果当初没有XXX,就没有今天的我”,这句话也许不是绝对的,但我相信它在我的人生中99%的时间里都是对的。但是我又很怕有人误解我的这种说法,我害怕有人觉得,“既然没有XXX就没有你的今天,那XXX一定对你来说很重要咯?那你一定很感谢XXX咯?”,所以我觉得我有必要解释一下这个说法。
举个例子,在我小学的时候,有个退休的老师想让他的孙女去考一个新建起来才三年的初中,但是又怕她孤单,于是就想多叫几个成绩好的人一起去,我也是其中之一。在那个时候我根本没听说过这个学校,但是我还是抱着玩一玩看一看的心态去了,结果就是她没考上,我考上了,而且去了。去了那个学校被证明是我生命中最重要的决定之一,我在那里遇到了很好的人,受到了很好的教育,使我受益至今。现在想来,如果当初没有那个老师,我甚至都不知道有这个学校,在这个学校学习也就无从谈起了,这样看来,确实是“如果当初没有XXX,就没有今天的我”。
但是是否当初有了XXX,就毫不费力地有了今天的我呢?并不是。当初那个老师给我提供的,是一个分支,就像程序里的一个if语句,而那个沿着那条分支努力走下去的人,是我自己。那个if语句虽然很重要,可是它终究也只是一个if语句罢了,最终还是得我自己来evaluate那个if语句,最终还是得我自己来书写if语句之后的东西。没有了那个if语句,我肯定不是现在的我,但是如果沿着另一条路,付出相同的努力,我的人生会更好还是更烂,其实我也说不清。所以说,“如果当初没有XXX,就没有今天的我”这句话,只是在陈述一个事实,我感谢当初给我提供那个人生选项的人,不过也仅此而已了。
思考题:“没有共产党,就没有新中国”是什么意思?
-- 17:28, May 26, 2020
勇气很重要,这些年来我看到很多人——其实大家都有着差不多的智商,接受着差不多的教育,但是大家的轨迹却不尽相同,我可能是其中过得还行的那一个。我觉得很重要的一点就是,在很多时候我比较勇敢,在发现机会之后愿意主动抓住这些机会。勇气有很多种,此时在我脑海里盘旋的一种勇气叫做直面过去的勇气。比如说,像很多人一样,我也搭过很多次博客,而且每次都因为各种各样的原因而停止了。其中一个重要的原因就是没有勇气直视自己从前写下的文字,觉得幼稚,觉得愚蠢,觉得暴露了这些从前的文字让自己感到羞耻。不过现在的我更倾向于留下这些文字作为记录,过去的幼稚不应该成为一种羞耻,我想记住那个幼稚的自己。更何况,世界上还有许许多多的人,他们正处于我从前的那个幼稚的水平,或者正朝着我眼中所谓的幼稚水平前进,我希望我能用这种方式帮助他们。
-- 17:59, February 21, 2020
老师让我总结一下我的Master申请,我想了一两分钟,然后说:
从实力来说,我觉得自己很强;从申请材料来看,我觉得自己很弱;从申请结果来说,我觉得自己很幸运;从努力程度来说,我觉得我真的挺一般的。
当时想着自己回复得太着急了,深思熟虑一下应该能想出更好的回复的,但是当冷静下来之后,却感觉这四条似乎也算是完整地概括了我的申请季了吧 ;)
-- 20:48, April 19, 2018
> A number of these phenomena have been bundled under the name "Software Engineering". As economics is known as "The Miserable Science", software engineering should be known as "The Doomed Discipline", doomed because it cannot even approach its goal since its goal is self-contradictory. Software engineering, of course, presents itself as another worthy cause, but that is eyewash: if you carefully read its literature and analyse what its devotees actually do, you will discover that software engineering has accepted as its charter "How to program if you cannot.". -- Dijkstra
我的本科实行计算机大类的制度,简而言之,大一上学期到大二上学期大家都没有明确的专业,都叫做计算机大类,等到大二上学期结束,大家就会开始选择自己的专业:计算机科学,软件工程或者网络工程。当年的我觉得自己真是好喜欢写代码啊,软件工程这个专业一听就是写代码的吧(然而我连培养方案都没认真看懂),于是我毫不犹豫地选择了软件工程专业。现在临近毕业之际,看到Dijkstra的言论真是哑然失笑,他说软件工程是穷途末路的领域,其本质可以总结为How to program if you cannot。他的言论解答了我大三时的困惑,当时我在上“软件工程经济学”,“软件项目管理”等课程的时候就会觉得,wtf我为什么要上这些东西。这种东西根本就没什么好教的,好的程序员之间就是会互相合作的,你动用各种方法去强迫他们是很可悲的。这个观点被我后来在网上看到的抱怨所验证,像敏捷开发scrum这种东西,在中国的业界成为了压榨程序员的一种手段。
个人来说,我觉得软件工程在现实中的语义可以概括为:如何高效地驱使一群平庸的程序员在一起合作并产生最大的效益值<del>,手段往往是残酷的</del> :)
-- 00:36, April 8, 2018
有些人到了自己人生的某个阶段(e.g. 20岁)就会开始觉醒,认识到自己与不同阶级同龄人的差距,并感叹自己之前的人生过得多么“不懂事”,其实很多时候,这种事都无法改变。简而言之,当你还小还没有能力没有经验站在一个高度为自己写下一个十年二十年计划的时候,你的父母是唯一能为你做这些事的人,如果他们没有做,那么你的人生就会过得非常随机。随机的意思是,你20岁之前的人生会轻易地被一些事所改变,你所遇见的朋友、老师、恋人,会在很大程度上左右你的人生,而年幼的你并不知道如何去遇见更好的人,或者甚至无法分辨什么才算是好。从系统的角度来看,这一点也不Robust :)
> There is only one heroism in the world: to see the world as it is, and to love it. -- Romain Rolland
-- 10:50, March 24, 2018
曾经我以为编程能力就是一切,写得一手好代码就可以在这世界上赢得很多的尊重,曾经是指在我大二大三的时候;后来我失望地觉得编程能力只是一个微不足道的东西,因为人们更倾向于用可标化的东西来衡量你,GPA、TOEFL、GRE、Paper...我觉得我都还没有得到展示我自己所谓编程能力的机会,就被拒绝了,后来指的是我在准备申请Master的那段时间;如今我认为我终于正视了这一切,编程既谈不上多么高贵,也说不上多么卑微,它只是一个普通的技能,和木工、电工、摄影、厨艺都没有什么区别。我对它有过的热情以及失望,都来源于我对它的迷恋,而这本质上和爱上一个小姑娘并没有什么区别 :)
-- 21:30, March 7, 2018