5

问题

如前所述,你有什么技巧可以帮助你了解/理解/让你的头脑围绕声明性编程语言?

或者这仅仅是一个案例,你必须让自己沉浸在语言和它的语法中,直到它渗入,直到你得到你得到它的黄金时刻。这不是一个真正的选择,因为我再也不能连续几天把自己锁在一个房间里,研究超过六本关于该主题的不同书籍(责任就是它们的全部内容)

那么,当你处理声明性语言时,有什么提示或技巧对你有帮助,有什么见解可以传递吗?

PS我个人会赞成第一个回答“<em>闭嘴并投入工作”的答案。

背景

当我第一次开始编写代码时,我 13 岁(基本,在我的姐妹Oric-1上)。

从那时起,我使用了许多新概念和许多不同的语言,从容不迫,我很快就占了上风。面向对象?不麻烦。事件驱动范式?给我吸一口腌鱼,我会回来吃早餐的。

Owl、Mfc、ActiveX、Vb3、4、5 和 6、VB.Net、Pascal、Delphi、C、C++ 和 C#。没有人挡住我的路,至少不会持续很长时间。

然而最近我的满分却受到了一些打击。

几周前,我全身心地投入到 Xaml 中,伙计们,我比游泳更容易下沉。

我认为我的主要问题是它是声明性的。我所有其他的编程技能都是程序性的。我以前用 MSBuild 遇到过这个问题,我可以复制一些例子来说明如何让 MSBuild 工作,但是从头开始把一些东西放在一起会丢失。

回到 Xaml,目前我正在疯狂地尝试将触发器连接到属性并获得我需要的效果。

我可能会尽快在此处发布我的特定 Xaml 问题。现在我在问这个一般的“声明式编程”问题。

PS不,我实际上并没有这么自大。是的,当我第一次接触 OO 和第一次编写事件驱动的 UI(Windows 3.11 上的 VB3)时,我跌跌撞撞。

编辑

它开始陷入困境,让我在这个领域走到这一步的坚韧正在得到回报,只是需要这么多的水力压裂时间

. . . 我觉得我对这些东西太老了。. . :)

4

9 回答 9

3

在本世纪初,我不得不教很多 XSL(或 XSLT,如你所愿):),这是一个不同的世界,真的。然而,这是范式转换的基础:你必须意识到声明性语言确实是不同的。我最重要的建议是继续研究其他人的解决方案,投入工作,并真正尝试停止在 FLOW 中思考。最糟糕的是,在 XSL 中,有一个“if”和一个“else”,但通常还有另一种方式来做事。

与学习 OO 不同,在 XSL(或任何声明性语言,我想)中,除非您以声明方式进行,否则您将无法完成您想要做的事情。

因此,部分答案是按照您的建议“闭嘴做工作”,但更重要的一点是要意识到很多工作都在让您了解范式转变。所以真正的答案是,“为范式转变保持警惕。” 你必须停止顺流思考,开始思考可以以任何顺序触发的规则……如果它们做得正确,它们何时触发都没关系。当您最终考虑规则而不是事情发生时,您就开始了解这种转变。

于 2009-05-18T16:28:32.810 回答
2

从真正了解该语言的人那里找到一些示例,并解释“为什么”。学习模式和习语会有所作为。

我怀疑您正在尝试在声明性领域中做必要的事情,这意味着您要根据步骤进行思考。根据所需输入+这些输入的无状态函数写下数据流,看看是否有帮助。

尝试使用函数式或函数式语言,例如 ML 或 Scheme。

于 2009-05-18T13:47:04.633 回答
1

我不知道您在使用 Xaml 时遇到的具体问题是什么(我自己也没有使用过),但我发现在使用 XSLT 等基于 XML 的技术时,一点 LISP 或 Scheme 经验会大有帮助。您可能想看看http://www.plt-scheme.org免费提供的优秀方案系统。

于 2009-05-18T13:47:32.557 回答
1

考虑一下您最喜欢的“程序员无知”的烦恼。第一个代码片段显然是程序性的。在第二个片段中,您做了一个声明性声明,要使百分比有效,它必须在 0 到 100 之间。

所以我猜只要你足够努力地研究声明式编程语言,你就不会遇到麻烦......几何没有王道

于 2009-05-18T14:04:14.193 回答
1

我知道这可能会让你大吃一惊。您列出的所有这些语言确实非常相似(程序)。

一旦你明白了这一点,我强烈建议你也学习一门函数式语言。你也可能会觉得很难,但学习它会极大地帮助你的一般编码技能。您将拥有一整套全新的技巧(即使是在程序语言中),并且您再也不会害怕递归了。

于 2009-05-18T14:13:29.790 回答
1

像 Binary Worrier 一样,我在 C、C++、MFC 等方面有很长的历史,并且一直在加快 XAML、WPF 和 C# 的速度。我通过 HTML、Javascript 和 XSLT 进行了一次次旅行,我认为这对我为 XAML 做好准备有很大帮助。

XAML 背后的基本思想相当简单 - 一切都是关于你展示什么,而不是你做什么。XAML 的难点在于,只有大量的实现细节需要学习,而你最终要同时学习它们,以便能够完成大部分工作。

如果问题更具体,我可能会更有帮助。

于 2009-05-18T14:23:05.230 回答
1

“编程就是给计算机一系列指令。”

大多数程序员对这种说法反应平静。几乎就像……“嗯?”

但是这种说法的信念是导致人们难以理解其他编程范式的原因。这不是真的,而且已经很久没有了。为了更好地理解编程,许多人可能会从思考为什么这个陈述是错误的中受益。

即使您使用纯汇编进行编程,现代处理器也会重新排列您的指令,执行分支预测,并尝试同时执行多个可能相互依赖的指令。通过这种方式,他们根据逻辑依赖而不是顺序来思考。序列隐喻是错误的概念,即指令在逻辑上依赖于它之前的所有内容。如果这是真的,推理程序的最佳方法是检查控制流。但事实并非如此。

不只是声明式编程不适合这个比喻,并行和异步编程也是如此。

于 2012-10-03T04:55:28.227 回答
0

我发现“了解”一种语言的最简单方法就是开始专门将它用于所有编码。对于我来说,使用一种全新的语言,学习曲线大约是 2 周的编码,每天大约 4-5 小时。在那之后,它突然“点击”,您可以开始减少对手册和文档的依赖。

于 2009-05-18T13:41:05.580 回答
0

我在大学上过一门课(编程语言)。感觉就像我反复用头撞一堵砖墙,但是在上课大约 3/4 的时候,我意识到墙已经不存在了。几个星期以来,我一直在不停地敲打我的头。这是一种非常超现实的感觉。

我认为任何其他方式都不会有同样的魅力。阅读哥德尔、埃舍尔、巴赫;听很多 Emerson、Lake、Palmer 和 Kaikhosru Sorabji;抽一些大麻,然后投入时间。

于 2009-05-18T13:56:14.817 回答