编程应该用 Mac ,还是 PC ?

爱编程,不爱修电脑;爱学习,更爱运动;爱科技,也爱娱乐;爱工作,不爱加班。爱幽默、爱生活、爱浪漫、爱打拼,我是程序员,我为自己代言,关注程序员,分享程序员的那些事儿!

『有人的地方,就有江湖』— 徐克。笑傲江湖。

一个竞争的市场,就会有对立的产生,这世界存在著很多不同的领域,领域好比是个江湖的缩影,因此就有许多门派的纷争,例如说浏览器领域有著最大宗的 IE 派,门派成长速度飞快,武功版号跳的跟台湾物价指数一样快的 Chrome 门,不断被模仿,一直被超越的 Opera 派;韧性极强,一直对抗几大势力的 Firefox 派等等,程序语言也有自己的领域纷争,社群网站也有社群网站领域的战争,这根本就是一个战火永不停止的战国时代,但是其中持续最久,衝突最大最激烈,当然以作业系统这块领域为最,因此,让我们来谈谈这个江湖。

首先我想讲讲这个武林的历史,不想看的人可以直接跳到最下面我的看法。

作业系统的上古时代

在很久以前,这块江湖的地位是侷限在于少数被选上的人才可以踏入的,这些人就是工程师,因为要掌握这个领域的武功不是一件容易的事情,因为在这个领域的武功基本心法就是学习一堆複杂的武功招式(文字介面的程序指令),这些被选上的人必须学习很多很多的招式,然后搭配使用这些招式进而来操作作业系统,因此这门领域的武功学习曲线是很高的,不是随便阿猫阿狗可以学习的,在这段时间中,掌握了这些招式你就能去使用作业系统中的各式各样的武器(软体),在这段时间内,你可以透过作业系统本身提供的基本招式来控制作业系统,你可以透过武器提供的招式来使用武器,你甚至可以自己发明招式(自己写script)来控制作业系统和武器,因此当时所有的工程师都有自己打造的一套最适合自己的武功,没有了他们武功会大打折扣,但是在他们使用自己打造的武功时能发挥出他们最强大的威力。

百家争鸣

但是这世界后来起了变化,当时某人将一个『连猴子也能学会用电脑』的概念带进了这个领域,让这个领域不再被少数人寡佔,这个概念就是 GUI (图形化介面),GUI 的产生让作业系统看起来更容易理解,大幅降低了这个领域武功的学习曲线,将这个概念发扬光大的有几个大门派,一个是目前最大的微软 派,这个门派非常可怕,势力非常之庞大,他们以作业系统这个领域起家,不单单如此还将触角伸向非常多不同的领域,几乎是跟电脑有关的领域都参一脚,不难理解是一个以征服世界为终极目标的门派,掌门人是 Bill Gates,据说他靠著卖出这些武功所赚的钱蝉联了 13 年的世界首富,是个极为可怕的角色,所有能力值大概都是 ?????,微软派的武功非常多,但都是以 Windows NT 这个核心心法所延伸出来的,像是大家熟知的 Windows XP,Windows 7 等等。

另外一个是由 Steve Jobs 建立的苹果教,教主 Steve Jobs 是一代传奇人物,苹果教早期曾经发生过一次内乱,这次内乱迫使当时教主 Steve Jobs 远走他乡,但是强者天生就是不平凡,在教主离开苹果教的这段期间,教主看出了当时武功心法的一些通病,为了矫正这些错误他穷尽心力费尽苦思的想出一套旷世奇功 — NeXTStep,而反观在这期间苹果教在新教主阿猫一号的带领下反而流失越来越多的教徒,整个苹果教呈现一个日暮西山的状况,因此在其他长老的强烈要求下他们将 Steve Jobs 迎回了苹果教继续担任教主,当然教主也带回了他所创的那套旷世奇功 NeXTStep 作为日后苹果横行天下的武功 Mac OS 的基础,如果你有研究过 Mac 的心法你不难发现在他们的招式中常常会有 NS 的 prefix 像是 NSString,这个 NS 所指的就是继承于 NeXTStep,在教主回归苹果教后,经过了几年的发展再次将苹果教推向了新的高峰,推出的许多划时代的神兵利器像是 iPod、iPhone、iPad,苹果教利用这些神兵利器打下了一片大大的江山,成为微软派最大的劲敌,但在作业系统领域上的唯一一套武功就是 Mac OS,也就是这个门派最基本的心法武功。

