现在都快找不到ASP.NET的培训课程了。
知道我要开课做培训,有同学劝我:“憋讲那什么.NET,讲Java,现在这个火!”我说我Java不熟,“唉呀!C#转Java,分分钟的事!以飞哥你的经验,……”
其实,我是有点心动的。不得不承认,他说的都是事实。要不要再回头把Java捡起来?……
+++++++++++++++++++++
这里我突然想补充几句。在【超划算】免费课程,付费讲解 里我提到:能自学,就不要培训,可能有些同学还没明白为什么。其实很简单,就因为自学能力是开发人员必不可少的能力。做程序员,想吃老本,是不可能的。
以飞哥为例,当年转行做程序员,培训学校里学的是Java Web和WinForm,但第一份工作就是做的ASP.NET WebForm开发。这玩意没人教啊!都自己学的,看书看视频,一点一点琢磨,论坛QQ群到处提问(一起帮的灵感应该就萌芽于这个时候吧?哈哈哈,臭不要脸的打个广告……)之后没多久,DataReader都还没捂热乎呢,就出来了Linq to SQL,怎么办?还是得自学。莫非因为这个你还再上个培训班?接着WebForm页面生命周期还没捋清楚呢,MVC又横空出世,得!又闷着头追呗。再后来什么NHibernate,JQuery,Bootstrap,Autofac,AutoMapper……现在“一起帮”上使用的所有技术,没一个不是自学的。
所以,你要明白:哪怕是你参加培训,也只是带你入个门而已。“师傅领进门,修行在个人”,后面的路,太长太远太多分岔,你最后走到哪,没有人知道。
你看,飞哥学Java web的,结果做ASP.NET;你现在学ASP.NET,谁知道你以后做什么呢!
+++++++++++++++++++++
咳咳,回主题,左思右想之后,我还是选择开设ASP.NET课程,为什么呢?
- 从我自己的角度考虑,ASP.NET我最熟悉,这是教学质量的保证;
- 从同学们的角度考虑,ASP.NET入门软件开发也是一个不错的选择!
首先,现在.NET平台真的是一支潜力股。
要明白这一点,要先明白为什么现在.NET凉了。其实这个“凉”字,就意味着它之前曾经“火”过。火都没火过,怎么凉呢?从小就生活在“互联网”时代的孩子不知道,在互联网之前,是PC时代。所有的软件,几乎都是windows桌面软件,微软才是当之无愧的霸主。用Java开发的桌面系统,你根本就不敢用。所以Java所谓的“跨平台”其实就是一句空话,windows平台就没它什么事。那时候开发应用程序,流行的是VB,或者C++。
然后,进入互联网时代(直观的说,就是大家都开始“做网站”),出现了PHP、JSP和ASP三足鼎立的格局。现在看来,这三个技术都是非常原始和粗糙的,本质上就是在静态网页里面“嵌入”动态内容,在性能、安全和代码可维护性上都有相当大的问题。
2002年,ASP.NET WebForm(区别于现在流行的ASP.NET MVC)横空出世,一时风头无两。因为都是过去时了,我就简单的说一下为什么,三个原因:
- 编译执行。极大的提高性能和安全性(至少理论上是这样的)
- 通过页面控件实现“表现层和后台逻辑分离”。即使在现在,这都是一个非常了不起的设计理念和技术成就。虽然因为各种各样的问题,目前MVC成为主流,但我相信,这是一个“波浪式的前进,螺旋式的上升”的过程。
- 页面事件机制。习惯于WinForm开发的同学,可以无缝对接到Web开发。
当然,还有仿Java的C#语言功不可没,这个后面我单独讲。
有同学可能要摇头了,大飞哥你吹牛逼不上税,ASP.NET这么牛逼,那它为什么就“凉”了呢?
别急,说完了好的,我们再说差的。归根结底,微软在两个方面犯了错:
-
不开源。前些年,微软在开源这个问题上,几乎得罪了所有的程序员。程序员,尤其是“优秀的”程序员,是一群要“打破砂锅问到底”满脑子黑人问号的家伙,code is everything。你不给我看源代码,对不起,不和你一起玩!o(´^`)o
- 绑死Windows平台。之前的.NET,虽然理论上是完全可以跨平台的,但微软为了自己的利益,一直把.NET Framework死死的绑在windows平台。这就带来两个问题:
-
费用。这个就没什么好说的了。Linux是免费的,而windows得花钱买,而更大的问题是:花钱买的还不如免费的!windows做为桌面系统,那是没说的;但是作为服务器,和Linux相比,确实笨重了些。不说其他的,就图形界面一项,就带来了服务器CPU、内存,以及远程管理带宽上的负担。
- 安全性。一是由于微软没有开源,客户担心你微软自己有没有做什么手脚;另外就是大众(包括大部分程序员)普遍认为:windows没有Linux安全。不管事实是否确实如此,但人们就是这样认为的,你又能怎么办呢?
所以,那些年,微软是眼睁睁地看着ASP.NET由热变凉,一筹莫展。很多.NET开发人员,都不得不转Java,转PHP去了。
好在这些都已经是老黄历了。2016年6月27日,微软正式发布.NET Core 1.0 RTM版本,彻底的开源、真正意义上的跨平台,完美的解决了之前制约自身发展的两个核心问题,服务器不想用windows,用Linux吧!一下子什么问题都解决了。这一天,虽然来得稍微迟了一些;但无论如何,他终于来了。我相信,这必将.NET的发展带入一个全新的广阔天地!而 Windows Build 2018 开发者大会,更是给我们带来了惊喜,接下来的.NET Core 3.0,除了传统的ASP.NET(网页开发)、Unity(游戏开发)、Xamarin(跨平台),居然还会支持人工智能(ML.NET),哈哈,这是要逆天啊!
形象点说,.NET天生丽质,但以前太“傲”了还有点“作”,但现在人家已经放下身段,程序猿同学,这时候还不一亲芳泽,可惜了哟!ʅ(‾◡◝)ʃ
虽然飞哥写得嗨,可能有些同学已经晕了:“你说的这些我都不懂,能不能简单点?学这什么ASP.NET就业形式怎么样?”
呵呵,“面向工资编程”,理解理解。
首先,你要理解一点:工资的高低是和能力挂钩的,而不是语言种类。做一个简单的归谬你就能明白了:假设工资高低按语言依次排序,A语言 > B语言 > C语言……,那大家都一窝蜂的学A语言去了,C语言不就完蛋了?或者用人单位又不傻,不会都抢着用C语言开发降低工资成本?你说会不会因为A语言很难学会,所以……安啦!不可能的,只是一门编程语言而已,哪有这回事?别说现在这些语言都是接近自然语言的高级语言,就是汇编,其语言本身,也是非常简单的。你现在觉得难,你没学没用而已。中英双语人才难找,但会个七八种编程语言的,一抓一大把!主流编程语言其实都非常接近,差别也就重庆话和东北话一样,就这点差别,还可能体现在工资上么?!
有些同学可能不服了,“哪里?Java的工资就比.NET的高,好吧?”我们姑且认为事实确实如此(飞哥也没做过统计,我更倾向于是初级的Java开发人员工资比初级的.NET开发人员工资高一点,但都是初级,高也高不到哪里去,呵呵),原因是什么呢?
我觉得,其本质是“Java入门要比.NET难”。这倒不是语法层面的难,而是各种配环境协调中间件乱七八糟的东西,学Java就必须捣腾这些玩意。.NET就不同了,靠着微软这颗大树,坐拥Visual Studio这一宇宙最强IDE,开发环境就一个“微软全家桶”。甚至在WebForm时代,拖拖控件连个数据库就可以开发了,小白同学不知道多开心……但是,随着.NET Core问世,这种现象肯定会改变,.NET Core的配置就麻烦多了。此外,微软的东西,简单有简单的做法,高级有高级的玩法,归根结底,还是看你自己的努力程度。到了一定的高度,语言平台其实都不是关键。
我经常对像转行和正在转行的同学讲,入门的工资,真的不要太在意。先入行,有了第一份工作再说!
那学ASP.NET,工作好不好找?我觉得,无论你学什么语言,都差不多,第一份工作肯定比较难,你没工作经验啊!
有些同学说“Java好找工作一些”,理由是“Java相关的招聘岗位多一些”。结论我们暂时不管,这个理由明显是有问题的。Java的岗位多,但现在学Java转Java的人也多啊?
作为求职者,大体来说,就业市场总是处于一个“动态平衡”的状态。我已经不止一次的听人说,“.NET不好人”,项目没办法转Java了。随着.NET Core的推出和普及,我相信.NET有了更多的底气坚持.NET平台,情况会越来越好。但即使是现在,.NET也不是一个“小众”平台,怎么也比什么php、python,甚至ruby、perl之类的强,找份工作,问题不大。
另外,大家关不关心“加班”的问题?是不是听说过很多996,行军床,7x24轮班,以至于程序员死在电脑前的流言?但飞哥做编程10年了,就没怎么加过班,哈哈。我也琢磨过这事,是不是运气太好?后来觉得还是托了ASP.NET的福。一方面,愿意选择ASP.NET、肯花钱买windows server(服务器没人敢用盗版)的公司,“压榨人工”的渴望就不太强烈(这个表述大家领会意思就可以了,不要怼飞哥。我知道,这个推断是不全面的、不可逆的)。另一方面,使用ASP.NET的多半不是互联网行业,做的是2B(to Business)系统,一般都比较成熟稳定,紧迫性不高,比较从容;不像2C(to Customer)那样“赶”,需求今天改明天变,而且是你追我赶的要“啖头汤”。所以作为开发人员,虽然收入上会少点,但以飞哥这个年纪来看,命还是比钱要重要些。
+++++++++++++++++++++
好长,是继续写呢?还是下回分解?
无论如何,中场休息会儿吧,先,O(∩_∩)O~
+++++++++++++++++++++
接着写。
选择由ASP.NET入门,还有以下几个好处。
ASP.NET是一门综合技术,适合打底子。
大体上来说,学会ASP.NET,你应该掌握以下相关技能:
- 前端。包括HTML,CSS和JavaScript。这里顺便说一下,飞哥的课程会使用JQuery和Bootstrap,而不是“更极端化”的Vue或者Angular之类的,嗯,具体的理由课程里讲吧。一言难尽,而且容易引发口水战,哈哈。
-
B/S系统(Web开发/网站开发)相关知识。比如GET/POST请求、Http协议“无状态”、cookie、session、重定向等等。这些东西都是通用的,无论是ASP.NET,还是Java Web,或者PHP,都一样。(其实我一直有点好奇,“纯前端教学”是怎么弄的?比如学习Ajax,后台的接口怎么办?谁提供这个接口?培训学校公开一个接口,让同学们调用?那我要改改接口呢?还有,往后台传值呢?怎么看传值过后的变化……)
- C#语言。C#是一种通用编程语言,除了可以开发网页(ASP.NET),还可以干很多很多事情。桌面应用(Winform/WPF)、游戏(Unity)、手机APP(Xamrian),几乎啥都能干。以及接下来.NET Core 3.0的人工智能(ML.NET),哈哈,是不是要逆天?
- 数据库操作。和学前端必然要了解一定的后台知识一样,ASP.NET一定会调用数据库,所以操作数据库的SQL语句,“增删改查”你得会。
当然,在此基础上,你还会接触到一些计算机原理(内存/磁盘/CPU)、数据结构和算法(池/树/散列)、系统安全、性能优化,以及系统架构等方面的知识。
很多同学想转行做开发,但不知道具体的方向。我收到过很多这样的问题,也很头痛,不知道怎么回答。
前面已经讲了,任何一个方向都可以很有前(钱)途。所以,最理想的不是你以为的,或者培训机构吹嘘的什么“简单”“好就业”“有前途”的技术,而是你感兴趣你有天赋的那个方向。但是,你对什么感兴趣,你对什么有天赋,飞哥怎么知道呢?这就像“小马过河”一样,水深水浅只有你自己试过才知道。
+++++++++++++++++++++++
又跑个题,有两种成本,人们总是错误的理解:“机会成本”和“试错成本”。
机会成本,总是被有意无意的忽视;而试错成本,大家下意识的抗拒。但很多时候,“试错成本”是必不可缺的——人的成长依赖于这些错误。
比如飞哥我,学国贸做律师,搞装修写代码,一路折腾过来。后悔么?很难说。但是,我知道,如果不是这一路折腾,我不会像现在这样活得透彻。很多人,哪怕功成名就,在外人眼里风光无限,但从内心来讲,他们是迷茫的。(飞哥就不谦虚了,哈哈)
很多同学说他很迷茫,我明白这种迷茫,看不清前面的路嘛。但我真的无能为力,首先飞哥没那种未卜先知的本事,我也看不清未来,谁敢说他看得清未来?那不都是神了?!其次,这未来是你的,是你自己选择你自己创造的。“走自己的路”,非常重要。有些家长,不,应该是很多家长,想要给孩子铺一条他们认为的“金光大道”,从来不问孩子愿意不愿意。结果呢?孩子们“叛逆”“不听话”“和父母闹”,甚至很多人间悲剧。“我吃的盐都比你吃的饭还多”,“我都是为你好”,“我……”,家长们觉得自己很委屈。
但我是站在孩子们这一边的,哪怕孩子选的路,更崎岖更艰难。因为每一个人都是独一无二的,他们是拥有自我意识的生命体,而不是别人的克隆体。他们要有自己的喜怒哀乐,自己的人生价值。
你看家长们说话,都是“我”怎么怎么,这个“我”,像不像一个“找”字?
认识自我,成就自我,就是一个不断寻找的过程。要去找,找到属于自己的那一撇,成就一个大写的“我”。别人领着你,不是找,要自己去找。找嘛,就是东游西荡,这里瞅瞅,那里看看。怕没有用,不去找,你永远找不到。我看到很多人裹足不前,我看到很多人随波逐流,一辈子懵懵懂懂,一辈子郁郁寡欢。
+++++++++++++++++++++++
书归正传。
前面我也说了,入门学什么,和你之后干什么,没有绝对的关系。所有的培训,都是带你“入门”而已,什么“培训三个月,相当于三年工作经验”之类的鬼话,信它就有鬼了!在入门阶段,广泛的“见识”是非常有必要的。注意:我说的是“见识”,不是“基础”。因为很多人一说“基础”,就是计算机原理,数据结构啥的。不是这样的!真不能“再多说几句”了,简单点,见识就是“看见认识”,一个简单的了解,在此基础上,你才能知道,你的“兴奋点”在哪里;然后,一步一步地找到自己的方向。
学了ASP.NET这整个一套技术,你以后可以做前端,也可以做后台,或者像飞哥一样做全栈;或者,不做ASP.NET,做JSP做PHP,也就是把C#换成Java或PHP而已;再或者,有了C#和数据库的基础,你还可以做桌面做游戏,做人工智能,一切皆有可能!
我们这种“课程免费,付费讲解”的模式,可以最大程度的降低你的试错成本。反正听课是免费的嘛,有了兴趣有了方向,再花点“打赏币”深入钻研就是了。
不得不说,其实我有一个梦想,(^o^)/~
假如“一起帮”这种模式能够普及的话,我们是不是就可以有一个涵盖各种语言各种技术的“大课堂”?然后所有同学可以免费的自由“选修”各种课程,会不会发展出一种新的教学模式?
路漫漫其修远兮,再说吧,哈哈。
接着说,选择ASP.NET入门的下一个理由:C#确实是一门非常优雅的语言。
相较于其他动态网页开发技术,ASP.NET所独有的C#语言:严谨、优雅、开发人员友好……就语言本身而言,除了“语法糖”稍微多一点以外,几乎没有槽点。(但飞哥个人而言,是超喜欢这些语法糖的……)
弱类型的脚本语言就不用说了,所谓的“灵活”其实就是“坑多”,所谓的“轻量级”其实就是“干不了啥大事”——典型的就是JavaScript!真的是“女泪男沉”,说它“生于仓促,死于……”,还TM死不了,最近活得蛮滋润。JavaScript的历史,真的充分证明了“只要站在风口上,猪都飞得起来”这句话。但这玩意真不适合教学,尤其是初学者。我之前的课程,讲完HTML和CSS之后,根据投票结果,先讲JavaScript,唉哟,那个之难受啊……看来有些东西不能确实是不能讲民主的啊!
C#,是现代化的、工程化的、强类型的、预编译的、真正面向对象的高级编程语言。虽然最初是模仿Java,但青出于蓝而胜于蓝,从2.0版本引入泛型开始,就拉开了和Java的距离,之后引入Linq、静态扩展方法、Lamda表达式等语法特征,不夸张的说,甩出Java几条街。C#缺的,是“平台支持”和“社区环境”,也就是之前一直“不开源”拖的后腿。.NET开源跨平台,真的是大势所趋人心所向。.NET Core一经宣布,.NET阵营一片欢欣鼓舞,甚至高呼“Java可以去死了(强烈推荐,“涛吴”知乎2.1K高赞答案)”。当然,这只是情绪宣泄而已。.NET生态环境的完善、意识的转变,还需要时间,所以我说“.NET是潜力股”,在目前来看,它还只是有潜力,真正形成绝对优势,再怎么也是三五年以后的事情。而且Java也不会闲着,接下来,在Java语言的完善上,Oracle应该不会像之前那样,拖拖拉拉一直跳票了。
为避免口水战,特地声明一下,飞哥对Java没有任何恶意啊!要不是Java/PHP之类的压力,.NET怎么会开源呢,是不是?就是要这样竞争,开发者才能得到实惠,一家独大就不好玩了。(^o^)/~
学会了C#,再学JavaScript,就容易得多。
比如C#有类型检查(强类型),JavaScript没有类型约束(弱类型),C#是“有”,Javascript是“没有”,没有的东西你怎么讲?你必须得用“有”的来对比,是不是?我上课讲:“JavaScript不会编译生成一个可执行文件”,你是不是晕的?什么是“编译”,什么是“可执行文件”?我是不是还得把C#代码怎么编译,编译后生成的dll/exe文件给你看看,然后你才能明白?与其这样,不如一开始我们就先学C#!
还有JavaScript很多“模仿”C#/Java等工程语言的知识点,比如JavaScript的“面向对象”,你不知道真正的面向对象什么样子的,学JavaScript的半吊子一定是稀里糊涂的;还有“名称空间”,JavaScript语言本身,是没这玩意的,也是一种“模仿”,但为什么要模仿,为什么要这样模仿,要讲清楚这些问题,你只能首先去了解它模仿的对象……
总之,这一次,我是一定要先讲C#的,JavaScript放到最后。
OK,最后的一个理由:ASP.NET学习曲线平缓,对初学者友好,易于入门。
当年,我能自学入门ASP.NET,但绝对无法自学入门Java Web或PHP的。
其他不说,开发环境我就配不起来。大约记得,是看张孝祥的Java视频,第一节课,配Windows的环境变量,直接把我打懵了;也看过鸟哥的PHP开发,LAMP四大组件直接把我给吓尿了……
但ASP.NET,相比之下,就太特么简单了,宇宙最强IDE——Visual Studio一装,齐活!那时候还是WebForm,拉拉控件,配一配属性,连上数据库,耶!一个看上去像模像样的网站就出来了。
当然,这种拉控件的开发方式也一直被人诟病。但是,你要注意这个但是,对于初学者而言,最重要的是什么?是兴趣,是及时反馈,是成就感。你可以志存高远志在千里,但你也一定要知道,“千里之行始于足下”“不积跬步无以至千里”。
我们这种零基础班,又是线上教学,学习曲线不能太陡,否则会让你开始怀疑人生。可能是我自己智商不咋的吧,我觉得程序员的门槛还是比较高的。并不是像有些人说的那样,“培训班随便学个几个月”,出来就八千上万的工资。我知道的,从入门到放弃的太多太多。自学学不下去,放弃了;进培训班,跟不上课程,放弃了;培训出来找不到工作,放弃了;工作一段时间,压力太大,放弃了……一波一波,大浪淘沙。还有之后的中年危机,真的是“长江后浪推前浪,前浪死在沙滩上”。说白了,现在程序员的工资还将就,大环境是一方面,门槛也一定是有的。
门槛低一些,入门就容易一些。入了门,再谈之后的发展,显然要务实得多。
而且这里必须澄清一点:入门的难度,和你最后能精通到什么程度,其实没啥关系。又不要脸的拿飞哥自己做例子了,呵呵,现在我回过头来,什么环境变量也懂了,LAMP也没问题了,是不是?因为入门简单,就放弃持续成长,那是自个儿的事。
真正的长文啊!统计了一下字数,7K+了。
回过头来,总结一下,学习ASP.NET入门的四大理由:
-
.NET平台真的是一支潜力股
-
ASP.NET是一门综合技术,适合打底子。
-
C#确实是一门非常优雅的语言。
- ASP.NET学习曲线平缓,对初学者友好,易于入门。
欢迎补充,拒绝拆台。