Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
208 lines (133 sloc) 21.9 KB

总结

昨晚考完大学最后一门考试后,就带着行李箱离开了大学,准备接下来的去腾讯深圳实习了。

在等火车的图中,我无意间看了一下李笑来老师在得到上的专栏中的部分免费内容,感觉收益还是挺大的。我简单地列举一下他其中提到的几个思想:

  • 人生中的选择就是投资行为:
    • 无论做什么都会存在机会成本和时间成本,所以选择做不做某件事、怎么做、期望得到什么样的结果是一种投资。
  • 周期:
    • 在短期中购买等投资行为会有波动,但是将视野拉到更长远,股价是越来越高的。
    • 人们总是觉得当下的情况是多么糟糕,而从长期来看,社会总在进步,人们的生活质量总在提高。
  • 短期与长期:
    • 投资某些东西在短期内可以快速见到成效,某些事则是需要经过时间的验证则能够得到回报。比如看一个笑话在短期内得到快乐,在长期来看能够帮助我们成为更加幽默的人。
  • 活在未来:
    • 做决策不仅仅只满足当前受益幸福的最大化,而应该最隹整个时间维度上受益的最大化。也就是我们做投资需要更加注重长期带来的影响。
  • 做总结:
    • 做总结能够帮助我们整理头脑中一个个知识小碎片,能够起到反思的作用。
    • 借助互联网上的平台还可以分享自己的文章,起到自我营销的作用。
    • 能够帮助我们提高表达能力。
  • 思考判断决策的能力:
    • 不要人云亦云,要有独立的思考能力,事情到底是不是像别人所说的那样。
    • 互联网上文章等消息来源非常多,而且很多是重复的,甚至是虚假的,我们需要有甄别能力。
    • 更加好的做法应该是从几个比较优秀的平台吸收消息。
    • 很多别人认为一定是对的事情,很可能就是错的。
  • 碎片化学习:
    • 碎片化学习不等于低效学习,某些知识更加适合碎片化的学习。
    • 个人经验发现,在短期内花几天的时间认真看完一本书后,即使期间经历了大量的思考,但是长时间不使用很快就会淡出我的脑海。
    • 学以致用,用则进,不用则废。学习一门新知识需要思考学习它对自己未来的生活工作等是否有帮助。
  • 搭建知识体系:
    • 碎片化的知识很难被整理出来,或者说我们的大脑本来就不适合用于存储碎片化的知识。
    • 学习就像是建筑,除了看到某个小楼道外,还需要看见整个建筑的设计和结构,为什么需要这样做。记住推导过程后就不需要再记忆繁琐的最终结果。
  • 学习编程:
    • 编程能够帮助我们提高逻辑能力。
    • 编程能够实现自动化某些事情,比如爬虫可以得到我们需要的信息。
    • 在我看来编程语言就是一个软件,不同于一般软件的是,编程语言提供的人机交互接口不是按钮、滑动等,而是通过代码来实现人机交互。它能够很大地提升我们使用软件的边界,学会编程就不需要每次需要一个小众功能时,花费大量的时间在网上搜索相应的软件。
    • 编程并不难,像 Python 等编程语言就很适合非依靠编程工作的人学习。它跟其他的编程语言相比就是机械时代的汽车和现代搭载很多电子设备的汽车的差别,依靠电子设备我们能够更好地操作,比如倒车时的距离感应器,后视摄像头等。

找实习过程

我比较有忧患意识,而且有实验室的学长指导,我算是比较早地开始找实习找工作的准备。

比较坑的一点是大三上参加了一个对无论是长期还是短期内对我都没有太多帮助的比赛,花费了我大量的时间,而且期间体验非常差。如果觉得自己在某件事情上的投资不快乐时,需要勇敢地提出离开。如果不快乐地工作,那么长期来看你是在伤害整个团队。这也是刘强东在自传中提到的,如果某个员工不适合公司,会通过补偿机制鼓励他主动离开。

