前言
重要声明:Windows与Linux的战争已经持续已久,这里并不想重新引发口水战,只是单纯的学生之间的探讨与交流,我尽量使用客观的言论,避免感情色彩文字的出现。普通用户或不爱折腾的同学请直接忽略关闭即可。
身为一名信息工程学院的学生,直到大三我才渐渐的明白我应该如何在本专业上走的更远更久,我经常和身边的人说“我多希望在我大一的时候就有人告诉我这些,这样我就不必这么匆忙了”,这不只是一句感慨,更多的是抱怨,抱怨我身处的环境学术交流的匮乏。以下的文字均只是我个人的愚见,希望能给周围人一丝的帮助。
OS
工欲善其事必先利其器,我们先从桌面和笔记本OS说起吧。Windows是一个非常强大的操作系统,微软是物联网企业的巨头,任何国家和企业都不可能以任何理由忽略它们的存在,截止到2014年12月,所有桌面和笔记本OS中,微软自家的操作系统市场占有率达90.94%,OS X占7.21%,而GNU/Linux只占了1.34%。(数据来自于维基百科,https://zh.wikipedia.org/wiki/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E4%BD%BF%E7%94%A8%E4%BB%BD%E9%A2%9D)
Windows如此流行,以至于很多人并不知道除Windows之外还有其他OS,其很大程度上归功于它的可视化界面以及给予开发者稳定的API接口(一些其他的历史原因就不提了)。
- 强大的视图界面
Windows设计之初就想用图形界面来进行推广,这一点从名字就可以看出。通过视觉是人们感知周围世界的主要途径,Windows在这一点上可谓是老少皆宜、男女通吃,遇到问题基本靠鼠标点点点就能解决,很大程度上降低了入门门槛,顺便一提,Windows上的扫雷、蜘蛛纸牌等游戏就是为了让当时的人们尽快适应鼠标操作而出厂自带的。当然缺点也是有的,但是对于是桌面OS来说,计算机硬件配置不落后的情况下可以忽略。
- 给予开发者稳定的API接口
工具的重要性不在于工具本身设计的有多精良,而在于工具能够提升生产力。OS更是如此,软件匮乏就意味着功能匮乏,保证程序开发者大量为自家系统开发程序就要给他们足够的工具和保障。VS家族就目前来说是地表最强的IDE之一,用其加上自家推广的高级语言C#可以迅速让程序员开发出自己想要的程序。OK,除此之外,还要给他们足够的自信。其OS稳定的API可以让程序员开发出的程序对于不同版本的Windows具有很强的兼容性,不像OS X,经常更改API。这样,只需投入很少的精力就能开发出很好的程序,且很长时间内不必进行大调整。(实际上很多企业不买微软这个帐,国内的大型互联网企业很多都不使用微软提供的工具,以避免过分依赖微软)
说了这么多Windows的优点,岂不是应该坚定不移的走微软路线吗,什么又要弃之呢?
生于忧患,死于安乐
身边有多少人在不知软件运行原理的情况下随便揣测软件异常的原因,身边又有多少人随便一个很小的故障就必须要以重装系统解决,身边又有多少人学会使用了Windows上的软件就以为已经称为了Windows的上帝。
在这里去除那些主观因素,很重要的一个原因是因为Windows“过于强大”。我不能想象贝多芬在非常富裕的情况下依然能够创作出第九交响曲,我同样不能想象杜甫在和平年代还能写出那样忧国忧民的诗词。Windows给我们强大的环境,加上多年的使用习惯,就会理所应当的认为“刷新”是加快系统反应速度的必备按钮,就会认为磁盘如果够大就必须要分多个分区,也可能会认为安装软件绝对不能安装到C盘,不然系统会变慢……
真的如此吗?安逸的环境会让人丧失探索的欲望,很少有人在使用Windows的时候望着漂亮的开机界面时发出“Windows开机时都做了什么?”此类的疑问。(当然,微软闭源这一点,很多问题就不会让你知道答案)使用VS和C#绝对能快速开发程序,但是过于依赖高级语言和IDE会让人错过编译器底层的运行原理。在Windows上运行这各种游戏实在是一件很享受的过程,但是他会让你失去更深层探索的时间。(这一切肯定不是游戏的锅,Linux桌面用户匮乏的原因之一是其下桌面游戏的匮乏)
友好的环境,丰富的应用程序,可能会让使用Windows的人成为一个很棒的“轮子”使用者,但是如果想成为一名合格的“轮子”制造者就要下更多功夫了。
与Windows完全不同,Linux圈很“乱”,“乱”到想找Windows中的一个替代软件就会有十几个软件跳出来。“乱”到可视化环境竟然至今都没有一个最佳答案,需要自己一个一个去从Gnome、KDE等等等等中挑选出自己的“本命桌面”,“乱”到系统频繁出现报错信息,要求自己解决依赖关系,自己解决驱动问题。这种选择可以追溯到安装决定安装Linux之时,从你想要安装Linux是就需要从各种发行版本中徘徊了。
想必你已经知道我想描述的观点了。学习本就是一件发现问题与解决问题的过程,发现与解决的问题的数量和质量之间决定了学的广度和深度。这就是抛弃Windows的最重要的原因。在Linux中,如果你愿意,所有,对,是所有的东西都可以自定义,使用者便是上帝,再也没有条条框框的约束,当然,其代价就是会不断的崩溃,重装,在崩溃……很累,但是这不就是我们学习的原因吗,想要了解其工作的原理。
这里强烈不建议使用虚拟机学习Linux,理由同上,虚拟机的友好的虚拟接口会制造出一切安好的假象,令人忽略了本应在实体机上出现的问题,重新回到了另一个“乐园”
版权
目前人们关于版权的意识已经越来越高了,但是我仍然把版权放到第二的位置(不解释了)。Windows高昂费用与Linux的免费其实现在在中国没有区别,但是在未来,在企业,特别是在重要的场合,如:国家安全方面。使用他人闭源的技术肯定是不可行的,一是价格,更重要的是安全性。对于个人来说,应该支持正版,拿着破解版的软件炫耀是可耻的,在没有资金购买的情况下,开源软件是很好的选择(这里并不是说开源软件地位上低于商业收费软件,而是考虑到大部分人的使用习惯,有些开源软件的使用习惯可能和原使用软件有很大的不同,相反,很多大型的开源软件支撑着很多企业的命脉,如:docker等等)。
学习
Linux是一个最适合开发人员学习的环境,没有之一。这里是C家族的起源地,这里可以自由的控制程序底层的编译过程。这里需要自己定制化一切。上面已经提到了,学习时使用IDE会令人忽略很多本应掌握的知识,而Linux有一系列的开发工具,编辑器,编译器,调试器,版本控制器,每一项都有数个软件可供选择(Linux上也有很多IDE可供选择,但是很多使用Linux的程序员喜欢通过添加编辑器插件的方式来自定义IDE),并且很多其他平台的软件的鼻祖都是Linux,然后再由爱好者移植到其他平台上的。精确的了解程序编译过程对学习编程有很大的帮助。此外,Linux很强的一点是开源,这代表着Linux的内核代码是开放的。此外,由于高度可定制化,使得使用者不得不频繁的和硬件接触,这是一个很好的开始,了解硬件的运行原理会帮助软件开发者开发出更好的软件。
就业
因为我还是一名在校学生,这一点上我没有什么资格去讨论。只说两点:一,我们以上讨论的都是桌面OS,其实在其他领域,如移动设备、可穿戴设备、以及其他的智能设备,大部分都在运行Linux内核。二,依照中国现有的形式,抵制微软的情况可能会越来越严重。