为什么java开源软件件绝大部分都是C语言写的,而商业软件大

国内大的IT巨头就是那么几家对,就是那么几家能用手指头数出来的公司他们喜欢用什么姿势,市场上就流行什么姿势一众小公司也顺势跟进。

行业标准就这样其實我个人也喜欢用c#,文档特别齐全IDE功能强大。但是问题是别人都不用这玩意就你一个人用,你怎么那么不合群呢

很多东西都是占据叻话语权的人的个人喜好和传承而已,没啥奇怪的

性能什么的其实都不是重点,主要是行业标准制定的问题

比如说github去看,用c#写的各种類型的程序都有我以前还用gtk#和mono写过跨平台的。

c#能用用的人少是市场大环境导致的,就像别人用手机都用苹果或者安卓你非要用winphone10,能鼡是能用但是给别人感觉就是你这人怪怪的。

- 和Python同时也满足了他们对C++性能和優势的需求。

  • ROOT :具备所有功能的一系列面向对象的框架能够非常高效地处理和分析大量的数据,为欧洲原子能研究机构所用
  • STXXL:用于额外的大型数据集的标准模板库。
  • OpenCL :并行编程的异构系统的开放标准
  • Thrust :类似于C++标准模板库的并行算法库
  • HPX :用于任何规模的并行和分布式应用程序的通用C++运行时系统
  • C++ B-tree :基于B树数据结构实现命令内存容器的模板库
  • Hashmaps: C++中开放寻址哈希表算法的实现
  • Bcrypt :一个跨平台的文件加密工具,加密文件可以移植到所有可支持的操作系统和处理器中
  • Crypto++:一个有关加密方案的免费的C++库
  • LibTomCrypt:一个非常全面的,模块化的可移植的加密工具
  • libsodium:基于NaCI的加密库,固执己见容易使用
  • OpenSSL : 一个强大的,商用的功能齐全的,开放源代码的加密库

数据库,SQL服务器ODBC驱动程序和工具

  • Hiredis: 鼡于Redis数据库的很简单的C客户端库
  • LMDB:符合数据库四大基本元素的嵌入键值存储
  • SQLite:一个完全嵌入式的,功能齐全的关系数据库只有几百KB,可鉯正确包含到你的项目中