各大公司的笔试环节考核的主要还是算法能力和编程能力,如果刷过大量的题目的话,会发现其实最后也就是同一个题型经过描述包装了一下而已。所以我想说的是如果做题目或者解决问题的时候需要对问题以及解决方案做一个抽象,将根本的问题抽象出来,而数学建模就是通过将现实问题抽象为数学模型,然后再使用合适的编程技术来解决。比如:

题目:约瑟夫环 抽象:映射问题,怎么找到元素之间的映射关系是关键

笔试环节可以通过内推等方式跳过,能够走内推环节还是尽量走内推环节,不认识在理想公司中的师兄师姐可以在牛客网等平台寻找内推机会。但内推又不是十分必要的,为什么这么说:

面试官逃不掉的就是考核面试者的算法编程能力,如果算法能力优秀的一定要做笔试,这样可以向面试官展现自己能力。如果算法能力不行,即使有内推最后还是会被面试官刷掉的。

基础真的不是能够速成的,需要通过花费大量的时间去钻研思考,引用一句话:什么是经典,经典就是很多人想读,但是却很少人会花时间去钻研的知识。

面试过程中就是面试者向面试官展示实习的时刻,不排除某些人为了提高自己在面试过程中的表达能力和应对能力去刷面试的可能性。而面试者可以通过什么途径能够在这么短的时间内展现自己的能力呢?我认为以下几点非常重要:

  • 内推的人在公司或者部门是一个什么样的角色,如果他足够牛逼,可以在一定程度上证明你的实力。这个过程就像是巴菲特给你说这个股票潜力不错,就问你买不买。
  • 简历需要有能够突出重点,至少要让面试官能够找到他感兴趣的点。面试不同的公司、不同的岗位可以使用不同的简历。
  • 项目经历,一定要对项目的整体架构,开发的目的,解决问题等有一个明确的了解,介绍的时候很多人以及书都推荐 STAR 方法。
  • 现场快速找到算法,以及手写代码的能力:
    • 现场却要在短时间内(10~15分钟)需要将面试官包装后的问题抽象为一个解决对应问题的算法。
    • 手写代码确实需要练习,因为我们很容易发现平时写代码太过于依赖 IDE 提供的代码提示、静态语法分析等功能了,听说像微软会让面试者在普通的记事本中写代码,我只能说手写代码确实是一门艺术。

根据我面试的经历,很多面试官都会问到对未来的规划。这个问题对于在校学生来说真是一个比较复杂的问题,因为大部分人确实是活在当下的。每次遇到这样的问题,我都会直接告诉对方我的真实想法(创业)。对于这个问题的回答,可能不同公司不同岗位不同面试官听到后有不一样的结果。未来规划甚至可以尝试写进简历中,如果简历还有空间。

对于大部分公司来说员工创业就意味着人员的流失,当初招聘进来的培养可能会被白白地浪费掉,而且内部创业可能带走的不仅仅只是一个人,而是一个团队。

但对于像腾讯、阿里巴巴等比较开放的公司可能更加倾向于促进员工发挥产品思维、内部创业,比如腾讯有众创空间,他们提供了一个更好的制度来鼓励员工内部创业,而且可以通过员工的内部创业可以提高母公司的实力和影响力。

大部分人会选择在面试官面前进行各种各样的包装修饰,但是我比较直男,倾向于发表内心真实的想法,因为招聘是一个双向选择的过程,如果要削足适履,那么可能最后只是穿小鞋,自己不能够被分配到合适的岗位。

我强烈建议,无论是否想去实习或者找工作的同学都最好去尝试一下招聘,其一能够增长应聘经验,了解理想的岗位需要什么的人才,无论什么学历毕业,最终还是需要面相社会的。能够和腾讯、阿里巴巴等知名企业中的技术大佬坐下来聊上几十分钟还是有很大的收获的,面试最后的提问环节还能够提出内心的疑问,可以是技术上的,也可以是职业发展上的,面试官能够坐在我们前面面试我们,他还是有两把斧子的。

BTW,我被腾讯录用为暑假实习生,事业群是IEG,游戏增值服务部门。比较迷的一点是,我到现在为止都没有导师联系方式,也不知道未来需要做的技术方向,但没关系,我对自己的快速学习能力持有自信。

