首要排除Python,光动态语言一个理由,就已然万劫不复了。无论有多少所说优良,在这一个缺点面前,都显出微不足道。
动态语言是为了七八十年代的古董计算机而设计的,那个年代的电脑操作系统还不到1MB,例如MS-Dos,Unix,Amiga等,因此绝大都数动态语言都是古董语言。Python在其中算是相对“青年”的,但亦是30年前的技术了。
除了Lua,Julia等极少许90后之外,绝大都数动态语言都是没法操作线程的。由于那个年代的CPU是单核的,操作系统不仅是单线程的,有些系统乃至是单进程的。
虽而后来非常多动态语言加入了协程,但其实还是只能操作一个线程的,连“治标”的问题都没能完全处理,更别说“治本”了。非常多初学者以为这是“快”与“慢”的问题,会随着硬件性能提高而逐步改善,然而恰恰相反,硬件性能越提高,与动态语言越脱节。由于这些动态语言能有效发挥的CPU性能,始终停留在单线程的时代。
当时的重点储存介质是软盘,便是那种正方形的塑料小卡片,最大容量仅有1.44MB,为了能够装在软盘里面,所有动态语言的语句都尤其简短。用今天Python圈儿里的话说,当时几乎所有的编程语言,全都非常“优雅”。
后来硬盘容量变大,windows诞生,计算机完全进入图形化时代,程序变得越来越庞大,一个程序从本来的几KB,瞬间增大到几十几百MB,乃至GB。
从此,为了编写kb级项目而设计出来的动态语言,越来越难以胜任软件的编写任务,被视为落后技术,除了JS之外,几乎所有重点工作都被静态语言取代,一大半动态语言从此灭绝了,活下来的动态语言则只用来编写脚本,才有了“工程语言”和”脚本语言”一说。
动态语言只适合写非常小的东西,项目越小,写起来就越爽,越大就越抓狂,且非常难以守护。网上各样不到一百行代码的“小项目”来证明Python怎样怎样优雅,而你去工作之后会发掘,这般的“小项目”今天只存在于三个地区。
1,培训公司的教育计划中
2,各样教程的案例中
3,粉丝们相互洗脑的言论中
实质生产中,你见到的“小项目”代码行数都是以万为单位的,倘若对Python代码进行封装的话,守护难度几乎是在挑战人类耐性的极限,无时无刻不抓狂,当然,亦确实有个别运用Python写成的“大项目”,但无一例外,都是靠海量注释硬磨出来的。注释的行数比代码的行数要多得多。此时候就已然不是“写代码加注释”,而是“写注释加代码”了,编写体验就像是在写一部”超长篇中文说明书,其中掺杂着少量代码”,但你不把“长篇说明书”看完,这些曾经由自己亲手写出的“少量代码”,就死活看不懂。
况且写完代码,确定不必须修改之后,还有一步工作要做,便是把哪些浩如烟海的注释,删掉绝大部分。否则注释实在太多,会垫高运行成本,一个耗费海量精力编写的项目,刚写完时超过1GB,注释删光之后,还剩100多MB,内心里数不清的草泥马。
另一三个都是不错的选取,它们都是静态语言。若想研发一个中型以上的项目,况且期盼能够有效守护的话。运用静态语言来研发,才可让你避免抓狂。
就像铁锹与挖掘机,倘若给宠物挖个厕所,挖掘机显出既难学又难用,一学便是两年起步,考一堆资格证,还各样不熟悉。铁锹简直太棒了,分分钟秒懂,抡起来就开挖。挖掘机还没热好车,用铁锹三五下就挖好了。铁锹显出各方面都很完美,挖掘机简直一无是处。但倘若你想挖一座水坝,并指望长时间靠这门手艺混饭吃,还是先去中国山东找蓝翔,把“既难学又难用的挖掘机”学好再说吧。
当然,“不适合”与“不可”是两回事。毕竟仅凭双手都能磊出万里长城,用铁锹又怎会挖不出水坝?只要有愚公移山的精神,动态语言当然亦能写出大型程序,只要玩命加注释就能够了。可问题就在于,仅为了“简单易学”这么个优点,而在漫长的职业生涯中反复一直的“移山”,值吗?
既然说Python,当然要提一下人工智能,这确实是Python最大的存在价值。在熟悉把握一门静态语言的前提下,确实能够抽时间学一下。但倘若你连一门静态语言都还没把握,只学了学Python便指望能够去搞人工智能研发,那真是想太多了,由于现实状况是一环扣一环的。人工智能水坝很高端,但你得先把水坝挖出来才行,否则用卷积神经网络能存水嘛?人工智能就像一件太空服,确实是高级货,但要发展航天,必须优先思虑的问题,却是怎样造出一枚运载火箭?怎样造出飞船?怎样培养宇航员?当一切要求完备之后,才适合思虑太空服的问题,否则便是本末倒置。若连宇航员都还无,太空服给谁穿?无飞船,又何来宇航员?无运载火箭,飞船又怎么上天?
既然说完了“为么要用挖掘机,而排除铁锹”的问题,下面就该说说“挖掘机技术哪家强”了。
三门静态语言的语法是高度类似的,尤其是Java和C#,简直是太像了,学会其中一门,另一门你就会了八九成(只论语法部分)。完全能够在几天之内,从一门语言过渡到另一一门语言。因此若想同期学会三门语言,其实一点都不难,但我不意见这般做,由于这基本是在浪费时间。
由于“学会语言”和“胜任工作”之间,有着一道巨大的鸿沟。几乎无多少回头路能够走。例如我一起始是用Java做web研发的,因为工作必须,我必须学会“用C#做游戏”。凭借Java的底子,我只用了两三天的时间,就学会了C#语言。之后我用了一个星期上下的时间,学会了用C#做web研发。可是,当我决定运用C#转向游戏研发的时候,我花费了两年的时间学习,才勉强做出一个很小的项目。
用Java做Web研发,转换到用C#做web研发,就像从右手写字,转换为左手写字。并无新的知识要学,仅仅是改变了握笔的习惯。虽然很容易,但却是在浪费时间。由于若要写字,只用一只手就够了。
之后,我试着学习用C#做游戏,就像从写字,转换到画画。握笔的习惯无变,但所学的知识却完全区别了。因此即便我用了两年,但时间并无丝毫浪费,由于我每日都在学习“之前不懂的知识”。
因此选取语言的关键,并不在于语言本身,而在于你要先想清楚,自己准备从事哪个行业。换一门语言非常容易。而换一个行业,就不是那样容易了。
在这三门静态语言其中,Java的用户数量必定是最多的,岗位数量亦是最多的,但竞争压力亦是最大的。由于Java的就业岗位,几乎全都集中在互联网行业,重点便是用ssh做web研发,安卓项目亦有有些,但非常少,基本能够忽略。好的方面是,在互联网行业是最大主流,只要不挑肥拣瘦,找工作不是问题,况且在很长一段时间内,这种状况都应该不会有太大变化。坏的方面是,严重依赖互联网行业,只要选了Java,就必要一门心思做网站,由于Java在其他行业的岗位数接近于零。互联网高速增长,Java的雪球亦就越滚越大。但倘若哪天互联网行业不行了,Java就要做好陪葬的准备了,转型到其他行业的可能性微乎其微。这亦是我转而去学C#的原由,基本目的便是为了在“编程”和“做网站”之间实现解耦。让“编程”能够做到更加多的事情,否则你怎样证明自己是个程序员,而不是个“网站制作员”?Java的亲爹“日机构”还活着的时候,个人是个铁杆Java粉,毕业后就找了份ssh增删查改的工作,一干便是七八年,但后来Java被甲骨文这个拿数据库当幌子,冒充IT机构的律师事务所收购之后,就起始变得不思进取了。除了整天上法院,在法律战方面大显神威之外,就只能蹭互联网的热度保持增长。这么数年来,始终没法在互联网之外的行业,拓展出哪怕一丁点儿用途。Java是我运用时间最长的语言,我从高中时代就起始学习它了,还专门由于它,才决定报考计算机专业。我原以为自己会写一生Java。可离开它之后,我却起始反问自己”当初为么无早点离开?”。
C#是我的新欢,我实在尤其爱好它,最少日前是这般的。最重要的原由是,它能做的工作比Java多非常多,PC设备集成,游戏开发,ios和安卓研发,串口设备通信,gis,工业掌控,ao与erp系统,以及web研发全能做,况且学习效率和研发效率都很高。倘若期盼用最小的学习成本,得到最大的技术报答,它必定便是最佳选取。因为曾经不跨平台,错失了互联网崛起的机会,因此工作岗位并不像Java那样,全都集中在互联网行业,而是分布在各行各业。缺点是岗位太分散,岗位其实非常多,只比Java略少有些,但分布到各行各业之后,就显出没什么存在感了,在每一个行业都不是老大,尤其在互联网行业非常弱势,亦许连Java的零头都不到。C#的名字亦欠好,总让人联想到C++,以为它是门很古老的语言,其实C#是个00后,论辈分和Go语言差不多,尚处在“小屁孩”周期,岗位数量能有如此规模,其实已然很了不起了。优点是,万金油,哪个行业都能干,又不依赖其中任何一个行业。倘若哪天互联网行业不行了,很容易转型到各样行业。另一在游戏研发方面是主流,Unity,寒霜3,CE5等众多游戏引擎,均运用C#研发游戏。近几年在互联网方面的改进亦还不错,有了.NetCore,最终能够跨平台了。优点是性能非常棒,是平常的后端框架中速度最快的,详细可参照TechEmpower的性能测试。缺点是.NetCore出来的太晚了,尽管有技术优良,但市场已然被Java占的稳稳的了,因此短期内Java必然还是独一的主流。不外对我来讲无所说,能做网站的语言多如狗。“啥都能干”才是我选C#的理由。我想我可能会写一生C#。。。。。吧?
C++的牛逼之处,便是跑的尤其快,况且理论上能做的事情比C#更加多。尴尬之处便是无论做什么,都不可只会写C++,还必须一堆专业知识协同运用,语言层面和应用层面,得掰开学。例如市面上C++的工作,大部分要和各样设备打交道。除了会写代码之外,还要懂电子电路,电气电磁,仪器仪表之类的知识。我大学的朋友们,学生时代大部分都倾向于C++,学霸们专注ogre,次优生善于opencv,学渣们亦多少会点MFC和QT,结果一找工作,无论学霸还是学渣,全都跪了。要么是变压器厂的设备研发岗位,要么是蓄电池厂的技术开发分部,乃至还有造直升机的军工企业,全都需求懂设备。难得有个金蝶软件机构,招聘财务软件研发的工作,不需求懂设备,但却需求数学能力,必须会微积分。十几号朋友排着队去了,结果人家当下招了两个,几天之后又辞退了一个,最后只留了一个。剩下的朋友几乎全都改行了,有的干了营销,有的开了饭馆。。。自己没走这个路子,再多的亦就不敢乱说了。
我个人意见,
想长时间在互联网行业混下去,且无半途跳船的可能,选Java,前期重点放在MVC模式的理解和数据库增删查改,中期重点放在服务器负载平衡与CND分流加速,后期侧重数据库优化。
想创造更加多的可能性,选C#,重点放在.NetCore(跨平台后端研发)和Unity3D(VR,AR,游戏研发),并按照自己行业,选取关注Azure(云计算),WPF(桌面软件研发),Blazor(Web前端框架),ML.Net(人工智能框架),Focas(工业设备人编程),MasterCAM(数控机床掌控),Xamarin(安卓与IOS跨平台研发)等技术的发展状况与细节。
倘若你是学霸,有电气,机电等专业的知识背景,并有活到老,学到老的决心,学C++。
至于Python,最好的出路是搞培训,亦能够去做有些运维,测试之类的打杂工作。当程序员的话,在一线城市是没什么期盼了,下乡试试吧。运气好的话,遇到个煤老板,用Django忽悠忽悠,混个技术主管亦是可能的。至于Flask,就相当于Java的HttpClient或http://Asp.Net的通常处理程序,除了搞培训,实在是百无一用。