Questions tagged «philosophy»

7
如何避免被更强大的贡献者遗忘?
如最近在这里报道: Xamarin分叉了Cocos2D-XNA(一个2D / 3D游戏开发框架),创建了可以包含在PCL项目中的跨平台库。 但是分叉的项目的创始人说: MIT许可证的目的是限制您的合理使用。不鼓励您购买软件,将其重新命名为自己的软件,然后如您所说的那样“朝新的方向发展”。 虽然不是非法的,但这是不道德的。 似乎新项目的GitHub 页面甚至没有表明它是典型的GitHub方式的分支,而是选择了一个易于删除的“历史记录”部分(请参阅底部)。 所以我的问题是: Xamarin的行为和行为方式是否符合道德? 如果您是单个开发人员或一小群没有资金的开发人员,是否可以避免这种情况? 我希望这可能是一个维基问题,也可能会有一些基于现代OSS伦理/哲学的客观答案。

13
未定义行为背后的哲学
C \ C ++规范为编译器以自己的方式实现提供了许多开放的行为。这里经常有很多问题被问到同样的问题,并且我们有一些很好的帖子: https://stackoverflow.com/questions/367633/what-are-all-the-common-undefined-behaviour-that-ac-programmer-should-know-abo https://stackoverflow.com/questions/4105120/what-is-undefined-behavior https://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points 我的问题不是关于不确定行为是什么,还是真的不好。我确实知道该标准的危险和大多数相关的未定义行为引用,因此请不要发布有关该标准有多严重的答案。这个问题是关于为编译器实现留出许多行为的背后的哲学。 我读了一篇很棒的博客文章,指出性能是主要原因。我想知道性能是否是允许它的唯一标准,或者是否有其他因素会影响将事情开放给编译器实现的决定? 如果您有任何示例可以引用某个特定的未定义行为为编译器提供足够的优化空间,请列出它们。如果您知道性能以外的其他因素,请提供足够详细的答案。 如果您不理解该问题或没有足够的证据/来源来支持您的答案,请不要发布广泛猜测的答案。

7
SOLID原则与YAGNI
SOLID原则何时会成为YAGNI? 作为程序员,我们始终在复杂性,可维护性,构建时间等之间进行权衡。在我看来,其中两项最明智的选择准则是SOLID原则和YAGNI。如果您不需要它;不要建造它,并保持干净。 现在,例如,当我观看SOLID上的dimecast系列节目时,我看到它开始时是一个非常简单的程序,然后结束时是一个非常复杂的程序(当然,在旁观者看来,复杂性也是如此),但是它仍然使我想知道:SOLID原则何时会变成您不需要的东西?所有坚实的原则都是可以使用户在以后进行更改的工作方式。但是,如果要解决的问题是一个非常简单的问题,并且是一个一次性应用程序,该怎么办?还是SOLID原则始终适用? 如评论中所述: SOLID原则 亚尼

26
您希望语言设计师注意什么?[关闭]
这个问题的目的不是要整理一些编程语言功能,这些功能是您不能没有的,或者希望使用您选择的主要语言。这个问题的目的是揭示大多数语言设计师可能没有想到的语言设计的角落。因此,与其思考语言特征X,不如多加思考。 我的偏见之一,也许是有争议的,是工程学的较柔和的一面(为什么和为什么)比更为具体的一面要重要许多倍。例如,Ruby的设计目标是提高开发人员的满意度。尽管您对于是否可以交付发表意见不一,但事实上这是一个目标,这意味着语言设计中的某些选择受该哲学的影响。 请不要发布: 语法火焰大战。面对现实,我们有我们的喜好,语法很重要,因为它与语言设计有关。我只是想避免emacs与VI的本质之间的史诗般的战斗(如今,很多人对此一无所知)。 “任何不具有功能X的语言都不应该存在”类型注释。所有编程语言都存在的至少一个原因-好的或坏的。 请做后: 语言设计师似乎错过的哲学思想。 似乎实施得不好的技术概念经常会出现。请提供一个示例,说明造成疼痛的原因,以及您对如何使其功能有任何想法。 您希望的东西在平台的公共库中,但很少。一个相同的标记,通常在您希望的公共库中没有的东西。 您希望所有编程语言都能正确实现并正确定义的概念性功能(例如内置的测试/声明/合同/错误处理支持)。 我希望这将是一个有趣而有趣的话题。 编辑:澄清了我的意思是语法火焰战争。我并不是想避免对语法的所有讨论,特别是因为语法是程序语言设计的基础部分。

