主流的刷题语言有三个,Python,C++,Java。其他还有Go,Swift,Javascript等等。那么我给大家一一去分析一下这些刷题语言。
第一个就是Python,Python的适用范围偏向于Data Science,或者说是Machine Learning、AI等方面,它更倾向于和数据相关。如果你做的是DS的工作,Python刷题会和以后的工作联系比较紧密,而且Python是我们三种刷题语言之中代码量最少的一种语言,同时也是初学者入门最快的一种语言。
因为Python是解释性语言,它内置封装了很多的函数,在Java之中需要写十行二行的代码,那么在Python之中只需要一两行,调一下相关函数就可以搞定。
但是Python的缺点也是比较明显的 ,第一,Python的项目局限性。如果是初学者,很多人想自己做的Project和刷题语言保持一致,那么Python的项目一般是和DS相关比较多,一般是比较难找一些实战性项目写到简历上。当然也有一些Django的框架 ,它适用于SDE的Python项目,但是用这种框架的公司对比C++和Java真的不多。
第二,不适用后续的OOD,System Design。北美SDE面试三大块Algorithm,OOD,System Design。Python的语言过于简单,虽然初学者上手很快 ,但是对应于OOD,System Design的思想的表达,例如封装继承多态面向对象这些,他因为封装而忽略掉。而OOD,System Design是面试中必考的内容,其实对后续学习没有起到太多的铺垫作用。
而其他两种语言就不存在这样一个问题,综上所述 如果你是想做Data Science方向,建议Python刷题是没有任何问题。但是如果你是想做SDE的方向 ,那么我推荐其他语言会比更好一点,Python不是不可以,而是在以后的工作之中,你初学者打基础之中,会比C++和Java更弱一些。
第二就是C++,它的适用范围更多偏向于底层系统 ,例如无人车操作系统、网络通信软件 ,游戏嵌入式等。那么首先以Project来论,很少有人能够拿出一个C++的项目 ,因为C++的项目领域专注度太深,很难有一个作为初学者练手写在简历上的项目。如果Java编一个网站,两三周学一个网课就能做出一个网站,但C++,可能就需要两三个月去完成一个无人车的一个项目。
第二点,以刷题特性来论,ACM算法竞赛基本上是用C++去写的, 但它的代码是三种语言中最复杂的一种,同样一个题,它代码量比Java上要多很多,Python有的题可能写5行,Java可能写8行,那么C++可能就变成写15行了。
最后C++,则是有很多的语言坑,在算法没问题的情况之下,有很多语言特性需要去注意,而我们刷题是专注于算法,但C++的代码量过于复杂,语言特性注意的地方也比较多,其实这些对初学者来说是非常不友好的。
其实我个人是不建议刷题时,初学者用C++去刷,它需要注意的地方,比Java和Python多太多了,时间精力会花在很多语言上的问题上。
最后一种长语言就是Java,Java的应用面相对来说比较广,所有的网站,比如淘宝天猫的后端都是Java,和市面上的很多应用软件,手机安卓系统,Java更偏向于应用层。所以以Java为核心的练手Project,是比较多而全的,而且很多项目可以在两周之内做完,并且出成果,在简历上可以马上写出来东西。
而且,以刷题的特性来论的话,Java也是比较中庸的一种语言,它不像Python的简单,也没有C++的复杂,而且对于面向对象的思想,也是能够有一个比较好的表达。上手的速度也比较快,我个人认为以刷题为目的,学习Java语法达到刷题的水平,一天的时间足以。
那么最后是小众语言,Go,Swift,Javascript这些。
我是强烈不推荐这些小众语言,因为如果是这些小众语言,那么找刷题答案需要花费大量的时间。 虽然语言和算法是没有关系的,但至少在我们练习的过程之中,需要去跑通Test Case,小众语言在找答案上这一点, 对比上面的三种语言,会花费两倍甚至更多的时间。
而主流的三种语言,可以在Discuss上找出各种各样版本的答案。
最推荐的,还是Java。
其实三种刷题语言,你选择哪个都可以,没有绝对的好与坏,其实很多初学者因为上手快选择Python,完全没有任何问题,但我认为作为初学者考虑的更多的,是为以后学习的铺垫,我个人是三种语言全部刷过题的,我写过Django的网站,用Swift做过iOS程序,还在App Store上线过,甚至用Swift刷过一些题,最终还是选择了Java作为最后的刷题语言,考虑最多的还是后面的OOD,System Design,所以我只能以我的经验,给大家一些参考。
但最后我再强调一遍,语言只是工具,我从Java切换到Python,看看语法基本一天就开始刷了。最重要的还是算法,刷题困住你的是永远是这个题怎么想出解法,而不是用哪种语言,做题才是最重要的。花两个小时确定语言,剩下最重要的,还是做题。