当前位置:首页 » 编程语言 » c语言和java编译原理
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言和java编译原理

发布时间: 2022-05-07 10:17:17

‘壹’ c语言编译原理是什么

编译共分为四个阶段:预处理阶段、编译阶段、汇编阶段、链接阶段。

1、预处理阶段:

主要工作是将头文件插入到所写的代码中,生成扩展名为“.i”的文件替换原来的扩展名为“.c”的文件,但是原来的文件仍然保留,只是执行过程中的实际文件发生了改变。(这里所说的替换并不是指原来的文件被删除)

2、汇编阶段:

插入汇编语言程序,将代码翻译成汇编语言。编译器首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,编译器把代码翻译成汇编语言,同时将扩展名为“.i”的文件翻译成扩展名为“.s”的文件。

3、编译阶段:

将汇编语言翻译成机器语言指令,并将指令打包封存成可重定位目标程序的格式,将扩展名为“.s”的文件翻译成扩展名为“.o”的二进制文件。

4、链接阶段:

在示例代码中,改代码文件调用了标准库中printf函数。而printf函数的实际存储位置是一个单独编译的目标文件(编译的结果也是扩展名为“.o”的文件),所以此时主函数调用的时候,需要将该文件(即printf函数所在的编译文件)与hello world文件整合到一起,此时链接器就可以大显神通了,将两个文件合并后生成一个可执行目标文件。

‘贰’ C语言工作原理

作为一种编程语言,本身是谈不上工作原理的,实际上C语言所有的语法,正是C语言编译器的工作原理或者工作机制的具体实现。要细致的讨论起来是不可能,但是作为C语言程序员,必须了解这个大致的流程。一个程序,从C语言源码,到系统可执行的文件,一般经历四个过程。
1、预处理阶断,这个阶断是文本处理阶断,有预处理器来完成,会将源码中的带"#"开头的预处理命令进行相应的处理,在Linux上C语言的预处理器程序是cp命令。
2、编译阶断,这个阶断是有C语言编译阶断,在Linux上C语言的编译器是cc命令,它将C语言源码转换成汇编指令。
3、汇编阶断,这个阶断是汇编编译阶断,在Linux上C语言的汇编器是as命令,这个阶断会将汇编指令编译成二进制机器码。
4、链接阶断,这个阶断是会将汇编阶断生成的机器码目标文件,装载成一个系统可执行的文件,在Linux平台以ELF格式进行组装,在Windows平台上以PE格式进行组装。在Linux平台上的链接器命令为ld,在windows平台上的链接器命令为linker。

‘叁’ 电脑是如何识别C语言和JAVA语言的

电脑只懂二进制代码,每个用于编程的软件平台,都必须将高级语言转换成二进制代码,这个过程就是编译,C也好JAVA也罢,都有自己的编译器。

‘肆’ 学java 用c语言打基础,有什么优势,区分什么