大学课程已经全部结束了,剩下来的暑假和大四可能尽可能多的时间会放在在外实习中。

区块链

前一段时间没能耐得住好奇心,去了解了一下区块链,主要是从网上搜索各种各样的资源和开源的文档来了解区块链。我认为比较好的资料是 https://legacy.gitbook.com/book/yeasy/blockchain_guide/details,我认为他比较好的原因是他除了介绍区块链的技术以外,还花了很大的篇幅介绍区块链的应用场景和区块链制度上的设计优越性。

我只是简单地了解了区块链的运作方式和应用场景。

区块链:一个去中心化的、不可更改的、能够快速验证的、不可抵赖的、价值自平衡存储系统。

去中心化真的有这么重要吗?或者说中心有这么大的影响力吗?

区块链的一个比较大的应用场景是加密货币,而加密货币中规模比较大的是比特币,比特币的信徒都相信一个“事实”(政府能够通过不断地发币,稀释持币人所拥有的资产的价值,从而提高政府可以支配的资金),政府的阴谋论。所以有不少人将区块链等同于是反政府的技术。而且比特币的数量是有上限的,这就如同金本位一样安全(地球上可开发黄金数量是有上限的),所以比特币有很好的抗通货膨胀的能力。

在没有学习薛兆丰老师的北大经济学课之前我是相信上面的“事实”的。

  • 政府发币该发多少:这不是由政府完全决定的,当然这不排除部分独裁国家是完全由政府控制。市场上货币总量应该大体上等于市场上货物流通所需要的货币。
  • 政府超发造成的通货膨胀对政府并没有好处,这对入口、出口并没有帮助,最终结果是大家都尽量不使用该国的货币,这样政府印发再多的钞票也没用,因为透支了信用,最后的结果是人们不再相信该政府,该政府可能就会被推翻。
  • 除了科技创新、学术理论的突破,还有制度创新,好的制度能够更好地促进人与人之间的合作、信任与利益分配。

区块链的博弈论

有没有人会攻击比特币或者其他加密货币呢?

在没有了解到区块链的制度设计上时,我心里的答案是肯定会,因为攻击比特币能够获得大量的比特币,自身财富实现了增长。但是进一步思考,某个人或者组织发动了全网 51% 的算力去攻击比特币,那么不仅在重新计算比特币的过程中会消耗大量的电力,所需要的电力可能比所得到的比特币的价值还要大,如果该组织比较贪心,将大部分的比特币都归自己所有,那么比特币网的价值就会大大下降,甚至没有人会使用,攻击者冒着受法律惩罚的风险,攻击比特币并没有什么好处。如果已有的区块链越长,那么想要攻击区块链的难度就越大,因为只要修改了一个区块,那么后续的所有区块都需要改变,因为后一个区块引用了上一个区块的哈希值作为计算本区块哈希值的一个变量。

如果挖矿能够赚取比特币,那么会不会越来越多人加入到挖矿当中呢?

不会,比特币网络中的矿机应该维持在一个稳定的水平。如果比特币网络中有非常多的矿机,那么要发动 51% 攻击就越难,比特币就越安全,从而越有价值。但是平均每个旷工所得到的收益就会变小,直到小于某个阀值(将矿机用于其他地方能够赚取到更大的收益),那么就会有旷工陆续地离开比特币网络。相反如果比特币网络中的矿机非常少(此时比特币非常容易受到攻击),那么平均每个旷工得到的收益非常高,就会吸引其他地方的矿机加入到比特币网络中。

当我了解到上述两个的博弈设计后,我深深地感受到区块链设计的美妙。

