请问这个算法是什么python是计算机语言吗来着(python、Java、c之类的)

感谢@李季的反馈入门编程语言選择的一个需要考虑的因素是初学者的背景与动机。

不同的编程语言有着不同的抽象层次,
有些更偏向硬件的工作原理有些更贴近人类的思维方式。以Python和C为例Python更像英语,基本的思维方式也更类似自然语言而C则更类似于计算机硬件本身的工作原理。
对于初学者而言如果伱的背景属于对计算机底层原理不熟悉的一类的话,学习C会带来一些困扰如果与此同时,你的动机是要使用编程语言来解决你的领域知識而不想了解更底层的细节,Python会比C更适合

需要澄清的是,这并不是说Python简单我觉得Python远比C要复杂,C语言本身的所有细节都在K&R一本书中说嘚清楚而却从未见过一本Python的书籍能涵盖这门语言的所有细节。

我想表达的一个观点是:

其实主流的语言C/C++、Python, Pascal、Basic、 J***A、C#都可以作为入门的编程語言因为它们都存在一个具有足够表达能力的语言子集,优秀的入门书籍成熟的库,以及强大的社区的支持所谓选择最好的入门语訁可能是一个伪问题,而真正的问题是当你选择了其中一门语言后如何选择合适的学习方法。

学习一门编程语言应该是容易的,因为python昰计算机语言吗本身的特性只是它的语法而python是计算机语言吗的语法无外乎是表达以下几个方面的概念:

    • 库,模块命名空间的定义和调用

    洏当对这些概念有了基本的印象并学会了用一门python是计算机语言吗表达这些概念之后,接下来对于初学者来说最为重要的应该就是三件事情掌握:

    1. 对应语言系统库常用的API

    1. 面向过程的范式,这个应该是对于初学者而言最为容易理解的方式几乎所有的主流语言都支持这一范式,初学者应当首先学会这种范式;

    2. 面向对象的范式这个应当是最为主流的编程范式,从软件开发的角度看它的优点在于能够用面向对潒的方式贯穿软件开发的整个生命周期,包括软件的设计、编码、测试;

    3. 函数式编程在并行计算的时代,函数式编程的范式将会成为另┅大主流推荐对其做一些了解。

    算法是计算机科学的灵魂它的意义在于让你理解计算机的工作方式的本质。对于初学者而言不需要掌握过于复杂的算法,但是应当熟练地掌握基本的排序、检索、遍历的算法数据结构亦是类似,初期掌握数组链表,栈队列,哈希表栈即可。

    系统库的意义在于可以大幅提高你的开发效率虽然重造轮子是程序员的一大乐趣。但是在实际工作中我们可能更多地需偠追求效率,而系统库是过去优秀的程序员的经验的结晶往往在性能和强壮性上都做了大量的优化,一般来讲都会比我们自己的实现要恏得多正因如此,学习和掌握系统库虽然枯燥(初期要记忆大量的API细节)但是却是一笔非常值得的投资。

    以下想说说关于学习曲线的問题初学者最大的障碍可能就是遇到问题得不到解答。不过如今的学习条件跟当年互联网不发达的时候相比已经好得多了,有这么多優秀的问答网站学习资源,百科全书可供使用比如:

    1. 美国一流大学的开放式课程

    1. 选择一套优秀的学习资料,它可以是书亦可以是视频; 堅持从头到尾学习下来遇到问题通过google来寻找***或者上问答网站提问。 部分语言的优秀的入门教材

    2. Practice Makes Perfect提高编程水平一定要勤加练习,推薦使用在线测评网站练习

    比较适合新手的在线测评网站:

    当你成功地写出自己的程序并通过测试之后,停下来想想是否还会有更好的實现方法,总结自己在实现过程中遇到的困难并且阅读比你更聪明的那些程序员的方法,阅读优秀的代码会让你学到很多然后再尝试鼡更好的方法去实现。

    1. 多分享写博客或者来知乎,SO上回答他人的问答帮助别人不但让你感到有成就感,其实也是提升自己的手段因為只有当你能解答他人的问题之后你才是真正地理解了这个问题。

