免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: starwing83
打印 上一主题 下一主题

[其他] 我的编程生涯 - 已更新到第24集 [复制链接]

论坛徽章:
0
451 [报告]
发表于 2013-02-25 16:52 |只看该作者
我喜欢从后往前看  呵呵

论坛徽章:
21
白羊座
日期:2013-08-23 15:49:17金牛座
日期:2013-10-08 17:00:03处女座
日期:2013-10-12 11:54:11CU十二周年纪念徽章
日期:2013-10-24 15:41:34午马
日期:2013-11-27 14:07:21巨蟹座
日期:2013-12-04 10:56:03水瓶座
日期:2013-12-04 15:58:00亥猪
日期:2014-05-24 16:02:3115-16赛季CBA联赛之辽宁
日期:2016-11-07 13:52:53戌狗
日期:2013-08-23 16:15:31白羊座
日期:2013-08-24 21:59:24巨蟹座
日期:2013-08-25 16:34:24
452 [报告]
发表于 2013-02-25 16:55 |只看该作者
楼主牛B,我就是想写也没那么多东西写啊,而且那些妹子和姐姐神码的也没地方弄去啊

论坛徽章:
0
453 [报告]
发表于 2013-02-25 19:28 |只看该作者
顶起啊 支持努力的人们

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
454 [报告]
发表于 2013-02-26 06:36 |只看该作者
我擦……一觉睡忘了= =补发补发……………………

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
455 [报告]
发表于 2013-02-26 07:22 |只看该作者
我的编程生涯(21):新的开始

    时间就在这样的一次次瞬间中流走。离开上海的时候,才发现自己其实在哪儿都一样
。一个人有了寄托,即使是在任何地方,又有什么区别呢?回到武汉的时候,感觉自己的
心特别踏实。

    有时候我很讨厌别人问我“你有什么作品”,因为我其实都没有什么能拿出手的东西
。从开始到现在一直是这样。很多东西都是半途而废,解决了最大的技术困难,或者遇到
最大的技术困难以后就会放弃。每次看到别人华丽的作品,自己其实总是非常的嫉妒,但
是轮到自己做,却又发现自己其实也做不好。

    于是,就去学习,但是学习的过程又是那么迷茫。我很少很少再像那个春节一样了。
什么都不关注,什么都不关心,一门心思地就在一个项目里面。不满意就推倒重建,直到
做好一样东西。直到那个时候,我才隐约明白,其实要做好一样东西,所需要的,根本就
不是学习,也不是能力。而仅仅只有坚持下去的动力。只有这样的动力,才能让你一直前
进,直到做到你想要做到的事情。

    我开始思考自己到底会什么。我会一门计算机语言。但一门计算机语言仅仅是能够让
我告诉计算机,我要的是什么。这种告诉本身没有决定结构。我要的是很完美,很漂亮地
告诉他我需要什么,而且当我的需要变更的时候,我也希望能够很快地去改进。我觉得我
需要一种特别的东西,一种能够“不变”的东西。一种即使我很笨,我很懒惰,但是只要
坚持下去,就一定能够构建好的东西。

    于是我就开始学习函数式语言了。

    最开始学习的函数式语言其实是 ELisp。因为有了 VimL 的经验,我觉得一门能够和
实际的应用程序捆绑的语言应该是相对来说比较好学习的,不过我错了……虽然Emacs的
Info看了很多很多遍,但是其实我还是没有掌握这样的一门语言。ELisp给我的感觉,就
是一个补丁垒着一个补丁,完全没有任何的美感。后来学习的 Haskell 充满了美感,但
却太过艰深,我只是翻译了 Haskell Report 98 的前四章,就基本上没有动力去学习了
——因为它能够做到的,我用 Python 也可以,而且“似乎”更简单。我为什么要再去学
习这样的一个除了初始的心悸以外,再感觉不到新意的东西呢?

    然后了解了一点 Lua,在看了一上午的 tutorial 以后放弃掉了,因为似乎没有看到
