关于CLASSPATH
看到论坛里有这样那样的关于CLASSPATH的问题。的确,我见过的关于Java的书有些都不会细讲Java的CLASSPATH,而CLASSPATH又恰恰是学Java时最需要了解的东西之一。所谓CLASSPATH,其实就是指向Java Class的路径。学过Java的人都知道Java的基本执行单元是类,而它是如何找到他所需要运行的这些类呢?无非就是通过CLASSPATH。
CLASSPATH可以是一个目录,目录中包含包结构的.class文件,也可以是某个jar文件。有人问,我下载了一个jar文件,应该放在哪里我才能够调用其中的类呢?随便,只要你的CLASSPATH指向了那个jar文件就行。
指定CLASSPATH的方法主要有两种:1. 设置CLASSPATH环境变量;2. 如果你只是想执行一次这个CLASSPATH里边的Java类,可以用java命令的-cp参数。
编程环境
关于编程环境,我一直认为刚开始学请不要用Eclipse,因为它臃肿、花哨(让你不认为你在学Java)。我认为刚开始就是应该用最简单的 文本编辑+命令行:
1. 这样你能知道程序是怎么样得到的,其实源程序只不过是一堆字符。我看到网上很多人(甚至研究生),当他们没有集成开发环境的时候,他们竟然不知道怎么样打开源程序!!
2. 你可以接触到命令行的世界。我的帖子是针对”计算机科学人员“,而”计算机科学人员“,我认为是必须知道命令行的。我不是说图形界面不好,但作为一个现在的计算机科学人士,试着懂得命令行的巧妙是很重要的。
3. 当你理解了Java程序是如何编辑和生成,并且理解了CLASSPATH,我建议你看看Ant (http://ant.apache.org)这个工具。这是一个能够让你编程效率提高的工具。当然,学习这个工具是需要更多的知识,例如XML,但这也是学习过程中的其中一步。
4. 除了Ant这个工具之外,还有Maven (http://maven.apache.org)。Maven的好处在于它能够帮你管理你项目中的依赖。例如你如果需要某一个Java类库,可以在你项目的Maven配置文件中说明,然后Maven会帮你自动从它的源中下载。
如果你觉得你已经熟悉了Java编程,那么你可以试着用用Eclipse之类的IDE。这些集成开发环境还是有他们的好处。例如Eclipse,即使编译+错误显示,代码格式化,自动导入等等。所以至今,即使我编辑代码使用的是Vim,但其实是用Vim作为编辑界面,和后端的Eclipse服务器通信,调用Eclipse的许多功能。我用的是一个叫Eclim的插件。至今,我还是喜欢写Ant文件(我有自己可以重用的Ant文件),喜欢用Vim编辑代码,然后用命令行来编译、调试和运行代码。
只学Java不行!
每个程序员都不会只知道一种语言,只知道用Java写代码不行~~只看或者只学Java相关的东西会使你的编程思想过于局限。编程语言非常多,应该多看看,多学学,知道你所用的语言的优点和缺点。我喜欢用Java,不过并不是任何时候都用它,因为有些时候,我并不需要面向对象来完成我所需要的功能。这时我会用Python,几行代码就能完成,甚至用Shell~~Python,如同其他脚本语言,优点在于它能使你快速开发出程序的原型。有了原型,程序在你脑中的构架就会更加清晰。有了清晰的程序构架,如果真的有必要,你可以采用面向对象的思想开始设计你的整个系统。
Java语言里其实还缺少许多有趣的特性,而这些特性在类似Python这样的动态语言中就会体现出来。例如 方程的方程/高阶方程/Lambda Calculus,函数式编程,List Comprehension(Python特有的)。解除更多的编程语言,你的思想会慢慢的提高,不过也要注意不要产生混淆。更有趣的编程语言是Haskell,这们语言是一门完全的 函数式编程语言,即它的所有都是由函数所实现(它最有趣的一点就是:没有循环结构),呵呵,如果想了解,就去Google搜吧~~
不光是更多的编程语言,学习某种语言时所付带的知识也非常重要~~例如,当你学习写Web程序时,就会需要去了解HTTP,当然也会要去知道HTML、CSS、Javascript(不可能任何时候都让别人帮你制作网页吧,哈哈)。
学会搜索
信息检索其实是非常重要的一门知识,但我在大学的时候似乎没有被太重视,而且是一门选修课。如何知道关键词,是需要经验的,不过首先你必须清楚你的需求是什么。
理论知识
其实这个我觉得不需要多说,谁都知道理论知识的重要性。学计算机,首先就是看你数学功底如何。数学不好,稍微复杂一点的算法就不能理解。我研究生读的是人工智能,主攻自然语言处理。学到的无非还是数学,Bayes Network, Principal Component Analysis, Hidden Markov Model等等这些经典的模型、分析方法和算法都离不开深厚的数学功底。计算机基础的数学有高等数学,线性代数,概率统计,离散数学,组合数学,这些数学的知识不论是在实用中还是思维培养上都有很大的影响,所以必须学好~~
多写、多看
也许这是学编程最重要的一点。多写,就是让你多写代码;多看,就是让你多看资料。多写代码,很多大学生会想,我写什么。的确,刚开始是没什么好写,因为编程思想都没有形成,语法也不熟。给你们一条建议:如果想学编程,对编程感兴趣,不妨把大学的课程当成写程序的实践,用程序来写作业~~其实吧,也许也没那么多的时间,不过如果有,这样做还是不错的~~也不用拘泥于给课程写程序,只要是日常生活中你觉得需要解决的问题,而又能用程序解决,其实都可以作为写代码的机会。
多看,这是我想说的。四年大学下来,如果对计算机科学真的感兴趣,你看的东西绝对不比你人矮~~看的资料包括:计算机理论知识、各种教程、计算机新闻、计算机博客、别人的源代码、各种算法/类库/技巧。这么多的东西大学能看完?我说能,而且我认为很多人都这么做了(至少我这么做了,哈哈)。大学里边最好的地方是哪?图书馆(不论是找MM还是学习

有一点,我认为也许也比较重要:看英文资料。这样,你可以获得更多的资讯,可以学习另一门语言。刚开始看英文资料的确有些痛苦。对于我来说,看英文的资料可能比较简单,因为我初中在英国渡过……但我还是看到我的几个大学朋友(本人一年前年在国内大学毕业,现在国外研究生毕业……)都在看英文资料,而且后来都非常顺畅。在这里,我推荐几本Java和Python书吧:
1. Java How to Program/Advanced Java How to Program(主要是它的练习不错)
2. Thinking in Java
3. Java Tools for Extreme Programming: Mastering Open Source Tools, Including Ant, JUnit, and Cactus
4. Java Design Patterns Applied
5. Refactoring to Patterns
6. Dive into Python(网上有)
7. Learning Python
其实好书实在太多,这里介绍的也只是我认为Java/Python这两门语言的书籍中对我有过帮助的书籍。至于网上的资料,那就更多了,在这里也介绍几个Java和Python相关的网站吧:
1. Google,哈哈,这可是百科全书,任何时候我需要什么东西都会用到
2. Apache Opensource Foundation (http://www.apache.org),许多优秀开源库/工具的家,例如Ant, Maven, Struts, Jakarta Commons, Velocity
3. The Serverside.com (http://www.theserverside.com),Java服务器端的网站,许多新闻,有一些好文章
4. Java.net (http://www.java.net),Java社区,博客不错,可以学到不少技巧
5. ActiveState Python (http://code.activestate.com/recipes/langs/python/),学习写Python代码的好地方,许多实用的例子