因为Python “前端” 设计很成功。首先是语法设计的很简洁人性,没有分号、花括号这种“奇怪”的东西。然后动态特性,概念上就是弱化了类型系统对语义的限制,非常灵活。“后端”的CPython实现虽然不完美(主要是多核的多线程性能)但是隐藏了大部分low level细节,GIL让单核性能非常强。GC有坑但是大部分人根本触及不到,触及到的人自然知道如何破。
正式因为前端做的好,语言的生态很快就起来了,目前Python主要的生态是围绕 Web 和 数据科学。
但是真是因为前端做的太好了,很多人学了Python能办事,但是并需要知道底层的细节。我面试过很多Python程序员,说不清GC怎么工作,分不清哪些东西在堆,哪些东西在栈里,不清楚缓存算法,就连Python本身的一些语法糖都搞不清楚原理,比如装饰器、上下文管理器等等。但是C++或者Java程序员更少出现这种情况,因为这些语言的前端相对low level一点点,很多东西弄不清楚,是没办法写出合理的程序的。比如Java程序员基本上能分清堆栈,C++程序员大概率了解GC或者内存管理,不然基本没法出活。
但是这不是Python的错,正式因为Python设计很好,很人性,才出现了这种状况。不同的人也有不同的需求,比如做作爬虫啥的确实也不需要知道那么多细节;但是如果作为软件工程师,了解细节是必要的,这些细节其实跟语言并没有什么关系,编译原理、并发、GC、内存管理等等这些东西,不同语言有不同的表达方式而已。
最后一点提醒,不要被网上的一些错误言论代跑。计算机科学跟其他学科一样,需要花时间和经理才能掌握,没有捷径,与语言无关。
有兴趣的可以关注这个系列:
More...