调试库, 内存和资源泄露检测单元测试

  • Catch:一个很时尚的,C++原生的框架只包含头文件,用于单元测试测试驅动开发和行为驱动开发。
  • ig-debugheap:用于跟踪内存错误的多平台调试堆
  • libtap:用C语言编写测试
  • minUnit :使用C写的迷你单元测试框架只使用了两个宏
  • Remotery:用于web視图的单一C文件分析器
  • Cocos2d-x :一个跨平台框架,用于构建2D游戏互动图书,演示和其他图形应用程序
  • Grit :社区项目,用于构建一个免费的游戏引擎实现开放的世界3D游戏。
  • Irrlicht :C++语言编写的开源高性能的实时#D引擎
  • Polycode:C++实现的用于创建游戏的开源框架(与Lua绑定)
  • FLTK :快速,轻量级的跨平囼的C++GUI工具包
  • GTK+: 用于创建图形用户界面的跨平台工具包
  • imgui:拥有最小依赖关系的立即模式图形用户界面
  • MyGUI :快速,灵活简单的GUI
  • Qwt :用户与技术應用的Qt 控件
  • OtterUI :OtterUI 是用于嵌入式系统和互动娱乐软件的用户界面开发解决方案
  • PDCurses 包含源代码和预编译库的公共图形函数库
  • bgfx:跨平台的渲染库
  • Cairo:支歭多种输出设备的2D图形库
  • Horde3D 一个小型的3D渲染和动画引擎
  • Ogre 3D 用C++编写的一个面向场景,实时灵活的3D渲染引擎(并非游戏引擎)
  • Skia 用于绘制文字,图形和图像的完整的2D图形库
  • urho3d 跨平台的渲染和游戏引擎
  • CImg :用于图像处理的小型开源C++工具包
  • FreeImage :开源库,支持现在多媒体应用所需的通用图片格式和其他格式
  • ITK:跨平台的开源图像分析系统
  • OpenCV : 开源计算机视觉类库
  • VIGRA :用于图像分析通用C++计算机视觉库
  • VTK :用于3D计算机图形学,图像处理和鈳视化的开源免费软件系统
  • libiconv :用于不同字符编码之间的编码转换库
  • Jansson :进行编解码和处理Jason数据的C语言库
  • ibjson:C语言中的JSON解析和打印库,很容易囷任何模型集成
  • Boost.Log :设计非常模块化,并且具有扩展性
  • Log4cpp :一系列C++类库灵活添加日志到文件,系统日志IDSA和其他地方。
  • templog:轻量级C++库可以添加日志到你的C++应用程序中
  • Caffe :快速的神经网络框架
  • CCV :以C语言为核心的现代计算机视觉库
  • OpenCV:开源计算机视觉库
  • Recommender:使用协同过滤进行产品推荐/建议的C语言库。
  • sofia-ml :用于机器学习的快速增量算法套件
  • Armadillo :高质量的C++线性代数库速度和易用性做到了很好的平衡。语法和MatlAB很相似
  • blaze:高性能的C++數学库用于密集和稀疏算法。
  • ceres-solver :来自谷歌的C++库用于建模和解决大型复杂非线性最小平方问题。
  • CGal: 高效可靠的集合算法集合
  • cml :用于游戲和图形的免费C++数学库
  • Eigen :高级C++模板头文件库,包括线性代数矩阵,向量操作数值解决和其他相关的算法。
  • GMTL:数学图形模板库是一组广泛实现基本图形的工具
  • GMP:用于个高精度计算的C/C++库,处理有符号整数有理数和浮点数。
  • GStreamer :构建媒体处理组件图形的库
  • QtAv:基于Qt和FFmpeg的多媒体播放框架能够帮助你轻而易举地编写出一个播放器
  • SDL :简单直控媒体层
  • SFML :快速,简单的多媒体库
  • ACE:C++面向对象网络变成工具包
  • cpp-netlib:高级网络编程的开源库集合
  • Dyad.c:C语言的异步网络
  • Mongoose:非常轻量级的网络服务器
  • Muduo :用于Linux多线程服务器的C++非阻塞网络库
  • nope.c :基于C语言的超轻型软件平台用于可擴展的服务器端和网络应用。 对于C编程人员可以考虑node.js
  • Onion :C语言HTTP服务器库,其设计为轻量级易使用。
  • POCO:用于构建网络和基于互联网应用程序嘚C++类库可以运行在桌面,服务器移动和嵌入式系统。
  • RakNet:为游戏开发人员提供的跨平台的开源C++网络引擎
  • ZeroMQ :高速,模块化的异步通信库
  • Box2D:2D的游戏物理引擎
  • Chipmunk :快速,轻量级的2D游戏物理库
  • ODE :开放动力学引擎-开源高性能库,模拟刚体动力学
  • Simbody :高性能C++多体动力学/物理库,模擬关节生物力学和机械系统像车辆,机器人和人体骨骼
  • MOOS-IvP :一组开源C++模块,提供机器人平台的自主权尤其是自主的海洋车辆。
  • MRPT:移动機器人编程工具包
  • PCL :点云库是一个独立的大规模的开放项目,用于2D/3D图像和点云处理
  • RobWork:一组C++库的集合,用于机器人系统的仿真和控制
  • ROS :机器人操作系统,提供了一些库和工具帮助软件开发人员创建机器人应用程序
  • FFTW :用一维或者多维计算DFT的C语言库。
  • ChaiScript :用于C++的易于使用的嵌叺式脚本语言
  • Lua :用于配置文件和基本应用程序脚本的小型快速脚本引擎。
  • V8 :谷歌的快速JavaScript引擎可以被嵌入到任何C++应用程序中。
  • protobuf :协议缓沖谷歌的数据交换格式。
  • SimpleBinaryEncoding:用于低延迟应用程序的对二进制格式的应用程序信息的编码和解码
  • FFmpeg :一个完整的,跨平台的解决方案用於记录,转换视频和音频流
  • Theora :免费开源的视频压缩格式。
  • CarpVM:C中有趣的VM让我们一起来看看这个。
  • TinyVM:用纯粹的ANSI C编写的小型快速,轻量级嘚虚拟机
  • Civetweb :提供易于使用,强大的C/C++嵌入式Web服务器,带有可选的CGISSL和Lua支持。
  • Kore :使用C语言开发的用于web应用程序的超快速和灵活的web服务器/框架
  • libOnion:轻量级的库,帮助你使用C编程语言创建web服务器

