程序员觉醒五大基础属性修行

Posted 杰嗒嗒的阿杰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员觉醒五大基础属性修行相关的知识,希望对你有一定的参考价值。

在我所认知的程序世界里面,除了学习新的技术和知识外,还存在着五大基础属性,它们分别是:看、听、读、写、说。在日常的工作和学习中这些属性占据着重要位置,就好像RPG游戏一样,人物的属性值越高,能力就越强,学习到的技能就越多越高级。所以,在日常生活中不能忽略了这些能力的提升,打怪升级靠的就是它们。

这里说的“看”不是指看代码的能力,是指观察事物并对其进行分析和转化成代码语言描述的能力。它是属于一种观察能力,与平常用眼睛看东西还是有很大的区别的,前者需要加入分析和思考的步骤。

举个例子,比如观察一块积木,首先我们能够感知的是它的形状、位置、大小和颜色。但是如果这块积木要搬到程序的世界里面,明显上面的所感知的信息是无法直接运用的,所以,我们需要把他作进一步的抽象转化:

class Block

    property shape:String;
    property x:int;
    property y:int;
    property z:int;
    property width:int;
    property length:int;
    property height:int;
    Property color:int;

我们通过一次观察,在脑海中完成了如上面的代码所示。但是这是每个学程序的同学都应该所具备的分析和认知能力。如果观察再深层次一点,就是应该通过现象来看透本质,找出其隐含属性,还要分析其与其他事物的关联关系。

那么,下面我们再继续“看”。就上面例子,可以看出模型的属性都采用了比较简单的属性描述,在程序中是不太容易还原其在现实中的实际形态的(假设我们在实现一款3D建模工具)。所以,需要进一步的优化,可以得到下面的代码:

class Size

property width:int;
property height:int;
property length:int;


class Pointer

property x:int;
property y:int;
property z:int;


class TriangleShape

property vetexes:Array:


class Block

    property shape:TriangleShape;
    property position:Pointer;
    property size:Size;
    Property color:int;

上面代码的演变过程可以看出来,经过仔细的分析很多对象的属性都被进一步被抽象化,更加符合程序的描述和设定。如果再进一步的深入分析和理解的话,可能还可以将分析发散做到与其他事物的关联上,如不同形状的积木抽象,以及由积木组成的物体联想(例如使用积木堆积的城堡)。这里就不一一列举代码了,代码在这里只是辅助我们去细化所看到的东西的转化结果,也是对事物的认知过程,不同的人对不同的事物认知不同,产生的转化结果也不大相同。但是有一个方向可以确定的,就是事物的转化结果是一定要具备可逆性的,即根据代码可以还原原本的事物或场景,如果还原度越高还原的物体的种类越多,那么“看”的能力就越强。

所以平时可以多留意周边的事物然后多运用上面说的办法来进行分析。如果你不喜欢分析实际物体,那也可以分析尝试分析别人程序,像做客户端的同学很多时候都需要仿照别人的App来设计,那就可以经常看看别人App的效果和功能,然后实际分析一下,还可以着手验证自己的“看”法。

要了解一个人的想法最直接的方法就是听他讲述。而作为程序员的我们很多场合都需要自己用心聆听仔细分析,例如你跟别人讨论问题、去参加技术大牛的分享会、又或者你边看教学视频中的讲师讲解等等。那么,听的能力就决定了你对所讲内容的接收程度。

一般来说如果自己对话题没有什么概念的情况下,别人说的内容是很难被吸收进去的。所以,在听之前都需要自己先了解一些与话题相关的东西,这样才能有利于在别人讲的过程里面去做分析,然后形成自己的结论和问题,然后再抛出你的问题,得到回答后修正你之前的结论,最后得出最终结论并进行确认;通过这样一个反复的“听和反馈”的过程,你对别人说的内容才能得到最大程度的接收,甚至引出更有价值的东西。

笔者不太建议大家在听完别人分享自己的想法和心得后毫无反馈。这样一来别人并不知道你了解到什么程度,二来他自身对于这件事情的认知也没法得到进一步的了解,因为认知过程本来就包含了相互探讨这一重要环节,缺少互动的沟通可以视为一种无效的沟通。

所以,我们要注意不要成为上面所说的那样,平时要有意识地进行听的能力培养。总的来说。在听前要做好了解主题内容的准备并带上自己的疑问;听的过程要围绕主题来分析总结问题,尽量做到每一次的听都能够有所反馈。

从一开始接触编程就开始被要求读别人写的例子代码,了解别人的编码思想,然后将其转化成属于自己的东西;读成为了程序员首要的能力。所以,这方面的能力强弱决定着编程能力提升的速度。

不管是一开始学习程序时读别人代码,还是学习架构是读别人写的文档,甚至是开始应用时读需求文档等等,这些都属于读的能力范畴。所以,不要以为阅读代码能力很强就是读的能力强,其实这只是一小部分,更加强大的能力应该是体现在“读懂”一些使用自然语言描述的文档,并将其通过程序方式展现出来。