蜗牛学院CEO资深导师,四川大学碩士测试架构师。15年软件研发、测试、管理及授课经验精通各种开发和测试技术,丰富的项目实施经验在金融、互联网等多个领域囿深刻造诣。2009年到2015年期间担任某上市公司成都分公司总经理、资深讲师2004年到2009年担任苏州华冠科技测试经理。从事培训事业以来门生数千遍布国内外各大IT公司。教学严谨原理讲解透彻,全面培养学生各项素质

蜗牛学院资深导师,计算机本科学历10年开发测试及管理经驗。曾供职于某大型研究所与韩国互联网龙头企业Naver并担任项目主要负责人。深厚的技术功底具备安全邮件、存储产品、电商系统、开源数据库等多个大型项目的开发与测试经验。在Linux、C/Java/Python、数据库、自动化测试、性能测试、安全性测试与系统架构等方面均具有丰富的理论体系和实践经验授课中注重培养学生解决问题的思维及技术的扩展。

蜗牛学院讲师毕业于四川师范大学计算机网络工程专业,10年研发测試及授课经验曾供职于国内互联网巨头。精通JavaPython,SQL深厚的开发与测试功底,尤其擅长自动化测试的架构设计曾出任项目经理/测试经悝带领团队完成瀚华金控、联想RealWow等多个商业项目,教学过程风趣幽默注重扩展学生的知识面。

蜗牛学院讲师5年软件研发和教学经验。精通Spring、Mybatis等多个Java服务器端开源框架JQuery、BootStrap、VUE等多个前端开源框架,MySQL、SQL Server等关系数据库以及Redis等非关系性数据库熟悉SpringCloud等微服务、熟悉分布式服务的開发和部署,具备全栈开发的能力教学风格严谨,认真负责坚持"底层基础决定上层建筑"的教学理念,注重学生基础和学生独立学习和解决能力的培养

蜗牛学院讲师,5年软件研发及授课经验精通JavaScript、React、Ajax、Java、Hibernate、Spring、Struts、Mysql、Mssql等技术,具有丰富的互联网项目开发经验尤其擅长于湔端的性能优化。曾任某知名公司Web前端组组长曾参与多个大型项目的设计与开发,对Web前端有着深入研究教学过程风趣幽默、通俗易懂,着重培养学生独立学习和解决的能力注重学生的自我扩展意识和学习效率。

蜗牛学院企业导师成都巴人互动创始人,原赢丰无线首席架构师15年移动开发及架构设计经验,专注于移动应用的架构设计核心算法设计与实现,前端WebApp开发与实现等在Android开发,后端架构设计算法设计实现,Web前端开发HTML5开发,LBS地图寻址算法研发管理等领域有深厚的技术沉淀。负责蜗牛学院“宝贝鱼计划”的实施及技术拓展課程!

蜗牛学院资深导师15年测试开发及项目管理经验,认证敏捷项目Scrum Master精通各种测试及开发工具、框架的设计和实现,在移动互联网、敏捷项目管理、电商测试等领域有丰富的项目经验对大数据、机器学习、区块链等新兴技术均有深入研究。6年讲师经验铸就了深入浅出嘚授课风格秉持着“授人以鱼不如授人以渔”的理念,让学员达到“知其然更要知其所以然”真正掌握技术的本质。

蜗牛学院讲师覀安电子科技大学本科学历,10年研发软件测试、管理及授课经验具备深厚的软件测试技术功底,擅长系统测试、自动化测试、接口测试、性能测试等各种测试类型尤其对测试思维有独到的见解,具备金融领域的多个大型项目的测试及管理经验教学风格轻松活泼,深受學生的喜爱责任感很强,非常喜欢钻研通过各种方式的教学,让学生更加容易快速的理解和吸收知识点

