BHznJNs
(BHznJNs)
1
今天闲来无事,在刷知乎的时候,看到了这条回答:
以前内存普遍很小时,程序员们为了压缩内存,都有过什么巧思? - Javen的回答
不出意外,评论区中的众多网友开始了对当代程序员的口诛笔伐:
在知乎上,编这种程序的不叫程序员,只有使用苹果电脑写互联网代码的才叫程序员[捂嘴][飙泪笑]
现在绝大多数叫码农。大专毕业一脑袋糨子会CVX加上GPT。OK,上岗996去了。什么代码压缩、什么优化,去他地,先干完KPI再说[惊喜]
我有一个暴论:现代技术的进步让 CPU 性能和内存大小都快速地增长,就是为了能让程序员不用把时间和精力耗费在细枝末节的代码优化上。
道理很简单,技术的进步终究是为人服务的。用户是人,开发者同样也是人。
技术的进步使软件能有更好看的界面和更强大的功能,用户自然是受益者;
技术的进步让开发者能更方便地开发出更高级的功能,这样开发者才会是技术进步的受益者。
从另一个角度来看,人都是逐利的。
对代码进行的各种优化实际上会让代码的可维护性降低,同时还会消耗开发者大量的时间和精力。这样吃力不讨好的行为,开发人员自然不会轻易去做。
而且现代的设备性能普遍过剩,对代码进行各种优化带来的提升往往微不足道,抠那么几毫秒的运行时间对于用户的感知也是几乎没有。
本文转自我的个人博客:BHznJNs' Blog
tthy
(天天忽悠)
2
先干完KPI再说[惊喜]
感觉这个才是说在点子上…毕竟现在都 工作方向 考核指标 跟以前不一样了
4 个赞
我认为只要看一个权衡即可。即开发所耗时间和运行所耗成本是否相匹配
下面我给出几个例子来说明
例子
1,我有一个即时需求,将几十个压缩包中格式为图片的bin文件提取出来
这种时候我肯定不会做任何优化的,直接把所有解压缩,然后用工具全部格式化扩展名,最后搜索
这是一次性需求,数据量不大而且没有现成的解决方案可用,那么我做出来的程序也只是一次性地临时运行,这时候“开发耗时+运行耗时”越快越好,优化只要不影响正常运行就可以完全舍弃
2,我有一个需要发行的小软件,需要用业余时间完成开发
这时候我会思考一下大概思路,可能会让AI帮我优化。但是我会用比较便捷的语言(例如不是c或java而是ahk或易语言),会优先考虑程序结构的简洁而不是性能
软件需要发行,但是我的时间有限。这时候以限制内的“开发时间”为前提,尽可能优化思路为佳
3,我是一个公司的管理者,开发的软件需要发行到全世界
这时候我必须将开发成本和用户体验权衡。我没有这个知识就不班门弄斧了,但是可以确定的是
这个时候必须将每一个因素都考虑进去,保证综合效益最佳
4,我是一个底层压缩包库的开发者,许多软件都要调用我的库进行大量解压操作
这时候从算法到每一行机器码的优化和健壮性就显得极为重要了。假设1kb的数据处理调用某函数1次(这并不少见),每次延时1ms。当处理一个5MB的文件时,耗时已经到达了恐怖的五秒钟
很明显,这种情况下就需要尽可能地优化。甚至在某个处理函数中花上很多很多时间
从上面可以明显看出,不同场景下,开发成本和运行成本的权重都不尽相同。
在上文引用链接中,马里奥开发者的优化很合适:当时的机器价格昂贵,运行成本极高。自然开发人员需要进行极度的优化。
现在许多为了减小开发成本而使用更低效的WebView框架的程序也很正确:现代设备上使用webview框架的性能损失很难感觉到,当然可以使用它减少成本。
所以我的观点是:
在不给定具体场景的情况下,讨论快速开发和极致优化孰优孰劣,没有意义
能在合适的场景下选择合适的权衡,这样的程序员/决策者/设计师,才是最厉害的
黑历史
之前想写一个程序,它需要GUI,也有重型计算任务需要承担
拿c调用winapi手搓GUI,好不容易搓好,感觉c开发太难,于是加了一个Electron框架打包的程序来完成计算任务
以至于我现在还在惊叹当时为什么能精准避开两个语言的所有优势,狠狠戳上两个语言的所有劣势
4 个赞
L11
(Ibulis1864)
4
allor
(allor)
5
以前是被硬件限制,挑战的是机器性能极限
现在是被KPI鞭策,挑战的是人类生理极限
现在一样还有挑战性能极限的开发业务,比如登月
1 个赞
BHznJNs
(BHznJNs)
6
以前的人不需要讲究效率吗?我觉得这应该不是核心原因。KPI这种绩效考核方式的出现恰恰是软件工业发展的表现
Duah
7
這問題應該能算倖存者偏差吧?
很多領域都是愈往前,人員普遍愈厲害
像最一開始搞計算機的那批,圖靈 夠厲害吧
是因為整個行業充斥著太多的困難
以至於只有優秀到這個程度才能吃這口飯
也因為規模不大,人也不多,所以反而很容易進入視野
現在的也不差阿,只是大家加把勁都有機會考100分
可天才呢,是考卷只能給他100分,就算考到了
大眾也很難看出他有多厲害,不就100分
現在考試還能用GPT呢,不一定真的需要知道啥知識
100KG
(偶遇2017)
8
比如阿三口味的windows.
比如后乔布斯时代的macos, ios.
来个正面的,foobar2000,就是“以前的程序员”开发的
haitao
(HaitaoSoft)
10
花大力气在最频繁的地方:
运行千万遍的过程,肯定要提高速度
安装在千万个电脑的程序,肯定要减少空间
w568w
(w568w)
11
我很好奇居然还没有人提这篇 2018 年的文章:
摘录几段我很喜欢的话:
现在,没人知道,也没人有意愿知道。我们只是满怀希望地把几乎没用的东西丢出去,还美其名曰“创业智慧”。
如果网页出现什么问题,只会提示你去刷新页面。谁有时间去研究到底什么地方出问题了?即使在兼容的浏览器上,Web 应用都会报出大量的“随机”JS 错误。
我们在 Linux 上构建虚拟机,然后在虚拟机上构建 Docker 容器,因为没人可以理清楚程序、编程语言和运行环境的混乱状况。我们把毯子盖在狗屎上,而不去处理。“Single binary”依然是 Go 语言的大卖点。不混乱 = 成功。
如果不重启,程序就不能长时间正常工作。有时,甚至都无法正常工作几天的时间。程序经常出现随机的问题,但是没人知道为什么。
更糟糕的是,没人有时间停下来,仔细分析到底发生了什么。 既然你有简单的方法,为什么要花费精力去寻根究底?增加服务器数量。重启进程。重置整个数据库。添加看门狗代码,每20分钟重启你崩溃了的应用。多次引用相同的资源,压缩打包然后发布。快速迭代,不要修复。
这不是工程化,这是懒惰。工程化是深入理解性能,深入理解结构,深入理解你构建的局限性。在粗制滥造上粗制滥造正是背道而驰。如果要进步,我们需要理解我们在做什么,为什么要这么做。
用户不关心。用户只是学会只期待我们能提供的。 我们(软件工程师)声称安卓应用需要350MB的空间?好吧,用户他们接受。我们声称我们没办法提供平滑的滚动?好吧,用户他们接受不流畅的手机。我们指导“如果它不工作了,试着重启手机”?用户就会重启。毕竟,用户并没有其他选择。
行业也没有竞争。大家都在构建同样很慢,体积膨胀的,不可靠的产品。 偶尔出现的高质量的产品马上就能带来竞争上的优势(iPhone/iOS、Chrome),也激励所有人向他们靠齐,但是这种情况持续不了很久。
我希望看到进步。我希望改变。我希望最先进的软件开发技术得到提升,而不是停滞不前。我不希望看到不停的重复构建同一样东西,而且每次性能更差,体积更庞大。我希望有值得相信的目标,一个有价值的终极目标,一个比现在更好的未来,一个有相同愿景的工程师社区。
今天我们拥有的不是进步,我们用简陋的工具构建勉强符合业务需求的软件。我们被困在局部的最佳状态,没人愿意离开。这不是一个好地方,这里体积膨胀而且低效。我们只是习惯了而已。
所以我想提出:我们今天所在的地方是糟糕的。作为工程师,我们有能力也应该做得更好。我们应该有更好的工具,我们应该构建更好的应用,更快,更可预测,更可靠,资源消耗更低(低几个数量级!)。我们应该深入理解我们在做什么以及为什么要做。我们可靠、可预测、最高质量地交付。我们有能力也应该为我们的工作感到自豪。
这篇文章非常辛辣(或者说偏激)地指出了软件工程的问题,而且饱受争议(因为其中的很多论据其实是错误的),尽管如此也值得一读。
4 个赞
国内大厂在乎性能的,不会只剩下拼多多了吧?
人家市值高得有理
你不能预设用户把程序跑在什么设备上。用额外的硬件规格大炮轰蚊子固然是一种泛用解法,但不是所有需求都是来自硬件软件都快速迭代的消费端的
deatil
(想雨的羽)
14
以前是不差钱的在做开发,有时间去考虑怎么利用性能,现在是差钱的在开发,先赚到钱再说
Nigh
(xianii)
15
唉,嵌入式软件已经都被排除出程序员籍了么。
现在还是有大把的单片机工程师在几kb的flash和几百byte的ram空间上在做开发的。该优化的地方还是得优化的。你们用的各种小家电,不那么“智能”的消费类电子产品里面,都是这些小容量、低主频的MCU在干活。
为什么要优化?因为更小的ram需求意味着更低的成本,在单片机上面,ram占的裸片面积比例是很大的,直接影响成本。而这个成本是生产方需要承担的。
为什么不用优化?因为上面楼层所讨论的软件运行的环境是用户承担的,优化会提升用户体验,但是同时也会带来额外的人力成本,所以关系是完全不同的。
你们再看看那些性能密集型的后端软件,因为是厂商需要承担服务器的费用,所以性能也都是尽力优化的。
以上。
7 个赞
确实有点爆论了,性能普遍过剩是一个太理想的结论,现在联想的电脑采购里搭载Win11的台式机还有4GB运存的可选项,所谓的高性能办公PC也才给到8GB
这点运存光跑Win11系统就剩的不多了,光一个微信就能再占7-800MB,再挂个钉钉又是500MB,还能开点啥呢?
我之前看过介绍红白机时代 超级马里奥这类游戏 的压缩.
简直是节俭到极致.
BHznJNs
(BHznJNs)
18
但趋势是这样的,现在很多人买手机时已经在考虑买 24G + 1T 的手机了
而且你也提到了是采购,如果是个人购买肯定不会选择这种机器呀。现在有的 16 + 1T 的本子三千不到就能买到了
有资源的时候你会想着节约资源的,都是哪种最方便最省事能搞完开发就完事了,哪还去软件优化,除非真影响体验了才会优化,快速出功能才能占领市场。
BHznJNs
(BHznJNs)
20
归根结底还是看公司和业务的需要。程序员终究还是打工人。
公司需要优化内存占用时程序员就必须得优化内存占用,公司不需要时程序员也没必要多此一举。
我觉得这只能说明 pdd 的高层有这种意识,知道自己的目标用户用的设备比较低端,再针对性地让自家的软件能流畅运行在这些设备上抢占市场。这主要还是公司的决策,和程序员没有多大关系。
如果那一天阿里意识到这一点,说不定tb能优化得比pdd还小还流畅