编程是:简洁质朴、理解问题、烧菜做饭、细致入微、诗词歌赋、艺术画卷、旅行探险、攻城略地、倾城炙恋、一生一世 … …
作者,于会,从 2003 年开始从事计算机软/硬件开发,著名黑客艺术家。DiliOS 操作系统创史人,Jesane编程语言发明者,早期 Linux 内核开发者。精通 Unix 内核、云计算、大数据、VR、人工智能,完成过 CPU-SoC、E-Book、HFC、VOIP 等,整体方案设计和产品的研发。
Table of Contents
01. 编程是,简洁质朴
02. 编程是,理解问题
03. 编程是,烧菜做饭
04. 编程是,细致入微
05. 编程是,诗词歌赋
06. 编程是,艺术画卷
07. 编程是,旅行探险
08. 编程是,攻城略地
09. 编程是,倾城炙恋
10. 编程是,一生一世
01. 编程是,简洁质朴
请朋友们回答一下,什么是计算机编程?
在我十四年的计算机编程中,计算机编程是十分简单的。有百分之八十的时间都在用小学知识。百分之十的时间用的是中学的知识。百分之不到十的才用高中的知识。大学的知识几乎都用不到。我的一个朋友在加拿大,他说一个滑冰运动员,在一次比赛中意外腿摔断了。想想以后做什么呢?实在没什么可做的了,就做程序员吧!
所有人学习计算机编程的第一个例子都是 Hello World,为什么会是这么个东东呢?原因是,圣经中记载上帝用话语 “Let there be light” 创造了天地。程序员用 Hello World 创造他自己的世界,但很多人都没有意识到他正在创造一个世界,否则人人都会更加着迷于计算机编程。
垒砖的民工和垒码的码农,有太多相似之处了,比较不同之处是一个在烈日炎炎或是寒风刺骨的室外工作,一个在空调舒适的大厦里工作。
什么是 K.I.S.S.?别老想着打呗儿,Unix 设计的最精典原则就是,“Keep it simple, stupid”;代码越少,Bug 越少。精简一直是 Unix 编程的原则,精简并且 Powerful!
02. 编程是,理解问题
什么是理解问题?打麻将,是不是需要理解呢?如果做一款麻将的游戏,需要如何设计机器的 AI 呢?初级、中级、高级,难度如何设计呢?
看看如下这些计算机中专业词语的理解,是否到位?程序员相亲,面向对象。程序员洞房,面向过程。程序员外遇,平台开放。程序员按摩,面向服务。程序员离婚,抛出异常。程序员生孩子,面向结果。不相亲的程序员只好一个人寂寞地 new 对象。
机器人,星球大战里的 R2-D2、C-3PO 你还有印象吗?和我说一下吧。复仇者联盟里的 Ultron、Vision 同是生活在一个世界里的人差距怎么那么大呢?一个要毁灭世界,一个要拯救世界。这究竟是为什么?对问题的理解不同产生天壤之别。
来开心一下理解问题的考试吧,如何搞定范冰冰当老婆?怎样用 1 块钱换 100 块钱?树上有 100 只鸟,用枪打死 1 只,还剩几只?
03. 编程是,烧菜做饭
烧菜做饭需要挑选食材,荤素搭配,酸碱平衡。在计算机编程里一样,你需要选择什么编程语言,用什么系统,数据存储。还有先洗菜、然后切菜、再点火等等都是有顺序的。计算机编程也是先定义变量,然后数据初始化,再处理数据等等。
知识就是力量。这句话是谁说的呢?其实知识并不等于力量,Knowledge 加上 Action 才等于力量。
所以就象游泳一样,说上几十遍,倒背如流也没有用,下水试试才知道。
简单的事情重复做,你就是?专家。重复的事情用心做,你就是?赢家。设想的事情不去做,你就是什么?梦想家。
04. 编程是,细致入微
细致入微,我们先来讲一个笑话,来说明细致入微吧。作文课上,老师教授人物的外貌描写。老师:写人物的外貌,观察要细致入微,同学们现在以老师为例子,说一句描写。小丽:老师有一双炯炯有神的会说话的眼睛。小浩:老师的嘴巧舌如簧。小刚:老师有一双修长的手。小明:老师今天早上吃的韭菜,上班前还是跟师娘打了 kiss。老师:你怎么知道的?小明:你嘴唇颜色跟平时不同,牙缝里有韭菜啊!
细致入微就需要献殷勤,无事献殷勤,是为什么?计算机编程就要拿出无事献殷勤的精神,最好你的目的不是为了考上什么级别,或是什么证书之类的,因为那样真的很无聊,没有实效。不管怎样,经常的对编程献殷勤(练习或是其它的琢磨都没关系)之后,慢慢的就有感情了,慢慢你的功夫也就扎实了。练武讲的是:“夏练三伏,冬练三九”,练武不练功,到老一场空。十年磨一剑,黑客必经路,然而编程并不枯燥和痛苦,你必定会迷上她。
据我了解,很多黑客都是因为好奇心而去研究,经过长年累月的坚持,细致入微的去解决每一个难题,最终攻克了一个个难题。而其中的乐趣,和我们看电影、玩游戏、尝佳肴、喝美酒并无两样。生活是如此丰富多彩,浪费生活有太多方式,编程的细致入微会带给你丰富多彩。
我们看看真正细致入微的编程部分:Naming(名句规范)、Expressions(表达式)、Consistency and Idiom(一致性和习惯用法)、Function Macros(函数宏)、Magic Numbers(魔数)、Comments(注释)、Traps and Pitfalls(语言缺陷)、Diligence(黑客论点)。
如果你还没有开启细致入微,那请关注我的其它文章或我的个人主页。
05. 编程是,诗词歌赋
还记得虞美人、满江红这两首词吗?你读的时候感觉如何呢?对比一下,听我说如果你忘记或没读过,那现在先停下来完成这个事情,很重要!如果你不能体会虞美人、满江红之间的差别,你不会明白我讲的“编程是,诗词歌赋”。
不防看看国际 C 语言混乱代码大赛,这代码真是写绝了,而且还有奖品,不过这些真的都是恶作剧啊。不知道从什么时候开始,在某些团体,恶搞还能提高兴趣度,个人建议适度就好。
欣赏一下我的学生写的两首打油诗:先看一下我所欣赏的很有灵气的小伙子。“君子敲代码,小人装潇洒。举头望明月,低头敲代码。少壮不敲码,老大准守寡。生当作人杰,死亦敲代码。”另一个女生写的也不错:“两个BUG鸣翠柳,一行代码上西天。窗含西岭千行码,誓把盖茨拉下马。”
计算机编程里真正的编程诗词是:Global and Local(全局和局部变量)、Be Consistent(一致性)、Functions(函数)、Be Accurate(正确性)、Indent(缩进)、Natural(使用表达式的自然形式)、Parenthesize(括号)、Break Up(分解复杂的表达式)、Be Clear(清晰性)、Side Effects(当心副作用)。
总结一下吧:优秀的程序员,和优秀的建筑师,优秀的财务师,优秀的按摩师没有任何差别,他们本质上都是一群艺人,我相信优秀的程序员人人皆可成为。
06. 编程是,艺术画卷
有米我们先来看看画家和编程有什么相似之外,米开朗基罗的《耶稣被缚》,未完成,纯以线描,留出颜色区域,依次上色。比如先调出肉色,便把人体部分都涂满了;调红色,便把红衫子、红屋顶都填了,如儿童上色练习。仔细看耶稣的脚,脚背依稀浮现拇指纹。大师原来是用大拇指匀开脚背颜色,这不就是雕塑家习气吗?
没有艺术史的帮助,要观看这些作品是不可能的。就算只知道达.芬奇,那毕竟也是知道达.芬奇。但是,艺术史就是一个魔咒,把你包裹在文本的厚茧里,只有长久地注视这些作品,并借助艺术史以外的文本,比如历史、社会学,才能找到咒语的破绽和空隙,冲将出去。其实绘画过程中的调色要涉及的理论可远比我们的变量定义复杂得多,我到是认为编程要更加理智,或是更加简单一些。
数学上有一个分支对程序员非常重要,它叫“离散数学”或具体数学。包括概率学,组合学,图论,归纳证明和其它有用的东西。我会鼓励所有程序员去学离散数学,无论他们能学多少,即使一点点也比完全不会强。至于传统数学,我倒不常用到,但当我需要用到它就会很方便。举例来说,之前我只在工作中用到过一次微积分。我必需为某个服务从正弦波那样的曲线图中计算出每日交通高峰期负载。最简单的方法是求出特定时间内 1/24 曲线的积分。如果我不懂微积分,我就做不出合理正确的估算。
现在我写游戏的时候,我扎实的平面几何知识作用极大。日常基本工作中用得更多的是代数和线性代数。但是很少用到三角学和微分方程,微积分也很少用。
我会说我的数学基础带给我 5% 至 10% 的进步。如果我懂的更多,毫无疑问我会变得更好,所以每个星期我都抽出几个钟头来学习数学。
我喜欢物理,毕生都在探索尝试掌握量子力学的基本结构。但我没觉得物理对我作为一个程序员的工作有任何帮助。当然了,如果我在物理领域工作,象 3D 游戏编程,或某种类型的模拟,那就不同了。
近代最伟大的数学家,你知道的是谁呢?我今天来向你说说哥德尔,他最伟大的理论莫过于“”。如果这个有点难,有点类似于说谎者悖论,又叫谎言者悖论。公元前六世纪,克里特岛的哲学家埃庇米尼得斯(Epimenides):"所有克利特人都说谎,他们中间的一个诗人这么说。"这就是这个著名悖论的来源。
电脑的很多方面来自数学:归纳,递归,逻辑等。
再看看音乐家的口味,大千世界既可由音乐谱写而成,亦可由数学符号表示而成。五线谱演奏着现实世界的万般情感,而数学公式则表述着客观世界的演化本质。音乐创作时,会有整体的构架,会有音调,和声,曲式等规则。这些相似之处在编程里也一样是架构,然后类、方法、变量等规则。音乐创作的灵感和编程创作的灵感来自同一个地方,当然这些都和个人的信仰有密切的联系。
计算机编程是艺术活,和音乐家、画家、数学家、烘焙师、足疗师、按摩师一样,还记得卖油翁吗?优秀的程序员,和优秀的建筑师,优秀的财务师,优秀的按摩师没有任何差别,他们本质上都是一群艺人,我相信优秀的程序员人人皆可成为。
07. 编程是,旅行探险
你喜欢旅行探险吗?这需要有足够的勇气和野外生存的能力,谁都想开着路虎带着辣妹去野外露营。但要让你去打死几条蛇烤着吃,用蛇皮做水带来烧水喝,恐怕你早已经吓得腿发软了吧?
但对于真正的探险者来说,独自幽然的一人去探索那令人着迷的未知之地是多么令人向往。如果这一生再有机会,我一定要带领部队向摧毁魔戒的大本营摩多出发。对我开发的产品来说,这一切是如此的相像,当产品发布时的万籁俱寂,那带来的可不只是财富、名誉、地位 … …
和我一起踏上编程之旅,要远征出发:护甲、腰带、防御保护。键盘,桌椅,整装待发。架构,设计,排兵布阵。数据,算法,运筹帷幄。咖啡,音乐,悠然自得。封装,继承,缓缓进发。语句,函数,仔细勘察。盾牌、头盔、大宝剑,全副武装。弓箭、干粮、支小舟,独行寻宝。还有我的,护心镜、箭袋、前方还有更多宝贝 … …
编程里的调试程序和福尔摩斯侦探双胞胎一相的相似,当福尔摩斯走入犯罪再场时他根据犯罪现场的每一个细节来去推断出杀人凶手。调试 Bug 需要打断点,然后反复进入函数、循环、判断、反复测试。
有时你会发现程序象一头怪兽一样难以制服,如果赶工期那简直就象遇上了大海上的惊涛骇浪,稳住、沉住气,如果你拿出足够的勇气和信心,一个模块一个模块的去细化,旅行探险般地挨个去解决,怪兽就一定会被你制服。当一切都解决时,倒一杯加冰的 Black Label, 放一曲柔断情肠,刚猛劲爆的摇滚乐。。。。。。
08. 编程是,攻城略地
攻城略地,独霸天下!精忠报名,死而后已!历史上有多少人为此舍身取义、断头舍命、大义凌然,有千百个佳话流传至今。我不禁有些诧异,现今的国内,尤其是孩子,祖国的下一代,英雄主义好象已经荡然无存。曾几何:“七战匈奴”的卫青、“匈奴末灭,何以家为”的霍去病、“满门忠烈”的杨业、 “精忠报国”的岳飞、“留取丹心照汗青”的文天祥、“抗倭名将”的戚继光、 “抗清英雄”的袁崇焕、“吾头可断,身不可辱”的史可法、“收复新疆”的左宗棠、 “收复台湾”的郑成功。还有谁记得他们?还有谁敬重他们?
有人了解美国吗?美国有一个乐队叫 Megadeth,他们出过一张专辑叫《The World Needs a Hero》,美国的英雄主义从某些方面是我所认同的。蝙蝠侠、钢铁侠、蜘蛛侠、超人、绿巨人、金刚狼,这些英雄里面我更喜欢钢铁侠,因为你发现没有钢铁侠是可以实现的,明显和我们国内的孙悟空、哪吒、葫芦娃之类的不是一回事。你想成为孙悟空那样的英雄吗?你如何努力呢?天方夜谭,无法实现。如果你从小就告诉你孩子钢铁侠是真实的,那他从小就会去焊电路来搞个机械手臂之类的,学习编程搞个人工智能系统类似 Javis 之类的,就是想一下都觉得酷得不得了。The American Needs a Hero, The China Needs too.
其实玩游戏也大多是要在虚拟世界中去“攻城略地”,需要整天疯狂的升级、打怪、装备、技能、结盟,等等。而这一切都是为了在“攻城略地”的时候要大显身手,找到那种砍死所有对手的快感。你有没有发现在游戏中的英雄主义和美国的英雄主义的差别呢?美国的英雄主义变成了正能量,孩子从小就树立了正义、勇敢、责任、荣誉的心,在学习中玩,在玩中学习,而最终他将成为一下什么样的人?而在游戏中的英雄呢?往死里打游戏,一打几天几夜不睡觉,找另一伴也成天打游戏,以后生的孩子从一生下来就打游戏。而我也有个建议,打游戏和写游戏有什么区别呢?打游戏不如自己写一个游戏。
想独霸武林,要学功夫。要夺取“九阳神功”、“六脉神剑”、“凌波微步”,武功秘籍是最好的指导,这省去了我的开创、较验、调整。打游戏时有很多隐藏关卡、很多十分难打的 Boss、还有那些奇奇怪怪的 NPC,最快最好的办法就是去查考“游戏攻略”。独霸武林,要去查考“武功秘籍”;畅爽游戏,要去查考“游戏攻略”;酷帅编程呢?答案是:要去查考“Programmer Guide”。《编程指导手册》里会指导我们如何入门、如何进阶、棘手问题,等等。很多人认为编程很难,是因为他们没有发现秘籍,有了《编程指导手册》你就象有了“游戏攻略”、“武功秘籍”一样可以开挂去一路兜风了。
如何成为编程界的大师(黑客)呢?编程界还有一句名言,“最快成为大师的方法就是剽窃。” “剽窃”在其它领域是令人唾弃的,但在计算机编程里是十分值得推崇的。我想起一部武侠:天龙八部里比较厉害的两个人物,一个是星宿老仙,出场时还有口号:“星宿老仙,法力无边,攻无不克,战无不胜。”,他最厉害的一招是吸星大法。还有一个是慕容复,他的武功博学而著称于世,更号称“以彼之道,还施彼身。”有趣的是这两个人物都和“剽窃”有一些关系,你能说出来吗?。最后还要提醒剽窃要有道,如果没有大师的指导很可能就会走火入魔。
09. 编程是,倾城炙恋
你是否有过刻骨铭心的爱情?我曾经爱上一个人,爱上那种感觉,爱上那种美好。也许我们有过一起的心跳,也许只有一刹那的爱情,也许我太年青,也许只是也许。最终,一个追求了现实,另一个依然怀念。那份年少的心还能回忆,那份青涩还能回味,但都留不住岁月。我也不想说些什么,没有可怜,就让心里的那份凄美的感情一直珍藏。我的青春,我完美的青春,感恩上天一切的安排,是否会有再一次相见。
来一曲李丽芬的“爱江山更爱美人”:爱江山,更爱美人,哪个英雄好汉宁愿孤单。好儿郎,浑身是胆,壮志豪情四海远名扬。人生短短几个秋啊,不醉不罢休,东边儿我的美人哪,西边儿黄河流,来呀来个酒啊,不醉不罢休,愁情烦事别放心头。
那酝酿良久的架构、揣摩许久的设计、完美重构的项目、行云流水的代码,这一切就如同父母亲热切盼望孩子的出生。所有的回忆都是如此的美好:设计时、讨论时、编程时、调试时、排错时、失败时、成功时、发布时 … …编程,像四季一样迷人;时而是春风荡漾、时而是暴雨倾盆、时而是秋风阵阵、时而是冰雪纷飞 … …
程序不是功能完成就 OK,了那只是一个普通码农,而黑客会深思:Correctness(正确性)、Robustness(健壮性)、Reliability(可信性)、Efficiency(效率性)、Reuseability(复用性)、Usability(可用性)、Readability(可读性)、Expansibility(扩展性)、Portability(移植性)、Compatibility(兼容性)。
说起黑客,一定要有格调,要有装备:先说咖啡,就是程序员的标配,最好是现磨的,加奶、加糖随你的口味。听说猫屎咖啡是极品,下次新的项目配备。显示器一定要大,而且一个都不够格,最少两个。键盘,必须机械的,Cherry 原产,白轴、黑轴、青轴、茶轴、红轴、任你选。坐椅是必须酷的,程序员梦寐的黄金坐骑:Herman Miller Embody,你千万别以为 Herman Miller Embody 设计是在耍酷,Embody绝对是我们坐过的最舒服的椅子(没有之一)。卓越的性能,全面可调节的设计,创新的 Pellicle,三种不同尺寸,适合长时间就座;是打字、阅读、开会、接听电话或沉思的不二选择。装备齐全了,哪儿少得了音乐,轻音乐、爵士、摇滚乐、重金属 … …,来一场轰轰烈烈的倾城炙恋,还等什么。
10. 编程是,一生一世
是时候总结一下了,编程是:简洁质朴、理解问题、烧菜做饭、细致入微、诗词歌赋、艺术画卷、旅行探险、攻城略地、倾城炙恋、一生一世。编程是 ... ...,更多的就留给你了。
既是这样,就让我们一起举起右手来宣誓:“在我有生之年,我会爱你,珍惜你,忠诚于你,不管健康还是更健康,富裕还是更富裕,直到死亡将我们分开。计算机编程,我们一生一世。
搜狐网 报道:http://www.sohu.com/a/195104762_115588?qq-pf-to=pcqq.group
相关文章
了解千锋动态
关注千锋教育服务号
扫一扫快速进入
千锋移动端页面
扫码匿名提建议
直达CEO信箱