如果你是初中毕业,没上高中,那要干这行是非常难的。嗯,我是说要干好的话,是很难的。 看在你前面两个问题的份上,我就花点时间来回答你这个问题。 首先,谭浩强那个书是几乎没有任何意义的,其中的代码质量极差,用来糊弄糊弄文科学生考个计算机二级还可以,但是你想学编程,就不用看那个了,计算机等级考试也没有任何意义,任何一个公司招人都不会看那个的。 首先你要清楚明白一点,就是你还小,潜力很大,可以说你的前途是无限的,就看你自己怎么走了。 如果你安心做个小程序员,写写代码混混日子,每个月拿个3000来块钱,那你现在可以随便玩,以后年纪大了点去上个什麽java培训班,或者如果你肯花点功夫上个计算机本科,三流大学随便混,现在做程序员的基本都能拿这么多。但是前途嘛,嘿嘿,你自己想想吧。 所以,小弟弟,现在当务之急还是上好高中,考个好点的大学。 如果你学有余力想自学计算机的。那我可以指点你一条路,但是切记,前提是要学有余力,如果你成绩很好,那可以花课余时间学这个,如果学校功课很吃力,那一定要确保上好大学。 毕竟很多计算机系牛人上大学之前连计算机都没有碰过,这玩意不急在一时,你现在还小。 好,下面给你指条路,这让我好好想想。 首先,程序员是个很不专业的说法,你这种年纪,志向要高,目标要远大,你所谓的“编程”只是技术的末流,打个比方,真正的高手肯定是有一门高深的内功,然后才去练剑法,甚至做到五招胜有招的境界。所以,语言这东西不急的,先打好基础。 数学和英语,这两门都是重中之中,数学培养逻辑思维,英语嘛,以后好的专业文献和书籍都是英文原版的。一千页的厚度,一百多万字的书都是要看英文版的的。而且数学本身也有非常多的实际应用,不只是培养逻辑思维这么简单,当然,我这里说的是数学,不是算数。 言归正传(我之所以说这么多废话就是想提醒你,学校功课一定要搞好。),你可以先买点经典教材的中文版来看。刚开始肯定是非常非常难的,天书一般,特别基础的书我也太清楚了,因为那个对我来说很遥远,你可以去找本计算机科学导论这样的书来看。有个网站你一定要记住,要常去,就是豆瓣读书,网址你自己搜,然后里在里面可以搜索一本计算机科学概论这书,翻译的,这书我没看过,但是打基础应该不错的,当然,这种专业书籍都是非常枯燥的,而且可能你看了很久,看了很多本,也不会有什麽效果,他不会立马让你成为一个“牛人”或者“编程高手”的,但是正如我之前所说,你还小,路还长,所以要把目标定得高。想成为真正的高手还是学点三脚猫功夫就看你自己了。 看完这个导论或者概论式的书,你可以开始往细节探索了,计算机嘛,总的来说就是两条线,硬件和软件,即使你喜欢软件,硬件也是要学的,这个没有第二选择,最好的就是CS:APP,国内翻做深入理解计算机系统,这书堪比计算机界的九阴真经,内容很全,涵盖很多科目,软硬都有,也很深,习题还有详细讲解,当然也很厚,这书是打基础的最好选择(当然,这个基础是相对我来说的,对你可能很不基础了。)这书不能直接看,你得先看看国内教材,推荐唐朔飞的计算机组成原理和汤子瀛的操作系统,还有王爽的汇编语言(这本书是国内教材里经典的经典啊,小学生都能看懂。),这三本书你肯定也看不太懂,但是一定要翻透,不求甚解,但求读熟,以后你会明白的。 嗯,然后就是语言了,看完这三本书之后你还不能看“深入理解计算机系统”,因为你要学一门语言,打基础当然是C语言了,C语言最经典的教材当然是C语言本身的发明者写的那本,叫“C程序设计语言”但是这本书你肯有可能看不懂,但是一定要买,可以作为参考书,或者收藏。。。不过这书不太适合入门,那么用什麽书入门呢,这我到确实说不太好,因为学习C语言对我也是很久远的事情了,我当年就是看谭浩强那本书入门的,当然,这本书很不好,会给你养成很不好的习惯,但是胜在浅显易懂,你自己掂量吧。 这里扯远一点,C语言语法非常简单,学起来非常快,但是我不知道好的入门教材,如果你不想从C语言入门,直接学C++也是可以的,C++入门不二经典,就是Essential C++,这书中文名我不知道,你自己找找去吧。Essential C++看完之后看C++ Primer,然后看The C++ Programming Language,当然,这都是后话了,后面两本都很深,没有一点基础是看不下来的(而且非常厚),而且看完这三本C++只能说你算是掌握这门语言了,离精通还差得远呢。 嗯,回归正题,那么看完组成原理,操作系统,汇编语言,和学完一门语言(C或者C++)(对了,汇编语言可能要在学完C或者C++之后再学)。之后,你就可以看“深入理解计算机系统”了,这是本大部头,不要怕,前面基础有了,看这本不会很难的。 看完“深入理解计算机系统”,恭喜你,入门了,你对整个计算机系统有了一个比较全面深入的理解了,当然,我给你假想的目标比较高,国内的那些垃圾教材就不用去翻了。 接下来可以学更“专”一点的东西了,首先,你要学好离散数学,不,不是学好,是“学”就可以,数学这东西,要学好是要花大力气的,如果你进了一所好的大学,那当然要学好,如果你只是自学,那你应该找本国外的大部头的离散数学教材翻一遍,不求甚解,但是起码题目都看一遍,概念都过过目,这也是基础。 然后你可以随便找本数据结构的书看,随便找,随便翻,不求甚解,但求读熟。 数据结构本身是比较细枝末节的东西,现在不用太纠结,看完数据结构,就要看计算机科学的核心了,就是算法,推荐直接上算法导论,这书现在国内只有第二版,不过等你看到这程度,估计第三版的中文版也出了。这书虽然非常着名,虽然很厚,但是它不难!讲得非常细,作者生怕你看不懂。 算法是核心,是转折点,看完之后前面的路就广了随便你选一条。 建议你学编译原理,教材没得说,龙书,你自己搜搜就知道了。 网络,这个基础教材也没得说,computer networks(我这里说的所有书你都可以在豆瓣找到的) 然后是数据库,这个要看数据库系统基础教程,当然,学数据库之前最好要有汇编,算法,和编译的基础。这书也是外国的。 然后,你就可以考虑具体实用了,如果你喜欢底层,做系统软件,那可以继续往C语言或者C++发展,如果想学JAVA,那也可以,当然,有一点就是,等你成人了,等你大学毕了业,C++或者Java还是不是业界主流都不一定的,这个行业发展非常快,但是唯有基础原理是不变的,所以我根本没有跟你说太多语言和编程的东西,你还小,学那些没用的,也不需要。基础打好,原理搞懂,前面就是一马平川,而且是青藏高原上的平川,你层次就比一般程序员高了啊。 这时候如果你大学成绩优秀,那没得说的,出国,本科毕业申请美国博士有奖学金的,花不了太多钱,当然,前提是你非常优秀,而且非常重要的一点是你本科成绩必须很好(我就是栽在了本科成绩上)。 说了这么多,不是我2,咱也不认识,我只不过回答了你两次问题,拿了点根本无所谓的网络知道积分罢了,我只是觉得,看见这样一个对计算机感兴趣的晚辈,如果能适时给你一点指导,也许就能改变你一生,如果真能这样,也不枉我花这么多时间打这么多字了,但是,很大概率是你和普通的小孩一样,混混日子,一无所成,路是你自己走的,具体能有多少成就,就看你自己了。 另外,真的,其实你现在什么都不用关系,我说的那些你都可以当屁话,学校功课搞好就行,上好点的大学,咱理工科文凭学历是非常非常重要的!尤其是计算机这样最偏理科的工科。 学计算机是非常枯燥的,开始也是非常难的,但是入了门之后再继续深入就会很顺利了,怎么能算入门了呢?我觉得,看完“深入理解计算机系统”就行。 记住,这是理工科,作为一个理工男,一定要热爱自己的专业,把枯燥的东西学出兴趣来,加油,小盆友。 还有一点,我说的那些书,可能的话,尽量看英文版,学计算机,英文不好是没法混的。 再加一条,计算机的专业书初学者都是很难看懂的,很多时候一个概念作者根本不解释,你也不明白,因为作者自己明白了,他也假设你明白了。所以有个诀窍就是,看一本书的时候,搞点同一科目的其他书来参考着看,看到不明白的地方翻翻其他书,也许就有了,当然,主要还是以我给你推荐的那几本为准。