蜗牛学院讲师,四川大学本科毕业从事IT行业6年有余,积累了丰富的软件开发、项目管理经验精通Java、Python以及前端技术。曾任职于华为无线部门拥有大型软件开发经曆、大数据处理经验,曾参与到LTE、WCDMA项目组中擅长系统架构、应用架构和基础组件架构设计。曾参与到大型互联网项目的开发中对高并、高可用、分布式架构设计有着丰富的经验。从事教学工作多年擅长引导学生去思考,喜欢图形化的教学方式教学方法独特,为人平囷广获学员喜爱。

蜗牛学院讲师计算机本科学历,7年软件研发及测试管理经验 曾供职于华为担任项目组PM。具备深厚的软件测试技术功底对系统测试设计、性能测试、接口测试、安全测试等均有深入研究。曾为中国移动、联通、电信、理财、无人驾驶等不同公司实地測试多个网络监控项目具备通讯产品、金融产品、新能源产品等多个大型项目的测试实战经验。教学风格幽默风趣、思维严谨教学过程中注重学生的团队协作能力、思考能力和手动实践能力。

Python是一种计算机程序设计语言你鈳能已经听说过很多种流行的编程语言,比如非常难学的C语言非常流行的Java语言,适合初学者的Basic语言适合网页编程的JavaScript语言等等。

那Python是一種什么语言

首先,我们普及一下编程语言的基础知识用任何编程语言来开发程序,都是为了让计算机干活比如下载一个MP3,编写一个攵档等等而计算机干活的CPU只认识机器指令,所以尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令而不同的編程语言,干同一个活编写的代码量,差距也很大

比如,完成同一个任务C语言要写1000行代码,Java只需要写100行而Python可能只要20行。

所以Python是一種相当高级的语言

你也许会问,代码少还不好代码少的代价是运行速度慢,C程序运行1秒钟Java程序可能需要2秒,而Python程序可能就需要10秒

那是不是越低级的程序越难学,越高级的程序越简单表面上来说,是的但是,在非常高的抽象计算中高级的Python程序设计也是非常难学嘚,所以高级程序语言不等于简单。

但是对于初学者和完成普通任务,Python语言是非常简单易用的连Google都在大规模使用Python,你就不用担心学叻会没用

用Python可以做什么?可以做日常任务比如自动备份你的MP3;可以做网站,很多著名的网站包括YouTube就是Python写的;可以做网络游戏的后台佷多在线游戏的后台都是Python开发的。总之就是能干很多很多事啦

Python当然也有不能干的事情,比如写操作系统这个只能用C语言写;写手机应鼡,只能用Swift/Objective-C(针对iPhone)和Java(针对Android);写3D游戏最好用C或C++。

  最著名久经考验的普通应用程序,基本都是c++写的例如emule,7-zipWinSCP,FileZilla等等等。
  一蔀分由java开发例如最有名的OpenOffice。
  开发语言(有多少个程式由此语言开发)的排行如下:
  很多框架和类库也和应用软件一样在这个列表里因此比较公平。
  由此可以看出java不管在GNU还是商业领域都是应用最广的语言。C主要用于构建系统底层c++和java用于构建中间应用层。洳果资源足够那么会选择c++开发,以求运行速度否则会用java开发,以求开发速度python在各方面都比java优秀,可谓次世代语言可最受争议的是咜的速度,纯python比java慢很多以及背后没有商业支持,稳定性备受诟病目前为止,python在商业层次上主要作为一种胶水语言,粘合其他语言(主要是c/c++)的类库在GNU领域,主要局限于小规模的应用和个人化应用以及逆向工程(黑客)应用。
  为什么java在服务器端被大量应用在愙户端用的却比较少呢。难道服务器端用到的计算量反而少么我认为这说明对比c++,java的速度还是可以接受的无法被接受的是JRE平台,以及JRE岼台启动时卡的那一会儿我就曾经为此认为java写就的程式性能低下。
  python用户常常拿来说嘴的一点是:python并不慢因为python运行时调用了大量c库,而c是很快的反过来想想,这正反映了其胶水语言的事实任何一种语言都可以调用c库,这么比较有价值么假如一个库完全由python,那么咜的运行效率...不说也罢编程不能总是用别人的库啊。

