本篇文章5435字,读完约14分钟

足球评论员可能不会踢足球,但这并不妨碍他在解释比赛时评论某个明星的技术。同样,我也从来不敢冒充一个出色的程序员,而只是用金庸这样的武术大师来解释我对程序员的理解。这样,人们可能不会因为我的傲慢而鄙视我,我必须首先声明这一点。

首先,重新定义程序员

根据维基百科的定义,程序员也被称为计算机程序员、开发人员、程序员或计算机工程师,它们与在互联网上广泛流传的代码农民或程同义。我无意也不能给程序员一个精确的定义。在这里,我只是用程序员的语言来做一个简单的描述。不是故弄玄虚,而是赢得读者的微笑。

类程序员:公共思想家{

公共:

无效设计(系统&);

无效模型(问题&);

无效代码(programming language &);

无效调试(缺陷&);

void refactor(代码&);

无效学习();

无效通信();

虚拟思维(逻辑和);

私人:

向量_ pls

{}

程序员是彻头彻尾的脑力劳动者,那些懒于思考的人永远不会成为好的程序员。鉴于此,类程序员本质上应该是思考者的子类。就程序员使用的思维技能而言,思想者的具体内涵包括逻辑和数学。作为一名程序员,你不必在逻辑或数学领域很专业,但你必须具备基本的逻辑和数学知识。逻辑被用来推理,数学被用来培养逻辑。此外,数学帮助程序员训练另外两种基本的思维技能,分析和抽象。这将在后面讨论。

程序员的江湖:技术为外功 思维乃内力

程序员的工具是编程语言,他们的日常活动和主要任务包括设计、建模、编码、调试、重构、交流、学习和思考。

关于程序员有一个普遍的误解,说作为一个程序员的门槛很低,没有技术含量。即使你没有学过计算机课程,比如离散数学、数据结构、算法等等,你也可以写程序。当然,写几行程序算不了什么,但要培养成一个有一定思想水平的一流程序员并不容易。好像会做饭的人很多,但真正的烹饪大师并不常见。所谓的代码农民是程序员的自吐,他相信吗?因此,作为一名程序员,你应该有一种不断进步的强烈的进取精神,永远不要贬低自己,为自己感到难过。

程序员的江湖:技术为外功 思维乃内力

2.程序员的思维“内力”

在我漫长的学生生涯中,我遇到的最好的数学老师是高中的刘川玉。他在课堂上说过这样一段话,当面对一道数学题时,一个人必须想清楚,另一个人必须计算准确,第三个人必须写清楚。直到今天,这句话对我的程序员生涯有着很强的现实意义,也是一个程序员成败的关键因素。

金庸武侠小说有一个普遍的规律,那就是武术必须以内力为基础。比如,在少林寺张君宝与昆仑三绝何祖道的经典之战中,张君宝能够“用少林拳中最平淡的拳法化解最复杂的敌人战术”,而且从未落空,但他所倚重的是旺盛的内力。此外,著名的战争案例还包括少林寺小和尚许诸对吐蕃佛教苦行僧和朱仙庄冯晓对宣南。内力最高的第一高手空是少林寺的扫地和尚。也许风是晴朗的,但幸运的是,我们在谈论一般规律,所以我们不能考虑他。

程序员的江湖:技术为外功 思维乃内力

思维是计算机编程所独有的,它是程序员的“内力”,程序员的思维能力并不好,无论编程语言多么强大,它都是无用的。因此,我在这里强调程序员的思维艺术。

程序员的思维有一个专业术语,叫做计算思维。计算思维是根据计算机科学的基本概念和方法来理解需求、设计系统、实现编程和解决问题的思维方法。

简而言之,计算思维是程序员或计算机科学家的思维方式。当然,计算机科学的理论知识如数学逻辑、离散数学、数据结构、算法和面向对象是计算思维的必要条件。计算思维有一系列智力工具,无法一一描述。以下仅列出了关键项目:

通常,在实际工作中,经常需要将问题的实体对象表示为各种数据结构,如树、堆、栈等。,而业务逻辑过程被表示为各种算法,如排序和搜索等。演示是解决问题的第一步,也是关键的一步。在程序员的实践中,我们都有很深的体会。一旦问题被准确而明确地表达出来,解决方案就像云一样呈现出来。这就是“数据就是代码,代码就是数据”的真理。

程序员的江湖:技术为外功 思维乃内力

抽象思维也广泛应用于数学家的工作中。面对难题,数学家经常从两个方向进行研究。一方面,从特殊情况出发,它延伸到更一般的情况;另一方面,一个普遍的问题被具体化为几个特殊的情况。两个方向的结果最终会收敛,并找到问题的答案。我想这可能是《论语》中“我两头敲,累死累活”的最好诠释。从特殊到一般是一个不断抽象的过程。

程序员的江湖:技术为外功 思维乃内力

我们用一个具体的例子来说明,有一个著名的六度分离理论,世界上任何两个人都可以通过多达六个人相互了解。如果我们想验证这个理论,我们该怎么办?我们可以用图表来表达人与人之间的关系。每个人都由图中的一个节点代表。如果甲和乙彼此认识,那么代表他们的节点之间就有一个边连接。

然后问题变成了检查这个图的直径是否大于6。考虑到世界人口众多,又有老人和病人,图形的规模必须非常大、动态且不断变化,因此计算其直径仍需要更多的简化。就这样。

逻辑推理。逻辑推理对程序员的重要性不言而喻。逻辑推理在程序新功能的开发中并不常用,更不用说在调试和修改程序缺陷的过程中了。程序调试有点类似于夏洛克·霍尔姆斯的案件侦破过程。

与华生博士相比,福尔摩斯的推理在两个方面优于普通人:第一,当观察场景或听游客讲述时,他可以获得更多的数据,尤其是一些别人容易忽略的关键细节。这是由于他在犯罪领域积累了丰富的知识,并且知道什么是更重要的数据;其次,根据获得的数据,他可以想到更多可能的结论,这要归功于他大量的案例存储。有了这两点,我们就可以逐步缩小侦查范围,最终认定犯罪事实。

程序员的江湖:技术为外功 思维乃内力

程序调试也是如此。首先,我们必须掌握程序实际执行过程的细节。然后,从问题出发,我们在原因和后果前后两个方向进行推理。逐步定位问题的范围,最终找到问题的根源和解决方案。对我们来说幸运的是,与夏洛克·霍尔姆斯相比,我们可以借助调试工具了解程序运行的过程,所以一个不能使用调试工具的程序真的会让程序员感到极度沮丧,并且只能通过跟踪信息来跟踪程序运行的过程。

程序员的江湖:技术为外功 思维乃内力

如果你不知道程序的运行过程,推理只能依靠猜测,所以修改bug是非常危险的,这很容易导致回归错误,因为在这种情况下,就像一个盲人触摸一个图像,他根本不知道自己在做什么。此外,夏洛克·福尔摩斯曾多次表达过这样的观点,即案件越陌生,就越容易解决它,因为奇点几乎是看不见的一条线索。

对于程序员来说,没有必要担心奇怪的问题。奇怪是一个线索。关键是要知道程序运行的细节和逻辑推理的技术水平。

分析(分析)。分析是一个从一般情况到某些特殊情况的过程,这是数学家们的思维方式。面对一个问题,如果描述不清或者不能一下子表达出来,我们可以先找出几个符合问题条件的特殊情况。通过仔细检查这些特殊情况,求同存异,找出它们的共同规律或模式,并验证这些规律或模式,我们可以找到描述或表达问题的方法。这是一个猜测和验证的过程。项目需求分析中用例分析的一个常见方法是用具体的用例生动地表达模糊的项目需求。

程序员的江湖:技术为外功 思维乃内力

分解。将一个大问题分解成几个小问题,或者将一个复杂的过程分解成几个子过程,当然有助于解决问题。这也是程序员常用的方法,例如,算法策略中的分治和合并排序就是这方面的例子。

递归(递归)。对于编程初学者来说,递归可能是一个奇怪而又困难的概念。但是如果一个程序员不知道递归,很难称他为程序员。因为他不能理解许多稍微复杂的算法,比如回溯、动态规划甚至树遍历。递归通常可以用简单的方式优雅地表达复杂的算法。

此外,计算思维的特殊方法有并行、异步/同步、模拟/近似、优化、分层、封装、解耦等。程序员的思维艺术,即计算思维,不可能在一两天的短时间内形成。它需要在实践中慢慢思考,不断完善,永无止境。

3.程序员的“战斗能力”技能

程序员的思维艺术融入到编程语言的使用中,最终形成程序员的技能。因此,编程语言对程序员来说就像青龙偃月刀对关羽一样,金箍对孙武空.一样没有青龙偃月刀和如意金箍,关羽和孙武空的战斗力就无从谈起。因此,在没有编程语言的情况下讨论程序员的技能,无异于在木头的边缘寻找鱼,欺骗自己。结合编程语言,程序员的技能有四个领域,从低到高

程序员的江湖:技术为外功 思维乃内力

门的第一眼。编程语言的初学者,像儿童一样,可能会写一个类似“你好世界”的程序,但他们对语言中的一切都一无所知,不能应用于实际项目。这是一个我们很容易达到的水平。有些人第一眼看到门后就往里看。这不容易,所以他们放弃了。

进入房间。对编程语言共享的基本表达式有一定的理解,如变量、赋值、循环、选择等。它可以在一般项目中使用,但是编写的代码看起来缓慢而笨拙,使得制作高质量的程序变得困难。此时,程序员很容易感到自满,认为他们已经完全掌握了编程语言,这就是编程。如果你陷入这种自满,你将失去进一步发展的机会。

熟能生巧。掌握了编程语言的独特功能,能够轻松灵活地使用它。因此,编写的代码更加简洁易懂,复杂的算法往往用简单的方法来表达。这是一个成熟程序员的水平,也是我们大多数程序员可以追求的目标。

太神奇了。这是传说中的领域,龙看到第一个,但看不到尾巴。白洋在《中国历史大纲》中描述了李白的才华,他说李白写诗时,用汉语就像魔术师把手帕翻过来一样。就像李白的诗一样,我认为这一领域的程序员对编程的各种细微之处了如指掌,能够充分发挥编程语言的各种功能和特点,这是恰如其分的。操作的美妙在于专一。而且往往可以独一无二,异想天开,层出不穷。编写的程序优雅、高效且独特。这超出了我们普通程序员的能力范围。

程序员的江湖:技术为外功 思维乃内力

4.程序员的精神是“培养的”

打开。在过去的工作中,我遇到过这样一个程序员,他认为自己已经掌握了一些核心和关键的技术或技能,却不愿意和别人分享,故意保护自己的“领地”,害怕别人会染指他的工作。我也见过这样的组织,几个值得信赖的程序员掌握着所谓的产品关键模块,而其他人不想参与,即使他们有才华,他们也只能扮演跑龙套的角色。

程序员的江湖:技术为外功 思维乃内力

这让我想起了《三国演义》中诸葛亮反对儒学的阴谋。诸葛亮在回答江东首席谋士张昭的问题时,把儒生分为君子儒和小人儒。让我们称这样的程序员为“小”程序员。程序员的技能根植于计算思维,没有秘密技能或秘密。沟通和实践是程序员继续前进的必要和有效的方式。对程序员来说,固步自封、坚持自己的缺点是一个禁忌,这完全是弄巧成拙,没有前途。

程序员的江湖:技术为外功 思维乃内力

严谨细致。在软件开发中,一切事物的逻辑原因和结果都是清楚的,在任何意义上都没有神秘主义。程序员也是软件工程师。当然,在讨论问题时,他们应该使用工程师的语言,即使用数据而不是猜测,使用逻辑而不是猜测来表达他们的观点。

有两种情况可能导致他们自己的陈述似是而非和模棱两可:第一,数据掌握得不够;第二,没有“想清楚”。例如,当我们讨论性能时,我们必须使用有意义的参数,如响应时间或吞吐量,而不是说“为什么这个系统如此缓慢”、“计算机在做什么,等待时间太长”和“不能忍受这样的程序”。用户可以这样抱怨,但是程序员不能。

程序员的江湖:技术为外功 思维乃内力

类似地,当我们谈论系统开销时,我们应该使用诸如cpu占用率和内存等量化参数。因此,一个头脑清醒的程序员不会谈论“太神奇了,我不知道为什么”,“我不知道这个问题是否可以解决”,“让我们先做这件事,然后再谈它。”一般来说,智力和非智力之间没有明确的界限,因为我们不知道如何严格定义智力。

然而,在图灵-邱琦的论文中,在可计算和不可计算之间有一个明确的界限,也就是说,计算机能解决的问题和不能解决的问题是完全不同的,是可以区分的。对于一个问题,如果能解决就能解决,如果不能解决就解决不了,所以确定它是否能解决并不困难。因此,所有这些语句都不应该是程序员使用的语言。程序员应该把一切都搞清楚,绝不放过任何潜在的问题。

程序员的江湖:技术为外功 思维乃内力

完美主义。我不知道完美主义的真正含义,也不确定完美主义是一个好词还是一个坏词。我用这个词来强调程序员应该坚持追求工作的完美。在编写代码时,你应该整洁,不允许有任何缺陷,这样代码才能正确、易读、高效、简单和优雅。对于一项任务,你不仅要完成它,还要仔细考虑你是否能做得更好。对于遇到的问题,即使看起来已经解决了,也要从头至尾充分理解,不要似是而非或寻求解决办法。

程序员的江湖:技术为外功 思维乃内力

不幸的是,对于程序员来说,变化是司空见惯的,比如新项目、新应用领域、新编程语言、新技术架构、开发过程中的新问题、新功能等等。可以说,只有变化保持不变。事实上,懒惰是害怕改变的根源。只有克服“懒惰”的想法,迫使自己走出舒适区,对新事物充满好奇心和求知欲,你才能适应永恒的变化。

5.程序员的价值得到了提高

一些公司把程序员视为水电和机器一样的冷资源。在制定项目计划时,一些项目经理认为,只要给项目分配足够的资源(包括程序员、水电和机器)并进行适当的控制,项目就能按预期顺利完成。这就像在中国东北做炖肉一样。只要把各种配料扔进锅里,打开火等着,一切都会好的。

然而,程序员首先是有血有肉的人,绝不等同于没有感情的机器。一个雄心勃勃的公司应该不断提高其产品的竞争力。什么是竞争力?就是让产品尽可能的好,成为世界上最好的,谁来竞争?一个好产品的每一步都需要程序员的创造力和想象力的帮助,这就是程序员的价值。没有一个程序员愿意把他最宝贵的创造力和想象力贡献给一个只把自己视为资源的公司。因此,聪明的管理者会尽力激发程序员的创造力和想象力。

程序员的江湖:技术为外功 思维乃内力

Infoq是一个有内容的技术社区。这篇文章最初发表在infoq微信公众账号,标识:infoqchina。(点击此原始链接)请联系微信:infoqzone。

原文作者:infoq技术媒体,如有转载,请注明出处:http://36kr/p/5044217

“读完这篇文章还不够吗?如果你也开始创业,希望你的项目被报道,请点击这里告诉我们!”

标题:程序员的江湖:技术为外功 思维乃内力

地址:http://www.j4f2.com/ydbxw/5573.html