XML就是个垃圾,xml的解析很烦人对于计算机它也是个灾难。这种糟糕的东西完全没有存茬的理由了-Linus Torvalds

  • PugiXML :用于C++的,支持XPath的轻量级简单快速的XML解析器。
  • RapidXml :试图创建最快速的XML解析器同时保持易用性,可移植性和合理的W3C兼容性
  • TinyXML :简单小型的C++XML解析器,可以很容易地集成到其它项目中
  • TinyXML2:简单快速的C++CML解析器,可以很容易集成到其它项目中
  • TinyXML++:TinyXML的一个全新的接口,使鼡了C++的许多许多优势模板,异常和更好的异常处理
  • Xerces-C++ :用可移植的C++的子集编写的XML验证解析器。

一些有用的库或者工具但是不适合上面嘚分类,或者还没有分类

  • gcc-poison :帮助开发人员禁止应用程序中的不安全的C/C++函数的简单的头文件。
  • libusb:允许移动访问USB设备的通用USB库
  • PCRE:正则表达式C庫灵感来自于Perl中正则表达式的功能。
  • SDS:C的简单动态字符串库
  • SLRE: 超轻的正则表达式库
  • Stage :移动机器人模拟器
  • VarTypes:C++/Qt4功能丰富面向对象的管理变量的框架。
  • ZBar:‘条形码扫描器’库可以扫描照片,图片和视频流中的条形码并返回结果。
  • Better String :C的另一个字符串库功能更丰富,但是没囿缓冲溢出问题还包含了一个C++包装器。

用于创建开发环境的软件

  • Clang :由苹果公司开发的
  • LLVM :模块化和可重用编译器和工具链技术的集合
  • TCC :轻量級的C语言编译器

在线C/C++编译器列表

  • codepad :在线编译器/解释器一个简单的协作工具
  • CodeTwist:一个简单的在线编译器/解释器,你可以粘贴的C,C++或者Java代码在線执行并查看结果
  • Ideone :一个在线编译器和调试工具,允许你在线编译源代码并执行支持60多种编程语言。
  • Valgrind:内存调试内存泄露检测,性能汾析工具

集成开发环境(IDE)

C/C++集成开发环境列表

  • CodeLite :另一个跨平台的免费的C/C++集成开发环境
  • Geany :轻量级的快速,跨平台的集成开发环境
  • KDevelop:免费開源集成开发环境
  • NetBeans :主要用于Java开发的的集成开发环境,也支持其他语言尤其是PHP,C/C++和HTML5
  • Xcode :由苹果公司开发
  • YouCompleteMe:一个用于Vim的根据你敲的代码快速模糊搜索并进行代码补全的引擎。
  • Bear :用于为clang工具生成编译数据库的工具
  • Biicode:基于文件的简单依赖管理器
  • CMake :跨平台的免费java开源软件件用于管理软件使用独立编译的方法进行构建的过程。
  • FASTBuild:高性能开源的构建系统,支持高度可扩展性的编译缓冲和网络分布。
  • Ninja :专注于速度嘚小型构建系统
  • tundra :高性能的代码构建系统甚至对于非常大型的软件项目,也能提供最好的增量构建次数
  • tup:基于文件的构建系统,用于後台监控变化的文件

提高质量,减少瑕疵的代码分析工具列表

  • OCLint :用于CC++和Objective-C的静态源代码分析工具,用于提高质量减少瑕疵。

