读书笔记:左耳听风

程序员如何用技术变现

我完全没有必要通过打工听人安排而活着,而是反过来通过在公司工作提高自己的技能,让自己可以更为独立和自由地生活。

因而,在工作当中,对于那些没什么技术含量的工作,我基本上就像是在学生时代那样交作业就好了。我想尽一切方法提高交作业的效率,比如,提高代码的重用度,能自动化的就自动化,和需求人员谈需求,简化掉需求,这样我就可以少干一些活了......

这样一来,我就可以有更多的时间,去研究公司里外那些更为核心更有技术含量的技术了。

●要去经历大多数人经历不到的,要把学习时间花在那些比较难的地方。

●要写文章就要写没有人写过的,或是别人写过,但我能写得更好的。

●更重要的是,技术和知识完全是可以变现的。

我们可能都是在写一样的for(int i=0; i<n; i++) 语句,但是,你写在那个地方一文不值,而我写在这个地方,这行代码就值2000元。

会挣钱的人一定是会投资的人。我一直认为,最宝贵的财富并不是钱,而是你的时间,时间比钱更宝贵,因为钱你不用还在那里,而时间你不用就浪费掉了。你把你的时间投资在哪些地方,就意味着你未来会走什么样的路。所以,利用好你的时间,投到一些有意义的地方吧。

何为技术领导力?

那么作为一个软件工程师怎样才算是拥有"技术领导力"呢?我个人认为,是有下面的这些特质。

1.能够发现问题。能够发现现有方案的问题。

2.能够提供解决问题的思路和方案,并能比较这些方案的优缺点。

3.能够做出正确的技术决定。用什么样的技术、什么解决方案、怎样实现来完成一个项目。

4.能够用更优雅,更简单,更容易的方式来解决问题。

5.能够提高代码或软件的扩展性、重用性和可维护性。

6.能够用正确的方式管理团队。所谓正确的方式,一方面是,让正确的人做正确的事,并发挥每个人的潜力;另一方面是,可以提高团队的生产力和人效,找到最有价值的需求,用最少的成本实现之。并且,可以不断地提高自身和团队的标准。

7.创新能力。能够使用新的方法新的方式解决问题,追逐新的工具和技术。

那么,作为一个软件工程师,我们怎么让自己拥有技术领导力呢?总体来说,是四个方面,具体如下:

1.扎实的基础技术;

2.非同一般的学习能力;

3.坚持做正确的事;

4.不断提高对自己的要求标准;

如何才能拥有技术领导力?

第一,你要吃透基础技术。基础技术是各种上层技术共同的基础。

第二,提高学习能力。所谓学习能力,就是能够很快地学习新技术,又能在关键技术上深入的能力。

第三,坚持做正确的事。做正确的事,比用正确的方式做事更重要,因为这样才始终会向目的地靠拢。

●提高效率的事。你要学习和掌握良好的时间管理方式,管理好自己的时间,能显著提高自己的效率。

●自动化的事。程序员要充分利用自己的职业特质,当看见有可以自动化的步骤时,编写程序来自动化操作,可以显著提高效率。

●掌握前沿技术的事。掌握前沿的技术,有利于拓展自己的眼界,也有利于找到更好的工作。需要注意的是,有些技术虽然当下很火,但未必前沿,而是因为它比较易学易用,或者性价比高。由于学习一门技术需要花费不少时间,你应该选择自己最感兴趣的,有的放矢地去学习。

●知识密集型的事。知识密集型是相对于劳动密集型来说的。基本上,劳动密集型的事都能通过程序和机器来完成,而知识密集型的事却仍需要人来完成,所以人的价值此时就显现出来了。

第四,高标准要求自己。只有不断地提高标准 ,你才可能越走越高,所以,要以高标准要求自己,不断地反思、总结和审视自己,才能够提升自己。

强调实践,学以致用。学习知识,一定要实际用一用,可以是工作中的项目,也可以是自己的项目,不仅有利于吸收理解,更有利于深入到技术的本质。并可以与现有技术对比一下,同样的问题,用新技术解决有什么不同,带来了哪些优势,还有哪些有待改进的地方。

Lead by Example。永远在编程。不写代码,你就对技术细节不敏感,你无法做出可以实践的技术决策和方案。

推荐阅读:每个程序员都该知道的知识

《代码大全》 虽然这本书有点过时了,而且厚到可以垫显示器,但是这绝对是一本经典的书。

《程序员修练之道》 这本书也是相当经典,我觉得就是你的指路明灯。

《计算机的构造和解释》 经典中的经典,必读。

《算法导论》 美国的本科生教材,这本书应该也是中国计算机学生的教材。

《设计模式》 这本书是面向对象设计的经典书籍。

《重构》 代码坏味道和相应代码的最佳实践。

《人月神话》 这本书可能也有点过时了。但还是经典书。

《代码整洁之道》 细节之处的效率,完美和简单。