‘伍’ 请教下c语言学的好可以有哪些工作机会,麻烦说的具体些,谢谢,还有学linux内核java什么的又怎么样呢

开发板用友善之臂的吧
mini2440 连3.5寸屏500块钱的样子
有好几张DVD学习光盘

这款口碑比较高

嵌入式Linux操作系统学习规划
ARM+LINUX路线,主攻嵌入式Linux操作系统及其上应用软件开发目标:
(1) 掌握主流嵌入式微处理器的结构与原理(初步定为arm9)
(2) 必须掌握一个嵌入式操作系统 (初步定为uclinux或linux,版本待定)
(3) 必须熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。
从事嵌入式软件开发的好处是:
(1)目前国内外这方面的人都很稀缺。这一领域入门门槛较高,所以非专业IT人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,大多数人无条件接触。
(2)与企业计算等应用软件不同,嵌入式领域人才的工作强度通常低一些(但收入不低)。
(3)哪天若想创业,搞自已的产品,嵌入式不像应用软件那样容易被盗版。硬件设计一般都是请其它公司给订做(这叫“贴牌”:OEM),都是通用的硬件,我们只管设计软件就变成自己的产品了。
(4)兴趣所在,这是最主要的。
从事嵌入式软件开发的缺点是:
(1)入门起点较高,所用到的技术往往都有一定难度,若软硬件基础不好,特别是操作系统级软件功底不深,则可能不适于此行。
(2)这方面的企业数量要远少于企业计算类企业。
(3)有少数公司经常要硕士以上的人搞嵌入式,主要是基于嵌入式的难度。但大多数公司也并无此要求,只要有经验即可。
(4)平台依托强,换平台比较辛苦。
兴趣的由来:
1、成功观念不同,不虚度此生,就是我的成功。
2、喜欢思考,挑战逻辑思维。
3、喜欢C
C是一种能发挥思维极限的语言。关于C的精神的一些方面可以被概述成短句如下:
相信程序员。
不要阻止程序员做那些需要去做的。
保持语言短小精干。
一种方法做一个操作。
使得它运行的够快,尽管它并不能保证将是可移植的。
4、喜欢底层开发,讨厌vb类开发工具(并不是说vb不好)。
5、发展前景好,适合创业,不想自己要死了的时候还是一个工程师。
方法步骤:
1、基础知识:
目的:能看懂硬件工作原理,但重点在嵌入式软件,特别是操作系统级软件,那将是我的优势。
科目:数字电路、计算机组成原理、嵌入式微处理器结构。
汇编语言、C/C++、编译原理、离散数学。
数据结构和算法、操作系统、软件工程、网络、数据库。
方法:虽科目众多,但都是较简单的基础,且大部分已掌握。不一定全学,可根据需要选修。
主攻书籍:the c++ programming language(一直没时间读)、数据结构-C2。