什么很特别的地方。感觉好像都是很平常的功能。

    其实这样的情绪叫做“浮躁”。

    我和妈妈直接飞回到了武汉。我开始又因为ctk的开发,陷入到了一种浮躁的气氛里
。总是觉得学习的东西已经足够,因为能做出 ctk 这样的东西,又觉得似乎缺乏了一点
真正重要的东西,有些重要的东西隐藏在我已经做到的事情中,我没有“提纯”这些想法
。我开始回到大一漫无目的的学习之中,开始等待新的契机。

    然而我等到的却是一些其他的东西。

    暂且不谈这些。在学习过这么多东西之后,其实我经过了很长时间的摸索才慢慢地搞
清楚一些事情。对于语言,对于技术,到了现在我才明白我忽略掉的,究竟是什么东西。

    其实,我们可以从头来看C语言。所谓一门语言,和这门语言能够达到的目的,实际
上是完全不一样的东西。一门语言,本质上是提供给你“砖块”,让你能够对你的概念进
行表达,至于表达出来的东西如何被翻译成具体执行的东西,这是另外一个完全不同的次
元。根本就不该在学习语言的时候去了解。换句话说,适当的无知是一种保护。

    从这种观点看。我以前学习C语言的技巧,其实根本就是错误的。如果我现在要教一
个人学C语言,我大概会这么跟他说:C语言的单词是很少的,32个关键字,三十多个符号
,以及在某些地方你能起的名字。这就是C语言的符号总和。所谓C语言的语法,就是如何
将这些符号组合起来的方法。有些组合过程是合法的,有些是非法的。

    怎样的组合呢?这里我们从上面往下面进行分析好了:对整个C编译器处理的结构而
言,一整个文件就是一个“外部声明”的顺序结构。所谓“外部声明”包括两种,一种是
“函数定义”,一种是“声明”。而函数定义的第一部分是“函数原型”,而后的大括号
里面可以包含“语句”或者“声明”,而“语句”包括了“表达式语句”以及其他的各种
语句,声明则包括了各种类型的声明。所有的这些,都由语法严格的规定。也就是说,只
需要生搬硬套,你就不可能弄错它的结构。

    想到了什么?规则。是的,在这个层面,没有智慧可言,只有规则,因为规则是最不
容易出错的东西。

    而,这样的规则背后,则是C语言的语义。相比起来C的语义是非常直接的:所有的声
明都有机会变成定义:当它是外部声明时,它绝不会是定义,否则,如果它是唯一的出现
,那么它就是定义。定义的含义是说,在具体的执行的时候,有一个“状态包”对应于这
个声明的名字。比如说 int a; 这样的声明,C语言规定有一个能放一个数字的“状态包
”对应于a,这个状态包可以是状态0,可以是状态1……甚至可以是状态65535甚至更大,
但是它有个最大的状态,被称为 INT_MAX,a可以取这些状态中的任何一个,也只有一个
。所有的变量都是这样,可以取某个状态中的一个,这样的“状态包”C语言给了一个定
义,叫做“目标”(object)。

    每一个定义对应一个目标,这就是C语言的核心精神。接下来的所有的内容,就是这
个目标拥有什么操作。C语言有一个很神奇的特性,就是所有的目标都是由被称为“字节
”的“原子目标”组成的。你可以把目标拆开变成单个字节,也可以组合起来,但是,目
标拆开以后各个字节有什么规律,C语言没有规定给你,至于组合起来以后还是不是以前
的那个目标,也有严格的规定。但是,既然目标是由原子组成的,那么我们就可以让目标
产生某些“化学作用”。比如说,同样是一堆原子,我可以认为它们是整数,从而进行整
数操作,也可以认为它们是浮点数,从而对它们进行浮点数操作。虽然这样的“认为”需
要满足一定的约束,但是就算是这样,都给C语言提供了很高的灵活性。而对于一个不同
类型的目标,拥有什么样的操作,则是C语言规定死了的。比如说,double是不能有取余
操作的。

    C语言其实就只有这么多东西。理解了声明的语法,记忆了语句和表达式的各种不同
