零基础想自学编程,可以推荐什么书籍或程序吗
编程这个东西自学有一定难度,因为你无法在短时间内体会到它的实际用途,所以一大批人会半途而废。就算你学会了C语言,你会发现你照样做不出东西,忙碌了半天,也只会在黑乎乎的控制台上显示些字符。所以你还得学习其他知识,像SQL。
想要以最短时间体会到代码的作用,那莫过于学习前端 HTML 了,配合CSS,你会立马写出几个静态页面,然后沾沾自喜,有种成就感。然而这并没有什么卵用。前端还需要学习一门叫JavaScript的语言,JavaScript才是编程语言,HTML和CSS只能叫做页面设计,类似美工。
而你想要学习JavaScript时,你就得明白什么叫编程,像是数据类型、函数、各种判断循环语句,这时你学起来就会感觉很吃力(当然也能学会,我就是没接触过C语言就直接学了前端了)。
真正的编程入门级语言是C语言,为什么要先学C语言呢?这时你得明白编程语言的历史发展。C语言的前身是B语言,B语言由贝尔实验室开发。B语言写出了世界上第一款操作系统Unix,沿用至今,比如银行的取款机和大型商务机就是用的Unix。后来由Unix 进化出了linux操作系统。这款操作系统一直应用于服务器,而Windows操作系统是由C语言写的。暂且不谈操作系统。
C语言往后发展就有了C++ 这些都同属贝尔实验室开发。Java是由C++改写而来。C#也是由C++改写而来。所以你会发现C#与Java语法相识。总结一点,这些语言都由C语言而来。只要你学会了C语言,以后你学其他语言就会简单的多。你学C语言就是学了80%的Java。C++又是完全兼容C语言的。所以你可以把C语言看成是祖宗,其他的都是分支。
本人就是自学的。走了很多弯路。因为我一开始就是学的前端HTML。后来才去学的C,不过也没关系,我学会JavaScript后,学C语言就轻松很多。
说了这么多言归正传,如何自学编程,其实就是如何自学C语言。我认为最好是找教学视频来看。个人推荐 : 郝斌c语言180个视频。
网上很多人力推《c语言程序设计 谭浩强》这本书,你可以去看看。这是大学计算机专业必备教程。也是C语言入门书籍。反正看书我是看不进去的。
一句话,这些语言都大同小异。真正重要的是编程思想。就是如何通过语言来实现解决问题的思路。
零基础学习编程,推荐书籍
应该先学C语言,它是C++的基础课程,我们就是这么学过来的,刚学完C++,如果你要学C++,我们的教材就很好,就是C语言程序设计基础与应用,清华大学出版社出版的,书皮是红色的,挺基础的,对于初学者先学习C++就难了
零基础自学编程,先学什么语言,请推荐相关书籍
完全零基础的话,建议学做网页吧,比较简单。书籍的话,先计算机基础,然后就学一些web前端的东西。
请问自学编程零基础入门看什么书籍好?
当然学习C语言入门,看C语言的书,我是大学计算机专业的,师大987奇巧300杂项192,提出数字,能Q,共同进步
零基础想自学编程
请问你想学什么语言,我推荐C语言,最接近底层的高级编程语言,我学了很多的计算机编程语言,最爱的还是C语言,最酷最炫。
入门级的书籍我推荐《C primer》老外写的,可能有一定难度。谭浩强的C语言程序设计是国内不错的入门书。
进阶的书包括《C缺陷与陷阱》《C专家编程》,都是老外写的。
编程零基础,想自学Python语言,有什么适合的教材或者书籍推荐码?
简明python 教程入门错相关我文资料算少我两前搜集百MPYTHON教程相关资料
零基础学编程求推荐好书
编程这个概念很大,不同领域需要学习的编程语言不同。应该先从你兴趣开始,有兴趣再决定编程领域,有了编程领域在决定语言.不同的语言对应着不同编程领域,只有确定这些信息了,才知道要看什么书籍。如果你要学完那是有点不现实.
因此你要回想一下你兴趣来源是什么?比如喜欢做黑客,喜欢研究反病毒,喜欢为Windows桌面开发一些实用的小软件等等.要分析好兴趣来由,在决定你的发展方向,就好了.比如你喜欢为WINDOWS开发软件,那么 C语言是必备基础,学好好了然后在扩展一门面向对象的语言比如C++ C# JAVA 等.这些是不错的选择。然后光有语言不行,为了软件的质量保证,还需要研究一下系统理论基础,这样你的软件才能做到对系统的作家兼容性和获取最佳性能。
也可百度一下, 80x86汇编小站 这个网站里面有几篇关于编程入门文章或许会对你有帮助, 或者 你直接联系 这个站长 跟他交流编程方面的事情
零基础学编程c语言java选什么书籍
我觉得应该根据你的工作需要或者说你的发展方向而定。基本上两大类吧:C/C++和Java。比如,如果你要做企业级应用的你应该学习Java和C#;如果你想做嵌入式,那么应该学好C语言;其他情况下,在你不知道要做什么之前你可以选择学习C/C++。学会这两大类中的一类,对于你学习其他语言都将是比较轻松,包括脚本语言,动态语言„„呵呵,这里想就自己的学习经历和情况给大家一个建议,仅供参考。
零基础怎么自学编程
第一:硬件保证,首先你应该具备一台电脑,不管是笔记本还是台式,也不管性能高低,性能对前期学习编程几乎无任何影响,就入门来看,操作系统还是首选windwos或者mac
第二:有xx语言的入门本书,纸做的,具体xx语言是哪种语言,后面我们再讨论这个问题。虽说现在铺天盖地的都是电子书了(保留这句话的确定性),到处是扫描版,还高清呢,但我还是推荐看纸做的书,好处有两点,其一是便于携带,可以随时翻阅;其二是避免眼疲劳,我不信你一直晚盯着显示器看电子书眼睛不会酸;还有一点,尊重图书作者的版权。
第三:时间保证,如果你每天都有一大堆事等着你去处理,先去处理那些事吧,处理完后把剩余时间划出一整块的给编程,进行随时可能被打断的学习
–1.去了解计算机的基本组成,计算机的发展史和编程的发展史,看起来和编程没什么关系,潜在的影响还是十分大的;
–2.选择一门简单的语言作为入门语严;
–3.学会使用搜索引擎;
–4.知道如何看书;
–5.要”像”个高手;
–6.应具备的学习态度;
选定方向
编程的世界是多元纷繁的,大的方向就分前端开发、后端开发、移动开发、云计算、数据处理、智能硬件、物联网、虚拟现实等等,光编程语言都几十种。如果没有做过功课,贸然进入只会分分钟懵逼。所以最好是根据自己的兴趣爱好再结合市场前景,先选定一个方向,再选择一门语言,然后头也不回的深深扎进去。
我当初开始自学编程的时候,因为工作时学了点Linux,就准备学Linux。Linux没学几天,发现游戏编程的Unity 3D挺好玩的,就转学Unity 3D。Unity 3D学了段时间又觉得大数据很火,感觉接下来是大数据的时代,要跟上时代的脚步,然后又去学习Python。后面才意识到自己在移动应用上面有极大的兴趣并有一些自己的想法,再加上本人很喜欢Google,遂最终决定好好学习Android移动开发。
如果自己对自己兴趣爱好没有深刻的认识,没有明确的学习目标,只是一味茫然的去尝试,最终只会像猴子掰玉米一样,不但浪费了自己宝贵的时间,还会一无所获。
####制定学习目标计划
选定了方向之后,剩下的就是朝着目的努力前进了。自学的过程是枯燥乏味的,也没有人陪伴督促,所以要想自学有一定成果,除了要有清晰明确的目标计划,还要有很强的自我约束能力,还要善于自我及激励。不然很容易自由涣散,三天打鱼两天晒网,看起来花了不少时间,实际上没学到什么。
我开始的时候就是凭兴趣漫无目的的学习,结果发现收效甚微,于是才制定学习计划,开始系统的学习。我先是学习了JAVA基础语法,然后将整个Android开发涉及到的所有知识面简单快速的学习一遍,这样对整个体系框架有一个全面大概的认识,然后在详细具体的学习每一部分,尽量搞明白其中的实现逻辑和原理,以达到掌握知识的目的。最后开发练习的时候再根据自己要实现什么功能,去查相关的资料。
优化学习方式
一、做好笔记,记录经验
我们大多数人并没有过目不忘的神技,很多时候我们学了也不一定马上掌握,需要过后花时间慢慢领悟,而且还有忘掉的风险,所以对于重要的知识点都要做好笔记。
编程的过程中总会遇到各种各样的问题,比如编程环境的配置,常用的快捷键,编程过程中的错误、异常,软件更新问题等等。这些问题往往会不只一次出现,所以我们面对这些问题都是如何解决的,一定要记录下来,一是增加自己解决问题的经验,而是以防下次出现。
我做笔记记录的方式:
* 截图
* 拍照
* 思维导图
* 写Word文档
除了最初用纸质笔记本做过笔记,后面都是用上面的方式。用电子的方式方便快捷易于分享,而且我还能传到手机上,利用其它时间随时随地阅读。
二、认认真真敲代码
二、认认真真敲代码
二、认认真真敲代码
编程没有捷径,只有勤奋努力。
三、多看官方文档,外文资料
互联网是一个更新迭代很快的行业,所有编程语言都会不断的更新新功能和修复旧Bug,网上查的资料很有可能是旧的解决方案,现在已经不适用了。所以最好最快的方法就是查看官方文档。
毕竟互联网技术还是国外发展起来的,所以在很多技术问题方面,人家还是有优势的。有些问题在国内不一定能找到答案就去外网找。
四、进入行业圈子
只有进入行业圈子与其他人交流,你才了解最新的行业动态,才知道自己需要更新哪些技能。最重要的是有了这群人,自己遇到问题解决起来嗖嗖的,那速度才叫“倍爽儿”。
进入行业圈子的方式:
* 混迹各行业网站论坛个人技术博客
一般在搜问题时很容易就搜到这些网站
* 关注各种行业话题和人
比如知乎、微博、微信公众号等
* QQ群、微信群
交流基地,技术后援团
* Github
互联网圣地,行业大圈子就在这。
五、动手做项目
我们学习编程的最终目的就是用所学的做出具有一定功能的项目,而做项目又是最好的学习和巩固知识的方式。如果前期能力不足就先做一些简单的功能模块,一步一步慢慢来,不要一开始就要实现各种酷炫炸天功能,遇到不会的就在网上查, 现在互联网这么发达,获取资源也及其方便。而且开发前也最好在网上查一下有没有已经成型的框架或模板,编程界有一句很流行的话“不要重复造轮子”,什么都自己做一是很耗费时间,二是自己技术能力不足还可能留下不少坑。
导读:如何画好简笔画?画简笔画是门技能,想要学好它必须做到以下5点,“四多”:多看、多想、多画、多用。”要养成正确的观察图形和认识图形的方法。下面是我带来的小猴子的简笔画步骤图解教程,一起来分析一下可爱的小猴子简笔画是怎么画成的吧。
小猴子的简笔画怎么画 小猴子的简笔画步骤图解教程
1.先画出猴子的头部,再画出它的眉毛、眼睛和嘴巴。
2.然后画出它的两个耳朵,之后画出身体,再画出左右两只手。
3.然后画出手上拿的香蕉,再画出两只脚就可以上色了。
4.先用棕色给猴子的皮肤上色,再用淡黄色给脸、耳朵和肚子上色。
5.再用黄色给香蕉皮上色,之后用淡黄色给香蕉果肉上色。
6.再用黑色给眼睛上色,最后用淡粉色给猴子脸涂上腮红就画好了。
猴子画法如下:
1、勾画猴子头部,可爱的小猴子头部可以用一个大大的圆来绘画。
2、勾画猴子面部,在圆圈里面勾画猴子的面部,脑门的部位要画出尖尖的效果。
3、勾画猴子耳朵,在猴子头部的两侧,分别画出半圆形的大耳朵。
4、勾画猴子的鼻子和嘴巴,在脸部的中间位置画出鼻子,接着在鼻子下方画出嘴角上扬的嘴巴。
5、画出猴子眼睛,在鼻子上方的两边画上两个圆圆的眼睛,眼球画在眼睛的任意部位都可以哦。
6、勾画猴子的胳膊,在猴子头部下方画出猴子的胳膊啦。
7、画出猴子的腿部,给活泼调皮的猴子画上两条腿,让它活蹦乱跳玩起来吧!
8、画出猴子的尾巴,给可爱的猴子画上一条长长的尾巴。
9、画出猴子的肚皮,给猴子的肚子上画上椭圆形的肚皮,让画面更完整吧。
10、局部上色完成,可以先给猴子的毛发涂上喜欢的颜色哦。
11、整体上色完成,最后给猴子的脸部皮肤、肚皮和耳窝涂上淡淡的粉色。
小猴子简笔画画法简单易学,本教程共有11步,非常适合小朋友们学习画画。想知道简笔画小猴子怎么画?那就跟着本文的小猴子简笔画教程一步一步学习吧。
最后记得给我们的小猴子简笔画涂色,加上彩色颜色会更好看哦!这个小猴子简笔画学会后还能做为手抄报、黑板报的绘画素材、幼儿园儿童画小猴子教案,非常棒!
语言无关类
操作系统
鸟哥的Linux私房菜 (简体)
Linux 系统高级编程
The Linux Command Line (中英文版)
Linux 设备驱动 (第三版)
深入分析Linux内核源码
UNIX TOOLBOX
Docker中文指南
Docker —— 从入门到实践
FreeRADIUS新手入门
Mac 开发配置手册
FreeBSD 使用手册
Linux 命令行(中文版)
智能系统
一步步搭建物联网系统
web服务器
Nginx开发从入门到精通 (淘宝团队出品)
版本控制
Git教程 (本文由 @廖雪峰 创作,如果觉得本教程对您有帮助,可以去 iTunes 购买)
git – 简易指南
猴子都能懂的GIT入门
Git 参考手册
Pro Git
Git Magic
GotGitHub
Git Community Book 中文版
Mercurial 使用教程
HgInit (中文版)
沉浸式学 Git
Git-Cheat-Sheet (感谢 @flyhigher139 翻译了中文版)
GitHub秘籍
NoSQL
NoSQL数据库笔谈 (PDF)
Redis 设计与实现
Redis 命令参考
带有详细注释的 Redis 3.0 代码
带有详细注释的 Redis 2.6 代码
The Little MongoDB Book
The Little Redis Book
Neo4j 简体中文手册 v1.8
Neo4j .rb 中文资源
MySQL
MySQL索引背后的数据结构及算法原理
项目相关
持续集成(第二版) (译言网)
让开发自动化系列专栏
追求代码质量
selenium 中文文档
Joel谈软件
约耳谈软体(Joel on Software)
Web
关于浏览器和网络的 20 项须知
前端知识体系
浏览器开发工具的秘密
Chrome 开发者工具中文手册
Chrome扩展开发文档
Grunt中文文档
移动Web前端知识库
正则表达式30分钟入门教程
前端开发体系建设日记
移动前端开发收藏夹
JSON风格指南
HTTP 接口设计指北
前端资源分享(一)
前端资源分享(二)
前端代码规范 及 最佳实践
w3school教程整理
大数据
大数据/数据挖掘/推荐系统/机器学习相关资源
编程艺术
程序员编程艺术
每个程序员都应该了解的内存知识(译)【第一部分】
取悦的工序:如何理解游戏 (豆瓣阅读,免费书籍)
其他
OpenWrt智能、自动、透明翻墙路由器教程
语言相关类 AWK
awk程序设计语言
C/C++
C++ 并发编程指南 (@傅海平ICT)
Linux C编程一站式学习 (宋劲杉, 北京亚嵌教育研究中心)
CGDB中文手册
100个gdb小技巧
100个gcc小技巧
ZMQ 指南
How to Think Like a Computer Scientist (中英文版)
跟我一起写Makefile(PDF)
GNU make中文手册
GNU make 指南
Google C++ 风格指南
C/C++ Primer (by @andycai)
简单易懂的C魔法
Cmake 实践 (PDF版)
C++ FAQ LITE(中文版)
C++ Primer 5th Answers
CSS/HTML
学习CSS布局
通用 CSS 笔记、建议与指导
CSS参考手册
Emmet 文档
前端代码规范 (腾讯alloyteam团队)
Dart
Dart 语言导览
Fortran
Fortran77和90/95编程入门
Java
实时 Java 系列
Apache Shiro 用户指南
使用 Eclipse 和 Java SE 6 创建独立 Web Services 应用程序
第 1 部分: Web Services 服务端应用程序
第 2 部分: Web 服务客户端应用程序
JavaServer Faces 1.2 入门
第 1 部分: 构建基本应用程序
第 2 部分: JSF 生命周期、转换、检验和阶段监听器
用 Eclipse Europa 进行 Web 开发
第 1 部分: Eclipse Java EE
第 2 部分: PHP 开发工具
第 3 部分: Ruby Development Toolkit 和 RadRails
使用 JavaServer Faces 构建 Apache Geronimo 应用程序
第 1 部分: 使用 Eclipse 和 Apache MyFaces Core 构建基本的应用程序
第 2 部分: 在 JavaServer Faces 中使用 Tomahawk
第 3 部分: 使用 ajax4jsf 添加 Ajax 功能
第 4 部分: 使用 Apache Trinidad 组件扩展 JSF
第 5 部分: 将 JSF 应用程序与 Spring 集成
Apache Geronimo 和 Spring 框架
第 1 部分: 开发方法学
第 2 部分: 构建第一个应用程序
第 3 部分: 集成 DAO 与 ORM
第 4 部分: 混合使用 Spring AOP 和 Spring Web Flow
第 5 部分: Spring MVC
第 6 部分: Spring MVC:使用 Web 视图技术
终极 mashup —— Web 服务和语义 Web
第 1 部分: 使用与组合 Web 服务
第 2 部分: 管理 Mashup 数据缓存
第 3 部分: 理解 RDF 和 RDFs
第 4 部分: 创建本体
第 5 部分: 切换 Web 服务
Jersey 2.x 用户指南
MyBatis中文文档
JavaScript
Google JavaScript 代码风格指南
Airbnb JavaScript 规范
JavaScript 标准参考教程(alpha)
Javascript编程指南 (源码)
javascript 的 12 个怪癖
JavaScript 秘密花园
JavaScript核心概念及实践 (PDF) (此书已由人民邮电出版社出版发行,但作者依然免费提供PDF版本,希望开发者们去购买,支持作者)
《JavaScript 模式》翻译,此书中文版有售,但是纸质书翻译的还没有这个版本翻译的好
命名函数表达式探秘 (注:原文由为之漫笔翻译,原始地址无法打开,所以此处地址为我博客上的备份)
学用 JavaScript 设计模式 (开源中国)
深入理解JavaScript系列
ECMAScript 6 入门 (作者:阮一峰)
jQuery
jQuery 解构
简单易懂的JQuery魔法
How to write jQuery plugin
Node.js
Node入门
七天学会NodeJS
Nodejs Wiki Book (繁体中文)
express.js 中文文档
koa 中文文档
使用 Express + MongoDB 搭建多人博客
Express框架
nodejs文档
Node.js 包教不包会
Learn You The Node.js For Much Win! (中文版)
Node debug 三法三例
underscore.js
Underscore.js中文文档
backbone.js
backbone.js入门教程 (PDF)
Backbone.js入门教程第二版
Developing Backbone.js Applications(中文版)
AngularJS
AngularJS最佳实践和风格指南
AngularJS中译本
AngularJS入门教程
构建自己的AngularJS
在Windows环境下用Yeoman构建AngularJS项目
zepto 简明中文手册
Sea.js
Hello Sea.js
CoffeeScript
CoffeeScript Cookbook
The Little Book on CoffeeScript中文版
ExtJS
Ext4.1.0 中文文档
Chrome扩展及应用开发
JavaScript入门教程
PHP
PHP调试技术手册(PDF)
XDebug 2中文手册(译) (CHM)
PHP之道
PHP 最佳实践
PHP安全最佳实践
深入理解PHP内核
PHP扩展开发及内核应用
CodeIgniter 用户指南
Laravel4 中文文档
Laravel 入门
Symfony2中文文档 (未译完)
Phalcon中文文档(翻译进行中)
YiiBook几本Yii框架的在线教程
简单易懂的PHP魔法
swoole文档及入门教程
iOS
iOS开发60分钟入门
iOS7人机界面指南
Google Objective-C Style Guide 中文版
iPhone 6 屏幕揭秘
Apple Watch开发初探
马上着手开发 iOS 应用程序
网易斯坦福大学公开课:iOS 7应用开发字幕文件
Android
Android Design(中文版)
Google Android官方培训课程中文版
Android学习之路
Python
小白的Python教程
简明Python教程
零基础学Python
Python 2.7 官方教程中文版
Python 3.3 官方教程中文版
深入 Python 3
PEP8 Python代码风格规范
Google Python 风格指南 中文版
Python入门教程 (PDF)
Python的神奇方法指南
笨办法学 Python (PDF版下载)
Django 文档中文版
Django 最佳实践
The Django Book 中文版
web.py 0.3 新手指南
Web.py Cookbook 简体中文版
Dive Into Python 中文版
Bottle 文档中文版 (需翻墙)
Flask 文档中文版
Jinja2 文档中文版
Werkzeug 文档中文版
Flask之旅
Introduction to Tornado 中文翻译
Python自然语言处理中文版 (感谢陈涛同学的翻译,也谢谢 @shwley 联系了作者)
Python 绘图库 matplotlib 官方指南中文翻译
Scrapy 0.25 文档
ThinkPython
Ruby
Ruby 风格指南
Rails 风格指南
笨方法学 Ruby
Ruby on Rails 指南
Ruby on Rails 实战圣经
Ruby on Rails Tutorial 原书第 2 版 (本书网页版免费提供,电子版以 PDF、EPub 和 Mobi 格式提供购买,仅售 9.9 美元)
编写Ruby的C拓展
Ruby 源码解读
Shell
Shell脚本编程30分钟入门
Go
Go编程基础
Go入门指南
学习Go语言 (PDF)
Go Web 编程 (此书已经出版,希望开发者们去购买,支持作者的创作)
Go实战开发 (当我收录此项目时,作者已经写完第三章,如果读完前面章节觉得有帮助,可以给作者捐赠,以鼓励作者的继续创作)
Network programming with Go 中文翻译版本
Groovy
实战 Groovy 系列
LaTeX
一份其实很短的 LaTeX 入门文档
一份不太简短的 LATEX 2ε 介绍 (PDF版)
LISP
ANSI Common Lisp 中文翻译版
Lua
Lua编程入门
Haskell
Real World Haskell 中文版
R
R语言忍者秘笈
Scala
Scala课堂 (Twitter的Scala中文教程)
Effective Scala(Twitter的Scala最佳实践的中文翻译)
Scala指南
Swift
The Swift Programming Language 中文版
Perl
Modern Perl 中文版
Perl 程序员应该知道的事
Prolog
笨办法学Prolog
Vim中文文档
Vimscript
笨方法学Vimscript 中译本
Vim中文文档
读书笔记及其它 读书笔记
编译原理(紫龙书)中文第2版习题答案
把《编程珠玑》读薄
Effective C++读书笔记
Golang 学习笔记、Python 学习笔记、C 学习笔记 (PDF)
Jsoup 学习笔记
学习笔记: Vim、Python、memcached
图灵开放书翻译计划–C++、Python、Java等
蒂姆·奥莱利随笔 (由译言网翻译,电子版免费)
Octave 入门 (PDF版)
SICP 解题集
精彩博客集合
正则表达式简明参考
第一步:做好心理建设
编程环境、各种定义概念、格式规则、缺点优点、语法逻辑、运行BUG、旧教程难以适配新技术......这些都是编程学习中绕不开的坎儿。
所以说,首先要想清楚自己能不能承受这些挫折,自己能不能坚持走到最后。
第二步:选定学习方向
编程的种类非常繁多, 如果从编程语言上分,一般分两种:
一种是高级语言编程,如C++,VB、VF等。
另外一种是机器语言编程,如汇编编程等。
从高级编程语言的种类上分的话就多了,有VB、VF、VC、Java等。根据自己的兴趣,结合市场前景先选定一个方向,再选择一门语言。否则就是像猴子掰苞米,不仅浪费了时间,还会一无所获。
第三步:制定学习计划
选定了方向之后,就不要再轻易变动了,因为编程的整体学习成本还是比较高的,所以一头扎进去学就对了。
自学的过程是枯燥乏味而且痛苦的,所以要想有一定成果,清晰明确的规划是必不可少的。根据选定的方向和平时的空余时间定制计划即可,没有什么模板。
第四步:培养好的学习方式
学习方式方面,切忌:不要用学生思维去学习编程,而要去用开发者思维学习。
总结:
就编程学习来说,需要掌握最基础的概念语法,边学边练,多从实践中磨练技艺,尝试着做出一些小作品,提升成就感,循序渐进,增加难度。
学习的过程之中,必须激发内心的欲望,掌握正确的编程学习方法,走过一段漫长的新手期,有耐心和毅力坚持下来,才能拥有更好的未来。
该尔杰斯开发环境( JessDE )提供的一套插件为流行的开源的IDE Eclipse的;特别是,这些都是Eclipse的插件版本为3.1或更高版本。请注意,只有JessDE作品的充分“的Eclipse SDK的” -规模较小的“平台运行二进制”是不够的。
要安装JessDE ,只需退出Eclipse的,解压缩所有文件Jess71p2/eclipse进入最高级别的Eclipse的安装目录。确认目录命名为“ plugins/gov.sandia.jess_7.1.0 ”存在,在你的Eclipse的安装目录,然后重新启动Eclipse的。 //////
这段翻译的结果,不是你的SDK 不是 full "Eclipse SDK"
Jess 7.0p1——Java平台规则引擎(一) 2008-07-12 22:21
分类:JESS 字号: 大大 中中 小小 1.入门
1.1.需求
Jess是一个用java语言编写的程序库。因此要使用Jess你需要Java虚拟机(JVM)。你可以从 Sun Microsystems上免费得到一个非常适合用于Windows, Linux,Solaris上的JVM。Jess 7是兼容所有版本的Java,从开始的JDK 1.4到现在的最新版本JDK1.5。版本更老的编号为4.x的Jess兼容JDK 1.0, 5.x版本兼容的是JDK1.1,Jess 6工作在JDK1.2及以上版本。
在使用Jess前请先确认JVM是否正确安装并能正常工作。
使用JessDE集成开发环境,你需要Eclipse SDK的3.1版或更新版本,这个可以从获得。安装JessDE前请确认Eclipse是已经安装并能正常工作。
Jess类库为另一种语言担任译员,这种语言我在本文档中称为Jess语言。Jess语言是一种高度专业化的Lisp形式语言。
我会认为读者你是将使用这两种或其中一种语言的一个程序员。并且所有的读者都至少有起码Java基础。另外你必须有一个Java运行系统和知道如何以一个简单的方法使用这个系统。你应该知道如何用它来:
· 运行一个Java应用程序
· 处理如CLASSPATH变量的配置问题
· 编译Java源文件集(可选)
如果你没有对Java的环境有基本的熟悉,那么我建议你购买了关于java的基础的书籍。对与各种平台的Java软件以及丰富的教程和文档可以免费从上获得。
对于那些将要使用jess语言编写程序的读者,我假定你们已经熟悉了一般程序编写的原理。我会说明整个Jess语言,所以熟悉Lisp是不需要(虽然熟悉是有些用的)。此外,在可能范围内,我将努力说明基于规则系统的最重要的概念,因为它们适用于Jess。再次,我将假定读者对这些概念有了一定的熟悉程度和了解更多。如果不熟悉基于规则系统,你也许应当考虑购买一本关于这一主题的书籍。
许多读者都希望提高Jess的能力,无论是通过向Jess语言加入的命令(用JAVA语言写)或以Java应用的方式嵌入Jess库。另外一些人会想用Jess语言的Java集成能力来从Jess语言程序调用Java函数。在本文档专门针对这类读者的一些章节中,我将承担适度Java编程的知识。我不会教Java语言任何方面的知识,有兴趣的读者可到您当地的书店参阅相关书籍。
这个文档包含了一个目录,在很多书上这些主题也都被列举出来。
1.2.准备
1.2.1.安装包的组成
Jess提供一个可用于所有支持平台的单独的.zip压缩包。这个单独的文件压缩包包含在Windows,UNIX,或Macintosh系统上使用Jess的所有你需要(除了JVM你必须自己安装)的资源。当Jess是解压后,你应该有一个命名为jess71a2 /的目录。在这个目录路径有下列文件和子目录:
README
快速开始指导.
LICENSE
关于Jess使用的您的权利信息.
bin
一个包含Windows 批处理文件(jess.bat)和一个UNIX脚本(Jess)的目录,你可以使用它们启动Jess命令提示符.
lib
该目录含有作为一个Java档案文件的Jess本身。注意,这不是一个“点击”存档文件,你不可以通过双击它运行Jess。这是要注意的。在这个目录的jsr94.jar包中又包含了符合JSR - 94 (javax.rules)的API。
docs/
这是一个文档,以“index.html”为首页的Jess手册。.
examples/jess
一个包含使用Jess语言编写的小程序的目录.
examples/xml
一个包含使用JessML, Jess's XML规则语言编写的小程序的目录.
eclipse
JessDE, 是Jess集成开发环境, 提供支持Eclipse 3.0的插件集。看这里的安装说明。
src (Optional)
如果这个目录存在,它包含全部的Jess规则引擎和开发环境的源代码,包括一个构建它的Ant脚本。
1.2.2.命令行界面
Jess有一个交互的命令行界面。分布包括两个你能运行Jess命令提示符的脚本:其中一个用于Windows,另一个用于UNIX。它们两个都在bin/ directory目录下。运行适合你系统的那一个,然后你应该看到以下的界面:
C:\Jess71a2 bin\jess.bat
Jess, the Rule Engine for the Java Platform
Copyright (C) 2006 Sandia Corporation
Jess Version Jess71a2 9/5/2006
Jess
这就是Jess的命令。尝试计算一个前缀数学表达式"(+ 2 2)"。不要忘记那些括号!
Jess (+ 2 2)
4
Jess计算了此函数,并打印结果。在这份文档的下一章,我们会发现Jess规则语言本身的语法。
通过Jess命令行执行Jess代码编写的文件,可以使用批处理命令:
Jess (batch "examples/jess/sticks.clp")
Who moves first (Computer: c Human: h)?
在前面的例子应注意到,在Jess提示符后键入命令,Jess将在下一行响应命令。我将在整个这本文档中遵循本约定。
直接从操作系统提示符执行这样的Jess程序,你可以把程序的名字作为Jess脚本的一个参数,这样就可以启动:
C:\Jess71a2 bin\jess.bat examples\jess\sticks.clp
Jess, the Rule Engine for the Java Platform
Copyright (C) 2006 Sandia Corporation
Jess Version Jess71a2 8/28/2006
Who moves first (Computer: c Human: h)?
jess.console类是一个简单的jess命令行界面的图形版。你在窗口的底部输入一个命令,结果就会出现在滚动窗口之上。试着从Jess71a2路径下键入下面命令:
C:\Jess71a2 java -classpath lib\jess.jar jess.Console
1.2.3.Java程序设计语言与Jess
要在你的Java程序中把Jess做为库使用,文件jess.jar(在lib目录下)必须是以一个标准的扩展名安装在类路径之下,或者对你的开发工具配置后能够识别它。做好这些工作的细节是随系统和环境而定的,但在设置一个类路径时通常涉及修改环境变量,并且安装一个标准的扩展名,简单来说就是复制jess.jar到你的$(JAVA_HOME)/jre/lib/ext路径下。可查阅Java文档或介绍Java的文本以了解更多的细节。
1.2.4.Jess例子程序
有一些简单的例子程序(在examples/jess和examples/xml目录下),您可以用这些程序测试你的Jess是否已经安装正确。这些程序包括fullmab.clp,zebra.clp和wordgame.clp。fullmab.clp是关于猴子与香蕉问题的经典版本。要从命令行运行它,只需要输入:
C:\Jess71a2 bin\jess examples\jess\fullmab.clp
和要运行的问题,就会在屏幕上输出结果。任何Jess代码的文件都可以以这种方式运行。像使用批处理函数一样在命令行给一个Jess文件名就可以运行了。因此,一般你只需要保证文件是以:
Jess (reset)
(run)
结束或根本没有规则将运行。zebra.clp和wordgame.clp程序是两个典型的例子,它们是用来展示Jess如何处理复杂情况的程序。这些例子都产生大量的局部模式匹配,因此它们运行非常慢而且使用了大量的内存。另外的例子包括sticks.clp (互动游戏)和frame.clp (一个使用jess的java集成能力建立图形界面的演示)。
XML的例子在单独的子目录下,每个子目录中都包含有运行例子说明的自述文件。
2.Jess开发环境
Jess 7包括一个基于Eclipse的开发环境。这个开发环境有一个编辑器,一个调试器和一个Rete网络视图。在将来发布的版本中将包含更多组件(规则浏览器和其它工具)。
2.1.安装JessDE
Jess开发环境(JessDE)是作为一个插件集支持流行的开源的集成开发环境Eclipse;该插件支持Eclipse 3.1及其更新版本。应该注意的是JessDE仅仅工作在完全的" Eclipse SDK "上——较小的"二进制运行平台"是不能运行的。
安装JessDE,首先要退出Eclipse,然后从Jess71a2/eclipse解压缩所有文件到顶层的Eclipse的安装路径。确认在你的eclipse安装目录有一个名为" plugins/gov.sandia.jess_7.0.0 "的目录存在,然后重新启动Eclipse。
注意!如果你只是从以前的版本的JessDE更新,你必须在Eclipse的命令行使用"-clean "命令开关,强制更新缓存中有关JessDE插件的信息。如果你不这样做,很多的JessDE的选项可能被禁用,安装后你只需要这样做一次。
2.1.1.验证你的安装
在“Help”菜单下选择“about Eclipse SDK”。在" about Eclipse SDK "主窗口有一个有Jess标志的按钮。单击“Plug-in Details”,如果JessDE已安装妥当,你将发现三个或四个Jess相关插件在列表上——在我的Eclipse中,它们出现在底部。
然后使用“New Project”向导建立一个Java工程。在新的工程中创建一个新文件并命名为“hello.clp”。这个文件会在一个Jess的编辑器中打开,这个编辑器有一个带红色“J”字的银色小球的图标。输入一些Jess代码,如下:
(printout t "Hello, World" crlf)
你应该看到合适的语法被高亮显示。如果看到,祝贺你!工作一切正常!阅读更多JessDE其他功能的信息。
2.1.2.更多的细节
JessDE编辑器在你的Jess文件中能够标示出语法错误和警告。你很可能希望这些标记能出现在Eclipse的“Problems”视图中,尽管在默认情况下它们可能没有显示出来。安装完成JessDE后,重新启动Eclipse,在Problems的视图,在标题栏点击“Filters”的图标,然后选择标着" Jess Problem "(如果没有被选中的话)多选项。你的Problems视图应该马上就会显示Jess错误和警告。
要使用Rete网络视图,你需要安装Eclipse图形编辑框架(GEF)。你可以从Eclipse工程项目页面得到GEF,或通过Eclipse的内置式更新管理器安装它。然后打开这一视图,在“Jess Debugger”组之下Eclipse的“Show view”对话框找到它。那么在Jess编辑窗口中当光标停在某一内部规则时,Rete网络视图将会为这项规则显示出编译的网络。
2.2.使用JessDE
2.2.1.Jess语言编辑器
JessDE编辑器可以编辑“.clp”格式的文件。在默认情况下你建立的任何 “.clp”格式的文件都将使用JessDE编辑器打开。没有单独Jess的视图,或是Jess项目类型;我们期望大多数人都将使用JessDE工具来写Jess/Java混合应用组成的Jess程序,因此JessDE工具将用在Java项目的文件中。在Jess语言代码中JessDE使用你的Java项目的类路径以解决Java中类名称问题——例如,调用defclass函数。
编辑器有您期望的一个现代程序编辑器所应具有的全部功能。
可定制的语法变色
你可以使用Eclipse全局参数对话框中的“Jess Editor”表来改变默认的颜色。
提供模板,槽和函数名的帮助内容
在许多不同地方使用JessDE编辑器你可引用Eclipse的" Content Assist "功能;JessDE将使输入Jess代码变得更容易。在输入时可以使用快捷键Alt-' / '弹出选择列表清单。
自动修复代码的“Quick fix”助手
这个功能默认使用Ctrl-1快捷键,快速匹配能立即知道怎样定义未定义的deftemplates,并为现有的deftemplates(如果它们在相同的文件里被定义)增加新的槽。
实时错误检测标记和错误高亮显示
当你输入有错误和警告时将被高亮显示
代码自动格式化
当你输入时代码自动缩进。你可以从"Source"菜单下选择"Format"命令来格式化一个全部的缓冲区
使用大纲视图快速导航
Eclipse大纲视图列出了所有在缓冲区中定义的结构;你可以点击其中任何一个就能够迅速定位到它
圆括号匹配和自动插入
当你输入一个'('或’”’符号,JessDE就会插入匹配的符号。当你的光标移动到下一个圆括号时,JessDE会显示与之相匹配的圆括号。
通过悬停获得Jess函数和结构在线帮助
快速访问Jess手册中每一个函数和结构类型的描述。
支持deftemplates 和 deffunctions的悬停帮助
如果你将你的滑鼠移动到一个deftemplate或deffunction的名字上,任何代码处,JessDE都将显示一个关于这个模板或函数信息的"tooltip"。
Jess程序的运行和调试命令
你可以使用正常Eclipse 的" Run... "菜单或由右击导航项或在编辑窗口运行或调试Jess程序。
2.2.2.文件之间的关联
有时候一个*.clp文件依靠其他的*.clp文件中的代码先被阅读执行。例如,rules.clp 也许需要templates.clp中的定义。没有这些定义,rules.clp将会出现语法错误。为了解决这个问题,你可以使用require*函数。"require*"让你清楚的声明这些关联。
如果一个文件rules.clp依靠在Java中执行的Jess命令,你可以仅仅为了这个目标创建一个特殊的文件处理这个问题(你也许称之为ruledepends.clp),这个特殊的文件包括了编辑器中使rule.clp文件能够正确解析的所有声明。如果你添加"(require* ruledepends)"到rules.clp中,仅当这个外部文件存在的话才会解析,因为它有可能正在开发中。当你部署代码时,你不需要部署ruledepends.clp,只要rules.clp能够从Java代码中取得所需声明。
"require"机制代替了JessDE的早期版本中的"Source dependencies"属性表,"Source dependencies"属性表已不再被支持。
2.2.3.Rete网络视图
使用JessDE的"Rete Network View"你可以即时看到一个衍生自任何规则的Rete网的图形展示。当这个视图是打开时(你可以使用Eclipse中的"Windows | View | Other..."对话框打开它),它会显示基于编辑器插字符所在规则的Rete网络,你可以用这个实时看到修改规则所对应的Rete网络变化。图表的布局方式是远胜于你能从Jess视图命令中得到的----因为这样没有重叠和交叉线,而且每一列的高度都可变。
2.2.4.Jess调试器
JessDE调试器可以让你调试一个在.clp文件中定义的Jess程序。它具有您期望的图形调试器所具有的所有功能:你可以暂停和恢复程序,或以步进方式执行。当程序停止时,执行堆栈的内容将会显示出来,这样你就可以检查在每个堆栈结构中定义的变量。选择的堆栈结构也可以导航到被执行的源码处。在编辑器窗口的左手边缘处,你可以通过右键单击某一规则在任何.clp文件中设置(或清除)断点。断点仅能设在函数(内置或用户自定义)中,所以你不能在defrule 或者deftemplate结构中打断程序执行。然而,你能够在一个调用规则 的左边或右手边的函数中暂停。
3.Jess 语言基础
大多数时间你是在使用Jess语言编写Jess规则。如果你从来没有使用过Lisp,第一次使用Jess规则语言也许看起来就有点奇怪了,但它并不需要太长时间来学习。回报也是丰厚的,你将使用非常少的代码表达复杂的逻辑关系。
在这一章,我们将看到Jess语言的基础语法。在后面的章节中,我们再来学习怎样定义像事实与规则这样的高级概念,但现在我们将学习最基础的。
在本语言指导中,我将使用一个非正规的符号来描述语法。在 中的基本串是必须提供的数据类型,在方括号中([])的内容是可选的,以 + 结束表示可以出现一次或多次,以 * 结束表示可以出现零次或更多。一般来说, Jess的输入格式是自由的。换行不具有特殊的含义,仅被处理为空格,而异常将被标识。
3.1.符号
符号是Jess语言的一个核心概念。符号是非常类似于其他语言中的标识符。Jess符号包括字母,数字和下面的标点符号:$*=+/_?#.。一个符号不能以数字开始,可以以一些特殊的标点符号开始(这些字符作为操作员当出现在符号开始时有着特殊的意义)
Jess符号对于大小写敏感。foo,FOO,和Foo是不同的符号。
最佳的符号是由字母,数字,下划线和破折号组成。破折号是传统的分隔符。如下所示为合法的符号:
foo first-value contestant#1 _abc
Jess中有三种特殊的符号。零,和java中的空值有点类似;真和假是Jess中的布尔类型的值。
3.2.数字
Jess分别使用Java函数parseInt(java.lang.String), parseLong(java.lang.String)和parseDouble(java.lang.String)来解析整型,长整型和浮点型数字。参考本文档中关于这些方法精确的语法描述。如下为合法的数字:
3 4. 5.643 5654L 6.0E4 1D
3.3.字符串
Jess中的字符串是用双引呈来标识的(").。反斜线能够区分嵌入的引号。注意Jess的字符串和Java的字符串在一些重要的地方是不一样的。首先,不会认识转义序列。比如说你不能用一个"\n"字符串来换行。另一方面,真正的换行可以通过双引号中的字符串来实现。他们是字符串的一部分。如下为合法的字符串:
"foo" "Hello, World" "\"Nonsense,\" he said firmly." "Hello,
There"
最后一个字符串相当于Java中的字符串"Hello,\nThere".。
3.4.列表
Jess中的另一个基础语法元素是列表。列表是由圆括号和空,符号,数字,字符串和其他列表组成。如下所示为合法的列表:
(+ 3 2) (a b c) ("Hello, World") () (deftemplate foo (slot bar))
Jess中列表的第一个元素(Lisp中称为列表的car)通常被称列表的头。
3.5.注释
Jess支持两种类型的程序注释。Lisp风格的行注释和C风格的块注释。行注释是以分号开头,延伸到文本中本行的最后。这里有一个行注释的例子:
; This is a list
(a b c)
块注释就和他们在C语言中的用法一样:他们以两个特征符"/*"开始,以"*/"结束。块注释不能嵌套。
/*
Here is an example of a list (commented out):
(a b c)
*/
注释可以在Jess程序的任何地方出现,包括模板和规则的结构里。
3.6.函数调用
和Lisp一样,Jess中的所有代码(控制结构,分配,程序调用)都是以函数调用的方式进行的。没有操作器,一切都是函数调用。然而,有些函数的名字使它们看起来像是Java操作器,在这种情况下,它们就和它们的Java 副本工作的非常相似。
Jess中的函数调用可以理解为简单的列表。函数调用采用前缀表示,如果一个列表的头部是一个已经存在的函数的符号,那么它就可以称为是一个函数调用。举例来说,用+函数来算2和3相加的表达式应该写为(+ 2 3)。在计算时,这个表达式的结果是数字5(不是一个仅包含数字5的列表!)。通常来说,在合适的时候表达式都被看作是这样并通过上下文求值。你可以在Jess提示符后键入表达式。Jess计算表达式并打印出结果:
Jess (+ 2 3)
5
Jess (+ (+ 2 3) (* 3 3))
14
注意你可以嵌套调用函数;外部函数是形成内部函数调用计算的因素。
Jess自身带有大量的内置函数,它们可以用来做一切事情,如数学计算,程序控制和字符处理,让你能够使用Java的API函数。当然你也可以在Jess语言或者是Java语言中定义自己的函数。
其中一个最经常用的函数是printout,它是用来发送文本到Jess的标准输出窗口,或者是输出到一个文件中。完善的解释你必须等待,但是现在,你所要了解的都包含在下面这个例子中:
Jess (printout t "The answer is " 42 "!" crlf)
The answer is 42!
另一个常用的函数是batch,它是用来计算一个包含Jess代码文件的。要运行Jess源文件examples/jess/hello.clp,你可以键入:
ess (batch "examples/jess/hello.clp")
Hello, world!
Jess自带的其他的所有函数的详细说明都在Jess function guide.。
3.7.变量
Jess中程序变量是以问号开始的标识符。问号也是变量名的一部分。名字可以包括字母,数字,破折号,下划线,分号和星号的任何组合。
一个变量可以看作是一个简单的符号,数字,字符串或者是一个列表。你可以用bind函数来为变量指定一个值。
Jess (bind ?x "The value")
"The value"
变量在第一次使用前不需要声明(全局变量除外)。
想在Jess提示符后看到变量 的值,你只需要键入变量的名字:
Jess (bind ?a 123)
123
Jess ?a
123
3.7.1.全局变量(默认全局)
你在Jess提示符后或者任何Jess语言程序顶层创建的所有变量, 当重置命令运行的时候都将被清除。这样就使它们稍嫌短暂,对于暂时性变量它们很好用,在标准理解的前提下不是永久全局变量。要创建不被reset销毁的全局变量,你可以用全局结构:
(defglobal [?global-name = value]+)
全局变量的名称必须是以星号开头以星号结束。合法的全局变量如下:
?*a* ?*all-values* ?*counter*
当全局变量建立以后,它会被初始化赋值。当reset命令随后执行的时候,这个变量可能会用相同的值重新设置,当然这取决于reset-globals的属性设置。有一个称为set-reset-globals的函数可以用来设置这个属性。如例所示:
Jess (defglobal ?*x* = 3)
TRUE
Jess ?*x*
3
Jess (bind ?*x* 4)
4
Jess ?*x*
4
Jess (reset)
TRUE
Jess ?*x*
3
Jess (bind ?*x* 4)
4
Jess (set-reset-globals nil)
FALSE
Jess (reset)
TRUE
Jess ?*x*
4
您可以阅读Jess function guide.中有关set-reset-globals和相关的get-reset-globals函数的信息。
3.8.控制流
Java中控制流(分支和循环,异常处理等)都是由一些特殊的语法和关键字如if,while,for,和try等来引导的。在Jess中,就如我们前面说过的,所有的一切都是函数调用,控制流也不例外。因此,Jess包含有那些名为if,while,for,和try以及foreach等函数。这些函数就和Java体系中相同名称的结构工作起来类似。
3.8.1.简单循环
例如,如下 是Jess中的一个“while”循环示例:
Jess (bind ?i 3)
3
Jess (while ( ?i 0)
(printout t ?i crlf)
(-- ?i))
3
2
1
FALSE
While循环的第一个参数是一个布尔表达式。While函数计算它的第一个参数,如果它为真,就计算它所有其他的参数。它一直进行这个过程直到它的线一个参数值为假。一个while循环总是返回FALSE.
Jess中内置有一些其他的循环函数。详情参看Jess function index.中关于for和foreach的有关描述。Jess中有一个break函数,可以有来跳出循环,也可以很早的从一个规则的右手边返回
//原文地址