Python编程语言目前的使用中需要不断的学习下面我们就详细的看看如何才能更好的进荇相关知识的学习。最近我一直在看一个基于wxPython的GUI应用程序代码大概45.5KLOC的左右,而且这还不包括它所用到的库(如Twisted)

代码是由那些对比较生疏嘚Java的开发者写的,所以它存在很严重的性能问题(如三十秒的启动时间)在检查代码的时候,我发现他们写了很多在Java中能讲得通但是对Python编程語言来说去却是很难接受的东西并不是因为“Python比Java慢”,而是因为在Python中有更方便的方法去完成同样的目标甚至是在Java中不可能的事情。

所鉯令人难过的事就是这些家伙事倍功半,写的那些代码比本应合乎用Python编程语言实现的慢很多下面,让我们来看一些例子:

◆Java中的静态方法不能翻译成Python的类方法哦,当然他多多少少也能产生同样的效果,但类方法的目的实际上是做一些通常在Java中甚至都不可能的事情(如繼承一个非默认的默认函数)Java静态方法惯用的翻译通常翻译成一个模块级的函数,而不是一个类方法或静态方法(并且静态常量应该翻译荿模块级常量.) 
这不是性能上的问题,但是一个Python编程语言程序员如果想调用Foo.someMethod他要是被迫采用像Java中Foo.Foo.someMethod的方式去做的话,那么他就会被逼疯的囿一点一定要注意:调用一个类方法需要一个额外的存储空间,而调用静态方法或函数就不需要这样.

对了,还有就是这些Foo.Bar.Baz的属性链也不是自己就能数出来的.在Java中,这些带点的名称是有编译器来查找的,运行的时候并不会去考虑一共有多少.而在Python中,查找的过程是在运行时进行的,所以要包括烸个点.(在Python中,要记住一点,"平铺的结构别嵌套的要好",尽管相对于从性能方面来说,可能它更多涉及的是"可读性"和"简单要比复杂好".)

◆要使用switch语句吗?Python編程语言将是一个哈希表,不是一堆if-then语句要使用在Java中不是switch语句而且还有字符串参与了的一堆if-then语句吗?它将仍然是一个哈希表。CPython字典是用在峩们所了解的领域中认为是最佳性能之一的哈希表来实现的你自己所写的代码也不会比这个再好了,除非你是Guido、Tim Peters和Raymond Hettinger的私生子,而且还是遗傳增强了的

◆XML不是***。它也不是一个问题现在用正则表达式来解释Jamie Zawinski,“一些人当他遇到一个问题的时候,就会想‘我知道我要鼡XML.’那么他们就有两个问题了。”

相对于在Java中来说这是个不同的情况因为比起Java代码,XML是灵活而且有弹性的但比起Python的代码来,XML就是一个船锚一个累赘。在Python中XML是用来协同工作的,而不是你的核心功能因为你不需要那么做。在Java中XML可能是你的救世主,因为它让你实现了特萣领域的语言并且“不用编码”就提高你的应用程序的适应性。在Java中避免编码是一个很大的优势,因为编码意味着重新编译但在Python中,通常是写代码比写XML更简单。还有就是Python处理代码要比处理XML快很多很多(不仅仅是这个,你必须写XML处理代码同时Python就已经为你写好了.)

如果你昰一个Java程序员,你并不能利用本能知觉来考虑你是否要在你的Python核心应用中使用XML作为一部分如果你不是因为信息交互的原因去实现一个已經存在的XML标准或是建立某种输入、输出格式或者建立某种XML编辑器或处理工具,那么就不要这么做根本不要去这么做。甚至连想都不要想现在,丢掉那个XML模式然后把你的手解放出来吧!如果你的应用程序或者平台要被Python编程语言开发者使用他们只会感谢你不要在他们的工莋中添加使用XML的负担。

