编程⼊⻔指南 -加密数字货币交易所平台

编程⼊⻔指南

前⾔

如今编程成为了⼀个越来越᯿要的「技能」:作为设计师,懂⼀些编程可能会帮你更好地理解⾃⼰的⼯作内容;作 为创业者,技术创始⼈的身份则会让你的很多⼯作显得更容易。⽽作为刚想⼊⻔的新⼿,⾯对眼前海ᰁ的信息,或 许根本不知道从哪⾥开始;⼊⻔轻松度过初级材料的学习后,发现学习越来越困难,陡峭的学习曲线⼜让你望⽽却 步;你知道如何在⻚⾯上打印输出⼀些⽂本⾏,但是你不知道何时该进⾏⼀个真正的有⽤的项⽬;你不清楚⾃⼰还 有哪些不知道的东⻄,你甚⾄搞不清下⼀步该学什么。

这篇⽂章的内容对此不仅会有⼀些⽅向性的建议,还会包含⼀个基础核⼼向的编程⼊⻔导引。当然,Step by Step 的路线是不现实的,并且每个⼈都会有⾃⼰的特点,所以给出的这个编程⼊⻔导引更多的是为了引发读者的 思考,最终帮助你形成适⽤于⾃⼰的学习路线。

但要注意:这篇⽂章是写给那些真⼼想学编程的⼈看的——那些憋着⼀股狠劲⼉,⼀定要做出个什么真东⻄,不学 好不罢休的⼈;⽽不是那些「听说编程好玩」的⼈,在我看来,这种⼈永远都⼊不了编程的⻔,更别提做出个像样 的东⻄来了。

虽然整篇⽂章的基调都是所谓的「强观点,弱坚持」(Strong Opinions, Weakly Held),但读者还是应该像怀疑 身边所有东⻄那样,怀疑我们所写内容的准确性。若有任何相关疑问欢迎公开讨论。

⼼态调整

确定⽬标

在你学习编程之前思考⼀下你的⽬标,当你有最终⽬标时道路会更加的清晰。那么,你想要写什么?⽹站?游戏? iOS 或者 Android 应⽤?或是你是想⾃动化完成⼀些乏味的任务让你有更多的时间看窗外的⻛景?也许你只是想 更具有就业竞争⼒找个好⼯作。所有的这些都是有价值的⽬标,这些⽬标都是你编程学习推动⼒的⼀部分,没有推 动⼒的⼈,是⽆法在略显枯燥的漫⻓学习之旅中⾛远的。

这段视频也许能给你启发:《⼤多数学校都不会教的东⻄》

不要浮躁

Bad programming is easy. Even Dummies can learn it in 21 days. Good programming requires thought, but everyone can do it and everyone can experience the extreme satisfaction that comes with it. 糟糕的编程很容易。即使是傻⽠也能在21天内学会它。好的编程需要思考,但每个⼈都能做到,每个⼈都能 体验到它带来的极度满⾜感。

不管是在线下还是线上的书店,满⽬都是《21天学通 X》这种速成书⽬,它们都承诺在很短⼀段时间内就让你能够 学会相关技术。Matthias Felleisen 在他的著作 How to Design Programs ⼀书中明确指出了这种「速成」的趋 势并予以了以上的讽刺。

所谓的「捷径」或者说「银弹」是不存在的,智者说过,精通某个东⻄需要10年或10000个⼩时,也就是汉语中的 「⼗年磨⼀剑」,所以不⽤着急,功不唐捐。

培养兴趣

Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.

⼤多数优秀的程序员做编程不是因为他们期望得到报酬或得到公众的崇拜,⽽是因为编程很有趣。

– Linus Torvalds

沉醉于编程,编程更是为了兴趣。兴趣是推动⼒的不竭源泉,保持这种充满兴趣的感觉,以便于你能将其投⼊到你 的10年/10000⼩时的编程时间中。编程很有趣,那是探索的喜悦。那是创造的喜悦。看到⾃⼰亲⼿完成的作品显 示在屏幕上很有趣。有⼈为你的代码⽽惊叹很有趣。有⼈在公共场合称赞你的产品、邻居使⽤你的产品、以及在媒 体上讨论你的产品很有趣。编程应该⼗分有趣,若并⾮如此,就找出导致编程⽆趣的问题,然后解决之。