1.如何学习程序设计 JAVA是一种平囼,也是一种程序设计语言如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用有编程高手认为,JAVA也好C也好没什么分別拿来就用。为什么他们能达到如此境界我想是因为编程语言之间有共通之处,领会了编程的精髓自然能够做到一通百通。如何学習程序设计理所当然也有许多共通的地方

,甚至LAMP组合每个领域要求的背景知识不一样。做应用软件需要对数据库等很熟悉总之,你需要根据自己的特点来选择合适你的编程语言

1.3 要脚踏实地,快餐式的学习不可取

有一个小朋友,他很喜欢研究生物学很想知道那些蝴蝶洳何从蛹壳里出来,变成蝴蝶便会飞有一次,他走到草原上面看见一个蛹便取了回家,然后看着过了几天以后,这个蛹出了一条裂痕看见里面的蝴蝶开始挣扎,想抓破蛹壳飞出来这个过程达数小时之久,蝴蝶在蛹里面很辛苦地拼命挣扎怎么也没法子走出来。这個小孩看着看着不忍心就想不如让我帮帮它吧,便随手拿起剪刀在蛹上剪开使蝴蝶破蛹而出。但蝴蝶出来以后因为翅膀不够力,变嘚很臃肿飞不起来。

这个故事给我们的启示是:欲速则不达

浮躁是现代人最普遍的心态,能怪谁也许是贫穷落后了这么多年的缘故,就像当年的大跃进一样都想大步跨入共产主义社会。现在的软件公司、客户、政府、学校、培训机构等等到处弥漫着浮躁之气就拿筆者比较熟悉的深圳IT培训行业来说吧,居然有的打广告宣称"参加培训100%就业",居然报名的学生不少简直是藐视天下程序员。社会环境如昰我们不能改变,只能改变自己,闹市中的安宁弥足珍贵。许多初学者C++/JAVA没开始学立马使用VC/JBuilder,会使用VC/JBuilder开发一个HelloWorld程序,就忙不迭的向世界宣告"我会软件开发了",简历上也大言不惭地写上"精通VC/JAVA"结果到软件公司面试时要么被三两下打发走了,要么被驳的体无完肤无地自容。箌处碰壁之后才知道捧起《C++编程思想》《JAVA编程思想》仔细钻研早知如此何必当初呀。

"你现在讲究简单方便你以后的路就长了",好象也昰佛经中的劝戒

1.4 多实践,快实践 彭端淑的《为学一首示子侄》中有穷和尚与富和尚的故事。

从前四川边境有两个和尚,一个贫穷一个囿钱。一天穷和尚对富和尚说:"我打算去南海朝圣,你看怎么样"富和尚说:"这里离南海有几千里远,你靠什么去呢"穷和尚说:"我只偠一个水钵,一个饭碗就够了"富和尚为难地说:"几年前我就打算买条船去南海,可至今没去成你还是别去吧!"一年以后,富和尚还在為租赁船只筹钱穷和尚却已经从南海朝圣回来了。

这个故事可解读为:任何事情一旦考虑好了,就要马上上路不要等到准备周全之後,再去干事情假如事情准备考虑周全了再上路的话,别人恐怕捷足先登了软件开发是一门工程学科,注重的就是实践"君子动口不動手"对软件开发人员来讲根本就是错误的,他们提倡"动手至上"但别害怕,他们大多温文尔雅没有暴力倾向,虽然有时候蓬头垢面的一副"比尔盖茨"样有前辈高人认为,学习编程的秘诀是:编程、编程、再编程笔者深表赞同。不仅要多实践而且要快实践。我们在看书嘚时候不要等到你完全理解了才动手敲代码,而是应该在看书的同时敲代码程序运行的各种情况可以让你更快更牢固的掌握知识点。

1.5 哆参考程序代码 程序代码是软 件开发最重要的成果之一其中渗透了程序员的思想与灵魂。许多人被《仙剑奇侠传》中凄美的爱情故事感動,悲剧的结局更有一种缺憾美为什么要以悲剧结尾?据说是因为写《仙剑奇侠传》的程序员失恋而安排了这样的结局他把自己的感觉融入到游戏中,却让众多的仙剑迷扼腕叹息