其他门派像是 Linux 门也是一股势力,这个门派的武功与苹果教的 Mac OS 同样都是由一个上古时代就存在的门派 Unix 演变而来,这个上古时代也就是本文一开始提到在还没有『连猴子也能学会用电脑』这个概念出现前,那个被少数人所寡佔的世界,这个门派心法的特性就像是我们前面提到的工程师可以利用各种由作业系统本身或是应用程序本身所提供的招式,加上自己的想法组合出最适合自己的武器,因此 Linux 及 Mac OS 皆继承了这个传统,但是 Linux 门情况比较特殊的是,虽然他是一个门派但是本身有非常多不同的势力,这些势力自己每天互相打来打去不亦乐乎,造成无法将枪口一致对外,大家自己闭门造车一直重複打造别人已经有的武功,因此发展始终无法达到一个高峰,但是一直以来他在伺服器领域的令人惊艳,也让 Linux 在这块领域有著他不可取代的地位。

回到武功心法

前面说到,这个世界的改变是由于『连猴子也能学会用电脑』这个概念的带入,但是这个概念在每个门派的实作方式是不一样的,例如说微软派为了将这个心法发挥到极致,将自己的心法改造的与上古时代完全不同,抛弃了那些使用指令操纵一切的心法,取而代之的是使用许多不同的武器(软体)来应付不同的对象(档案),因此基本心法(作业系统)不再是重点,而是一个随时可以替换掉的东西(随时可以重灌),你只要保留你的档案,重灌你的作业系统后再把这些武器装上去就可以用了,这个过程不知葬送了多少宅男的青春,但也让他们有当好人帮正妹修电脑的机会,但是因为如此,微软派的心法失去了原本上古流传下来的传统,你无法使用招式(指令)来操作各种不同的武器(软体、程序),因为这些武器现在开始彼此是不相往来,GUI 上的所有程序无法互相沟通。

你可能会问这有什麽影响?我告诉你影响可大了,人使用电脑的目的就是提高工作效率,在程序无法互相沟通的情况下,程序必须仰赖人的操作才有办法工作,因为你无法写一些综合巨集来完成複杂大量的工作,以微软的例子来说,会使用 VBA 脚本的人工作效率会是一般人的 n 倍,因为你可以完全的操控你的作业系统,就像你使用 VBA 可以完全的自动化 Excel 一样,但是作业系统想要做到这个层次,必须仰赖著一个统一的执行环境来管理这些程序,这个目标也是之前程序语言领域的 Sun 想要在他们的工作站做到的事情,也就是 Java,但是那是另一段故事我们先暂且不谈,这样的影响对工程师来说,就是 “什麽都看不到”,现在微软派武功心法全部都蒙上了一层马赛克,因为所有的东西都是被包装过的,相对的工程师们无法去真正的了解这套武功心法,你想要做的事情如果超出了武器(软体)能应付的范围,你只能放弃,也是因为包装的太好,在发生问题想要 Debug 的时候你根本看不到作业系统层面的问题,只能按下那个回报给微软的按钮,因此在微软派以这样的概念全力发展 GUI 的历史后,取而代之所捨弃的就是这个 “问题”,我把问题用双引号包起来的原因是因为,对一般使用者来说这并不算是个问题,因为他们感受不到,我相信这或许也是微软的成功原因之一。

