首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何掌握程序语言

教授们常常对学生灌输:“用什么程序语言不重要,重要的是算法。”而其实,程序语言却是比算法更加精髓的东西。任何算法以及它的复杂度分析,都是相对于某种计算模型,而程序语言就是描述这种计算模型的符号系统。...算法必须用某种语言表述出来,通常算法设计者使用伪码,这其实是不严谨的,容易出现推理漏洞。算法设计再好,如果不懂得程序语言的原理,也不可能高效的实现。...某些算法专家或者数学家写出来的程序极其幼稚,就是因为他们忽视了程序语言的重要性。 2. 追求“新语言”。 基本的哲学告诉我们,新出现的事物并不一定是“新事物”,它们有可能是历史的倒退。...经过C 语言的那个小组对算法多次的优化,OCaml 的版本还是快好几倍。这里的原因其实在于两方面。...别的学校都开始教C 或者 C++ 了,我们还在教 Pascal。”现在真正理解了程序语言的设计原理以后我才真正的感觉到,原来 Pascal 是比 CC++ 设计更好的语言

1.2K90
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    程序语言变形记

    程序语言的分类 ?...现在的程序语言用的比较多的大概有20多种,这些语言按照处理过程的不同大概分为两类: 编译型语言: 编译型语言是相对于解释型语言存在的,编译型语言的首先将源代码编译生成机器语言,再由机器运行机器码(二进制...像C/C++/objective c等都是编译型语言。程序在执行之前需要一个专门的编译过程,把程序编译成为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。...如CC++、Delphi等。 解释型语言: 解释性语言编写的程序不进行预先编译,以文本方式存储程序代码。在发布程序时,看起来省了道编译工序。但是,在运行程序的时候,解释性语言必须先解释再运行。...编译型语言变形过程 编译型语言最典型的代表莫过于C语言,我们就以C语言为例来讲述编译型语言的变形过程。

    1.1K50

    如何掌握程序语言

    程序语言无用论。 这是国内大学计算机系的教育常见的错误。教授们常常对学生灌输:“用什么程序语言不重要,重要的是算法。”而其实,程序语言却是比算法更加精髓的东西。...任何算法以及它的复杂度分析,都是相对于某种计算模型,而程序语言就是描述这种计算模型的符号系统。算法必须用某种语言表述出来,通常算法设计者使用伪码,这其实是不严谨的,容易出现推理漏洞。...算法设计再好,如果不懂得程序语言的原理,也不可能高效的实现。即使实现了,也可能会在模块化和可扩展性上面有很大问题。...经过C 语言的那个小组对算法多次的优化,OCaml 的版本还是快好几倍。这里的原因其实在于两方面。...现在真正理解了程序语言的设计原理以后我才真正的感觉到,原来 Pascal 是比 CC++ 设计更好的语言

    1.2K40

    如何掌握所有的程序语言

    对的,我这里要讲的不是如何掌握一种程序语言,而是所有的…… 很多编程初学者至今还在给我写信请教,问我该学习什么程序语言,怎么学习。...这些配置对应到程序语言里面,就是所谓“语言特性”。...我个人觉得这些语言都可以用来入门: Scheme C Java Python JavaScript 那么相比之下,我不推荐用哪些语言入门呢?...这里举一些次要语言特性的例子: C 语言的语句块,如果里面只有一条语句,可以不打花括号。...这种效果是你直接学习 OOP 语言得不到的,因为在学习 Java,C++,Python 之类语言的时候,你只是一个用户,而用 Scheme 自己动手实现了 OO 系统之后,你成为了一个创造者。

    99690

    如何掌握所有的程序语言

    文/王垠 对的,我这里要讲的不是如何掌握一种程序语言,而是所有的…… 很多编程初学者至今还在给我写信请教,问我该学习什么程序语言,怎么学习。...这些配置对应到程序语言里面,就是所谓“语言特性”。...我个人觉得这些语言都可以用来入门: Scheme C Java Python JavaScript 那么相比之下,我不推荐用哪些语言入门呢?...用 Scheme 实现的面向对象系统,跟 Java,C++,Python 之类的语言语法相去甚远,然而它却能帮助你理解任何这些 OOP 语言里面的“面向对象”这一概念,它甚至能帮助你理解各种面向对象实现的差异...这种效果是你直接学习 OOP 语言得不到的,因为在学习 Java,C++,Python 之类语言的时候,你只是一个用户,而用 Scheme 自己动手实现了 OO 系统之后,你成为了一个创造者。

    53100

    再谈编程范式—程序语言背后的思想

    命令式语言的不足之处就是它不适合某些种类问题的解决,例如那些非结构化的具有复杂算法的问题。问题出现在,命令式语言必须对一个算法加以详尽的说明,并且其中还要包括执行这些指令或语句的顺序。...实际上,给那些非结构化的具有复杂算法的问题给出详尽的算法是极其困难的。...属于事件驱动的编程语言有:VB、C#、Java(Java Swing的GUI)等。它们所涉及的事件绝大多数都是GUI事件。 此种程化范式要求程序员用按部就班的算法看待每个问题。...我们不会听到一个编程语言是纯泛型编程的,而没有其他编程范式。但正因为泛型并不会改变程序语言的核心,所以在大多数时候,它可以很好的融入到其他的编程方式中。...原文链接:再谈编程范式-程序语言背后的思想 - - 周陆军的播客

    1.7K20

    颠覆者的游戏:程序语言

    程序语言的用户是程序员,她们对语言的要求不外乎是:好用,没bug,能快速开发,容易写出高质量的代码,性能好,可伸缩,容易部署,生态圈完备,blablabla。...最初程序语言围绕着性能,以及同样量级的性能下的易用性做价值主张。和硬件结合紧密的C是最大的赢家。市场上的语言们都紧盯着C,编译器的发展方向也是性能,性能,性能。...lisp算得上是程序语言的鼻祖,一直是其他语言的学习对象。Paul Graham曾经轻蔑地说:「编程语言现在的发展,不过刚刚赶上1958年Lisp语言的水平」[6]。...当然,对上面的程序,你可以在算法上做各种各样的优化,甚至换c来实现,也许可以最终接近elixir能达到的水平,但是代码的复杂度已经走进了另一个世界。 这就是lisp带来的颠覆,一套全新的思想体系。...每个程序语言都有自己独特的基因 —— C/C++学不了java,一如JVM无法成为BEAM,scala/akka在erlang面前不得不低起高傲的头一样。 一不小心写了这么长,感谢你的阅读!

    1K80

    再谈编程范式-程序语言背后的思想

    命令式语言的不足之处就是它不适合某些种类问题的解决,例如那些非结构化的具有复杂算法的问题。问题出现在,命令式语言必须对一个算法加以详尽的说明,并且其中还要包括执行这些指令或语句的顺序。...实际上,给那些非结构化的具有复杂算法的问题给出详尽的算法是极其困难的。 ...属于事件驱动的编程语言有:VB、C#、Java(Java Swing的GUI)等。它们所涉及的事件绝大多数都是GUI事件。  此种程化范式要求程序员用按部就班的算法看待每个问题。...我们不会听到一个编程语言是纯泛型编程的,而没有其他编程范式。但正因为泛型并不会改变程序语言的核心,所以在大多数时候,它可以很好的融入到其他的编程方式中。...原文链接:再谈编程范式-程序语言背后的思想 - 模型设计,领域设计,软件设计, - 周陆军的个人网站

    1.6K40

    王垠:如何掌握所有的程序语言

    很多编程初学者至今还在给我写信请教,问我该学习什么程序语言,怎么学习。由于我知道如何掌握“所有”的程序语言,总是感觉这种该学“一种”什么语言的问题比较低级,所以一直没来得及回复他们 ?...这些配置对应到程序语言里面,就是所谓“语言特性”。...我个人觉得这些语言都可以用来入门: Scheme C Java Python JavaScript 那么相比之下,我不推荐用哪些语言入门呢?...这里举一些次要语言特性的例子: C 语言的语句块,如果里面只有一条语句,可以不打花括号。...这种效果是你直接学习 OOP 语言得不到的,因为在学习 Java,C++,Python 之类语言的时候,你只是一个用户,而用 Scheme 自己动手实现了 OO 系统之后,你成为了一个创造者。

    1.4K30

    ESR:程序语言设计的要诣和真谛

    从这种角度去思考程序语言,我们则可以把语言设计中需要侧重的目标重新归纳为两部分: (1)以时间的远近为轴,在远景设计和近景设计之间选取一个符合预期的最佳平衡点;(2)降低由一种或多种语言转化为这种新语言的转入成本...当然,你可以把 C 语言的持久存在归功于文化惰性,但那是对“文化惰性”这个词的曲解,C 语言一直得以延续的真正原因是因为目前还没有人能提供另一种足够好的语言,可以抵消取代 C 语言所需要的转化成本!...C++ 语言同样胜在它低廉的转化成本。很快,大部分新兴的语言为了降低自身的转入成本,都纷纷参考了 C 语言的语法。...对这种程序语言的设计思路我在这里一带而过,因为我并不认为一种系统级别的语言可以被设计的像 Python 一样傻瓜易用,当然我很希望我的这个论断是错的。...我们现在已经认清,一种语言要想取代 C 语言,它的设计就必须遵循两个十分重要准则:(1)解决内存管理问题;(2)降低由 C 语言向本语言转化时所需的转入成本。

    699100

    C语言算法-学习二

    也就是 算法(algorithm) 一个程序除了 算法 和 数据结构 这两个要素外,还应当采用 结构化程序设计方法 进行程序设计,并用某一种 计算机语言 表示。...什么是算法 算法是为了解决问题而执行的一系列步骤。 计算机的算法可以分为两大类别: 数值运算算法 数值运算的目的是求数值解。 非数值运算算法 非数值运算用于事务管理领域(图书检索,人事管理等等)。...算法的目的是为了求解,“解”就是输出 有效性。算法中的每一个步骤都应当能有效地执行,并得到确定的结果 怎么表示一个算法 常用的方法有: 自然语言 流程图 NS图 伪代码 .........流程图表示算法 流程图是用一些图框来表示各种操作, 用图形表示算法,直观形象,易于理解。...image.png 以上面的例子做N-S图 image.png 用C语言表示算法 while循环 #include int main() { int a,i; a

    2.7K30

    这才是最好的程序语言,不服来辩

    确定了思路后,于留宝回归本职,做了一个算法工程师擅长的事——数字映射。他的技术能力已经在滴滴日常的业务中千锤百炼,把这个想法用算法实现并不难。...早期,平台派单算法是每1.5-2s做一次供需的计算匹配,在确保乘客接驾体验的基础上最大化成交率,让更多的用户能被司机应答,更多的人能快速出发。...从2016年开始,滴滴开始思考,算法能不能做到在更长时间维度的优化? 他们想到AlphaGo,“强化学习”。 技术迭代按下快进键。...滴滴成立了AI口罩紧急项目组,基于 DFS 人脸检测算法,结合积累的人脸属性识别算法研发了口罩佩戴识别技术。 只用了23小时,这项“黑科技”就成功上线。

    52440

    非专业人员该学什么程序语言

    而且,几乎所有程序语言在这方面的能力都很接近,甚至使用的关键字和语法规则都很像,学会一种再去看其它也容易,可以举一反三。...那么,学哪种程序语言?对于第一层知识,理论上选择余地很大,甚至是选什么都可以,因为这是所有程序语言共有的内容。那么只要找一种擅长处理结构化数据的程序语言就行了,方便学习第二层知识,也可以学以致用。...Java、C/C++ 这些就更不用提了。...这事,开再多培训班也没有用,培训班又没有能力去改进或发明程序语言。这本质上是没有米的问题、不是会不会煮的事。大概只有 SPL 是适合零基础非专业人员的程序设计语言了。...作为程序语言,SPL 有完整的程序基本逻辑(第一层知识);SPL 全名是 Structured Process Language,发明它就是为了对付结构化数据的,其结构化数据处理能力超强,可以说当前程序语言这方面能力最完整的

    8121

    如何从零开始学一门程序语言

    最近的留言中,『如何从零开始学一门程序语言?』这个问题问到的频次最多。我本不该回答,因为我不在行 —— 我现在已经回想不起十几年前究竟是怎么学第一门(有实际意义的)语言的。...这些东西一讲你都知道,看完你除了能点个赞之外,似乎还是对学程序语言没感觉。而且这种话说给学习任何东西似乎都有效。 如何选择语言? 我的第一门实用型的语言是Visual Basic。...写C代码的时候,遇到不太明白怎么使用的函数时,要么看其源码,要么找文档,但在python里,方便的内省工具可以随时随地帮助你。 补充一句,这两个语言没有可比性,我仅仅拿来举个例子。...不要看教科书学语言,教科书上的习题大多和生活中的问题无关,不要试图去写什么鸽笼问题,八皇后的代码。你在学程序语言,不是在做思维训练或是数学。...与其他语言的互操作(比如C)是怎么样的? 语言有什么天然的限制? ... 在这个审视的过程中,不断把基础知识补齐 —— 这些都是快速掌握下一门语言的基础。

    78060

    C语言 排序算法_C语言中三大经典的排序算法

    直接选择排序 2.2堆排序 三 交换排序 3.1冒泡排序 3.2快速排序 3.3快速排序的优化(非递归) 四 归并排序 4.1归并排序递归版本 4.2归并排序非递归版本 总结 ---- 前言 常见的排序算法如下...时间复杂度:O(N^2) 空间复杂度:O(1),它是一种稳定的排序算法 稳定性:稳定 1.2希尔排序 希尔排序法又称缩小增量法。..., key+1, right); } 1.空间复杂度 0(lgn) 2.时间复杂度0(n*lgn) 3.3快速排序的优化(非递归) 主要通过数据结构栈来模拟实现类似于二叉树的前序遍历 如果有同学对C语言实现栈不熟悉可以点一下链接...:C源实现数据结构栈 具体代码如下: typedef int STDataType; typedef struct Stack { STDataType* a; int top; // 栈顶 int...,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。

    2.7K20

    一个c语言程序能实现几种算法_C语言实现算法

    摘要:本文主要是对 DOA(波达方向)估计中传统 MUSIC 算法及其改进算法作了简要 的介绍,主要包括了MUSIC算法,求根MUSIC算法,循环MUSIC算法,波束空间MUSIC算法,SMART MUSIC...算法。...于是在原来MUSIC的基础上又诞生了求根MUSIC算法、约束MUSIC算法、波束空间MUSIC算法等。 2 ....2.3求根MUSIC算法: 2.3.1求根MUSIC算法原理 对于阵元间距为d的等距直线阵列,导引向量 的第m个元素可以表示为 则MUSIC谱函数可以写成: 其中 是矩阵C中第L条对角线的元素之和。...假定入射信号为窄带信号,波长为 ,则M维接受信号矢量可以表示为 其中 是阵列方向向量: 从向量 中抽出一个L维的子向量 ( ),有 当满足 时, 当满足 时, 可以证明,向量 的子向量的相关矩阵C满足

    3.5K30
    领券