2、学习linux:
目的:深入掌握linux系统。
方法:使用linux—〉linxu系统编程开发—〉驱动开发和分析linux内核。先看深,那主讲原理。看几遍后,看情景分析,对照深看,两本交叉,深是纲,情是目。剖析则是0.11版,适合学习。最后深入代码。
主攻书籍:linux内核完全剖析、unix环境高级编程、深入理解linux内核、情景分析和源代。
3、学习嵌入式linux:
目的:掌握嵌入式处理器其及系统。
方法:(1)嵌入式微处理器结构与应用:直接arm原理及汇编即可,不要重复x86。
(2)嵌入式操作系统类:ucOS/II简单,开源,可供入门。而后深入研究uClinux。
(3)必须有块开发板(arm9以上),有条件可参加培训(进步快,能认识些朋友)。
主攻书籍:毛德操的《嵌入式系统》及其他arm9手册与arm汇编指令等。

4、深入学习:
A、数字图像压缩技术:主要是应掌握MPEG、mp3等编解码算法和技术。
B、通信协议及编程技术:TCP/IP协议、802.11,Bluetooth,GPRS、GSM、CDMA等。

2010-8-21 16:46 回复
122.90.173.* 2楼

C、网络与信息安全技术:如加密技术,数字证书CA等。
D、DSP技术:Digital Signal Process,DSP处理器通过硬件实现数字信号处理算法。
说明:太多细节未说明,可根据实际情况调整。重点在于1、3,不必完全按照顺序作。对于学习c++,理由是c++不只是一种语言,一种工具,她还是一种艺术,一种文化,一种哲学理念、但不是拿来炫耀得东西。对于linux内核,学习编程,读一些优秀代码也是有必要的。
注意: 要学会举一反多,有强大的基础,很多东西简单看看就能会。想成为合格的程序员,前提是必须熟练至少一种编程语言,并具有良好的逻辑思维。一定要理论结合实践。
不要一味钻研技术,虽然挤出时间是很难做到的,但还是要留点余地去完善其他的爱好,比如宇宙,素描、机械、管理,心理学、游戏、科幻电影。还有一些不愿意做但必须要做的!
技术是通过编程编程在编程编出来的。永远不要梦想一步登天,不要做浮躁的人,不要觉得路途漫上。而是要编程编程在编程,完了在编程,在编程!等机会来了在创业(不要相信有奇迹发生,盲目创业很难成功,即便成功了发展空间也不一定很大)。

