课程笔记 - Influencing Others

自己差不多也工作了快十年了,越来越感觉自己在所谓的Soft Skills上面欠缺太多,一方面是自己性格的问题,不善于交际,和别人打交道的时候总有些犯怵。但是我想通过学习和不断的练习,应该能够有所改变。于是最近开始在lynda.com上面开始学习一些关于这方面的课程,感觉如果只是看视频,似乎记住并能够运用于实际中的少之又少。针对这个问题,我想还是在看完一门课程的时候写一点课程笔记,这样可以便于以后参考和练习。这次的课程是Influencing Others.
课程第一节是作者提到不同人对不同的事物可能有这完全不同的视角,要去影响别人,就需要从别人的角度去看待问题,在实际中如果只是从自己的角度出发,是不会得到自己想要的结果,因为大多数人不在意别人的视角。然后作者也提出研究表明每个人都可以变为更好的影响者,从今天做起。
第二节着重于具体的影响别人的方法,简单罗列一下如下:

  • Provide rational analysis. 这是最明显的方法,就是提供数据,逻辑,分析等等。这对于影响别人是必要的但往往是不充分的。在使用这种方法的时候要注意和别人的交互,不要固执于自己的看法
  • Cite credible source. 这是应用可信的来源来增加自己的说服力,包括研究机构,相关方面的专家等等。
  • Reference legitimate policies, procedures or standards. 这个是影像相关的法律规定,流程和标准等等来帮助说服别人。这里要注意方式方法,先让对方认同这些规定标准。
  • Establish urgency or scarcity. 这是广告里面常用的方法,就是所谓的走过路过不要错过。
  • Demonstrate pain and gain. 通过分析做和不做对对方的利害得失来打动对方。
  • Build alliances and coalitions. 所谓的build your network before you need it.
  • Use social proof: 展示别人在做类似的事情,能够更好的影响人们去做,可能是所谓的从众心理。
  • Initial reciprocation: 给你希望影响的人展示善意,提供有意义的价值,多数人会回报以善意
  • Encourage commitments and consistency: 设法让别人做出承诺
  • Presence striking comparison and or contrasts: 也是做和不做的区别,建议最好先说负面的再说正面的,这样效果更好让别人更容易接受
  • Add impact to your ideas: 让你的主意更加简介,有针对性会增加说服力
  • Align with shared value, principle, or purpose: 和公认的价值,原则一致
  • Connect to strategy or high-level goals: 和公司团体的高级目标一致
  • Build rapport, relations and trust. 善于聆听,了解你的目标和他们的做事方式
  • Like and be likable: I’m happy to be here and I’m happy to see you, 寻找彼此的共同点,赞赏他们的优点,并告知他们你在提高一项正面的技能,通常多数人在这种情况下更乐于帮助。
  • Request help or advice: 需求简单的帮助,让别人更容易say yes,并表达感激。
  • Be influenceable: 开放的心态,不要试图去赢得争论,让别人知道你们的贡献和对你的积极影响。
  • Turn objections into actions: 以开放的心态对待拒绝,理解别人的角度,单方面的希望和推动是无用的,从对方的角度来寻找好的方法。
  • Great things are done by small things together: 所谓的积少成多

最后一节,作者指出相对于得到直接的结果,更重要的是建立长期的关系和信赖,提升自己的reputation, From influence to inspire.

读书笔记(七) Soft Skills: The software developer’s life manual

