你们觉得我为什么这样子子学c语言有用吗?每天都是在学算法你觉得出去工作能找到好的工作吗?

云风最近写了一篇博客《》。作为长期使用C语言开发网络游戏服务器的程序员,云风是有理由写这样一篇文字,不过还是感觉谈的不够深入,C语言在业界使用的现状没有怎么描写,有些意犹未尽。在这里想比较系统的谈谈个人对C语言学习方式方法的理解。分别按照书籍、实验环境搭建、网络资源来分别介绍,希望能写的比较完整全面一些,给想学习C语言的朋友一个有价值的参考。
为什么要学习C语言?
为什么要学习、使用C语言?为什么要学习一个可能比自己都岁数大的编程语言?
我在前面如何学习编程语言的博客文章 里提到,选择一门编程语言,&为什么而学&这个目的是最重要的,目的不明确就没法学好。这也是为什么很多学生朋友在大学里必修C语言却觉得没学明白的原因。因为学习的目的不明确,学习当然也没有动力。还有一个原因是C语言是工程实践性很强的语言,它不是来自某个研究所某个大学学院,而是实实在在从项目需要中产生,伴随着Unix的兴起而流行,语义简明清晰,功能强大而不臃肿,简洁而又不过分简单,实在是居家旅行工作学习必备之良友。
C语言相比C++的优点之一就是最小惊讶原则,一是一二是二,不会在私底下产生一些莫名其妙的额外产物。用C++做个例子,比如这样一个函数原型void PassWithClassValue(COneClass clsParam1),稍微了解C++的朋友都会知道,如果你没有实现COneClass的拷贝构造函数,编译器会好心的帮你实现一个,而且在调用这个函数PassWithClassValue的时候,偷偷地调用拷贝构造函数产生一个临时对象作为参数传递,对于某些情况,比如编写操作系统这类必须优化性能的情景下,这些自以为是的东西是非常邪恶的事情。
C语言本身只提供必要的语言特性,其它复杂一点功能如文件处理、数学计算等等都以库函数方式提供,甚至连malloc、free这种&必须有&的功能,也是以标准库函数的方式提供,而不是作为C语言核心出现。在伟大的著名的无所不包的《K&R》开头部分就提到了,for其实可以通过while来完成,只不过for可以写的更简洁,言外之意,对于C语言for其实不是必要的。跑题一点说,在其它程序语言中Lua可以说继承了C语言简洁的设计哲学,甚至连continue这种几乎必备的关键字都一直拒绝加入,在Lua的maillist以及wiki里都提到过continue这个问题,Lua语言维护者认为continue对于Lua而言不是必要的,也不考虑在后续版本中添加这个关键字。这种简洁哲学也让C语言的可移植性、便携性特别优秀,也使得很多嵌入式系统依然使用C语言作为主要编程工作语言。
Java语言有一个口号:&一次编写,处处运行&,就是跨平台这个噱头。实际上C语言从早期开始就几乎达到了&一次编写,处处编译&,在ANSI在1989年统一了C语言标准以后(称之为C89),只要特定平台上的编译器完整实现了C89标准,而且你的代码没有使用某些特殊的扩展(GCC以及微软都有自己的编译器特定扩展),那么代码一定可以编译通过,再实现一下操作系统相关的函数库,C语言的移植就是很简单的事情。可以用Lua作为例子,Lua本身是完全遵循C89标准,没有使用任何特定扩展,这也保证了有C语言编译器的平台,都可以编译使用Lua。可以编译运行C语言的硬件平台可以从A排到Z,真是非常有意思的事情。
C语言也是一个比较少见的应用领域极为广泛的语言。比如编写操作系统这种高难问题,只有C++、汇编语言可以做到。C语言可以编写服务器端软件如Apache、Nginx,或者编写GUI程序,如GTK。大多数程序语言的第一版是通过C语言实现,借助前面提到的&一次编写处处编译&,最大的保证了这些程序语言的可移植性。在Web开发领域,C语言的应用相对较少,这也是一种取舍的结果,Web开发需要使用PHP、Ruby、Python这样的动态语言,可以快速上线快速修改,可以最大程度满足用户时时变化的需求,这也是C语言的弱项。如果把程序语言的应用领域从硬件到管理软件、Web程序做一个很粗略从下到上的排列,C语言适合领域是比较底层靠近硬件的部分,而新兴语言比较偏重于高层管理或者Web开发这种相对贴近最终用户的领域。比较流行的混合开发模式是使用C语言编写底层高性能部分代码或后台服务器代码,而使用动态语言如Python做前端开发,充分发挥它们各自的优势力量。
提到C语言的缺点,常常是它缺少这种或者那种特性,比如有人建议加入GC,有人建议加入并行或者并发支持,有人提到没有一个比较完整的类似C++的异常策略。这些特性有的可以通过引入第三方库来实现,但C语言的设计哲学其实决定了它不会像C++那样&非常强大&。即使引入了某些人期望的特性,依然会是某些人喜欢某些人不喜欢的情形,现在的功能对于C语言应用领域来说已经够用,其它特性可以通过特定程序语言实现,并且通过C API与C语言编写的程序进行交互。任何一个工匠都不可能只使用一个工具完成他的工作,不同工具结合起来才能更快更好的完成任务。
提到C API,也稍微介绍一下,我们知道windows操作系统的api也好,Linux的系统api也好,或者是想给Ruby、Python编写扩展模块,C语言形式的函数定义都是唯一的选择。C语言就好像是一个中间层或者是胶水,如果想把不同编程语言实现的功能模块混合使用,C语言是最佳的选择。
提了这么多关于C语言的好处,那么学习C语言是否适合就看你自己的判断了,例如要进行一个嵌入式项目,或者需要进行服务器端开发,或者写一个性能相关的组件等等,C语言都是比较好用的选择。另外也可以在C++的使用过程中有意的使用C语言的思考方式,汲取C语言简洁明快清晰地设计思路,对编程设计水平会有很大的提高。
C语言学习方法
在前面 曾经提到过一个比较系统学习一门新的编程语言的方式,C语言学习也可以按照类似的顺序:阅读参考书,阅读代码,编写调试实际程序,上网参与讨论,研究高级话题。
学习语言的开始一般是阅读参考书。我建议选择几本非常经典的好书,仔细完整反复阅读几遍,&书读百遍其义自现&。选择C语言学习的好处是,这几本书基本上完整涵盖了C语言编程领域的方方面面,不会像C++那样,即使读完一堆书还是有些糊涂,依然有这样那样难懂的陷阱。
1,参考书籍
在豆瓣上列了一个书单,大家可以直接参考
在下面简单点评一下,阅读顺序最好参照列出的顺序。
《The C Programming Language》
如果你只想买一本书学习C语言,只需要买这一本就够了。如果你经费足够,建议你多买几本,办公室、家里都放上一本,随手都可以翻翻。用三个词语来形容它就是:经典!经典!经典!这本薄薄的只有二百多页的小书涵盖了C语言的方方面面,前无古人而且后无来者,任何溢美之词都不足以形容它。
《The C Programming Language》(后面称为 K&R)里面包含了一个简单的语法解析器,包含了malloc如何实现,包含了一个完整的操作系统目录浏览程序,这些程序的实用性极高,可以这样说,如果学习任何一门语言能够自己独立动手实现以上的功能,基本上就可以算是入门了。K&R书里面每段都蕴含着非常值得探究的软件开发工程实践经验,如果没有一定的开发经验,其实是看不出来这些冰山下面的内容的,比如开头一章就提出用写完整代码这种方式来教学,而在书中那些C语言的陷阱或者可能出问题的地方,都有提到,但是由于篇幅所限,写的非常简约,很难让人一下就看懂。我正在完整的逐字逐句的阅读此书,希望能稍作注解,写几篇博客分享一下。
《C程序设计语言(第2版&新版)》
这是K&R的中文译本,可以先从中文译本看起,然后再读一遍英文原版,既可以学习英文,又可以体会原文那种简约优美的风格。
《C陷阱与缺陷》
《C专家编程》
这两本书也是学习及使用C语言的朋友必备的两本书,比如《C专家编程》,专门用两三个章节详细介绍C语言中数组与指针的不同之处,这两本书在某种程度上算是对K&R略过的地方做了详细补充,强烈推荐。
《C语言参考手册》
这是最后一本强烈推荐你最好买回家作为案头书必备的参考书。前面几本书或者稍显简略,或者专注某个特定专题,都不适合遇到问题时翻查。这本《C语言参考手册》可以看作是C语言编程的《新华字典》,全面而权威。里面还涵盖了C99的内容,紧跟时代潮流。
下面几本书都可以作为交叉参考,也都很有价值,也是建议大家都买下来,好书如朋友,日久弥新,像是我推荐的这几本书在douban或者amazon上评分都非常高,而且反复再版。
《C和指针》
指针的重要性如何,学过C语言(或者C++)的朋友都知道,这本书更是把指针拔高到了与C语言平起平坐的地位,其实也是从头开始介绍,作为教学参考书也是可以的。
《C标准库》
这本书是专门介绍C语言的标准库如何实现的,比如malloc算法,用标准的C语言该如何写?strlen这个函数应该如何实现?尽管书中不少代码与真实的C标准库相差很多(由于标准库需要考虑性能优化,很多函数有一些特定的trick),但是绝对值得参考。
《你必须知道的495个C语言问题》
这本书其实就是C-FAQ的印刷版本,C-FAQ在各种编程语言的FAQ中可以称得上质量一流。如果你想应聘或者招聘C语言相关程序员,这本书一定要参考。
《Linux C编程一站式学习》
这本书是基于特定操作系统Linux来介绍C语言编程,可作为计算机相关专业的教科书或入门参考书,也是书单里面唯一一本国人原创的编程书籍,非常难得。书中几乎所有内容都在网上直接公开,针对读者的意见进行修改,这也是非常难得的一种开放态度。非常推荐大家买一本。
学习C语言,一定不能只读书,应该动手练习完成书里面的项目需求(比如编写一个目录浏览器)以及每章的练习题目。这就需要有可以实验的环境,下面针对不同操作系统简单做一下介绍。
2,动手实验环境搭建
也没有调查过,不知道现在学校里学习C语言是不是依然跟着谭浩强老师用TurboC2.0编程,如果还是这个组合的话,那就太差劲了,赶快抛开它们。
下面主要介绍不同操作系统平台下的集成编程环境,基于初学者以及我个人喜好,就不推荐大家命令行下用vim编程了,直接上IDE。
Windows系统下推荐大家使用Code::blocks这个软件。这个软件最大优点是自带了基于mingw的GCC以及GDB,只要下载70M左右软件包,就可以完整支持C++、C语言编程了。各种功能(比如调试功能)也很强大,版本更新也比较快。注意下载选择名字有mingw的文件,比如最新版本是codeblocks-10.05mingw-setup.exe(版本也许有所不同)。
如果需要做Windows操作系统的开发,可以下载Visual C++ 2010 Express。
因为Code::Blocks不包含Windows编程头文件(实际是因为没有Windows SDK),无法编写Windows操作系统相关的界面应用程序或者服务类程序。而VC++Express自带了这些头文件以及编程库,虽然功能稍微简陋,但对于练习使用基本够用。
对于计算机专业的学生朋友,建议大家使用Linux操作系统,或者更详细一点是使用Xubuntu操作系统作为桌面,使用Netbeans和GCC这个组合(当然也可以选择Code::Blocks)。在Xubuntu下可以通过apt-get install build-essential这个命令安装gcc相关程序,已经可以在Terminal下编译C语言程序了,但为了使用方便,大家可以选择Netbeans的C++支持包,在Netbeans网站上就能下载。
如果使用苹果Mac系统,毫无疑问XCode就是编程的绝佳选择,XCode可以在苹果开发者网站上免费下载,在IPhone SDK中也包含了XCode。
如果手头没有合适的编程环境,还需要实验一些简单的代码,可以用 提供的服务,在线编写运行代码。
另外建议大家申请一个的账号,在可以保存自己的练习代码,就不需要随身带着U盘了。
3,网络资源
如果想用十分钟时间了解一下C语言的来龙去脉、前世今生,维基百科这个页面 是最佳选择。
从维基百科可以看到,C语言1972年由Dennis Ritchie设计的命令式、结构化范式编程语言。类型为静态的弱类型,需要显式定义。最新国际标准为C99。设计上主要受到了B、ALGOL68、汇编语言、PL/I、FORTRAN的影响,C语言也影响了大量编程语言,如C++、Objective-C、C#、Java、Go、PHP、Python等等(个人觉得受C影响很大的是PHP,基本上有C编程基础的程序员,很容易就能上手PHP了,除了PHP的OO部分)。
在维基百科条目中有很大篇幅介绍了作者认为C语言缺失的特性,比如面向对象、多线程、GC、异常处理等等,当然这有些吹毛求疵,如果需要这些特性,完全可以用其它程序语言。另外一个介绍的重点是&未定义行为&,有些我们认为理所当然的结果,其实在C语言标准中并没有明确定义,假定这些行为应该如何,当程序使用另外的编译器或者不同版本编译器编译运行,都可能有bug产生。
接下来维基百科条目谈到了C语言的用处,必须承认尽管现在编程语言成百上千,能称之为&系统级&的少之又少,新兴语言中只有Go还能称得上。现在大规模软件项目中完全选用C语言可能性不大,但是核心部分完全可以用C搭建,相对C++开发工具的高昂价格,C语言相关的免费辅助开发软件非常丰富,比如splint,valgrind,不少核心库经过长期使用也都非常稳定。
由于C语言广泛支持各种平台以及编译器相对成熟可靠,不少编程语言选择C语言作为一个中间层,比如Glasgow Haskell编译器就是这样做的。
另一个可以找到大量C语言编程相关资料的地方是&美味书签&,通过搜索特定关键字 (C + programming)就可以找到很多值得挖掘的资源
还可以参考dmoz.org的C语言分类 相比美味书签时效性能差点,但是分类比较系统,查找也要容易一些。
程序员往往是懒惰的,&拿来主义&、&拷贝主义&很流行也很有效,当对某个函数或者关键字不是很理解的时候,看看别人是怎么使用的,会非常有启发性。这里介绍几个常用的代码搜索网站,最常用的是google的codesearch: ,可以通过不同条件及正则表达式搜索特定关键词。另外可以参考维基百科上一个&&分类,里面代码写的也很不错。还可以在上搜索相关项目。在前面博客文章我还介绍了一个名为罗塞塔代码的网站 这个网站上可以找到不同程序语言针对某个问题的解决方案,用于学习比较非常便利。
学习编程也需要大量阅读名家经典代码,与学中文英文需要大量阅读名著一个道理,C语言编程优质项目那是&彩旗飘舞,人山人海&,个人建议可以看看Lua、Sqlite、Nginx这些项目的代码,代码量不多,而且代码质量也都比较高。另外可以看看Linux内核代码,坊间有不少书籍可以帮助解读。关于如何很好的阅读代码,大家可以参考《Code Reading》这本书。
书看了几本,代码写了一些,也略微读了读其他人的代码,就应该用C语言来完成真实工作中碰到的问题,让C语言真正成为你的瑞士军刀。只有当你经常使用C语言来进行编程工作,经常思考如何通过C设计一个优雅高效的系统,才能更深刻的理解C语言设计哲学。
还可以到 参与回答问题,浏览其他人的问题解答来汲取知识,比如这篇 就介绍了一个C语言关于char类型的小陷阱。
C语言学习当中,有一些难点需要多加注意,如pointer与array的不同之处,复杂类型定义如何解读,如何正确使用预处理preprocessor以及宏定义。其实这些内容在前面书籍都是反复提到,如果按部就班学习下来,应该不成问题。
当C语言学习的差不多时候,还可以学习一门动态语言,比如Lua或者Python,试着在实际工作项目中混合使用动态语言与C语言,一加一发挥出来的力量不仅仅是二,而是非常二(说笑一下,哈哈)。
还有什么问题,欢迎留言。
一些有用的C语言网络资源:
C语言标准化组织ISO JTC1/SC22/WG14的主页,在这里可以找到ISO C的文档:
《The Development of the C Language》作者Dennis Ritchie,极为经典的论文。
&C语言全景&这个网站内容很全面:
Dan Saks在上的专栏 ,里面文章很有深度,值得一读。
这也是一个C语言资源汇总页面。
混乱C语言代码大赛,很著名。
另外一个C语言编程大赛,主要面向黑客。
comp.lang.c以及c.moderated这两个讨论组推荐订阅,相当于互联网最大的C相关编程问题论坛:
这里对C语言的各种bit操作做了收集整理,不少题目在面试时候经常出现。
台湾的惯C达人Jserv博客,建议大家订阅:
一些值得关注及研究的C语言相关项目:
TinyCC,被很多项目用作动态编译C语言的编译器引擎:
GCC的标准库实现:
Glib是GTK的底层辅助编程库,与C标准库是不一样的,在C语言上实现了面向对象机制:
dietlibc在前面博客文章介绍过,C标准库的另一种实现:
一些C语言编程时可以使用的工具软件,帮你提高代码质量:
PMD可用于检测重复代码
llvm的静态分析项目
C语言编程规范编程标准:
cert这个文档国内有中文翻译版本:
C语言编程电子书及教程:
这一本写的非常详细,你可以把它看成是类似谭浩强版的教科书。
这一本云风曾经推荐过,相当深入的介绍了C99标准,深入细节时候需要读读。
这本书在网上流传一个中文版本,《编写优化、高效、无错地代码》,另外也有英文影印版《编程精粹》。
作者王聪,也是相当hard geek,从两个样章看,包含了相当多的内容。
《C语言深度解剖》这本可以在百度文库或google搜到,可以读读,有些参考性。
《C标准和实现》作者姚新颜,他的《深度探索C、C++》算是当年比较有深度的书籍,可惜已经绝版了。这本书也可以在百度文库搜到。这本书也比较值得读。
良葛格C语言学习笔记
C与C++的兼容性问题
另一个文档关于C与C++标准兼容性问题:
《C Elements of Style》
《Linux安全编程》
《C Craft》电子版
《The function pointer tutorials》函数指针教程。
C语言编程及Unix系统调用,想用C在Unix或者Linux编程的朋友可以参考。
优化C、C++代码
图文并茂介绍C语言的指针
另外一篇介绍C语言优化的文章
一个C语言教学ppt
一些Unix下C语言编程相关的文章
Unix下如何建立静态、动态C语言函数库
如何使用GDB
一些C语言编程技巧
Advanced C programming,高级C语言编程,可以提高水平,非常有帮助
C语言问答,这些题目也可用于面试
阅读(...) 评论()今天看啥 热点:
看你喜欢什么啦。C#比较容易(个人感觉),主要用来开发asp.net网站,必须基于.net frameworkC++较灵活,啥都能做,不过写应用程序比较多
C#欢迎快来加入电脑医院团队哟!团队地址为: /t/TeamHome.e?sp=371410
你学C语言后,我建议你学C++好。因为嘛。c和c++没多大区别
就是语法不太一致。学C++可以把c中的基础在次巩固一遍。加深映像
c#,其实很简单,c学会了,c#就更简单了,你只要会把上面的语法规则 学好就行。。思想是最重要的。没了思维。你是写不出什么号程序的
祝你好运!
关键是看你想以后的发展方向是什么了,全面性的话C#,如果你不想做网站或从事这方面的工作就学C++!
当然是学c#了,c#和c的语法类似,其实高级语言精通一门即可,别的也可触类旁通,且c#称为vb和c++的完美结合,c#当然是首选了
c语言是程序员学习编程语言的第一门语言,这门语言大概要一个月左右就可以了,但是一定要多练习,不然隔几天你就会忘的差不多了,还要把理论知识掌握牢固,否则在以后的学习中你会非常的吃力!
1个月左右就行了吧。我就是这样的
c语言学起来非常简单很容易上手的!
看人的资质!
经常多写多看,多注意一下算法和思路,这样就会学得很快切忌畏难情绪
《21天学通C语言》(Teach Yourself C in 21 Days)第六版
/read.php?tid=214&u=73481
我是40天就不错了的
只要你用心了
我是学计算机网络的
学习没开课
但我也很想学C语言 因为C是基础啊
以后学别的语言就容易多了
我都是从网上下载C语言教材学习自学的
你也可以去电驴上搜索 下有很多哦
当然,什么事情都怕“认真”俩个字。我也是自己自学的。
如果你电脑理解方面比较强。自学是最好不过的
学习C语言主要是前期的基本功。 基本语法会了在学好就看自己的实力了。 入门开始都不容易。。 我们入门都用了半年呢、慢慢来。C++是在C语言的基础上学习的、就多了一个类的定义。 多看写经典 变成案例 很简单的。。
我可说电子书上的根本就不好,我有个朋友就是看电子书的,结果问他些基本东西都不懂,什么设变量啊,那些C要掌握的汇编基础也不懂,什么2进制,8进制,16进制就更别谈了,电子书上的都胡搞,希望你能去买本书,我推荐2本,你选一本就可以了,一是谭浩强谈C语言
二是零基础学C语言,这两本都非常适合新手学习,最后希望你能不放弃,不抛弃,把编程学好了!!
谭浩强老师的C语言教材
win-tc这个软件自带C语言教程以及C程序100例。
上百度搜,金鑫的这一套视频教材蛮好的!
给你推荐几个学习c++的视频网站有全面的c 学习视频和资料 /?u=6695参考资料: /u88/v_MjgzODU1MzM.html /zt/vs2005first/index.html /index.php?fromuid=29811 /bbs/index.php?fromuid=2961
相关搜索:
相关阅读:
相关频道:
电脑知识最近更新【满分急求】学C 好,还是学JAVA好?
我C 初级基础,JAVA无基础。今年我有一年的时间,想学门技术,平均每天学习八小时。一般大学生是一天毛学习时间6小时,纯学习时间差不多4小时。我一天纯学习时间8小时,差不多是他们二倍,我学习挺用功的。之前学习C ,虽然入门比较难,但因为我比较用功,不懂就死抠,逐渐对C 对函数的重命名,继承,多态等都弄懂了一些,能够自己独立完成一些题目。但到string类与标准模板库的部分,实在比较难,摸不清头绪。所以心情很矛盾,不知道是否该继续下去。
大家知道C 非常复杂,需要花大量时间去学习,去研究。我明年就准备工作了,对编程有一点基础,想用这一年在这两门语言中选择一门,努力钻研一下。同学说JAVA入门简单点,而且应用较广泛,是最热门语言。所以搞得我很纠结,不知道是该继续学好C ,还是改学JAVA。
我是还有今年一年的自由支配时间,可以全力学习。明年年初就工作了。我现在的水平是对大学计算机基础课程都学了(你懂的,大学教的那些东西基本都是没用的),C和C 有一定基础,JAVA没学过。
这一年我会很努力的,一年后从前途就业和未来职业发展的角度讲,是学C 好,还是学JAVA好。请大家给我提点建议(最好分析一下,谢谢)。
PS:还有一点,我家有亲戚,是移动公司的部门经理,未来可能帮我安排进移动公司工作,请问移动的软件设计部门,主要是用到C ,还是JAVA语言?
LZ不要着急,也不用那么矛盾,我和你学的是同一个专业,毕业工作了两年,我根据我的经验向你分析下这个问题。
1、关于大学学习的问题,这个不是LZ主要为难和矛盾的问题,但是既然有人提到了我就说说我自己的一点看法,大学学的知识说实话工作上面真正你能看到的用到的确实不多,现在中国的大学基本都一个样子(除了特别有名的那几所),教程的安排既要考虑到理论知识又要考虑实际运用,但是我们大学里学的东西基本上理论偏多知识偏广,对于考研的同学是有用的,但是对于毕业就要找工作的同学作用确实不大,因为我们找工作要的是实际操作能力,要的是精是专。我当时上学的时候也学了很多模电数电的知识,这些知识对于软件开发工作确实没有什么作用。根据我的经验,如果你要从事软件开发相关的工作,有几门课是必须要好好学的:
(1)数据库基础的相关知识。真正到工作中后你会发现,不管你用哪种语言开发,不管你做b\\s还是c\\s,归根结底都要用到数据库,无论你用哪种数据库系统,数据库基础都是一样的。
(2)一门开发语言的思想。注意这里说的是思想,不是语法、不是概念。这个确实需要长时间的学习才能领悟一门语言其中的精髓,当然现在主流开发语言都是java、c 、c#这些,这些的核心思想就是面向对象,也就是说以及说学习某一门语言不如说学习某一门语言的开发思想,只要你思想掌握了,你学java的去重新学c#,学c#的重新去学java,需要做的只是查一下语法,记一下常用类的用法,熟悉一下中间件框架的用法。很容易融会贯通的。开发语言的东西,你学多了就会感觉到万变不离其宗,掌握了学习方法,掌握了思想都很容易学习。当然课程上不一定有面向对象,我们当时是有这一门课的,如果没有就只能通过对语言的学习来自己领悟了,多看看别人的经验也是很好的。
(3)如离散数学此类相关的逻辑学课程。软件开发最重要的就是逻辑思维能力,遇到问题时候你是否能够很有逻辑的思考解决的重点,解决的顺序是至关重要的。开发时候的思维的完善性,代码的逻辑性都和逻辑思维密切相关。这个是终身受用的,就像我们小时候学数学一样,是有用的。
(4)网络基础知识,这个如果你要想网络工程师方向发展是必须精通的,软件开发方面也会用到一些,但是用的不多,基础的常识知道就行了,比如iso七层结构、ip分段等。
(5)如果你想在网络安全上发展,那么微机原理、汇编语言是必需掌握的。如果只是普通的软件开发不需要这方面的知识。
(6)一些软件开发相关的知识你是必须理解的,比如b\\s结构中的整个数据流向所用到的技术知识,如java方面的js、jsp、applet、serverlet、jdbc等等。这些知识作为开发人员都必须会用一些,包括简单的ps使用都需要懂一些,大的软件公司可以把不同的工作分的很细化,每部分都有人负责,但是小公司就是一个人必须整套都能搞定了。
(7)哦,还有一个忘记说了,这个应该放到第四点里面的,就是数据结构,这个东西在你面试或者笔试的时候会经常遇到,根本上这个东西也是逻辑思维的一部分,每种语言都需要,也都会用到,只是你发没发现而已。在开发中数据结构的知识也是潜移默化的起着作用的。虽然笔试中考到的可能是某中排序算法,实际开发中很少用到,但是其实人家考到就是你的学习的认真程度,考的是你的逻辑思维能力以及开发语言的运用能力。
我能想到的大学课程中对软件开发比较有用的就这些了。
2、关于你提到的学习c 还是java的问题。能看出来LZ是个很勤奋努力的人,对这个问题也很真诚,我就多说一些自己的看法。在这里我先声明不管什么开发语言,并不存在所谓的哪个比哪个好的说法,任何东西的存在都有它自己的价值。没有任何完美的东西,有好的地方就有不好的。有很多论坛很多人整天就相互吵架,有的说java好,有的说c#好,其实根本没必要比出个胜负,各有各的优点、缺点。关于c 和java,我根据我所知道的对两种语言的优缺点并且结合你的现状也是现在很多大学生存在的现状分析一下。因为我是主要学习java的,c 也懂一些。主要还是对java分析的多一些。
(1)对于两种语言的难易程度。两种语言各有各的长处,难易程度我觉得并不能简单的评论,你要学习的深入每种语言都有难度。入门简单不简单的问题我觉得其实都差不多,只不过java入门以后成就感比较足,能够快速的入门见到学习带来的收获。从语法规范性来说java确实要比c 明确简单一些,原因很简单,因为java就是根据c语言进化而来的,设计java的时候有一个原因就是c语言的很多语法没有很规范的标准。其实c 和java思想都一样,就是面向对象。只不过c 有指针,有虚函数等等容易产生难度的东西,而java从纯面向对象的方向规避了这些问题。所以人们感觉上java比较简单,其实是java纯面向对象的功劳。但是有的东西是java无法做到或者处理的不完善的,c 却能很好的处理,比如java无法直接操作内存指令,在一些底层的开发中无法使用,java依赖虚拟机运行脱离了虚拟机就无法使用。举个我们公司开发中的例子,我们需要将两种语言,例如java和pb(一种Windows下强大的c\\s客户端开发语言)开发的程序联合起来使用,那么中间就要有一个类似转换器一样的东西,我们把它叫做动态库dll,这个东西不能依赖java虚拟机运行,因为我们的pb程序无法使用虚拟机,那么这个动态库就需要用c 来开发。
(2)两种语言需要学习的重点。两种语言都是面向对象语言,那么面向对象的思想就必须掌握。面向对象的23中设计模式也是要好好研究一下的,说白了这个就是前人总结下来的好的开发逻辑结构。对于两种语言不同的着重点,java是中间件的使用,ssh三大框架必须精通,这个搞好了你找工作是非常简单的,java基础也非常重要,那些各种各样的类的使用必须掌握。c 是数据逻辑结构的运用以及语言本身的语法功能难点。
(3)对于两种语言的就业前景。其实是这样的,一般的大公司两种语言的人都需要,任何公司招java的不会排斥学c 的,招c 的也不会排斥学java的,如果排斥了,那么我建议你不要去那样的公司。从就业重点来看,中小型公司招java的比较多,中大型公司招两种语言的差不多,但是不可否认,java的需求量确实比c 大。不过物以稀为贵,现在学java的人很多,但是学c 的相对比较少,c 学的好以后的发展也很不错。如果你想考虑别的,那么我建议你学习数据库dba相关的知识,这个学好了,如果能考个oracl的dba认证,你的前途就是大大的好了。
综上所述,LZ其实没有必要为学习c 还是java纠结。按照自己的兴趣来,你对c 有基础就继续学习c ,不是说什么热门才学什么,不热门的学了更好,物以稀为贵嘛。如果你对java的纯面向对象,ssh中间件框架感兴趣就学习java,有一门语言基础不管学什么都不是那么难的。只要肯努力,耐住性子好好学,不管学什么都有前途。
对于移动的事,我觉得不用管别人怎么看的,有关系不用的才是傻子,有关系自己愿意进去进好好工作。据我所知,移动的项目据我所知他们覆盖的范围相当大,很多东西都不自己做,外包到其他公司开发,自己只做维护工作,有的维护都是外包出去的,c 和java都用,还是像上面说到的,java需求量比c 大,但是c 大多是做底层的,薪水相对较高,技能要求也相对较高。维护上的工作主要还是数据上的,所以说数据库的知识一定要学好。
最后希望LZ能学业有成,找到自己理想的工作,如果对java或者其他以后工作有问题可以继续联系我。
先学好c ,先把面向对象开发过程的思想学好,再去学java,我个人觉得.
楼主,你好。
如果仅有一年的时间,我建议你学JAVA。
楼主应该也知道,C 的算法什么的需要大量的时间,因此一年你不可能成为算法达人。
而JAVA,比较容易上手,只要抱着一本
还是C学好C相信我你不会后悔!JAVA扩广面大!建议你学好对语言类来说最为详尽的C!在另学习的时候会轻松一些!我看你还是一时烦恼不知道干什么了!静下心来想像吧!
C 只是学习编程的一个基础,学习了C 对于以后学习软件的设计比较容易入手点,个人认为学习JAVA的实用性强一点。
竟然c 有基础那就先学这个较好
你觉得C 学得困难,那就学习java吧,它确实容易学。
移动主要是JAVA,方向是J2EE,这里主要是说程序员的数量。
发展方向肯定是JAVA要好,这里说的发展方向是指找工作的容易程度,而不是指你进去或将来的收入。
另外LZ不用太鄙视大学生,的确大学学习时间是不多,但每个人的学习方法和效率是不一样的,和上不上大学没关系。
学编程千万不能死抠,除非你是搞编译器开发的。到做项目的时候经常摆在你面前一大堆的解决方案,而且大部分要用像模板库这样的第三方解决方案。到时候需要以最快时间验证这些方案是否可行,不可行就换其它的,如果每个都抠个十天半个月合同早就到期了。这种情况尤其JAVA多,JAVA开源项目太多了。C 程序员很多都是自己写的,会少些。
C 开发速度不是它的优势,但它速度快。因此C 程序员要求写的程序稳健、精悍。另外C 暴露了很多系统底层,对windowsAPI、内存机制、文件系统也要有相当的了解。JAVA屏蔽了这些细节,但对开发时间比较紧。
就好像在问学用斧头好还是学用镰刀好
关键是你要做什么,以后从事劈木头就斧头好,从事砍柴就镰刀好,从事不用镰刀斧头的工作,学哪个都毛用没有。
我是计算机系学生,我觉得最好先学c ,然后在学Java的话,比交容易,因为当你学好了一门语言后,会发现语言都是相通的,是可以过渡的,java语言毕竟是吸收了各语言的精华。学好了c ,即使每天出现一门新语言,你都可以应付的。
(你懂的,大学教的那些东西基本都是没用的)
从你这句话可以看出你没真正上过大学吧?没用的大学是不会教你的,别想着你在外面买两本书自学就能怎么怎么样啊大哥,真正上过大学的人都知道虽然嘴上说着那些天天泡妞睡觉那样的话,其实最努力学习的正正是这些人,这些人让你轻视了大学的学习和课程,让你在那里自大而已,看你吹的,就知道你就那点皮毛了,我还是不作评论了,
亲戚是移动公司的部门经理?安排进移动公司工作?得了,那我对移动的未来无语了,说,你亲戚是谁,哪里人,在哪里的移动公司分公司工作?
我也是这个专业毕业的,现在工作四五年了。从长远开来学C 是没错的。
汇编,编译原理,计算机系统结构这些课程不要求全会也要了解。实际中很少用,但对以后的学习很有帮助。
目前JAVA在软件工程,互联网和分布计算等各方面都体现出了C 不具备的优势。一个软件项目,采用JAVA可以比C 缩短一半的时间。因此JAVA目前在世界上越来越受到重视和流行。所以我建议你学JAVA。
毫无疑问,JAVA比C 简单。C 的运算符重载,多重继承等概念比较容易出错,而且在写程序时,还要考虑释放内存,为每个类写析构函数,而JAVA里的垃圾收集器会自动帮你搞定。JAVA在传递对象,数组作为函数参数等方面也非常简单且不容易出错。
JAVA的跨平台性能更是C 无法媲美的,还有JAVA在网络上的应用。
大家可能要问,既然C 各方面都不如JAVA,怎么还不淘汰。其实,java的唯一不足就是性能。用java写的应用程序运行起来要比c 慢很多。不过目前正在改进中。
JAVA相对简单,好上手
C 比较难,学习周期比较长。
c ,你学了c语言后,自己都看得懂java!
C ,没话说的,如果时间充足学点难度高的,学会了C ,java就不成问题
C 吧,我也是没什么计算机底子(应该比你差些)打算学学,有学计算机的同学推荐从C语言开始
java是纯粹的面向对象语言,比C 上手容易,设计也更为清晰。而且java的各种API接口用起来也比较顺手(取决于个人感觉),文档也非常完善。
C 如果不过STL/TR1和boost库这一关,说实话相当于没有学。
下页更精彩:1
本文已影响人

我要回帖

更多关于 你们这样子是不行的 的文章

 

随机推荐