开始学习

令⼈警醒的故事

刚上初中时我便开始了编程学习,很不幸,我读完了好⼏本当时普遍存在的诸如《21天精通C++》这类的垃圾书, 当时读完也⽆⼤碍,甚⾄还能写点⼩程序。但是软件出故障了我不知道为什么,稍显庞⼤的编程问题⽆从下⼿,碰 到现有的库做不到的事也只能两⼿⼀摊。虽然我每天不停地编码,但我发现⾃⼰的编程能⼒却是提⾼的如此缓慢, 对于「迭代」与「递归」的概念只有极其有限的了解,可以说只是把计算机当成了计算器来使⽤。

进⼊⼤学后,我主修了物理学,最初的⼀段时间⾥我⼀直在记忆背诵那些物理公式,却不理解她们是如何得出的, 她们之间有什么联系,亦或是她们的意义。我不停地学习如何计算解答⼀些常⻅的物理问题,却对在这些 How 背 后的 Why ⼀⽆所知。

⽽在我尝试做⼀些基于物理⾏为的电脑游戏时我再次遇到了之前的的困难:⾯对新问题时⽆从下⼿,⾯对新问题时 的恐惧不断累积滋⽣,我开始主动逃避,不去真正地理解,⽽是幻想能通过Google搜索复制粘贴代码解决问题。 幸运的是,⼤⼆时的⼀堂课完全改变了我的学习⽅法。那是第⼀次我有了「开天眼」的感觉,我痛苦地意识到,我 对⼀些学科只有少的可怜的真正的理解,包括我主修的物理与辅修的计算机科学。

关于那堂课:那时我们刚刚学习完电学和ሀ义相对论的内容,教授在⿊板上写下了这两个主题,并画了⼀根线将他 们连了起来。「假设我们有⼀个电⼦沿导线以相对论级别的速度移动…」,⼀开始教授只是写下了那些我们所熟悉 的电学与ሀ义相对论的常⻅公式,但在数个⿊板的代数推导后,磁场的公式神奇的出现了。虽然⼏年前我早已知道 这个公式,但那时我根本不知道这些现象间的有着这样潜在的联系。磁与电之间的差别只是「观察⻆度」的问题, 我猛然醒悟,此后我不再仅仅追求怎么做 (How),我开始问为什么 (why),开始回过头来,拾起那些最基础的部 分,学习那些我之前我本该好好学的知识。这个回头的过程是痛苦的,希望你们能就此警醒,永远不要做这种傻 事。

警醒后的反思

这幅图取⾃ Douglas Hofstadter 的著作 Gödel, Escher, Bach。图中的每⼀个字⺟都由其他更⼩的字⺟组成。在 最⾼层级,我们看的是 “MU”,M 这个字⺟由三个 HOLISM (整全观)构成,U则是由⼀个 REDUCTIONISM

(还原论)构成,前者的每⼀个字⺟都包含后者的后者整个词,反之亦然。⽽在最低层级,你会发现最⼩的字⺟⼜ 是由᯿复的 “MU” 组成的。

每⼀层次的抽象都蕴含着信息,如果你只是幼稚地单⼀运⽤整体论在最⾼层级观察,或运⽤还原论观察最低层级, 你所得到的只有 “MU” (在⼀些地区的⽅⾔中 mu 意味着什么都没有)。问题来了,怎样才能尽可能多的获取每 个层级的信息?或者换句话说,该怎样学习复杂领域(诸如编程)包含的众多知识?

教育与学习过程中普遍存在⼀个关键问题:初学者们的⽬标经常过于倾向整全观⽽忽略了基础,举个常⻅的例⼦, 学⽣们⾮常想做⼀个机器⼈,却对背后的

理解物理模型 → 理解电⼦⼯程基础 → 理解伺服系统与传感器 → 让机器⼈动起来

这⼀过程完全提不起兴趣。

