阅读更多

69顶
9踩

非技术

不同的公司环境会培养出不同的员工,程序员也不例外,由于大公司的开发框架十分成熟,稳定,而且充满盈利能力,所以开发者容易陷入拿来主义思维,而底层代码的编写能力正在逐渐退化。

  

前段时间,@developerworks在微博上向大家推荐了一篇引人深思的文章《程序员困境》,这篇文章的作者描述了在招聘内核程序员时所遇到的一个现象,一些来自大公司的“高级”程序员,却连最简单最基本的问题都无法回答,这不禁引发了作者的思考,下面是笔者的简译:

最近,我为招聘内核程序员而面试了数万个应聘者,有一些是来自有名的大公司,比如非常有名的芯片/嵌入式系统开发公司。许多人的简历制作的非常完美——涉及的各种项目、获得的各种奖项等,并有一些人声称,他们在内核研发上有10多年的工作经验,然而,令人惊奇地是,他们却无法回答一些基本的问题:当调用标准的malloc函数时,内核发生了什么?

别吃惊,当我让一个应聘者编写一个基于glib哈希函数的LRU缓存框架时,他首先声称自己从未使用过glib,于是我向他演示glib哈希API页面,并且详细地解释,然而一个小时后,他只写了几行凌乱的代码。我不知道在其它国家是否会有类似的情形,但在中国,或者更具体地说,在北京,这就是现实。那些“高级”程序员,在有名的外企工作几年后,连一些简单的、基本的问题都无法实现。

为什么?

我愈加思考就愈加认为,这不仅仅是与程序员自身有关,更与其所在的公司环境有关。这些公司通常会提供稳定的堆栈代码,并且多年来一直沿用着,几行没有任何变化。程序员整天围绕着这些代码工作,按照已有的思路去开发,无需自己动脑、去思考。如果长期在这样的环境下工作,并且也没有在外部进行提升和开阔,多年以后,你会发现自己处于很可怜的位置——在公司内部或团队里声称是“专家”,然而不幸地是,你却不能在市场找到一个与之平等的工作。

这就是所谓的“专家陷阱”。在当程序员的第一天,我们就梦想着成为团队/公司的专家,然而,当这一天到来,大家却陷入了困惑。越深入到当前的代码中,陷的就越深。渐渐地,我们丧失了那种从头开始创建完整项目的能力,因为现有的代码如此稳定。更糟糕的是,如果我们的主要工作仅仅是维护现有的代码,带有一些细微的功能添加和改善,一段时间后,无论你读过或学习过多么牛逼的代码,你将会发现自己不再会写代码——甚至是刚毕业那种简单的代码。这就是程序员困境:我们通过编码谋生,但环境却正在摧毁我们这种谋生的能力。

如何跳出困境

对程序员个人来说,首先,做自己的项目;其次不要待在同一团队超过两年时间。

给团队/公司的建议,给员工压力和挑战:轮流工作,让“专家”有机会拓宽自己的技能。定期举行黑客马拉松:这将有助于创建一个拥抱创新和创造的文化氛围。

对此,各位程序员,你们又是持何种观点呢?本文作者主要描述了程序员在大公司所面临的问题,你们身处的环境如何呢?不妨和我们一起分享下吧。

  • 大小: 24.8 KB
来自: csdn
69
9
评论 共 113 条 请登录后发表评论
53 楼 yunnysunny 2013-08-21 17:36
IThead 写道
gaoyanbest 写道
思想出发很好,但是偏离了正规。 公司之所以出现成熟的框架,是因为公司要考虑很多,例如:成本控制,进度控制,质量控制等等问题,成熟的框架是由时间积累出来的,是由更高级的工程师、架构是建设搭建的,能把程序员从底层的工作摆脱出来做更多的,能够解决客户需求的事情,这是必然的,也是发展的趋势。

上文最后的跳出困境的方法最为失败,怎么可能要随便跳槽呢?我觉得现在年轻人要脚踏实地,在企业多多学习如何做人做事。中国的信用体系不完整,国外更不能随便的跳槽了。