嵌入式书籍推荐
Linux基础
1、《Linux与Unix Shell 编程指南》
C语言基础
1、《C Primer Plus,5th Edition》Stephen Prata着
2、《The C Programming Language, 2nd Edition》Brian W. Kernighan David M. Rithie(K & R)着
3、《Advanced Programming in the UNIX Environment,2nd Edition》(APUE)
4、《嵌入式Linux应用程序开发详解》
Linux内核
1、《深入理解Linux内核》(第三版)
2、《Linux内核源代码情景分析》毛德操 胡希明着
研发方向
1、《UNIX Network Programming》(UNP)
2、《TCP/IP详解》
3、《Linux内核编程》
4、《Linux设备驱动开发》(LDD)
5、《Linux高级程序设计》 杨宗德着
硬件基础
1、《ARM体系结构与编程》杜春雷着
2、S3C2410 Datasheet
英语基础
1、《计算机与通信专业英语》
系统教程
1、《嵌入式系统――体系结构、编程与设计》
2、《嵌入式系统――采用公开源代码和StrongARM/Xscale处理器》毛德操 胡希明着
3、《Building Embedded Linux Systems》
4、《嵌入式ARM系统原理与实例开发》 杨宗德着
理论基础
1、《算法导论》
2、《数据结构(C语言版)》
3、《计算机组织与体系结构?性能分析》
4、《深入理解计算机系统》Randal E. Bryant David O''Hallaron着
5、《操作系统:精髓与设计原理》
6、《编译原理》
7、《数据通信与计算机网络》
8、《数据压缩原理与应用》

C语言书籍推荐
1. The C programming language 《C程序设计语言》
2. Pointers on C 《C和指针》
3. C traps and pitfalls 《C陷阱与缺陷》
4. Expert C Lanuage 《专家C编程》
5. Writing Clean Code -----Microsoft Techiniques for Developing Bug-free C Programs
《编程精粹--Microsoft 编写优质无错C程序秘诀》
6. Programming Embedded Systems in C and C++ 《嵌入式系统编程》
7.《C语言嵌入式系统编程修炼》
8.《高质量C++/C编程指南》林锐
尽可能多的编码,要学好C,不能只注重C本身。算法,架构方式等都很重要。

这里很多书其实是推荐而已,不必太在意,关键还是基础,才是重中之重!!!
另外,虚机团上产品团购,超级便宜

‘陆’ java、c语言,编译原理,高手来下

程序编译??

你的最终目的是开发编译器还是做文法解释器?还是你就是像学编程?

如果你像做编译方面的研究,初中还太早了。有很多基础知识你不懂没有办法学的。要学编译原理只要要先学离散数学。

如果你仅仅是要学编程(基本的软件开发),我建议你学标准C开始,唐浩强的那本C语言教程非常经典,而且也好懂。

如果你哟问题的话,给我邮件:danndy◎21cn.com,我尽力回答。不好意思,公司将QQ封了,我不能上QQ。

‘柒’ 想知道C语言和java的功能是有什么实现的怎么实现的

他们是针对底层的机器语言,汇编预言进行了整理封装行成的。至于语法都是自己设计的时候规定的,具体什么作用,主要看当初设计时对底层语言的哪个功能进行了封装。

‘捌’ 编译原理 我怎么看不懂啊

建议先学习或先了解一些高级语言如:java、c语言后,对其的工作过程和运行方式有一点的了解后,再看编译原理 ,因为编译原理的工作就是把高级语言编译成汇编语言或机器语言,让机器来执行。如果你对高级语言一点也不了解的话会加大你学习负担和压力的。

‘玖’ 学完了C语言,是否有必要学Java

