读《我编程,我快乐》

全书200多页,共5章,作者Chad Fowler是位开发者,也是位音乐人,萨克斯演奏者。让我想起那位同是musician & developer的Derek Sivers。

一个核心思想是,把自己的职业当成一门生意,你的产品就是你能提供的服务,而技术是你服务的基础,作者从四个方面讲述了如何在计算机行业快乐地编程:P

研究投资执行市场,然后循环往复。

记录下书中一些有感触的建议,同时附上个人理解,可能有些混乱。

研究-选择市场

这一章里面提到了技术的选择,Be公司的BeOS,想到当下区块链的大热,竟然有种历史重演的错觉,当然区块链不会消亡,它还没有真的成熟起来,看好它的未来。

你无法在价格上与之竞争,但你可以在能力上与之抗衡。所以尽量选择从事高端层面的开发工作让竞争从价格转到能力上。尽快结束你的低水平建构,尽快脱坑。

通过思考,思考,而不是一味的盲从,选择你要投入时间在哪种技术,哪个行业。

软件工程师不能只会开发软件,应该要成为这个行业领域的专家,熟悉并融入业务领域。

做乐队中最差的乐手,The people around you affect your own performance, choose your crowd wisely.

找到你钦佩的开源项目,参与其中,学习优秀的代码风格和功能实现,通过行动向高级程序员学习。

优秀的程序员之所以寻找变化和多样性的工作,是因为他们喜欢学习新东西。或者是因为他们很清楚,想成为更加成熟,更加全面的程序员,就必须去学新的技术,在新的工作环境下,获取新的经验。

学习新的语言,投资你的思维

成为一名通才,generalists are rare, and therefore, precious.

你能在多广的范围内发挥作用,决定了你能产生多大的价值。要想在这个行业站稳脚,必须做一个多面手。「这跟此前一直被提倡的fullstack理念有共通之处」。

成为专家,更准确的说,你要在一个领域精深,但这还不够,你需要在多个维度上进行拓展,不一定每个维度都优秀,但都要懂。

何为专家?可以处理高水平的抽象,同时了解那些实现高端抽象的底层细节。【这需要能静下心来钻研,更需要时间的积累】

考虑开源的技术,不要选择商业性质的特定技术。我记得湾区日报中曾有个类似的建议,提到的是选择开发平台的重要性,那些曾经选择做flash,黑莓手机的程序员就比较惨了,而web平台最保险,它是开放的,不会随着哪家公司的消亡而消亡。

我永远不会用自己的技术来定位自己,而是用我已经做过的和我将要做的事情来定位自己,技术只是一种做事的方法。「深以为然」

这章后面附上了一份GitHub cofounder Tom Preston-Werner写的文章,有关GitHub创建和他对于职业的选择,14年4月的时候,他离开了GitHub,拥抱了虚拟现实。

我在他的blog上找到了原文:How I Turned Down $300,000 from Microsoft to go Full-Time on GitHub

结尾那句说得真好:When I’m old and dying, I plan to look back on my life and say “wow, that was an adventure,” not “wow, I sure felt safe.”

在产品上投资

想一想学习或者工作中你不完全懂的问题,问自己两个问题:它是如何工作的为什么会发生这种情况

在你的工具箱中挑选一种非常重要却经常被忽视的工具,每天花一点时间去学习这项工具的新知识,利用一系列的“如何和为什么”的问题来深入研究它的核心。

了解你公司的财务运作可以让你做出有意义的转变,而不是茫然无知地专注于某一件事情,却主观地认为这样就是对的。

寻找让你可以信赖和钦佩的人,良师益友可以帮助你做出职业的导向,帮助你磨练技术。但首先,学会自己做自己的良师益友。

教是最好的学。

帮助别人是一种能力,也能让你收获满足和快乐。

练习,练习,再练习,practice at your limits。

选择一个程序,试着限制你的编程,这种自我限制的方法是训练思维敏捷和提高即兴编程的好方法。

从实战及书籍中学习软件开发的方法论。

选择一些开源项目的源代码,去阅读,以批判的视角去看,培养自己的代码品味。

选择一个项目,像读书一样研读并且做笔记,归纳出好的方面和坏的方面,发表一篇评论,至少找到一个你可以借鉴的技巧或者模式,再找到至少一处缺点,提醒自己在开发软件的时候,不要犯这类错误。

自动化,思考你日常工作中需要重复做的工作,为它写一个代码生成器。

执行

创造价值。

时时翻看你的todo list,找到那些夭折的想法,试着付诸行动。

每天都有可汇报的成绩。「这个其实挺难的,有的时候,一个bug可能就会让你困一天,没有任何进展,那种感觉很挫败,但是又不得不继续处理。还是放宽点,每天都有进步即可。」

养成记录的好习惯,思考工作中哪些部分可以自动化,动手实施。