《Effective C++》/《More Effective C++》 C++中两本经典得不能再经典的书。也许你觉得C++复杂,但这两本书中带来对代码稳定性的探索方式让人受益,因为这种思维方式同样可以用在其它地方。以至于各种模仿者,比如《Effective Java》也是一本经典书。

《Unix编程艺术》、《Unix高级环境编程》也是相关的经典。

渴望、热情和选择

加班太严重完全没有时间学习,怎么办?

但是从另外一方面,我们在通宵打游戏,追美剧,泡妞的时候,从来不会给自己找借口说时间不够。我们总是能够挤得出时间来干这些"顺人性"的事,甚至做到废寝忘食,而不找任何借口。

所以,我觉得,可能并不在于加班和工作强度大到没时间,关键看你对学习有多少的渴望程度,对要学的东西有多大的热情。这点是非常重要的,因为学习这事其实挺反人性的。反人性的事基本上都是要付出很多,而且还要坚持很久。所以,如果对学习没有渴望的话,或是不能从学习中找到快乐的话,那么其实是很难坚持的,无论你有没有时间。

怎样选择自己的人生和职业发展?

●一个是在20-30岁,这是打基础的阶段。在这个阶段,我们要的是开阔眼界,把基础打扎实,努力学习和成长。

●另一个是在30-40岁,这是人生发展的阶段。因为整个社会一定会把社会的重担交给这群人,30-40岁的人年富力强,既有经验又有精力,还敢想敢干,所以这群人才是整个社会的中流砥柱。在这个阶段,你需要明确自己奋斗的方向,需要做有挑战的事儿,需要提升自己的技术领导力

1.客观地审视自己。找到自己的长处,不断地在自己的长处上发展自我。知道自己几斤几两才能清楚自己适合干什么。不然,目标设置得过高自己达不到,反而让自己难受。在职场上,审视自己的最佳方式,就是隔三差五就出去面试一把,看看自己在市场上能够到什么样的级别。如果你超过了身边的大多数人,你不妨选择得激进一些冒险一些,否则,还是按部就班地来吧。

2.确定自己想要什么。如果不确定这个事,你就会纠结,不知道自己要什么,也就不知道自己要去哪里。注意,你不可能什么都要,你需要极端地知道自己要什么。所谓"极端",就是自己不会受到其它东西或其他人的影响,不会因为这条路上有人退出你会开始怀疑或者迷茫,也不会因为别的路上有人成功了,你就会羡慕。

3.注重长期的可能性,而不是短期的功利。20-30岁应该多去经历一些有挑战的事,多去选择能给自己带来更多可能性的事。多去选择能让自己成长的事,尤其是能让自己开阔眼界的事情。人最害怕的不是自己什么都不会,而是自己不知道自己不会。

4.尽量关注自己会得到的东西,而不是自己会失去的东西。因为无论你怎么选,你都会有得有失。(绝大多数人都会考虑自己会失去的,而不是考虑自己会得到的。)

5.不要和大众的思维方式一样。因为,绝大多数人都是平庸的,所以,如果你的思维方式和大众一样,这意味着你做出来的选择也会和大众一样平庸。如果你和大众不一样,那么只有两种情况,一个是你比大多数人聪明,一个是你比大多数人愚蠢。

时间管理:如何利用好自己的时间?

花时间学习基础知识,花时间读文档。在参加工作的这20年时间里,我发现,很多程序员都把时间都浪费在了查错上。究其根本原因就是基础知识不完整,没有好好地把技术相关的用户文档读完就仓促上手做事情了。其实只要把基础打扎实,认真读一下文档,你会省出很多很多的时间。系统地学习一门技术是非常关键的,所以这个时间是值得投资的。

花时间在解放自己生产力的事上。在自动化、可配置、可重用、可扩展上要多花时间。对于软件开发来说,能自动化的事,就算多花点时间也要自动化,因为下次就不用花时间了。让自己的软件模块可以更灵活地配置和扩展,这样如果有需求变更或是有新需求的时候,可以不用改代码,或者就算要改代码也很容易。

这里,可能很多人会说不要过度设计,对于这个观点,我既同意,也反对。的确,过度设计不好,但是只要是能在未来节省时间的,宁可这个项目延期,我也会做的。花时间在解放自己的事上是最有意义的了。

花时间在让自己成长的事上。注意,晋升并不代表成长,成长不应该只看在一个公司内,而是要看在行业内,在行业内的成长才是真正的成长。所以,把时间花在能让自己成长,能让自己有更强的竞争力,能让自己有更大的视野,能让自己有更多可能性的事情上。这样的时间投资才是有价值的。

花时间在建立高效的环境上。我相信你和我会有一样的一个习惯,那就"工欲善其事,必先利其器"。我们程序员在做事之前都喜欢把自己的工作环境整理到自己喜欢的状态下。比如使用趁手的开发工具,使用趁手的设备。

规划自己的时间

定义好优先级。无论你写不写出来,你一定都会有一个自己的to-do list。有to-do list并不是什么高深的事。更重要的是,你要知道什么事是重要的,什么事是紧急的,什么事重要但不紧急,什么事又重要又紧急。这有利于你划分优先级。