接着读书笔记,这是本书的最后一章,Spirit.  “If you do not conquer self, you will be conquered by yourself”,算是本书的总结。本书的前六章涵盖了很多话题,从职业发展的建议到自我的推销,从学习的技巧到专注的力量,从财务谈到了健康,包括了很多很好的建议,那么接下来的关键就是如何把这些建议落实到实际中去,空想是毫无益处的,但是思想是改变的起点,所谓思考决定行为,行为决定习惯,习惯决定命运。本章探讨了精神的力量。
首先是作者强调了正面思维(positive thinking)的重要性,幸福课中也提到了同样的观点。有实际研究的数据表明正面思维能够带来正面的影响,包括友谊,婚姻,收入,健康和寿命等等。作者建议通过改变自己的思维方式,多关注事物的正面,冥思,适当的娱乐和读书都有助于建立正面的思考方式,这和幸福课的建议也是非常一致的。
在建立了正面的思维方式之后,那么需要建立一个正面的自我印象。自我印象的形成很可能是在小的时候,甚至是被无意之中的事情影响,改变自我印象并非易事,但是可能的。关键是在于建立一个自己理想中的榜样,并设置为自己的目标,分析自我印象中的负面因素并用实际行动来改变。我是怎么看待我自己的呢?善良,努力,勤奋,也包括胆小怕事,缺乏决断力,不善社交。我想就从胆小怕事开始改变起来吧。
然后作者讨论一个有趣的话题,程序员和爱情。作者的看法是爱情是一个追逐与被追逐的游戏,你需要在其中找个一个平衡点,自信是非常重要的,不要害怕失败。有的时候这是一个数字游戏,在于你尝试了多少次,这个世界有足够多的人,再奇怪的人也能找到喜欢你的人。多希望我在很多年前能够看到这些建议 :).
接着作者给出了他的建议的成功书籍,其中包括The war of Art,讨论人性中阻挡自己成功的常见因素。How to win friends and influence people,此书改变了作者对于激励别人的认知,从惩罚驱动到意愿驱动,就是让别人自己想去做才是关键。还有别的一些书籍在此不一一列出,我想可以加入自己的阅读目录,平均两个月一本来完成。
下面一节作者讨论对于失败的态度,俗话说失败乃成功之母,但我们也要意识到失败不是defeat, 失败不是世界末日,这样才能克服对于失败的恐惧,积极面对失败是成功的关键. “Most great people have attained their greatest success just one step beyond their greatest failure”.
最后,作者提到本书的建议都是他一家之言,希望作者根据自己的实际情况加以采用。
回到我自己,其实这本书大概在一个月前就已经读完,基本上都是在公司班车上读的,以前别的书或者课一般也就是一个读书总结,而这本书我写了七篇。首先是作者的很多观点我很有共鸣,颇有读之恨晚的感觉,然后是也和我的职业非常相关,很多建议具有非常强的可操作性,作者用的语言也比较平易,没有太多的生僻单词,每一节比较短也有利于在短的时间内读完。如果你也是程序员,也感觉生活有些迷茫,那么强烈建议你也读一读此书。
在每一节作者都有个Call for action, 我基本都忽略了,在这里我想给自己列出几条,有些已经在做,有些还没有开始。首选是坚持锻炼身体,注意饮食,第二是建立正面思考的习惯,改变自我的某些负面形象,人是可以改变的,第三是坚持学习,成为终身的习惯,第四是坚持写博客,还有就是做事情的时候要专注。
勉之勉之!

读书笔记(六) Soft Skills: The software developer’s life manual

继续读书笔记,程序员生活指南。这一次的主题是Fitness(健身),“The human’s body is the best picture of the human soul”。健康的重要性不言而喻,特别是对长期坐着工作的程序员来说。健康会增加人的自信,而自信是成功的关键要素之一,同时锻炼也能够增加大脑的活力,提高工作的效率。
首先健身要有具体的目标,根据个人的情况,可能是减肥,增加肌肉,增强力量,增加肌肉持久力,或者是更善于某种运动等等,之后是置顶具体的计划并纪录自己的进度,最终融入自己的生活习惯之中。对于我来说,我想更多的每天适量的运动,保持身体的健康,每天一万步,纪录下来达到季度平均一万步,年度一万步。
然后作者从卡里路的定义出发,讨论了减肥这个话题,这对我来说倒不是个问题,所以简单略过。简单来说体重就是摄入的卡里路和消耗的卡里路之间的关系,在这个过程中要估计食物所含的卡里路,和自己每天的消耗。接着是关于肌肉相关的健身,不同的目标,比如增大肌肉,增强肌肉,或是增加持久度,锻炼的方式是不一样的。
下面一节是关于跑步的,跑步的确是最简单最为有效的健身方式,对于心血管的健康(cardiovascular health)很有好处。开始的关键是逐渐增加长度,养成习惯,我想我的每天一万步的计划还是不能完全靠走路来完成,考虑一周有三次的跑步。
最后两节作者讨论了一些健身的Hacks, 比如在工作中使用Standing desk和Treadmill, 这个公司都有,我可以考虑每天站个一个小时,或者在阅读时间去跑步机上慢走。吃饭也是个问题,记得作者提过做饭也是很浪费时间的,作者在这里推荐Plain nofact Greek yogurt, 肉类可以用一些冰冻的鸡肉比如Teriyaki肌肉,这样做起来也快。这里我应该增加吃酸奶,每天一杯吧。然后作者提到了他常用的一些有用的辅助健身的设备,比如计步器,体重仪,无线耳机和健身相关的Apps。我现在是用iPhone当作计步器,每周纪录一次睡觉前的体重,应该买一个无线耳机,这样跑步时候可以用。
总的来说都是一些非常实用的建议,我目前的计划还是每天一万步,稍微的一点改变是一周三次跑步,估计还是得用跑步机来完成,肌肉锻炼计划暂时还没有,时间上不好安排。每天工作的时候可以站着一个小时,阅读的时候用跑步机慢走。饮食上改变对鸡肉的排斥,多吃点白肉,每天一杯酸奶。

读书笔记(五) Soft Skills: The software developer’s life manual

