首页 > 手机 > 配件 > 技术栈是什么意思,全栈是什么意思

技术栈是什么意思,全栈是什么意思

来源:整理 时间:2022-04-02 15:47:31 编辑:华为40 手机版

当然我所说的是内存栈的意思,其实“栈”就是个数据结构,是一种限定仅在表尾进行插入和删除操作的线性表,这个特性不正好是符合我刚才说的FILO嘛。你要不信,随便找一个高档写字楼看看,看有多少程序员,然后又有多少人做的是核心技术,大部分恐怕都是增删改查。

程序员为什么是个青春饭,而不是像医生律师一样越老越值钱?

程序员为什么是个青春饭,而不是像医生律师一样越老越值钱

我先后从事过机械、电气、信息技术行业,有对比才有伤害。第一、程序员所涉及到的技术更新换代快,经验难以积累计算机编程,总共出来也才几十年,现在还在高速发展中,更新换代非常快。从DOS编程到windows编程、Linux编程,再到移动端编程。每一次跨度都非常大。需要不断地熟悉不断变化的操作系统、编程语言虚拟机(或解释器)、框架、引擎。

比方说你做安卓,得熟悉安卓操作系统,使用python,得熟悉python的解释器,使用spring框架,又得熟悉这一整套不断更新迭代的“大家伙”,做Web开发,还要遵循不断升级的Web标准。好不容易学会了表格布局,结果出来一个div css,好不容易熟练了jquery,结果听说vue火了……在一个技术变成主流之后,之前好不容易积累的经验,就会变成过时的技术。

比如说某个人现在40岁,那么他可能35岁之前学的东西都不值一文。医生、律师、机械、电气则没有这个问题。拿电气里面更新比较快的PLC编程来说,我接触20多年了,现在和以前,还是没有什么变化。没有听说过哪个电气工程师20年前的经验过时了的说法。既然经验难以积累,那自然不会越老越吃香了。程序员也有过时比较慢的技术,比如系统底层开发、驱动开发、嵌入式开发、芯片开发。

但是技术要求高,需求小,工资还不一定高(收入与市场高度相关)。不是说技术难度越高收入就越高。比如一个苦练20年的京剧艺术家的收入就不及一个只学过2年唱歌的流行歌曲明星。第二、程序员试错成本低一个人在写代码时,会非常频繁地调试(debug)以及测试(test)。它们的成本是如此的低廉!我写代码时,基本上不到两分钟就要debug或run一下。

可以说,写的东西,立马就能看到效果。如果写对了,或单元测试通过,皆大欢喜,如果报错了或结果不是预期,马上修改了再来一把。但是,其他行业,就远远没有这么幸运了。一个医生,不能对病人说,我没有把握,我给你开一剂药,咱们试一把;如果不行,咱再换一剂药。病人不得骂死你啊。电气上,大家把电线接好了,要开始合闸了,现在竟然谁也不敢合闸通电。

这要是烧东西了谁负责呀?于是请来了最资深的电气专家坐镇,让他亲自检查、合闸。试错成本低,导致了“老专家”的地位没有其他行业高,不容易受待见。因为年轻人也可以上,错了就修改代码再来,bug嘛,没有什么大惊小怪的。这不像医生、律师、机械、电气等其他行业,出了bug是要出人命的(包括律师的人命官司)。这时候,经验比技术重要(因为没有试错论证机会)。

一般年级大经验多,因为接触的案例多,遇到问题就参考经验做法。不像程序员遇到问题,就搭建虚拟仿真环境,动手写代码调试一番,经验教训的作用被淡化。第三、程序员的工作容易被推翻重来一个东西被推翻重来,就意味着这东西可能已经过时了,不再需要维护了,里面的细节就没有必要深究了。如果是这样,那么老人的价值就会降低。

代码重构是再正常不过的事,其成本相对其他行业要低得多。有时候甚至就是翻天覆地的变化,基本是使用新编程语言重新实现了一遍。京东、豆瓣、知乎、涛宝,等等,都不能例外。我从事的机械行业,很多同事可以自豪地说,看,那台价值几千万的设备就是我10几年前设计出来的,它的每一个细节我都了如指掌。但是信息技术行业,却很难如此。

当机械设备出现问题,找老专家出马。但是信息系统出问题,恐怕没人想到老专家了。因为它早已经不知道被重构多少次了,找正在升级和维护的年轻人才是常见的做法。很多行业都有核心技术,不传之秘,它们就不容易被推翻重来。信息技术领域也有,但是相对要少一些(bat、华为等顶级公司开发的除外),特别是小型业务系统。甚至可以说得更直白一点,那东西就是靠人堆出来的。

