我为何还没有放弃C#

今天看到知乎的一个推送:我是不是应该放弃C#,看完各种答案有一些感触。

浏览之下发现除了少数几个情绪化的回答,大家的回答还是很客观的,总结一下,大家都不推荐刚毕业的新手去学习,原因主要是两点:

  1. 市场的需求量小,同时真正需求的公司发现从业的开发者又少,尤其是靠谱的开发者。
  2. 微软长期的政治不正确。

事实上,如果让我给一些新人推荐,我也不会推荐C#,那么我为什么还没有放弃C#,很简单,因为我克服了第一点原因,而微软克服了或者说正在努力克服第二点原因。

前几年,我也曾怀疑过我的路,我是不是应该转其他语言。于是我疯狂学习其他各种语言。我学习python,写了一堆网络小工具;我学习node,参与开发了中间层;我学习golang,写了一堆自动化工具,之后我尝试去实现一个web系统,但最后放弃了,因为我悟了。在学习这些语言的过程中,我发现语言真的只是一个工具,而为了使人类的工具更加趁手,各种语言都在吸取其他语言的优势,使得不同语言的特性都越来越相似,无非是一些编程模型不同,并发模型不同。比如js的面向对象化,c#、js、python先后引入async/await特性、匿名函数的丰富,甚至我上述语言的web框架,除去django、rails、beego等大而全的框架,都在向轻量化组建化发展,比如说express、aspdotnet core、flask、gin,写起来除了语法不同函数组织方式不同,框架理念上我不觉得哪里还有不同,就是个功能覆盖全不全的问题。

随着计算机基础知识的丰富,工作经验的增加,我也认识到软件归根结底就是算法加数据结构,大部分开发者接触的复杂任务,无非就是利用算法和数据结构进行资源管理,这些资源包括网络,包括io,再底层一些包括内存、线程的管理,这样看来,纠结语言这一工具,反而有些下乘了。Docker厉害吧?集群厉害吧?大数据、人工只能厉害吧?厉害,然而这些新事物的核心理念,专家、博士都帮你研究好了,绝大部分普通开发者都只是翻着官方文档,照着业务应用罢了,国内很多公司都存在者面试造火箭、进门拧螺丝的现象。而一些高层次的公司,更看重的是开发者的学习能力,很多公司招聘要求上从来没有规定一定要精通某某语言,不会,ok,学就行了,看重的就是你的学习思考和解决问题的能力。始终保持学习的人,永远不会被市场淘汰。可能你会说我层次低了,没错我同意,而且我作为一名普通开发者,会为我能和你这样高层次的人物交流感到自豪。

再来看第二条原因,由于某些高层的原因,以前微软是看不起开源的。但现在,我看到的是发展和改变,其实微软一直是在努力发展的。以前Webform时代,人们嫌太重,好的,我出个mvc,我再来个web api;接着嫌弃微软不开源,不跨平台,ok,我发展dotnetcore,甚至2017年微软在github的贡献成为第一;我们还可以看一看尚未正式发布的dotnetcore2.1,看一看新特性Span,我不喜欢用跟其他语言的缺点来烘托dotnet,但我想安全地直接操作内存数组,应该是足够便捷、足够高效了吧。

用发展的眼光看问题,是马克思主义辩证法的核心内容之一。这不仅要求我们始终发展自身,更新自身的知识结构,也同样要求我们用发展的眼光去看其他事物。我们可以很大方得承认某个事物以前不好,但我们绝不应该在不更新知识的情况下,用3年前的印象,来评价3年后的某个事物。这也是毛主席指导人民从半殖民社会走向新中国并使你我能舒适得坐着讨论“我们该不该放弃C#”的武器之一,希望大家共勉。