可能重复: 在学习C++之前,我应该先学习C吗?
作为一名专业(Java)程序员和大量Linux用户,我觉得我有责任学习一些C(尽管我可能永远不会专业地使用它),只是为了让我成为一个更好的程序员。
两个问题:
谢谢
发布于 2010-08-21 18:44:27
C简单易学,不易掌握。作为一名Java程序员,其障碍将是内存和结构。消除Java可能对生成大脑部分的算法造成的损害;)
我建议通过互联网上的教程,熟悉Linux机顶盒上的GCC工具链。然后读一读C语言,Linux应用程序开发的副本就不会受伤。而且,在Linux 滑翔上可以避免你重新发明方向盘.但至少要尝试创建自己的链接列表、hashmap、图形和其他API来学习。指针算法、数组和学习元素(如structs )只是命名--二进制块中的偏移量都很重要。花点时间在malloc
和free
上,再花点时间给你看。使用C,您的工具和工具链非常重要,IDE在学习时不一定是您的朋友。
我选择C而不是C++,因为C是习惯C的内存管理和指针使用的良好基础。
你能做的最好的事情就是把你学到的东西应用到一个真正的项目中。但要做好准备,在瓦兰和GDB中将你的头撞在墙上。我已经编程C很多年了,我仍然不是C和尚。
我确实同意C是一种很好的语言,它显示出一个糟糕的程序员。但请记住:
任何足够复杂的C程序都包含一个临时的、非正式指定的、充满错误的、缓慢实现公共Lisp一半的程序。
它的寓意也是学习其他语言,而不仅仅是C派生语言!考虑一些Lisp方言、Erlang (目前很酷)、Haskell等,它们将从Java的2x2单元格扩展您的视野。也可以考虑看看SICP。
发布于 2010-08-21 21:42:24
我来自ASM,C,然后是C++,最后降落(被迫)到爪哇领域,我想我可以提供一个关于这个问题的意见。
首先,出于对Java社区的尊重,业务经验表明,虽然C/C++程序员可以习惯Java原则和编程(可能不是那么容易),但相反的情况却很少发生。换句话说,C++程序员必须学习和处理大量的Java规则(框架.)但是她最终(而且通常)能够通过在这个过程中注入大量的系统经验来产生一个长期的工作代码。一个使用C语言的Java程序员,习惯了更多的理论原则和严格的结构规则
所以,现在,我的任务是帮助您在学习C/C++之前感到安全、自信和有动力!
我的建议是从C开始,因为
例如,在C研究期间我要强调的是
value
和reference
之间的区别。另外,char x[3]
和char *x = "ab"
之间的差别也比较微妙。以及如何方便指针通过数组等.,您知道*++x
或*x++
。关于指针已经说了很多,我的建议是1. always keep control, i.e. don't put too many indirections when not necessary
2. don't `typedef` pointers, like `typedef int *pointerToInt` ; it seems easier at first (`pointerToInt pi` instead of `int *pi`) after a few levels, I prefer to count the stars than the 'pointerTo' [some big cies do that]. Except maybe the pointers to functions, unreadable anyway.
总之,一开始你会感到迷失方向,但最终(除非你做噩梦)你会在你面前找到很多空间来娱乐和娱乐。C允许一个人完全自由地编程:C按照你的想法去做,而不是相反。
发布于 2010-08-21 21:17:21
如果你的目标是让你成为一个更好的程序员,那就瞄准那些真正想要与众不同的语言。Java、C++和C都是密切相关的。
的确,一个主要是一种过程语言,一个人非常努力地假装自己是面向对象的,一个是至少四个不同范例的组合,但它们都是命令式语言,它们都有很多语法,基本上,它们都是同一个语言家族的一部分。
学习C并不能教会你任何戏剧性的新东西。它可能会教您一些关于内存布局之类的知识,但您可以从许多其他方面了解到这一点,而且它与Java程序员没有太大关系。
另一方面,该语言相对容易掌握,并广泛应用于许多Linux软件,因此,如果您想为其中的任何一项贡献,学习C是一个好主意。它不会让你成为一个更好的Java程序员。
至于C++,称它为“语言的恶梦庞然大物”可能离事实不远。它又大又复杂,对粗心的初学者来说充满了陷阱和陷阱。
但它也有一些可取之处。首先,它是支持通用编程范例的唯一语言之一,它允许您非常简洁地表达许多高级概念,并且具有高度的灵活性和代码重用性。
这是一种语言,可能会让您讨厌C++,因为它是一个过度设计的混乱,而所有其他语言都会因为缺少C++特性而使您的代码变得如此简单。
同样,作为一个Java程序员,学习C++对你不会有太大的影响,只是它会暴露出一些你直到现在还没有意识到的缺点。
学习这两种语言都是好的,但更好的是学习一些不同的东西。
学习SML或计划或Haskell。或者Ruby,Python或者Smalltalk。Erlang或者Occam怎么样?或者Prolog。
学习一些不是Java的兄弟或祖先的东西,它是从零开始设计的,与Java没有任何共同之处。学习像SML这样的函数式语言,或者像Python这样的动态类型语言,或者从根本上改变您处理并发的方式,比如Erlang。
https://stackoverflow.com/questions/3538477
复制相似问题