结构。明白了“目标”的原理。差不多C语言就学会了。在这一整个过程当中,我们根本
没有提到计算机。

    从这样的一个旅程中我们能得到什么呢?很多。最直接的一个收获就是关于“抽象”
的。我们有很多类型的计算机。它们可能有很多类型的计算设备和存储设备。但是只要他
们符合计算机的基本结构,就至少一定有这样的两种设备。所谓“目标”的集合,其实就
是计算机的存储设备的抽象,而所谓“操作”,就是对计算机的计算设备的抽象。因为我
们并没有直接去谈论某种计算机,因此我们才能够获得操作各种不同计算机的能力。我印
象最深的一句话是:“假设是魔鬼”,不去假设,就不会被限制。而不去假设的最好办法
,就是对自己的目的进行抽象,取其筋骨,而不是直接照猫画虎。

    另一个重要的收获是“分割”。我们将我们的目的(操作计算机)和目的表现方式(
语言)完全地分割开来。这样就可以很灵活的用一种东西去表现同样结构的其他东西了。
说白了,这就是Haskell想告诉我们的知识:范畴。可惜当时我并没有认真学习,以至于
走了那么多的弯路才真的理解这一点。

    抽象和分割,是即“枚举和分治”之后,我们手上握着的第二把刀。第一把刀能让我
们写出我们想做的事情。而第二把刀则让我们能够让我们的命令有条理而有规律,好理解
而维护简单。有了这两样东西,我们才能真的开始做一些真正有用的东西了。

    从09年元旦的CTK设计开始到现在已经过去了4年,在这四年的时间里,我才最终掌握
了这第二把刀。这样的领悟,比所谓“面向对象”要更加地深刻。也是从09年开始,我慢
慢地放弃掉了 C++,而转入用纯C来进行开发。因为我开始明白,论枚举和分治,论抽象
和分割,其实C语言已经完全足够。

    然而,09年的我,对于这些东西,还只是萌芽而已。我并没有真的掌握这些后来改变
了我所有技术视角的东西。大三的下半学期,我还在头疼没有考过的《电子工程学》,还
在想着组织班上的同学学习Python语言,还在和亦然有一搭没一搭的打着电话。有时候觉
得,如果时间能够倒流,那么很多事情就不会那么麻烦。但没有这些麻烦,我们又如何获
得现在的拥有呢?期望时间倒流,其实也只是期望天上掉馅饼罢了。

    但,如果有可能,即使付出任何的代价,我也希望能再回到那个时光,因为那是我大
学里面最惬意最美好的时光。

    (未完待续)

论坛徽章:
1
辰龙
日期:2014-09-21 18:41:43
456 [报告]
发表于 2013-02-26 07:39 来自手机 |只看该作者
7:22发帖,你不会是一夜没睡吧?!

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
457 [报告]
发表于 2013-02-26 07:41 |只看该作者
回复 457# fzbm2010


    没,我昨天六点睡的,四点醒了= =恩

然后想起来昨天需要更新= =

但是接下来的故事还没想好

所以只好更新干货了= =讲故事咱不在行,讲编程难道咱也不在行么~是吧~~哈哈哈

论坛徽章:
1
辰龙
日期:2014-09-21 18:41:43
458 [报告]
发表于 2013-02-26 08:00 来自手机 |只看该作者
写的很好,真情实感才能打动人。另外C++真的不行了么?为什么这么多高手放弃C++回来用C?

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
459 [报告]
发表于 2013-02-26 08:05 |只看该作者
回复 459# fzbm2010


    不不,其实不是不行,C++完全是可以做很多好玩的事情的。只不过我比较喜欢选择称手而又熟悉的工具,不太喜欢加农炮。仅此而已。

论坛徽章:
0
460 [报告]
发表于 2013-02-26 08:47 |只看该作者
lz你标题忘更新了...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP