西西河

主题:【原创】编程心得 -- 荆棘探兴

共:💬198 🌺258 新:
分页树展主题 · 全看首页 上页
/ 14
下页 末页
        • 家园 关于编程思想

          这个编程思想,我一直有个疑问:有独立于编程语言的编程思想吗?毕竟各种语言的设计理念就不同,比如C++与ruby的编程思想肯定会激烈掐架的——那么到底没有放之四海而皆准的编程思想呢?

          • 家园 其实,编程思想从来就是独立的

            而编程语言才是依附于编程思想的。

            但是往往新人是从编程语言入手的。至于编程思想,往往是到了一定阶段后才能用心体会。而这个体会,又往往与他所用的语言的熟悉程度和善用程度正相关,所以给人的感觉就反过来了。

            一个简单的脉络,贻笑大方:

            语句化编程

            结构化编程

            模块化编程

            面向对象编程

            Generic 编程

            虚拟机编程

            和现在微软的.NET编程

            他们都各自试图解决一些先后出现的问题。而这些个解决方案往往带来一种,或者若干种新的流行的编程语言。那么,你说,是先有问题,再有方案呢,还是先有编程语言,再有编程思想?

            非权威不成熟的看法。

          • 家园 有啊。

            比如当在写GUI程序时,面向对象就是放之四海皆准的编程思想。

            就算C语言没有类,用C语言实现的GUI框架GTK中,也用struct+函数指针生生造出了一套单根继承的面向对象框架。你会发现GTK与Java的swing其设计思想非常相似,虽然他们一个是C语言实现,一个是JAVA语言实现。

            所以,语言与语言之间的编程思想可能会掐架,但是,当到了具体应用领域,任何语言所提倡的“思想”,都得臣服于该应用领域的“思想”之下。

            而实际上,之所以不同的语言之间其提倡的“思想”存在差异,原因就是,每个语言设计之初,都有自己针对的应用领域,而不同的应用领域间,其“思想”存在差异。

          • 家园 设计思想无非就是算法,当然软件实现是要考虑

            到具体语言的特性,例如C++等面向对象语言,就要深刻体会类、继承、封装、虚函数、抽象类、接口、多态等,而不是肤浅理解,否则不得OO设计精髓。之后再学习设计模式、面向方面编程等。建议多看类库的实现代码,这些代码都很经典,要多动手编程。

    • 家园 也瞎掰编程

      看到Fortran很有感触,想当年也是我的第一门语言,用的是谭浩强编的书。后来才学了C, C++, Java, C#和一些脚本、动态语言,结果发现学了C++后,编程变得简单多了。编程很有乐趣,尤其对年轻人来说,读别人的代码确实痛苦,但能学到更多的东西,曾经读过大量法语和意大利语写的程序源码,很多变量也是法语和意大利语的,甚是痛苦,不过熬过来一切都好了,最后看那些代码像和自己写的一样。苦读源码是学好编程的基础。

      虽然现在不怎么写程序了,但想起当年还是看了些好书,记起来一些,列在下面,共享之。

      C:《The C programming Language》,by Brian W. Kernighan,书很薄,很经典,谭浩强的书对初学者不错,但写得太教条,在我们当时编程语言书贫乏的年代,还是不错的书,现在就不需要看了。

      C++:《Thinking in C++》,《C++Primer》《Effective C++》、《More Effective C++》、《VC6.0内幕》(很老的一本,当时很热衷),这方面的书很多,多读几本,才能深刻理解C++精髓。对C++的博大精深的偏爱使我当时在很长时间对java和C#产生抵触。

      Java:《Thinking In Java》, by Bruce Eckel,看完这本书就差不多了

      C#:有前面的基础,好像不用再看什么书了,随便找点介绍C#的资料看看就可以了,无非就是多了attribute,event,delegate等。

      编程方面:《Programming Pearls》,编程经验不错

      算法:《Introduction.To.Algorithms》,不得不看的算法好书

      软工:《design pattern》看个三五遍才能真正提高内功

      计算机系统:《Computer Systems:A.Programmer's Perspective》,是本好书,可惜没看完。

      怀念单纯的编程时光!

      关键词(Tags): #编程
      • 家园 design pattern很容易走火入魔

        个人体会每次看了以后:

        1。编程的每一步都要思考很久,做很多方案,最后也不会都用到。

        2。看代码会两眼发直,使劲往PATTERN上套,效率越来越低。

        不过,会感觉到实在的提高。

        • 家园 模式无需套用,在实际项目中用到的模式

          大部分都是23个模式的变形或组合。当你反复理解这些标准模式后,开发项目时最好状态是心中无模式,就像用键盘打字熟练后,你不用想哪个字母在哪里?

        • 家园 编程需要理解设计模式

          就我的心得,所谓模式编程,就是先设计好数据结构,然后围绕着数据结构去构建程序。做一个任务实际上就分析处理流程,按处理流程的工序分出功能块。然后针对功能块设计数据结构,再围绕数据结构编写一组函数。最后完成的系统就是功能函数簇的串接。按照这样的思维,C语言也可以写出面向对象的程序。面向对象的语言,其实就是从编程机制上固化上述的设计模式。

          而与此对应的,是很多人的编程,其实就停留在处理流程分解上,函数就是不停的分解流程,越来越细,虽然可以将相同或相似的功能合成同一个函数,但是因为没有数据结构这个基础,这种合并往往没有条理性,甚至合并的函数内再通过代入的参数来用switch分出很多的分支。这样的程序,没有统一的数据结构基础,因此可能公用变量到处乱飞,写一段程序,要记住n多的变量,因此很多程序员经常会说:“别急,让我编完这段再去吃饭,要不然就忘了”。如果能够理解设计模式的真谛,就绝对不会出现上面的那些现象,可以在任何时候合上电脑去干别的事情,然后回来接着编。

          设计模式编程,不单是干活轻松,而且会给自己积累一堆的工具库,工作时间越长积累就越多。一个10年的程序员绝对不单比年轻人的编程速度快好几倍,更厉害的是,通过这些积累,更可以编写那些年轻人根本编不出来的程序。

          还有,我很奇怪,编C程序,能有错误找不出来这一说。只有干不出来的任务,没有调不出来的程序。任务只要变成了程序,下面就是体力活,C语言的错误,说起来复杂,其实也就那么几种,而最主要的就是内存溢出。其实如果大学时学好了计算机原理和数据结构,脑子中有一个数据空间的概念,还真没有什么不能调出来的。

        • 家园 模式不是为用而用

          是为了解决某些问题。不是开始编程了就在想,今儿个我要用啥模式呢?而是今儿个我碰上了问题,这该怎么办呢?学了模式,就能了解某个模式大概是为了解决什么问题的。某类问题碰上得多了,有经验了,那个时候才可以还没有编程就考虑模式了。

        • 家园 很多未入门的经常以“太模式”来反对设计模式,甚至

          有时候其实他自己练面向对象都还没掌握。

          很多东西就是这样,你得先走火入魔,才能深入浅出,一般人不是天才,没有这些磨练,怎么能学得会这种实践性的功夫呢。

        • 家园 深有同感……
      • 家园 Thinking 系列都不推荐,做教材,做手册都不合适。

        C++ 用 Primer 不错。

        Java 用 Core Java。

        另外,除非真的需要,不推荐学习C++,代价很大。

分页树展主题 · 全看首页 上页
/ 14
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河