我一次又一次地听到,我正在努力理解并验证FP和OO是正交的想法.
首先,2个概念的正交意味着什么?
FP尽可能地鼓励不变性和纯度,而OO似乎是为状态和变异而构建的 - 一个有点组织的命令式编程版本?我意识到对象可以是不可变的,但OO似乎意味着状态/改变我.
它们看起来像是对立的.这对他们的正交性有何影响?
像Scala这样的语言可以很容易地执行OO和FP,这是否会影响这两种方法的正交性?
oop paradigms programming-languages functional-programming scala
我试图理解语言级别的概念(常规,上下文无关,上下文敏感等).
我可以很容易地看清楚这一点,但我发现的所有解释都是一堆符号并谈论集合.我有两个问题:
你能用语言描述常用语言是什么,以及语言有何不同?
人们在哪里学会理解这些东西?据我了解,这是正式的数学?我在大学有几个课程使用它,几乎没有人理解它作为导师只是假设我们知道它.我在哪里可以学到它以及为什么人们"期望"在如此多的资源中知道它?就像教育方面存在差距一样.
这是一个例子:
属于该集合的任何语言都是字母表中的常规语言.
语言怎么能"超过"任何东西?
syntax programming-languages bnf regular-language formal-languages
我正在寻找通用编程语言
到目前为止,下面是我的清单,我错过了什么?
我是C和C++程序员,现在正在尝试学习C#.我已经购买了Wrox出版物的专业C#一书.
在从C迁移到C++时,我怀疑为什么++被添加到C.后来我意识到,因为++是一个增量运算符,它被添加到C只是为了提供一个"面向对象的扩展".
在C#中,有什么意义#?
你真的"试过"(意味着编程,而不只是阅读一篇文章)Erlang并决定反对它的项目?如果是这样,为什么?此外,如果您选择回到旧语言,或使用其他功能语言,如F#,Haskell,Clojure,Scala或其他类似的东西,那么这也很重要,并说明原因.
OOP可能是当今软件设计中使用最多的编程范例.我的问题是 - 其他范例可以与之竞争并且可以代替oop?为了澄清这个问题,我不是在询问其他范例是什么.其中有很多,我想知道哪一个:
如果有的话,它的优缺点是什么,为什么它比oop更好/更差,最好用什么语言,在流行的语言中使用它,有任何设计模式,还可以完全取代oop?
我的一个朋友前几天问我,如果我在编程时只是查看数字列表,或者它是如何工作的.我试着解释一下,它通常更像是数学公式,奇怪的英语单词被抛入,并且它通常大部分都是可读的.但这是一个非常模糊的解释,并没有真正解释给非程序员.
但它让我思考什么会成为一个好榜样.不是因为我想教她的编程或任何东西,而只是让她知道什么程序代码"看起来像".
这让我想知道实际上会有什么作为一个好例子.事实证明这非常困难.
我的第一个想法显然是一个简单的"Hello World"计划.但它确实没有显示任何有用的东西.它并没有真正展示我们如何使用函数或变量,或控制流程结构,if或者while使程序实际执行某些操作.这没有逻辑.该程序对任何事情都没有反应.
所以像计算素数这样的东西可能是一个更好的例子.但话又说回来,这可能过于理论化和不切实际......(这有什么用呢?它与编写"真实"程序有什么关系?)而且,其中没有重要的控制流逻辑.这只是一个直接的数学序列.
还有,应该使用哪种语言?
理想情况下,我不认为它必须是一种非常"干净"的语言.但相反,它应该可以使结构清晰.如果它这样做,那么一定量的噪音和杂乱可能没问题.也许像C++这样的东西实际上是比Python更好的例子.显式花括号和类型说明符是明显的"钩子",可以帮助解释程序的结构,或者强调它不仅仅是简单的语句,几乎可以读作英语.
但是使用C++,我们也会遇到一些彻头彻尾的奇怪语法.为什么std::cout << x习惯打印x?为什么不用"普通"函数调用语法?并printf没有更好的,它具有神秘的格式字符串,并且缺乏可扩展性(我是否想通过使用char*字符串使程序复杂化?或者我是否使用std::string并解决这个看似不必要s.c_str()的字符串可以打印出来的字符串?printf?
也许更高层次的语言会更好.但是哪一个?为什么?
我知道这里有很多类似的问题,用于教授编程的语言/示例程序.但我认为这里的要求是不同的.在教授编程时,我们比任何事情都更简单.我们希望避免任何尚未教授的内容.我们希望确保学生能够理解屏幕上的所有内容.
我对简单本身并不感兴趣.而是给"外人"一个"程序看起来像什么"的想法.程序并不简单.但他们也普遍表现出一定的结构和方法可以解决这一难题.哪种语言/程序最能突出?
编辑
感谢您到目前为止的所有建议.你们中的一些人对它的看法与我想要的有些不同.
也许一个例子是有序的.我无法驾驶飞机,但我已经基本了解驾驶舱的样子,以及驾驶员在飞行时"做什么".
而且我不是一个训练有素的木匠,但是当我看到一个时,我知道一把锯子或一把锤子.
但是当你看到与电影中的编程有关时,它通常只是充满垃圾的屏幕(如矩阵中的绿色文本).它看起来不像普通人类实际上可以做的事情.它没有什么可辨认的.不是程序员的人只是认为这是黑魔法.
我不想教她飞行,也不想编程软件.但我想给她一个基本的参考框架.只是一个想法"啊,这就是你正在使用的东西.所以它不仅仅是屏幕上的随机符号和数字".if与矩阵式随机符号和数字相比,即使只显示一个简单的陈述也是一种启示.
你们有些人建议解释一个算法,或使用伪代码,但这就是我想要避免的.我想要的东西只是简单地显示实际的代码是什么样的,就像你不必是一个木匠来看一看锯,并基本了解它是什么以及它是如何工作的.
当我还是个孩子的时候,我们曾经去过意大利度假.在下来的路上,飞行员让我进入飞机的驾驶舱.当然,我没有学习如何驾驶飞机.但我确实看到了飞行员的世界.我知道他们如何让飞机走了,飞行员实际上做了什么.
这就是我想做的一切.我的朋友没有兴趣学习编程,我也不想强迫她理解源代码.但她很好奇我与哪种工具或实体合作.矩阵式符号是否在屏幕上滚动?纯数学?散文形式的英语?
我有兴趣传达的是对"工作时的样子"的高层次理解.
大多数情况下,Android应用程序是用Java编写的.但我听说它也可以使用Scala或其他语言.我还读到可以包含本机C/C++代码.
是否有可用的参考/列表显示可以使用哪种语言?
我在"javascript是一种非常富有表现力的语言"这样的句子中经常听到这个词.它只是意味着没有很多规则,或者"表达"是否具有更具体的含义?
最近一位老师说"PHP不是一种真正的编程语言",但在我看来,这只是一个弱的理由:
PHP不被视为"真正的"编程语言吗?什么是"真正的"编程语言?编译语言是否必须认真对待?
两天前,我在学校的A-Level计算课上做过入门课程 - 我们在课程的第一年使用Java.我不熟悉Java,但对常规编程基础(变量,函数,面向对象,循环等)有很好的把握.
我们的第一项任务是老师快速地跑得很快.她没有费心去解释任何概念,它们是如何工作的,或者你将如何实际使用它们,并且看起来非常高兴看到大多数学生(总的来说,他们是编程新手)在他们的座位上没有最简单的想法,她在谈论什么.事后看来,我认为她很快就能看到谁可以真正"处理"计算A-Level,因为学生仍有机会在九月开始之前改变他们的科目.
第一个也是唯一的任务是编写一个Java命令行应用程序来将二进制转换为denary(十进制).我们进行了两个小时的品尝会议,在解释了二元系统是如何工作的之后我们必须开始,尽管总的来说,没有人真正有一个最模糊的想法从哪里开始.一个小时后,有些人比其他人更进一步,但没有人真正取得任何重大成就.老师自己变得很困惑,她从隔壁叫另一位老师.他来帮助人们,看看下一步该去哪儿.
没有吹牛,我可能确实在课堂上有最丰富的经验,并且在练习中得到了最大的成功.他问我以前是否有过任何经历; 我说是的,尤其是在PHP中,并且开玩笑地评论说我可以在几行PHP中编写一些将二进制文件转换为denary的东西,而Java应用程序正迅速发展成几个代码屏幕.
他回答说,"PHP不是一种真正的编程语言!"......!经过一番讨论,他给出了上述三个原因.但是,我指出你可以在任何运行Apache的平台上运行PHP,但我不认为他真的知道Apache是什么,并且没有那个!