看完这个,你可能会有自己的一点想法了
应届生学C好还是学JAVA好,做什么更挣钱
老师:
你好。
我是一名09界刚毕业工作不久的java菜鸟级程序员。本人对java水平可以混口饭了,现在可以在工作中开发一般的小项目,都是B/S的。 本人基础很烂,基本上:算法 、数据结构、计算机组成原理、操作系统、编译原理可以说从来没有学过。目前我工作的环境是:开发b/s 架构的项目,不考虑性能,实际上实现需求就可以了。我可以跟客户打交道,可以自己分析需求,可以自己跟其他人合作一些10万以下的小项目。基本上都是对数据库的增删改查。来来去去都是那些表非常无聊。
虽然工作不久,但是目前已经感觉到在这样下去,顶多只是熟悉一下业务而言。就本身编程水平基本上没多少提高。因为公司追求效益,只要写出来的东西能用就完事,没时间考虑代码,而且java没有指针,也不用的算法,工作中的设计模式也就常用的几个。剩下的几乎没什么可以提高的了( 项目管理学了一些,已经其他 )。
目前非常希望转C方面发展,我C语言可以认为0水平。但是由于有了java功底。虽然已经体会到语言只不过是解决方案的工具而已。但是就算我在java里面花再多时间感觉自己只是在浪费青春,我绝不是小看java,因为我也是用这门语言的,java没有内存管理,用java或者类似的语言,我永远只看到上层的东西。我希望自己成为一名技术非常强悍的程序员。可以写出一些经典的开源工具。因为以前大学都是逃课,睡觉,打游戏。所以基础很差,实际上我相当于一个0基础的高中生学了半年java的人。目前自己每天在学数据结构。但是不知道路在哪里。我想换一份 C 的工作,不知道从哪里开始学。我选C有几个原因的:C的工作环境可以迫使你使用算法,然后进一步的慢慢深入,可以接触操作系统,然后慢慢使自己进入高层次的开发。因为C涉及面广,所以迫使自己学得到很多东西。进而提升自己水平而已。与其说选C语言,不如所选C语言所涉及的范围而已!因为在java环境,不可能到达我理想高度!
大环境很浮躁,这是我切身的体会。但是我有耐心和毅力。我第一步的想法是 先转到涉及算法的环境。实在不行,只要开发上用到C就行了。 因为我对C的工作环境不了解,可能理解上有误,希望你指点一下。如果像我这种水平的人,想要找到C的工作,大概怎么起步。 我说一下自己的java起步 当初我是这样的: 1、学习java 语法(j2se)。
2、用java 做一个 俄罗斯游戏。 3、学习 jsp 做一个MVC的留言板, 学习 流行框架(SSH), 做一个 管理系统。
就这样 我就找到 JAVA EE 应用开发的工作了。当时进公司不用适应期就直接上项目了。

我当初是在没有老师( 老师重来不把一个年年补考,每次都垫底的学生当人看),同学鄙视(最后一个学期每个人都找工作,打游戏。而我每天都在疯狂的学习 一直到毕业前夕 ),没有人管的情况下过来的。靠google, , 买经典教材,网络视频,Q群 的情况下,终于用一张合同在毕业前证明了自己的能力! 这段辛酸的经历给了我很多东西,特别是自制力、自学能力、毅力。

现在我已经打算辞职回家,再次进入疯狂的学习状态,虽然现在每天下班回来也在学习。但是每天4个小时远远比不上 原先每天12个小时的自学效率。而且自学可以连续学半年,现在每天还要工作,非常不合适。
我希望用半年 至少补上 大学的 数据结构,基本算法,计算机组成原理,操作系统、 同时复习数学知识( 主要是 离散数学、线性代数 )这些基础。 如果半年内时间紧的 Linux、汇编和编译原理可否先暂时缓缓。

工作意向:优先 游戏编程, 然后其他的用C的也可以( 曾经非常想考虑 C的嵌入式,但是发现涉及知识有点广,而且工具也不便宜 )其实我非常希望向网络发展,只是不知道代价多大( TCP/IP 和其它网络知识不懂,这个要多久,1个月内可以达到工作要求可以接受 )。

然而C的路子怎么走呢?
原先这样思考的 : 1 C语法 2、用一个小游戏( 俄罗斯方块、或者是 五指棋 )来巩固前面C语言基本知识。 掌握这些后我不知道干嘛了。
第三步:????( MFC? 不学它行不行,如果工作普遍需要我非常乐意学 )

目前本人的水平基本(资质普通)就这样了。你看通过半年 每天12个小时的高强度的学习,怎么才可以到达目前 找到 使用 C语言 开发 的工作。 希望您指点一下。最好可以列出来几条路子 , 比如 游戏编程的、网络的、然后其它的。
非常感谢你看完我的邮件, 静候佳音。
2009-10-12

专家回答:

这位同学你好,从这封信看得出来你的心情还是很急迫的,你这种心情我完全能够理解。我把问题分几点说,尽量说细一点,希望能对你有所帮助。

首先,你说你是09年毕业的大学生,那么算下来,你应该上班才几个月而已,就这一点,你能在新的单位几个月时间就把工作拿上手,首先恭喜你,这说明你是真的很有实力,当年我转行游戏编程,用了差不多两年才真正想清楚程序设计的真意,我觉得你比我强。呵呵。

