什么都不懂的小白怎么学python
学计算机可以从事哪些职业
很多人入门IT界都是从什么都不懂走过来的,但是他们都是踏着一个一个的问题成长起来的,比如经常问到的问题有怎么自学python、零基础如何学好python等等诸多问题,那么对于一个什么都不懂的小白,我觉得了解以下内容,就可以入门了。
1、相关概念介绍
首先,要知道python有两个版本,python2 和 python3。他们之间的区别就好比北京话和普通话之间的区别,只有少数语法不同。如果没有特别要求,建议一律从python3开始学,2你就当作不存在。
毕竟更新的版本往往弥补了原先的一些问题和不足,而且也是大势所趋。真要学习2的话基本上也是为了维护现有的项目,对于小白来说那就是很久以后的事情了。
第二,python的语言特性。零基础的话选择python是个很好的选择,因为它很快!人生苦短我用python! 比如,在绝大多数的语言里面,变量是要先声明类型才能使用的:
a是一个变量!这个变量是整数型的!
我们现在把3赋值给变量a!
好的没有问题。但是如果把3.7赋值给a,a还是会等于3,因为它是整数变量。是不是很反人类?但是这样也有它的好处,非常的严谨。在python里面就不用考虑这些乱七八糟的东西,赋值给a的是啥就算啥,无论是整数还是小数还是其他乱七八糟的结构。当然这样也有坏处,首先编译器判断你是个什么东西就挺花时间的,这也是python慢的原因之一。
等等!你刚刚还说人家很快来着!
事实上,python的快指的是写起来快,因为不用考虑这些乱七八糟的定义声明和边界条件。但是作为代价,它跑起来很慢。所以实现一个算法的时候,开发人员往往会先用python写一遍,尽快得到一个结果;如果结果不错,再用c重写一遍让它跑起来也很快。
python快还有另外一个原因,它有着大量优秀的第三方库。知乎上经常推送一些什么十行搞定深度学习之类的头条新闻,就是利用这些第三方库。那些被别人写过一遍又一遍的程序直接拿过来用是一件很爽的事情。
2、环境配置
上文说到python有着大量的第三方库,而且你不可能不用,因此管理这些库就成了一个问题;可能python2和3之间还要来回切换,两个语言之间可能也会打架。好的环境配置会把这些问题都解决掉——那就是Anaconda。
Anaconda是个什么东西自己去百度,目前你只要知道它能很好地管理python的开发环境而且非装不可就行了。建议电脑预留1G硬盘容量。如果容量不足的话可以用Miniconda,是同一个东西,Anaconda大一点是因为自己带了很多私货。如果Miniconda都装不了就不要学了,先攒钱买个新电脑吧。
如果是以程序员为职业目标或者有其他语言需求的,建议下个地表最强IDE Visual Studio,里面可以装Anaconda,预留20G容量。正如Anaconda管理着python的环境一样,VS可以管理着各种语言的环境,还能帮忙装一些框架,总之没坏处的。只是想学个python玩玩的就不必了,直接装就行。
如果你已经在电脑里装了python,建议把它删了,Anaconda里面自己带个python。记得配置环境变量,具体自己百度。
3、编辑器的选择
如果在前面一步装了VS,那用VS本身就可以了,但是我不太建议。VS本身的功能很强大,但是对于初学者来说可能有些太过于繁杂了,本身学习使用VS可能也需要一些成本,以下几个是我比较推荐的编辑器,具体怎么配置环境自己查:
- PyCharm
据说是python最好的IDE了,好评率99%。如果实在没什么别的需求就选它了。
- VS Code
和VS不是一个东西,这是个轻量级的编辑器,和PyCharm差别不大,我用起来比较顺手,但是编译起来比较慢。如果断点调试(就是暂停运行查看程序状态)有bug可能是没有装pyqt。
- Jupyter
Anaconda自带,它比较特殊,是一个交互式的编辑器,感觉像是写作一样写代码,也是比较好用的。建议了解一下,喜不喜欢见仁见智了。
- sublime
本身是个文本编辑器,写python的话还需要配置一下,比较折腾,不像前面几个拿来就能用,因此不是很推荐。但是我个人很喜欢它那个性冷淡的风格。
4、基本程序思想
虽然我建议边练边学,但是基本的概念还是要有的,不然你第一个程序都写不出来。一些简单的算法伪代码要能看懂,起码知道for循环while循环if-else这些东西,常用的数据结构比如链表数组字典得知道。
不明白的话随便找个教程网站,看上一个小时就明白了。面向对象的思想明白最好,实在不明白也不耽误。好啦,到这一步你就已经可以开始写你的第一个程序啦!不知道写什么的话有几个推荐:
会算法的话可以去刷LeetCode,但是我个人觉得对新人比较难,建议用别的语言刷过的人再去尝试;不会算法可以去Hackrank,这个网站有一个30Days for python一共一百来道题,刷个十天半个月也就入门了。
喜欢琢磨数学的话可以去ProjectEuler,提供几百道适合编程解决的数学题,做个三五十道就入门了应该。如果遇到困难就百度谷歌,你掉进去的坑都是别人踩过不知道多少遍的,总能解决的。
到了这一步,也许你写个python程序还是有些费劲,但是你真的已经会了。起码在想用python完成一个任务的时候,语言不再是你的阻碍。
对于怎么自学python这个问题,本人建议自学是非常浪费时间和精力的事情,毕竟你对这个什么都不太懂,学不会相当打击自信心。如果你的目标是就业,最好跟着老师学习,从0基础开始到项目实战有老师带领能够少走很多弯路。
学计算机可以从事哪些职业
计算机专业的学生毕业后可在交通系统各单位、各类计算机专业化公司、广告设计制作公司、汽车营销技术服务等单位从事IT行业工作。可从事的岗位有:软件工程师、数据库管理专业、游戏与动漫设计师、SEO网络优化专员等。
计算机专业可从事的职业
硬件工程师
指在计算机领域里,需要接触到电路底层的工程师。
实际上在电气领域,在电方向上分为强电和弱电,强电指高压传输,电动机等高电流作为能源动力领域,弱电就是指微电子方向的信息处理领域。
计算机硬件工程师的工作范围在弱电,主要内容主要有PCB设计(印制电路板),ic(芯片)设计,FPGA工程师。
往上还包括涉及针对特定硬件做系统开发维护的嵌入式工程。
PCB工程师、FPGA工程师、IC工程师
PCB工程师的工作就是设计一个高速稳健的交通网络,把电路板上各个功能不同的模块连接起来。
FPGA全称叫现场可编程逻辑阵列,就是理解为一个可以编程的硬件。
传统意义上的集成电路是定制化的,针对特定的需求设计特定的电路板。
而FPGA可以通过熔断机制来动态修改电路的结构,达到动态编程的效果。
简单点说,针对一块FPGA,你可以把它烧制成视频编码器,也可以烧制成无线wifi通信模块。
虽然这些算法都可以通过软件实现,但是硬件实现的效果算法成本更低。
IC工程师就是设计一个高效运算的大脑,涉及到流水线机制,超频,最重要的是解决纳米级别下电流扰动问题。
最大的制约因素也是材料工艺问题。
以上三种岗位其实在现代学术分支类还是属于EE下的子类,事实上从事这个方向的人也大部分是学习电子电路工程的同学。
从技能需求来看,要求数学知识扎实,逻辑严密,电子电路知识更多,类似工具反而并不是显得那么重要。
从未来的发展前景来看,随着智能硬件物联网的推广,会有一波大红利。
桌面程序工程师
传统的桌面应用软件类似于office,浏览器等在PC端上运行的软件。
主流的开发框架有Qt,MFC,NET。
现在还比较强势的一些桌面应用领域就是微软的office和桌面游戏公司。
以及基于微软的C#的开发应用,基于QT的C++开发应用。
网络应用工程师
从Google发迹以来,基本上所有新兴的巨无霸公司,Facebook,BAT,Amazon都是依赖于互联网的发展,依赖于这群互联网应用工程师。
同时他们也就是在网上自称为码农的这个群体。
他们这个群体应该能占到计算机领域70%以上的研发人员。
前端开发
广义的前端就是指呈现在用户视觉的领域,直接可以让用户感受到的开发。
往下会细分为Web,Andoroid,ios。
Web前端(h5前端)
web前端指在浏览器(包括手机和pc浏览器,或者是webview控件,甚至于搭载JS引擎的任意环境)上运行的一系列应用。
传统意义上的前端主要是指网页,html,css,js那一套。
这个方向是这几年的大热门,同时,更新快速。
两年前还是JQuery的天下,现在你不知道Vue,Angular都不好意思打招呼。
同时由于机器性能的提高和V8引擎的强劲有力,脚本语言的另一个优点就是无须编译运行。
导致了它可以实现一个其他语言无法做到的事情---动态更新。
可以在app不发版的情况下动态的大幅度更改它,进一步的增加了JS的需求量。
薪资比起前两年来看涨了不少,而且市场需求量也很大,基本上任何应用都没有完全脱离web的框架内。
门槛也不算高,但是往下深入一样会有很多东西要学。
Android
Android是一个基于linux内核开发的开放源代码移动操作系统,由Google成立的Open Handset Alliance(OHA,开放手持设备联盟)持续领导与开发,主要设计用于触屏移动设备如智能手机和平板电脑。
Android的市场份额在四分之三以上,ios占了大概五分之一。
虽然Android和ios市场占有率相差悬殊,但是Android工程师和ios工程师基本上能维持相同的人数,所以你如果想从事移动端开发,就业市场来看的话,没有很大的区别。
iOS
是苹果公司为移动设备所开发的封闭源代码操作系统,所支持的设备包括 iPhone、iPod touch 和iPad。
技术层面来看两个其实比较像,主要的区别其实是生态圈的比较。
iOS的封闭特性,相对来说被发现的漏洞少。
相应来说,可能android的入门成本门槛比较低,java相对于Object-C,swift来说还是比较流行的。
同时,相对于iOS(mac电脑+苹果手机+一年100刀的开发者账号)的起始1.5W的投入来看,可能android的竞争会更激烈一些。
同时由于Android的权限开放性,它会有很多可以hack的地方,针对Android的木马病毒(360管家)很多,你要考虑到的东西会很多,不过目前来看,Android的每次发版,安全性也越来越好,权限管理也越来越规范,以后会越来越好。
后端开发
后端开发指的是,在为前端提供数据支撑的一个大的总类,包括数据库,业务逻辑处理,数据处理等。
主要的开发语言分两个方向编译型语言,Java,C/C++等,它的特点就是运行效率高,相同机器配置的情况下能支撑更大的访问量,适用于超高并发度,比方说淘宝后台是java,网易游戏腾讯游戏是C++。
另一种就是以php、python等解释性语言,它们的特点就是开发效率高,无需编译,写完就能运行,主要针对一些运算量不大的中小型网站,比如说你的个人博客,管理后台。
测试工程师
一个产品或者一个新的功能需要上线,必须要经过完备的测试,测试工程师目前其实有两种:
一种是纯测试,另一种是它的升级版测试开发工程师,它能在测试的过程的顺手把小bug改了而不需要返工。
好的测试开发工程师工资也可以比做开发的工资高。
而且不能小看测试这个东西,不要以为你只会点点鼠标看看对不对这么简单,合格的测试工程师需要熟悉各种测试工具,能自己写测试脚本,能找到bug,而且还能知道为什么会出现bug。
这个工种一般也都是大公司才会配置的,对于小公司来说,一般就是开发人员自己也是自己的测试人员。
架构师
从这里往后,已经算是程序员界的高富帅了,可以称的上是半个科学家。
架构师的工作差不多已经基本脱离代码了,它的主要工具从VIM,EClipse变成了word,ppt。
它主要觉得技术选型,针对大容量高并发的问题制定解决方案。
基本上它们都是由后台工程师升级打怪升上来的,业界也有前端工程师升级为了CTO做架构的,但是毕竟还是少数,node的效率还是差了很多。
深度学习
数据挖掘会有一个调整参数的过程,而在深度学习领域,它会添加一个正向反馈,让你的参数由机器自动调整,让它计算的结果去自动匹配实际的结果。
这个就是所谓的机器学习,就是把人为调参的过程让机器自动完成。
另外,人工智能,深度学习,数据挖掘会存在一定程度上的重合。
真正的难点是在各种降维算法,概率论,退火等数学领域。
所有也有他们算是半个科学家这样的说法。
不过就在最近,各行各业都开始提倡摆摊经济,听说有程序员卖煎饼果子月入已经三四万了!
计算机专业发展趋势
市场经济的发展、计算机应用的家庭化、普及化,信息产业的规模化,推动了计算机技术人才市场的发展,特别是加入世贸组织以后,计算机应用人才更是供不应求。随着外包的发展,需求加大。
一个让人大跌眼镜的结论:有报道称2010年计算机专业在中国的失业率排在所有专业首位,中国计算机人才市场严重的供大于求。按照网上流传的《大学生就业蓝皮书》,计算机相关专业被列为高职失业率第一、本科失业率第二专业。
事实是:“从另外一个角度看问题,几乎找不到一所学校没有计算机专业,传统计算机教学都偏基础偏理论,为什么后来又细分出软件学院?就是看到计算机本科教育有偏颇,计算机学科不能学纯粹理论搞研究。”