.net, java, c/c++ 和钱
最近有一段时间没有写博客了,原因是没时间,项目需要在短时间内增加一些安全性的支持,为此我花了近两个月的时间做基础研究,现在路已经跑通了,稍闲下来,看到园子里面的一些文章,个人觉得作为一个在软件开发领域做了多年的工程师有必要说几句,让大家少走些弯路。
记得刚开始写代码的时候自己也有过纠结的时候,纠结的是如何选择,.net, java, c/c++我该学哪个,那个时候正式java强势的时候,好像大家都认为java是万能的。人都不愿意自己的学习投资浪费掉,都想学一个入流的语言,当时的网络上面也和现在一样充斥着语言之争,新手好迷茫,因为每个人都说的小有些道理。
如果在今天还有人写语言之争,我看到最想说的一句话就是:太年轻。
为什么非要有语言之争呢?你是单细胞么?主流语言之间根本就不是单选题,只有都看透了,站在一个相对高的位置才能更好的解决问题,对,没错,我说的是主流的语言都值得学习,.net, java, c/c++,python, shell..,因为对于不同的问题,不同的语言可能有其独特的优势,写代码的本质是解决问题,至于语言,那都是必修课。站在一个高的角度看编程语言只有大同小异,当然在这里我不是否认不同语言之间的差异,它们之间可能有很大的差异,以至于我们要通过学习去了解他们,但是也不至于说我们要去单选,要有你没我。
下面小谈一下差别:
.netc# -- 由于是建立在微软COM之上,确实适合快速开发,写应用程序,原因是微软为你做的太多了,举个例子:
比如最开始C#判断系统是不是64位最开始的代码要这样写:
1 static bool DoesWin32MethodExist(string moduleName, string methodName) 2 { 3 IntPtr moduleHandle = GetModuleHandle(moduleName); 4 if (moduleHandle == IntPtr.Zero) 5 { 6 return false; 7 } 8 return (GetProcAddress(moduleHandle, methodName) != IntPtr.Zero); 9 } 10 11 public static bool Is64BitOS() 12 { 13 if (IntPtr.Size == 8) 14 { 15 return true; 16 } 17 else 18 { 19 20 bool flag; 21 return ((DoesWin32MethodExist("kernel32.dll", "IsWow64Process") && 22 IsWow64Process(GetCurrentProcess(), out flag)) && flag); 23 } 24 }
但是在经过.net framework 的封装之后下面一条语句就搞定了:
Environment.Is64BitOperatingSystem
微软让生活美好多了,但是其内部的实现估计还是大同小异,这样因为微软封装了复杂性,所以可以让有些工程师可以在不太了解原理的情况向去完成工作,降低了开发难度,提高了开发效率。但是相比于java,.net的跨平台性一直是个鸡肋,相信大家在做不同的事情的时候该知道如何选择了吧。
java -- 语法上和C#大同小异,坊间流传他们之间有互相借鉴之嫌,但是java的开发门槛相对C#确实少显复杂,同样,原因还是因为微软,微软的visual studio做了好多脏活,累活,而这些在java开发是可能都要手动去配置,去选择各种应用服务器,各种框架,因为经常需要去折腾,所以java工程师可能会知道的设计模式,服务器配置方面的东西更多些,但是这些东西也都是语言无关的,看透了都一样。
cc++语言 -- 在我看来cc++是相对底层的语言,底层也就意味之自己需要做的事情更多,没有.net那么多的封装,也就是说要求工程师知道的相对更多,我所知道的在windows 上面用cc++写系统软件,驱动的工程师大都也能写C#,反过来的情况不多。虽然业界鼓吹的java的跨平台性,但是我始终认为一切都是有代价的,为了跨平台,可能好多特性只能取交集,cc++写的代码只要做相对小的移植,跨平台性也不难做到,当然我的前提是你知道自己在做什么。另外,还有一点不得不提的是用C#和java写的代码在安全性方面确实比写cc++更容易,现在我看好多人写的c++代码,我特想去问一句, 你×××知道自己在干什么吗,别人随便写几行代码就得到你软件的控制权了,太可怕了,小伙伴们。
下面说说编程语言和钱的关系
我从来都不认为这是个绝对的关系,好多时候你能拿多少钱不是你的代码能力决定的,其他好多的软实力往往起着决定性的作用。比如语言,英语好的朋友即使技术一般也很容易找到高工资的工作,再比如,数据库,AD,OS,算法,设计模式,UML,这些软实力在特定的位置上拿高工资是很常见的事情,所以说你赚多少钱完全体现的是一个综合实力,某个单项只能加分,全面发展才是王道。
结论
高处不胜寒,学就是了,何必去管纷争..