你说Java基本上都是做B/S数据库,觉得没有意思,其实这个我也很理解,不过,我觉得你可能不是很了解实际情况。这里我需要给你讲清楚,其实不仅仅是Java程序员,只要到企业中做应用开发,或多或少都和数据库沾点边。当年我用VC还写报表系统呢,你能说这不是数据库?

其实有个问题可能大家都没有关注到,至少,我到学生大本营半年,发现大家都没有讨论过。那就是,做什么最赚钱?无可否认,软件可以实现各方面应用,不过,就我的观察,在现实生活中,有两种软件最赚钱,一种是数据库,一种就是嵌入式底层的东东,嗯,随着互联网的发展,目前做网络程序也很赚钱。

其实原因很简单,就是因为软件的盗版问题。我想看到我这篇文章的每个人,或多或少都用过盗版软件,包括我自己,呵呵,咱们中国人穷啊,动辄几百上千的软件费用,咱们买不起的,所以电脑城的光盘市场才这么火爆。

但是,这带来了另外一个问题,就是当有一天,我们自己成为软件开发者的时候,才发现,盗版导致我们自己的收入降低,无法维系生活。这时候,恐怕再来大声疾呼,杜绝盗版,已经晚了,你说是不?

其实我们可能对市场不敏感,反正每个月发薪水,收入基本上旱涝保收,但是公司的老总们对这个很敏感,软件卖不出钱,公司就亏本,亏多了,就垮掉了,最终程序员还是没有收入。

因此,公司里面做软件,一般都做上面的软件,即数据库应用,嵌入式应用,控制类应用,网络服务应用较多。因为这几种应用,不容易被盗版,能卖到钱。通用性的应用,比如操作系统,比如很多工具软件,比如PC游戏,其实很难卖钱的。

数据库应用,一般数据库本身是使用成熟的商用系统,如MySQL,SQL Server,Oracle等,我们小公司拿来,再根据具体应用需求,做二次定制开发,这是一大类市场,其实这个市场的真正名字叫做“企业数据应用定制市场”。由于是定制的,自然没有通用性,也就不会有盗版了。

控制类,嵌入式类,很多都和具体硬件设备相关,换个硬件平台就不通用了,大家知道,中国的东东,要防盗版,最好和硬件相关,只要绑定硬件,软件一般不好到,以前出的防病毒卡,汉卡什么的,其实利用的就是这个市场规律。

服务应用呢,就更好说了,由于主要程序逻辑都在服务器端,基于B/S的模型,客户端连个软件都没有,服务器的管理自然比卖出去的软件好管理,不容易盗版。因此,这类企业也活得长,比如各个网站,各种网游什么的。所以我一直觉得,以后云计算发展起来后,很多软件可能会把零售制改为租用制,比如photoshop,大家买套软件几千,但一般人就是处理一下自家照片,自然不划算,因此盗版很多,但以后假如软件公司把它做成服务器版,大家把照片上传,处理,最后再存回来,这个过程每次租金1毛钱,每个人都花得起的话,我看以后就没那么多盗版了。另外,服务器应用其实大多数也是数据库应用。

所以,我首先要说,不管你是不是换工作,以后你恐怕会一直遇到数据库类的应用,不管你喜欢不喜欢,但这是社会的现实,你必须承认。你说对吧?

在这个共识下,我们再来看,其实我们会发现,三大主流应用中,只有嵌入式不适合Java,其他的数据库和服务器应用,其实Java比C和C++方便得多,因此,我建议你就在Java这条路上走下去,不一定非要转C和C++。本来你的强项就是Java,而且这也是主流的可以卖钱的市场,为啥不坚持呢?

从另外一个角度说,我也认为你应该坚持,你毕竟毕业不到半年,对社会,对公司,对本职工作其实了解并不深入,你认为Java就那么几个设计模式,没有挑战性,这个我能理解,但是,我觉得你说的不全面。起码我做程序做了这么多年,到底有多少种设计模式,我也说不清楚,我相信很多人都说不清楚。需要具体应用具体分析。

我不是Java程序员,不过我觉得,如果要做一个合格的程序员,首先不应该是程序设计的大师,而应该是理解客户需求,并迅速拿出解决方案的专家,这个,不管用什么语言,不管在哪里工作,都是必须的,同时,这也需要很长时间的积累。