继续读书笔记,这次的主题是Finanical(财务),这对任何人都是生活的一个重要部分,当然包括程序员。
第一个话题是关于如何对待自己的Pay check的,美国这边以支票来支付工资非常常见。作者建议避免短视,为了达到财务自由,必需要理解投资,可以从Assets和Liabilities角度,就是所谓的资产和负债角度来理解。
在具体讨论各种投资的选项之前,作者讨论了工资沟通的一些基本技巧。首先是如果你能够很好地使用营销策略推销了自己(Market yourself),并建立了自己的口碑(Reputation),就是在第二章里面讨论的内容,那么你在工资沟通中就会提前占据非常有利的地位。这是一个简单的道理,难在于实际中的坚持。然后是你主动找的工作,是内部员工推荐,还是HR主动联系你的,都会影响你在沟通的位置。之后在具体沟通中,作者建议让对方先出数字,”First person to name a number loses”,如果你被要求先提出你的工资期望,那么可以转换问题来问对方的预算范围。如果对方问你的工资,那么或者委婉拒绝,比如和现在公司有保密协议,或者把所有的奖金福利等等都要加上给出一个相对的变化的范围。在拿到Offer之后,一定要给出一个Counter offer, 如果对方接受了,那么就是一个达成一致的时机了。
在此之后,作者讨论了所谓的期权(Options), 期权指的是一种在一定期限内的交易选择权,也就是赋予了持有人一种按照约定价格买或卖的权利,就是所谓的Buy Options和Sell Options。作者简单介绍了期权的原理,并指出有很多复杂的组合情况,可以用来套利或者避险。这里作者推荐了”Profiting with Iron Condor Options: Strategies from the Frontline for Trading in Up or Down Markets” 这本书,考虑加入我的书单列表。
接着作者讨论了他最喜欢的投资方式,房地产。作者认为投资房产然后出租是一种很好的 Asserts,首先是房租能够跟得上通胀的幅度,而房价本身也会随着通胀而上涨。作者建议使用Property management来帮助自己处理房子出租的事情,大概是10%的房租的代价,但是如果你要投资多套房子同时能够做自己的全职工作的话,这是必需的。
然后作者用了专门一节来讨论退休计划,首先是计划自己大致需要多少钱和怎样的投资才能够退休,然后是投资401K, IRAs等退休账号,二是建立自己的提前退休帐号或者变富 :). 作者建议多挣钱,少花钱,这样可以尽快地退休。
之后作者强调了避免债务,因为通常考虑到利息,这会严重影响你的财物自由计划,然后采取行动去减少债务。但作者也指出并非所有的债务都是坏的,取决于你用这个债务能做什么,是否可以给你带来更多的收益。
最后一节,作者专门介绍了他是如何在33岁退休的。首先所谓退休并非是说什么事情都不做,然后财务上的自由,可以去做自己更喜欢的事情而不用一位财务的原因去做自己不喜欢的事情。说来惭愧,我也快33岁了,但是离这个财务自由实在是差的太远,甚至都还没有一个具体的计划。作者认为只是靠工资,哪怕是比较高的工资也是难以做到这么早退休的,而作者认为他的诀窍在于一是省钱,二是买房出租直到房子出租和房贷相比能够带来正的现金流,作者也认为他有运气的成分在得到Pluralsight的工作机会,而这个机会正是来自己他自己坚持不懈的Market himself的各种努力下所建立的口碑有关,同时他创建了最多的课程, 工作非常努力(Hard work)。
总结来说,首先是要建立正确的投资理念,制定自己的退休计划,学习各种可能的投资方式,投资房地产并出租是个不错的选择。坚持努力工作,并坚持用市场的策略去营销自己,所谓”luck is preparation meets opportunity”,加油!

读书笔记(四) Soft Skills: The software developer’s life manual