Linux 门则是把原先上古时代的传统发挥的淋漓尽致,但就像我前面提到的,Linux 门自己的内战打的不亦乐乎,当你踏入了 Linux 门之后,你会发现常常当你想使用 Linux 上面所需要的武器 A 的时,他会告诉你你必须先有武器 B 的 1.13 版,然后武器 B 的 1.13 版必须先有装备 C 的 2.01 版,然后装备 C 的 2.01 版需要 Linux 心法的 1.03 版,然后结果你发现你在用的是 Linux 心法 2.0 版,因此虽然 Linux 门继承了上古 Unix 门的良好传统,让你可以像高手般的打造自己的武功,也可以完全的掌控整个作业系统,但是常会因为这些武器的相依性给搞疯,还没用到武器,就先被武器给弄死了。

再谈 GUI

所以你大概可以体会,GUI 开始算是一个作业系统的分水岭,他让每个门派的心法看起来变得很不一样,微软派的设计让你看不到作业系统层面的东西,因为东西几乎都是被包装好的,但是你可以在微软派的 windows 系列武功上使用相对良好的 GUI,但是由于微软派的 GUI 设计是跟底层绑在一起的,因此有时候 GUI 的崩溃也让系统一起崩溃了,就出现了传说中的蓝白画面,Linux 门的设计非常开放,你可以随时取用串接你想用的心法,但是在 GUI 方面就差强人意,大部分是一些看起来就像是山寨微软派或苹果教的产物,当然现在来说有些表现较为优异的像是 Ubuntu 之类的,但用过就知道还是有差,而苹果教正好是取其两家之长,一个拥有高度 usability 的 GUI 介面加上可以自行设计的武器系统,Mac OS 感觉就像是上古流传下来的神器再用对武器施法的卷轴衝到 +10 那样强大,在 Mac OS 上使用继承于教主所开发的心法 NeXTStep 的进化版本 Cocoa,这套心法提供了一个统一的作业系统执行环境,所有基于 Cocoa 心法所研发出来的新武器都有了统一的介面,这个统一的介面让你可以 100% 的控制所有的程序,而且 Mac OS 本身就已经提供了完整的开发环境给所有的工程师,反观在 Linux 门缺乏这个在 GUI 上统一的介面,因此他们的 GUI 看起来就挺杯具,而微软派的 Windows 系列在从 Vista 以后希望打造出一个完全建构于新心法 .NET 框架的环境来达成像是统一介面的环境,但是由于其设计哲学上的差异他们还是有差异,而且 .NET 心法的一个致命伤就是仰赖著使用者必须自行去更新 .NET 版本,如果他没有更新成适合的版本那你所开发的武器可能他就没有办法使用。

后记

其实是简短的故事整理,对于使用 Mac 或是 PC 的来写程序比较好,其实两派各有说法,个人浅见只是文化上的差异,一个最简单考虑的重点就是你想开发哪个平台上面的软体,那麽你最好就使用该平台来开发,你想开发 Windows 上面的应用程序,那麽赶快安装 Visual Studio.NET,你想开发 Mac 上面的程序那就赶快买台 Mac 安装好你的 XCode,当然,你也可以考虑 Java 来开发跨平台的程序,但是用过都知道在 GUI 的显示在不同平台上还是会有差异的,那如果是开发 Web 的程序来说,个人浅见如果你是使用 PHP、Ruby、Python 等程序语言,那麽 Unix-base 的环境还是比较适合你,因为你必须常常去追踪你的 Application 在系统的运行状况来做效能的调教或是 Debug,而这是在 Windows 平台上的相对弱项。

已经看过太多的战文在讨论 unix 好还是 windows 好,其实就像我说的是文化上的差异,微软的文化是以一般使用者为出发点而设计的平台,如果是由一个 Unix 的工程师来设计一个软体,他可能会开始先设计一个文字介面的核心,然后才加上一层 GUI 的皮,这样这支程序才可以为其他程序设计师来自动化操作,因为 Unix 的哲学是以程序设计师为出发点,反观 Windows 工程师会倾向于先做出一个使用者操作的画面,然后才去写核心部分,对于 99.999999999% 的使用者不写程序的 Windows 这是很正常的事。另外 Windows 跟 Unix 最大的差异还是在资讯透明度,Windows 上核心底层的东西必须仰赖微软更新后才会修复,因为你很难去看到底层的原始码,而 Unix 由于开放的关系你可以随时进入底层去找出错误来修正他,但这也不算是 Unix 就比较好的观点,因为这单纯是设计理念的不同,Windows 倾向于我帮你处理所有底层的问题,你专心写你的程序就好,而 Unix 则是我让你看光光,你不开心就改没关系,因此两派信徒互相嘲笑对方,其实只是设计理念上的差异罢了。

