zoukankan      html  css  js  c++  java
  • “瓮中捉鳖”与“森林冒险”(要记一些东西,更重要的是理解另一些东西,然后进行推导,如饥似渴的读书)

    看了下楼主的问题,手又痒痒了,那就写点东西一起分享下吧,话题我把它叫做《“瓮中捉鳖”与“森林冒险”》。

    编程这个职业,也就是程序员,相比于其他职业,例如工人,厨师等等这些一眼就看得出工作范畴的岗位,有一个巨大的区别,就是庞大的复杂性。有人说程序员的工作也是一眼就能看出工作范畴的啊,就是编程啊。这就是没有看穿程序员工作的本质。

    任何复杂的概念或者系统,都可以用一个简单的词汇概括,例如地球,宇宙,航天系统。但实际上这些词汇所承载的现实世界中的事物,都是复杂的。编程也是这样的一个例子,简单的编程两个字,承载的是解决这个世界中复杂问题的方法,比如你写了一个缓存类,不只是用手敲击了键盘写了一段代码那么简单,背后的意义是操纵了存储系统中的机制去优化数据读写,再深一层的意义是解决了服务端高并发,高访问的问题,是的,编程背后的意义,远超过我们表面看到的。不只是编程,生活当中许多领域都是这样的,简单的表象背后,隐藏着极度的复杂性。总结为一句话,编程是复杂的工程,生活当中充满复杂性。

    那么编程那么复杂,变化多端,我们不知道怎么应对,来了新的任务和功能,我们心里惧怕,不知道如何解决,该怎么办呢?

    人,对未知的东西,都会产生恐惧。那么要想解决这个问题,其实也简单,就是把陌生的东西,变的熟悉。

    楼主要说了,你这不是废话么,要是熟悉了,还用在这提问么。楼主别急,我们在慢慢的消化一下。

    刚才说了编程的复杂,大千世界中,有那么多的领域,那么多的问题需要用信息化的手段去解决,怎么可能去一个一个的熟悉他们呢,那么重点来了,是有方法可以花费相对较少的时间去熟悉更多事物的。

    我有个故事想和楼主分享下,说有个老师要考自己的学生,就在黑板上写了一万个数字,要求学生们在最快的时间内记得更多,更准确。最后的结果是,全班所有的学生,把所有一万个数字都背了下来,而且没有一个学生的答案是错误的。

    很诧异吧,有人说你这是瞎扯,能记那么多数字的肯定都是神童,哪里有一个班都是神童的班级,那还不全国出名,都得上微博了,这样的消息我们能不知道吗。

    对于这个我还真没骗大家,是有这样的班级的,而且全国各地都有这样的班级和学生 ..........

    很吃惊吧,那么现在我来揭晓答案,关键就在于那一万个数字,是从1,到一万顺序排列下来的,也就是说黑板上那一万个数字是 : 1,2,3 ...... ,9999,10000。

    简单的故事,蕴含不简单的道理。为什么我们可以记住10000个数字,我们真的是记下来的吗?

    No,我们是算出来的。我们只需要记住起始数字和计算规则,就可以得出第二个数字,而第二个数字运用规则就可以得出第三个数字,以此类推。整个过程我们实际上只记住了两条信息,初始量,还有计算规则。是的,这就是短时间内,熟悉大量陌生事物的方法。要记一些东西,更重要的是理解另一些东西。

    同样的道理,我们知道1+1=2,    1+2=3,那么11432 + 12454 等于多少呢,成年人心算就能算出来,为什么?因为我们从小就背了小九九,理解了规则,就可以推导出其他的结果,而这些其他的结果就是我们曾经未知的东西。

    数学计算只是一个例子,应用到其他地方,道理也是一样的。理解核心知识,推导其他未知知识,然后将推导出的知识记忆,这些记忆就是工作多年后沉淀的经验和心得。

    可以看出,什么知识是需要理解的,而什么知识可以暂时忽略,实际应用的时候再去记忆,这个理解与记忆的把控,是相当重要的。

    一开始我们定的主题是《“瓮中捉鳖”与“森林冒险”》,现在该是扣题的时候了。

    解决问题有两种模式。

    1.森林冒险

    先说森林冒险,提到这个词,我们脑海里浮现的,大概会是一个荒岛落难的人类,为了生存,与周围恶略环境搏斗的场景。而森林中有多少野兽,有多少陷阱,又有多少同伴和我们一样,都是未知的,我们面对的是巨大的未知环境,这时候的人们,必定是虚弱与恐惧的。

    在工作当中,我们很多时候面对的就是这样的场景,需求模糊,人员分配混乱,利益相关者的百般刁难,等等这些,都是森林冒险式的境况,我们无能为力,哀嚎连天。

    2.瓮中捉鳖

    每次提到这个词,我总想起《亮剑》里,李云龙带领部队爬在山头,看着日军华北观摩团的大部队进入包围圈的场景。最后,观摩团被全歼了,一个不剩。相对于森林中的未知,瓮中捉鳖这种对敌人洞察到毫厘的掌控程度,是我们程序员最理想的状态。面对模糊需求,我们可以根据自己的经验协助需求人制定详细需求,人员配置,一个项目该用多少人,用什么样的人,我们也了如指掌,那做项目还怕啥,对于这种人为可控的风险,解决后,那些未知不可控的bug,也就让人轻松多了。

    以上就是两种程序员工作状态的描述,我们都应提倡掌控全局,避免短视,盲目的森林视角。

    那么怎样才能做到掌控全局呢。

    答案是,如饥似渴的读书

    把自己的知识面撑起来,掌握的越多,复杂性就相对降低了,不要以一个点为中心去周围搜索问题然后解决,要一开始就把问题框在我们的范围当中,然后逐步缩小包围圈,最后解决问题。这样,掌控全局,就容易的多了。

    对于编程来说,了解的越多,解决定位问题的能力就越强,编译原理,计算机体系结构,软件工程,网络知识等等等等,如果想练就一眼就定位问题的能力,这些知识领域是必须涉及的。

    再说个降低复杂度的例子,比如公司现在要让楼主去补位IOS开发(坑爹的公司),那么作为Android出身的我们来说如何解决问题呢,那就是把Android和IOS看成是一种,是的,它们都是操作系统——移动操作系统,如果楼主买过操作系统的书籍的话,你会发现Android和IOS具体实现是不同的,但是底层原理,也就是凌驾于具体平台的那些操作系统知识,是一样的,去理解操作系统原理后再去看Android和IOS,就和刚才的算术问题一样,只是一棵树上的两个分支,以后再接触其他的手机系统,也从操作系统这个树干入手,那么就可以达到“学一知万”的程度了。

    这只是其中一个例子,总而言之就是系统化自己的核心知识主干,然后去推导记忆具体的技术细节。

    当年我就是在工作了一段时间后,出现了认知瓶颈,然后我就去查了一下清华大学计算机课程都有哪些,然后自己去了解了下那些课程所在领域内的东西。

    另外,编程这东西,其实不只计算机领域的要懂,真要成神,成为万中无一的技术大神,其他领域的知识,数学,物理学,管理学,情报与新闻学等等这些如果有涉猎,那么将获得“近神”的力量,那时候就像God一样俯瞰着编程领域的疑难问题,还会惧怕吗。楼主如果有兴趣,可以去搜索引擎搜索“学科代码”,会出现国内目前所有的学科分类情况。别嫌多,活到老学到老吧,谁让咱们选择了编程行业呢,学吧。

    最后要提的一点是,知识,理论固然重要,但是没有实践也是不行的,学了东西之后就要去实践检验,实践能验证理论,加深理论的理解与记忆,可以让我们的理论更加坚深,有了强大的理论支撑,我们就可以写出好的代码和程序,这是个相辅相成的关系。技术的路上道阻且长,希望楼主能够坚持初心,一路前行,加油,我挺你!

    http://www.oschina.net/question/2553420_2192673?sort=default&p=2#answers

    其实文凭不过是一张火车通行证,清华是软卧,本科是硬卧,专科是硬座,民办是站票,成教是在厕所挤着。火车到站,都下车找工作,才明白老板并不太关心你是怎么来的,只关心你会干什么。

    https://my.oschina.net/u/818901

  • 相关阅读:
    显示文件本地文件夹
    Select Dependencies选择依赖项
    搜索小技巧
    783. Minimum Distance Between BST Nodes BST节点之间的最小距离
    5. Longest Palindromic Substring 最长的回文子串
    12. Integer to Roman 整数转罗马数字
    3. Longest Substring Without Repeating Characters 最长的子串不重复字符
    539. Minimum Time Difference 最小时差
    43. Multiply Strings 字符串相乘
    445. Add Two Numbers II 两个数字相加2
  • 原文地址:https://www.cnblogs.com/findumars/p/5869939.html
Copyright © 2011-2022 走看看