继续读书笔记,这一章是关于个人生产力(Productivity),作者分享了他对于如何提高效率的建议。
最开始作者强调了专著(Focus)的作用,认为专著是效率的”Magic pill”。这让我想起了在课程总结 – Learning How to Learn 中提到的Focus Mode,我在日常工作中是有非常明显的感触的。有时候专著的时候会忘记时间,不会去看别的无关网站,不会去玩手机,效率的确很高。而如果不在状态的时候,通常会看手机,查邮件,或者和别人聊几句,基本完成不了什么任务。Focus的确非常重要,但却不是非常容易的一件事情。
然后作者介绍了他个人的Productivity Plan,首先是有计划,包括季度计划,月计划,周计划,这里作者使用http://kanbanflow.com这一网站结合Pomodoro技术来管理每天的具体任务。同时作者通过集中处理邮件,关闭手机提醒,退出聊天程序等等方式来确保自己不被打扰。最后作者也提出要适当休假,所谓一张一弛文武之道吧。
接着作者展开介绍了Pomodoro这一技术,其实在Learning How to Learn课程也推荐了这一管理时间的方式。说起来非常简单,就是25分钟的集中精力加上5分钟的休息,在完成多个Pomodoro之后休息15分钟,但却也非常有效。首先会强制你思考如何分解工作,并评估需要多少个Pomodoro来完成,同时也比较清楚每天自己达致能够完成的数目,长期下来可以大大提高自己工作量估计的准确程度。这里作者提醒不要过于追求每天完成Pomodoro的数目,能够完成10个就是非常可以的数字了。在我过去几周的实践中,10的确不容易达到,毕竟精力集中本身不是一件非常容易的事情。
之后作者对周期重复性工作的建议是建立每周的配额(Quota), 比如每周写一篇博客,这里的周期可以是一周,也可以是一个月,这是一种把需要长期坚持的工作化为周期性的Routine,从而克服自己的惰性。
下面作者提到了责任心(Accountability),责任心是一种内在的动力去促使自己完成任务,另外一种做事的动力来自外部,比如惩罚和奖励。通常内在的动力远比外在的有效,所以让自己高效的重要前提是自己对自己负责,我想这和古人的“君子慎独”有类似之处,就是自己哪怕是在没有外在监督的情况下,仍然能够按照高标准去要求自己。
接着一节作者讨论了Multitasking这个话题。总的来说作者认为Multitasking在大多数情况下都是不好的,作者建议Batching,就是把类似或者重复的事情,比如回复邮件,放在一起在一个集中的时间集中处理。有少数情况下Multitasking可能有效,比如在写作时候听音乐,或者在跑步机上走路的时候看视频学习。我倒是的确在写代码时候听音乐,似乎人的大脑能够并行处理某些任务,比如音乐和思考,物理运动和学习等。
在讨论高效率的同时,作为人难免会感到倦怠(Burnout), 在是一种很自然的现象,而应对之道,在于首先要认识到Burnout不是终点,而是自我激励和兴趣会有个自然的下降过程,而最低点往往是倦怠发生的时候,就像是撞到了一堵墙,但如果坚持下来到达墙的另一面,那么兴趣激励和结果都会有质的飞跃。这个图片让我想起来在前两家公司入职的时候都看到的一个图片,就是Morale曲线会在3到6个月达到一个低谷,然后跨过去就也是质的飞跃。看来人的兴趣终有类似之处。

在讨论完Burnout之后,作者开始分析高效率的最大的敌人之一,就是浪费时间。这里有一个数字就是美国人平均每周在电视上花费的时间是34个小时。这是一个让人恨惊讶的数字,毕竟一周的工作时间也就只有40个小时,作者认为电视不仅是浪费时间,而且会影响人对问题的看法,让你失去对自己思想和行动的控制力。这个建议对我无效,因为我很多年不看电视了,除了回国在家的时候偶尔看看。电视之后就是社交网络,包括Facebook, Twitter等等,当然对于华人还有微信。这里作者的建议是使用Batching的技巧在集中的时间来上社交网络。之后还有就是不必要的会议,做饭,玩游戏和Coffee breaks,似乎现在的我都没有太在这些方面浪费时间。作者建议要纪录自己时间的使用情况看看到底自己的时候是否充分利用,如果没有那么是浪费在什么样的地方,再寻求应对之法。我想我可以在使用Pomodoro的同时,纪录下一些非工作活动的时间。

接下来作者花费了两节讨论了规律(Routine)和习惯(Habit)的重要性。”We are what we repeatedly do. Excellence, then, is not an act, but a habit”. 所谓“思想决定行为,行为决定习惯,习惯决定性格,性格决定命运”。这里作者建议建立每天的具体的日程表,在同样的时间安排同样或者类似的任务,这也是战胜拖延的一种有效的方式。这里再次提到习惯,这和Learn how to learn的课程中提到的是一样的,习惯是由Cue, routine和reward组成的,认识到坏的习惯并下决心改变之,并养成良好的习惯,这是掌握自己人生的开始。

之后作者开始另外一个话题,就是任务分解的重要性,”When eating an elephant take one bite a time”. 任务过大是有害的,我们容易产生退却的心理,进而容易拖延。而分解问题首先是参考自己如何一步一步去完成这个任务的,然后按照每一步拆解,而复杂的问题通常都可以分解为更小的问题。这个是要看具体的任务的。
后面一章是关于努力工作的重要性。以前也经常听到”Work hard and work smart”。作者从内心深处认为努力工作是成功的必要条件,而仅仅”work smarter”是不够的也是不现实的。所谓“业精于勤荒于嬉,行成于思毁于随”大致是一个道理。
作为这一主题的最后一节是”Any action is better than no action”. 按照信达雅的翻译标准,我想就是”不怕慢就怕站” :)。其实行动的重要性,在古今中外都有论述。所谓行胜于言,Actions speak louder than words,自不用多言。
这一章节,我个人觉得是本书最有价值的部分,包括使用责任感作为内在的行动动力,努力工作,制定合理的计划,规律的生活节奏,合理分解任务,使用Pomodoro技术,改正不良习惯,避免无谓的时间浪费都是很好的建议。
最后,行动起来。