对于读的方式因人而异,每个人都会有属于Ta自己的阅读方式。笔者一般采用的方式为圈重点,然后再深耕细作。主要考虑的是个人时间精力有限,不可能每个点都读透。所以会从需求出发,先找出与需求相关的重点部分,然后再细细地读,深入里面的每个细节,并且进行一些总结和通盘考虑。如果是代码的话甚至还会加上工具来辅助了解(如断点调试)。

我们要经常保持定量地读别人的代码(通过书籍或者开源社区),分析别人的代码最终形成自己的积累。通过这样不断的累积经验,才能使我们在读的速度和质量方面达到进一步的提升。

一提到写,大家都会联想到写代码,这是我们平常最工作。我们对写的兴趣是非常浓厚的,可以写出满满的成就感。但是一提到要撰写设计、架构等文档,相信很多人都会觉得懵逼,根本就无从下手,也不知道需要写些什么,原本写代码的时候很顺溜,一换到写这些文档就变得很吃力。但是我想说的是,这些也是写能力的一部分重要体现。

我们都知道如果一个需求还没想好怎么实现,那么千万不要急着开始实现编码的工作。尤其对于负责整个产品的主程来说,应该要订好编码前的架构,约定和注意事项等,并写下文档方便在多个人之间协作开发。譬如,我在某个项目中考虑到了通讯部分功能可以单独抽取出来作为公共模块,那么在这个东西就应该体现在你设计文档里面,还要加以规范说明,让大家知道并且去使用它来完成工作。

如果你对写这类专业文档还有些迷茫,不知写什么,如何编排内容等。那么,笔者觉得你应该先去搜集一些资料来了解大概要写什么内容,然后理清自己的思路,给文档制定提纲,然后把要说的内容写出来就好。不一定要拘泥于格式和字数,能够表达出思想和思路的文档才是好文档。

还是那一句要想提高自己的写能力,一定要先克制自己不要一下来就先写代码,而是先学会写前的思考分析,把一些重点和可预见问题提出来,遇到不理解或无解的问题,不要想当然地去做,而是先搜集资料然后咨询经验丰富的前辈来辅助你进行分析。刚开始这个过程可能会很不习惯,花费的时间也可能会比较长,但是不要急躁,一旦你熟悉后这个过程就变得很轻松,你的思考层面也会得到拓展。这样做法对于往后的代码才会写得更加顺畅,翻工的几率才会更少。

对于一个整天与计算机打交道的人来说表达能力确实会退化,而且不太会与人打交道。但是不代表我们可以只要负责敲代码就好,必要的表达能力还是需要培养的。因为在一个团队里面跟其他人的沟通都是必不可少的;如果你编码能力很厉害,但是没有办法表达清楚你的想法和做法,团队的其他成员都将不知道怎么与你配合,导致整个团队的工作效率低下。因此还是要适当地培养和锻炼自己的表达能力。

为了要表达清楚事情,其实我们可以在这之前做出一些准备,尽量将要讲的内容包括一些细节做好研究和说明,形成文档或者PPT,在讲述的时候才能有条不紊地进行。至于为什么要准备到关键点和细节,原因就是在紧张的时候可以起到辅助功能(没错!程序员很容易紧张,特别看到一大群人在听你说话的时候…)。

然后就是多在一些公开场合表达自己的想法。要重视每一次参加公司的内部分享会或者讨论会,很多同学在公司内部开会的时候都不愿意发表意见,其实我觉得这是一个不错的锻炼机会,你可以借助这样的机会来把你对某件事情的观点和想法表达出来,哪怕说得不是特别好也无所谓,重点是你要关心别人有没有听懂你的想法,然后每次会议后再来思考自己需要调整和改进的地方。有人也许会问,那如果参加一些技术沙龙或者论坛是不是更能锻炼这方面能力。我个人觉得如果你能克服紧张的心理那时极好的,但是我更建议从公司或者团队内部开始,因为都是熟悉的人精神会放松一点,然后再逐渐面向陌生人。

最后就是有意识地将专业内容通俗化。一个团队由很多不同专业领域的人组成,那么,在表达的时候就要注意使用比较通俗的字眼来说明相关的专业知识,让别人更加容易接受你说说的内容。如:“与服务器通讯”就比“请求服务器”要来得通俗。

结语

也许有人会说,这些能力随着工作经验的增加自然就会增长,没必要刻意去提升。但我想说这正好相反,这五项基础属性的最终目的是帮助自己分析、总结经验和知识;是它们决定了你的经验累积的多少,而不是你的工作年限。

由于平时写作的时间太少了,加上文笔确实不好,结果一篇文章反复修改,写了好几个月才完成(如果我是作家,估计是要失业了)。所写的观点并不一定正确,但这确实是我在成长过程中的体会,如果觉得对你有用那么请你动动手指给我点赞;没有帮助到你也不要紧,点赞了就可以(偷笑)。

以上是关于程序员觉醒五大基础属性修行的主要内容,如果未能解决你的问题,请参考以下文章

继续修行Python基础总结(注释|变量)

Python 目录

HaaS硬件积木库

HaaS硬件积木库

《操作系统基础》笔记:概述

HBase入门修行基础篇