但是比特币同样存在一些问题:

  • 无法应对通货紧缩。
  • 初始的几个旷工拿到了太多的财富,分配不均是一个大问题。为什么人们对钟本聪这么感兴趣,除了他是区块链比特币的设计者外,还有就是他很有可能拥有大量的比特币。
  • 产生区块的速度太慢,很可能需要十几分钟、几个小时甚至几天才能够被处理,如果手续费给的不够高,甚至可能永远不会被算进新的区块中,交易无法进行。想想一下,服务员只为给小费高的客人服务,很让人抓狂,但是从另一角度看,如果某个人能够给更高的小费,那么为该客人服务能够让社会的效率更大化。
  • 需要大量的电力资源去计算。
  • 如果某个拥有大量比特币的人死了,而且他的私钥没人知道,那么他所拥有的比特币从此不再流动,随着人的死去,世界上拥有的比特币越来越少,而比特币是有一个最小切割单位(聪),而不是像外界所说的那样可以无休无止地分割比特币的(浮点数计算也会出现不精确性)。
  • 未来的量子计算机等怪物可能会轻松破解公私钥。

由于挖矿的存在,用于挖矿的芯片越来越先进,在一定程度上推动了这一科技的进步。 怎么才能够让一个事务能够发展得快,或者说怎么才能够保护濒临灭绝的动物呢?答案是让人们对他们产生需要,If it pays, it stays.

除了比特币,区块链还有两个非常大的应用,以太坊与超级账本。

相对于比特币,以太坊引入了智能合约的概念。智能合约是代码,可以由用户自行定义功能,在矿机中运行,运行智能合约需要燃料,燃料需要以太坊购买。如果某个智能合约需要执行的代码越多,那么需要的燃料越多。

给我的感觉是,以太坊像是创造了一个将去中心化的政府,以太坊(货币)的发行速度由数学规则设定,人们可以上传智能合约,使用燃料运行某些智能合约,具体运行智能合约的机器是矿机,每个人或者组织都可以发行自己的货币。

通过智能合约,我们可以实现像投票、众筹、供应链的管理等去中心化操作。

当了解到像比特币的挖矿机制时候,我就觉得要保证完全去中心化的成本是多么的高昂。新的比特币的产生会随着新的区块计算成功而产生,而产生新的比特币的价值可能还不如计算区块所需要的电费价值高(当然这只是站在现在的角度看,长期来看新产生的比特币的价值可能会更加高)。

docker

学习了 docker 后,我突然发现应用管理与部署等可以变得非常简单,因为大部分部署的命令都封装在配置文件中,部署通常只需要敲几条命令即可。同样安装软件也只需要敲击几条命令即可,通过 docker registry,可以便利地安装经过其他程序员自定义的软件。删除那就更加方便了,一条简单的命令就可以,也不会残留很多垃圾文件。

docker 对监控应用的执行状况等也很好地进行检测和限制。

因为 docker 采用的文件系统实现了重用,也就是多个应用可以重用某些空间,比如应用A与B同时需要某些中间层,那么该中间层只需要在镜像中被存储一份即可。

总体来说,docker 确实非常值得学习,无论是不是需要做运维,docker 能够提供对应用管理隔离提供很好的服务。

《暗时间》

在网上搜索优秀博客的时候,突然有人推荐:刘未鹏的博客,在其中无意中发现了他写的一本书《暗时间》,本来以为本书介绍的是时间管理,所以从图书馆借回来阅读,后来发现,除了时间管理,其中还说到了心理学,数学,逻辑学,计算机科学等知识点,虽然该书由很多碎片组成,但是这本书确实是一本值得被推荐的书。

在课堂、讲座上,台上的老师可能问台下有什么需要疑问?

大部分人都没站起来,理由是不知道要问什么。而不知道不等于没有,不知道也就是心里面拥有非常多的疑问(甚至是不能够理解某事物的定义),而且台上站着的是在该领域有过很多思考、硕果累累的人,能够与这么牛的人交流,为什么不勇敢地提出内心的疑问。

不要总是期待自己会突发奇想得到某些好点子,而应该是花大量的时间去思考,因为思考的越多,大脑在潜意识才会产生随机走动,从而产生灵感。

土木工程与软件工程的对比

建筑业发展了上千年,但是真正迈向工程化我认为还是最近几十年的事情。

为什么土木工程建立的建筑能够多年树立不倒的,而软件工程生产的软件会有如此多的 bug,而且后期的维护费用还是如此的高昂呢?

