问题

科学计算的程序编写和通常所说的码农的编程有多大的区别?

回答
科学计算编程和我们常说的“码农”编程,虽然都涉及编写代码,但它们在目标、思维方式、技术栈、以及工作产出上,都有着相当大的差异,甚至可以说是两个不同维度的事情。

核心目标:解决数学问题 vs. 实现应用功能

科学计算编程: 核心目标是模拟、分析和解决复杂的科学或工程问题。这通常意味着需要将数学模型、物理定律、统计方法等转化为可执行的计算机程序。你要做的是让计算机“理解”并“执行”一套数学逻辑,通过计算来揭示现象的本质,预测未来的趋势,或者优化某个系统的性能。比如,模拟天体运行的轨迹,分析蛋白质的折叠方式,预测气候变化,或者设计更高效的算法来处理海量数据。这里的“代码”更像是数学公式和逻辑的载体,它的终极目标是产出有科学意义的计算结果。

“码农”编程: 更广泛地指向开发软件应用、网站、系统等,以满足用户需求或商业目标。这里的重点在于实现具体的功能:用户界面是否友好,数据是否能按时响应,业务逻辑是否清晰,系统是否稳定可靠。比如,开发一个网上购物平台,做一个手机APP,构建一个企业内部的管理系统。代码的最终目的是产出用户可交互、可使用的软件产品。

思维方式:从数学逻辑到工程实践

科学计算编程: 它的思维方式更贴近数学家、物理学家、统计学家。你需要深刻理解问题的数学背景,对算法有直觉性的把握,并且能够将抽象的数学概念映射到具体的代码实现。这涉及大量的抽象思维、逻辑推理、公式推导和数值分析。你会经常思考“这个算法的收敛性如何?”,“误差是如何累积的?”,“在有限精度下如何保证计算的稳定性?”。

“码农”编程: 它的思维方式更偏向工程师、产品经理。你需要理解用户的需求,将需求转化为可操作的任务,并用代码实现这些任务。更注重工程实践、架构设计、代码的可维护性、可扩展性、用户体验。你会考虑“这个功能怎么实现最快?”,“用户界面怎么设计更直观?”,“代码如何组织才能方便别人维护?”,“这个系统如何保证高并发下的稳定性?”。

技术栈:各有侧重,但也有交叉

科学计算编程:
核心语言: Python(配合NumPy, SciPy, Pandas, Matplotlib等库)、MATLAB、R、Julia、Fortran、C/C++(高性能计算)。
重点关注: 数值计算库(线性代数、积分、微分方程求解)、科学绘图库、统计分析工具、并行计算框架(MPI, OpenMP)、GPU计算(CUDA, OpenCL)。
算法: 各种数值算法(迭代法、优化算法、数值积分、快速傅里叶变换)、机器学习算法、模拟算法(蒙特卡洛、有限元法)。

“码农”编程:
前端: JavaScript (React, Vue, Angular), HTML, CSS。
后端: Java, Python (Django, Flask), Node.js, Go, Ruby, PHP。
数据库: SQL (MySQL, PostgreSQL), NoSQL (MongoDB, Redis)。
框架与架构: MVC, RESTful API, 微服务。
重点关注: Web开发、移动开发、数据库管理、网络通信、系统设计、DevOps。

当然,两者之间有很强的交叉。很多科学计算的成果最终需要封装成用户友好的应用,这时候就需要“码农”的技术。反之,很多“码农”在处理数据分析、机器学习等任务时,也需要用到科学计算的库和方法。

工作流程与挑战:精确度 vs. 效率与稳定性

科学计算编程:
流程: 提出问题 > 建立数学模型 > 选择或设计数值算法 > 编写代码实现算法 > 进行数值实验与验证 > 分析结果 > 优化模型或算法。
挑战: 数值稳定性、精度控制、计算效率(尤其是在处理大规模数据时)、算法的复杂性、对数学理论的深刻理解、调试困难(因为错误可能隐藏在复杂的计算过程中,而不是简单的逻辑错误)。

