洗衣服的时间床上躺了会,结果不小心眯了眼,就这样一直从七点半睡到11点多。
微信传来消息:
大概了解了一下这背后的原因,在感慨这无奈的现实又一次伤害了我幼小的心灵、让我对现实世界爱情的期望值又一次降低的同时,我也察觉到:
这是从去年到现在遇到的第四个类似的问题了。
看来为了以防以后遇到类似问题再解释半天,有必要做个伪教程了。
一般来说,问这个问题的有两种情况:一种是生存需求,为了取得更高的薪资水平;一种是工作需求,需要用程序来进行数据的处理。
这里我们先来谈第二种需求,在工作中为了进减少数据处理过程中的重复性工作,而决定学习编程的。
场景1:A是某大学考古系的体质人类学研究生,在进行数字测量时,获取了一系列三维模型的空间坐标。接下来,他要通过对坐标进行一系列运算以获取满足科研需求的数据,如颅骨的宽、高,眼眶的宽,以及各种指数的计算。
场景2:B是某大学考古学系商周考古的研究生,拿到了一批excel表数据,大概有5000+行,20+列。由于历史原因,这批数据并不规范,比如数值用的是文本格式,还有些重复的条目。他想把这批数据做一个整理,剔除多余的数据,合并某些数据,找出某项记录空白的数据,最后还要对某些条目进行数值的运算和统计。
(为啥用考古举例呢,因为我举例能力缺乏,只能用实际例子替代了......不过具体是谁问我忘了......)
这两种都是针对数据的处理操作。
一般来说,场景A的数值运算的部分,可以用excel解决。excel有一套数据运算的公式编辑系统,可以解决绝大多数涉及到数据运算的问题。
场景B就稍微有一点复杂了。这时候单纯的用excel已经解决不了问题了。这时候我们就需要引入程序语言来解决问题。
在科学研究领域,比较流行的程序语言有python,r,matlab等,上手难度都比较小,其面向的都是非专业程序员的科研工作者。其中python是功能最强大、应用最广泛,在科学研究领域的地位无法撼动,这些年大火的人工智能、机器学习、深度学习,就是以python的实现最为广泛。
python的学习时间依据个人实际情况而定。
如果有程序设计基础的话,快则两天,慢则三五天就可以写些项目跑跑了,主要是熟悉语法结构,细节上的东西用到的时候再查。这里推荐网易云课堂上唐宇迪的《python快速入门》。
如果没有程序设计基础的,会花费比较长的时间。需要指出的是,不要用背诵式的方式在语法细节上纠结太多,通览语法结构的同时跟着写案例,慢慢就熟悉了。这方面推荐网易云课堂赵瑾的《python语法基础》,第二遍的时候可以看上面唐宇迪的那套。
对于python的学习不需要精通,熟悉即可,觉得自己对各种概念有总体上的了解之后就可以进入下一步的学习。
有些人可能会问,怎么还要学?python不是已经学完了嘛?而且我学了之后也没感觉自己能干啥呀?
这个道理么......中国人都是学汉语的,也不是人人都成为作家呀?
语言只是一种最基本的工具而已。
然后有些人浮想联翩之下可能已经崩溃了,仿佛已经看到了浩如烟海的知识海洋在向他招手.....
打住!如果那样的话,python就不会成为一门科学研究领域最流行的语言了,毕竟科学研究领域包罗万向,真正和计算机科学挂钩的只有那么一小丢丢,99.999%的不可能接受与自己领域跨度太大又复杂的事物的 。
所以这里就谈到了python除了语法简单之外的第二个特性,就是在科学研究领域积累下来的大量优质扩展库,英文名package。
扩展库是别人写好的用于实现某种功能的,能够让python通过简短的代码调用的代码集合。
(如果你对python的基本语法还有印象的话,应该会理解它的本质其实是面向对象方式封装的一些类与函数)
需要熟悉的库有两个numpy,和pandas。后者是对前者的更高级的封装,简化了操作,并且提供了一些常用的数据操作模型。
另外还有数据可视化(也就是制作图表)的库也可以熟悉一下,matplotlib和seaborn。
在对库的学习中,可以采用先通览再挑取有针对性的学习的方法。这方面推荐的依然是是网易公开课唐宇迪的《python数据科学必备库》。不过,有点略贵,可以使用其它同类课堂代替。
到这里,python的学习基本就告一段落了。事实上,python作为一门“图灵完备”的语言,可以实现其它语言的所有功能。下面提供了一些各个领域常用的python库:
https://www.zhihu.com/question/24590883/answer/92420471?utm_source=com.ucmobile&utm_medium=social
接下来谈前面所说的第一种需求,为了生存问题,为了获得更好的薪资水平而转行的。
首先我们要弄清楚一个问题:
这世界上所有的付出与回报都基本处于平衡状态而存在的。
程序员的薪资水平在各行业中处于较高水平,本质上在于有效工作量的积累。
纯粹的持续性脑力劳动与体力劳动是最耗人心神的职业。而程序员恰好属于前一种。而脑力与体力结合的,偶尔动动脑,偶尔出个力,大部分时间晃悠悠的,其实才是性价比最高的职业。
这里说的脑力劳动其和智商没有太大关系,而是一种程序性的逻辑思维。有点像流水线上的工人,只不过把形象化的体力劳动转变成了抽象化的脑力劳动。所以对程序员有一个很形象的称呼,叫“码农”。一味的付出脑力和一味的付出体力从本质上都是一种健康透支。
而程序员薪资的较高水平,无非是由流水线工人的劳动强度和人不喜持续性动脑的特征决定的。
在一个成熟的社会运作模式下,合法合道德的前提下,所有的个体基本保持着相同的财富积累能力。能够促成这种能力变化的唯一途径,就是付出一些东西来换取另一些东西。
可能有很多人觉得程序员高大上,然而,我国的程序员,从来不是什么贵族职业。其中的99%都出身与社会下层,通俗点说,穷X更多。所以才会从事这类行业。即便是科班出身的,家庭情况较好的也转行居多。之前的单位碰到俩计算机专业的,都是觉得太累转行了,其中有个家里比较宽裕的,对曰:“太累了给钱我都不干”......
先把程序员扯下神坛,然后谈谈具体的薪资水平。
以php方向的应届毕业生为例,长春月薪资在3500-4000左右,北京在8500-10000左右。(当时查到这里,我有点知道东北为啥不能崛起了......)
可以看到程序员的薪资严重受到经济发展水平的制约。经济发展水平高的地方需求大,薪资高,程序员水平也高,反之...自己理解。
对于三年工作经验来说,努力的话,北上广等一二线城市可以拿到月薪2w+,但是大多数应该在1w5+徘徊。抛去基本生活支出与发展支出而言,这种薪资水平的概念在于可以10年在长春买个100+平的别墅区住宅(100w),4年可以在三四线小县城买个100平普通居民住宅(30-40w)。
即便现在有高龄高水平程序员的薪资已经达到年薪30W上探40W的地步,但记住,那是极少数,极少数。以行业平均薪资而论,2017年是1w1左右。毕竟在每个行业里,相对不那么出色的不那么努力的都是占据了大部分。
个人认为,程序员的优势其实在于夫妻双方都是程序员的话,可以早早还完房贷,积累一笔还算可观的财富,在享受生活的同时,悠然规划人生的下一步。而对于家庭一方是程序员的情况来说,并没有什么明显的优势,也就是能比别人早那么几年还完房贷,依然要面临高龄带来的职业瓶颈,以及一二线城市扎根而带来的高昂生活成本(三四线薪资优势不明显)。
(插一句,所以现在夫妻程序员家庭很多......)
当然世界上本就不存在安安稳稳什么都不操心只要平均的智商平均的努力程度就能够实现的人生跨越。不过既然是谈职业发展,显然谈平均水平更有参考意义。
然后谈谈非相关专业转行程序员面临的问题。
这里将这些待转行人群分为三类:
1.理工类;
2.学数学的文科类;
3.不学数学的文科。
艺术体育类不了解,不做评价。
转行难度3>2>1。总体上符合一个趋势,那就是原先你所从事的行业知识体系越复杂、逻辑性越强,需要的脑力劳动越多,你转行的难度越低。
没有基础的最理想的自然是报培训班,普遍周期在3各个月——半年左右。每天基本是满课。不要指望你自己从培训班出来有多高的知识水平,培训班能做的就是帮你建立起还算系统的知识架构,理解什么就不必了,基本就是填鸭式的教育。但这是性价比最高的做法,一方面,自学的话毫无头绪,另一方面,有些培训班也相当不错,有些还有推荐就业之类。
当然,即便从培训机构学习出来,如果不保持良好的学习能力的话,薪资水平提升的也会很慢,甚至在其有限的职业生涯里薪资峰值能否达到2w都是个问题。
也可以自学。事实上自学的难度相当之大,抛去自制力这种主观性因素不谈,漫无头绪四处寻找解决问题的途径就会占用大量的时间。当然,认识有一个自学转行成功的女生,据说闭门半年,天天方便面,然后找到了一份web开发的实习工作,现在过的挺不错。不过这种人本身就是万中无一有大毅力的人,请勿用来参照自身。
虽说可以自学,但是强烈不建议自学。
怎么判断自己是不适合呢,如果你有过“我有一个很好的想法就差一个程序员”这种类似想法的话,那么相信我,你肯定是不适合自学的。
然后谈谈转行的领域。
事实上,科班出身的优势在这里就凸现了出来。相关科班出身有本科三年看似无用的内功修炼,在转行时适应和进步的速度都很快。
当然我们这里谈的是非科班出身。既然为获得更高标准的薪资转行,那就必须找准几个发展前途好的行业。
个人了解的程序员相关的前途好的行业有这么积累:
1.web开发。简单理解就是网络程序。
2.游戏引擎程序。如u3d和ue4引擎程序员。
3.人工智能。比较火的是机器学习里的深度学习。
4.数据挖掘。(大)数据分析师。
这些东西具体是做什么就不做解释了,百度即可。
后三者的数学基础要求高一点,大学不学数学的......要付出相当的努力与代价。
入门难度上来说以web开发领域比较低,虽然知识体量比较大,但涉及不到太过复杂的数学知识,基本上初高中数学水平就能解决问题。
web程序可以理解为跑在浏览器上的程序,而一般普通人认知中的都是跑在windows平台上的程序。(这里其实就谈到了web程序跨平台的特点,因为现代主流的操作系统windowd、mac、linux包括android都有浏览器。)
web开发的领域分为前端与后端。
前端主要负责页面设计与页面动态效果,包括基础语言html、css、javascript,以及流行前端框架bootstrap、jquery、vue、react、angular,当然现在还包括能实现后端功能的node.js以及express、koa(选一种)等node.js框架。
后端负责业务逻辑和与底层数据库进行焦糊,后端语言有php、java、python(选一种)等,流行框架有yii,larave(选一种)l等,当然了,还得学数据库语言mysql。
这些是比较常用的知识。针对性的任务的话还需要针对性学习,比如移动开发可以选择mui、hui、mintui,web 3D的话还需要去了解图形学和webgl以及各种webgl框架。
这方面可以推荐网易公开课的两门免费课程,复习的时候过了下,质量不错(江哥的尤其棒)。
理论上前后端框架都可以用对应的前后端语言来实现,不过那样效率极其低下。另外,指望新人用纯语言实现也不太可能。
框架是啥玩意儿呢,可以理解用于实现为约定俗成的设计模式的工具包,用来加速开发,避免招一辆车得先研究轮子怎么造的问题。
在这个过程中,你还会学到相关的计算机系统和计算机网络的基础知识。
说的有点多了,总结一下:
有数学基础以上四个大分支可以任意选,薪资水平都不错,无数学基础的话,选项1比较合适。
当然,转行穷三年。
另外,转行始终是一件很需要魄力与努力的事情。而且这种努力,可不是说那种早八晚五的努力。