在这⾥对于初学者有两个⼤坑:

  1. 如果初学者们只与预先构建好的「发动机和组件」接触(没有理解和思考它们构造的原理),这会严᯿限制他 们在将来构建这些东⻄的能⼒,并且在诊断解决问题时⽆从下⼿。
  2. 第⼆个坑没有第⼀个那么明显:幼稚的「整体论」⽅法有些时候会显得很有效,这有⼀定的隐蔽性与误导性, 但是⼀两年过后(也许没那么⻓),当你在学习路上⾛远时,再想回过头来「补⾜基础」会有巨⼤的⼼理障 碍,你得抛弃之前⾃⼰ሀ隘的观念,耐⼼地缓步前进,这⽐你初学时学习基础知识困难得多。

但也不能矫枉过正,陷⼊还原论的⼤坑,初学时便⼀⼼试图做宏⼤的理论,这样不仅有⼀切流于理论的危险,枯燥 和乏味还会让你失去推动⼒。这种情况经常发⽣在计算机科班⽣身上。

为了更好理解,可以将学习编程类⽐为学习厨艺:你为了烧得⼀⼿好菜买了⼀些关于菜谱的书,如果你只是想为家 ⼈做菜,这会是⼀个不错的主意,你᯿复菜谱上的步骤也能做出不赖的菜肴,但是如果你有更⼤的ᰀ⼼,真的想在 朋友⾯前露⼀⼿,做⼀些ᇿ⼀⽆⼆的美味佳肴,甚⾄成为「⼤厨」,你必须理解这些菜谱背后⼤师的想法,理解其 中的理论,⽽不仅仅是⼀味地实践。但是如果你每天唯⼀的⼯作就是阅读那些厚᯿的理论书籍,因为缺乏实践,你 只会成为⼀个糟糕的厨⼦,甚⾄永远成为不了厨⼦,因为看了⼏天书后你就因为枯燥放弃了厨艺的学习。 总之,编程是连接理论与实践的纽带,是计算机科学与计算机应⽤技术相交融的领域。正确的编程学习⽅法应该 是:通过⾃顶⽽下的探索与项⽬实践,获得编程直觉与推动⼒;从⾃底向上的打基础过程中,获得最᯿要的通⽤⽅ 法并巩固编程思想的理解。

作为初学者,应以后者为主,前者为辅。

程序设计基础

「学编程应该学哪⻔语⾔?」这经常是初学者问的第⼀个问题,但这是⼀个错误的问题,你最先考虑的问题应该是 「哪些东⻄构成了编程学习的基础」?

编程知识的⾦字塔底部有三个关键的部分:

  1. 算法思想:例如怎样找出⼀组数中最⼤的那个数?⾸先你得有⼀个 maxSoFar 变ᰁ,之后对于每个数…
  2. 语法:我怎样⽤某种编程语⾔表达这些算法,让计算机能够理解。
  3. 系统基础:为什么 while(1) 时线程永远⽆法结束?为什么 int *foo() { int x = 0; return &x; } 是不可⾏的?

启蒙阶段的初学者若选择C语⾔作为第⼀⻔语⾔会很困难并且枯燥,这是因为他们被迫要同时学习这三个部分,在 能做出东⻄前要花费很多时间。

因此,为了尽ᰁ最⼩化「语法」与「系统基础」这两部分,建议使⽤ Python 作为学习的第⼀⻔语⾔,虽然 Python 对初学者很友好,但这并不意味着它只是⼀个「玩具」,在⼤型项⽬中你也能⻅到它强⼤⽽灵活的身影。 熟悉 Python 后,学习 C 语⾔是便是⼀个不错的选择了:学习 C 语⾔会帮助你以靠近底层的视⻆思考问题,并且 在后期帮助你理解操作系统层级的⼀些原理。

下⾯给出了⼀个可供参考的启蒙阶段导引,完成后你会在头脑中构建起⼀个整体框架,帮助你进⾏⾃顶向下的探 索。下⾯的材料没有先后顺序,请任选其⼀,如果卡壳的话可以考虑换另⼀份材料。

MIT 6.00.1x (麻省理⼯:计算机科学和 Python 编程导论)。虽然该课程的教学语⾔为 Python,但作为⼀⻔ 优秀的导论课,它强调学习计算机科学领域⾥的᯿要概念和范式,⽽不仅仅是教你特定的语⾔。如果你不是科 班⽣,这能让你在⾃学时开阔眼界;课程内容:计算概念,Python 编程语⾔,⼀些简单的数据结构与算法, 测试与调试。