如何成为精良的程序员?如果一个真的具有思想的程序员,希望在编码架构方面发展,是需要一个过程的,要从自身的修养开始做起,而不是要求所在企业或者环境因素。有志者事竟成,提升自己的方法很多,可以在工作之余,做好自己的知识补充与技术实践,拓宽思路,多参与国内外论坛,活跃在相关领域,提升自己对专业技能的知识,不断学习才能进步;不要一味的埋怨社会,埋怨体制,如果你改变不了,那就学会在逆境中求生存,生存一段时间,就是精英。

而企业,营造的是一个专业的企业环境,企业文化,这包含太多了。

凡是要中道,不能乱批评,要有自己的思想,不要乱跟风。


支持!

框架确实是长时间锤炼出来的,这个我信。国外的人跳槽就不频繁了?西方国家的人都是以雇佣关系的态度来看待工作,他们跳槽比我们要频繁。成为一个精良的程序确实需要在业务时间多学习,但是对于那种没白没黑加班的公司是不适用。一个人的发展毕竟是和环境相关的,橘生海南则为橘,生于淮北则为枳,员工处于自己的发展考虑,有时候确实要做艰难的选择。
52 楼 IThead 2013-08-21 17:09
gaoyanbest 写道
思想出发很好,但是偏离了正规。 公司之所以出现成熟的框架,是因为公司要考虑很多,例如:成本控制,进度控制,质量控制等等问题,成熟的框架是由时间积累出来的,是由更高级的工程师、架构是建设搭建的,能把程序员从底层的工作摆脱出来做更多的,能够解决客户需求的事情,这是必然的,也是发展的趋势。

上文最后的跳出困境的方法最为失败,怎么可能要随便跳槽呢?我觉得现在年轻人要脚踏实地,在企业多多学习如何做人做事。中国的信用体系不完整,国外更不能随便的跳槽了。

如何成为精良的程序员?如果一个真的具有思想的程序员,希望在编码架构方面发展,是需要一个过程的,要从自身的修养开始做起,而不是要求所在企业或者环境因素。有志者事竟成,提升自己的方法很多,可以在工作之余,做好自己的知识补充与技术实践,拓宽思路,多参与国内外论坛,活跃在相关领域,提升自己对专业技能的知识,不断学习才能进步;不要一味的埋怨社会,埋怨体制,如果你改变不了,那就学会在逆境中求生存,生存一段时间,就是精英。

而企业,营造的是一个专业的企业环境,企业文化,这包含太多了。

凡是要中道,不能乱批评,要有自己的思想,不要乱跟风。


支持!
51 楼 hello_an 2013-08-21 16:43
  
50 楼 yunnysunny 2013-08-21 15:49
沙舟狼客 写道
yixiandave 写道
沙舟狼客 写道
成年的兔子 写道
沙舟狼客 写道
成年的兔子 写道
沙舟狼客 写道
成年的兔子 写道
不敢认同

软件领域分工使然

不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物

一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不


我倒是觉得,你让贝聿铭来累砖,八成是悲剧...

但是他的确可以累出来。可以累出来和没时间去累,那是两码事!


呃,时间问题放在一边,我不觉得他能累出来

现在材料学科进展飞快,新材料新工艺导致累砖的细节可能不同
我不怀疑他能弄清楚这些技术的来龙去脉,但是具体做就是另一回事了

我自己学校毕业一直做Java,让我看C++的代码,大致还是能明白怎么回事的,但是具体些就是另一回事了

另外说个题外话,他在设计的时候真的需要考虑具体用哪种砖么?

一个脱离的具体实现的设计不靠谱

恰恰相反,一个设计只需要在特定的地方设置指标,具体怎么实现是下面人的事。设计者只需要知道这样做至少有一套方案来实现就行,具体选用哪种方案和他无关。不然设计师把活全干了要下面人做什么?

没说设计师把活全干了,具体能不能实现,用什么实现,成本多少,这个都不考虑,空谈设计有什么用处?

