零基础应该选择学习 java、php、前端 还是 python?

已经入职php几个月了 都是做基础的增删改查 问题补充个前端.科班的当然应该先学C.最近也在补C语言,毕竟php底层就是C,然后看看数据结构什么的.非科班推荐java、前端
关注者
5164
被浏览
905221

246 个回答

前段时间招聘,出了两个题目。新人们可以看看自己掌握得怎么样。当然,由于我是搞底层开发的,所以在招聘的时候,明显偏向数据结构,编程语言和算法的知识。不具有普遍性。但是新同学们看看面试官在面试的时候是怎么想的,应该也是大有裨益的。
知乎专栏
=============== 原答案的分割线 ==========
看了那么多答案,我想说,你们不要误人子弟。请相信我的回答。为了增加自己的说服力,必须亮一下自己的经历了。
清华大学硕士毕业,在北京写过两年Java,在杭州写过三年Python,深入定制过Python虚拟机,现在从事arm上的javascript虚机机的开发。虽然仍然不是什么牛人,但我觉得我的经验能对大多数新入门的从业人员提供参考。以下是正式回答。

这三门当中,首推Java。真的,Python当然是好,但是对于一个新入门的人,最重要的是先找到工作不是吗?而找工作的话,Java无疑是最容易的。对于跨行业的人而言,最困难的其实是第一步,那就是如何进入这个行业。如果你连进都进不来,第一份工作迟迟无法开始,那么好好努力,补上数据结构,设计模式,算法设计这些差距就根本无从说起,不是吗?

不要被什么科班出身之类的说法吓坏了。虽然我是科班出身,但我始终觉得,只要你肯努力,这里面并没有什么无法逾越的鸿沟,最重要的是不要好高骛远,也不要急于求成。学习和积累是有一个过程的,在程序员这个行当,你一分付出,就会有一分回报。尊重学习的内在规律,循序渐进,终有一天,你会成为你想成为的那个人的。

接着,我来谈谈具体的规划。
1. 了解Java的运行环境。搞清楚path和classpath是干什么的,怎么在命令行进行编译,执行。知道IDE的各个按钮后面真正发生了什么事情。
2. 掌握Java的语法。搞清楚包,接口,类,继承这些基本概念。掌握多态,overwrite,死背下IO的接口,包括InputStream/OutputStream和Writer/Reader,死背下网络编程和GUI编程的接口,死背JDBC接口。这一步,推荐的书是《 Thinking in Java》。
3. 掌握多线程编程。弄明白ConcurrencyHashMap是怎么实现的,搞清楚synchronized是怎么回事,弄明白为什么要有Runnable接口。

在第二步和第三步掌握到80%的时候,你就可以考虑找工作了。

4. 在工作中体会一下设计模式。推荐《Java与模式》这本书。看完里面的Decorator,IO接口你再也不会去死记硬背了。用的时候,根据Adaptor和Decorator的命名规则,自己临时推都推得出来。
5. 恶补数据结构。 搞清楚 LinkedList和 ArrayList的实现机制,了解它们的每一个接口的时间复杂度。同样的还有其他容器,Map啊,Set啊,都是一样的。栈,队列,二叉树,图贯穿编程始终,如果这一步你迈不过去,那就只能在低阶程序员里打转。
6. 如果有可能,最好对一些算法设计也有所涉猎。比如动态规则的思路,贪心算法,诸如KMP这种奇妙的算法等。这一步没有数据结构那么重要,学得好当然好,学不好也不用太挫败。

到了这一步,你和科班程序员之间的差距就不大了。可以在工作中独立承担开发任务了。

7. 进阶,这时候就可以有自己的思考了。Java发展到现在,被用在各种各样的情景之中,说它是应用最广泛的编程语言并不过分。你在打好基础以后,就可以考虑应该向哪个方向发展了。比如服务端的架构,最好能学习一下JavaEE。JEE一直以来,都是让人觉得门槛太高。这个其实可以从Spring入手,搞清楚反射,控制反转,依赖注射都是什么鬼(这些神叨叨的名词其实都是为了解决Java本身不够动态这个缺陷而出现的,这里不展开,我只想提醒的是,这些概念没有什么大不了的东西,不要被爱装逼的家伙吓住了)。还有消息这个东西,还有ORM这个东西,都去搞搞清楚。想一下它们要解决什么问题,再猜一下他们是怎么实现的。我面试的时候发现,其实大多数优秀的开发者,即使以前没思考过这个问题,让他现场设计一下Hibernate,都能设计得差不多。这说明,这些框架性的东没有什么大不了的。有了基础,你也能设计出来。关键是要去动脑筋想。以上是以服务端开发举例,那么对于客户端,你就去思考事件响应机制是如何工作的(这个我不熟悉,就不再多说了)。还可以深入研究一下JVM的源代码,以及其实现机制,了解一下垃圾回收算法等等。

