你如何保持所有语言的顺畅?

时间:2009-02-04 06:18:32

标签: programming-languages

我想我有点疯狂了。

现在,我正在使用以下语言(我只是在进行精神盘点):

  • C ++ - 我们的游戏引擎
  • 汇编程序 - 低级别调试和一些特定于协处理器的例程
  • Lua - 我们的游戏引擎脚本语言
  • HLSL - 用于着色器
  • Python - 我们的构建系统和实用工具
  • Objective C / C ++ - 适用于Mac和iPhone的游戏引擎平台代码
  • C# - 我们海外办事处开发的一些工具
  • ExtendScript - Photoshop导出工具
  • ActionScript - UI脚本
  • VBScript - 一些与电子表格相关的内容
  • PHP - 一些网络相关的东西
  • SQL - 一些与网络和工具相关的东西

除此之外,过多的API通常有许多不同的方式来做同样的事情:std库,boost,.NET,wxWidgets,Cocoa,Carbon,Python的本机脚本库,Lua等,OpenGL, Direct3d,GDI,Aqua,augh!

我发现自己无意中混淆了语言和api,在我遇到语法错误之前没有意识到我在做什么。我觉得我无法跟上它,我不可能精通所有这些领域。特别是在C ++和Python领域之外,通过查看内存中的手册,我发现自己编程更多。

你有类似的问题吗?划分的想法让你更有效率?决定你想要保持精通的地方?组织提示?当你从Lua切换到C ++时,你需要重新开始使用分号?我们的程序员为自己创造了多么复杂的东西?

欢迎任何想法!

11 个答案:

答案 0 :(得分:7)

我做的一些事情是让他们分开......

针对不同语言使用不同的IDE /编辑器/配色方案。您开始将语言与环境相关联,当您切换窗口时,您的大脑会获得一个很大的视觉提示,它需要上下文切换到新语言。

尝试一次将上下文切换限制为2或3种活动语言。完成后关闭任何其他IDE或编辑器窗口。

尽量忘记“火与忘记”的东西。您列出的许多语言似乎都不是您每天都在积极编写的东西,而是您用来自动执行日常任务的工具。尽可能多地尝试“工具日”,在这些工具上你需要做任何工作。从你的日常编码中尽可能多地分离它,这样你的大脑就不必担心页面交换这些东西了。

- 编辑提示,而不是队列。

答案 1 :(得分:4)

我觉得过了一段时间对你来说很自然。当我第一次认真学习编程时,我使用的是各种语言 - 尤其是Java和C#。我发现自己不小心在C#中使用了某些Java功能,反之亦然。对我来说幸运的是他们的很多功能都是相同的,所以它把我救了出来,但是当我继续前进时,这并不是一个真正的问题。

尝试花费大量时间使用每种语言。坐下来读一本关于每种语言的好书(或几本书)并熟悉它。询问你的老板你是否可以将大部分时间花在一个部分上。在制作之前,你将开始捕捉更多的错误。对于那些没有的,这就是创建调试器的原因 - 程序员最好的朋友。我有一个可怕的记忆,我的意思是可怕的。您可能认为它使编程更难,但实际上并非如此。在使用一种语言很长一段时间之后,这些功能似乎就出现了。

因此,请尝试在每种语言上花费更多时间,而不是跳过并试图一次性学习它们。这些信息会更好地贴在你身上,当编码时间到来时你会变得更加慌乱和困惑。尝试做有助于让您在编程时保持专注的事情。如果有很多咖啡因有帮助,那就去吧!如果听你喜欢的音乐有帮助,那就去吧! (对我来说,我无法用最小的声音集中注意力,但每个人的声音都不同。)

祝你好运!

答案 2 :(得分:4)

对于我计划彻底学习的任何语言,我将在Vim中编写自己的语法高亮显示。我尝试着色严格,以便在我输入时着色会发现明显的错误。这有助于我记住在忘记的情况下放置某些语法项的位置(所以//在python中看起来不像是注释,而且我总是很难记住在C中放置*或[]的位置。如果我不记得一个函数或方法名称,我猜它,如果它显示颜色,我知道我拼写正确。我也尝试选择不同的颜色,以便不同的语言相互脱颖而出,它有助于我的大脑记住我正在写的语言。

答案 3 :(得分:4)

第一次,当我从一种语言改为另一种语言时,我永远不会正确的功能是数组。它们总是有不同的语法,我每次都会查找它们。 以下列出了我最常用的语言以及如何在其中实现数组:

//Java:
int[] array1 = new int[5];
int[] array2 = {0, 1, 2, 3, 4};
//C/C++:
int array1[5];
int array2[5] = {0, 1, 2, 3, 4};
//JavaScript:
var array1 = new Array(5);
var array2 = [0, 1, 2, 3, 4];
//PHP:
$array1 = array(5);
$array2 = array(0, 1, 2, 3, 4);
//Python:
array1 = []#According to the comments, we don't care about size!
arary2 = [0, 1, 2, 3, 4]; #Could use range to create a sequence

答案 4 :(得分:3)

您在web-dev中发现的一件事是,几乎按照定义,如果您希望能够进行端到端的工作,您需要能够使用至少5种语言(SQL,mid tier,html,css) ,js),每个稍微不同的项目都会添加某些东西 else(jQuery?Flash?XML?)。