能让这么多程序员用这么多年,说明人家也是一个有经验的人,并不是凭空做出来一套框架的。
49 楼 qqxiaodi 2013-08-21 13:49
随着技术进步 细分越来越明显 大家都在找自己熟悉的部分 底层的东西如果有了标准之后其实没必要每个人都去做 站在巨人的肩膀上比巨人看得更远 前提是这个巨人要强壮 专注于应用未必是件坏事
48 楼 michael88wen 2013-08-21 13:37
实在不同意作者极端的想法。
1.考察的应该是人解决问题的能力和学习能力,其他比如做事做人的态度;
2.底层的东西只作为兴趣去了解,没必要每个人都去重复造轮子;
3.不断的跳槽只能让自己处在一个更加尴尬的局面;
47 楼 xpf7622 2013-08-21 12:41
其实我觉得如果做底层开发,经常与硬件打交道的,应对底层深入了解。
如果做Web开发的,对底层深入也没有用。研究研究算法到可以。
中国大多部分公司为不做底层开发,只为了做应用赚钱,大多部分公司没有Adobe、Microsoft、Google,Oracle的实力,
他们不做底层,只用别人东西,当然底层编码能力差,这也是中国软件的悲哀。
46 楼 xpf7622 2013-08-21 12:39
其实我觉得如果做底层开发与硬件打交道的,应对底层了解很深入。
如果做Web开发的,对底层深入也没有用。研究研究算法到可以。
中国大多部分公司为赚钱,大多部分公司没有Adobe、Microsoft、Google,Oracle的实力,
他们不做底层,只用别人东西,当然底层编码能力差,这也是中国软件的悲哀。

其实TIOBE c语言排名不是第一就是第二,说明好多人在用c,中国程序员对底层深入的少了,国外可能不一样。
45 楼 寂地流年 2013-08-21 12:30
  
44 楼 沙舟狼客 2013-08-21 11:44
沙舟狼客 写道
yixiandave 写道
沙舟狼客 写道
成年的兔子 写道
沙舟狼客 写道
成年的兔子 写道
沙舟狼客 写道
成年的兔子 写道
不敢认同

软件领域分工使然

不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物

一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不


我倒是觉得,你让贝聿铭来累砖,八成是悲剧...

但是他的确可以累出来。可以累出来和没时间去累,那是两码事!


呃,时间问题放在一边,我不觉得他能累出来

现在材料学科进展飞快,新材料新工艺导致累砖的细节可能不同
我不怀疑他能弄清楚这些技术的来龙去脉,但是具体做就是另一回事了

我自己学校毕业一直做Java,让我看C++的代码,大致还是能明白怎么回事的,但是具体些就是另一回事了

另外说个题外话,他在设计的时候真的需要考虑具体用哪种砖么?

一个脱离的具体实现的设计不靠谱

恰恰相反,一个设计只需要在特定的地方设置指标,具体怎么实现是下面人的事。设计者只需要知道这样做至少有一套方案来实现就行,具体选用哪种方案和他无关。不然设计师把活全干了要下面人做什么?

没说设计师把活全干了,具体能不能实现,用什么实现,成本多少,这个都不考虑,空谈设计有什么用处?
经常因为一些不懂技术的设计者一个错误或者不合理的设计,让开发者大费周折,我想这大家应该都遇见过
43 楼 沙舟狼客 2013-08-21 11:42
yixiandave 写道
沙舟狼客 写道
成年的兔子 写道
沙舟狼客 写道
成年的兔子 写道
沙舟狼客 写道
成年的兔子 写道
不敢认同

软件领域分工使然

不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物

一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不


我倒是觉得,你让贝聿铭来累砖,八成是悲剧...

但是他的确可以累出来。可以累出来和没时间去累,那是两码事!


呃,时间问题放在一边,我不觉得他能累出来

现在材料学科进展飞快,新材料新工艺导致累砖的细节可能不同
我不怀疑他能弄清楚这些技术的来龙去脉,但是具体做就是另一回事了

我自己学校毕业一直做Java,让我看C++的代码,大致还是能明白怎么回事的,但是具体些就是另一回事了

另外说个题外话,他在设计的时候真的需要考虑具体用哪种砖么?

一个脱离的具体实现的设计不靠谱

恰恰相反,一个设计只需要在特定的地方设置指标,具体怎么实现是下面人的事。设计者只需要知道这样做至少有一套方案来实现就行,具体选用哪种方案和他无关。不然设计师把活全干了要下面人做什么?