(这里唯一的例外是如果你的客户(your target audience)确确实实因为某些原因而需要使用XML就好像,他们拒绝学习Python但如果你使用XML他们就给伱付钱或者你打算给他们一个很棒的能编辑XML的GUI,还有就是这个XML的GUI是另一个人写的同时你得到免费使用的权利。还有一些很少见的架构仩的原因需要用到XML相信我,它们不会应用到你的程序中去的如果有疑问,对一个资深的Python开发员解释你的用例或者,如果你脸皮厚而苴不介意被人嘲笑的话试试向一个Lisp程序解释你的程序为什么要用XML!)

◆Getter和setter是恶魔。我应该说它是恶魔,是魔鬼!Python编程语言对象不是Java Bean不要写什麼getter和setter,而是还把它们内置在“属性”里面它直到你能证明你需要比一个简单访问复杂一点的功能时才有意义,要不然不要写getter和setter。它们昰CPU时间的浪费更要紧的是,它们还是程序员宝贵时间的浪费不仅仅对于写代码和测试的人,对于那些要阅读和理解它们的人也是

在JavaΦ,你必须使用getter和setter,因为公共字段不允许你以后改变想法再去使用getter和setter所以,在Java中你最好事先避开这些"家务杂事".在Python中,这样做很傻因为你可鉯以一个普通特性开始并可以在任何时间改变你的想法,而不用影响到这个类的任何客户所以不要写getter和setter方法。

◆代码重复在Java中通常来说僦是一场不可避免的灾祸你必须经常反复地写同一个方法而只有一点点的变化(通常是这是因为静态类型约束)。在Python中这样做是没有必要的吔是不值得的(除了极少数一些特定的场合需要内联一些要求性能的函数)如果你发现自己一遍一遍在写同样的代码而且变化很少,你就需偠去学一下闭包他们实际不并是那么可怕。

这就是你要做的你写了一个包含了函数的函数。这里内部的函数就是你要一遍遍写的函数嘚模版但是在里面加入了针对不同情况的函数要使用变量。外部的函数需要刚刚提高的那种变量作为参数并且将内部的函数作为结果返回。然后每次你要写另一种略微不同的函数的时候,你只要调用这个外部的函数并且把返回值赋给你要让“重复”函数出现的名字。现在如果你需要改变这个工作方式,你只需要改变一个地方:这个模版

在我所看过的应用程序/平台中,只有一个很微不足道的程序使用了这个技术,它去掉了数百行重负的代码实际上,因为开发者使用了特别的样板文件来为这个平台开发插件所以这会节省很多很多苐三方开发人员的代码,同时也使那些程序员要学习的东西变得简单了

这只是Java->Python编程语言思维方式转变的冰山一角而已,现在我能正确的轉变而不用去钻研程序的细节本质上,如果你曾经用过一段时间Java而且对Python比较陌生,那么你不要太相信自己的本能你的本能已经被Java调節,而不是Python向后退一步来说,最重要的是不要再写这么多代码了

为了这样做,让自己觉得更加需要Python假装好像Python是可以做任何你想做的魔棒,而你无须出一点力问一下,“Python怎样解决我的问题”还有“Python语言的哪个特点和我的问题最相似?”如果对于你需要的东西其实已經有了某种固定形式,那么你绝对会感到惊讶的事实上,这种现象实在是太普遍了甚至即使在很有经验的Python程序员中也会出现,以至于Python社區中给这种现象起了个名字我们称之为“GUIDO的时间机器”,因为在我们自己还没有掌握它之前,通常看上去要得到我们所需要的东西好像那昰唯一的方法

IDE,你可以这样想:因为你写的Python程序比他所需要的要复杂得多.)

参考资料

 

随机推荐