到了这一步,你就可以应聘Java高级开发了。如果运气好,年薪30万是有可能的。保底也要20万了。

8. 架构。到了这一步,你就算是登堂入室,真正迈入高级开发人员了。这一步,你要思考更多的东西,比如,如何处理高并发,如何应对分布式系统,如何提供更健壮的数据服务。到了这一步,那就没有什么可以参考的,现成的东西了。全靠自己的悟性了。那最后能达到什么高度,就不是我这个层次能点评的了。

编程的世界永远向所有热爱编程的人开放,这是一个自由,平等,共享的世界,我始终是这样坚信的。

希望你能成为一个成功的程序员。祝好。
以上。
====== 下面是广告时间。
知乎专栏
我的知乎专栏,进击的Java新人,为Java新手们准备的教程。专栏里的内容是完全免费的。欢迎大家关注。

相信对于每个人而言,知道编程和学习编程这件事,出发点是不同的。汤哥在北京接触编程的时间是2013年,那个时候还在一个二线城市上大学,还没有这么多各种融资,各种互联网创业的氛围,大家想的更多的是一些线下的:发个传单、开个小店、进个大企业的思维。

第一次感受到互联网神奇的时候是2013年底,一个学长毕业后进入一家互联网企业,一个月收入快1.5万,虽然现在看来不高,但是当时对于一个在二线城市的大学生而言,这样的收入和公司,是可望而不可及的。


当然此时也是我开始了解编程并研究编程的,故事就不多说了,我们来开始正解!

一、什么样子的人适合学习编程?

在大众周围,总是充斥着各种如何学习编程的声音。许多人已经对于是否“每个人都应该学习编程”发表了自己的观点。开句玩笑话:如果那些认为每个人都需要学习编程的作者自己会编程的话,就不会出现程序员紧缺的现象了!

其实编程这个事情,很多人有计算机专业相关和非计算机相关的区分,虽然确实有基础底蕴的差别,但是在努力的共性上还是一致的,有以下几个共性,你可以看一看:

1. 对编程求知欲,喜欢自己动手探索一些数据或者编程的东西。很多人入行都是听说程序员很赚钱就进来了,不过对程序并没有特别的兴趣,这类人在经历了短暂的培训之后,还是可以基本入行,但是他们基本还是在初级阶段,向中级晋升一般都需要主动性。有兴趣,并且有基础的才会比其他人更进一步。

2.善于发现程序问题,并且自己想办法解决。编程最难的一点是找Bug,任何程序出现问题是正常的,关键是你具备发现问题和解决问题的能力。如果你对Bug问题解决能力很强,那么你像优秀程序员的进阶就会很快,

3.对编程学习有持久和自学的耐心。很多人说编程跟武功一样,一日不练,武功全废。不能光凭借一时间的兴趣,简单的玩一下,然后问题很多,就问人。这种学习的过程是不科学的,问是可以的,但是最好需要有基本的解决。

上面说的是一些通过习惯,有了上面的基础,然后再有英语基础、数学还不错、还是计算机专业,那就非常完美了。

二、编程语言有哪些?到底Python作为编程入门语言合适吗?

如果你计划开发软件、硬件、甚至操作系统,那么你或许想学习C语言。C语言刚出现的时候是一种伟大的语言,因为很多其他的语言都直接或间接来源于C语言,其中包括 Java、JavaScript、C++、Python、PHP 和 Per。



编程初学者应该先写 c 还是Java还是Python?C语言。java我建议做第二个学习的语言,java是面向对象的语言,更贴近人的思考,很多底层帮你封装好了,你不用太关注底层实现。

不同语言门槛不同,Python<PHP<JavaScript<Java<C++,C语言是一门基础语言,是其他一些语言的基础,例如MATLAB,Object-C,Lua等.同时也是学习来比较难的语言,达到精通的程度没有3-10年左右很难,C语言没有比较完善的开发框架,他是面前过程的一门语言,讲究算法跟逻辑的."

python的灵魂不在于语言本身,而在于其诸多优秀的库。Python有能运行的伪代码之称,是最适合初学者学习的语言,是程序员的启蒙语言。当初Guido设计Python的时候,就是为了要设计一种简单易用,能适合教学的编程语言。所以Python的语法简洁清晰,并且在语法中强制性地植入了编程风格。

还有一些其他的好评如下:

接近英语的简单语法;
开发环境简单,能打字就能写代码;
众多的第三方库;
解释执行,不需要编译;
跨平台,方便移植;

python是现代语言,具有足够的抽象性,适合教学一些纯数据结构、算法的抽象知识。此外,Python的许多思想都能适用于其他主流的编程语言。因此学通Python,有助于你掌握Java,C#, C++, C等主流的工业编程语言。

结论是:作为首选语言没有问题,其他语言还得学。

没有最好的语言,只有最合适的语言。

没有糟糕的语言,只有糟糕的程序员。