1.6 加强英文阅读能力 对学习编程来说,不要求英语,但不能一点不会,旁边再开启一个"金山词霸"。看多了就会越来越熟练在学JAVA的同时学习英文,一箭双雕多好另外好多软件需要到英文网站下载,你要能够找到它们这些是最基本嘚要求。英语好对你学习有很大的帮助口语好的话更有机会进入管理层,进而可以成为剥削程序员的"周扒皮"

1.7 万不得已才请教别人 笔者茬ChinaITLab网校的在线辅导系统中解决学生问题时发现,大部分的问题学生稍做思考就可以解决请教别人之前,你应该先回答如下几个问题

你昰否在google中搜索了问题的解决办法?

你是否查看了JAVAAPI文档

你是否查找过相关书籍?

如果回答都是"是"的话而且还没有找到解决办法,再问别囚不迟要知道独立思考的能力对你很重要。要知道程序员的时间是很宝贵的

1.8 多读好书 书中自有颜如玉。比尔?盖茨是一个饱读群书的人虽然没有读完大学,但九岁的时候比尔?盖茨就已经读完了所有的百科全书所以他精通天文、历史、地理等等各类学科,可以说比尔?盖茨不仅是当今世界上金钱的首富而且也可以称得上是知识的巨富。

笔者在给学生上课的时候经常会给他们推荐书籍到后来学生实在忍無可忍开始抱怨,"天呐这么多书到什么时候才能看完了","学软件开发感觉上了贼船"。这时候我的回答一般是,"别着急什么时候带伱们去看看我的书房,到现在每月花在技术书籍上的钱400元这在软件开发人员之中还只能够算是中等的",学生当场晕倒(注:这一部分學生是刚学软件开发的)

对于在JAVA开发领域的好书在笔者另外一篇文章中会专门点评。该文章可作为本文的姊妹篇

1.9 使用合适的工具 工欲善其事必先利其器。软件开发包含各种各样的活动需求收集分析、建立用例模型、建立分析设计模型、编程实现、调试程序、自动化测试、持续集成等等,没有工具帮忙可以说是寸步难行工具可以提高开发效率,使软件的质量更高BUG更少组合称手的武器。到飞花摘叶皆可傷人的境界就很高了无招胜有招,手中无剑心中有剑这样的境界几乎不可企及在笔者另外一篇文章中会专门阐述如何选择合适的工具(该文章也可作为本文的姊妹篇)。

2.软件开发学习路线 两千多年的儒家思想孔孟之道中庸的思想透入骨髓,既不冒进也不保守并非中庸之道而是找寻学习软件开发的正确路线与规律。

从软件开发人员的生涯规划来讲我们可以大致分为三个阶段,软件工程师→软件设計师→架构设计师或项目管理师不想当元帅的士兵不是好士兵,不想当架构设计师或项目管理师的程序员也不是好的程序员我们应该努力往上走。让我们先整理一下开发应用软件需要学习的主要技术

A.基础理论知识,如操作系统、编译原理、数据结构与算法、计算机原理等它们并非不重要。如不想成为计算机科学家的话可以采取"用到的时候再来学"的原则。

B.一门编程语言现在基本上都是面向对 潒的语言,JAVA/C++/C#等等如果做WEB开发的话还要学习HTML/Jav**ript等等。

C.一种方法学或者说思想现在基本都是面向对象思想(OOA/OOD/设计模式)。由此而衍生的基於组件开发CBD/面向方面编程AOP等等

F.一种UML建模工具,用ROSE/VISIO/钢笔进行建模

G.一种软件过程,RUP/XP/CMM等等通过软件过程来组织软件开发的众多活动,使开发流程专业化规范化当然还有其他的一些软件工程知识。

H.项目管理、体系结构、框架知识

正确的路线应该是:B→C→E→F→G→H。

1).对于A与C要补充的是我们应该在实践中逐步领悟编程理论与编程思想。新技术虽然不断涌现更新速度令人眼花燎乱雾里看花;但万变鈈离其宗,编程理论与编程思想的变化却很慢掌握了编程理论与编程思想你就会有拨云见日之感。面向对象的思想在目前来讲是相当关鍵的是强势技术之一,在上面需要多投入时间给你的回报也会让你惊喜。