4
Python“唯一的方法”的具体示例maxim [关闭]
我正在学习Python,并对PEP 20 The Zen of Python中的以下几点感兴趣: 应该有一种-最好只有一种-显而易见的方法。尽管除非您是荷兰人,否则一开始这种方式可能并不明显。 谁能提供这个格言的具体例子?我对与其他语言(例如Ruby)的对比特别感兴趣。Ruby设计哲学的一部分(我认为起源于Perl?)是实现它的多种方法。任何人都可以提供一些示例来说明每种方法的利弊。请注意,我不是在寻找哪个更好的答案(这可能是主观的,无法回答),而是两种风格的公正对比。

10
提前发货,从不发货[关闭]
开头是“自我注释”,所以请您原谅我,如果挫败感太明显并且写作不如恒星。 最近我想到的三个主要主题是: 动机 学习(好奇心) 做(做) 我已经研究动机和激励措施已有几个月了。人们似乎在做事情时可能有无数种不同的动机(我意识到这听起来有些陈词滥调,但我会忍受)。我之所以真正被它吸引是因为我迫切地想知道为什么我做我要做的事情,为什么我不做我想做但不做的事情。 我正在阅读Paul Graham出色的Hackers and Painters一书。在这篇文章中,他认为黑客和画家非常相似,因为他们都是“创造者”。画家做画。黑客制造软件。画家不一定需要了解油漆的化学成分即可制成精美的画作。黑客不一定非要知道1和0才能制作出精美的软件。 然后,Graham得出了不同的计算机科学领域之间的区别: 有些人似乎在学习数学 有些人似乎自己在研究计算机 黑客正在制作软件。 差异非常重要。看起来有些动机是为了创造美丽的东西。而其他人的动机是出于好奇心而学习。对我而言,某些动机似乎很明显,但好奇心似乎并不那么明显。我当然会认为自己是个好奇心强的人,渴望学习几乎所有的知识。但这正是问题所在。 的事情,让我害怕这么多的是,我拼命地想使事情。我拼命地想去做的事情。我想写一本书。我想画一幅画。我想写一首歌。我想要做的事情喜欢旅游。但是奇怪的是我也想学习东西。我想学弹吉他。我想了解艺术史。我想了解更多有关哲学和文学的知识。 关键似乎是学习与做事之间...学习与做事之间的平衡。 虽然我不确定在做某件事之前应该了解多少知识,但可以肯定的是,我发现自己经常站在一边,而不是另一边。就目前而言(据我所知,我一直都是这样),我是一个学习者,而不是一个做事的人。我读了好书。我已经练习吉他多年了。我花了无数小时学习编程。 但是我已经写了0本书。我创作了0首歌。我已经编码了0个漂亮的程序。我画了0幅美丽的画。我已经开始了0个可行的企业。 所有这一切的可怕之处在于,世界上可能有无数未完成的艺术品。这是我对社会和文化的厌世报仇,是从不生产或完成我所开始的任何艺术品吗?也许最糟糕的部分(除了这是我的天性),是我更加了解的事实。我刚读完《完成事情》和《实现想法》之类的书。我已经聚集并合成了如何智慧无数的话做的事情,以及如何使事情。 想象一下无法做自己想做的事情而经历人生的恐怖。如果这是您一直在努力(并希望克服)的事情,请分享。如果没有,也许可惜的可怜会让我感觉好些。 [更新:只想对所有分享想法的人致以感谢。我故意让这个问题有些开放性,希望能够鼓励讨论并让其他人重新思考围绕他们类似经历的中心问题,而且我认为它的确很奏效……这里有很多令人惊讶的见解可以与之合作,而且确实如此有帮助的。再次感谢。]