最短作业优先。对于相同优先级的事,我个人喜欢的是"最短作业优先"的调度算法。理由是,先把可以快速做完的事做完,看到to-do list上划掉一个任务.

作业通常很容易出现"意外情况"让你花更多的时间,但此时你发现还有很多别的事没有做,这会让你产生焦虑感,产生更多的压力,进而导致更慢的生产效率。

想清楚再做。我发现很多时候,我们没有想清楚就开干了,边干边想,这样的工作方式其实很糟糕。对于一些没想清楚的事,或是自己不太有信心的事,还是先看看有没有已有的成熟解决方案,或是找更牛的人来给你把把关,帮你出出主意,看看有没有更好、更简单的方式。

关注长期利益规划。你要学会规划自己的行动计划,不是短期的,而是一个中长期的。我个人建议是按季度来规划,这个季度做什么,达到什么目标,一年往前走四步,而不是只考虑眼下。

用好自己的时间

将军赶路不追小兔。这个世界有太多的东西会让我们分心和跑偏。能专注地把时间投入到一个有价值的事上是非常重要的。确定自己的目标,专注达到这个目标,而不是分心。将军的目标是要攻城,而不是追兔子。所以,你要学会过滤掉与自己目标无关的事,不要让那些无关的事控制自己。

比如,不要让别人来影响自己的心情,心情被影响了,你一下就会什么都不想干了。做自己心情的主人,不要让别人hack了你的心情。再比如,知道哪些是自己可以控制的事,哪些是自己控制不了的事,在自己能控制的地方花时间。

再比如,知道哪些是更有效的路径,是花时间改变别人,还是花时间去寻找志同道合的人。不与不如自己的人争论,也不要尝试花时间去叫醒那些装睡的人,这些都是非常浪费时间的事。多花时间在有产出的事上,少花时间在说服别人的事上。

形成习惯。再好的方法,如果没有形成习惯,不能在实际的工作和生活中解决实际问题,都将成为空谈。如果你是个追求上进的人,我相信一定看过很多时间管理方法的文章和书籍,并且看的时候还会有些振奋,内心有时还会不自觉地想,"嗯,嗯!这个方法不错,正是我需要的,可以解决我的问题......"但很多时候都坚持不了几天就抛之脑后了。

形成正反馈。在前面的文章中,我提到过,要有正反馈,也就是成就感,有助于完成一些看似难以完成的事儿。比如,我们说过,学习是逆人性的事儿,但如果在学习过程中不断地有正反馈,就更利于我们坚持下去。要让自己有正反馈,那就需要把时间花在有价值的地方,比如,解决自己和他人的痛点,这样你会收获别人的赞扬和鼓励。

反思和举一反三。可以尝试每周末花上点时间思考一下,本周做了哪些事儿?时间安排是否合理?还有哪些可以优化提高的地方?有点儿类似于我们常说的"复盘"。然后思考一下,下周的主要任务是什么?并根据优先级规划一下完成这些任务的顺序,也就是做一些下周的工作规划。

我们应该能够识别的表象和本质

关于兴趣和投入

●一方面,兴趣是需要保持的。有的人有的事就是三分钟的兴趣。刚开始兴趣十足,然而时间一长,兴趣因为各种原因不能保持,就会很快地"移情别恋"了。所以,不能持久的兴趣,或是一时兴起的兴趣,都无法让人投入下去。

●另一方面,兴趣其实也是可以培养出来的。我高考时,对计算机软件毫无兴趣,反而对物理世界里的很多东西感兴趣,比如无线电、原子能,或是飞行器之类的。但阴差阳错,我最终考了个计算机软件专业,然后发现,自己越来越喜欢编程了,于是就到了今天。

兴趣只是开始,而能让人不断投入时间和精力的则是正反馈,是成就感。

关于学习和工作

学好一项技术和是否找到与之相匹配的工作有关联,但它们之间并不是强关联的。但之所以,我们都觉得通过工作才让我们学习和成长得更快,主要有这些原因。

工作能为我们带来相应的场景和实际的问题,而不是空泛的学习。带着问题去学习,带着场景去解决问题,的确是一种高效的学习方式。

在工作当中,有同事和高手帮助。和他们的交互和讨论,可以让你更快地学习和成长。

本质上来说,并不是只有找到了相应的工作我们才可以学好一项技术,而是,我们在通过解决实际问题,在和他人讨论,获得高手帮助的环境中,才能更快更有效率地学习和成长。

在工作中你反而学不到东西,那是因为你找的这个工作能够提供的场景不够丰富,需要解决的实际问题太过简单,以及你的同事对你的帮助不大。这时,这个工作反而限制了你的学习和成长。

总之,找到学习的方法,提升自己对新事物学习的能力,才是学习和成长的关键。

关于技术和价值

基础技术总是枯燥和有价值的。数学、算法、网络、存储等基础技术吃得越透,就越容易服务上层的各种衍生技术或产品。