我认为你只需要自然地解决这个问题,但有两件事真的有用:

  • 学习概念,而不是语法,并在需要时依赖IDE和谷歌(语言特定的面试问题没有意义的另一个原因),因为这些适用于任何事情并且更容易看到领域特定组件滑入和滑出,而不是认为你正在学习完全不同的东西

  • 在可能的情况下坚持使用类似的语言语法系列 - 我知道我个人认为C#使用起来比使用PHP更自然,因为它与JS和Actionscript,XML共享语法,因为它是我对HTML的熟悉程度

答案 5 :(得分:3)

我同意:那里有太多的语言和API。

如果您是客户,语言和API就像T恤一样,您会很高兴您有最大的选择。嘿,如果你想要一种静态类型的语言,它可以提供很多灵活性和高性能,那么请使用C ++!如果您想要更容易维护的东西,请使用Java或Python或Ruby,或者命名。你有选择。你应该感到高兴。

但事实是,你更像是一个建房子的人,语言和API就像螺丝和螺栓:它们是你的工具。如果您有1000种不同类型的螺钉和螺栓,每种都有不同的特性和限制,那么您的工作将是一场噩梦。你会更专注于你的工具,而不是你正在建造的房子(这会响铃吗?)。当然,我知道没有一个通用的螺栓,但你可以用几种不同类型的螺栓想象生活,不是吗?

我认为问题在于建筑行业的人们喜欢他们正在建造的房屋......而且我们的开发人员喜欢这些螺栓。我也不例外:我只是喜欢学习一门新语言或框架。螺栓很漂亮。 ; - )

答案 6 :(得分:2)

如果我的桌面上没有半打API和语言参考书签,我个人几乎没有希望取得进步。

答案 7 :(得分:1)

我感觉到你的痛苦,兄弟。

但是,我不知道;我认为多语言能力(或者至少是多语言一般意识)只是我们生活的世界,而我们将会习惯这样的事情。不知何故。唉,我不知道保持理智的秘诀是什么。 (虽然对我来说,我可以说啤酒肯定有帮助。)

我的团队中的一些人(我在Real工作,顺便说一句)在Windows上用C ++开发,用于Windows,就是这样 - 这就是他们多年来一直在做的事情,而且他们很擅长,他们喜欢它,他们非常乐意做好这件事。

另一方面,我,我从来没有能够适应任何一种语言,我认为我不想;一般来说,过去十年我一年中学过一种语言,其中一些语言与其他语言不同(ColdFusion,任何人?),而现在,我几乎完成了Flash,Flex和ActionScript的所有工作。如果两年前你告诉我今天我要做的事情,我相信我会笑的。保持有时候会筋疲力尽(我posted similarly一段时间回来 - 那里的其他人也有一些好的答案),但我似乎无法拒绝检查新的东西,保持当前等等。 / p>

我要说的一件事是,继John T和Scott的评论之后:书籍是唯一的出路。书籍,至少对我来说,以及阅读大量(好 - 不坏)代码,是让语言逐渐和凝聚渗透到你的大脑中的最佳方式,而这只需要时间。就像我说的,我差不多两年了,现在我已经开始觉得我能说流利的ActionScript了。总而言之,我的书桌上可能还有十本AS书,而且一旦我完成了我正在阅读的那本书,楼下还有两本等着我。

永远不会结束。哇噢!

PS:VBScript,但是?呃,太可怕了。对不起。 ;)

答案 8 :(得分:1)

我的工作的一个优点是我能够从一个项目切换到另一个项目,具有不同的语言,操作系统,编码规则,QA要求,......

我发现保持领先的唯一方法不是要了解每种语言的每一个方面,而是要知道什么是参考文档以及我在哪里可以找到它们。例如,我使用man命令用于perl,TCL / TK和各种版本的Unix和Linux,Ada的在线语言参考手册,Objective-C和Cocoa的Apple Developer资源。

答案 9 :(得分:0)

您可以执行的任何项目调度都可以帮助您最大限度地减少上下文切换。你可以推迟Web开发直到C ++代码稳定吗?

我尝试做的另一件事是拥有一个新语言的好“工作示例”。尝试找到您当前使用的语言的中小型样本,并保持方便。我发现从一段我熟悉的示例代码中获取语法细节通常比从参考手册中挖掘细节更快。

答案 10 :(得分:0)

人类不能多任务。周期。

http://www.joelonsoftware.com/articles/fog0000000022.html

如果你不允许其他人做这项工作,因为他们已经有完整的盘子,那么就会招来更多的人。如果你不被允许雇用更多的人,那么也许人们至少可以改变优先顺序,这样每个人都可以集中精力。

例如:如果您是引擎上的全职工作,或者在错误修复之外的任何级别的承诺,您为什么要开发游戏逻辑?和内容工具? 构建工具? 网络开发?如果你不是在谈论一年的时间跨度,可能会有一个单独的时间集中在每一个上,那么这听起来就像你做了所有的编程,而其他人只是喋喋不休。

当然,你只是其中一个领域的专家,而不是所有领域的专家。有一整个“如果你被公共汽车撞到”的事情。如果你是那个人,那么这对你来说是安全的,但对你的公司而言非常糟糕和你的理智

您可以尝试更多地匹配工具。尽可能多地向Python或.Net移动,因为我认为你不能放弃你的游戏核心技术。