没说设计师把活全干了,具体能不能实现,用什么实现,成本多少,这个都不考虑,空谈设计有什么用处?
42 楼 Tyrion 2013-08-21 11:39
感觉诸位说偏了,这篇文章主要是讲在大公司已有成熟开发框架的环境下很多程序员的编码能力逐渐退化的问题,因为一般程序员只需要关注业务如何用现有框架来落地就行了,主要精力放在业务梳理之上。
强调底层编码能力,是因为很多人只知其然,而不知其所以然。
当然不知其所以然还是能够完成手头上的事(这就是框架成熟的好处),但技术水平也将局限于此。
41 楼 j00131120 2013-08-21 11:31
一个字形容 lazy
40 楼 yixiandave 2013-08-21 11:23
沙舟狼客 写道
成年的兔子 写道
沙舟狼客 写道
成年的兔子 写道
沙舟狼客 写道
成年的兔子 写道
不敢认同

软件领域分工使然

不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物

一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不


我倒是觉得,你让贝聿铭来累砖,八成是悲剧...

但是他的确可以累出来。可以累出来和没时间去累,那是两码事!


呃,时间问题放在一边,我不觉得他能累出来

现在材料学科进展飞快,新材料新工艺导致累砖的细节可能不同
我不怀疑他能弄清楚这些技术的来龙去脉,但是具体做就是另一回事了

我自己学校毕业一直做Java,让我看C++的代码,大致还是能明白怎么回事的,但是具体些就是另一回事了

另外说个题外话,他在设计的时候真的需要考虑具体用哪种砖么?

一个脱离的具体实现的设计不靠谱

恰恰相反,一个设计只需要在特定的地方设置指标,具体怎么实现是下面人的事。设计者只需要知道这样做至少有一套方案来实现就行,具体选用哪种方案和他无关。不然设计师把活全干了要下面人做什么?
39 楼 成年的兔子 2013-08-21 11:20
沙舟狼客 写道
成年的兔子 写道
沙舟狼客 写道
成年的兔子 写道
沙舟狼客 写道
成年的兔子 写道
不敢认同

软件领域分工使然

不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物

一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不


我倒是觉得,你让贝聿铭来累砖,八成是悲剧...

但是他的确可以累出来。可以累出来和没时间去累,那是两码事!


呃,时间问题放在一边,我不觉得他能累出来

现在材料学科进展飞快,新材料新工艺导致累砖的细节可能不同
我不怀疑他能弄清楚这些技术的来龙去脉,但是具体做就是另一回事了

我自己学校毕业一直做Java,让我看C++的代码,大致还是能明白怎么回事的,但是具体些就是另一回事了

另外说个题外话,他在设计的时候真的需要考虑具体用哪种砖么?

一个脱离的具体实现的设计不靠谱


我倒觉得恰恰相反,对于一个成熟行业,架构的时候往往不要考虑具体的实现
38 楼 沙舟狼客 2013-08-21 11:19
成年的兔子 写道
沙舟狼客 写道
成年的兔子 写道
沙舟狼客 写道
成年的兔子 写道
不敢认同

软件领域分工使然

不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物

一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不


我倒是觉得,你让贝聿铭来累砖,八成是悲剧...

但是他的确可以累出来。可以累出来和没时间去累,那是两码事!


呃,时间问题放在一边,我不觉得他能累出来

现在材料学科进展飞快,新材料新工艺导致累砖的细节可能不同
我不怀疑他能弄清楚这些技术的来龙去脉,但是具体做就是另一回事了

我自己学校毕业一直做Java,让我看C++的代码,大致还是能明白怎么回事的,但是具体些就是另一回事了

另外说个题外话,他在设计的时候真的需要考虑具体用哪种砖么?

一个脱离的具体实现的设计不靠谱
37 楼 成年的兔子 2013-08-21 11:05
沙舟狼客 写道
成年的兔子 写道
沙舟狼客 写道
成年的兔子 写道
不敢认同

软件领域分工使然

不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物

一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不


我倒是觉得,你让贝聿铭来累砖,八成是悲剧...

但是他的确可以累出来。可以累出来和没时间去累,那是两码事!