「我养成了每天都写工作日志的习惯,但是我发现往往手上的工作就已经够忙活的了,没有过多的精力去想,这个可以怎么怎么优化?更多的是,这个要这么实现?」

你为一个公司工作,如果你不能为这个公司创造真正的价值,那么公司在你身上的投资就是浪费。

ask, “Was I worth it today?”

主动与你的团队成员或者领导分享你所做的事情,为你的代码加上注释。一定要懂得分享

如何解决那些技术,沟通或者项目管理中出现的错误?

  • 发现问题后第一时间提出,不要企图隐瞒错误
  • 接受批评
  • 提供解决方案
  • 寻求帮助

通过练习,记录自己恐慌时的反应,在下一次恐慌来临时,学会分析自己对于事物的反应。

遇事能冷静沉稳,是一种能力,这种能力是可以通过反复练习培养的。

每周写下你本周的工作结果汇报和下周的工作计划。

阅读好的代码,分析别人的解决思路,学会模仿,而不是粗略地走马观花。

即使是失败和抄袭,也能让你进入良性循环,至少你见过,然后知道如何处理此类问题。

这章最后附上的是Patrick Collison的文章《失败和模仿》,看完第一感觉就是这人不简单,特意去搜了下,果然,是位牛人,05年,23岁的Patrick和自己的brothers「他的这两个弟弟也是牛人」就成立了Stripe公司,16年,Stripe获得了CapitalG和General Catalyst Partners的投资,公司估值92亿美元,他们仨也因此成为了全球最年轻的self-made billionaires。

这是一场无节制的掠夺,当你全心全意去汲取各种各样的技术时,你会找到一种方法将这些技术以一种新的方式结合在一起。「这真是盗亦有道的高级境界」。

市场-推销

最好的产品不一定就能在竞争中取得胜利,市场宣传更为重要。

不要忽视感觉,不要忽视他人对你的感觉,以人为镜。

学会有效沟通,不要用专业的术语来显摆自己的学识,有效沟通的前提是平等与尊重。

培养写作技能。you are what you can explain.

抓住face to face 的沟通机会。

人类的天性是喜欢与人一起工作。「我想这是一种归属感或者所谓的安全感吧?」

加强沟通交流,和同事,上级以及客户。

准备好你的“电梯演讲”:最近你在做什么?这项工作的意义是什么?

带着任务去上班,并确保别人知道你在做什么。

让人们听到你的声音。

参与才是最大的变量

参与开源项目。

主动建立联系,主动与你敬仰或者愿意向他学习的人交谈,最开始可能会让你觉得不舒服,事实上,正是因为这样做会让你感觉不舒服,所以你才要迈出这一步。

保持技术领先

这一章看得人有点心惊。

今天辛苦所学的技术明天可能就过时,就好比一场你不得不参与的赌博,如果旁观,那就是被动,一定会输,必须下注,可是下注下的不对,还是输……输完还得继续,赌注是什么?你的时间和精力,这都是最宝贵的……

我擦,人生博弈论……怎么破?

作者给出的建议:每周找出时间来研究尖端科技,每周至少找出2个小时的时间来研究新科技学习相关技术,并动手尝试。制作简单的应用程序,将你正在以当前技术做的项目,用新技术来做出新的原型版本,来理解它们的不同之处,以及新科技能够做些什么,在你的日程安排中加入做这项工作的时间,一定要按时完成。

给自己做一份职业蓝图。

南印度抓猴的故事很有启发性,猴子过于看重米的价值,而丢失了自由,甚至生命。价值僵化的例子让我想到了《beyond feeling》里面不愿意改变自己想法的人,一味觉得自己的想法才是正确的,他人一旦提出与其对立的想法就被归于异类,这其实也是一种思维陷阱,它让个体拒绝改变,而拒绝改变是可怕的。

找到你的捉猴陷阱 —— 你的价值僵化是什么?在你完全不知情的情况下,哪些价值观在引领着你的行为?

找出你最讨厌的技术,并用它来完成一个项目。「呃,我没有最讨厌的技术……至少暂时没有……」

制定好你的职业目标,在实现的过程中根据情况不断改进,从实践中学习。

每天进步一点点「其实真的做到每天进步一点点,并不容易……」

最重要的一点不是你以什么为生或者你得到了什么,重要的是你如何接受这一切。

一点感触

看完最大的感触就是作者能将自己学音乐时所用的技巧,比如练习,跟哪些人一起演出,如何在音乐界出名等等,嫁接到计算机的世界,而且很巧妙的是,道理都是通用的,合理地应用这些规则,让他在计算机的世界里收获了成功。可见,假使一个人能在一个行业做的不赖,换一个行业,也一样会是个高手。

既然看完了书,就得有所改变,抽空少看电影,多看看源代码吧。

最后,用Patrick的话收个尾:

如果让我来选择两种能使我们取得进步的方法,我会选择失败和模仿。