QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3021|回复: 2
打印 上一主题 下一主题

如果你想对编程感兴趣

[复制链接]
字体大小: 正常 放大

22

主题

9

听众

652

积分

升级  13%

  • TA的每日心情
    奋斗
    2014-8-29 14:46
  • 签到天数: 45 天

    [LV.5]常住居民I

    自我介绍
    有勇气,有毅力,有信心

    社区QQ达人

    群组第四届cumcm国赛实训

    群组Matlab讨论组

    群组学术交流A

    群组计量经济学之性

    群组C 语言讨论组

    跳转到指定楼层
    1#
    发表于 2012-8-3 17:23 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    九月十一,是我生日,全世界都在关心拉登杰作周年纪念,也是我做计算机组成试验的第一天。我在面包板上发了几块74LS34,74LS194,74LS74等等,接好线,打开电源,清零,启动,然后就看到上面的指示灯按照我设计的节拍把放在锁存器里面的数据放到自己设计的四位总线上,然后在不同的节拍送到不同的芯片,一丝不苟,跟计算机里面的时钟周期一模一样......我突然觉得,我对软件设计,失去兴趣了.
    & `8 G! p. I1 Z. p回想最当初,也就是初中,用edit做一个bat出来,也是很大的乐趣,到了高中,用javascript做html,更是可以给同学大大炫耀一番.进入计算机系,浏览大大小小的网站,两年的大学生活更开阔我的眼界.不过,我的学习热情,都是从问为什么开始的.我记得我的第一个为什么就是"计算机在起动前为什么知道启动区在磁盘的什么地方?",然后就是"为什么字符串组成的代码能够让网页动起来",接着是"既然我的编译器要在操作系统下面才可以工作,那么操作系统又是怎么写出来的呢"甚至是"汇编语言的编译器是用机器语言写的,但是没有现成的程序,怎么让计算机识别键盘的输入呢......这些问题,伴随着我的学习过程,可以说是动力的来源.因为我每次了解了一个知识点,就有新的,而且往往是更基础的知识点冒出来,源源不断.所以就不断地学,不断地深入.但是,当我看到我在实验室做的"计算机的一部分"正常工作的时候,我突然感觉,那些所谓的"为什么"都不重要了,因为计算机大不了就是这么回事.因为我已经可以用基本的三态电路做个很简单的芯片和辅助系统出来了,用手动节拍来控制它的工作.到这里,再也问不下去为什么了.因为不管什么程序不管什么系统,也就是控制这个节拍的规律.突然觉得,虽然我还有很多不懂,但是!,也不是我一直在寻找的本源了!
    9 p+ e  {# ^" ?1 F我不知道应该对这种感觉说什么,解脱?我回忆起学程序设计语言的过程,我当初学习的动力,并不是学了要解决什么实际问题,不过是想证明我能过让他动起来而已!但等我了解多一点以后,才发现高级语言没有其他基础的服务,也是不能让我随心所欲操纵的.所以就去看汇编,看操作系统,看进程源语.最开始写dos下的程序,对自己很不满,因为我用的都是在windows下运行的.等我可以写windows程序的时候,我却发现为了支持通配符和灵活的参数我更宁愿他在命令行执行.在我学c语言的时候我向往用visual basic来化一个程序,但等我学了更多可视化编程以后,我却更愿意去分析编译出来的汇编代码.虽然学习是如此的反反复复,我还是乐此不疲,因为我的目的只有一个:我要更好地掌握他.   E& F0 s* L; K5 ?! }1 K, G
    现在,我的目的达到了,因为,我可以说没有什么代码我看不懂了.大不了我看汇编出来的代码,再不行,我可以观察节拍脉冲了!也就是说,整个计算机的发展,我终于有了一条线,但有了线我接着要做什么呢?却突然找不到答案了!回想起我的学习过程,换来的不过是一个"了解清楚"而已,太让人觉得悲伤!突然头脑一片空白,以前看到论坛上说什么什么书好,都有想去看的欲望,现在却对自己说,没甚么了不起的,以后有时间看,难的东西不多了!于是东看看西看看,开学买的好多本书,比如,还有网上的英文jvm的教程,都没有太多激情去看了,到是天天网上聊天关税,也其乐融融.% `" g' C; ?, c. G5 J9 y
    相信好多人跟我有类似的感觉.现在,我只能说,我们不过是一些技术爱好者而已,不过是想看看为什么的人,更本不能算是程序员,不管你写出了多少好的程序,如果是怀着这种目的在学习工作,你会有老的一天,就像我现在的感觉,因为你永远都跑不过技术的! 2 K1 ], a1 h. p7 _! G
    佛洛伊德说过"治疗的最好方法,就是把病说出来".既然我都认识到了,我想,我也有焕发青春的一天. 4 _: k$ @. @- t' Q$ Q3 p. G
    那一天来了.
    : l8 Z7 P9 V) T2 F( x我们寝室的特别喜欢diablo,我无聊,也加入了他们的队伍.我发现在游戏里面找东西要按着alt不放,他们当然习惯了,我却不行.不过diablo又一个外挂程序,好像可以截获游戏的消息,来作出地图的全貌.我想了想,也用一个钩子,拦截里面的键盘消息,当我在游戏里面按下一个自定义的键,程序就往游戏窗口发送一个alt WM_KEYDOWN的消息,再按一下就来一个M_KEYUP,于是我找东西的时候就爽多了.
    & i/ s2 P- e4 q1 z我爸爸在当网管,说穿了就是修计算机,恢复系统.但是一个ghost文件就有2g,放不到刻录机里面的,于是只有分割成小文件,要使用的时候再恢复.我记得当初的arj.exe可以完成这个工作,但是可不可以分割成600m,就说不定.而且既然是重新装系统,也就只有dos,windows现成的程序是不能用的,于是我想了想,用c花了100行,同时解决了分割和合并的问题,而且可以指定缓冲区大小. 3 S. C1 z  U% z% z& _- i! p
    这两个程序的代码,不过200行,花的时间也不过一天,但是,做完后我才觉得这200行程序比我一辈子写过的程序都要多! ) p! K/ `! j7 \+ \: E
    是他,让我知道了程序员的本质是什么:为客户服务! 7 h% x% o: V5 A7 ?& U+ L. I
    我在写这两百行程序的时候,完全是全新的感受.因为里面没有继承,没有多线程,没有记不住的api,更重要的是:所有我以前写的程序,都是为了学习,都是为了试验一种技术或者证明一些语法.而这两个程序,完全没有这些,一切都轻车熟路,胸有成竹.+ y( b  [) h3 w+ k
    同时,由于我了解了整个计算机的工作过程,我有从分的理由来为自己选择编程语言,库函数,数据结构等等,以前写程序,是我为他们服务,现在,是他们为我服务!我找了一种心平气和的感觉. 6 T. ]$ W2 x' w* o5 i# n
    我突然想到我们教授说的一句话"真正的计算机专家,是不懂java的人,因为他没有时间!"当时我很不以为然,不自己写程序,不以coding为职业,还算是专家?现在我才知道,人家根本不屑.以前崇拜写程序的,是因为是我想写代码来体验技术,而计算机的本质却是为人服务的.让他们来coding,远不如让他们去研究"模式匹配","程序证明","软件质量控制"等等算法和基础理论的帮组大,那怕做哪些工作一辈子也不能有一个自己写的程序. : T2 k0 b! D3 N0 t1 e( {& d! [
    我们老师也说,好的程序员在好的工作环境生活是很有规律的.当时我也以为,如果缺乏热情的程序员,可能不过是井底之蛙而已.但是现在我觉得,如果你现在的技术足够应付你的工作,现在的积累足够让你很快学习好新的技术,你根本不用着急.现在回想起以前通晓看"vc内幕",才想起如果当初先学好c++,windwos api.有很好的积累,看那本书不过是消遣而已. : _9 w, P) ?( I- g" k" T
    等我想明白这些以后,我也就不太去关心j2ee跟.net的世纪争霸了.因为那些东西我现在用不着,他们既然是高效开发工具,以后要用学着也肯定很快.反而更去关心以前不太重视的数据结构,操作系统等等,现在看了一遍还觉得不够,还要去找点奥林匹克的题目来研究.那些东西,以前我都认为是"好学生"看的,不是有"实际能力"的学生太去注意的. , T; t/ O. y' k6 a! ^9 V( X
    所以我突然觉得,我走了很多弯路!
      X9 O8 Y& b) c$ B然后我反观现在的论坛,讨论"技术"的太多,讨论"体系和基础"的太少,特别是在参与了两次讨论以后; }: f5 X/ V9 Z0 u
    http://www.copathway.com/cndevfo ... 15133&forum_id=
    6 C+ T5 j% d- h* I5 f9 F9 a" qhttp://www.copathway.com/cndevfo ... 15139&forum_id=
    , c- S% T% a' N9 A& u我认为我们的学习方法和顺序需要改进,因为我们本来可以很省力的.因为在你花时间做好很多不能直接出成果的"基础学科"以后,再来看现在的好多开发过程,就有点像先搞清楚语法,然后查阅函数库一样的简单.而且不会被新的词语弄得昏头转向!回想起我学电脑是在1994初中,连windows95都没有的时候,一直追逐"技术"到现在,如果不是我很有决心和毅力,早就放弃了,因为在这将近10年里面,计算机程序设计上,出现了多少吸引眼球的东西! + p& p7 K7 `- w2 r; W; X. H# o6 @
    我把我的感受写出来,是不想让更多人浪费一个5年!侯捷在<多线程程序设计>里面说提到,一个cup做多个线程,里面的同步和互斥是在6,70年代的djjiskra就解决了的!同时数据结构里面图的最短路径,也是djjiskra解决的.想起来,我浪费在自以为"动手能力"上面的时间,是多么宝贵!
    ) Q) f9 c7 G7 K# H5 W) s话说回来,我的意思并不是学新技术就不好,而是应该分清楚主次!学用技术和打好基础本来就是辩证的关系,没有基础学技术很难,很浪费时间;没有技术的支持,基础永远都不会得到体现.但是我觉得现在好像一切都是新技术新名词,好像大家都认为所有的技术都是必须用到的,而不考虑问题本身的需求,所以把我的想法拿出来提醒大家."磨刀不误砍柴工",这句话以前我一直都没有做好! * O/ ]9 u8 V# Y0 N+ r
            ' |" q- n1 l; E" p

    * Y2 k$ f' ], y" ?
    ! K+ ~" b# ~0 X2 r. c
    2 {$ F0 T1 E7 e  D: N4 C* Q5 U4 V: S3 o6 t: F$ b
      但什么才是软件开发的葵花宝典?   p' `3 l& }1 F
      让我们先从一些现象出发。我们的前提是,软件开发是一项智力密集型劳动。对于智力密集型劳动,我们观察到的现象是,个体的表现差异很大,团队的表现差异很大,组织的表现差异很大,国家的表现差异很大。这不象体力占主要的劳动,象百米王跑百米的速度也仅比我快50%。但在棋类运动中,一个高手可以车轮战数位低手,而且毫无例外地将他们一一击败!
    : b( [8 t) ~1 _& O7 o7 u1 I: x  这些智力运动员表现出的特点是,计算精确而且速度快。其行为很象东方不败。虽然关于葵花宝典的传说很多,但最准确的描述只有一个字“快”。东方不败已经快到了吓人的地步。就象卡斯帕罗夫已快到了深蓝的地步。 ( n& g) P$ H! S0 ?! X( a) b+ K
      有一则关于物理学家玻尔的轶事,有一次玻尔在普林斯顿大学听两个年青教授演讲他们的工作成果。期间玻尔突然发言说,如果照你们的研究算下去,会得到一个很有意思的推论。结果两个年青教授回去计算了两天,果然得出了同样的结论。玻尔是如何做到这样快的? . U# p  }3 _+ H  q9 _6 i
      在软件开发中,我们同样注意到这样一种高手,他们可以每天写出一千行左右的高品质代码。他们可以运用已有的一些软件包,迅速完成一个新的产品。他们可以在很短的时间内,学会一项新的程序语言或是新技术。他们表现出一种神奇的速度。 ( F2 [6 z+ t% g7 O  `1 G3 J
      在武侠小说中,所有的高手都有一些凡人不能企及的表现。象张无忌学太极,用龙爪手击败龙爪手名家;乔峰用太祖长拳击败天下英雄;姑苏慕容以其人之道还治其人之身,令狐冲一剑剌瞎十几双眼睛等等。我认为,之所以他们能做到这样,关键是在于他们快。
    1 E# u0 u8 E- C0 B7 R7 F3 A  快并不意味着不准或品质差。快与品质并不矛盾。 , S9 e- A& j9 e9 K' u+ q& D' L
      高手的快,其实包含着很高的品质在其中。如果你因为高手的快,就质疑其品质,那就相当于在问:东方不败出手那么快,会不会刺不准?东方不败并不满足于刺死对手,他会在对手身上刺朵花。他把杀人变成了艺术。准确来说,他真正的兴趣不在杀人,而在于艺术。 3 m) ?5 H( Z  Z6 U0 k' G: F" Y# d
      退一步说,就算东方不败第一击有点偏差,他稍作修正后,马上跟上的第二第三击,也会击中他想击中的地方。在武功差的对手剑还没拨出来的时候,他已杀死对方并刺上了一朵花。
      B7 E  Z! k' z9 I- Q) r  所以真正的软件高手,他并不满足于他的代码能有效地工作了,他认为编程是艺术,并醉心于其中。在低手能写出一个版本的时间里,他已经写出了第十版。其品质当然不可同日而语。就象一个九段棋手,在给定的时间里,他能计算十种可能,并将每种可能计算到100手之后,从中选择一种最有利的下法。低手岂有苟全的机会? ' o5 @8 l0 m; I% f, Z$ N- L
      高手写软件总是不停地在重构(refactoring)。高手喜欢迭代式开发。高手说,增量就是打补丁,迭代就是推倒重来。对于软件这种东西,写一遍它可能ok(做到这一点也不容易),写十遍就是一个伟大的产品,再多写一遍它就更伟大些。
    $ [- H3 Q) ~0 W" v  Q  高手快的诀窍在于他很熟悉各种东西。高手看书很快,因为每一本新书里,值得他好好看的新技术只有一两章的内容。他能迅速看完,并准确领会这本书的中心思想和价值。而对于一个新手,每句话都是新的,他都需要去理解,每一段例子,他都需要去试。
      l. D; _4 d- N& {. P  很少看到一种100%全新的技术或理论。就象java language specification里说的,java没有使用任何新技术,用的都是业界久经考验的技术。对于高手来说,那些技术都是他所熟悉的。自然,很快他就从一个c++高手变成了java高手。如果一个编程新手学java,学两年也不如一个高手学两个月的。高手学新东西快。
    ' P2 m4 m( K! g+ D! X# l" v; ]' W  高手写代码速度快。统计结果说,人均每人月的有效代码速度大概是300至400行。但那是业界平均生产效率。对于高手来说,这个数字太低了。每天写300至400行是完全有可能的。因为在写代码时,所有知识都已具备,已经没有任何需要他多花时间的事情了。他甚至很少需要debug。 - ?6 ^+ P, l& r& y- t5 a' V  r
      高手重用代码的能力很强,熟悉新的api的速度很快。这也是因为,他曾经使用过很多的api,重用过很多的代码。他知道哪些是可用的,哪些有缺陷。他既过用qt,也用过gtk+,也用过windows api & mfc,也用过awt & swing。新的api对他来说,也是老熟人。
    0 A# h3 u9 a1 w$ P; L& w高手喜欢用轻量级的工具,象vi,notepad,最多到ultraedit这样复杂的。高手用这种工具写出很多的东西。这些工具就象东方不败的针。那根针已具有神奇的魔力,有时候它可以当激光枪来用。
      N! H5 ^' J% ]' u  对于一些重量级的工具,高手虽不常用,但一经使出也威力大于常人。如果让东方不败用剑,最厉害的剑术名家也会败得很难看。高手其实用过很多的重量级工具,而且深知其优缺点。所以使出来,就会把威力发挥到最大,而把缺陷减少到最小。而低手则不然,总是把缺陷加以大大的发扬而浑不知其精髓何在。就象很多人学用uml、rup、xp、design pattern那样。
    & o9 |: v3 H, b3 i  高手所学博杂且融会贯通。高手做什么都快,当低手还在一愁莫展的时候,高手已经圆满解决问题,去干别的事去了。 ! v( G& Q$ }. b5 y" u4 B* F
      相信你有一点点想成为高手了。但是有一个问题亟等解决,那就是“欲练神功,必先自宫”的问题。这一点其实是有比喻意义的。就是说,你必需抛弃一些世俗的人们很看重的东西。有诗为证:
    + J8 C" N8 o! V* _; J6 A  世人都晓高手好,只是寂寞受不了
    + [+ [' J3 Z% J% `  世人都晓高手好, 只有名利忘不了 * {( z" z: Q& o+ l1 L3 }. |$ e
      世人都晓高手好, 只有金钱一定要 7 v1 O; M! _9 H3 V+ ]
      世人都晓高手好, 天下美女都要抱 . A$ t4 M  g) s) c% ^+ e
    世人都晓高手好, 不写代码最最好
    $ ~4 s4 e9 a# O7 k$ k  高手的武功不是一朝一夕练成的。还记得玻尔那件轶事吗,玻尔回答说,他年青时也计算过很多的问题。在很多计算的基础上,高手能培养起一种感觉。高手不写代码就能做设计是因为他以前写了很多的代码。而且他们会保持写代码,以保证自已的水平不下降。想一想九段高手是如何练成的。最难做到的是能忍受十年磨一剑的寂寞。别人在父母那里撒娇时,他们在一旁用功。十年磨一剑,剑就成了东方不败的针。
    3 {4 A6 T6 [. v! b  在你下定决心要做高手之后,也就是下定决心抛弃那些世俗的追求之后,也就是你下决心忍受那些来自于庸俗的人的白眼、攻击和谩骂之后,你就具备了练成神功的必要条件。
    ; ]( _( [+ Y5 b2 E2 F# M. i4 d! V  l4 I  事实上其实你不必一开始就练神功,一开始大家可能是为了钱,房子,汽车,美女才编程序的,然而后来艺术就从中产生了。那时高手就不再关注那些东西了。卓别林曾说过,他开始进入那个圈子也是为了钱,后来艺术就从中产生了。当然,也有人一开始是为了艺术,后来变成为了钱。
    ) {! x* W7 w  P4 l  所谓三十而立,就是说到了三十,你找到了你的真爱,值得用一生去追求的那种。比如说有的人到了三十认为这一辈子应该赚尽可能多的钱,这也没什么不好,也可以把赚钱本身变成一种艺术,所谓资本运作是也。所以在三十以前,有些私心杂念没什么。三十以后还这样是可耻的。而我,想做一个程序员。 7 {6 ]' ^- E$ E
      每个人做自己最喜欢的事。这个世界需要程序员,也需要资本运作。所有真正的程序员,他最喜欢的事是编程和他自已。如果他后来去做ceo去了,不再编程,只说明他本来不是一个真正的程序员。
    5 E0 n/ V: v! {  在成为高手的路上,要有热情,要循序渐进,要持之以恒。 ; b3 U: _$ u( C9 D( ?/ c$ H& J
      要靠自己,书要快快地看。要试图迅速理解其主旨。其实你快快看所接受的信息量,与慢慢看接受的差不多。能明白多少很大程度上取决于你的功底。以后用到再回过头来看。一本对你来说新东西太多的书,不要指望看一次就全理解吸收。就象很多功力不够的人看design patterns那本书一样。慢慢看还不如找到多种 信息来源,都快快看一遍。对于一个完全陌生的领域,只看一本书很远远不够的。
    6 p  R& [% |7 s要靠自已,事要快快做。有一个朋友,几年前我介绍他去玩玩linux,他也表示想玩,但他现在还没碰过。他失去了很多机会。
    2 q7 y5 Y) q* Y/ {平时要有意识提高自己写代码的速度,其实你一天写15行有效代码,与你写50行有效代码,其品质是差不多的。你应该把那些业界平均水平抛诸脑后,把超越自己做为唯一目标。等到你写了很多各式各样的代码,你的水平就不一般了。一个老师曾向我介绍他的学英语的决窍,他说你去啃原版小说,啃到50本,就和一般人有很大距离了。就是这个理。如果你写得太慢,怎么能写得多?水平怎么能提高? ( P0 c0 C8 l2 S8 G! O$ B5 L2 C' G
      要靠自己,学很多别人怕学的东西。低手总会说:这么多东西怎么学得过来啊。于是就少学或不学。这样就成不了高手了。高手有非常广的知识面,有很丰富的经验。知道很多低手不知道的事。玩过很多低手听都没听过的东西。
    % h' h8 z$ V# Y- R5 O$ `  要靠自己,努力满足客户的各种需求。个人技能是在满足客户的各种需求的过程中提高的。比如你喜欢用delphi,客户说一定要用vb,那你就答应他,然后把自己培养成为vb的高手。用户的需求看似**,但对你是一个机会。
    8 ]: p6 y4 t' W; L/ D- [1 }  怎样才能做到看书快,写代码快,学新东西快,一个显而易见的途径就是将工作并行化。你在一台机器上make时,同时可以在看别的文档和聊天。对于计算机是这样,对人也是这样。如果你只能串行地处理问题,你的速度将提高有限。你的大脑有很大潜力可挖,它应该是一个多任务分时系统。努力减少它idle的时间。搞经济的samuelson被人称为human brain main frame,可见他的大脑有多快。
    " o/ y2 Q) i: J' F- x  让你的思维快起来,你就会区别于那些反应迟钝的人。如果你不能让人生的道路变长,就让它变宽。这世界变化快,需要你变得比它快才行。 7 @8 p. ?  m4 a2 e6 I! E+ X6 o
      这样加快并不会让你短命,相反,你有更多的时间来享受生活和锻炼身体。你的生活将更有品质,更丰富,更有意义。面对变化,你将立于不败之地。我们都是和自己赛跑的人,需要跑得比昨天的自己更快。! u( _6 u7 j# T3 v) ?4 Q! y8 k: ~
    这是我在网上找的,觉得不错,分享一下
    7 h% B* z5 |4 m# c
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏1 支持支持0 反对反对0 微信微信
    呵呵
    David402        

    3

    主题

    7

    听众

    1891

    积分

    升级  89.1%

  • TA的每日心情
    无聊
    2018-2-23 09:57
  • 签到天数: 598 天

    [LV.9]以坛为家II

    回复

    使用道具 举报

    0

    主题

    6

    听众

    22

    积分

    升级  17.89%

  • TA的每日心情
    奋斗
    2013-7-17 17:19
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    自我介绍
    wu

    群组09年国际数学建模群—鹰之队

    群组2011年第一期数学建模

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2024-5-31 04:16 , Processed in 0.496197 second(s), 66 queries .

    回顶部