5
UNIX哲学中的编程是否与函数式编程相同?
UNIX编程环境(经典文本)指出,UNIX编程方法是构建小型的,定义明确的工具,可以将其组合起来以解决更复杂的问题。在学习C和Bash shell时,我发现这是一个功能强大的概念,可用于处理各种编程问题。 仅使用Linux平台,这个概念就很清楚并且一直使用。在命令行上形成的用于重定向I / O,链接系统工具(如ls,grep等)的任何表达式都表明了此概念的强大之处。 让我感到困惑的是,其中许多程序都是使用命令性/过程式编程风格以C语言编写的,但是在命令行上使用它们并将它们结合在一起的方式对我来说更像是函数式编程,其中每个程序都是一个独立的函数,不依赖于它可能加入的任何其他程序的状态。 理解UNIX编程原理是否准确,基本上就是使用可能是用命令式编程风格构建的工具进行的函数式编程吗?

7
是否有Windows编程哲学?[关闭]
我一直在Unix和Windows环境中进行编程。通常,我在Unix上工作,在那里我学习了Unix Philosophy,可以概括为: 编写可以做一件事并且做得很好的程序。 编写程序以协同工作。 编写程序来处理文本流,因为这是一个通用接口。 Unix和Windows世界之间的编程文化似乎存在明显差异,例如: GUI与CLI 注册表与配置文件 很多专门针对任何给定需求的工具与可以组合在一起的一组通用正交工具 Windows世界中是否有等同于“ Unix哲学”的东西?哪些Unix程序员可以从Windows中学到什么,或者在转向Windows编程时应该注意什么? 我希望答案集中在Windows编程的最佳实践上(而不是Windows和Unix之间的斗争)。

8
Emacs-as-OS:已过时?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 为了使用这样一个传奇的编辑器至少达到初学者的地位,最近两个月我一直在Emacs中进行编码。我试图保持开放的心态,但是我发现自己一直不同意一个核心设计选择:Emacs允许用户永远不必离开。在2010年的世界中,我只是认为Emacs的每一项功能都无可救药地落后于专用软件: 我永远不会使用其内置的浏览器。Chrome领先多年。 我永远不会使用它的转向功能;路径查找器(Mac OS X)满足我的需求。 我永远不会使用它的内置电子邮件;Gmail网络界面具有更多相关功能,例如优先收件箱。 等等。 当然,我可能偶尔会使用Emacs来使用正则表达式等来完成上述任务之一,但是除了正则表达式之外,我真的没有理由接触这些辅助功能。我是一个新手,但是我有一种强烈的直觉,认为Emacs-as-an-OS已过时。 Emacs专家,您认为Emacs选择成为一个综合环境是2010年乃至未来的正确选择吗?与替代产品相比,是否还有特定的外围功能仍处于或提前使用?

7
哪种自然语言在编程方面具有优势?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 语言相对论是语言塑造我们思维方式的想法。我的问题是,这在编程中适用于多少程度? 某些自然语言是否比其他语言更适合于考虑编程?例如,以下内容可以用非英语更简洁地陈述吗? Select a pivot. Move all the items less than the pivot to one side of the list, and all the items greater than the pivot to the other side. 与说英语的程序员相比,说汉语的程序员会以截然不同的视角看待编程,还是当两者都沉浸在主题中时,差异会消失吗? 是某些编程语言和领域更容易用一种或另一种语言来考虑。例如,如果您是日语,因为Ruby的创建者是日语,那么更容易涉足Ruby 吗? 请注意,此问题不是针对“编程语言如何影响人们对编程的思维方式”,而是“ 自然语言如何影响人们对编程的思维方式”。 为了避免这种情况,英语显然具有实用的优势。我觉得优势已经不大用编程语言选择英文关键字,比如if,for,while,和do,就像谁也不说话意大利音乐家不喜欢的话绊倒的拿手好戏。它更多地与与其他程序员的思想交流有关,因为如今至少在编程世界中,英语已成为当今的通用语言。例如,要在StackOverflow中提出问题,您确实需要懂英语,并且如果您想要好的答案,也应该很好地了解英语。尽管这听起来像是帝国主义的态度,但实际上确实是这样。 除此之外,语言的内在属性如何影响说语言的程序员如何思考数据结构,算法等?在谈论逻辑和编程时,是否有任何语言特别简洁,以使使用该语言的母语者能更快地思考?
21 philosophy 

8
“您将不需要它”和“现在总比没有好”如何一起玩?
当我提高设计的干燥度时,我经常发现自己拥抱“现在比没有更好”。通常,我发现我需要在其他知识体系的背景下,对一种知识建立对一个权威位置的理解。因此,我倾向于将系统设计为“现在”。 相反,尽管有一定的机会我不需要它,但这种做法仍使我提前建立了。 这两种模式如何相符? 您使用什么方法来确保它们表现良好? 您如何一起教他们又不引起混乱?

