(这条文章已经被阅读了 221 次) 时间:2000-11-28 15:48:21 来源:刘虎 (liuhubbs) 原创-IT
我现在已经觉得自己站在了一个新的十字路口上,以前我有过几次这样的感觉,应当说我也有一定的软件开发基础了,然而与我想象中的程序高手还是相差万里,这绝不是自己的谦虚之辞。中国第一代程序员都是从最底层做起来的,象求伯君用汇编写的WPS,严援朝写的CCDOS等等,他们对系统底层有着深刻的认识,不管什么新技术万变不离其宗,因此他们能够以不变应万变,对计算机技术有着无限的领悟力。
我最初是从DOS下的BASIC学起的,虽然以前想学并且也学过汇编的皮毛,但太浮燥急于求成的我(或者可以说是好奇心大于对技术学习的兴趣的我)来说觉得学起来没多少用,总是希望能够马上看到有什么东西经自己的手出来。我想这点应当是我与那些科班出身的程序员的最大缺陷,从来就没有沉下心来认认真真学过最最基础的东西。虽然后来为了应付考试熟读过几遍《数据结构》、《操作系统原理》、《体系结构》等书,也认真学过C,但远远没有真正的达到一定的程度。
现在我已经能够切切实实感受到自己的基础不够用了,例如如果说用MFC写个什么程序,绝对没有问题,但Windows的消息机制到底是怎么在MFC中封装的、MFC为什么要这么封装,类在内存中是如何摆放的,内存如何分配等等最最基础的问题我确是答不上来,甚至在与一位前辈聊天时问我一个struct的sizeof运算会在什么环境下出什么结果我也答不上来,我才发现我对C语言的底层,操作系统的底层太无知了,而没有这些又谈何成为程序高手?
我觉得我一直就是在一种浮燥的心理中,象学Delphi,PB,VFP,VB这些东西,几个月时间看上一本书,读上一些源码,然后开发出一个象模象样的软件出来就认为已经“精通”这门语言了,现在想起来实在是汗颜,各种语言各有所长各有所短,它们的特色之处并不是开发一个两个软件时能够用得上的,但往往这些东西才是这些语言最重要的,而也正是我所忽视的。
我想从底层学起,语言就只会是一种工具,关键在于把握语言之外的东西,象总体把握、算法设计等等,然后根据不同的情况不同的场合选择不同的语言,而如果没有这些基础,我们就总是会陷在一种语言里出不来,知其然而不知其所以然,就只能永远跟着别人的屁股后面转,也许你能够开发一些软件出来,但永远也只能够停留在这个水平上。
我想该是我补基础的时候了,在技术上就是要一丝不苟,不能做无根的树,要能够真正投入进去,丢弃浮燥心理。计算机技术的世界里,技术太多了,如果只是一味的跟风,永远也没有尽头,永远也做不了自己的事情,唯有把握住源头,掌握其本质和原理,才能够立于不败之地,甚至做出别人还没有做到的事业来。
技术无止境,学无止境!
http://www.ChinaDeveloper.net
讲述一个程序员真实的故事
基础对于一个程序员的重要性 - lin - 2000-11-28 16:17:10
我的基础不实,但工作了时间就永远不足用以踏踏实实的跟进了,只有一丁点一丁点的经验,所以必须筹足资本,再去深造!
听说美国已没有鞋厂了 - 庄稼 - 2000-11-28 18:02:47
他们只是掌握潮流和设计,做是别人的事。 其实现在什么都是这样,你没有必要知道每一个细节是怎样做的,也不可能。 我只懂 FOXPRO 语言,这是一种被许多程序员看不起的语言,但我可以用它做出相当棒的人工智能程序,让一些懂 C、DELPHI 且被大家认为是软件高手的人感到了不起,然后我再组织指导他们在我的程序基础上开发出商品化的软件。我做的实际上就是策划和设计。 我认为作为一个程序员应向策划和设计方面发展,如果一直都是写代码,年龄到了一定的时候……
Re:基础对于一个程序员的重要性 - 潘燕辉 - 2000-11-28 18:17:38
不能同意。要知道,同样一个功能,有很多种实现的方法,但是根据稳定性和速度等等有很大的不同。你所说的foxpro编出来的东西想要商品化估计很难了。 半路出家的程序员关键弱在数学上,一些数据结构,算法肯定不是太好,玩玩多媒体还行,涉及到底层的就没戏。 我当年学编程,向来以为不是用汇编或是c编的东西不叫程序。现在学编程真是太容易了…… 不过你说的用foxpro体现思路还行,商品化就免了。以前有一段时间我都是用VB做个样子,然后用C实现的。最差也要用DELPHI啊。
Re:基础对于一个程序员的重要性 - 徐远明 - 2000-11-28 20:08:47
原来老潘也曾经是程序员?没想到没想到。
Re:基础对于一个程序员的重要性 - lin - 2000-11-28 23:46:53
做一个好的程序员,做一个高级程序员,是我一直追求的梦,只是我知道,现在离我追求的,还好远好远呢,曾经有人这样对我说,不…是在个人主页的留言板上,写着:"你是什么都可以,但你绝对不是程序员",我…有一种说不出话的感觉,真的,也许我的水平还实在太次了,写出来的程序不叫程序,开发过的软件不叫软件。
分什么样的程序员 - 书生意气 - 2000-11-28 23:52:02
如果是业余程序员,关系不大。 如果是专业程序员,潘讲得很对。对系统不熟很难达到很高水平,C/C++和汇编是基础,当然还包括数据结构、软件工程等基础课(光这些是远远不够的,但如果连这些都不掌握更不行)。就像专业钢琴家需要从小勤练指法一样,而业余的只要能能把键按对就差不多了。 业余程序员的数量远远多于专业程序员,但只有专业程序员才能做出很独特的程序。
有一点我没有说清楚 - 庄稼 - 2000-11-29 08:14:33
我的意思就是用 FOXPRO 设计出总体的算法和思路,然后组织会 C 或 DELPHI 的程序员将其商品化。 我见过许多程序员在40多岁以后都改行了(用他们的话说就是跟不上,说这话的有计算机教授)。如果只是编程序,40多岁的人可能很难跟20多岁的人比,难免不被淘汰。但要说策划设计、组织管理,可能40岁的就更有优势,因此从个人发展的角度出发,我认为应该更多一些搞高层的东西,而不是底层的东西。 有人就会反驳我了,底层都不会,怎么搞高层。据说一些先进国家(包括印度)的软件公司里,有些策划设计软件的人员根本就不懂编程,而是学工商管理的。这一点的真实性我不能确定,但以我的亲身经历,这应该是完全可以做到。 当然从国家整体来说,没有人搞底层那是不行的,如果你愿意为他人在底层铺路搭桥,我当然没有意见,并对你的这种精神表示敬佩。但不要忘了一点,中国现在能够搞底层的人不少,但却搞不出象样的软件来,其实最缺的是搞策划设计、组织管理等高层的人,如果这方面的人数没有一个大的发展,想赶上印度恐怕只能是做梦了。 所以于己于国,…… 不好意思,也许我说的可能有点跑题了。
Re:基础对于一个程序员的重要性 - tx117 - 2000-11-29 09:23:15
我觉得关键在于目标是程序员还是系统分析员, 程序员和系统分析员的分别还是很大的。 特别是在印度这样的软件业发达国家, 他们可以用很多职高学生写代码, 但是详细设计却做得很好,工作计划可以精确到小时。 他们的代码员甚至都不知道自己做的是什么软件的一部分。 但是,他们的项目经理,很多也是从程序员上来的。
Re:基础对于一个程序员的重要性 - 潘燕辉 - 2000-11-29 09:23:29
呵呵,这些我同意。不过看编什么程序了。如果编底层模块,基础很重要。但是商业程序或是其他的一些当然要创意。我编程的时候曾经说过:多媒体程序中的很多都是骗局,看你怎么骗了。而且一个商业应用程序当然要商业人士来指导,这是市场需求,完全同意。 :) 我指的更多是有关程序安全性,稳定性和效率方面的东西。和你的不矛盾,是基础与上层建筑的关系。 所以现在看来一些专科出身的程序员编程很弱,甚至连个图形调用都不会(正式学科没这个),可是一旦到了实际岗位做过了几年,那么编个3D光线跟踪是没有问题的。但是业余的程序员一般就绝对不行了,一般图形算法可能已经搞不清了,别说加上粒子了。可能几个实例抄来改去的还行。我这可不是看不起业余,业余中也有自学的好手,不过大部分都是我说的这样,起码我就是一个。 :) 小林,其实在网络编程上面我肯定不行,但是我想在编程原理上我还行,因为毕竟是从底层开始的,所以你要想成为高级,专业程序员,就要从底层开始。一开始会有很多无用功,但是后来一定会不错。还有捷径,就是只专注一门,比如网络,那就简单多了。如果这样那么汇编就不必要懂(除非你要反汇编解密一些东西),C肯定是要精通的。还有数学……最头疼……,当年我就是因为数学算法放弃的。 老徐:呵呵,其实我也是业余的,只不过接触的早些而已,而且玩的多而不精,甚至连单片机的PS语言都玩过。几年前还被誉为国内第一代黑客之一呢。不过后来立志编3D程序,接触到了更多的图形算法,粒子追踪,结果就放弃了……不然现在也能混个CTO了……唉…… 书生:你的程序员精神一向是我钦佩的,现在的程序员从精神上就不行了,把写程序当作苦差。我们(应该是咱们,我想想法应该一样)当初写程序就像做智力测验,好玩着呢。一定要想出各种各样的办法,然后找出最好的一种。能少一行就少一行,当你把一个几百句的程序改成几十句的时候,真是太爽了!
潘燕辉,你是搞图形算法的,太好了! - 庄稼 - 2000-11-29 09:32:07
向你请教个问题,有没有办法从很多图片中把某一类图片找出来?
Re:基础对于一个程序员的重要性 - 驿媒特使 - 2000-11-29 09:36:29
庄稼的话非常有道理。然而,若要从根本上改变中国软件业的现状,光提高管理层次肯定行不通。从理论上讲,一个基础协议,一个软件开发管理模式,都是当前中国软件最急需的。没有自己底层上的协议理论,如算法、通信标准、加密格式等,你就永远没有独立的权力。 庄稼、lin,愿意与你们探讨。
Re:基础对于一个程序员的重要性 - 潘燕辉 - 2000-11-29 09:41:22
庄稼:我不是搞图形算法的,只不过学过一点而已。不过你的问题很怪,好像不用编程解决,用acdsee就行了。 看看后缀不就行了?没有后缀就用acdsee强行打开就行了。如果一定要用程序,一般读一下文件头就行了。 非常同意驿媒特使的话。
Re:基础对于一个程序员的重要性 - 驿媒特使 - 2000-11-29 09:57:47
现在许多人对搞计算机的有误解。程序员、系统分析员、理论研究学者都是我所崇拜何尊敬的,但我认为在中国这三种类型的人数量呈递减的趋势。给出伪码或流程图,加上良好的代码管理规范,很容易开发出一个应用软件。加上一些对文挡的控制能力,系统分析员的工作就会有个开始。然而对于理论底层的研究人员来说,他要具备的东西实在太多,从数学分析、高等代数、复变等老三高到泛函、离散、结构等新三高,从电子、电路到物理逻辑,他要掌握的东西实在太多,这也是为什么这个层次的人要少得多的原因。然而中国的确需要他们,需要对他们的大力支持。最最重要的还是基础上的、地基层次上的东西。这些是对潘烟灰同志论点的支持。(对不起名字错了,勿怪:)
其实最主要还是编出茁壮的好用的程序,那些最基础的东西可以作为爱好或兴趣来学习 - zhaodw - 2000-11-29 12:35:02
你的那些基础的重要性其实就是中国教育制度的一个不知道好还是不好的地方,任何人学计算机都从计算机原理、编程等学起,其实不是很有必要,有些人会使用就可以了 人的时间是有限的,一个程序员多花时间将自己的本职工作做好更重要。既然MFC已经封装了消息,你去用就可以了 想当年win31下面,写1000多行代码后,对真正的应用什么都没有作,又有什么意思
Re:基础对于一个程序员的重要性 - 闫辉 - 2000-11-29 12:45:59
如果大家对这个主题感兴趣,可以写一些文章,寄给我们《程序员》杂志,这是程序员自己的杂志![email protected]
大家要分清概念 - 书生意气 - 2000-11-29 21:37:02
我们讨论的题目是“基础对于一个程序员的重要性”,而不是“什么对软件业最重要”。如果去论述做非程序员并不需要基础,那就完全与主题无关了。 用FOXPRO描述算法的庄稼,你就不是程序员,用C或DELPHI实现你的算法的才是程序员。 只懂封装过的MFC的那位,作为程序员不够专业,你并不能完全彻底地控制你的程序,很难开发出独创性强、难度大、不易模仿的程序。哪怕仅仅是编译器编译出了错(这是经常发生的事,有时就赶在最后期限前几个小时出现),你就会完全束手无策。
我已承认我跑题了 - 庄稼 - 2000-11-30 09:31:01
但我想我这个跑题,或者说借题发挥一下,也是有意义的嘛。 知道中国软件业与印度软件业的差距吗?知道这差距的原因吗?如果不知道请看这里: http://www.dbwin.net/garden/index.asp?types=jdlt 这里摘一段话: “我在工作中,接触到印度软件公司开发出来的软件:整个体系架构非常清晰,按照我们的要求实现了全部功能,而且相当稳定。但是打开具体的代码一看,拖沓冗长,水平不咋样。我们自己的一些程序员就有怪话了,说他们水平真低。但是!印度人能够把软件整体把握得很好,能够完成软件,并得到相当好的设计文档。而中国人在那里琢磨数据结构、算法,界面人员就还没编码就想着是Outlook式的还是VisualStudio式的界面。到最后就成为Code高手,对某些特定的开发工具精通,但是就是不能保证能够把一个软件稳当、完整的开发出来。” 按我的理解,差距就在于太多中国的程序员热衷于玩“独创性强、难度大、不易模仿的程序”了。 中国的程序员们再不醒悟…………!!!
那不是程序员的错 - 书生意气 - 2000-11-30 12:36:06
那是CTO、项目经理、系统分析员等人的问题。 打个比方说,对足球运动员来说,脚法娴熟绝对是必要的,同时战术、意识、体能等也很重要甚至更重要,而且如果在比赛中要卖弄脚法的话很容易输球了。这些是不同方面的因素,互相不矛盾,都对比赛胜利有着重大影响,我们要做的是同时加强所有这些方面,而不是去争论哪个因素更重要然后去加强这个因素并偏废其它因素。 因此,即使其它因素更重要,我们仍然不能否认基础对程序员很重要。
Re:基础对于一个程序员的重要性 - 左轻侯 - 2000-12-01 09:39:19
基本同意东0同志的看法 基础是绝对重要的 光描述算法也不能算是程序员 但是,现在这个时代,已经不再要求程序员 (即使是专业程序员)精通太底层的东西了 在程序员内部分工也已经相当细了, 没有人能啥都精通,大多数时候程序员只需要 将精力放在自己专注的领域就可以 底层完全可以用现成封装好了的东东 只要你愿意,你可以完全用API来写程序,甚至全用汇编 不过那有必要吗? 同老一辈程序员相比,我在底层方面远远不如 (用汇编来写wps这种活,我是万万干不了的) 但是如果使用OOP方法编写结构明晰、界面亲切的程序 对开发一个软件进行统筹分析, 写出具有良好的维护性、扩展性的代码 这些方面,我相信我要超过他们中的大多数 底层水平不高,但对软件整体结构把握能力强 绝对也算是高手,虽然不是以前意义上的那种高手 而且我认为,在目前的编程时代, 这种高手应该更有意义 评价一个程序员的水平,不应该简单地看他解决 某个具体问题的能力,更应该看他能不能写出 接口合理、运行稳定的class,并且成为某个领域的专家 这种人应该更适合编程的潮流 当然,他不能没有象数据结构这种基础知识 对于提到的那篇文章,我曾经有过一段评价, 转贴如下: 看过很多遍了,我觉得里面有些问题。 1.你们给出的设备(小型机),最少具备512M内存,浪费一些没有什么。 数组比链表更耗内存吗?应该是链表比数组更需要额外的开支吧! 从文中说到的情况来看,显然是使用动态数组。 2.数组方式访问方便、效率高。 数组读取当然方便,但插入删除操作呢?特别是数组大的时候,会把你累死 中国人就用双向链表,抱着《数据结构》书在那里写链表的类。 不晓得他们用的什么语言,但现在比较高级一点的语言,都自己提供了模板的 功能,完全不需要从最低层写起。既在写类,那么应该是用OOP语言了。 链表和数组另有优点,但我不认为他们的区别是作者所说的,也不认为印度的 程序员就更加怎么样。数组可能写起来简单一点,维护起来就麻烦得多。 但在其他方面,我对作者倒深有同感……
Re:基础对于一个程序员的重要性 - 左轻侯 - 2000-12-01 09:41:00
基本同意东0同志的看法 基础是绝对重要的 光描述算法也不能算是程序员 但是,现在这个时代,已经不再要求程序员 (即使是专业程序员)精通太底层的东西了 在程序员内部分工也已经相当细了, 没有人能啥都精通,大多数时候程序员只需要 将精力放在自己专注的领域就可以 底层完全可以用现成封装好了的东东 只要你愿意,你可以完全用API来写程序,甚至全用汇编 不过那有必要吗? 同老一辈程序员相比,我在底层方面远远不如 (用汇编来写wps这种活,我是万万干不了的) 但是如果使用OOP方法编写结构明晰、界面亲切的程序 对开发一个软件进行统筹分析, 写出具有良好的维护性、扩展性的代码 这些方面,我相信我要超过他们中的大多数 底层水平不高,但对软件整体结构把握能力强 绝对也算是高手,虽然不是以前意义上的那种高手 而且我认为,在目前的编程时代, 这种高手应该更有意义 评价一个程序员的水平,不应该简单地看他解决 某个具体问题的能力,更应该看他能不能写出 接口合理、运行稳定的class,并且成为某个领域的专家 这种人应该更适合编程的潮流 当然,他不能没有象数据结构这种基础知识 对于提到的那篇文章,我曾经有过一段评价, 转贴如下: 看过很多遍了,我觉得里面有些问题。 1.你们给出的设备(小型机),最少具备512M内存,浪费一些没有什么。 数组比链表更耗内存吗?应该是链表比数组更需要额外的开支吧! 从文中说到的情况来看,显然是使用动态数组。 2.数组方式访问方便、效率高。 数组读取当然方便,但插入删除操作呢?特别是数组大的时候,会把你累死 中国人就用双向链表,抱着《数据结构》书在那里写链表的类。 不晓得他们用的什么语言,但现在比较高级一点的语言,都自己提供了模板的 功能,完全不需要从最低层写起。既在写类,那么应该是用OOP语言了。 链表和数组另有优点,但我不认为他们的区别是作者所说的,也不认为印度的 程序员就更加怎么样。数组可能写起来简单一点,维护起来就麻烦得多。 但在其他方面,我对作者倒深有同感……
不要片面化“基础”的概念 - 书生意气 - 2000-12-01 10:24:44
汇编才是基础?这也太片面化了。前锋的基础和守门员的基础就大不一样,但基础对专业人员来说肯定是重要的。现在一些高中没毕业就当程序员的,没系统学过软件工程,基础就不够(其实光学软件工程是远远不够的,我一向认为学校里教的软件工程课是适合写学院式软件的, 而不适合做商业软件,但如果连软件工程都没掌握好,更不行)。
Re:基础对于一个程序员的重要性 - 高春辉 - 2000-12-01 11:09:31
如果是做高层面的程序员的话,当然很多东西都要懂。 但是如果只是一个 coding 代码的程序员,我觉得他只要懂得一些编程的技巧和经验就够了。 我以前一直很不理解为什么很多人跟我说,编程序要数学知识好,可是在我编程的过程中,却又不觉得是需要的,当然不是不需要;)。我想其实很多时候只是需要你的逻辑思维能力好一些,而不是数学好一些。
Re:基础对于一个程序员的重要性 - 荷马 - 2000-12-01 15:40:46
回庄稼:你提到的问题是有可能,但很难。这应该到了图象理解的很高境界了,微软就在研究(还在研究)这玩意,可以一类图片中分离出来,在读研的时候研究了一把,把人头从图片中分离出来,还比较有办法。但还没有通用的办法,比如将黄色内容从一堆图片中分离出来,就还没办法。否则,用它来做防火墙我肯定发财了。