“码农”编程:
流程: 理解需求 > 方案设计 > 编码实现 > 测试(单元测试、集成测试)> 部署 > 维护。
挑战: 需求变更、团队协作、代码耦合度、性能瓶颈、兼容性问题、安全漏洞、用户反馈处理。

工作产出:理解世界 vs. 创造工具

科学计算编程: 产出通常是数据、图表、模型、论文、发现。它帮助我们更深入地理解自然现象、社会规律,或者为决策提供数据支持。

“码农”编程: 产出通常是可运行的软件、网站、APP、系统,它们直接服务于用户或业务,改变人们的生活和工作方式。

总结一下,你可以这样理解:

科学计算编程,更像是用代码作为“实验工具”或“研究助手”,去探索和理解世界。 它需要的是“硬核”的数学和科学功底,以及将这些功底转化为计算逻辑的能力。
“码农”编程,更像是用代码作为“建造材料”或“工程师的工具”,去创造和实现产品。 它需要的是扎实的编程基础、工程思维和对用户需求的敏锐洞察。

两者都是编程,都是创造性的工作,但它们所处的“赛道”和所需的“内功”有着显著的不同。当然,随着技术的发展,界限也在变得模糊,很多优秀的开发者能够同时驾驭这两个领域。

网友意见

user avatar
  • 90%的时间用C/C++、Fortran。偶尔用mathematica, matlab等高级工具干些零碎的活;
  • 最重要的是正确性,其次是速度;
  • 99%的时间花在除虫上,其中90%的情况是数组指标越界;
  • 大量使用各种数值算法和线性算法,很少使用基于复杂数据结构的算法;
  • 程序快不快,全看会不会迭代;程序好不好,全凭文章在哪找;
  • 程序里设置很多参数,取值都是试出来的,一般不能改动;
  • 先写串行程序,再写并行程序;
  • 经常访问数学维基或百科网站(wikipedia、mathworld、planetmath等);
  • 科学计算领域的圣经是Abramowitz和 Stegun的数学手册,谭浩强是Numerical Recipe;
  • 代码的长度随着科研项目的进展不断增长;
  • 大量使用组里“祖传”下来的程序,被告知不要改变里面的参数;
  • 使用双精度;
  • 依赖编译器的优化,对硬件构架也有些了解;
  • 被告知尽量不要使用闭源软件;
  • 属于VIM或Emacs阵营之一;
  • hostname 是个科学家的名字;
  • 有几个从师兄师姐那儿拷来的脚本;
  • 程序的文档就是正在写的文章;
  • 梦想再装块显示器;
  • 有作为人形高级计算器的觉悟;
  • 梦想着有一天写个巨牛逼的脚本把程序从编译到执行到数据处理都自动化了;
  • 程序能跑的时候项目才完成了5%~10%;
  • 用并行(parallelism)不用并发(concurrency),用数组不用链表;
  • 变量名字起的很怪,其实是从方程里来的;
  • 程序不具有可读性,除非你先读懂对应的文章;
  • 不断有新入组的学弟学妹抗议代码不符合软件工程,后来他们要么闭上嘴去灌水,要么拿了master走人了;
  • 常常有重构代码的欲望,试过几次都放弃了,终于有天下午把代码重构了一遍,结果发现跑出来的数据怎么都不对,从此彻底放弃;
  • 总以为做科学计算的人写的代码都很丑,后来看过一个大牛写的代码,彻底惊呆了 —— 但学CS的室友照样说丑;
  • 写着写着,一不小心代码就成了某个领域某个小方向 the state of the art;
  • 常常提醒自己是科学家不是程序员。

  • 程序员总是认为HPC的编程很弱智,真让他/她们去写HPC代码 ——开玩笑——他/她们连流体力学(量子化学、广义相对论 …… )都不懂,怎么可能会做科学计算;

  • 找到工作的时候鄙视程序工程师的职位,找不到工作的时候哭着喊着要当程序员;
  • 是程序员里面最懂流体力学的,是懂流体力学的人里面最能发文章的,是能发文章的人里面最会写程序的;
  • 是宅男里面最费电的,是宅女里面最费纸的。