7
计算机科学属于什么学科?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 是计算机科学,应用数学,工程学,艺术,哲学吗?“其他”? 为了提供背景知识,这是史蒂文·沃蒂克(Steven Wartik)在《科学美国人》上发表的博客文章,标题是“ 我不是真正的科学家,没关系。” 本文涵盖了该问题的一些不错的主题,但开放性远远超出了答案。 如果您能想到该学科,计算机科学将如何适应其定义?计算机科学的学科应该基于程序员的工作还是学者的工作?您从似乎对此有深刻思考的人那里得到什么样的答案?他们给出什么原因?

5
为什么我们不能更有效地捕获软件设计?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 作为工程师,我们所有人都“设计”人工制品(建筑物,程序,电路,分子...)。那是一个活动(动词设计),产生某种结果(动词设计)。 我认为我们都同意,名词设计与工件本身是不同的实体。 软件业务(实际上,在任何需要增强生成的产品工件的业务中)的关键活动是了解“设计(名词)”。但是,作为一个社区,我们似乎在记录它方面完全失败了,这可以从人们重新发现有关其代码基础的事实的大量努力中得到证明。让某人向您展示他们的代码设计,然后看看您得到了什么。 我认为软件设计具有以下特点: 一个明确的规范,说明该软件应该做什么以及其性能如何 代码的显式版本(这部分很简单,每个人都拥有) 关于代码的每个部分如何用于实现规范的说明(例如,规范片段和代码片段之间的关系) 一个理由,为什么代码是事情是这样的(例如,为什么一个特定的选择,而不是另一个) 不是设计就是代码的特定视角。例如,[不特别说明] UML图不是设计。相反,它们是可以从代码派生的属性,或者可以说是希望从代码派生的属性。但是作为一般规则,您不能从UML派生代码。 为什么经过50多年的软件构建,为什么我们没有常规的方法来表达这一点?(请通过明确的示例与我自相矛盾!) 即使我们这样做,大多数社区似乎都非常关注于获取“代码”,以至于无论如何都会迷失于设计中。(恕我直言,直到设计成为工程的目的,从设计中提取出工件之后,我们才可以解决这个问题)。 您认为什么是记录设计的方式(就我所描述的而言)?明确引用论文会很好。为什么您认为特定的和一般的方法没有成功?我们该如何改变呢? [我有自己的想法,这些使上面的项目符号观点更加充实,但是我对其他人的回答很感兴趣……而且很难实施我的方案[[也许这是真正的问题:-]]] EDIT 2011/1/3:一个回答线程暗示“文档”(大概是文本的,尤其是非正式的)可能就足够了。我想我应该澄清一下,我不相信这一点。CASE工具从80年代开始出现,但是早期的工具大多只是捕获所绘制图形的像素。尽管这些工具在商业上取得了一定的成功,但实际上并没有太大帮助。一个关键的见解是,如果附加的“设计”工件无法正式解释,那么您将无法获得任何认真的工具帮助。我认为,同样的见解适用于任何长期有用的设计捕获形式:如果没有正式的结构,它将不会有任何实际用途。文本文档几乎无法通过此测试。

3
推荐一种设计模式/方法来暴露/容忍/从系统错误中恢复,异常处理(例如Java,C ++,Perl,PHP)
您能推荐一种设计模式/方法来暴露/容忍/从系统错误中恢复,异常处理(Java,C ++,Perl,PHP)吗? 一些错误需要报告。 某些错误可以在内部处理(通过重试或不重要的处理(可以忽略))。 您如何构造代码以捕获它们? 但是所有错误都需要记录。 有哪些最佳实践? 为了模拟它们能够完全测试受它们影响的组件? 适用于几种现代编程语言的一般非编程语言特定问题,但将欢迎使用Java,C ++,PHP和Perl进行模式,方法和哲学的示例说明。 (也在stackoverflow中问过:https : //stackoverflow.com/questions/7432596/recommend-a-design-pattern-approach-to-exposed-tolerating-recovering-from-system, 但我认为也应该在程序员中提出,因为我认为程序员的问答涵盖了更广泛的软件/编程问题,而stackoverflow则更多地是关于技术实现(IMHO)。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.