读书笔记(三) Soft Skills: The software developer’s life manual

“Education is what remains after one has forgotten what one has learned in school”

— Albert Einstein

继续读书笔记Soft Skills: The software developer’s life manual,第三章是关于学习的,作者开始引用了爱因斯坦的话。我的理解是教育的最重要目的不是知识本身,而是学习的态度和做人的方法。
作者一开始强调了学以致用,和学习中实际动手的重要性,他认为最有效的学习方法就是”Jump right and start doing”. 然后作者介绍了他自己的十步学习法,其中第一到第六步是准备阶段,而第七到第十步是具体的迭代学习阶段。

  1. “Get the big picture”, 通过初步的研究了解这个领域的大致内容,有个粗浅的认识。
  2. “Determine scope”, 学习需要有具体的目标,过于宽泛的目标通常都会导致失败。
  3. “Define success”, 有一个明确的可衡量的成功标准
  4. “Find resource”. 寻找靠谱的资料,包括通过Amazon寻找相关的图书并阅读评价,通过Google寻找相关的博客,Youtube视频等等
  5. “Create a learning plan”. 目标总是要化作为具体的行动才能成功。制定一个清晰的可执行的计划非常重要,可以参考图书的目录,或者看看别人的建议等等
  6. “Filter resources”. 时间有效,那么要把时间花费在好的资源上,那么筛选的工作必不可少。
  7. “Learning enough for get started”.  作者建议只要学到足够”Play around”的知识就应该去动手实践。
  8. “Play around”,这一步是具体去尝试自己学习到的知识,以摄影为例,这一步可能是探索你的相机,对照学到的各种设置。
  9. “Learning enough to do something useful”,这一步非常重要,是能够利用学习到的知识去做一些有用的事情,并和第三部的标准比较。
  10. “Teach”,作者认为去教别人是自己最好的学习方式,可以是写BLOG, 录制Youtube视频,演讲,回答在线问题等等

作者在介绍完他的十步学习法之后,提到这这是一个参考的过程,重要的不是步骤本身,而是背后的思想,就是一个适合自己的持之以恒的学习系统。
后面的几节讨论了如何寻找Mentor和成为别的Mentor, 并再次强调Teach别人在学习中的重要性。学习之后重要的事情是经常寻找自己知识的欠缺之处,比如注意日常工作中自己最耗时的部分,自己经常重复的部分,自己还没有完全立即的东西,或者是面试中没有能够很好回答的问题,都是寻找自己知识欠缺点的实用方法,找到之后在利用自己的学习系统去弥补。
其实关于学习,古人就有很多不错的论断,比如论语中关于学习的态度,“知之者不如好之者,好之者不如乐之者”,“默而识之,学而不厌”,“知之为知之,不知为不知,是知也”。关于学习的方法“温故而知新,可以为师矣”,“学而不思则罔,思而不学则殆”则是学思结合,勇于实践。学习的目的“诵《诗》三百,授之以政,不达;使于四方,不能专对;虽多,亦奚以为”则是强调学以致用。
所谓“活到老,学到老”,勉之!

读书笔记(二) Soft Skills: The software developer’s life manual

继续读书笔记,这次的主题是”Market Yourself”,所谓酒香也怕巷子深。
首先作者强调了向市场推销自己的重要性,很多优秀的程序员会在职业发展的某个阶段达到某个高度然后遇到瓶颈,作者说的是十年左右,作为已经工作九年的我颇有压力。在达到这个阶段之后,善于推销自己则是让自己与众不同的一个有效方式。然后作者介绍了一些主要的向市场推销自己的方式,包括写博客,录制教育视频,在杂志发表文章,写书,参加会议等等。
然后作者介绍了品牌由四个方面组成,包括” Message”, “Visual”, “Consistence”和”Repeated exposure”, 不知道该怎么翻译才好,信息,标示,品质和持续展示?作者建议应该就自己的专长来建议自己的个人品牌。坦白说这一节我不知道是否必要或者对我适用。
下面一节作者展开介绍了如何创建一个成功的技术博客。建立博客可以选择免费的比如wordpress.org, 收费的,或者是虚拟主机,这里作者强烈建议用一个自己的域名,这样的好处是如果以后迁移了博客,那么搜索引擎的结果不会丢失。然后成功的关键是持之以恒坚持和提供有价值的内容,为了推广自己的博客,可以经常去评论别人的类似网站并留下自己的链接,还有在现在的时代当然离不开在社交网络上分享。至于写作的主题,可以自己维护一个列表,每次突然有想法的时候就记下来,这样积累下来就不会发现无米下锅的窘境。这里我的建议是多读书,这个写个读书笔记也是一篇呢,呵呵。
之后作者专门用了一节来强调帮助别人,给予别人是帮助自己的非常有效的途径,”If you help enough people get what they want, you will get what you want”,这不禁让我想起来论语中的”夫仁者,己欲立而立人,己欲达而达人”,很多道理还是有普适性的。
接着作者叙述了如何更有效的利用社交网络,第一位还是如何给别人带来价值,然后是保持Active,比如每周都有更新。
下一节作者讨论了公开演讲,这是是增加自己影响力的非常有效的途径。不过呢,现实是很多人都很害怕公开演讲,据说投票比死亡还让人害怕。我也很不适应去做公开演讲,但似乎现在比以前脸皮要厚了些,没有那么排斥了。作者的建议是多做练习,可以对着镜子里面的自己开始,对着家人朋友,然后是组里面的,练习越多就越熟练,就适应了。这个我应该去开始尝试。
然后是写书和写文章,这个我倒是还没有考虑,还是一步一步来,先多写写技术博客,提高自己的写作能力先。
最后作者提到了一个重要的态度问题,那就是”Don’t be afraid of to look like an idiot”,用勇于面对和承认自己的无知。很多时候不敢去尝试的原因就是怕别人觉得自己像个白痴,而实际上很多技能都是练出来的,所谓万事开头难,而开始的不适应感是非常正常的,坚持住那么好的开端就是成功的一半。还有就是要”take small steps”, 所谓”Think big, start small”, 老子道德经中“合抱之木,生于毫末;九层之台,起于累土; 千里之行,始于足下”也有类似的意思吧。
勉之!

