zoukankan      html  css  js  c++  java
  • 刚加入公司,如何快速熟悉公司项目并快速上手

    <h1>
        刚加入公司,如何快速熟悉公司项目并快速上手            
        </a></span>
    </h1>
    

    几天前我的同事Richard问我我是如何做到在Lumi迅速上手开始自己的工作的,这是一个很好的问题,当我来到这里的时候,从第二天开始我就做了大量的工作(在我的第一天我就尝试着生产“代码”,不过是我在工作页面上注册了而已),我认为我第三天就掌握了一些特性,有意思的是在那时候我只写过一个月的Python代码。

    见过许多新员工从大致相当或者相对没有那么复杂的系统开始上手,我意识到和他们相比自己的表现不太寻常。我是如何做到的?最自以为是的回答是 “ 显然是因为我比其他人更聪明”。这是一个傲慢到让人难以忍受并且是一个没有用处的答案———它并不能帮助任何人。它对我也没有帮助(弄清楚这个问题我来说同样有用因为它让我更擅长它,我可以将这些经验运用到其他事情上)。

    所以我写下我的一些观点,这些观点大多基于我的内省获得。我不知道这些建议是否切实可行有效,但是其中的一些想法应该是有些用处。

    主要有以下三条准则:

    1.获取尽可能少的信息

    2.尽可能获取有效的信息

    3.尽可能的运用你获取到的信息

    我将尽可能的解释他们并阐述该如何去做

    获取尽可能少的信息

    这应该是唯一一条让人感觉反常的准则。其余的准则......是的,你希望尽可能有效的获取并尽可能有效的运用获取到的信息。这有点快速学习的意味。但是获取尽可能少的信息?究竟怎么回事?可以确信的是当你学习东西的时候你希望尽可能的获取更多的信息,对吗?



    这种思维方式从根本上误解了学习的目的,至少是在本文讨论的范围内如此。学习只有在它能帮助你把事情做好的时候有用。往脑袋里装东西向来是比较好的,但是如果装进你的大脑的全是错误的信息呢?

    工作上的例子(一个假设,我从来没有见过这种事情发生过,但我见过相似的):假设你勤勉的坐在那里,厘清数据库的结构,学习那些事物如何相互作用。你花了一个星期左右来做这个工作,然后你被告知这是老的结构,我们现在有三分之二的数据已经迁移到一个全新的存储系统中,然后这些老的数据结构就将退休。现在这些历史知识并不是完全无用,但你本可以在这一个星期做更有用的事情。

    学习尽可能少的这个目标强迫你尽可能的做一下三个重要的事情:

    1.它强迫你去学习“正确”的信息。如果你只获取完全必要的信息,完全必要的信息被定义为:它能让你做必要的事情。

    2.它将强迫你去做你在短时间内能够实现的事情。如果任务A需要学习很多东西,而任务B需要很少,做任务B吧,它将让你花费更少的时间去学习预备知识,你将快速     的完成目标。

    3.它将防止你因为试图获知所有的事情这样的任务而心烦,提供给你一个更加有用的学习准则去从正确的地方开始你的工作。

    “但是David!”,我听见你如此惊恐的叫喊以至于你把感叹号当逗号用了,“你的意思是学习是件坏事,所以我不应该尝试着去学习事情如何工作的?”

    放松你的神经,抛开你的恐惧,因为我不是这个意思!

    我所说的信息是那种一旦你获取到了,你就能基于此去做事情。每一个放入你头脑中的细小的知识点都会提供给你一个获取更多知识的一个框架。千里之行,始于足下

    这个意义深远的比喻是说服你明智的采取我的建议。

    我们本质上是在不断的重复这件事情,“我能做什么?哦,这有一件事情,让我们去做它吧。完成。我现在能做什么?哦,这里有另外一件事情我之前做不了但现在能做了是因为我已经在上次工作中学会了一些东西”,通过每次获取一点点知识我们能很快的消化整块知识大餐。

    和边工作边学习相比,我认为你通过这种方式得到的教育比其他的要好,因为它包含着具体的经验。你不仅仅是学到了事物的原理,你学习到了如何使用它来完成你的工作,并且你学习了很多具体的细节,而这些细节是如果你在获得高层次的描述会被错过的。

    现在回过头来再来读这段(如果你还没有准备好,不要在一个无限循环中困住,废寝忘食,因为我觉得那真的不是一个有效的学习方式),这一字一句是最重要的部分,我真心希望你能够采纳。

    尽可能有效的获取信息


    下面是我获取知识的步骤,我把它送给你,用好它:

    1、我能独自搞清楚它是如何工作的吗?(五分钟)

    2、我能通过google搜索和读博客搞定它吗?(十五分钟)

    3、让别人解释给我(无论花多长时间)

    好的,我知道我已经在文章的前面的部分中把最重要的事情过了,但还有一件同样重要。请不要坐在那里做无用功并且把自己搞的心烦意乱而仅是因为你自己无法搞清楚是怎么一回事。你不想打扰你的同事,这很好,前二十分钟左右自己尝试着独立的搞定它也很不错,它能防止你做太多,但你的同事需要你来让他们变得对你有用,他们也可能掌握着你所需要的准确的信息,在你卡壳的时候帮助你也是他们的责任,另外,帮助你其实也对他们有好处。


    尽可能有效的利用你所获取到的信息


    这个一个模糊的说法,主要是让你善于思考。关于这点有很多建议,那种只要你做了就会带来巨大改变的建议,都被证明是愚蠢的。虽然如此,我这里仍有一部人建议对你来说或许是有用的。

    下面是我大概的思考流程,更准确的说是一种错误的模式,在现实中我当前用它来预测但并没有产生预期回应的的模式。

    犯错,上一段或许是接下来我要说的内容的一个线索。

    如果我能片刻获得所有的元素,获取知识的目的是什么呢?

    我的意思是,你想把事情做好,知识该如何帮助你去做这件事?

    对我来说知识的价值在于基本的预测。你希望被回答两个问题:

    1、如果我做X,会发生什么?

    2、如果我想Y发生,我该如何去做?

    这两个问题事实上是相对的,原则上,关于第二个问题一个有效的算法是“思考所有X的取值,然后观察它是否能够导致Y发生”,任何事情都只不过是搜索算法的一个最优化,不是吗?

    首先我将回答第一个问题:

    它基本上是一个关键词,“智力模型”

    智力模型本质上是一个能够在你大脑中运行的一个算法,一个把行动作为输入,把结果作为输出的算法。

    它可能是明确的,也可能是隐藏的(题记:这只是我的用词,可能没有什么标准):一个隐藏的智力模型实际上是你运行它时可以不经过所有步骤的模型。你不需要显式的描述出这个模型,你仅是知道答案。当人们说有些事情是隐式的,他们的意思是我有一个隐式智力模型用来了解事物是如何工作的。

    利用隐式智力模型能让你的工作得心应手,有可能会让你的工作变得非常容易。

    显式模型更加有用,你必须辛苦的一步步的按照顺序的去得到答案,但你也能得到很多的益处。

    1、他们倾向于更加精确,我发现隐式智力模型更快捷,更有启发,会让工作变得非常有效,但也会有一些主要的缺陷。

    2、当他们犯错的时候能让你很容易的补救,并且智力模型有经常可能是错的。你始终能够完美的预测事情的可能性基本上为零。一个显式智力模型可以让你补救,但调整        你的直觉更加困难。

    3、你能够向别人解释原因。这一点尤其有用当你遇到麻烦并且想和别人交流你所遇到的问题的时候。


    所以两种模型都会有代价和益处,我们应该选择哪个呢?


    答案是:二者皆选!


    当你把智力模型看成能够按照它预测事情是如何工作的而不是事情是如何工作的这一事实,你就能够意识到拥有两种解题模型模型不仅很好,而且在很多的时候很有用:你能够利用它们产生结果将二者结果相比较来看看是否它们产生了不同的预测结果,你能够决定使用代价更小的方式当这个决定的代价并不大的时候。

    另外,它们也并不是相互割裂的,显式智力模型经常有转向隐式智力模型的趋势,当你对显示智力模型足够熟悉的时候显式智力模型会变成你的直觉和你内在的一些东西,兵器你将对二者的求助越来越少。


    下面有几点建立智力模型的技巧:

    *尽可能重用旧的智力模型。当学习Python的时候,我开始于“就像拥有有趣的语法的Rubby”。然后我学的更多了,取代之的是"就像充满语法了乐趣的JavaScript,并且拥有更好的模型系统",后来我又补充道:“像一个充满语法乐趣的并且有相当好的模型的系统,因为它充满魔法的方法,你放进一个对象中的值恐怕和你从里面取的值不一样”。

    *通常,尽量廉价的建立智力模型,一个你能很快建立好的模型往往比一个辛苦建立起来的更加有用,因为你通常会抵触改变后者。

    *当你的模型产生错误预测的时候,修补你的模型。

    *经常测试你的模型,这样做是有意义的因为 a.当你要修复模型的时候它能够发现问题 b.它能加速转向隐性智力模型的进程,让你能够在将来更加容易的应用它。

    以上是所有关于如何建立智力模型的部分,现在转向第二个问题: 我能预测我的行动的后果,我该如何去做能够让我的行动产生我所希望的后果?

    我的算法大致如下:


    第一部分:

    1、产生一个想法

    2、它明显是愚蠢的?扔掉它,回到1.

    3、经过一些思考,它目前来看还不是愚蠢的?把它放到一边

    4、我现在已经将多少看起来不是愚蠢的想法放到一边了?三个左右,进行下一步。

    5、我已经在这个想法上花 了多长时间了?太长了?如果这样的话,同时我又有新的想法放到了一边,进行第二部分,否则从另一个角度进行突破,或者做其他的事情,或       者把它放到后台慢慢琢磨。

    第二部分:

    现在我有一堆候选的想法了。适当地思考一下他们,尝试着决定他们中的哪一个是最好的。这事实上需要一些尝试,收集一些新的信息。

    一旦我选好了哪个是最好的,决定我是否对它满意,如果不是,从最初的第一部分全部重新开始,如果是的,这就是我对当前正在应对的问题的解决方案。

    所以基本上观点是你希望使用最廉价的智力模型去快速的过滤想法,然后在那些想法的相互比较中一旦你获得了一部分比较好的想法,你就可以去探索它是如何工作的并以此作为自己的解决方案。我不知道我自己描述的准确度如何,我个人觉得还可以。

    不幸的是,我所说的“获得一个想法”这地方存在一个巨大的鸿沟,你是如何做它,仅仅是随机的去尝试吗?

    好吧,你只要做......我确实不知道。我必须退回去说我有一点聪明作为回答?但是如果是这样悲哀的是我没有聪明到能够在这给出一个好的回答。下面有一些是我正在做的事情,但它几乎只是投机。

    1、尽可能的尝试搜索空间。如果你认为你有可能通过改变一些特殊的东西来解决这个问题,那就仅考虑哪一个改变了那件事。如果那个证明没有作用。那就尝试不同的东 西。你能够运用大量的过去的经验让你达到目的。想一下过去你解决过的相似的问题,那个问题的解决方案是什么。如果你想不到任何相似的问题,或者那些解决方案 对于这件事情无效,想一下相近的问题。考虑相似的问题有利于你尽快的找到正确的那一个方法。

    2、将问题分解为小块,当你能够容易的使用上面几个部分来尝试搜索空间的时候,为了达到这个目的你要尝试着找到能够让问题按照既定路线解决的问题的切分点。

    3、当你认为一个解决方案不是一个好的主意的时候,看一看为什么它不是一个好主意的主要原因,然后尽量避免进入到这些思维误区。

    4、相反的如果一个想法大致能够工作但并不是十分有效。尝试着围绕着它去探索看看是否有一些变更是否能让它工作的更好。

    5、如果您完全的卡壳了,尝试着跳出这个范围。或许它并不能有作用。但探索为什么它没有作用也许能够告诉你关于这个问题的有趣的东西,并且能够向你提供其他解题 空间。

    我并不认为我说的足够充分,我恐怕这仅仅可能是一个实践中产生更少缺陷的一个案例。我认为为什么我“聪明”那部分只是因为我的大脑不会“闭嘴”(认真的说,这样说很让人厌烦)。所以,尝试着去化解问题就像一个狗叼着一个骨头,直到别人屈服。这给了我很多尝试着解决出问题的经验。实际上,这或许是我能够给你的最好的建议。但是你或许听到太多次数的建议:练习解决问题并把事情弄清楚会让你更善于去做它。但是我认为还有一些事情是你能做的:练习并不总有用当你做坏的练习的时候。我对此坚信不疑。


    将所有的一切结合起来


    我喜欢将这个作为探索的过程。你从一个简单的地方开始(我发现”实际使用的产品“是一个开始的好地方)。你看看周围,一步步地。你探索的同时做一些你能够在你刚刚搞定的区域中的能够做的工作。你的同事会帮助你发现解决之道。但根本上是取决于你自己画的范围的地图并且解决出不同部分是如何相互联系的。我认为这篇文章是我个人的软件绘图指南。

    它有用吗?难倒我了。事实上我在做一些”正确“的事情,我真的希望它封装了一些东西。我认为它几乎可以说是一个好的建议。但这清楚的有一些危险的定义,就是我在这崇拜我的大脑。

    如果你尝试了这些任何一个,让我知道它怎么样。请在评论中、邮件等等分享您自己的观点,因为我也是非常想知道如何让它更好。



    原文链接  http://www.drmaciver.com/2013/08/how-did-you-get-started-so-quickly/



  • 相关阅读:
    SP6779 GSS7
    P2218 [HAOI2007]覆盖问题
    day10-包的定义和内部类
    day09-final、多态、抽象类、接口
    day08-代码块和继承
    day07-变量,封装
    day05-方法、数组
    day04-switch、循环语句
    day03-运算符、键盘录入
    day02-基本概念
  • 原文地址:https://www.cnblogs.com/jpfss/p/6773463.html
Copyright © 2011-2022 走看看