程序员练级攻略:开篇词

●并不是理论和现实的差距大,而是你还没有找到相关的场景,来感受到那些学院派知识的强大威力。算法与数据结构、操作系统原理、编译原理、数据库原理、计算机原理......这些原理上的东西,是你想要成为一个专家必须要学的东西。这就是"工人"和"工程师"的差别,是"建筑工人"和"建筑架构师"的差别。如果你觉得这些理论上的东西无用,那么只能说明,你只不过在从事工人的工作,而不是工程师的工作。

●技术能力的瓶颈,以及技术太多学不过来,只不过是你为自己的能力不足或是懒惰找的借口罢了。技术的东西都是死的,这些死的知识只要努力就是可以学会的。只不过聪明的人花得时间少,笨点的人花得时间多点罢了。这其中的时间差距主要是由学习方法的不同,基础知识储备的不同决定的。只要你方法得当,多花点时间在基础知识上,会让你未来学习应用知识的时间大大缩短。以绝大多数人努力的程度,和为自己不努力找借口的程度为参考,只要你坚持正常的学习就可以超过大多数人了。

●这里没有学习技术的速成的方法,真正的牛人不是能够培训出来的,一切都是要靠你自己去努力和持续地付出。如果你觉得自己不是一个能坚持的人,也不是一个想努力的人,而是一个想找捷径的人,那么,这篇文章并不适合你。这篇文章中的成长路径是需要思考、精力和相关的经验的,这都需要时间,而且是不短的时间。你先问问自己有没有花十年磨一剑的决心,如果没有,那这篇文章对你没有任何作用。

http://daiyuwen.freeshell.org/gb/misc/21-days-cn.html

在我第一个孩子出生前, 我读了所有的(关于育儿的)How to 书籍,仍然感觉是个手足无措的新手。30个月以后,我 的第二个孩子快要出生了,我回头温习这些书了吗? 没有。相反,我依靠我的个人经验,它比专家写的数千页书更有用和可靠。

学习建议。

●一定要坚持,要保持长时间学习,甚至终生学习的态度。

●一定要动手,不管例子多么简单,建议至少自己动手敲一遍看看是否理解了里头的细枝末节。

●一定要学会思考,思考为什么要这样,而不是那样。还要举一反三地思考。

●不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累,会在未来至少10年通用。

●回顾一下历史,看看历史时间线上技术的发展,你才能明白明天会是什么样的。

程序员修养

英文能力

到官网上直接阅读手册,到StackOverflow上问问题,到YouTube上看很多演讲和教学,到GitHub上参与社区,用Google查询相关的知识,到国际名校上参加公开课

1.坚持到YouTube上每天看5分钟的视频。YouTube上有相关的机器字幕,实在不行就打开字幕。

问问题的能力

https://coolshell.cn/articles/10804.html

对于X-Y Problem的意思如下:

1)有人想解决问题X

2)他觉得Y可能是解决X问题的方法

3)但是他不知道Y应该怎么做

4)于是他去问别人Y应该怎么做?简而言之,没有去问怎么解决问题X,而是去问解决方案Y应该怎么去实现和操作。

例如lua-protobuf一次QQ群问答

Q:有那种lua中序列化为字节数组的方法吗,或者是序列化后保存到table里 tab[1]=byte1 tab[2]=byte2

A:(AB问题:你想做A,你觉得做A就得做B,所以你问了B,不要这样,直接问A就行)

Q:主要是lua中序列化为的是字符串,再传递给C#,c#底层发送的是byte数组。。我从lua传递字符串到C#,C#切割,在转变为字节数组。。有更好的方式吗

A:Lua的string类型对应到C#里应该是两种不同的类型,string和bytes,一个正确的C#绑定应该两种都支持,你无非是没找到"怎么Lua传string,C#那边直接收到bytes"的方法而已------而这个方法是肯定有的

结论:pb.encode 返回值虽然是string,但是这是字节数组在Lua的表达,可以直接传递给C#

写代码的修养

除了《代码大全》外,你还需要补充一些如何写好代码的知识,有以下几本书推荐。

《重构:改善既有代码的设计》,这本书是Martin Fowler的经典之作。这本书的意义不仅仅在于"改善既有代码的设计",也指导了我们如何从零开始构建代码的时候避免不良的代码风格。这是一本程序员必读的书。

《修改代码的艺术》,这本书是继《重构》之后探讨修改代码技术的又一里程碑式的著作,而且从涵盖面和深度上都超过了前两部经典(《代码大全》和《重构》)。作者将理解、测试和修改代码的原理、技术和最新工具(自动化重构工具、单元测试框架、仿对象、集成测试框架等),与解依赖技术和大量开发和设计优秀代码的原则、最佳实践相结合,许多内容非常深入。这本书不仅可以帮你掌握最顶尖的修改代码技术,还可以大大提高你对代码和软件开发的领悟力。