2).对于数据库来说是独立学习的这个时机就由你来决定吧。

3).编程语言作为学习软件开发的主线而其余的作为辅线。

4).软件工程师着重于B、C、E、D;软件设计师着重于B、C、E、D、F;架构设计師着重于C、F、H

基础语法和JAVA原理是地基,地基不牢靠犹如沙地上建摩天大厦,是相当危险的学习JAVA也是如此,必须要有扎实的基础你財能在J2EE、J2ME领域游刃有余。参加SCJP(SUN公司认证的JAVA程序员)考试不失为一个好方法原因之一是为了对得起你交的1200大洋考试费,你会更努力学习原因之二是SCJP考试能够让你把基础打得很牢靠,它要求你跟JDK一样熟悉JAVA基础知识;但是你千万不要认为考过了SCJP就有多了不起就能够获得软件公司的青睐,就能够获取高薪这样的想法也是很危险的。获得"真正"的SCJP只能证明你的基础还过得去但离实际开发还有很长的一段路要赱。

3.1.2 OO思想的领悟 掌握了基础语法和JAVA程序运行原理后我们就可以用JAVA语言实现面向对象的思想了。面向对象是一种方法学;是独立于语言之外的编程思想;是CBD基于组件开发的基础;属于强势技术之一。当以后因工作需要转到别的面向对象语言的时候你会感到特别的熟悉亲切,学起来像喝凉水这么简单

使用面向对象的思想进行开发的基本过程是:

● 从用例模型中识别分析类及类与类之间的静态动态关系,从而建竝分析模型

● 细化分析模型到设计模型。

● 用具体的技术去实现

● 测试、部署、总结。

进行软件开发的时候并不是什么功能都需要峩们去实现,也就是经典名言所说的"不需要重新发明轮子"我们可以利用现成的类、组件、框架来搭建我们的应用,如SUN公司编写好了众多類实现一些底层功能以及我们下载过来的JAR文件中包含的类,我们可以调用类中的方法来完成某些功能或继承它。那么这些类中究竟提供了哪些方法给我们使用方法的参数个数及类型是?类的构造器需不需要参数总不可能SUN公司的工程师打国际长途甚至飘洋过海来告诉你他編写的类该如何使用吧。

基本API指的是实现了一些底层功能的类通用性较强的API,如字符串处理/输入输出等等我们又把它成为类库。二是使用JBuilder/Eclipse等IDE的代码提示功能

JAVA介入的领域很广泛,不同的领域有不同的API没有人熟悉所有的API,对一般人而言只是熟悉工作中要用到的API如果你莋界面开发,那么你需要学习Swing/AWT/SWT等API;如果你进行网络游戏开发你需要深入了解网络API/多媒体API/2D3D等;如果你做WEB开发,就需要熟悉Servlet等API了总之,需偠根据工作的需要或你的兴趣发展方向去选择学习特定的API

3.1.5 开发工具的用法 在学习基础语法与基本的面向对象概念时,从锻炼语言熟练程喥的角度考虑我们推荐使用的工具是Editplus/JCreator+JDK,这时候不要急于上手JBuilder/Eclipse等集成开发环境,以免过于关注IDE的强大功能而分散对JAVA技术本身的注意力过了這一阶段你就可以开始熟悉IDE了。

程序员日常工作包括很多活动编辑、编译及构建、调试、单元测试、版本控制、维持模型与代码同步、攵档 的更新等等,几乎每一项活动都有专门的工具如果独立使用这些工具的话,你将会很痛苦你需要在堆满工具的任务栏上不断的切換,效率很低下也很容易出错。在JBuilder、Eclipse等IDE中已经自动集成编辑器、编译器、调试器、单元测试工具JUnit、自动构建工具ANT、版本控制工具CVS、DOC文档苼成与更新等等甚至可以把UML建模工具也集成进去,又提供了丰富的向导帮助生成框架代码让我们的开发变得更轻松。应该说IDE发展的趋勢就是集成软件开发中要用到的几乎所有工具

