可能重复:
我应该在学习C++之前学习C语言吗?
作为一名专业(Java)程序员和沉重的Linux用户,我觉得我有责任学习一些C(即使我可能永远不会专业地使用它),只是为了让我成为一个更好的编码器.
两个问题:
我应该先尝试使用C或C++ - 我发现它们是不同的语言,有一些共同点.学习两者,或者只尝试一个是有用的吗?我听说C++是一种噩梦般的语言庞然大物.
像我这样的Java开发人员有哪些最好的资源(书籍,教程,练习程序,参考代码).
谢谢
Aid*_*ell 29
C简单易学,难以掌握.作为Java程序员,障碍将是内存和结构 ..并且撤消Java 可能对生成大脑部分的算法造成的损害;)
我建议您通过Internet上的教程熟悉Linux机箱上的GCC工具链.然后阅读C编程语言,Linux应用程序开发的副本不会受到影响.此外,在Linux上,glib将避免重新发明轮子...但至少尝试创建自己的链表,哈希图,图表和其他API来学习.指针算术,数组和学习元素(如结构体)只是二进制块中的命名偏移量都很重要.花时间与malloc和free和MEMCHECK.使用C,您的工具和工具链非常重要,IDE在学习时不一定是您的朋友.
我会选择C over C++,因为C是一个很好的基础,可以习惯C的内存管理和指针使用.
你能做的最好的事情就是把你学到的东西应用到一个真实的项目中.但是要准备好在Valgrind和GDB中抨击你的头.我已经编程C多年了,我仍然不是C和尚.
我同意C是一种很棒的语言,它表现出一个糟糕的程序员.但要记住:
任何足够复杂的C程序都包含一个特殊的,非正式指定的,错误缠身的,一半Common Lisp的缓慢实现.
其中的道德也是学习其他语言,而不仅仅是C衍生的语言!考虑一些Lisp方言,Erlang(目前很酷),Haskell等.他们将从Java的2x2单元扩展你的视野.考虑一下SICP.
Rin*_*g Ø 25
来自ASM,C,然后是C++,最后登陆(强制)进入Java领域,我想我可能会提供关于这个主题的意见.
首先,在充分尊重Java社区的情况下,业务经验表明,虽然C/C++程序员可以习惯Java原则和编程(可能不那么容易),但相反的情况却很少发生.换句话说,C++程序员必须学习和处理大量的Java规则(框架......),但她最终(并且通常)能够通过将大量的系统经验注入其中来生成长期的工作代码.这个过程.一个Java程序员转到C,用于更多的理论原则,以及严格的结构规则
所以,现在,我的任务是帮助您在学习C/C++之前感到安全,自信和积极性!
我的建议是从C开始,因为
例如,我在C研究期间要强调的是
Pointers Java当然使用指针,但在实际将类作为指针传递给方法时隐藏了它的访问权限.在C中,您将必须了解by value和by 之间的区别reference.而且,char x[3]和之间的细微差别char *x = "ab".指针是如何方便通过数组等...,你知道*++x或*x++.关于指针的说法很多,我的建议是
typedef指针一样typedef int *pointerToInt; 一开始看起来比较容易(pointerToInt pi而不是int *pi)几个级别后,我更喜欢计算星星而不是'指针'[一些大cies那样做].除了指向函数的指针,无论如何都是不可读的.内存当你需要内存时,你会分配它,当你不再需要内存时,你可以释放内存.简单.事情是分配适当的金额,而不是两次释放...必须习惯.并习惯堆,堆栈...当你的程序运行并解决NULL(0)时,你可能会有一个可见的异常.也许不吧.
数据结构所以你想使用方便的HashMap?当然,在你开发之后.或者有一些图书馆你可以链接做那种事情,只选择正确的.公平地说,当用C编程时,你[必须]认为不同,并且可能找到比给定问题的映射更合适的算法.
总而言之,一开始你会感到迷失方向,但最终(除非你做噩梦)你会发现在你面前有很多乐趣和愉悦的空间.C允许一个人完全自由地编程:C根据你的想法而不是相反.
jal*_*alf 11
如果我们的目标是让你成为一个更好的编码器,那就是针对实际上尝试与众不同的语言.Java,C++和C都密切相关.
确实,一个主要是一个过程语言,一个人很难假装成OOP,一个是至少4种不同范式的混合,但它们都是命令式语言,它们都有很多语法,基本上,它们都属于同一类语言.
学习C不会教你任何戏剧性的新东西.它可能会教你一些关于内存布局的内容,但你可以通过许多其他方式了解它,它与Java程序员的关系不大.
另一方面,语言相对容易上手,并且被广泛用于很多Linux软件,所以如果你想为这些语言做出贡献,那么学习C是个好主意.它只是不会让你成为一个更好的Java程序员.
至于C++,把它称为"语言的噩梦"可能与事实并不遥远.对于那些粗心大意的初学者来说,它既庞大又复杂,充满了奇怪的陷阱和陷阱.
但它也有一些救赎品质.首先,它是支持泛型编程范例的唯一语言之一,它允许您非常简洁地表达许多高级概念,并具有高度的灵活性和代码重用.
它是一种语言,可能会让你讨厌C++因为这样一个过度设计的混乱,以及所有其他语言缺少C++功能,这使得你的代码变得如此简单.
再一次,学习C++不会对你作为一个Java程序员产生巨大的影响,除了它将揭示Java中你直到现在还没有意识到的许多缺点.
学习任何一种语言都是好的,但更好的是学习不同的东西.
学习SML或Scheme或Haskell.或Ruby,Python或Smalltalk.Erlang或Occam怎么样?或Prolog.
学习一些不是Java的兄弟或祖先的东西,这些东西是从头开始设计的,与Java没有任何共同之处.学习像SML这样的函数式语言,或像Python这样的动态类型语言,或者从根本上改变处理并发性的方法,如Erlang.
1当然,我至少有点开玩笑,但是有几乎相当多的Java程序员似乎都有自己的筹码.如果你告诉使用Python或Ruby的人(仅举几个例子)它很慢,那么典型的反应是他们看起来有点困惑并且说:"如果你这么说 - 对我来说似乎足够快." 对于Java的建议几乎可以保证产生你明显无知并且只表达盲目仇恨的声明.
编辑:就C和C++之间的选择而言,对于习惯于Java的人来说,C只会是一种挫败感.语言的差异无论如何都需要相当大的调整,但是从Java大小的库移到C大小的库只会导致他的生产力摧毁很长一段时间,并且更有可能再次损害他所有语言的"C" "在名义上帮助他实际上学到了什么.
直接从Java搬到C就像是一个运动型汽车的想法,就是当他驾驶林肯城市汽车而不是在豪华轿车里接受驾驶时,当他决定赛车很酷的时候,你把他直接扔到了奥特洛的座位上冲刺车.给他一个机会(不仅更安全,但实际上更快)街头合法跑车首先......
| 归档时间: |
|
| 查看次数: |
5600 次 |
| 最近记录: |