呃,时间问题放在一边,我不觉得他能累出来

现在材料学科进展飞快,新材料新工艺导致累砖的细节可能不同
我不怀疑他能弄清楚这些技术的来龙去脉,但是具体做就是另一回事了

我自己学校毕业一直做Java,让我看C++的代码,大致还是能明白怎么回事的,但是具体些就是另一回事了

另外说个题外话,他在设计的时候真的需要考虑具体用哪种砖么?
36 楼 沙舟狼客 2013-08-21 10:55
成年的兔子 写道
沙舟狼客 写道
成年的兔子 写道
不敢认同

软件领域分工使然

不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物

一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不


我倒是觉得,你让贝聿铭来累砖,八成是悲剧...

但是他的确可以累出来。可以累出来和没时间去累,那是两码事!
35 楼 沙舟狼客 2013-08-21 10:47
rubskin 写道
心声啊,我所在的圈子确实也是这样,甚至包括我在内,也许是国内普遍加班严重,老一辈都 “退休”了,也许是现在大多是80末90初的一些“后起之秀”影响了,大家没时间,没有精力,更没有毅力和钻研的精神。

80后,90后都是浮躁的一批,不知道那些大牛去世了之后,谁还能当中流砥柱
34 楼 成年的兔子 2013-08-21 10:46
沙舟狼客 写道
成年的兔子 写道
不敢认同

软件领域分工使然

不要以为大家都是“工程师/程序员”,累砖的和画图纸的是完全不同的两类生物

一个砖都累不好,甚至没见过转的“生物”,不知道那个图纸是怎么画出来的,敢用不


