由于JAVA语言安全性高、代码优化、跨平台等特性,从1995年5月由SUN公司发布后,迅速取代了很多传统高级语言,占据了企业级网络应用开发等诸多领域的霸主地位。
不过,JAVA最突出的跨平台优势使得它不能被编译成本地代码,而要以中间代码的形式运行在虚拟机环境中,这使得JAVA的反编译要比别的高级语言容易实现,并且反编译的代码经过优化后几乎可以与源代码相媲美。
为了更好地保护知识产权,避免本公司的智力成果轻易被人窃取,开发者有必要对反编译工具深入了解,以便有针对性地采取保护措施。
目前,比较流行的JAVA反编译工具有近30种,其中有三款堪称精品:
一、 应用广泛的JAD
在众多的JAVA反编译工具中,有几种非常着名的工具使用了相同的核心引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI’s Java Class Viewer和国产的JAVA源代码反编译专家。
JAD本身是一个命令行工具,没有图形界面,上述的这些工具大多是在JAD内核的基础之上加了一个图形界面而已。这么多种产品的共同选择,足可证明JAD在JAVA反编译领域中的尊贵地位。
JAD是使用Microsoft Visual C++开发的,运行速度非常快,可以处理很复杂的JAVA编译文件。众多的参数使JAD可以灵活应付多种加密手段,令反编译的代码更加优化和易读。由于JAD参数太多,没必要一一解释,其中有几个最常用的如下(以JAD 1.5.8f版本为例):
-d
- 用于指定输出文件的目录
-s - 输出文件扩展名(默认为: .jad),通常都会把输出文件扩展名直接指定为.java,以方便修改的重新编译。
-8 - 将Unicode字符转换为ANSI字符串,如果输出字符串是中文的话一定要加上这个参数才能正确显示。
最常用的反编译指令如下所示:
Jad –d c:\javasource –s .java -8 javatest.class
这条指令将当前目录下的javatest.class反编译为javatest.java并保存在c:\javasource目录里,其中的提示输出为中文,而不是Unicode代码。
二、 源码开放的JODE
JODE是全球最大的开源项目网站Sourceforge.net的成员,在所有的JAVA反编译器中,JODE的反编译效果是最好的,尤其是对付一些常见的加密手段,例如混淆技术等,更是出类拔粹。
JODE本身也是纯JAVA开发的,最近越来越多的JAVA反编译软件也选择JODE来做它们的核心引擎,例如JCavaj Java Decompiler、BTJ (Back To Java)、jEdit’s JavaInsight plugin等。
JODE是一个可运行的JAR文件,在windows环境下双击即可运行。
需要特别说明的是,JODE不是通过常规的Open->File的方式来加载JAVA编译后的类文件(*.class)或是类包(*.jar)的, 而是通过在Options菜单中的Set Classpath来实现的,单独的类文件可以将它的上一级目录作为Classpath输入,然后再选择Reload Classpath即可。
新加入的类包或是类的名字会在左侧窗口出现,双击类包名可以展开目录树结构,双击需要反编译的类名则在右上角的窗口中直接显示反编译后的源代码。
三、 独树一帜的DAVA
DAVA不是一个独立的JAVA反编译器,而是JAVA代码优化工具Soot的一部分。Soot和JODE一样是纯JAVA开发的,也是一个独立的JAR包,但却不能通过双击直接运行,而是象JAD一样在命令行状态运行。
Soot对环境变量的配置要求非常严格,通常情况下要对CLASSPATH做如下设置:
Set CLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.;
其中的c:\sootdir\是下载的soot类包放置的路径,CLASSPATH末尾的.;代表了当前目录,如果不加上这个的话Soot经常会报一个找不到类的错误。
DAVA是作为Soot的一个参数使用的,通常的用法如下:
Java soot.Main –f dava –d c:\javasource javatest
注意最后的类名不用带.class后缀,因为它默认是处理class文件,这个操作与前述的JAD的参数效果相同。
DAVA采取了流程优化的方式进行反编译,与传统反编译思路不尽相同,但却对改变流程类的加密方法有独特的反编译效果。
上述的三种工具各有千秋,但效果都非常不错。经测试,它们基本上都可以把JDK自带的一些例程完全反编译,然后不加任何修改可再编译成功,并能正常运行!
Ⅱ 新手如何学习编程
熟悉以下关键东西,可以边学边做,定期训练,经常思考,长期积累:
1、语法。
2、基础理论(数学、数据结构、算法等)。
3、设计方法(编程原则、设计模式、框架设计等)。
4、库(核心、基础、UI、扩展、游戏引擎等)。
5、计算机相关(操作系统、网络、图形学等)。
6、领域知识(游戏设计、网站设计等)。
7、开发工具(编辑器、IDE、自动部署等)。
8、项目管理(进度管理、分工协作、Bug管理、版本控制等)。
最普遍也是最重要的能力:创造力。努力分析并理解好做什么以及怎么做。要知道上面那些东西一开始都是不存在的。
具体方法包括:
1、快速阅读入门教程和书籍,适合学习语言和基础库。比如我学Java读的《Java编程思想》,练习题做过一点,然后学ActionScript就没读过书,只读过Adobe官方文档《ActionScript 3.0编程》。
2、阅读库的文档、实例、源码。比如Flash、Flex开发,熟悉官方API很重要,很多细节要具体使用时才注意到,这时候最好做个笔记,虽然我从没看过我的笔记。
3、做一个自己感兴趣或熟悉的小项目,比如我就以黑白棋游戏作为多个语言的试水项目,一样的逻辑,便于把关注点放在语言特点上。
4、自己动手丰衣足食。厨师有菜谱,程序员可没菜谱。比如我做游戏,最关键的游戏编程知识全部是动手学出来的,很少有专门针对某个业务领域(如游戏)的编程书籍,要么是入门书,要么是模式书(如算法)、理论书(图形学),很少有书籍教你如何开发一个45度角地图系统加编辑器的,全靠自己思考,以及看前人的代码,需要时找些网络资料。关键是,可以培养最重要的创造力。
对于算法和设计模式,可以研读下,但是关键还是靠平时如何使用了。新手勉强不来的。
项目管理方面的,就得靠工作经验了,多思考多提意见不要只走流程。
Ⅲ 学习java好找工作吗
学Java好不好找工作?先来看看学完Java后能做些什么吧。
一、大数据技术
Hadoop以及其他大数据处理技术都是用Java或者其他,例如Apache的基于Java 的 HBase和Accumulo以及ElasticSearchas。但是Java在此领域并未占太大空间,但只要Hadoop和ElasticSearchas能够成长壮大,Java 依旧还有潜力去在这个市场占据一部分。
二、嵌入式领域
Java 在嵌入式领域发展空间很大。在这个平台上,你只需130KB就能够使用 Java 技术(在智能卡或者传感器上)。最初,Java 被设计用来在嵌入书设备上工作。事实上,这只是其中的一个领域,这只是当初的“一次写入,随便畅游”的项目,现在看起来是这样了。
三、网站领域
同样,Java在电子商务领域以及网站开发领域占据这大部分席位。你可以运用许多不同的框架来创建web项目,SpringMVC,Struts2.0 以及 frameworks。
即使是简单的servlet,jsp和以struts为基础的网站在政府项目中也是很受欢迎的。例如医疗救护,保险,教育,国防以及其他的不同部门网站都是以Java为基础来开发的。
四、服务器程序
Java在金融服务业的应用非常广泛,许多跨国投资银行例如:Goldman Sachs(高盛投资),Citigroup(花旗集团),Barclays(巴克莱银行)以及其他银行,都用Java来编写前台和后台的电子交易系统,结算和确认系统,数据处理项目以及其他项目。
大多数情况下,Java被用在服务器端开发,但多数没有任何前端,它们通常是从一个服务器(上一级)接收数据,处理后发向另一个处理系统(下一级处理)。
五、软件工具
许多常用的软件和开发工具都是运用Java来编写和开发的。比如Eclipse,IneteliJIdea和Netbans IDE。
六、高频交易
Java平台大幅度提高了这个平台的特性和即时编译,他同时也能够像C++一样传递数据。正是由于这个原因,Java成为程序员编写交易平台的语言,因为虽然性能不比母语,但你可以避开它的安全性,可移植性和可维护性,以更快的速度运行。
七、J2ME系统
随着近几年IOS和Android的出现,几乎占据了J2ME市场,但仍然有低端诺基亚、三星手机使用J2ME。这个时代的大多数手机游戏,手机应用都采用J2ME的一部分MIDP和CLDC编写,以适应 Android系统。但是J2ME依然在蓝光,磁卡,机顶盒这些产品中流行。通信应用之所以这么火是因为Nokia的手机依旧支持J2ME。
八、科学应用
今天,Java依然是在科学应用中最好选择,包括自然语言处理。最主要的原因是因为Java比C++或者其他语言相对其安全性、便携性、可维护性以及其他高级语言的并发性更好。
九、交易系统
第三方交易系统,现已是金融服务产业的一个很大的部分,它们同样也是Java编写。例如受欢迎的交易平台Murex,它也是Java编写,并与许多的银行前台所连接,提供服务。
作为历史悠久的老牌开发语言,Java在金融行业、银行、电子商务、政务等领域有广泛的应用空间,任何一个选择学习Java的优秀程序员都有广阔的发展空间。并且,根据职友集数据显示,全国java平均工资:¥12820/月,取自 472311 份样本。Java在北上深等一线城市招聘需求量非常大。
只要你技术掌握的好,想找份不错的工作是十分容易的。反之,技术掌握的不好,找工作肯定会遇见困难。最好是找个面授的学校系统全面的学一下。可以去【千锋】试听看看,亲身感受下,看你能不能学会Java,难不难,值不值得你学。
Ⅳ 易辑编译润色图片处理效果怎么样
不错。
易智编译的论文润色将保证在不改变文章本身立意的基础上进行修改和优化提升。
绝不会有任何主观意识的内容添加和对文章原意的修改。
Ⅳ 学python有前途么
在回答这个问题以前,先分析下Python的就业方向如何?具体可以分为三个方向。
python作为一门高级编程语言,它的诞生虽然很偶然,但是却获得了无数编程爱好者的喜爱。Python语言简单易懂,初学者学Python语言,不但入门容易,而且经过深入系统的学习可以编写复杂的程序。那么接下来说说学习Python的三大就业方向,希望能对大家有所帮助。
方向一:利用python做爬虫
Python语言还可以写爬虫,但仅仅只是爬虫的入门而已。过Python入门爬虫比较简单易学,不需要在一开始掌握太多太基础太底层的知识就可以很快上手,而且很快可以做出成果,非常适合小白一开始想做出点看得见的东西的成就感。如果想要往这个方向发展,Python是不错的入门选项。
方向二:数据分析和人工智能
Python是机器学习和AI的主要开发语言。作为被用于机器学习和人工智能系统以及各种现代技术的一门语言,Python能够十分容易地应用于分析和组成可用的数据,这也使它成为数据科学中比较流行的语言之一。而丰富的本机拓展也使Python的优势得以强化,更适用于机器学习、数据计算和人工智能领域。
方向三:web全栈开发工作
掌握前端知识,掌握python三大后端框架,可以具备独立开发网站的能力,成为一名合格的web全栈开发将不在话下。全栈工程师是指能驾驭各种开发工具的工程师,而Python本身就有着很强的全栈式综合语言的特点,能够完成后端、前端、GUI、科学运算、网络编程、大数据开发等等,掌握了Python,会使你更快成为一名全栈程序员。
所以,学好Python,就业前途还是很可观的,但是所有的前提都是需要自己真的有两把刷子哦。
Ⅵ 提倡中文编程为什么会总遭到程序员的嘲讽
原因:
1,用英文是历史原因;
2,编程环境生产使用的都是英文的,包括运行系统。
3,程序生态是英文的。
4,程序上语言只是符号,因此,不论你用什么自然语言来表达,只要编译器能转换,都是可以的。
7,看尽千帆过,跳出此山中。不用太纠结于表面形式,寻找更深本质,或许会更好。
Ⅶ 开发一个 C++ 编译器的难度有多大,难点又在哪里
C++的前端是出了名的复杂度和可靠性要求并驾齐驱的软件。
(这两点都比它高一个数量级的大概就只有OS了)
对于这种系统,唯一的办法就是烧钱。
烧钱的作用主要包括:
1.留人;
2.填坑;
3.买买买。
先说留人:复杂度一般是“细节”的代名词。现实中的编译器大多数以递归下降为主,自底向上的归纳推导为辅。这两样在教科书上也就是几页纸的事情。但是现实总是很残酷的,人们总想让语言更加“易用”,这就意味着各种上下文相关的情况都会出现。
对于C++来说,你要判断一个符号是类型或者变量(比如这个符号被用在模板参数中),要看前面的声明/定义。这就是一个上下文相关的推导。然后你就会写大量的if else switch case之类的代码来解决各种各样的可能分支。写它的人当然知道它是做什么的,但是如果这个人离职了,新来一个人,就呆掉了,这写的都是什么煞笔玩意儿。因为它不知道现实中怎样的需求会导致奇形怪状的逻辑。所以人员的稳定,对于这种长周期迭代、逻辑复杂的项目是很重要的。但是人的水平要求高吗?不算高也不算低。总结来说就是:有逻辑,知好歹。技术什么都可以培养,但是态度和基本智商是比较难培养起来的。
至于怎么保证人员稳定?很简单:加薪。
再说填坑:编译器是对正确性要求很高的基础软件。这里的正确性既包括产生的代码的正确性,也包括编译器自身对于各种问题的容忍度和足够丰富的错误提示。容错和错误提示本身也是代码,也有很大的出错几率。所以这些软件,bug少不了。但是作为基础软件,你又不能随便就2+3搞成了2*3,这样还怎么让别人相信爱情。所以要烧很多钱来养一帮debugger。
再说买买买:古人日:我们不用很麻烦很辛苦也可以成佛。既然这么费神我们自己做干什么,不如买别人的吧。于是MS就干脆不自己做了,直接去EDG整了个前端,这样就可以少了不少人年。这就是传统土豪和水果这种新暴发户想的不一样的地方。
传统土豪想的是:我们有这么多钱为什么还要自己解决问题呢?买买买!
水果新贵则是:啊呀,不小心有了这么多钱,我们要不要给自己制造点问题好把这些钱花出去?
Ⅷ C/C++2018年发展前景怎么样
C++博大精深,是一门可以学一辈子的语言,如果你有着10年C++开发经验,各大知名IT公司都会抢着要你;如果你有15年C++开发经验,年薪百万不是梦,而且必然小有名气,在C++圈叱咤风云。可谓是经验越多,价值越高,沉淀越厚,绝对是一次投入,终生受益!成为名副其实的永不过时的全栈型IT人才!
从TIOBE语言排行榜中我们可以发现,在过去逾15年的时间里,C++一直稳居最受欢迎语言列表的第三名。对一个老牌语言来说,这个成绩不算差了。
在大学里,有很多人早已接触过C语言编程。他们对C/C++感兴趣,自己主动学习。如果在一种好的学习环境下,兴趣所在,成长的会很快。这些人,知道自己所学所想,目的很明确,动力也很强,效率很高。
社会上也存在这样一大波人,非计算机专业,甚至是高中学历。他们中很多人不知道自己适不适合学C/C++编程,那么该怎样判断自己适不适合编程呢?首先需要确定你是否对编程感兴趣,自己是不是想在编程方面发展,如果是的话,建议快速选择中公优就业进行学习。(相关推荐:中公优就业C/C++周末精品班)
一、C++职位需求量大
2018年,C++职位需求量大的惊人,毕业后根本不用发愁没有工作,而且高薪!
下图是C++在智联招聘上的职位需求。从图中可以清楚看到:搜索日期是今天日,单单是北京一个城市的职位需求数量就达到了34282个!这么大的缺口谁来填补?你还会发愁找不到工作么?
小编只是把你平时看不到的数据,把这些巨大职位需求展现在你的眼前,扮演着搬运工的角色。我们时刻都在关注着市场动态,为你们提供最新的数据。建议你们也可以多去智联招聘或者前程无忧上查询,数据都是绝对真实的!
二、C++称霸的领域
C++是一门运用很广泛的计算机编程语言,适合于多种操作系统,因此也有着很广阔的运用领域。据不完全数据统计,C++在游戏、服务器端开发、数字图像处理、编译器、金融等领域中都是可以被用到的,下面我会给出一些建议。
游戏行业:几乎所有3A游戏都是使用C++编写的。大众公认电子游戏的开发者是软件行业里回报最高的工作之一,也是需求量最大的领域之一。因为速度非常重要,所以编写高效的代码就是最基本的要求。除了要懂C++之外,精通游戏开发更应注重理论与模式的钻研,而不限于特定的API或者Library。通常还必须具备高超的图形与数学技能,这些知识足够你活到老学到老。
HPC:以极限速度处理数据,要求对底层硬件有深刻的理解,这类知识可以直接应用在语言中。通用图形处理器(GPGPU)及CUDA、OpenCL之类的并行计算框架的出现,引发了对有这类技术的C++程序员的需求。如果深入到科学计算领域,还有很多能做的工作。不知你是否听说过机器学习?这是当今的热门话题。
编译器:这是小编最喜欢的领域,LLVM项目如此成功,以致于很难找到一种既未使用LLVM库编写前端,也没有使用LLVM生成字节码的流行语言,而这些全都是C++。尽管编译器是以各种语言编写而成,但其背后的实现原理是相同的。我们使用优化器、静态分析程序、调试程序、标准库、链接器以及所有其他相关的工具来工作。
金融领域:除此之外,金融领域也有很多工作需要有能力编写低延迟代码的程序员。在这个领域,数学背景也是一大加分亮点。该领域的大多工作可能都涉及到开发与维护高频使用的交易平台。另外如果不想挂着程序员的名头,这个领域也是很棒的选择。可以说负责设计并实现金融数学模型的宽客(Quant)职位是所有程序员中最有可能获得高额奖励的。
以上只是小编的几个建议,这些领域的共通点在于:无法通过数量取胜。也就是说,C++工程师的可替换性很低,公司必须付给他们更高的薪水,并让他们解决自己感兴趣的问题,才能把人留住。如果你对C/C++还有什么想要了解的问题,请关注优就业IT常见问题栏目。
Ⅸ 编程是什么(具体、易解)
简单的说,编程就是为了借助于计算机来达到某一目的或解决某个问题,而使用某种程序设计语言编写程序代码,并最终得到结果的过程。
么叫做编程?或许是这样的,编写自己的代码和文档以及阅读别人的代码或文档!
我们太多的强调了写自己的代码和文档,而对后者我们好像并没有在意。这就像文
章一样,太多的人会写,太多的写的经验和规则已经存在,但是对读文章,那仍然
就像是一门艺术,所以大家经常用恍然大悟一些词语来形容读懂了一篇文章。程序
的状况和文章差不多,但是程序相比文章更加的固定,更加的具有规则可言,因此
我们有理由相信,阅读代码虽然也是一门艺术,但是应该是一门更加有规律可循的
的艺术。下面这个故事摘录《编程之道》:
我的故事开始于我从大学计算机科学专业毕业后的几个星期。我大学毕业后的目
标是为一家研究和开发机构工作,最好是编译程序或操作系统设计的部门。我最
后终于找到一家愿意盲雇佣我的机构,但条件是我必须在一段时间内,通过完成
程序维护的工作来“学会这套系统”。
我当然会对这个建议产生抵触心理。我花了五年的大学时间,竟然是为了浪费时
间来解决其他一些程序员的错误!然而,因为他们曾经答应日后让我干感兴趣的
工作,于是我便接受了,并在心中提醒自己,即使这份工作干不出名堂,我还能
找到其他的工作。
当我第二个礼拜去报到的时侯,我被领着去与那个程序维护组的师父见面。人事
部总管带着我快步地穿过开发中心黑暗的走廊,最后她指着长长的大厅通道尽头
处的一扇门说:“他在那里面。”说完志身走了,好像有些心神不定。
我向门口走去,眼睛朝里面窥探,我看见一个男人正坐在终端前工作,但他背对
着我,所以我不知道他有多大年纪,长得什么样。我只有靠咳嗽一声来表明我的
存在,这里,那位大师甚至没有回头瞅一眼便说:“请坐”。
越过他的肩膀,我瞟见了那些难以理解的屏幕显示,随着他纤长的手指在键盘上
飞舞,它们一闪一闪地出现在他的终端上。最后,他满意地咕哝了一声,退出系
统,然后转过身来面对着我。
我所看见的让我吃了一惊,因为他看上去不像那种应该是禅师的人,他的脸乏味,
几乎是丑陋的,他的头发如同一圈烦恼的光环。但人们首先注意的是他的眼睛,
透过厚厚的眼镜片射出淡淡的蓝光。
他从头到脚地打量了我一番,然后点点头,就好像确认一个个人观点,“你就是
那个新来的?”他酸酸地问。
“是的。”我回答。我假装充满激情,把我的经历和在大学的成绩向他作了快速
的汇报。
这位礼貌的听着,然后说:“那很好,但你以前做过程序的维护工作吗?”
我坦白地告诉他我没有做过。
师父长长地叹了口气,“那好,我们应该做我们做做的事。”他说。然后他从一
个架子上取下一本庞大的程序清单,随意地翻开它,并递给我。接着他问:“你
怎样对付这个?”
我眼睛盯着这本清单,那上面是汇编语言,还搀和着一些奇怪的宏语言。每隔十
几行语句,控制权便转移到某个神秘的子程序,而且,即使这个程序具有任何结
构性,我也看不出来。“这是什么程序、”我问。
师父把那本清单从我的膝盖上拿了过去,“这是《世代大师编码藏经》,”他说,
“当你学会了从迷魂阵中把错误的代码抓出来时,那就是你出师的时侯了。”然
后,他合上清单,把它放回到书架上。
我不久便意识到,程序的维护远比我想象的要难得多。我起初试图学会那本《编
码藏经》中所用的汇编语言,但令我烦恼的是,我发现那套汇编语言从未按规矩
提供过说明文档,现存的仅有一些笔记,是一位多年前就死去或离开公司的硬件
开发者写的。
这本《编码藏经》不能给我什么帮助了。虽然其中偶尔有一些注释,但这些注释
和这种汇编语言一样模糊,除了一些涉及到有关原始硬件构造的使人干着急的资
料以外,别无它物。
当我向那位师父抱怨这一切的时侯,他礼貌地听着,并在我们两人沉默了许久之
后,回答我说:
“你正在试图理解某种不可能被你的理性思维所理解的东西,”他说,“这样所
导致的结果必然是失败。你必须先清空你的大脑,只有那时,你才能开始领悟《编
码藏经》。”
接着,师父开始慢慢地向我阐释那本《编码藏经》里复杂的逻辑。当我聆听他那
温和的声音时,我终于开始觉察到一点光芒的闪烁,这是隐藏在《编码藏经》中
辉煌的和永恒的灵光。“那些大师对‘良好的程序设计惯例与规则’一无所
知,”师父说,他们努力去理解普遍意义上的计算机思维的内部活动,他们还需
要什么说明文档呢?那些程序是极限的表达。
然而,即使我慢慢开始有所领会,我还是感觉到自己像一只在琥珀在挣扎的小飞
虫。师父所讲的与我曾学过的东西截然不同,我的理性思维很难接受。但师父总
是耐心地一遍遍解释说,我必须不靠理性思维去推理,而要用潜意识来领悟《编
码藏经》的内涵。
经过数月的指点后,我感到很自信了,便想试试我的第一块修补程序。为了给师
父一个惊喜,我偷偷地工作。我写了一段能重新运行几行语句的补丁,把程序重
新进行汇编,并把新程序释放到生产系统中去。
第二天早上,我来晚了一会儿。让我感到奇怪的是,开发中心的主任和从事部总
管正在师父的办公室里。当我走进大厅后,从事部总管看见了我就把门关上了。
我听见了很大的说话声,但听不清说什么。
等到那两位来访者离开后,我走进师父的办公室,“什么事?”我问。
“你的修补程序,昨天晚上六点整进入了生产系统。它现在已经被删除了。”
“那么?”
“你仍然可以继续工作。”师父说。
最后,我终于明白,所有用我的理性思维去理解《编码藏经》的努力都是徒劳的,
这使我很绝望。师父觉察到了我思想上的这个变化,他开始向我传授开机。他教
给我冥想和查错的技巧,他说这些技巧是从计算机时代之初,由技术支持部一代
一代地传下来的。
我听着听着,开始意识到一个关于我以前的编程体验的特大事实。在大学里,我
一起认为程序员的工作主要是控制硬件和软件的活动,编程的最高艺术境界是,
为了完成一项任务或达到一个目标而成功地运用高超的编程技巧。但程序维护是
不同于程序开发的。要想维护一个程序,就要把程序看作是一棵渐渐成长的植物,
拔苗助长是毫无益处的。事实上,这样的行为更容易导致植物的死亡。一个程序
必须被小心地滋养。程序员在对程序进行改动之前,必须对每一个逻辑关系非常
熟悉,必须对程序的意图有很深刻的理解力。这种理解力不是在一夜之间就可以
得来的,需要长时间的积累。
好几个月以后,我终于能够给《编码藏经》成功地设计修补程序了,但设计之前
要经过长时间的冥想,还要把那本程序清单打开着支在我的桌子上。我还发现,
如果我工作的时侯点燃一支香,口中不停在重复师父教给我的口诀:
“Null-So-Stix-Etx-Eot”(ASCII 码表中头五个字节NUL、SOH、STX、ETX、EOT
的发音--译注),我更容易集中注意力。师父说,那个口诀意味着宇宙的“五
原”。
不久我发现我不再关心是否能为工作成绩而得到奖励了,在我自身和我所维护的
程序之间也看不见任何分离了。我像一个一生都活在阴影里的人一样,开始理解
编程之禅,这是一种隐于程序员设计背后的难以言喻和难以形容的力量,就像投
射影子的太阳一样。
从那毫无意义的“自我的存在”中摆脱出来后,我开始发觉,那些伟大的编程语
句过去对我来说似乎模糊不清,只是因为我还没有彻悟,无法理解它们。我现在
知道了为什么过去的那些程序员从不为他们的程序提供文档,因为英语语言的描
述本身更让人迷惑,而非使人受到启发。
一天,我发现自己正在解决的一个问题涉及到《编码藏经》中最复杂的部分--
错误分析全程。我在对此一无所知的情况下,给出了一个修补程序,它能通过对
硬件中断区的内容进行检查来测定错误的情况,使程序能继续正确执行。
那天下午,师父第一次走进了我的工作间,他把手放在我的肩膀上,眼睛朝下看
着我,“现在该是你出师的时侯了。”他说。
计算机虽然功能十分强大。可以供你上网、打游戏、管理公司人事关系等等,但是没有程序,它就等于是一堆废铁,不会理会我们对它下达的“命令”。于是,我们要驯服它,只有通过一种方式——程序,这也是我们和计算机沟通的唯一方式。
那程序到底是什么呢?
程序也就是指令的集合,它告诉计算机如何执行特殊的任务。
打个比方说,它好比指导你烹调菜品的菜谱或指挥行驶一路到达目的地的交警(或者交通路标)。没有这些特殊的指令,就不能执行预期的任务。计算机也一样,当你想让计算机为你做一件事情的时候,计算机本身并不能主动为我们工作,因此我们必须对它下达指令,而它根本不会也不可能听懂人类自然语言对事情的描述,因此我们必须使用程序来告诉计算机做什么事情以及如何去做?甚至对最简单的任务也需要指令,例如如何取得击键,怎样在屏幕上放一个字母,怎样在磁盘中保存文件等等。
这么麻烦,连这些东西编程都要考虑!怪不得人家说编程好难!你错了,其实许多这样的指令都是现成的,包含在处理芯片中内置于操作系统中,因此我们不必担心它们工作,他们都是由处理器和操作系统来完成的,并不需要我们来干预这些过程。
上面讲到的计算机本身不会主动的做任何事情。因此我们要通过程序的方式来让计算机为我们“效劳”。而这个过程就是我们“编”出来的。编程可以使用某一种程序设计语言来实现,按照这种语言的语法来描述让计算机要做的事情。
我们这里所讲的语法和外语中的语法完全两码事,这里讲的语法只是读你的程序书写做出一写规定而已。
写出程序后,再由特殊的软件将你的程序解释或翻译成计算机能够识别的“计算机语言”,然后计算机就可以“听得懂”你的话了,并会按照你的吩咐去做事了。因此,编程实际上也就是“人给计算机出规则”这么一个过程。
Ⅹ 为什么很多人建议学C语言不用任何IDE,直接用编辑器和编译器
其实对新手学习c语言来说,直接使用编辑器和编译器不是明智的,因为对c语言本身不了解的情况下,IDE会帮助新手解决一些他不需要关注的问题,如果独立使用编辑器和编译器,会加大新手判断问题的难度,不利于学习基本语法和编程方法,只有对c有了一定的了解,知道从编辑,编译,执行的整个过程,再来独立使用编辑器和编译器,定位问题会更准确