下学期(5周内开始),我同时学习系统编程和OOD。显然,SP专注于在Linux上使用C语言,而且我只有Java和Python经验,所以我对此感到有点紧张。
对于那些在大学里学过这些的人,我应该注意什么?
我已经学习了计算机组织,其中包括了程序集的概述。除了在程序集中实现循环之外,我在程序集项目中的范围从B+到A-。然而,建造线路则是另一回事。
发布于 2010-12-01 23:20:55
好吧,你需要什么取决于这个类,尽管有些概括性很有可能成立。我建议为Java程序员准备一本C书。它可能会指出主要的缺陷,并帮助您过渡。
在C语言中,在Java中不需要真正担心的最大问题是指针和内存管理。Java引用在技术上是指针,但它们是非常愚蠢的指针,据我所见,Java程序员并不认为它们是指针,而且通常在最初处理指针时会遇到一些困难。与此齐头并进的事实是,您将没有垃圾收集器,因此在堆上分配的任何东西不仅必须手动分配,而且当您完成它时,您必须手动地去分配它。因此,您必须熟悉malloc
和free
。您也不会有类,而C中的结构不能在它们中包含函数,所以您通常不会以面向对象的方式使用C进行编程。这对你来说可能是件大事,也可能不是什么大事。然而,这确实意味着,您在系统编程课程和面向对象设计课程中学习的内容可能会有很大的不同。
OOD应该是你所知道的更多的扩展,教你如何以面向对象的方式更好地编程。另一方面,系统编程更多的是为了减少和弄脏,并且在它所处理的问题上将更加低级。不过,这两者对于成为一名优秀的程序员来说都是非常重要的。
如果不知道你的确切技能和经验,不知道具体的课程,给出更详细的建议就会很困难,但最主要的是,问题可能是如何处理C不为你管理事情,也不试图让你安全。您必须比使用Java或Python更仔细地使用C语言进行编程。有大量的东西是完全合法的C,这将是非法的许多其他语言,可能会让你吃惊。但是,需要关注的主要问题是指针和手动内存管理。
发布于 2010-12-02 00:02:11
Java和C有来自同一语言家族的非常相似的语法。正如其他人所说,您最大的障碍将是学习指针(提示:他们只是间接的)和内存管理。突然之间,您在Java中声明的所有数组都必须被释放。就像任何一门学科一样,一旦你弄清楚了这一切,它就会突然变得直截了当。
总的来说,它更多的是学习您将要使用的环境,而不是一些语言语法和构造。Linux编程与一般Java编程非常不同。一个紧密依赖于操作系统API、所有C指针和结构,而另一个则简单得多,因为它处于更高的抽象级别,只有更多的抽象。
对于您来说,解决这个问题的方法可能是将两个工作环境作为虚拟机来维护(想到Parallels或VMWare )。一种是纯粹用于开发C代码,另一种是用于Java,而不是将它们混合在一起。您可以使用不同的桌面主题来强化不同的思维方式(黑色代表C,蓝色代表Java等等)。每次你在一个或其他环境中工作时,你都会有很多视觉暗示来提升你完成工作所需要的适当心态。
发布于 2010-12-01 23:19:42
在同一学期里,我总是发现很难选修分数相左的课程。
如果您的系统类级别很低,则可能需要执行一些非常非面向对象的操作。
如果你能保持这两种方法的直截了当,那么这也许是一个学习每一种方法的优点的好时机。
我个人在OOD课程中的经验是,你需要进入一个近乎理论的抽象层次才能获得充分的学分,而系统类通常更多的是理论而不是代码,因为在一个学期内构建大量的OS功能是不合理的。
https://softwareengineering.stackexchange.com/questions/22993
复制相似问题