如何积累知识和技能答网友-如何积累知识和技能一个故事凡事都有目标形象化关联不断的学,灵动的用结论

2018-05-14 11:32:32 浏览数 (1)

答网友-如何积累知识和技能

这应该是非常多的人关心的问题。

代码语言:javascript复制
为啥有的人貌似样样精通?而我就样样稀松呢?

本文不能说是解决这个问题,只是说一些个人的感想。

一个故事

上大二时,同一学期有两门课,"汇编原理"和"操作系统"。汇编原理的老师只讲x86,汇编的语句,而且还是16位的。什么LOAD,ADD命令、分段、寄存器一类的东西。端地址转换等等。操作系统老师讲的主要是原理,例如进程、内存空间、IO一类的知识。这两门课一开始各学各的,只要老实听讲座作业就是了,和其他无聊的大学课程没有什么不一样。直到有一天,我偶然拿到了一本书(还是复印版本的)——于渊的《自己动手写操作系统》。

粗粗的看了一遍,让我仿佛发现了完全不同的世界。在这里,所有的文字都在说人话,所有讲的东西都有关联,有原因,有前因后果。比如,那些汇编指令很多都是有原因的,而操作系统上学不会的一些道理是因为当时汇编大概只能写成这个样子(因为CPU的指令集太老了)。再比如,16位系统内存小,要分段,所以才需要段指令;而到了32位系统,就没必要分段了。分段只作为一个兼容模式的指令而存在。

再往后学,我突然又发现了C语言的一些语法(大一课程)貌似也与指令集和操作系统设计是有关的。于是我又去翻了翻书,找到了这么一本——《C专家编程》。里面其实没有太死抠C语法,而是讲了很多小故事,一些当初那些工程师,公司,学生,竞赛的参赛者……的八卦。

不久之后,我终于我明白了,课本上讲的东西。因为某些机缘巧合定出来的一些规则。指令、语言、系统、接口、模式都不过是些约定,完成了某个特别的事情。只不过时间慢慢过去,那些事情已经淹没在历史里,或者已经不再重要。那些约定留了下来,经过不断演变,成了我们现在看到的东西。

大二期末,我两门课用一个大作业交差。写了一段可以引导学校破机器(但是是32位的机器,大概是Pentium III),能够启动的引导汇编,并在引导后在屏幕上画了个正弦函数的图形(还是能变色的)。两边的老师都给了高分,但我估摸着他们看不懂我写的东西。

凡事都有目标

也是大学时期,刚好有一部电影叫《Matrix》(我很讨厌它的中文译名"黑客帝国",或者更渣的"21世纪杀人网络", 完全不知所云)。其中有这么一段

代码语言:javascript复制
It is purpose that created us, 
purpose that connects us, 
purpose that pulls us, 
that guides us, that drives us; 
it is purpose that defines, 
purpose that binds us. 

非常喜欢。

搞技术不也如此吗。一门技术,总是为了解决某个问题而存在的。那么,问题是什么?

  • 我能用计算机画一个好看的画吗?—— 嗯,也许你想到了Photoshop,图层、颜色通道、蒙版、笔触、滤镜、羽化……;为了有这些功能,需要C ,需要数据结构;需要图形颜色算法;需要操作系统提供GDI(或者3D加速后的Direct Draw)
  • 我能用计算机做个定时任务吗? —— windows上有at命令,*nix上有crontab,而这些的背后,是操作系统提供的专门的时间触发机制,而这个机制可能又可能是由主板上某个长得比硬币还小芯片提供
  • 我能建个网站吗? —— 于是乎有了模版、写业务逻辑的语言、DB、SQL、js、css、浏览器……无数的规范、标准、框架、中间件涌现出来。而这一切又依靠磁盘IO、网络IO、数据通讯协议……

很多时候,当我们把自己的头埋在某个很深的泥巴里,却忘了这个玩意到底有什么用。比如,需要理解GDI怎么实现吗?那是个画图用的工具,但如果我只是画图,我知道他能画图,我也能用它画出圈圈,就足够了。

当我想做个定时任务时,我需要搞明白crontab里面怎么做的吗?并不需要。我只需要了解那个分钟、小时、月天数、周天数、月数是什么意思就足够了。那个时钟芯片里面是什么东西,我不需要知道,也懒得理。也许有一天我会成为一个卖芯片、造芯片的人,届时要学也不晚。

