我应该学习哪些编程语言才能成为一名Ubuntu开发者?

虽然我曾经在一个项目中使用过NetBeans,但是要成为一名全面发展的Ubuntu开发者,我需要学习哪些语言呢?
我的NetBeans项目(仅限Java)是设计一个计算器(相对简单)。此外,我们如何学习制作图像查看器、浏览器等等?
另外,对于某些应用程序来说,最好的编程语言是什么?

3这是相当主观的...例如:Perl可以替代Python,反之亦然,但你会发现有些Perl/Python用户无缘无故地鄙视Python/Perl,原因仅仅是缺乏或强制缩进的问题而已 ;) - Rinzwind
如果你能更具体地说明你想写什么,我们可能会更好地回答你的问题,但是如果你只是随便说一下...,你很可能会得到很多不同的意见,你最好在Ubuntu论坛:开发与编程上提问。 - Warren Hill
5个回答

答案很简单,但并没有太多帮助。无论需要哪种语言,Ubuntu是一堆软件,其中一部分是用C编写的,一部分是C++,还有一些用Python、Perl、bash等编写的。你绝对应该学习使用bash进行脚本编写,并选择像Perl或Python这样的语言,尤其是后者。此外,学习经典的C语言从来不会对任何人造成伤害——你可以更深入地了解程序的工作原理、库函数以及其他工具。
否则,首先找到一个任务、一个领域,找到需要解决的问题,或者找到一个令人着迷的项目需要你参与。然后确定适合该目的的编程语言。

5简单但准确的;无论用什么语言最高效地完成工作。 - Rinzwind
3由于OP提到他有Java经验,值得一提的是Java也可以在Ubuntu上正常运行。甚至在从其他操作系统移植时都不需要重新编译。 - BlueRaja - Danny Pflughoeft
@BlueRaja-DannyPflughoeft 除非你正在开发需要低级系统调用的应用程序。通常你会看到应用程序为这些功能提供平台特定的库。但总体而言,是的,你说得对。 - Dennis Eichhorn
当然,任何可以针对特定CPU架构进行编译的东西都能胜任这项工作。但是,当有人想要为特定平台开发时,还有更重要的方面需要考虑。比如,他有多少时间来开始,他是否愿意处理内存管理,他是否想要做跨平台程序,他想要制作什么类型的程序,他是否懂得在团队中合作,他是否想要制作能够同时为用户提供培根三明治和按摩的计算机,或者是移动空调系统,有人说天空是极限,等等... - userDepth

如果您打算为Ubuntu编写可以在多个设备和形态因素上运行的应用程序(桌面,手机,平板电脑,电视...),我建议学习QMLJavaScript。基本上:

  • 使用QML编写可跨形态因素和设备运行的Ubuntu应用程序
  • 在编写Ubuntu应用程序和编写Ubuntu网络应用程序时,使用JavaScript作为补充

你能详细说明一下为什么这两个是合适的吗? - don.joey
完成了,希望这能提供清晰的指导 :) - David Planella

你应该学习:
JavaScript:因为大多数UI框架/环境都是基于JavaScript的,总有一天你会需要它。
然后对于其他所有的东西,你将需要其他的语言:
C++/C 优点:运行速度惊人快,可以访问底层功能。 缺点:学习如何编写稳定的代码需要很多时间,社区不友好。
Ruby: 优点:易于学习,编写起来非常愉快,社区很棒。 缺点:对于某些任务可能会比较慢(真的)。
Python: 优点:很多包都是用Python编写的,社区很棒,速度也很快等等。 缺点:Python 3(开个玩笑)。
当然还有很多其他的语言,比如Java等等,但是上面提到的语言可能更适合初学者入门,除了C/C++,学习它们也值得,因为你可以在许多其他语言中使用它们(例如扩展Python、Ruby等)。

编程工作包括实际的代码和底层的思维模型。
只要你对计算机的基本概念有所了解,自学一门编程语言是很容易的,但为了对一个项目做出有用的贡献,你还需要了解其背后的设计。
我的建议是加入一个你个人感兴趣并经常使用的项目,然后从质量保证工作开始:
- 如果有一个相当模糊的错误报告,尝试重现问题,并改进描述。如果能提供自动化测试的话就更好了。 - 如果有一个旧的错误已经很长时间没有得到关注,尝试看看它是否仍然存在,并更新错误报告。 - 如果有测试套件失败,试着找出导致这个测试失败的原因。
这样可以让你在一个可控的学习曲线上学习项目中困难且概念性强的部分,同时保持兴趣(因为它是你关心的项目),并让你接触到项目周围的社区。实际的编程语言(无论是哪种项目中使用的)可以边学边用。
对于一个相对渐进的入门示例,请查看我对Beignet项目的贡献。在这种情况下,对编程语言(如C/C++)的了解显然不是限制因素。

你应该学习... 所有的语言!或者更确切地说,元-学习所有的语言。当你掌握两三种语言时,你可以快速学习任何与这些语言相似的新语言。如果你懂足够多的语言,你就“几乎”了解所有语言,并且更重要的是,你理解属于语言的部分以及与语言无关的编程部分。归根结底,具体的语言并不重要。

所以你可能想要学习Java、C、Scheme、OCaml、Assembly(至少两种架构)、Forth和一点Prolog,不一定按照这个顺序。第二门语言会比较困难,因为你既需要学习新的概念,又需要忘记你在第一门语言中学到的但事实证明是错误的概念。之后就容易了,而且只会变得更容易。

然后,在处理特定的开发任务时,根据编译器和库的可用性和支持、同事的知识、管理层的政策限制等因素选择最适合的语言。灵活思维是关键。了解多种语言赋予了这种灵活性。


全部都要?真的吗?点击这里看看一些经典的“HelloWorld”程序。大多数程序员只会几种语言,只要掌握自己需要的就足够了。 - Warren Hill