虽然我用 Mac,但我相信比尔盖兹在 Windows 上写程序还是会把我震住的,所以我从不嘲笑 Windows 的工程师,所以请依照你的需求挑选你的平台就好,如果要开发微软的程序,那麽用微软的环境还是最无痛的!

欢迎关注我的公众号(同步更新文章)DoNet技术分享平台

阅读原文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux创建虚拟声卡,Pear BIOS 安装和配置指引

Pear BIOS 安装指引Pear BIOS是一套硬件模拟系统,操作系统可以在这套模拟硬件上运行。Pear BIOS可以让用户同时安装多套操作系统,使用时可以选择任何一套操作系统启动。在传统电脑系统上,操作系统可以识别并必须识别硬件;而在这套…

左右值

C/C语言中可以放在赋值符号左边的变量,即具有对应的可以由用户访问的存储单元,并且能够由用户去改变其值的量。左值表示存储在计算机内存的对象,而不是常量或计算的结果。或者说左值是代表一个内存地址值,并且通过这个内存地址&am…

关于 ASP.NET 内存缓存你需要知道的 10 点

缓存机制的主要目的是提高应用程序的性能。作为 ASP.NET 开发人员,你可能会意识到 ASP.NET Web 窗体以及 ASP.NET MVC 可以使用 Cache 对象缓存应用程序的数据。这通常被称为服务器端数据缓存,并且常作为框架的内置功能。虽然 ASP.NET Core 中并没有这样…

linux git删除的文件怎么还原,从Git仓库中恢复已删除的分支、文件或丢失的commit...

从Git仓库中恢复已删除的分支、文件或丢失的commit在使用Git的过程中,有时可能会有一些误操作比如:执行checkout -f 或 reset -hard 或 branch -d删除一个分支结果造成本地(远程)的分支或某些commit丢失可以通过reflog来进行恢复,前提是丢失的…

两张趣图助你理解状态码的含义~

HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。我们可以通过查看HTTP状态码来判断服务器状态,常见的有404 、502等;但是其他不是很常见的状态码都代表什么状态呢?下面有两张有趣的图片…

java 自定义注解以及获得注解的值

