西西河

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

共:💬198 🌺258
全看树展主题 · 分页首页 上页
/ 14
下页 末页
家园 haskell的问题是

要写的爽就效率差,要效率好就不爽

家园 先能跑再优化嘛

获得一个结果正确但效率差的版本是第一步嘛。

优化放后面。

当然这个问题是挺烦的,比如我现在写的一个统计,几十项数据,用一堆小函数组合组合就出来了,但是性能嘛~~ 等数据量涨十倍的时候自然就优化好了:)

家园 我也是晚上效率高,但我晚上不想加班,所以工作效率

就没高过。。。

家园 合格的程序员知道如何取舍各个层级的需求

在面试中这道题最多给你30分钟。即使你能把100k的代码都背下来,也没有时间都写出来。而且,任何设计都是首先要求做对,其次才是做快、做省。就你第一个帖子和这个帖子中的内容来说,在做对这个层次上考虑的还有失草率。有的地方(比如提到utf8)也暴露了一些概念错误。

家园 别扯了

我就是随口说说我做串类的时候考虑到的问题,没想针对你什么。既然你不服,我只好再看一眼你的代码,发现你懂的确实不多:

1.//following helper functions to decide which version function in library to call in compile time.

你这里不写注释倒还好,写了就说明你的理解有问题,你的帮助函数全部是需要编译的,所谓编译时决定,你应该用模板特化,要不你就不要提编译时决定,当然反正按你的理论,能用就行。

2.常用的swap trick你也不会,基本上我确定你也没有看过boost代码。

我的看法,谈工程可以,谈语言,c++,你要学的还很多。

家园 没劲

其实对于一个连utf8是什么层次的概念都不清楚却拿出来唬人的人,我的第一篇回复就是多余的。而且你首先考虑的是怎么提高某种情境下的效率而不是保证设计的界面和实现是否正确和合理。所以我们可能根本就没有对话的基础。

你这篇帖子的两个新论点,第一个错,看起来你都不明白编译和调用的区别。第二个倒不能说错,可是很无聊。"copy & swap"不是解决self assignment和exception safty的唯一选择。在示例中选用的方法同样广泛采用,而且相比更便于没有注意到那些地方的初学者理解。

家园 可是指这本书?

《Structure and Interpretation of Computer Programs》?确实是好书啊,MIT Press的。

说起MIT,想起一件事:公司一美国同事面试时,

面试官问:会C++吗?

答:不会。

问:用过我们公司软件吗?

答:没有。

问:你是MIT毕业的吧。

答:是。

问:那你明天来上班吧。

可见牛人还是有的。

家园 嗯,这个所有的语言都一样吧?

想效率好,肯定是不爽的,就算是C语言,针对不同平台的优化也是很让人不爽的……

家园 C语言的确是很不错的语言

C是基础,不过确实非常实用,不过指针是个难点,但是一旦搞懂了,C语言就通了。

编程我觉得真的是思路问题吧,有时候坐一下午,可能也编不出来一个程序,有时候灵光一现,嗖嗖艘,几下编出几天都编不完的程序。

还是多看实力,多看源代码。我觉得美国人这点很好,都加Comment,看起来很方便,也很容易学习。有些国人编程全顾自己爽,不加Comment。其实如果加了Comment,错误好找,也方便合作编程。

大力推荐C,指针,函数,结构体,用好了,就走入编程的殿堂了,基本算法也就略之一二了。

家园 我更喜欢PASCAL

大力推荐C,指针,函数,结构体,用好了,就走入编程的殿堂了,基本算法也就略之一二了

这些东西在PASCAL里面都有,但PASCAL的语法比C更严谨。国内的数据结构教材大多采用PASCAL作为描述语言不是没有道理的。

家园 Real Programmers Don't Use

Real Programmers Don't Use Pascal

http://www.ee.ryerson.ca/~elf/hack/realmen.html

家园 现在要学,还是学Java比较好