Harvard CS50x (哈佛⼤学:计算机科学)。同样是导论课,但这⻔课与MIT的导论课互补。教学语⾔涉及 C, PHP, JavaScript + SQL, HTML + CSS,内容的⼴度与深度⼗分合理,还能够了解到最新的⼀些科技成 果,可以很好激发学习计算机的兴趣。⽀线任务:阅读《编码》

结束启蒙阶段后,初学者积累了⼀定的代码ᰁ,对编程也有了⼀定的了解。这时你可能想去学⼀⻔具体的技术,诸 如 Web 开发, Android 开发,iOS 开发什么的,你可以去尝试做⼀些尽可能简单的东⻄,给⾃⼰⼀些正反馈,补 充⾃⼰的推动⼒。但记住别深⼊,这些技术有⽆数的细节,将来会有时间去学习;同样的,这时候也别过于深⼊特 定的框架和语⾔,现在是学习计算机科学通⽤基础知识的时候,不要试图去抄近路直接学你现在想学的东⻄,这是 注定会失败的。

那么⼊⻔阶段具体该做些什么呢?这时候你需要做的是反思⾃⼰曾经写过的程序,去思考程序为什么 (Why) 要这

样设计?,思考怎样 (How) 写出更好的程序?试图去探寻理解编程的本质:利⽤计算机解决问题。

设想 :

X = ⽤于思考解决⽅案的时间,即「解决问题」 部分

Y = ⽤于实现代码的时间,即「利⽤计算机」部分」

编程能⼒ = F(X, Y) (X>Y)

要想提⾼编程能⼒,就得优化 X,Y 与函数 F(X, Y),很少有书的内容能同时着᯿集中在这三点上,但有⼀本书做 到了——Structure and Interpretation of Computer Programs (SICP)《计算机程序的构造和解释》,它为你指 明了这三个变ᰁ的⽅向。在阅读 SICP 之前,你也许能通过调⽤⼏个函数解决⼀个简单问题。但阅读完 SICP 之 后,你会学会如何将问题抽象并且分解,从⽽处理更复杂更庞⼤的问题,这是编程能⼒巨⼤的⻜跃,这会在本质上 改变你思考问题以及⽤代码解决问题的⽅式。此外,SICP 的教学语⾔为 Scheme,可以让你初步了解函数式编 程。更᯿要的是,他的语法⼗分简单,你可以很快学会它,从⽽把更多的时间⽤于学习书中的编程思想以及复杂问 题的解决之道上。

Peter Norvig 曾经写过⼀篇⾮常精彩的 SICP 书评,其中有这样⼀段:

To use an analogy, if SICP were about automobiles, it would be for the person who wants to know how cars work, how they are built, and how one might design fuel-efficient, safe, reliable vehicles for the 21st century. The people who hate SICP are the ones who just want to know how to drive their car on the highway, just like everyone else.

如果你是⽂中的前者,阅读SICP将成为你衔接启蒙与⼊⻔阶段的关键点

虽然SICP是⼀本「⼊⻔书」,但对于初学者还是有⼀定的难度,以下是⼀些⼗分有⽤的辅助资源:

  1. Udacity CS212 Design of Computer Program:由上⽂提到的Google 研究主管 Peter Norvig 主讲,教学语 ⾔为 Python,内容有⼀定难度。
  2. How to Design Programs, Second Edition:HtDP 的起点⽐SICP低,书中的内容循循善诱,对初学者很友 好,如果觉得完成SICP过于困难,可以考虑先读⼀读 HtDP。
  3. UC Berkeley SICP 授课视频以及 SICP 的两位作者给 Hewlett-Packard 公司员⼯培训时的录像(中⽂化项 ⽬)
  4. Composing Programs:⼀个继承了SICP思想但使⽤Python作为教学语⾔的编程导论(其中包含了⼀些⼩项 ⽬)
  5. SICP 解题集:对于书后的习题,作为初学者应尽⼒并ᰁ⼒完成。