user avatar
  • 一切以物理研究维准绳, 你能提出一个新公式, 甚好; 能在计算中发现新现象, 不错; 把程序用面向对象重写一遍--你这里有什么新物理么? 我招你进来又不是让你干这个的!
  • 如果你能提出一些新设想或者新观点, 老板会两眼放光; 如果想把程序的某一部分写的简单易懂一点, 老板表面上还是欢迎态度, 心想这货又在偷懒, 反正我又不会放到master branch里面。
  • 虽然正确性绝对是第一位,速度和优化还是非常要紧的, 某超算中心给我们分了每年五千万小时*核心的计算资源, 大概50人一起烧, 有个家伙第一个月就用掉两百万小时*核心, 然后老板开会跟我们说你们特么省点用, 想好了再算!而性能上的每一点优化, 省下来的都是真金白银, 你说我们有没有动力去做优化。
  • 然而优化数据结构, 展开循环什么的其实是相对较low的优化方法。 物理界的数学大牛一般都是直接优化算法, 辛流形实分析复分析满天飞, 有的时候可以带来几十倍的性能提升, 几年内发几十篇文章, 然后飘飘然去碾压其他方向。
  • 同学到天河1A去做整机运行, 就是把天河所有的计算能力全用上。 24小时烧掉10万+人民币, 后来发现参数调错了, 计算结果无效。自行脑补老板的表情。

==以下是吐槽==

我们实验室的主要应用程序,从90年代一直开发至今, 原来是GPL授权, 后来变成private的了~~~~
几十个参数设置不佳或者不匹配会出段错误,
会出段错误,
段错误,


实验室的人肉版本控制系统:导师

PS:这个是有典故的, 负责做软件的其他组同学过来参观, 看我们的版本都是用日期命名, 好奇问我们用什么VCS, 我说没有, 老板说我们有版本控制, 手动的

经过多方努力, 我们的程序终于初具面向对象功能了!就是把原来的全局数组+子程序用30几个参数的函数包起来, 每一个参数都是几十万长度的Array(幸好Fortran是传指针)

循环人肉展开, 有的同学不会用循环, 直接写成 x(1) =1 x(2) = 3 x(3)=5, 省的编译器展开循环了。。。。

上古神器goto, 程序里有一个核心部分从1995年以后就没人动过, 原理是一个循环, 中间会有各种条件跳出, 然而并没有用结构化循环, 全尼玛是goto实现的, 后来说要优化这一部分, 果断找浪潮的工程师, 还是为他们捏一把汗。

什么, 你要改一个参数?在源代码里xx行, 找过去是这么写的

       switch=0  if(switch==1) then   balabala else if (switch ==0 ) then   balabala end if      

改完之后重新编译一遍就行了。尼玛不把参数拿到配置文件至少用个宏啊。

上面说到的switch还算是良心之作, 一个师姐写的概念验证程序(大概也有5000+行), 里面的开关选项是这么写的:

       real :: switch = 0.0  if( switch == 0.0 ) then   balabala else if ( switch == 1.0) then   balabala end if      

当时我心中万千草泥马跑过, 心想现在的编译器擦屁股能力还真强, 这都能得出正确结果

就这破程序做出来的结果还上过Science