我倒是觉得,你让贝聿铭来累砖,八成是悲剧...

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 程序员职业生涯系列:关于技术能力的思考与总结

    重复琐碎类工作的不同做法 抽象复杂类工作的不同做法 成长的维度 技术能力层次模型 术:硬核技术能力 法:技术架构能力 道:技术领导力 如何提升技术能力 寻找成长的源动力 常态化的总结与反思 实用技巧 程序员的...

  • [转][自勉]程序员困境:底层编码能力正逐步丧失

    原文:http://www.csdn.net/article/2013-08-19/2816613-Programmer%E2%80%99s-dilemma前段时间,@developerworks在微博上向大家推荐了一篇引人深思的文章《程序员困境》,这篇文章的作者描述了在招聘内核程序员时所...

  • 底层编码能力正逐步丧失

    不同的公司环境会培养出不同的员工,程序员也不例外,由于大公司的开发框架十分成熟,稳定,而且充满盈利能力,所以开发者容易陷入拿来主义思维,而底层代码的编写能力正在逐渐退化。   前段时间,@...

  • 技术能力的思考和总结

    在程序员界有一个悖论持续在困惑着很多技术人:在写代码的人的困惑是一直写代码是不是会丧失竞争力,会不会被后面年轻的更能加班写代码的人汰换。典型代表就是工作5年左右的核心技术骨干,此时正处于编码正嗨但也...

  • 阿里技术专家:最牛逼的技术能力,是技术领导力

    来源:阿里巴巴中间件01技术人成长的悖论Aliware在程序员界有一个悖论持续在困惑着很多技术人:在写代码的人的困惑是一直写代码是不是会丧失竞争力,会不会被后面年轻的更能加班写代码的人汰换。典型代表就是工作 5 ...

  • 从程序员到项目经理

    从程序员到项目经理(一):为什么要当项目经理 “从程序员到项目经理”,这个标题让我想起了很久以前一本书的名字《从Javascript到Java》。然而,从Javascript到Java充其量只是工具的更新,而从程序员到项目经理,...

  • 从房产中介到程序员--80后张江男

    一个80后程序员、张江男的成长史

  • 程序员生存定律

    http://blog.csdn.net/leezy_2000/article/details/29407747#comments 程序员生存定律这书是陆续发的,所以做个目录让想从头读的方便些: 前言:解码程序人生

  • 谈谈技术能力

    在程序员中,围城现象非常严重,是技术人在职业发展过程中必定会面临的困境。但要回答清楚这个问题,其根源不在于是写不写代码或者代码量的多少,其本质还是要回到什么叫技术能力以及如何提升技术能力这个根节点上来...

  • 基于matlab实现的数值计算及金融运用 ,金融时间序列数据分析 ,MATLAB和其他软件数据连接.rar

    基于matlab实现的数值计算及金融运用 ,金融时间序列数据分析 ,MATLAB和其他软件数据连接.rar

  • 使用SegNet进行语义分割-python源码.zip

    使用SegNet进行语义分割-python源码.zip

  • JSP企业电子投票系统 2.zip

    JSP企业电子投票系统 2

  • EmotionVGGnet情绪识别-python源码.zip

    EmotionVGGnet情绪识别-python源码.zip

  • 基于matlab实现的遗传算法、模拟退火算法、禁忌搜索算法求解VRP问题的matlab程序.rar

    基于matlab实现的遗传算法、模拟退火算法、禁忌搜索算法求解VRP问题的matlab程序.rar

  • 大数据Python科学计算库-Numpy实战:numpy代码

    大数据Python科学计算库-Numpy实战:numpy代码 练习题.ipynb 9-读写.ipynb 8-随机模块.ipynb 7-运算.ipynb 6-数组 生成.ipynb 5-数组形状.ipynb 4-排序.ipynb 3-数值计算. ipynb 2-array结构.ipynb 1-Numpy概述.ipynb 1- Numpy概述.ipynb 2-array结构.ipynb 3-数值计算.ipy nb 4-排序.ipynb 5-数组形状.ipynb 6-数组生成.ipynb 7-运算.ipynb 8-随机模块.ipynb 9-读写.ipynb 练习题.i pynb

  • 基于统计分析的地面搜索最短耗时的计算方案设计.doc

    本文档是课题研究的研究报告内含调研以及源码设计以及结果分析

  • 基于BlazePose+KNN实现人体姿态健身计数算法python源码+项目说明.zip

    基于BlazePose+KNN实现人体姿态健身计数算法python源码+项目说明.zip 项目描述: 实现基于mediapipe的人体姿态识别的AI健身自动计数功能 支持健身动作:1、俯卧撑 2、深蹲 3、引体向上 4、仰卧起坐 创建时间:2022.11.28 完成时间:2022.11.28 如何训练新的健身动作模型? 1、修改mian函数 2、首先在fitness_pose_images_in的文件夹下存储对应健身的初态动作与末态动作图像 3、修改videoprocess.py文件中的代码,flag模式选择部分,注意class_name必须与fitness_pose_images_in文件夹下的文件名字保持一致 4、修改videoprocess.py文件中的代码,flag模式选择部分,注意class_name必须与fitness_pose_images_in文件夹下的文件名字保持一致 5、修改trainingsetprocess.py文件中的代码,flag模式选择部分,注意 文件名 必须与fitness_pose_images_in文件夹下的文件名字保持一

  • dijkstra 算法说明和基础应用介绍.docx

    Dijkstra 算法,又称为迪杰斯特拉算法,是一种用于解决单源最短 路径问题的经典算法。它的核心思想是通过逐步确定起点到其他顶 点的最短路径来求解。该算法被广泛应用于图论和网络路由等领域。 Dijkstra 算法的基本步骤如下: 1. 创建一个距离数组 dist[] ,用于存储起点到各个顶点的最短距离。 将起点的最短距离初始化为 0,其他顶点的最短距离初始化为无穷 大。 2. 创建一个集合 S ,用于存储已经找到最短路径的顶点。 3. 重复以下步骤,直到集合 S 包含所有顶点: a. 从距离数组 dist[]中选择最小值对应的顶点 v,将 v 加入集合 S。 b. 更新距离数组 dist[] : - 对于每个与 v 相邻的顶点 u,如果通过顶点 v 可以获得更短的 路径,则更新 dist[u]为更短的距离。 c. 重复步骤 a 和 b,直到集合 S 包含所有顶点。 4. 最终,距离数组 dist[]中存储的就是起点到各个顶点的最短路径。 下面通过一个简单的例子来说明 Dijkstra 算法的具体过程。假设有 一个带权有向图,其中的顶点和边分别如下所示:

  • node-v12.6.0-linux-s390x.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics