编程应该用 Mac 还是 PC ?

2024-09-08 15:18
文章标签 mac 编程 应该 pc

本文主要是介绍编程应该用 Mac 还是 PC ?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

    序

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

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

    作业系统的上古时代

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

    百家争鸣

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

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

    其他门派像是Linux门也是一股势力,这个门派的武功与苹果教的MacOS同样都是由一个上古时代就存在的门派Unix演变而来,这个上古时代也就是本文一开始提到在还没有『连猴子也能学会用电脑』这个概念出现前,那个被少数人所寡佔的世界,这个门派心法的特性就像是我们前面提到的工程师可以利用各种由作业系统本身或是应用程序本身所提供的招式,加上自己的想法组合出最适合自己的武器,因此Linux及MacOS皆继承了这个传统,但是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介面加上可以自行设计的武器系统,MacOS感觉就像是上古流传下来的神器再用对武器施法的卷轴衝到+10那样强大,在MacOS上使用继承于教主所开发的心法NeXTStep的进化版本Cocoa,这套心法提供了一个统一的作业系统执行环境,所有基于Cocoa心法所研发出来的新武器都有了统一的介面,这个统一的介面让你可以100%的控制所有的程序,而且MacOS本身就已经提供了完整的开发环境给所有的工程师,反观在Linux门缺乏这个在GUI上统一的介面,因此他们的GUI看起来就挺杯具,而微软派的Windows系列在从Vista以后希望打造出一个完全建构于新心法.NET框架的环境来达成像是统一介面的环境,但是由于其设计哲学上的差异他们还是有差异,而且.NET心法的一个致命伤就是仰赖著使用者必须自行去更新.NET版本,如果他没有更新成适合的版本那你所开发的武器可能他就没有办法使用。

    后记

    其实是简短的故事整理,对于使用Mac或是PC的来写程序比较好,其实两派各有说法,个人浅见只是文化上的差异,一个最简单考虑的重点就是你想开发哪个平台上面的软体,那麽你最好就使用该平台来开发,你想开发Windows上面的应用程序,那麽赶快安装VisualStudio.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的工程师,所以请依照你的需求挑选你的平台就好,如果要开发微软的程序,那麽用微软的环境还是最无痛的!

 

这篇关于编程应该用 Mac 还是 PC ?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1148465

相关文章

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时,您应该注意以下几个关键点: 平衡精度 平衡精度是衡量平衡机性能的核心指标,直接影响到不平衡量的检测与校准的准确性,从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声,提高磨削加工的精度。 转速范围 宽广的转速范围意味着平衡机能够处理更多种类的磨轮,适应不同的工作条件和规格要求。 振动监测能力 振动监测能力是评估平衡机性能的重要因素。通过传感器实时监

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

mac安装brew 与 HomeBrew

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh >> brew_install BREW_REPO="

Java并发编程之——BlockingQueue(队列)

一、什么是BlockingQueue BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞。被阻塞的情况主要有如下两种: 1. 当队列满了的时候进行入队列操作2. 当队列空了的时候进行出队列操作123 因此,当一个线程试图对一个已经满了的队列进行入队列操作时,它将会被阻塞,除非有另一个线程做了出队列操作;同样,当一个线程试图对一个空