1.自定义注解 import java.lang.annotation.*;Documented Target(ElementType.FIELD) Inherited Retention(RetentionPolicy.RUNTIME ) public interface MyAnno {/*** 是否能为null* return*/boolean isCanNull() default true;/*** 是否能为空字符串* return*/boolean isCanE…

linux列出管道,lsof列出的管道列表示什么意思?_linux_开发99编程知识库

文件不僅以流形式打開。 其中一些是在 lsof 手冊中列出的:FD is the File Descriptor number of the file or:cwd current working directory;Lnn library references (AIX);err FD information error (see NAME column);jld jail directory (FreeBSD);ltx shared l…

CSS一些实用的技巧

css 字体简写规则当使用css定义字体时你可能会这样做:font-size: 1em;line-height: 1.5em;font-weight: bold;font-style: italic;font-variant: small-caps;font-family: verdana,serif;事实上你可以简写这些属性:font: 1em/1.5em bold italic small-ca…

linux openssh升级8.1,Centos7利用rpm升级OpenSSH到openssh-8.1p1版本

由于近期安全事故频发,打算把机器OpenSSH升级到最新版本,找了一圈,发现分享的rpm包就到7.4版本,最新版已经到8.1.p1,所以博客自编译一个openssh-8.1p1的rpm包进行分享。检查环境:[roottest]# ssh -VOpenSSH…

《HTTP权威指南》 – 11.验证码和新鲜度

服务器应当告知客户端能够将内容缓存多长时间,在这个时间内就是新鲜的。服务器可以用这两个首部之一来提供信息: Expires(过期)Cache - Control(缓存控制)Expires首部 规定文档“过期”的具体时间&#xff…

产品经理必备神器推荐

欢迎关注我的公众号(同步更新文章):DoNet技术分享平台阅读原文工欲善其事,必先利其器,作为最追求极致体验的产品经理群体,手里有一件趁手的法器,工作起来才会有一种享受般的快感,最近…

野火linux底板设计,野火STM32F767套件(底板+核心板)

一、兑换形式1、电子芯吧客注册用户均可通过免费申请与硬件兑换两种方式进行申请试用2、免费申请形式为用户通过分享试用活动至好友,换取申请板卡一次试用资格3、硬件兑换方式为用户捐赠一块闲置板卡至电子芯吧客,换取申请板卡一次试用资格4、免费申请渠…

c++ builder xe2 (Embarcadero rad studio) 远程调试 同样适用于 delphi 远程调试 教程

c builder xe2 (Embarcadero rad studio) 远程调试 同样适用于 delphi 远程调试 教程转载于:https://www.cnblogs.com/LittleTiger/p/5039245.html

JS关闭浏览器 (不弹出提示框)

如果网页不是通过脚本程序打开的(window.open()),调用window.close()脚本关闭窗口前,必须先将window.opener对象置为null,否则浏览器(IE7、IE8)会弹出一个确定关闭的对话框。<script…

天大18年c语言离线作业,天大18秋C语言程序设计在线作业一辅导资料.docx-资源下载在线文库www.lddoc.cn...

天大18秋《C语言程序设计》在线作业一辅导资料.docx天大 18 秋C 语言程序设计 在线作业一1、C 2、D 3、D 4、D 5、D 一、单选题共 40 题,100 分1、设有int a 31,0,3,3,4,5,6,7;,则 a21的值是 A3B5C6D4正确答案是C2、设 int a21,b021; 语句 printf“x,dn”,a,b;的输出…

AM335x(TQ335x)学习笔记——GPIO关键驱动移植

或按照S5PV210学习秩序。我们首先解决的关键问题。TQ335x有六个用户按钮,每个上、下、剩下、对、Enter和ESC。我想开始学习S5PV210当同一,写输入子系统驱动器的关键问题要解决,但浏览driver/input/keyboardgpio-keys.c,大体上看下…

程序员偷偷深爱的9个不良编程习惯

新媒体管家下面这9个编码习惯,虽然在编程规则中是被驳斥的,但我们很多人就是会不由自主地使用它们。我们曾经都做过这样的事情:当妈妈不注意的时候,偷偷地吃糖果零食,然后导致有了蛀牙。同样的,我们都违背过…

emacs c语言 自动补全,Emacs 与 C/C++ 代码自动补全

基于 Emacs 的 company 模式并配合 semantic 文法分析器,实现 Emacs 的 C/C 代码自动补全。关于 Emacs 的代码自动补全代码自动补全的功能,对于使用 Emacs 写代码的程序员而言其重要性不言而喻的,但是搜了一些所谓的 “Emacs 完美的 C 自动补…

linux(fedora) 下dvwa 建筑环境

linux(fedora)下dvwa组态 1.下载httpd,dvwa,mysql,mysqlserver, php-mysql,php 除了dvwa 这是外界进入下一官方网站。该服务通过休息install 安装 yum install httpd, mysql, php-mysql, php 假设出现安装的问题。能够先yum search xxx 2.安装完之后,检查安装的状…

c语言一元二次方程 ii(分支嵌套),C程序设计——求一元二次方程算法

要求:从键盘上输入一元二次方程的三个参数,编程判断并求一元二次方程的实根(a,b,c均为整数)算法分析:一元二次方程是只含有一个未知数,且未知数的最高次数是二次的多项式方程。一元二次方程经过整理都可化成一般形式axbxc0(a≠0)&…