人生的时间总是有限的,花在一件事情上的时间太多,花在另外一件事情上的时间就会减少。把心思放在目前对你最重要的事情上,是一笔划算的投资。技术如此,非技术也如此。对机器是这样,对人也是这样。

你瞧,你把系统搞挂了,你的老板气呼呼的坐在你的旁边盯着你恢复系统。他也不需要知道是什么挂了,为什么挂,怎么挂的。他的目标就是把系统修好,让你修好,仅此而已。

形象化关联

上面提到了面向你的目标思考。但是并不是说对于目标周边的知识技能简单糊弄糊弄就过去。比如上次讲过一个volatile关键字的事情,讲了其实很多人还是不明白。这时就就需要”形象化关联“。

每个抽象的东西都或多或少都来源于现实当中的一些事物。比如,“索引”来自于图书馆里放了几个房间的索引目录的抽屉;“进程”可以理解为是一个正在干活的人;“切面”大概就像是高速公路上的收费站,但凡经过就得给钱。

稍微“理工”一点的人更根据这些图景来“自己和自己讲道理”。比如,如果“进程”是一个人的话,10个人去送餐的确可以提高效率;但是如果10个人同时来换一个灯的灯泡,就会出乱子。如果你经常自己和自己讲道理,道理讲不通的就是讲不通。那么非常恭喜,你非常适合做技术/工程师/研究;反之,你如果讲歪理讲得自己都信了,那么销售和管理可能更适合你。

实际的东西和你想象的东西可能有不一样的地方。实际的东西更复杂,有更多的细节需要处理。但这并不影响对事物的理解。不用把一个东西想的无比复杂,因为复杂东西的发明者自己也是从最简单的一个小东西、小思路开始做的。比如,编译器十分复杂。但是简单语法的、效率不是很高的编译器你努努力几个小时也能写——无非就是脑补一个状态机,看到一个字符跳一个状态而已;DB存储结构很复杂。但是自己实现一个只读的,带B树支持简单查询的文件格式却十分容易。如果有时间,可以付诸行动,实际写写代码(顺便在社区里装一装);如果没时间,自己脑补一下这个过程,并非是什么难事。

不断的学,灵动的用

我有一个同事,是工商专业的。她在负责我们的运营数据,时常要点数据。开始每次她就找研发同事要数据结果。但是时间久了,研发没功夫次次的去给她开发查询SQL。于是有个研发哥哥给她讲了一点基本的道理,如where后边是啥意思,表里这些列代表啥。3个月后她几乎自己玩转了所有的数据,根本不用别人帮忙。有的时候我们去看了看她的SQL,有的很没效率,有的还是若干段片段自己摘抄了拼的,但就是work。她所会的语法仅限于select, from, where, and, or, 括号,比较符号,join, in, order by而已。而有些高级查询不会做,如union,window function,子查询,case when,她就用CSV Excel 文本编辑器自己拼凑。最终结果是,给她讲语法的研发哥哥写查询的速度在运营数据这边都赶不上她。

人能学习的时间精力有限,那么已经学到的东西是不是能够足够的发挥?有些人学了一点就能活学活用处理大部分问题。而有些人学了就学了,就是用不起来。我不是很清楚这种特质是天生的还是怎么样。但是这种特质是能够在职业上极大发展的关键——因为它可以让你跳出你会的东西的天花板去从更高的角度解决问题。先不说跨界,作为一名技术人员,如果你当年学了Flash,现在能不能继续在Canvas上继续有所作为?如果之前学了python做爬虫,现在能不能去搞搞AI?让如果当年学了做驱动程序,现在能不能写app的数据API调用库?(事实上我们这里还真有一个搞了驱动后来写Android的)

也许有些人一辈子只钻研一套技术,做到业界第一。我非常敬仰这些人。但无奈对大多数人来说,不可能达到这样的高度,只能接受环境、市场的趋势。这时,时时刻刻学 用才是能够持续保持个人提升的关键。我想,我也许可以做到这样。

结论

坚持看清问题、敢想、勤印证想法、并学以致用,可以极大地提高个人提升速度。保持这个节奏,持续若干年,即可达成“核心知识精通,周边知识“知道的足够多”。

希望本文可以稍稍帮到迷茫的你。

PS

那个给学工商MM讲SQL的研发就是我。

0 人点赞