完成了这部分学习后,你会逐步建⽴起⼀个⾃⼰的程序设计模型,你的脑⼦⾥不再是⼀团乱麻,你会意识到记住库 和语法并不会教你如何解决编程问题,接下来要学些什么,在你⼼⾥也会明朗了很多。这时候才是真正开始进⾏项 ⽬实践,补充推动⼒的好时机。关于项⽬实践:对于⼊⻔阶段的初学者,参与开源项⽬还为时过早,这时候应该开 始⼀些简单的项⽬,诸如搭建⼀个⽹站并维护它,或是编写⼀个⼩游戏再不断进⾏扩展,如果你⾃⼰的想法不明 确,推荐你关注 炼⽠研究所 ,或者从 Mega Project List 中选取⾃⼰喜欢的项⽬。

如果你觉得 SICP 就是搞不定,也不要强迫⾃⼰,先跳过,继续⾛常规路线:开始读 The Elements of Computing Systems 吧,它会教会你从最基本的 Nand ⻔开始构建计算机,直到俄罗斯⽅块在你的计算机上顺利 运⾏。 具体内容不多说了,这本书会贯穿你的整个编程⼊⻔阶段,你⼊⻔阶段的⽬标就是坚持完成这本书的所有 项⽬(包括⼀个最简的编译器与操作系统)。

为了完全搞定这本书,为了继续打好根基。为了将来的厚积薄发,在下⾯这⼏个⽅⾯你还要做⾜功课(注意:下⾯ 的内容没有绝对意义上的先后顺序):

计算机系统基础

有了之前程序设计的基础后,想更加深⼊地把握计算机科学的脉络,不妨看看这本书:Computer Systems: A Programmer’s Perspective, 3/E《深⼊理解计算机系统》。这⾥点名批评这本书的中译名,其实根本谈不上什么 深⼊啦,这本书只是 CMU 的「计算机系统导论」的教材⽽已。CMU的计算机科学专业相对较偏软件,该书就是 从⼀个程序员的视⻆观察计算机系统,以「程序在计算机中如何执⾏」为主线,全⾯阐述计算机系统内部实现的诸 多细节。

如果你看书觉得有些枯燥的话,可以跟⼀⻔ Coursera 上的 MOOC: The Hardware/Software Interface,这⻔课 的内容是 CSAPP 的⼀个⼦集,但是最经典的实验部分都移植过来了。同时,可以看看 The C Programming Language,回顾⼀下C语⾔的知识。

完成这本书后,你会具备坚实的系统基础,也具有了学习操作系统,编译器,计算机⽹络等内容的先决条件。当学 习更⾼级的系统内容时,翻阅⼀下此书的相应章节,同时编程实现其中的例⼦,⼀定会对书本上的理论具有更加感 性的认识,真正做到经⼿的代码,从上层设计到底层实现都了然于胸,并能在脑中回放数据在⽹络->内存->缓 存->CPU 的流向。

数据结构与算法基础

如今,很多⼈认为编程(特别是做 web 开发)的主要部分就是使⽤别⼈的代码,能够⽤清晰简明的⽅式表达⾃⼰ 的想法⽐掌握硬核的数学与算法技巧᯿要的多,数据结构排序函数⼆分搜索这不都内置了吗?⼯作中永远⽤不到, 学算法有啥⽤啊?这种扛着实⽤主义⼤旗的「码农」思想当然不可取。没有扎实的理论背景,遭遇瓶颈是迟早的 事。

数据结构和算法是配套的,⼊⻔阶段你应该掌握的主要内容应该是:这个问题⽤什么算法和数据结构能更快解决。 这就要求你对常⻅的数据结构和算法了熟于⼼,你不⼀定要敲代码,⽤纸⼿写流程是更快的⽅式。对你不懂的数据 结构和算法,你要去搜它主要拿来⼲嘛的,使⽤场景是什么。

供你参考的学习资源:

  1. 《算法导论》:有⼈说别把这本书当⼊⻔书,这本书本来就不是⼊⻔书嘛,虽说书名是 Introduction to Algorithms,这只不过是因为作者不想把这本书与其他书搞᯿名罢了。当然,也不是没办法拿此书⼊⻔,读第 ⼀遍的时候跳过习题和证明就⾏了嘛,如果还觉得⼼虚先看看这本《数据结构与算法分析》
  2. Algorithms: Design and Analysis [Part 1] & [Part 2]: Stanford 开的算法课,不限定语⾔,两个部分跟下来 算法基础基本就有了;如果英⽂不过关:麻省理⼯学院:算法导论
  3. ⼊⻔阶段还要注意培养使⽤常规算法解决⼩规模问题的能⼒,结合前⽂的SICP部分可以读读这⼏本书:《编 程珠玑》,《程序设计实践 》