读书笔记(一): Soft Skills: The software developer’s life manual

上次提到了最近在看的Soft Skills: The software developer’s life manual这本书,感觉都还是非常不错和实用的建议,在有些地方还颇有共鸣。这本书共分为七个主题,每个主题大概10个章节,介绍了作为一个高效程序员的方方面面,这不是技术手册,是生活指南。今天来复习一下第一个主题关于职业发展 (Career)的一些建议。
第一个建议是要有自己思考,而不是简单去重复大多数人的选择。这里作者提到用不同的思维来看待自己的职业,那就试Business Mindset, 不是把自己看作一个普通的为公司服务拿工资的职员,而是把自己的职业发展看成为一个自己的Business, 工作是自己给别的公司提供的服务,而工资则是别的公司为自己的服务而支付的费用。这样职业的发展就是经营自己的Business, 进而去思考如何使自己的服务更有竞争力和建立关于自己服务的口碑。
第二个关于职业发展的建议,是建立明确的目标,并且细化到每个月,每周和每天的小目标,同时要记录实现的过程,反思和提高。
第三个建议是处理与人的关系。程序员这门职业绝对不是仅仅和电脑打交道写程序,实际上这门职业和大多数别的职业无异,是和人打交道,无论是客户需求的理解,团队的合作,开会,检查代码等等。所以学习和人打交道是非常关键的,这里作者推荐了那本著名的How to win friends and influence people书,这本书倒就是在我的书架上,需要仔细阅读并运用到实际中去。在这里作者提到了和人打交道的几个重要的方面,一是记住每个人都有被感觉到重要的需求,二是Never criticize, 指责是毫无用处的,在管理的实践中对正面行为的奖励比队负面行为的惩罚通常都更为有效。三是多换位思考,从对方的角度去理解问题,最后是避免争执,大部分不同的看法是不值得花费时间去争执的。
第四个是关于面试作者提出了不同于传统的建议,包括建立自己的口碑(Market yourself),比如写技术博客,而如果面试官读过你的博客,那么面试就会简单很多,然后是拓展自己的交际圈,主动去认识自己心仪公司的职员,这样得到Referal也会对面试有帮助。还有就是关于简历,作者建议雇佣专业人士去改进自己的简历,我倒不是非常认同。
第五个是理解提作为程序员的一些不同选择,雇员,咨询和创业,和它们各自的优点和缺点。接着作者比较了不同规模公司的优缺点,之后提到是专业化(Speciality)的重要性,这是让你和别人不同的重要的地方。
第六个是关于在公司晋升。建议包括积极Take responsibility, 包括注意被忽视的项目,帮助新同事ramp up, 把流程用文档纪录下来并保持更新等等。然后是Visibility, 包括纪录每天的活动给manager发Weekly report, 给组里面做Presentation,在会议中积极发言等等。接着是持续学习,不仅仅是学习关于软件的开发,还应该学习领导力,管理和商业相关的领域,并通过分享你学到的东西来提高自己的影响力。还有就是成为Problem Solvers,如果你能解决别人不能解决的问题,那么你就会成为公司中最有价值的人。最后是关于政治(Politics), 作者认为和别的比起来,这是最不重要的,仅仅通过此而得到的晋升是不牢固的,作者也提到政治是不可避免的,你至少应该知道在发生什么,什么样的人你应该避免接触,什么样的人你应该永远不打交道。
第七个是关于”Being a professional”,Professional有很多品质,包括有基本的原则,专注于做正确的事情,勇于承认自己的错误和无知,可靠,有责任感。成为一个Professional的关键在于形成良好的习惯,坚持做正确的事情,在必要的时候勇于说不,持续地寻找改进工作和自我的空间,永不止步。
接着的几个章节是关于辞职和开始为自己工作。包括做好经济上的准备,如何寻找目标客户,startup公司的大致发展轨迹。
最后作者强调了两个关键的态度,一个是”Fake it till you make it”, 这并不是去说谎和假装自己知道并不熟悉的领域和知识,而是一种面对问题的态度,一种发自内心的自信会让你更好地去面对困难的问题,或者更快地称为自己想成为的人。另一个是避免对技术的偏执(“Religious”),,这个其实很常见,比如网上常见的”Vi vs Emacs”, “C# vs Java”, “Windows vs Linux”等等,其实所有的技术都是好的,能解决问题的就是好的,而对于技术的偏执会限制自己的事业,所谓百害而无一利。
从自己的角度总结一下这个章节,那就是首先要不同的思维来看待自己的职业,明确自己的职业目标并落实到每个月每周每天的实际行动中,在日常工作中形成专业的态度,坚持学习,不断提高自我,特别是注意提高与人相处的技巧,避免无谓的争执,永远相信自己”Fake it till you make it”。经常反思自己的进度,持续改进。勉之!