类似的话题

  • 回答
    科学计算编程和我们常说的“码农”编程,虽然都涉及编写代码,但它们在目标、思维方式、技术栈、以及工作产出上,都有着相当大的差异,甚至可以说是两个不同维度的事情。核心目标:解决数学问题 vs. 实现应用功能 科学计算编程: 核心目标是模拟、分析和解决复杂的科学或工程问题。这通常意味着需要将数学模型、.............
  • 回答
    科学研究的“前沿”二字,自带一种令人敬畏的光环,它指向的是未知世界的边界,是人类认知能力的极限挑战。而“大众化科普”呢?听起来似乎有些亲民,甚至是接地气。那么,这两者之间,是否真的存在天然的隔阂?前沿的科学研究,究竟有没有必要,也必须被大众化科普?前沿科学研究是否需要被大众化科普?我的答案是:绝对需.............
  • 回答
    这是一个非常有意思的问题,也是很多观察者在疫情期间反复思考的。发达国家居民普遍拥有较高的受教育程度,这通常意味着他们具备更好的获取、理解和运用信息的能力,按理说在面对像新冠肺炎这样的公共卫生危机时,应该能更好地做出理性的判断和行为。然而,我们看到的现实情况却更为复杂,甚至在某些方面显得有些“反常”。.............
  • 回答
    在科幻小说界,刘慈欣无疑是一个绕不开的名字。《三体》系列以其宏大的想象力、硬核的科学设定和深刻的哲学思考,将中国科幻推向了世界舞台。那么,像刘慈欣这样的科幻作家,他们对科学知识的掌握和了解程度,究竟能与哪些群体相提并论呢?这个问题值得我们深入探讨。与物理研究生相比:深度与广度的差异首先,我们来谈谈与.............
  • 回答
    兄弟,我懂你!咱们程序员这行儿,一坐一整天,眼睛跟电脑黏一块儿,脑子像在跑八百米,下班了就想葛优瘫,但身体又时不时发出“救命”的信号。想健身,又觉得累得像刚搬完一吨砖,这纠结劲儿,谁能懂?别急,今天咱就来聊聊怎么在“代码搬砖”和“肌肉搬砖”之间找到那个平衡点,而且是那种让你一听就觉得靠谱、不是瞎扯的.............
  • 回答
    知乎用户程亦之将物理学家杨振宁比作“锁死中国科学”的“三体星人”,这种比喻是否合适,可以从多个角度进行详细分析。理解这个比喻的关键在于把握“锁死中国科学”的含义,以及“三体星人”所代表的特质。1. 程亦之的论点与“锁死中国科学”的内涵:首先,我们需要了解程亦之提出这个比喻的核心论点是什么。虽然我无法.............
  • 回答
    这个问题很有意思,因为它触及了我们对人类潜能和生命极限的认知边界。如果一个普通人拥有无限的寿命,并且始终坚持科学的锻炼,他的身体素质能否达到“超人”的程度?要回答这个问题,我们需要拆解几个关键点:1. 什么是“超人的程度”?首先,“超人”这个词本身就带有主观性。在不同的文化和语境下,超人的含义可能差.............
  • 回答
    关于“单眼皮的进化程度比双眼皮高”的说法,我得说,从科学和进化的角度来看,这个说法并没有可靠的依据,更可以说是误传。事实上,用“进化程度高低”来衡量单眼皮和双眼皮的优劣,本身就是一种不准确的理解。让我详细解释一下为什么会产生这样的误解,以及从科学角度来看,眼睛形态的差异是怎么形成的。为什么会有“单眼.............
  • 回答
    这个问题很复杂,涉及到科学认知、文化背景、教育体系、社会情绪等多个层面。要详细解答为什么许多非中医药专业的人(包括程序员、本科生等)会坚决否定中医药的医学价值和阴阳的科学性,需要从以下几个方面进行分析:一、 科学方法论和证据标准的不同理解:这是最核心也是最根本的原因。 主流科学的基石——实证主义.............
  • 回答
    对比东西方社会对科技与人才的重视程度:一个深入的观察当我们审视现代社会的发展脉络,科技无疑是驱动前行的核心引擎,而科技人才则是点燃这引擎的火种。在这一领域,中国与欧美社会展现出截然不同的重视程度和发展路径。要理解这种差异,我们不能简单地将其归结为某个单一因素,而是需要深入剖析历史、文化、制度及社会结.............
  • 回答
    你好!你这个问题问得非常到位,这确实是很多日本文学部学生在选择学校时会遇到的一个核心纠结。简单来说,这就像是在问,是选择一个有地方特色的、扎根于某一区域的深度体验,还是选择一个更具全国性影响力、资源更集中的大都市环境。而你提到的“大东亚那种程度的东京圈私立”,我理解你是指那些虽然不是顶尖名校,但在东.............
  • 回答
    这确实是一个令人费解的现象,尤其是在如今这个强调平等和多元化的时代,科学家、数学家、物理学家乃至程序员的女性比例偏低,这背后原因复杂,是历史、文化、社会结构和个人因素交织作用的结果。要深入剖析这个问题,我们需要从多个维度去理解:一、历史的阴影:早期科学和教育的性别壁垒 教育机会的剥夺: 在漫长的.............
  • 回答
    好的,咱们就来好好聊聊新冠病毒“共存”这个话题,以及怎么科学地去看待它的致死率。这个话题确实挺复杂的,牵扯到很多方面,咱们尽量把话说透。“共存”:不是简单地说“我接着”,而是怎么“带着病毒活”首先,得弄清楚“共存”这词儿,它不是一句简单的口号,也不是说我们就放任病毒不管,任其传播。更贴切的理解是,我.............
  • 回答
    当然,这绝对是一个令人兴奋且极具潜力的想法。设计一种将虚拟货币的“工作证明”机制与实际科学计算相结合的数字货币,不仅能解决现有加密货币挖矿带来的能源浪费问题,更能为人类的科学进步注入新的动力。让我们来深入探讨一下这个概念。核心理念:让“挖矿”成为科研的燃料我们设想的这种虚拟货币,其核心机制将不再是解.............
  • 回答
    Fortran,对于许多经历过科学计算发展历程的人来说,它是一个熟悉甚至怀念的名字。在探讨它是否仍然是科学计算领域“主要”语言这个问题时,我们需要更细致地审视其地位,而不是简单地用“是”或“否”来概括。Fortran 的辉煌与遗产Fortran(Formula Translation)诞生于上世纪5.............
  • 回答
    你提到“数理背景不强”,但想自学“科学计算(计算经济学)”,这其实是一个很有挑战但完全可以实现的学习路径。很多人一开始都不是数学或计算机的“天才”,但通过系统的方法和坚持,一样能在这些领域取得不错的成绩。关键在于找到适合你的节奏和方法。我尽量详细地和你聊聊怎么一步步来,让你觉得这是一个人在分享经验,.............
  • 回答
    科学的世界是不是冰冷残酷无意义的?应该怎样去面对无神论揭示的纯粹的物质世界?这是一个深刻且富有哲学意义的问题,涉及到我们如何理解宇宙、生命以及我们在其中的位置。许多人第一次接触到科学和无神论所描绘的纯粹物质世界时,可能会感到一种失落、恐惧或意义的真空,这种感受是完全可以理解的。让我们来详细地探讨这个.............
  • 回答
    “科学的尽头是神学”,这句话流传甚广,也引发了不少争论。它到底对不对?这得看我们如何理解“科学”、“神学”以及“尽头”这几个词了。为什么会有人说“科学的尽头是神学”?这句话的出现,很大程度上源于人们在探索宇宙和生命奥秘的过程中,遇到的那些超出科学解释范围的问题。 宇宙的起源: 科学可以告诉我们宇.............
  • 回答
    很多人玩麻将时,总会在手气不顺的时候琢磨着换个位置。那么,从科学的角度来看,这究竟有没有用呢?咱们来好好掰扯掰扯。麻将本质上是概率游戏首先得明白,麻将这玩意儿,归根结底是个概率游戏。每一局开始,牌的分配都是随机的。四个人,共 136 张牌(筒、条、万、字牌),牌局开始时,系统(也就是洗牌的手)会把它.............
  • 回答
    “科学的尽头是神学”这句话,并非一个绝对真理或已被普遍接受的科学结论,而更多的是一种 哲学上的思考和一种关于知识边界的隐喻。它反映了人类在探索未知世界的过程中,对于科学的局限性和人类认识能力的深刻反思。要理解这句话,我们需要从多个层面进行剖析: 1. 科学的本质与目标首先,我们需要明确科学的本质和它.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有