《代码整洁之道》,这本书提出一种观念:代码质量与其整洁度成正比。干净的代码,既在质量上较为可靠,也为后期维护和升级奠定了良好基础。本书作者给出了一系列行之有效的整洁代码操作实践。这些实践在本书中体现为一条条规则,并辅以来自现实项目正反两面的范例。

《程序员的职业素养》,这本书是编程大师Bob大叔40余年编程生涯的心得体会,讲解成为真正专业的程序员需要什么样的态度、原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来人引路,助其职业生涯迈上更高台阶。

编程语言

你千万不要觉得在你的日常工作或是生活当中根本用不上,学了也白学,这样的思维方式千万不要有,因为这是平庸的思维方式。

https://coolshell.cn/articles/4235.html

"I will learn it when I need it -- 我会在我需要的时候再学"在这个时候就走不通了。因为,你不可能学习那些你以为不存在的东西。

1.为明天做一些技术储备,因为你不知道你所缺的东西。多多阅读,多多交流,最好能把自己的心得写下来强化自己的认识和记忆。

2.不要只寄望于在工作中学习,工作没有覆盖的地方你就不学了。真正的高手在工作之余都会花很多时间去自己研究点东西的。

3.永远和高手一起工作。如果你面试的公司的面试太简单了,那就不要去,因为简单的面试通常意味着平庸。去那样的公司工作只会让你的学习速度变慢,甚至倒退。

4."很多时候,你缺少的不是知识而是热情"!

理论学科

算法是比较难学习的,而且学习"算法"是需要智商的。数组、链表、哈希表、二叉树、排序算法等一些基础知识,对大多数人来说是没什么问题的。但是一旦进入到路径规划、背包问题、字符串匹配、动态规划、递归遍历等一些比较复杂的问题上,就会让很多人跟不上了,不但跟不上,而且还会非常痛苦。是的,解决算法问题的确是可以区分人类智商的一个比较好的方式,这也是为什么好些公司用算法题当面试题来找到智商比较高的程序员。

《算法》

《算法图解》

《算法导论》

《编程珠玑》

然后,你需要去做一些题来训练一下自己的算法能力,这里就要推荐 LeetCode 这个网站了。它是一个很不错的做算法训练的地方。现在也越做越好了。基本上来说,这里会有两类题。

基础算法题。其中有大量的算法题,解这些题都是有套路的,不是用递归(深度优先DFS、广度优先BFS),就是要用动态规划(Dynamic Programming),或是折半查找(Binary Search),或是回溯(Back tracing),或是分治法(Divide and Conquer),还有大量的对树、数组、链表、字符串和hash表的操作。通过做这些题能让你对这些最基础的算法的思路有非常扎实的了解和训练。对我而言,Dynamic Programming是我的短板,尤其是一些比较复杂的问题,在推导递推公式上总是有思维的缺陷(数学是我的硬伤)。做了这些题后,我能感到我在动态编程的思路上受到了很大的启发。

编程题。比如:atoi、strstr、add two nums、括号匹配、字符串乘法、通配符匹配、文件路径简化、Text Justification、反转单词等,这些题的Edge Case和Corner Case有很多。这些题需要你想清楚了再干,只要你稍有疏忽,就会有几个case让你痛不欲生,而且一不小心就会让你的代码写得又臭又长,无法阅读。通过做这些题,可以非常好地训练你对各种情况的考虑,以及你对程序代码组织的掌控(其实就是其中的状态变量)。

面试前准备

工作项目准备

无论什么公司的面试,都会让你说一个你做过的项目,或是你过去解决过的一个难题。但我很好奇怪,这种必问的题,为什么很多应聘者都没有好好准备一下。

一般来说,会有下面这样的几个经典的面试问题。

说一个你做过的最自豪的项目,或是最近做过的一个项目。

说一个你解决过的最难的技术问题,或是最有技术含量的问题。

说一个你最痛苦的项目,或最艰难的项目。

说一个犯过的最大的技术错误,或是引发的技术故障。

怎样准备这样的题,我这里有几个提示。

1.要有框架。讲故事要学会使用STAR 。Situation - 在什么样的环境和背景下,Task - 你要干什么样的事,Action - 你采取了什么样的行动和努力,Result - 最终得到了什么样的效果。这是整个语言组织的框架,不要冗长啰嗦。

2.要有细节。没有细节的故事听起来就很假,所以,其中要有很多细节。因为是技术方面的,所以,一定要有很多技术细节。

3.要有感情。讲这些故事一定要带感情。要让面试官感受到你的热情、骄傲、坚韧和顽强。一定要是真实的,只有真实的事才会有真实的感情。

4.要有思考。只有细节和故事还不够,还要有自己的思考和得失总结,以及后续的改进。

这不是你能临时准备出来的,工夫都是花在平时的。而训练这方面能力的最好方式就是在工作中写文档 ,在工作之余写博客。

面试中的技巧

