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

  • 相关阅读:
    常见26个jquery使用技巧详解(比如禁止右键点击、隐藏文本框文字等)
    禁用页面及页面所有frame内的右键菜单
    JS模态窗口返回值兼容问题解决方案
    winform登录时,在密码框按下回车,直接登陆
    C#中实现邮件发送功能
    CTFHub-彩蛋(持续更新~)
    CTFHub技能树-目录遍历
    免密钥方式登陆配置
    Ansible_Day1
    Python_Day2_共享你的代码
  • 原文地址:https://www.cnblogs.com/findumars/p/5869939.html
Copyright © 2011-2022 走看看