IT行业到底是怎么一回事是否能科普?如果可以如何科普?

Mark wiens

发布时间:2022-11-25

IT行业到底是怎么一回事是否能科普?如果可以如何科普?

  按一个按键,【告诉“iTerm”,让“iTerm”告诉它当前窗口的当前页签,写上命令“emacs ./”】

  小结,命令都用动词开头,比如当独输入 “p” 就是 “paste”,把剪切板第一个张贴出来,

  有个童鞋问我,vim的写代码有几个坑,一是中文的词不是按空格分,要装插件才能分词,二是vim输入状态和中文输入法切换起来很麻烦。

  额,我只想说,你以为我是为啥要用英文写代码注释的。╮(╯_╰)╭ 每个用vim写代码导致用英文写注释的天朝子民上辈子都是折翼的天使。

  各位没入门的朋友,不要看了后留下英语好编程就好的错觉,后面要踩的坑还有很多,英语好少走弯路而已。

  各位入门了但英语不好的同学,也不要觉得我危言耸听,你看,你们连最难的骨头都先啃了,回头顺便啃啃英语,也没有坏处啊。

  这就是IT业的科普。不用劳什子名词,不用让你发出虽然看不懂但是很NB的惊呼。就花短短的30年,让计算机从少数几个机房走到每个人的口袋。

  这个差距大到什么程度?大到普通的、没受过中等以上教育的人,和专业工程师之间的知识差距那么大的程度。

  但这真的只是IT行业(特指软硬件开发这个领域)的起点。后面的一切东西,如果你想真正理解,这个起点是必不可少的。

  不加思索的话,这个问题太好回答了,一句话说的清清楚楚:汽车发动机是把燃烧汽油得到的热能转换为动能的机械装置。

  唉呀你们别讨论这些老古董了行不,我听说现在的发动机有缸内直喷能电脑控制点火时机,这怎么回事?

  现在,假如你需要给一位还停留在“为什么不能点蜡/烧柴禾驱动汽车?”的小朋友解释“缸内直喷”技术——你还觉得“汽车发动机是把燃烧汽油得到的热能转换为动能的机械装置”这句话,算是说清了问题吗?

  很简单,一句话:码农就是把类似汽车发动机工作原理的一切一切,巨细无靡的说给电脑听的一帮子人。

  嗯,财会软件是什么?就是把会计师每天的工作,从必需的小学知识(加减乘除)到大学知识(各种记账法、审核法等等),每一个操作都有条不紊的“说”给电脑“听”——然后通过测试软件证明电脑确实学成了一名合格会计师,可以代替人来工作了。

  ——经常看到一些人愤愤不平:怎么谈起任何问题,都有码农喜欢来插一腿?你们码农怎么就这么狂妄,觉得天下没有你们不懂的领域不是?

  很遗憾惹您厌了。然而,学会任何行业解决问题的手段、并把它“教给电脑,这正是码农们每天的工作啊。

  既然现在这个时代,任何行业都在尝试“自动化”;那么理所当然的,任何行业都必须把自己的工作流程甚至工作原理教给码农、然后他才可能正确的把这些知识“教”给电脑啊。

  程序bug就是码农自己学艺不精,把说明文里面的某个步骤搞错了;电脑照这个错误的说明文来做,自然就会出现错误的结果。

  debug就是发现电脑做错事时,根据错误表现,从洋洋洒洒几千、几万甚至几十上百万行的、写给电脑的说明文里面,找出写错的那行的过程。

  版本管理系统嘛,是因为写给电脑的说明文实在太长太复杂了——前面说过,汽车发动机每个部分的原理,巨细无靡——而且任何一个字甚至一个标点的错误都会导致故障。

  那么,他可能只好来回试:如果理解A正确,那么文章应该这样写;然后B受A的影响就应该是这样……

  如你所见,码农这个说明文实在太长太复杂了,而且往往伴随着码农自身的学习/进步过程——所以,我们必须有个系统,帮我们记住“这些东西是我如此理解原理A时写的”:如果将来学到系统D,发现原理A其实得如此如此理解才更精确,那么就可以循着这个标记,返回来把它改对。

  码农们的说明文实在太过复杂,一个人经常是忙不过来的。所以就需要分工,你写气缸,我写活塞,他写飞轮……写完凑起来,就是个完整的发动机。

  这样的话……这一块块之间的衔接……能不出问题吗?会不会昨天还能用的,今天码农A兴冲冲添加了个新特性,但理解却是错的……然后整个系统就趴窝了?

  版本管理系统就可以帮助码农把自己的文章管理起来:这是码农A前天写的,测试没问题;这是码农B昨天写的,加了个xx特性……

  如此一来,就管的井井有条,不容易出现“昨天还好好的今天就没法用了还毫无头绪怎么都不知道哪里错了后天就要交货了怎么办啊让我死了算了”的悲剧了。

  github是一个网站,它提供了一个免费的版本管理服务。码农们可以把自己的“说明文”委托给它管理起来——代价嘛,你这说明文也自然而然被公开给别人参考了(当然,你可以声明自己支持gpl还是apache或是开源协议,想“参考”你代码的人就必须受这个协议约束)。

  在码农们的世界里,把自己的劳动成果(自以为写的很漂亮的说明文)贡献出来供大家参(chao)考(xi),被公认为是一种美德……

  自然而然的,测试就是检查电脑的工作,看它有没有做错事——尤其是,我们知道,实际情况千变万化:烧一壶水都可能出现停电这种异常情况呢;那么设计个烧开水的智能杯子,400ml的20度凉水定时10分钟烧开。可如果烧7分钟时停电半小时,那么再来电时,47度400ml的水定时几分钟合适呢?

  所以,测试人员要绞尽脑汁给电脑制造难题,确保码农的确事先把所有稀奇古怪的状况都考虑到了、回答好了——如果码农有一点考虑不到,将来电脑肯定会把事情搞砸的……

  等等,你敏锐的发现这里有点东西和自己猜想的不同:你们的工作不是“教会”电脑做事吗?可烧开水这么简单的事,电脑显然没“学会”啊。水响了或者到100度就是开了,为什么要“定几分钟合适”呢?

  绝大多数码农会这样回答你:温度探测不够准,水的沸点受气压影响,没有声音探测器,声音探测器容易受干扰……与其面对烧干水烧坏设备的风险,不如用定时这样的低成本的可靠方案……

  可是,这些回答,你当然不会满意:真会烧开水的电脑,居然不知道什么是“水开了”?我发觉,你们说的“会”,和我理解的“会”,似乎有着巨大的差别……

  思索良久,你显然抓住了关键:能说说,你们具体是怎么“教”电脑做事的吗?电脑是如何“理解”人类语言的?

  如果说不清楚这个问题……我前面这一大坨或者就又成了“用术语解释术语”,或者嘛……又成了玩梗的……

  最最起码,也是一些浮于表面的废话以似乎浅显易懂实则看完还是丈二和尚摸不着头脑的……一堆废话。

  好吧,解释起来也不难……唉呀是这样,电脑这玩意儿压根不懂人类语言……不不不,连编程语言它都不懂,它只知道高低电平……不不不,前面说的不是在忽悠你,只是……

  好吧其实是这样,其他行业的人把他们的工作用人类语言告诉我们,我们再把它翻译成高级语言(比如c、java等等)写的程序,然后我们再用一个专门的程序把高级语言程序翻译成CPU指令码……CPU本身是非常非常笨的,它只会很简单的一些操作;哪怕通过高级语言/库把经常用到的一些功能直接“封装”出来,它仍然笨的不可思议……所以程序员就不得不迁就这么笨的CPU,把和人说话时压根用不着提的东西都说的清清楚楚——而且是按CPU执行程序的思路说的清清楚楚……

  什么?你问CPU怎么执行程序的?那得先从操作系统说起……唉呀想说操作系统,得先从CPU原理说起……而CPU的原理呢,和汽车发动机差不多,它是这样这样的一套机器结构,通过如此这般的一坨逻辑……

  唉呀其实你不用懂这么多。这样想吧,我们做数学题的时候,是这样读题的,然后……用演草本记录中间状态……脑子按一定的解题步骤处理问题……更新中间状态……最后就得到了答案。

  然后,图灵就搞了个装置模拟这个过程,这就是图灵机……当图灵机的“大脑”能支持这些这些操作时,它就可支持所有计算任务……啊?喂?你怎么睡着了?

  也是。这一套一套的要说清楚,不仅比汽车发动机工作原理复杂了许多倍,抽象程度也高了许多倍——废话,一个是实物,一个是看不见摸不着的抽象概念,能一样吗?而且,和汽车发动机原理有夹生饭并不耽误你理解“直喷”可不一样,仅仅字面上理解图灵计算原理是完全不够用的,你需要……举一反别的理解。

  也就是说,你不能简单的“理解”图灵机的原理就算了,而应该是看完图灵机原理,你一拍脑袋恍然大悟:“啊,原来扫雷游戏是这么一回事啊”。ok,你这才算真理解了。

  反之……一旦你拍过了脑袋……你就会想:这人怎么这么啰嗦,这么简单点事这么长篇大论的……我告诉你啊,你这都是废话。懂了的自然懂,用不着你说;不懂的,你再来二十万字,他也一样不懂。

  这么说吧,如果你能搞懂计算原理、然后还能举一反三,其实你已经可以做程序员了——如你所见,计算原理只是一道门槛而已;过了这个门槛,再掌握一门编程语言(没错,过计算原理门槛才可能掌握一门编程语言,否则背熟100门编程语言的所有咒语/考题,都算不得掌握),要么就去学其他行业知识了(应用软件方面),要么……就去探索更为抽象更为神秘的世界去了(软硬件其他基础领域的研究)。

  这点和开汽车不一样。开车你用不着“开发动机”;而程序员呢,那可是每时每刻都在就着计算原理无限发挥……汽车发动机一旦设计定型就多年不变,而程序员每天的工作,就是自个发明一个新的“发动机”,让它“牵引”用户数据,完成过去需要专业人员才能完成的工作。

  换言之,一切表面上的“通俗易懂”,到真正意义上的“懂”,中间必然隔着“计算原理”这样一只大老虎。

  “计算原理“其实并不难。很多小学生都能学会写程序;“计算原理”也难的不可思议,接近一半的大学生都没有半点学会编程的可能。

  这个分界线,就画在你能不能理解汽车发动机工作原理上(最基本的原理,只需理解单缸四冲程的玩具发动机即可;但至少要理解到能自己把这个玩具发动机设计出来并自行改良的地步)——能,那么再经过一步抽象,就过了“计算原理”这关;不能……这科普没人能做给你。

  因为,要么那不是IT行业本身的科普,而是行业的科普——于是闹得怨声载道:你们码农啊,在你自己的领域发言就行了,敢不敢少掺乎点你们不懂的话题(码农:……

  要么……太过基础于是必须和计算原理拉到一起——你们这帮笨蛋,除了玩别人都不懂的梗除了用术语解释术语还会什么?怪不得都说码农语死早(码农:…………

  要么……码农有意见了:三句话就能说完的问题,你扯来扯去这么多,最后还不是三句话(旁观者:前一个家伙啰里啰唆打了半天比方,说的全是三岁小孩都知道的知识;后一群嫌他话多的家伙是不给小学生讲课了,但却只会重复三句“术语解释术语”的无聊冷笑话。一群无聊的geek吵了一年,最简单的一个问题都没说明白,怪不得说程序员都是些三棍子打不出个响屁的呆子……(码农们:啊?我们真说明白了啊。就那三句话啊,真没必要再多了……

  因为码农的话都含有“魔力”,它必须先“喂”给计算原理,然后经计算原理“吐”出来的,才是真正要表达的意思。

  而计算原理又太过小儿科——说白了,它不过是“电脑的思维方式”而已——理解了,你不过是用更啰嗦的话把早已说透的问题重述一遍罢了;没理解,你仍然不过是用更啰嗦的话把说的云里雾里看起来很简单但非要装的很难的问题重述一遍罢了。

  但这个东西又是如此基本。不理解它,你绝无法搞明白,码农们为什么非要曲线救国,非要把个普通的“水开了”的概念搞的玄玄乎乎的。

  举例来说,码农说,冒泡排序很简单,依次比较两个相邻数字的大小,如果前大于后,就交换两者,否则继续;如此反复若干次,没有发生交换就说明数据已经有序了。

  切,码农的病又犯了。这么简单的事,用得着说这么细?还大言不惭别人“绝对没有正确理解”。这是读者我智商太高呢,还是你智商太低?

  ——唉呀人当然用不着这样排序;但电脑必须这么做。因为CPU的能力只有这么高。我们得先把事情彻底搞明白,然后再把问题分解到电脑能懂的程度……

  切,我真没见过这么笨的电脑。我在word/excel里只要鼠标一拉再一点……比这高级几百倍的功能都出来了。

  不骗你,电脑真就这么笨;能让这么笨的电脑变的能让你玩excel——这就是开发一套office,每个版本光发给码农们的薪水都够建几座迪拜塔的原因。

  (旁观的码农偷偷拉了拉姬友的小手:走,别出声。只要计算原理这层窗户纸捅不破,这事就说不明白的。这帮子闷骚男怎么到现在还是明白不了这一点。别管他,还是让我们愉快的搞姬吧。

  注:GNU计划是Richard Stallman在1983年9月27日公开发起的。有人问GNU这个缩写是什么意思,回答是GNU就是GNUisNotUnix的首字母缩写。这在码农世界里叫做“递归”定义——如前所述,码农们说出去的话是有魔力的,它是动的,不可以静态理解。

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186