你为什么要离开现在的公司?这种问题一般都是来问你的离职动机的,招聘方有理由相信,你是怎样离开前东家的,就会怎样离开我。另外,从这个问题上,招聘方想了解你真实的动机,对工作的想法和个人的喜好。一般来说,永远不要说之前公司的坏话,最标准的外交词令是:"我离开现有公司的原因是我太喜欢你们公司了"。

这样的回答,对于招聘方来说毫无破绽可言,而如果你开始抱怨你现在的公司了,很可能会引出很多问题把你问到最后都抬不起头来。当然,你也可以说前公司的问题,比如:自己心爱的项目被公司废弃了、公司转型了、公司业绩下滑了、在现有的公司没有成长空间了...... 这些都还是可以说的。

你为什么换工作换得这么勤?很多公司的HR都会对应聘者频繁换工作持比较负面的评价。频繁换工作在职业生涯中真不是一件好事,因为用人方会觉得要么是你太不踏实了,要么是你太不行了。所以,工作不要换得太频繁。但是如果换得太频繁了,我给你一个建议,在简历里面写上离职原因。

另外,在面试时被问到这个问题时,你需要给出合理的解释,以消除用人方的疑惑。怎么给出合理的解释呢?一方面,你还是需要诚恳一点儿,另一方面,你在解释时需要承认频繁换工作也不是自己想的,自己何尝不想在一份工作上干得时间长一点儿。

实力才是王中王

面试的训练

对面试来说,比较好的训练就是要经常出去面试,所以还是应该隔三岔五就出去面试一下的。一方面可以攒攒经验值,可以训练一下自己的语言表达能力和应对各种问题的回答。另一方面更重要,可以了解一下目前市场的需求(技术、技能和业务),同时了解一下自己的身价。

你之所以会紧张,会不知所措,会感到不适,会觉得难,大多数情况下是因为你不熟悉这个环境,你对这个环境还很陌生。只要你面得多了,你就会熟悉这个环境,你也就能驾轻就熟了。"老司机"之所以能成为"老司机",还不是因为经常跟女孩子聊天交谈,时间长了,就成老司机了。

端正学习态度

主动学习和被动学习

●被动学习:如听讲、阅读、视听、演示,学习内容的平均留存率为5%、10%、20%和30%。

●主动学习:如通过讨论、实践、教授给他人,会将原来被动学习的内容留存率从5%提升到50%、75%和90%。

学习不是努力读更多的书,盲目追求阅读的速度和数量,这会让人产生低层次的勤奋和成长的感觉,这只是在使蛮力。要思辨,要践行,要总结和归纳,否则,你只是在机械地重复某件事,而不会有质的成长的。

学习是为了找到方法

这就好像,你要去登一座山,一种方法是通过别人修好的路爬上去,一种是通过自己的技能找到路(或是自己修一条路)爬上去。也就是说,需要有路才爬得上山的人,和没有路能造路的人相比,后者的能力就会比前者大得多得多。所以,学习是为了找到通往答案的路径和方法,是为了拥有无师自通的能力。

学习是为了了解自己

英文中有句话叫:You do not know what you do not know,可以翻译为:你不知道你不知道的东西。也就是说,你永远不会去学习你不知道其存在的东西。就好像你永远Google不出来你不知道的事,因为对于你不知道的事,你不知道用什么样的关键词,你不知道关键词,你就找不到你想要的知识。

源头、原理和知识地图

注重基础和原理

就像我2010年学习Go语言一样,除了那些每个语言都有的if-else、 for/while-loop、function等东西以外,我重点在看的就是,出错处理是怎么玩的?内存管理是怎么玩的?数据封装和扩展怎么玩的?多态和泛型怎么搞的?运行时识别和反射机制是怎么玩的?并发编程怎样玩?......

这些都是现代编程语言必需的东西,如果没有,那么这个语言的表达能力就很落后了。所以,当知道编程语言的本质和原理后,你学习一门新的语言是非常非常快的,而且可以直达其高级特性。

当学习算法和数据结构到一定程度的时候,你就会知道,算法不仅对于优化程序很重要,而且,会让你知道,该如何设计数据结构和算法来让程序变得更为健壮和优雅。

使用知识图

从知识树的主干开始做广度或是深度遍历,于是我就得到了一整棵的知识树。这种"顺藤摸瓜"的记忆方式让我记住了很多知识。最重要的是,当出现一些我不知道的知识点时,我就会往这棵知识树上挂,而这样一来,也使得我的学习更为系统和全面。

如果你不想在知识的海洋中迷路,你需要有一份地图,所以,学习并不是为了要记忆那些知识点,而是为了要找到一个知识的地图,你在这个地图上能通过关键路径找到你想要的答案。

深度,归纳和坚持实践

总结和归纳

我们积累的知识越多,在知识间进行联系和区辨的能力就越强,对知识进行总结和归纳也就越轻松。而想要提高总结归纳的能力,首先要多阅读,多积累素材,扩大自己的知识面,多和别人讨论,多思辨,从而见多识广。

