C++程序员的java语言?
Possible Duplicate:
Should I learn C before learning C++?
作为一名专业(Java)程序员和Linux用户,我觉得学习一些C语言是我的责任(尽管我可能永远不会专业地使用它),只是为了让我成为一名更好的程序员
两个问题:
-
<>我应该先尝试C或C++吗?我意识到它们是不同语言,有一些共同点。两者都学一点有用吗,还是只试一种?我听说C++是一种语言的噩梦。p>
对于像我这样的Java开发人员来说,最好的资源(书籍、教程、实践程序、参考代码)是什么
谢谢
# 1 楼答案
关于第(1)项,我可能会说C。它更像是外来语。因为你的目标是多语言,所以,你要学习一种与java大不相同的语言,这可能比C++学习更有用,这可能会让你生气。C++从人们那里得到了很多垃圾,这并不一定是可怕的,但主要原因是它试图迫使一个新的范例进入C的结构中,它不象最初从那个范例开始的语言那么好。p>
对于第(2)项,我会非常非常推荐K&R。它假定您对编程有一定的了解,内容简短,切中要害,但也足够深入,可以解释概念。但是,它不包括你必须在别处找到的练习。恐怕我是在工作中学会C的(而且还在为此付费!)所以我不能给你受过教育的帮助
# 2 楼答案
1当然,我至少是在开玩笑,但是有几乎惊人数量的Java程序员似乎有一块芯片在肩上。如果你告诉使用Python或Ruby的人(仅举几个例子)它很慢,典型的反应是他们看起来有点困惑,说:“如果你这么说的话,我觉得它足够快了。”对Java提出同样的建议,实际上肯定会产生这样的说法:你显然是无知的,只表达盲目的仇恨
编辑:对于C和C++之间的选择,对于习惯java的人来说,C只是一个挫折中的练习。语言上的差异无论如何都需要相当大的调整,但从Java大小的库迁移到C大小的库只会在相当长的一段时间内破坏他的生产力,并且更可能再次对他造成偏见——所有名称中带有“C”的语言,而不是帮助他真正学习任何东西直接从Java到C就像是带着一个人,当他驾驶林肯镇上的汽车而不是坐在豪华轿车里,而当他认为赛车很酷时,你直接把他扔到一辆非法的sprint汽车的座位上。给他一个机会(不仅更安全,实际上更快)街头合法跑车第一
# 3 楼答案
如果目标是让你成为一名更好的编码员,那么就瞄准那些真正尝试与众不同的语言。java、C++和C都是密切相关的。p>
诚然,一种主要是过程语言,一种非常努力地伪装成OOP,一种是至少4种不同范例的混合,但它们都是命令式语言,它们都有很多语法,基本上,它们都是同一语系的一部分
学习C不会教给你任何全新的东西。它可能会教你一些关于内存布局之类的知识,但是你可以通过很多其他的方式来学习,这对Java程序员来说不是很重要
另一方面,该语言相对容易掌握,并且广泛用于许多Linux软件,因此如果你想对其中任何一种做出贡献,学习C语言是一个好主意。它不会让你成为一个更好的Java程序员
至于C++,把它称为“语言的噩梦巨兽”可能离真理不远。对于粗心大意的初学者来说,它又大又复杂,充满了各种陷阱和陷阱但它也有一些可取之处。首先,它是唯一支持泛型编程范式的语言之一,它允许您非常简洁地表达许多高级概念,并且具有高度的灵活性和代码重用
<>这是一种语言,可能会让你讨厌C++,因为它是一个过度设计的混乱,以及所有其他的C++语言都会使你的代码变得简单很多。p> 同样,学习C++并不会对java程序员造成巨大的影响,只是它会揭示爪哇以前的一些缺点,直到现在为止你还没有意识到。p>学习任何一种语言都是好的,但更好的是学习不同的东西
学习SML或Scheme或Haskell。或者Ruby、Python或Smalltalk。Erlang或Occam怎么样?或序言
学习一些既不是Java的兄弟,也不是Java的祖先的东西,这些东西是从零开始设计的,与Java没有任何共同之处。学习SML之类的函数式语言,或者Python之类的动态类型语言,或者Erlang之类的从根本上改变并发处理方式的语言
# 4 楼答案
一个小序言,在我详细阐述之前:我以前主要使用C++,从来没有用过任何重要的代码。现在我大部分工作都是用C语言,很少使用C++。p> 我认为C++是一个更好的选择,因为:
归结起来就是:你学的越多,你能学的就越多。C++对你有很大的影响,肯定比C.更重要,这是件好事。p>
# 5 楼答案
来自ASM、C、C++,最后登陆(强制)到java领域,我想我可以提供关于这个主题的意见。
首先,在充分尊重Java社区的情况下,业务经验表明,虽然C/C++程序员可以习惯Java原则和编程(可能没那么容易),但相反的情况很少发生。换句话说,C++程序员必须学习和处理大量的java规则(框架…)但她最终(通常)将能够通过向流程中注入大量的系统经验,生成一个长期工作的代码。一个Java程序员走向C语言,习惯了更多的理论原理和严格的结构规则
所以,现在,我的任务是帮助您在学习C/C++之前感到安全、自信和积极
我的建议是从C开始,因为
例如,在C学习期间,我要强调的是
指针Java当然使用指针,但在实际将类作为指针传递给方法时隐藏其访问权限。在C语言中,您必须学习by
value
和byreference
之间的区别。而且char x[3]
和char *x = "ab"
之间更细微的区别。以及指针通过数组的方便程度等等。。。,你知道*++x
或*x++
。关于指针已经说了很多,我的建议是typedef
指针,比如typedef int *pointerToInt
;一开始似乎更容易(pointerToInt pi
而不是int *pi
)在几级之后,我更喜欢数数星星而不是“指针”[一些大的图标会这样做]。除了指向函数的指针,反正是不可读的李>内存当您需要内存时,分配内存;当您不再需要内存时,释放内存。容易的问题是分配正确的数量,而不是释放它两次。。。我必须习惯这一点。并习惯于堆,堆栈。。。当你的程序运行并且地址为空(0)时,你可能有一个可见的异常。也许不是
数据结构那么您想使用方便的HashMap?当然,在你开发之后。或者你可以链接一些库来做这类事情,只要选择正确的一个。公平地说,当用C语言编程时,您[必须]考虑不同的问题,并且可能会找到比给定问题的映射更合适的算法
总而言之,一开始你会感到迷失方向,但最终(除非你做噩梦)你会发现在你面前有很多娱乐的空间。C允许一个人完全自由地编程:C根据你的想法,而不是相反
# 6 楼答案
C语言简单易学,难以掌握。作为Java程序员,内存和结构将是障碍。。并且消除Java可能对生成大脑部分的算法造成的损害;)
我建议您通过Internet上的教程熟悉Linux机器上的GCC工具链。然后读The C Programming Language,一份Linux Application Development不会有什么坏处。此外,在Linux上glib将使您免于重新发明轮子。。。但至少要尝试创建自己的链表、hashmap、graph和其他API来学习。指针算法、数组以及学习诸如结构之类的元素只是二进制块中的命名偏移量都很重要。花时间在
< >我选择C++,因为C是一个很好的基础,可以用于C.</P>的内存管理和指针使用。malloc
和free
和memcheck上。有了C,你的工具和工具链是非常重要的,IDE在学习时不一定是你的朋友你能做的最好的事情就是把你学到的应用到一个真正的项目中。但是要准备好用你的头撞在墙上,在Valgrind和GDB。我已经编写C语言多年了,但我仍然不是一个C僧侣
我确实同意C语言是一门伟大的语言,它显示了一个糟糕的程序员。但请记住:
其寓意是学习其他语言,而不仅仅是C派生语言!考虑一些LISP方言,Erlang(目前很酷),Haskell等。他们将从java的2x2单元格中扩展你的视野。考虑看SICP。