而且建筑工程通常是由非常优秀的人去设计,建筑团队的领导者带领着建筑工人去修建,而基层真正施工的团队受教育水平可能远远没有设计师高,甚至不能够理解设计师的核心思想,或者对设计师的理念产生了误解;而软件工程由最聪明的人完成架构设计,由受过高层教育的程序员符则实施,即使这样生产的软件还是会错漏百出,每次修复一个 bug 都会有可能引入新的 bug。为什么软件工程向建筑工程学习这么困难呢?

我对以上问题非常感兴趣。

我也和别的同学讨论过这个问题,我得到过以下的答案:

  • 土木工程的复杂度没有软件工程高:土木工程更加倾向于劳动、资金密集型,而软件工程是知识密集型。
  • 土木工程采用了更多冗余:在理论上,地基挖 10米就足够安全了,但是施工团队可能为了安全将地基挖到 12米。
  • 土木工程发展历史更久:所以他们在理论和工程管理上更加先进。
  • 土木工程施工中替代品更多:建房子除了红砖,还可以用水泥砖等等。
  • 土木工程一旦出事故引发的灾难会被法律追究责任,而软件工程被攻击可能更多责任归咎到攻击者,而不是软件的开发团队。
  • 软件工程写代码的人都太过厉害,每个人都有自己的想法,而产生每个人都强烈拥抱自己的想法,导致团队想法不一致。
  • 土木工程设定了很多默认值,大多数情况每一个施工团队都会如此干,但是软件工程的自定义程度太高了,每人都有自己的想法,导致整个团队的目标不一致。

为了认识软件工程,我两次尝试读《人月神话》,但是我发现真的是读不懂,有些他们当初存在的问题,现在可能已经不存在了,比如 1MB 的内存。Anyway,未来我还是会尝试读一下,或者是英文原版。

与高效率的人合作

这几天因为要外出实习,不参加学校的实训,多次和导员等进行沟通。办事的体验极差:

  1. 不知道导员等相关工作人员不知道什么时候在办公室
  2. 问一个问题存在极大的不确定性且回复时间极慢

比如问老师我能否去校外自主实习,老师说如果XXX同意了就可以,XXX又说只要YYY同意就可以。。。我感觉我的事情在他们那里优先级一点都不高,只有自己干着急。

所以我想未来合作一定要找一些办事效率高,能够快速决策的人,如果办事过程中大部分时间都在等待,那么每个人的时间利用率都会大大地降低,无论一个人多么努力,多么优秀他一天可用的时间也就是 24 小时,所以我们一定要提高时间的利用率。

创业学院上课

由于一个活动的机会,我报名参加了为时一天的创业学院的课程,上课的主题是:投资谈判与风险管理、资源整合。

期间我还遇到了一位中年的经济学老师来旁听课,她提出了不少看法。我印象比较深刻的有:

  1. 对于一个企业发展最重要是什么,她的答案是忽悠。。。
  2. 她批评上投资谈判与风险管理的老师上课有问题,文不对题,讲的内容是鼓舞人而不是传播知识,也就是说他在说鸡汤而不是传授知识。她作为老师,评判老师上课质量的角度确实与我们学生不大一样。

给我最大的感受是,创业学院的老师都是有创业经历、或者是正在创业的。他们上课非常有激情,而且充满自信,与平时上我专业课的老师差距很大,感觉创业的经历给他们带来了非常大的帮助。但话说回来,可能我把因果关系给捣乱了,或许是他们拥有以上的特点,他们才会选择创业。但是这次经历增大了我对创业的热情,感觉自己收到了鼓舞。

task list

接下的一段时间的任务清单:

  • 争取实习留用
  • 《深入理解计算机系统》
  • 500lines。You don't know what you cannot build.
  • 可能需要学 C/Cpp
  • Pytho、Go 的深入学习
  • 9.11 The Human Brain,介绍大脑的一门课,听说非常有趣,当锻炼英语来学习一下
  • 《未来简史》
  • 宁向东的清华管理学课
  • 《王立铭·生命科学50讲》已完成一半