象指针这样的问题,Java里的所有Object都用类似指针的handle,所以不需要象学C时那样强调。Java相对于C这样的相对低级(“低级”指更靠近机器指令)的语言来说,有个好处就是语言本身的特性逼迫程序员去写出更正确的程序来。比方说Design Pattern,C里面那是非自然的,不标准的,你得有意地去应用,而Java里的一些Design Pattern是内建在语言中的,标准的。而且Java的语言特性还可以简化原来在C中比较复杂的Design Pattern,比如说Visitor,原本Visitor和Visitable是要互相配合的,Visitable里要有accept()。可是如果那是第三方的程序,根本没有accept()呢?Java就可以利用反射机制,不需要accept()。另一个例子当然就是垃圾收集。在Java里当然也得担心内存泄露,但是工作量比C里就微不足道了。另外比如多线程编程,用Java和用C的方便程度就更不能相比了。

有人可能会说C里面程序员对啥都有控制,Java是给水平不高的程序员用的。问题是绝大多数程序员都不是牛人,传说中的牛人是直接拿1和0写机器码的。当然这么说也偏激了,C当然有它自己最合适的使用之处,不过我觉得如今的大多数应用程序都可以用Java或者类似的语言来写而且写得比用C写得好。

家园 呵呵,总觉得C是基础

其实镭射兄说的对,Pascal比C来讲相对严谨,C也不是完美的。而c99也不过是加了一些头文件,最重要的加入了Boolean来判断True 和False。

我认为C还是比较自由散漫的一种语言,不用太多控制,随心所欲。当然,针对初学者可能会造成很多麻烦,因为会出现编译能过,程序运行结果却和想象完全不同的情况。

现在有很多大学把C作为工科的必学科目,我觉得是很有道理的。虽然C可能还是有其不足之处,但是它的基本思路,函数、地址,指针这些东西,在工科中都是必不可少的。尤其是和热机,自动化,这些科目打交道的人,C语言还是有它独特的魅力的。

当然,Java也是一个相当不错的语言,不过不知道为什么,我用了Java感觉没那么爽,是不是因为Java像兄台所言,由于标准而限制了编写的那种无比的自有感?对Java还是了解不够深刻,还希望指教。

家园 热机,自动化这些有所不同

指教不敢当,互相讨论讨论而已,毕竟是论坛,我也常常信口开河。

工科编程的要求我不是太清楚,无法作出评价。关于“用了Java感觉没那么爽”,这个牵涉到个人感觉,如果不知道为了什么具体理由或客观原因而不爽,也很难评价。不过可以猜一下。

第一个原因可能是写个小程序罗里八嗦的import也一大堆,不过这个其实C的头文件也差不多,习惯了就看对方不习惯。不少事情还是一个“不习惯”可以概括的。从C刚转过来的程序员一定对garbage collection这种事情有担心,总觉得会有内存泄漏或者误删的事情出现,没有具体指令总是不放心。可一旦Java的GC习惯了,再去编C程序,那就觉得管理内存都要事事躬亲简直受不了。

还有一个原因大概是,Java现在如果不是最依赖于某个IDE的语言,也一定是其中之一。写C的话,你可以用vi,可以用notepad或emacs等,但是作为一个程序员,你不过是依靠这些文本程序写出程序代码而已,最多让它们自动format,把函数名keyword之类的用不同颜色标出等等的辅助一下,对于程序的正确性,你不会依赖于vi或emacs。Java就不一样了,很少听到有人拿vi或notepad写的,如果只是几个class,那还有可能,如果是几十几百个class,那就极其困难甚至不可能了。于是有一种被IDE牵着鼻子走的不爽感。

还有一种不爽感是Java的typing实在太强,你把long变成int它都不乐意要嚷嚷,从C刚转到Java简直要烦死,更不要说编惯了ruby这样dynamic typing的语言的人了。

最后,Java现在已经不仅是一种语言而是一种平台了。作为一种语言,学会C++的人几乎不用费太大功夫就能学会Java,C++才是真正比较复杂的面向对象的语言。但是你会发现学会作为语言的Java后,你要学的东西还很多,各个标准的package比如java.util或者java.io里的东西都有很多微妙的东西要学,不要说其他第三方的各种包了。UI那部分比如AWT和Swing就更让人头痛(我就基本不懂)。可以这么说,如果只学会了作为语言的Java,那么几乎还什么都没学会……

家园 Oh,

谭浩强《C语言程序设计》这本书就不要推荐了,除了烂还是烂,烂不要紧,问题是还有些贻害...

Kernighan和Ritchie两位超级大牛合著的《The C Programming Language》很好

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


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

Copyright © cchere 西西河