课程总结 – Learning How to Learn

最近完成了Coursera的课程 Learning How to Learn: Powerful mental tools to help you master tough subjects,我想总结一下以便加深下印象,同时以后也可以随时参考看看是否运用到实际的学习中去。这门课对应的教材是A Mind for Numbers: How to Excel at Math and Science
第一课什么是学习,重点介绍了头脑的两种思维模式,专注模式(Focus mode)和发散模式(Diffused mode)。这两种模式都非常重要并互相排斥,前者关注细节和已有知识的运用,通常是在精神集中的时候。而后者更善于全局思考,从不同的角度思考问题,通常是在比较放松的状态下实现的。这里提到了番茄工作法(Pomodoro Techinque)就是专注工作25分钟,然后放松一下,并给自己一个奖励(Rewards)。这一课还简单介绍了记忆的两种模式, 工作记忆(Working memory)和长期记忆(Long term memory), 一般来说前者只有4个slot, 这也是为什么人难以同时做多个任务的原因,而长期记忆则像是大仓库,而为了把知识从前者转移到后者,练习(Practice)是非常关键的。最后强调了睡眠的重要性,简单来说清醒的时候脑子会逐渐释放一种物质会阻碍神经元之间的联系,而睡眠可以消除这些有害物质。
FocusVsDiffuse
 
第二课关注于记忆块(Chunk),记忆块是一种头脑有效压缩信息和快速处理信息的方式,一个例子就是开车,学车的时候脑子要考虑非常多的事情,而熟练了则似乎是一种无意识的行为。而在学习新的知识的时候,新的Chunk可能会和已有的Chunk类似,从而能够更快地学习。记忆快是熟练掌握知识和技能的重要方式,而形成记忆块就是通过专注学习,深入理解,和不断练习。这里一个有用的方法是不看课程自己努力回忆(Recall)。
Chunk
 
第三课主要是关注与处理拖延(Procrastination)并进一步介绍一些记忆的技巧。学习是一种长期的过程,而拖延是非常有害的,而在学习的开始阶段可能会难以集中注意力,这些都是正常的,关键是如何处理。有用的技巧包括通过Belief, Cue, Routine和Reward来形成良好的学习习惯,关注于Process, 而不是Product,做计划并看具体的落实情况。这里提到一个重要的观点,就是毅力(WillPower)是有限和宝贵的,只在必需的时候才用。然后关于记忆的部分,提到了一个有用的技巧Memory Palace,就是把事物联想到自己熟悉的环境,虽然它们可能本来毫不相关,更广泛的技巧包括图像化(Visualization), 故事化(Story),交叉学习(Interleaving)。
第四课首先提到了一些其它的重要的学习技巧。这里再次提到了隐喻和类比,还有就是人在成年以后还是会有新的神经元产生,而为了让这些宝贵的神经元保持下来最好的方式是学习新的技能和体育锻炼。对于长期学习来说自信和坚持是非常重要的。然后是准备考试(Test)的一些技巧,包括学习小组(Teamwork), 在学习过程中多做Mini-test,如果做了充分的准备,可以先做难的,再做容易的(hard start, jump to easy), 在考试中有时候可以转移注意力,让思维从另外一个角度看看自己的答案是否准确,然后检查的时候可以反方向从后往前检查。
总的来说,我还是学到了不少的不错的建议,一是形成习惯坚持学习和锻炼身体,二是使用番茄工作法来管理时间,三是学习的时候多做练习,四是保证足够的睡眠。

读书笔记 —— A pragmatic programmer