把你看到和学习到的信息,归整好,排列好,关联好,总之把信息碎片给结构化掉,然后在结构化的信息中,找到规律,找到相通之处,找到共同之处,进行简化、归纳和总结,最终形成一种套路,一种模式,一种通用方法。

写博客会是一种很好的方式。另外一种更好的方式是讲一遍给别人听

实践出真知

所谓实践出真知,也就是学以致用,不然只是纸上谈兵,误国误民。只有实践过,你才能对学到的东西有更深的体会。

实践是很累很痛苦的事,但只有痛苦才会让人反思,而反思则是学习和改变自己的动力。

坚持不懈

当然,坚持也不是要苦苦地坚持,有循环有成就感的坚持才是真正可以持续的。所以,一方面你要把你的坚持形成成果晒出来,让别人来给你点赞,另一方面,你还要把坚持变成一种习惯,就像吃饭喝水一样,你感觉不到太多的成本付出。只有做到这两点,你才能够真正坚持。

如何阅读源代码

一般采用自顶向下,从总体到细节的"剥洋葱皮"的读法。

画图是必要的,程序流程图,调用时序图,模块组织图......

代码逻辑归一下类,排除杂音,主要逻辑才会更清楚。

debug跟踪一下代码是了解代码在执行中发生了什么的最好方式。

面对枯燥和量大的知识

如何面对枯燥的知识

如果你发现有些知识太过于枯燥,那么可以通过下面的方法解决。

1.这个知识对于你来说来太高级了,你可能不知道能用在什么地方。

2.人的认知是从感性认识向理性认识转化的,所以,你可能要先去找一下应用场景,学点更实用的,再回来学理论。

3.学习需要有反馈,有成就感,带着相关问题去学习会更好。

4.当然,找到牛人来给你讲解,也是一个很不错的手段。

如何面对大量的知识

一点一点学,一口一口吃。你可以使用我前面说过的那些方法,注重基础,画知识图,多问为什么,多动手,然后坚持住,哪怕你每周就学一个知识点,你一年也可以学到50个知识点。只要你在进步,总有一天可以把这些知识学到手的。

把你学习的心得、过程、笔记、代码分享出来,找到和你一同学习的人,因为一个人长跑很辛苦,有人同行就会好很多,就算没有人同行,你的读者,你的观众也会为你鼓掌加油,这些也是让你持续前行的动力。

Talk和Code同等重要

Talk is cheap,show me the code

有效的沟通是事业成功的必要条件。不管你的目标是成为一名卓越的管理者,还是成为某个领域的技术牛人,你都应该提高自己的沟通能力。

沟通阻碍和应对方法

不要绕弯子,有话直说,这是最高效的沟通方式。这既是对对方的一种信任,也是一种对自己的尊重。这样沟通,事情往往能得到更好的解决。

沟通方式及技巧

切莫在冲动之下,说出很多一些过分或过激的话,因为言语的力量是巨大的,杀伤力有时难以预估。

沟通技术

信息要全面、准确。这里重点提一下X/Y问题。X/Y问题是一件非常讨厌的事情。有时候我们拿着Y问题去找别人,问到一半才知道,我们原来要问的是X问题。

好老板要善于提问

生意不行,友情在。每个人的离开都是有各自不同的理由,实在挽留不成的时候,也要注意经营好这份情意。

在我认为挽留不成的时候,我通常会站在他的角度作为他的朋友为他着想,甚至帮他介绍工作,或是在他离开时再为他争取一些利益或是别的什么。这样做会让员工觉得这样的知心老板不好找啊,就算最终还是离开,但是未来也一定会有联系,也许未来还能在一起共事儿。这里的逻辑是,既然不能在此时挽留下来,那就放眼未来,人生还很长,能在一起工作的机会还有很多。

其实挽留是一件挺为难人的事情,因为对方做完了这个决定以后,再回头也需要很大的勇气。所以,你要提前判断员工离职的前兆。一个人要离职是有前兆的,你平时肯定是能感觉到的。比如,他一定会变得不积极,甚至会有一些抱怨。这时候其实是你挽留他的重要时机,因为有抱怨说明还喜欢这个公司。

而他最终跟你摊牌的时候,或是对公司漠不关心的时候,留下来的机会是很小的。员工离职之前一定会有很多前兆的,我建议你,细心体会一下,在最佳挽留时机进行挽留,不流失自己的"爱将"。

最后提一句,一般来说,任何员工,任何事,干了两年就是一个大限,离职率极高。

业精于勤,行成于思

你真的千万不要以为你订几个专栏,买几本书,听高手讲几次课,你就可以变成高手了。这就好像你以为你买了一个高级的机械键盘,27吋的4K屏、高性能的电脑,高级的人体工程学的桌椅,你就可以写出好的代码来一样。我们要成为一个好的羽毛球高手,不是买几副好的运动装备,到正规的体育场去打球,而是要付出常人不能付出的汗水甚至伤痛。任何行业都是这样的。

谈谈我的"三观"

世界观代表你是怎么看这个世界的,是左还是右,是激进还是保守,是理想还是现实,是乐观还是悲观......