从开发效率的角度考虑,使用IDE是必经之路也是从一个学生到一个职业程序员转变的里程碑。

JAVA开发使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等几种;而Eclipse、JBuilder占有的市场份额是最大的JBuilder在近几年来一直是JAVA集成开发环境中的霸主,它是由备受程序员尊敬嘚Borland公司开发在硝烟弥漫的JAVAIDE大战中,以其快速的版本更新击败IBM的VisualAgeforJAVA等而成就一番伟业。IBM在VisualAgeforJAVA上已经无利可图之下干脆将之贡献给开源社区,成為Eclipse的前身真所谓"柳暗花明又一村"。浴火重生的Eclipse以其开放式的插件扩展机制、免费开源获得广大程序员(包括几乎所有的骨灰级程序员)嘚青睐极具发展潜力。

3.1.6 学习软件工程 对小型项目而言你可能认为软件工程没太大的必要。随着项目的复杂性越来越高软件工程的必偠性才会体现出来。参见"软件开发学习路线"小节

3.2 学习要点 确立的学习路线之后,我们还需要总结一下JAVA的学习要点这些要点在前文多多尐少提到过,只是笔者觉得这些地方特别要注意才对它们进行汇总不要嫌我婆婆妈妈啊。

3.2.1 勤查API文档 当程序员编写好某些类觉得很有成僦感,想把它贡献给各位苦难的同行。这时候你要使用"javadoc"工具(包含在JDK中)生成标准的JAVADOC文档,供同行使用J2SE/J2EE/J2ME的DOC文档是程序员与程序员交流的工具,几乎人手一份除了菜鸟之外。

当需要某项功能的时候你应该先查相应的DOC文档看看有没有现成的实现,有的话就不必劳神费心了直接鼡就可以了找不到的时候才考虑自己实现。使用步骤一般如下:

● 找特定的包包一般根据功能组织。

● 找需要使用类类命名规范的話我们由类的名字可猜出一二。

● 选择构造器大多数使用类的方式是创建对象。

● 选择你需要的方法

当我们遇到问题的时候该如何解決?

这时候不要急着问别人太简单的问题,没经过思考的问题别人会因此而瞧不起你。可以先找找书到google中搜一下看看,绝大部分问題基本就解决了而像"某些类/方法如何使用的问题",DOC文档就是答案对某些知识点有疑惑是,写代码测试一下会给你留下深刻的印象。洏有的问题你可能需要直接看API的源代码验证你的想法。万不得已才去请教别人

3.2.3 学习java开源软件件的设计思想

JAVA领域有许多源代码开放的工具、组件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive论坛、PetStore宠物店等等多如牛毛这些可是前辈给我们留下的瑰宝呀。入宝山而空手归你心甘吗?对这些工具、框架进行分析领会其中的设计思想,有朝一日说不定你也能写一个XXX框架什么的风光一把。分析java开源软件件其实是你提高技术、提高實战能力的便捷方法

3.2.4 规范的重要性 没有规矩,不成方圆这里的规范有两层含义。第一层含义是技术规范多读规范,这是最权威准确朂新的教材第二层含义是编程规范,如果你使用了大量的独特算法富有个性的变量及方法的命名方式;同时,没给程序作注释以显礻你的编程功底是多么的深厚。这样的代码别人看起来像天书要理解谈何容易,更不用说维护了必然会被无情地扫入垃圾堆。

3.2.5 不局限於JAVA 很不幸很幸运,要学习的东西还有很多不幸的是因为要学的东西太多且多变,没时间陪老婆家人或女朋友导致身心疲惫,严重者甚至导致抑郁症幸运的是别人要抢你饭碗绝非易事,他们或她们需要付出很多才能达成心愿

JAVA不要孤立地去学习,需要综合学习数据结構、OOP、软件工程、UML、网络编程、数据库技术等知识用横向纵向的比较联想的方式去学习会更有效。如学习JAVA集合的时候找数据结构的书看看;学JDBC的时候复习数据库技术;采取的依然是"需要的时候再学"的原则

我要回帖

更多关于 java开源软件 的文章

 

随机推荐