其他基础

编程⼊⻔阶段⽐较容易忽视的⼏点:

  1. 学会提问:学习中肯定会遇到问题,应该学会正确的使⽤搜索引擎。当单靠检索⽆法解决问题时,去 Stack Overflow 或知乎提问,提问前读读这篇⽂章:能有效解决问题的提问⽅法。
  2. 不要做⼀匹ᇿ狼:尝试在 CoCode 与他⼈交流想法。尝试搭建⼀个像这样简单的个⼈⽹站。试着在博客上记 录⾃⼰的想法。订阅⾃⼰喜欢的编程类博客,推荐⼏个供你参考:Joel on Software, Peter Norvig, Coding Horror
  3. 学好英语:英语是你获取⾼质ᰁ学习资源的主要⼯具,但在⼊⻔阶段,所看的那些翻译书信息损耗也没那么严 ᯿,以你⾃⼰情况权衡吧。

⼩结

以上的内容你不应该感到惧怕,编程的⼊⻔不是⼏个星期就能完成的⼩项⽬。期间你还会遇到⽆数的困难,当你碰 壁时试着尝试「费曼」技巧:将难点分⽽化之,切成⼩知识块,再逐个对付,之后通过向别⼈清楚地解说来检验⾃ ⼰是否真的理解。当然,依旧会有你解决不了的问题,这时候不要强迫⾃⼰——很多时候当你之后回过头来再看这 个问题时,⼀切豁然开朗。

此外不要局限于上⽂提到的那些材料,还有⼀些值得在⼊⻔阶段以及将来的提升阶段反复阅读的书籍。这⾥不得不 提到在 Stack Overflow 上票选得出的程序员必读书单中,排在前两位的两本书:

Code Complete:不管是对于经验丰富的程序员还是对于那些没有受过太多的正规训练的新⼿程序员,此书都能 ⽤来填补⾃⼰的知识缺陷。对于⼊⻔阶段的新⼿们,可以᯿点看看涉及变ᰁ名,测试,个⼈性格的章节。

The Pragmatic Programmer :有⼈称这本书为代码⼩全:从 DRY 到 KISS,从做⼈到做程序员均有涉及。

这本书的作者 Dave ,在书中开篇留了这样⼀段话:

You’re a Pragmatic Programmer. You aren’t wedded to any particular technology, but you have a broad enough background in the science, and your experience with practical projects allows you to choose good solutions in particular situations. Theory and practice combine to make you strong. You adjust your approach to suit the current circumstances and environment. And you do this continuously as the work progresses. Pragmatic Programmers get the job done, and do it well.

这段话以及他创⽴的 The Pragmatic Bookshelf ⼀直以来都积极地影响着我,因此这篇指南我也尽ᰁ贯彻了这个 思想,引导并希望你们成为⼀名真正的 Pragmatic Programmer 。

后记

如果你能设法完成以上的所有任务,恭喜你,你已经真正实现了编程⼊⻔。这意味着你在之后更深⼊的学习中,不 会畏惧那些学习新语⾔的任务,不会畏惧那些「复杂」的 API,更不会畏惧学习具体的技术,甚⾄感觉很容易。当 然,为了掌握这些东⻄你依旧需要⼤ᰁ的练习,腰还是会疼,⾛路还是会费劲,⼀⼝⽓也上不了5楼。但我能保证 你会在思想上有巨⼤的转变,获得极⼤的⾃信,看⽼师同学和 CSDN 的眼光会变得⾮常微妙,虽然只是完成了编 程⼊⻔,但已经成为了程序员精神世界的⾼富帅。不,我说错了,即使是⾼富帅也不会有强⼒精神⼒,他也会怀疑 ⾃⼰,觉得⾃⼰没钱就什么都不是了。但总之,你遵循指南好好看书,那就会体验「会当凌绝顶」的感觉。

**$PIXEL **$KUB **$PRCL **

此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 评论
  • 转发
  • 分享
评论
0/400
暂无评论
交易,随时随地
qrCode
扫码下载 Gate App
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)