你要不信,随便找一个高档写字楼看看,看有多少程序员,然后又有多少人做的是核心技术,大部分恐怕都是增删改查。在他们眼中,需求远远比核心技术重要。做需求的收入最高。需求,或者说业务流程往往与增删改查高度映射。如果一个行业的某个人做技术,却不能掌握核心技术,动不动就被别人推翻,那就容易吃青春饭。第四、程序员学习成本相对较低这是相对的。

甚至一台电脑就能开始学写代码。很多年前,程序员还是比较难的,因为自己要造很多轮子,要学习很多基础知识,比如数据结构、编译原理、操作系统。现在好了,直接用“框架”呀,底层别人帮你实现好了,你只需要专注业务即可。然后就变成了,我们比的不是谁的数学好,谁的基础扎实,而是比谁更熟悉“框架”。最后还会变成,就比谁更熟悉需求(业务)。

甚至一度认为高大上的人工智能深度学习,也慢慢变成了“调参高手”,意思是说,我不需要懂数学,别人(以外国人为主)现成的算法都写好了,我调调参数就能用了。这是一门体力活,非常花时间,也很挣钱。学习成本低,还得益于两点:一个是盗版软件,不花钱就能享受顶级体验,二是开源精神。其他行业可没有这样的好事,要花真金白银买实验设备、材料才能自学东西。

通过搜索引擎,很多编程问题都能找到答案,很多人也笑称,我们是面向百度(谷歌)编程。但是其他传统行业就没有那么幸运了,网上的资源乏善可陈。他们遇到问题,不是找百度,而是找师父,找老专家。老专家的地位自然被提高了。医院招一个应届硕士生,先得跟师父(老师)学习至少一年,没有工资,然后才敢慢慢上手,还必须非常谨慎,人命关天嘛。

内存为什么要分堆栈在编程里,要是全部只用堆或者全部只用栈,可行吗?

程序员为什么是个青春饭,而不是像医生律师一样越老越值钱

其实我们都知道,计算机内存本来就是一块内存,没有堆栈之分。在学编程的时候,我们应该都听过一句话 “如果程序结束之后仍然想要访问那一段数据就要用堆”,我想这个其实就是你疑问的关键了,堆和栈都有其自己的独特性,可能你了解这两个东西,但是我还是解释下,以免别的小伙伴在看答案的时候,不知道。栈:就像我第一句话说的,本没有什么堆栈之分,但是编程语言的出现,就有了一个概念“函数”,这个函数之间是可以相互调用的(就像我们传递东西,比如:胡小然 将东西传递 胡小然2 将东西传递 胡小然3,之后需要从后面向前面反馈传递结果,这个传递的过程我们就可以理解为调用),那就出现了前后之分,这就是调用队列了,那这个队列有个什么特点呢,那就是先被调用进入队列的要最后出去,就是我们常说的先进后出(FILO),那么这时栈就出现了,而且它还有一个特点那就是线程独有(所以可以存放我们的临时变量),生命周期是随线程的。

当然我所说的是内存栈的意思,其实“栈”就是个数据结构,是一种限定仅在表尾进行插入和删除操作的线性表,这个特性不正好是符合我刚才说的FILO嘛。所以你可以这么理解c 或者java(jvm)中的内存栈的概念,就是编程语言的作者为了管理内存使用了“栈”这种数据结构(说的再细点就是现代CPU体系结构决定了栈是管理函数调用和局部变量的最佳数据结构。

因为CPU已经提供了现成的指令)。堆:可算是一种特殊的数据结构,好像我们经常使用的二叉树。内存堆这个解释起来就更简单了,就是一块能自由分配的内存。它允许程序在运行时动态地申请某个大小的内存空间,比如:程序员向操作系统申请一块内存,当系统收到程序的申请时,会遍历一个记录空闲内存地址的链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。

其特点就是分配的速度较慢,地址不连续,容易碎片化并且是由程序员申请,同时也必须由程序员负责销毁,否则导致内存泄露。像在java这种高级语言中,我们不比担心内存回收的问题,那是因为jvm已经在帮我们处理了。上面说了这么多,就是想说明一下内存栈和内存堆出现的意义和作用,所以答案就出来了,那就是不能“只用堆或者全部只用栈”那样我们程序的调用和数据的存储都会出现问题。

文章TAG:栈是全栈技术

最近更新