最近把”A Pragmatic Programmer: From Journey man to Master”复习了一遍。这本书是2010年差不多六年前买的中文版,之前读过一遍。这次阅读似乎比之前的感触更多了一些,我想还是写下来加深下印象,希望能够更好地指导自己的实际行动。其实很多道理都很简单,或许是大道至简,或许不同的是是否能够用于指导实际的行动。
第一章主要是作为务实的程序员的基本原则。首先是要诚实地面对自己的不足,所谓 “The greatest of all weaknesses is the fear of appearing weak.”。然后对工作和自己的责任感,提供选择而不是借口。在记住Big picture的同时Don’t Live with Broken Window, 保持追求更好的心态的同时又知道什么时候适可而止。要坚持学习“An investment in knowledge always pays the best interest.”保持自己知识和能力的多元化。还有就是有批判的思维对待自己看到听到的,不是一味的接受。最后是强调沟通的重要性和基本的技巧。知道自己的观点,了解自己的听众,注意沟通的时机和方式。
What do you want them to learn?
What is their interest in what you’ve got to say?
How sophisticated are they?
How much detail do they want?
Whom do you want to own the information?
How can you motivate them to listen to you?
第二章主要是介绍务实的一些常用方法。包括增强正交性,避免重复,提高可重用性,其中提到测试可以做一个检验正交性的一个很好的途径。然后是保持构架的灵活性,实现可撤销性,比如一个系统换用不同的数据库。在许多未知因素的情况,曳光弹(Tracer Bullets)来帮助定位目标,通过快速构建框架让用户能够及早看到能工作的东西,同时对于开发者也是一个能够在其中工作的环境和一个集成的平台,更能感受到工作的进度。和原型开发不同,曳光弹是在产品中使用的代码,而原型开发则是实验性着的,是应该扔掉的代码。之后是接近领域编程(Program Close to the Problem Domain), 可以实现小型的领域语言自动生成代码。最后这一章节提到了估算的重要性,通过理解系统,分解系统,追踪自己的估算来提高下一次估算的准确性。
第三章是建议的基本工具,所谓工欲善其事,必先利其器。建议包括使用纯文本来保存知识,熟悉Shell, 用好一种编辑器(Emacs VS VI :-), Not Notepad),使用代码版本控制系统。在调试时保持”Fix the problem, Not the Blame”, 和”Don’t Panic”的心态。最后建议是学习一门文本操纵语言,以及在必要的时候构件代码生成器(Write Code That Writes Code).
第四章注重实效的偏执(Paranoia)。首先要坚信自己不可能写出完美的软件(You Can’t Write Perfect Software), 所以要防御性编程,按照合约设计。在出现问题时候Crash Early, 正确使用断言(不可能发生的情况)和异常(Use Exception for Exceptional Problems), 最后对于程序资源的管理要有始有终。
第五章 Bend, or Break是关于保持代码灵活性的技巧,首先是要使耦合降低到最少,Put abstraction in code, details in metadata 实现动态配置。然后是时间上的解耦提提高并发行。”Analyze Workflow to Improve Concurrency”. 最后是解耦的一些常见模式,包括Observer Pattern, Model-View-Controller pattern, 还有不太理解的用黑板协调工作流。
第六章是关于Coding时候的一些建议,包括”Don’t Program by Coincidence”, 总是意识到自己在做什么,按照计划行事,测试代码和假定,把事件花费在高优先级的事情上。理解算法效率,然后是重构的一些建议,包括”Refactor Early, Refactor often”,重构时候不要增加新的功能。接着是测试的重要性,”Design to Test”。最后是”Don’t Use Wizard Code You Don’t Understand”, 这让我想起了当年的VC6的MFC,后来专门读一本都没有太弄明白。
第七章Before the Project, 首先是关于需求的建议,所谓完美不是没有什么需要增加的,而是在没有什么需要去掉时候达到的。在需求分析阶段,要想用户一样去思考,不是搜集需求而是挖掘它们。要注意倾听自己反复出现的疑虑,不要过于Rush. 还有就是对于有些事件行胜于言(Some Things Are Better Done that Described)。
第八章是注重实效的项目。包括围绕功能,而不是工作职务来组织项目,然后是要使自动化无处不在,包括编译,发布,测试。测试要全面(Test State Coverage, Not Code Coverage), 使(Find Bus Once), 最后建议温和地超过用户的期望,同时”Sign your work”,一个注重实效的程序员一定是乐于接受挑战,勇于承担责任的人。
回头想一想,其实很多道理很是简单,但所谓大道至简。所谓要成为一个好的程序员,其实所需要的道理也多不了多少,只不过,当水平不够的时候,永远不能认识到那些朴素道理的重要。能不能让正确的原则知道正确的行动本身,其实就是区分是否是高手的一种显著标志,这些需要通过不断的有意识的强化实践和反复提醒,坚持学习,努力!
下一本书是”Soft Skills: The software developer’s life manual”.