没有一种语言是万能的,只会一种语言是万万不能的。

用什么语言不重要,最重要的是效率:开发效率和执行效率。

不过最后,我想告诉大家。第一门编程语言的学习过程永远是痛苦的。选择Python尽管可以让这个过程变得轻松一些,但是你仍然得克服一系列困难。

做为一个程序员,是应该去选取不同思路的语言去学习的,而且当然要选择最有代表性的语言,在编程的世界里,主流的思路其实就两种,一是结构化编程,一是函数化编程,面向对象只是结构化编程进化的一个阶段而已,其他各种各样的思路大多数是这两个的分支。

对于非程序员来说,码代码是用来解决问题的,不用纠结底层的东西,能短平快解决问题才是最关键。

三、现在都有哪些人在学Python,为什么学?

目前在很多行业中都在越来越多的应用Python,这也是很多行业学习Python的原因,Python主要的应用领域有哪些呢?我们来看一看:


目前来学的人群分为以下几类:

第一类:入行编程新手:大学刚毕业或者其他行业转岗,想从事编程开发的工作,目前认为Python比较火,想入行;

第二类:Linux系统运维人员:Linux运维以繁杂著称,对人员系统掌握知识的能力要求非常高,那么也就需要一个编程语言能解决自动化的问题,Python开发运维工作是首选,Python运维工资的薪资普遍比Linux运维人员的工资高。

第三类:做数据分析或者人工智能:不管是常见的大数据分析或者一般的金融分析、科学分析都比较大程度的应用了数据分析,人工智能的一些常见应用也使用了Python的一些技术。

第四类:在职程序员转Python开发:平常只关注div+css这些页面技术,很多时候其实需要与后端开发人员进行交互的,现在有很多Java程序在转到Python语言,他们都被Python代码的优美和开发效率所折服

第五类:其他:一些工程师以前在做很多SEO优化的时候,苦于不会编程,一些程序上面的问题,得不到解决,只能做做简单的页面优化。 现在学会Python之后,你和我一样都可以编写一些查询收录,排名,自动生成网络地图的程序,解决棘手的SEO问题

当然,这里总结的只是常见的一些情况,关于职业和岗位,之前写过一个内容介绍:

四、学习Python编程,我们应该如何学?大概的学习内容包括哪些?

我想可能很多网友和我有着相似的学习背景,学习Python会有以下的问题:

从零开始,不知道如何下手开始学?

被基本的数据结构、设计模式等计算机常识问题难住
看了一阵,前面的又忘记了
遇到问题不知道怎么如何寻找解决方案

学习Python编程语言,动手实践是一件非常愉快的事情,遇到了程序上的问题,经常自己思考研究,从而解决问题,自己的技术水平和解决问题的能力都得到了大大的提升。

但是,如果是你零基础起步,自己一点点照着书本学习,遇到困难,得不到解决,长期下去,会对学习编程产生厌恶,最终放弃学习。

经历这个Python后,我认为像Python这样的语言确实有学习的必要,因此把我的Python学习笔记贴出来,不过前面部分写的过于基础了。

1、第一个Python脚本: hello world 2、Python语言与传统的C++/Java语言显著不同的地方 3、Python语言的控制结构 4、变量声明和定义 5、函数 6、列表、字典、元组 7、字符串处理 8、面向对象编程:封装、继承、虚拟函数、接口、多继承、模板 9、面向对象编程:异常处理

最后给想学习Python编程的朋友,一些小建议:

1、先买一本自学用的Python书籍,不要看电子书。选择合适的教程。有些书很经典,但未必适合你,书籍有:《Python核心编程》《Python基础编程》《Python学习手册》《Head First Python》《Python编程入门》《Python开发实战》《Python编程初学者指南》。

2.对Python基础数据类型有一个了解,学会各种类型的操作方法,了解函数和类的概念。

3、学会查官方文档,用好搜索引擎和开发者社区。不但要学写代码,还要学会看代码,更要会调试代码。读懂你自己程序的报错信息。再去找些github上的程序,读懂别人的代码。

4、动手实践,找小项目练习。前面几个阶段要快,都是为这个阶段做铺垫,,这时可能遇到各种困难,这时回头复习参考书上对应知识点,同时去谷歌百度,如果自己写不出来也可以参考别人的项目去做点事情,过一阵子对python了解后自己就知道该学啥了,是web开发,还是爬虫,或者数据分析,机器学习。

5.除了学习编程语言,也兼顾补一点计算机基础,和英语。



以上是关于学习的一个建议,欢迎大家拍砖和讨论。

感觉写的好,对你有帮助,就点个赞呗,别光只收藏哈.~( ̄▽ ̄)~

————————

你想更深入了解学习Python知识体系,你可以看一下我们花费了一个多月整理了上百小时的几百个知识点体系内容:

【超全整理】《Python自动化全能开发从入门到精通》笔记全放送