人生观代表你想成为什么样的人,是成为有钱人,还是成为人生的体验者,是成为老师,还是成为行业专家,是成为有思想的人,还是成为有创造力的人......

价值观则代表你觉得什么对你来说更重要,是名是利,是过程还是结果,是付出还是索取,是国家还是自己,是家庭还是职业......

面对社会

与其花时间教育这些人,不如花时间提升自己,让自己变得更优秀,这样就有更高的可能性去接触更聪明、更成功、更高层次的人。因为,一方面,你改变不了他们,另一方面,改变他们对你自己也没什么意义,改变自己,提升自己,让自己成长才有意义。时间是宝贵的,而那些人根本不值得你浪费时间,你应该花时间去结交更聪明、更有素质的人,做更有价值的事。 美国总统富兰克林·罗斯福的妻子埃莉诺·罗斯福(Eleanor Roosevelt)说过:

Great minds discuss ideas(伟人谈论想法)

Average minds discuss events(普通人谈论事件)

Small minds discuss people(庸人谈论他人)

把时间多放在一些想法上,对自己、对社会都是有意义的,而把时间用来八卦别人,说长道短,你既不可能改善自己的生活,也不会让你有所成长,更不会提升你的影响力。记住,你的影响力不是你对别人说长道短的能力,而是体现在有多少人信赖你并希望得到你的帮助。因此,多交一些有想法的朋友,多把自己的想法付诸实践,哪怕没有成功,你的人生也会比别人过得有意义。

面对人生

《教父》里有这样的人生观:第一步要努力实现自我价值,第二步要全力照顾好家人,第三步要尽可能帮助善良的人,第四步为族群发声,第五步为国家争荣誉。事实上作为男人,前两步成功,人生已算得上圆满,做到第三步堪称伟大,而随意颠倒次序的那些人,一般不值得信任。这也是古人的"修身齐家治国平天下"!所以,在你我准备开始"平天下"的时候,也得先想想,自己的生活有没有过好,家人照顾好了么,身边有哪些事是自己力所能及可以去改善的。

穷则独善其身,达则兼济天下。提升自己,照顾好自己的家人,尽己所能帮助身边的人,这已经很不错了!

人生的选择是一个翘翘板,你选择这一头就不能坐上另一头

因此,你要想清楚自己要什么,不要什么,而且还不能要得太多,这样你才好做选择。否则,影响决定的因子太多,决定就不好做,也做不好。

价值取向

1.挣钱。挣钱是一件大家都想做的事,但你得解决一个很核心的问题,那就是为什么别人愿意给你钱?对于挣钱这件事的看法,我从大学毕业到现在都没怎么变过,那就是我更多关注怎么提高自己的能力,让自己值那个价钱,让别人愿意付钱。另外,我发现越是有能力的人,就越不计较一些短期得失,越计较短期得失的人往往都是很平庸的人。

投资者会把时间、精力、金钱投资在能让自己成长与提升的地方,能让自己施展本领与抱负的地方,他们培养自己的领导力和影响力。而投机者则是在职场溜须拍马、讨好领导,在学习上追求速成

2.技术。对于计算机技术来说,要学的东西实在是太多,我并不害怕要学的东西很多,因为学习能力是一个好的工程师必需具备的能力,所以我不惧怕困难和挑战。我觉得争论语言和技术谁好谁坏是一种幼稚的表现, 没有完美的技术,工程(Engineering )玩的是权衡( trade off)。

相关推荐
程序媛一枚~9 天前
2024153读书笔记|《春烂漫:新平摄影作品选》——跳绳酷似人生路,起落平常,进退平常,莫惧征途万里长
读书笔记·诗集·诗词·中国文化古典诗词品鉴·春烂漫:新平摄影作品选·新平
图王大胜17 天前
模型 认知重建(麦肯锡)
人工智能·管理·模型·个人成长·心理·麦肯锡
悟空非空也1 个月前
Java真的没出路了吗?
程序人生·程序员·职场·编程学习
悟空非空也1 个月前
程序员的悲哀是什么?
程序人生·职场
独孤思维1 个月前
独孤思维:快失业了,有哪些项目推荐
职场·项目·副业·独孤思维·赚钱
三花学编程2 个月前
《左耳听风--传奇程序员练级攻略》读书笔记一
读书笔记
程序媛一枚~3 个月前
2024122读书笔记|《人生歪理,歪的很有道理》——生活奇奇怪怪,你要可可爱爱
读书笔记·人生歪理 歪的很有道理·多嘴鸭·漫画绘本·治愈系漫画
独孤思维3 个月前
独孤思维:为什么我会拒绝别人向我付费
职场·项目·副业·独孤思维·赚钱
断剑zou天涯4 个月前
《底层逻辑——看清这个世界的底牌》读书笔记1--第一章
读书笔记
小尘要自信5 个月前
【小尘送书-第十六期】码农职场:IT人求职就业手册
职场·送书·求职·码农