准确的讲,我认为,一个人不在一门语言,一种业务领域努力3年、5年乃至10年,是很难成为专家的。因此,我建议你完全没有必要这山望着那山高,轻易就决定跳槽,建议你就这个环境,先锻炼自己,我这里放句话,你可以试着验证一下,两三年以后,你再看Java语言和数据库开发,都还是会找到自己不会,值得学习和钻研的东西的。因为最起码,客户的需求是千变万化,永无止境的。

当然,话分两说,如果你真的喜欢C,很想做嵌入式应用,就是不想做Java,那也无可厚非,因为毕竟每个人都有选择的权利。

不过,我仍然不建议你辞职回家学习。我以前有句话,大学毕业,才是学习的开始,不过,这个大学毕业后的学习,和学校中的学习,有很大差别,突出的几点:没有老师,没有教材,都是自己主动学,针对自己的需求来学习,学技巧多,学原理少,并且一般都是干中学,而不是学完了再干,我总结就是“用以致学”,而不是“学以致用”,这是我总结的学习经验。

同时,毕业了,总不好意思再向家里面父母要钱,总得自己赚钱养活自己。你说是吧?你说辞职半年,专心学习,那你没有收入吃啥?还不是吃父母的?这样不是很好。

C语言没有那么神圣的,也没有太高的门槛的,不要想太复杂了。另外,指针,内存什么的,学习C语言确实能接触到,但是,我还是要说,C语言并不是因为有了指针和内存的直接访问,才牛叉,C语言是因为大量的程序员用它解决了很多具体应用,才牛叉的。请你注意不要学偏了,不要为学指针而学指针。指针就是指针,仅仅是个访问工具而已,不是用来显得很酷的,需要了才用它。

Java语言用个数组,其实也能模拟指针的大部分功能的。其实我作为C程序员,我们平时工作时对指针是很谨慎的,能不用都不用,尽量用引用来代替,为啥,因为危险,容易出错。

数据结构,计算机组成原理,算法语言,编译原理,嗯,还有个图论,这几门应该算最经典的计算机理论了,但是,也没那么神秘的,书店里面有,自己没事买几本回来看看就好了,生活是没有考试的,不需要你必须考够100分才能找到工作,了解,理解就好了,背书是背不出好程序员的。你说对吧?

其实这几门,不用C和C++语言,用Java语言一样可以学习的。嗯,编译原理可能够呛,需要理解一点C。

另外,我再给你透露一点点,其实真正实际应用中,我们对于上述基础知识用得很少,用得最多的,其实就是数据结构里面的队列了,其他,包括栈都很少用,C程序员也不是每天都从底层,从0做起的,还是有很多工具套用的。这和Java语言从框架开发是一个道理。

反而有一门课程建议你好好学,就是概率和统计学,这门知识是我现在应用最多的,很多时候,我们评估软件系统性能,瓶颈优化,都是在用这个学问。程序员做久了,可能大多数时候都是和这个在打交道,建议买本好好看。

总结一下吧,建议你目前暂时不要辞职,既然选择了Java和数据库应用开发,选择了B/S模型,你耐心做3年再看,也许3年后,你自己的想法就变了。

C可以学,你说的课程都可以学,不过,不要辞职专门学,先赚钱养活自己,再利用时间学习,你这么大的决心,每天晚上就不要看电视了,那你每天晚上,19:00~24:00,至少有5个小时来学习,利用好了,我敢说比你在大学里面效率高。

看书学习不是什么神秘,神圣的事情的,也不需要什么斋戒沐浴,念几天经才能学习,我觉得就和我们吃饭喝水一样,随时都可以学的,找几本书,就在床头放着,每天晚上看看,几个月也就看完了,又有多难嘛?

关键是,养成习惯。

你说对不?呵呵,先说到这里,有问题再问哈。

最后补充一点,如果学习C,并且有一定基础的话,等我书出来看看吧,里面的跨平台开发工程库,可以帮助你迅速掌握嵌入式底层的一些技巧。不过,要有基础哈,一点不会C看不明白的。

‘拾’ 想学JAVA,有必要先学C++吗只有C语言基础。

只有c语言基础可以学习JAVA,但是要付出更多的努力,我就是这样的,只有C基础学的,只要一步一步来没有不能做到的,当然学了C++有面向对象思想的会更好上手,java和c语言还是有很多像是的地方的,你也可以学习java数据结构,和c语言数据结构差不多,就是一个面向对象思想!努力好好学吧!