1.编程语言的发展史和发展主线

计算机语言如果你将它当做一个产品,就像我们平时用的电视机、剃须刀、电脑、手机等, 他的发展也是有规律的。

任何一个产品的发展规律都是:向着人更加容易使用、功能越来越强大的方向发展。

那么,我们的计算机语言的发展也是这样,向着人更加容易使用,即更加容易写代码、更加容易实现现实逻辑的方向发展。套用奥林匹克的口号“更高、更快、更强”。那么计算机发展的主线可以总结为四个字:“更易、更强”。

这个”更易、更强”的主线,也适用于任何的产品。如果,读者朋友以后要开公司创造自己的产品或者服务(服务也是一种产品)。你的产品是否符合”更易、更强”这个规律,也决定了产品能否取得成功,能否击败现有市场上同类型的产品!当然,也直接决定了你能否发财,能否养得起老婆孩子啦!

计算机语言一般意义上划分为:

1.1第一代语言:机器语言

我们都知道计算机的基本计算方式都是基于二进制的方式。如下就是一段典型的机器语言代码:

这种代码是直接输入给计算机使用的,不经过任何的转换!当然,在计算机刚发明的时候,计算机也是稀罕物,人却有很多。物以稀为贵嘛,人就只能迁就计算机,采用了这样一种计算机可以直接识别的代码。当然,这种代码计算机非常受用,不需要做任何转换,直接执行,太爽了!

可是,人就不爽了!这样的代码,又有几个人能写,又有几个人能读懂!如果用来解决最简单的计算问题,凑合着用,没问题。如果要解决复杂问题,需要写几千行、几万行这样的代码,估计谁写谁疯。如果现在我们仍然使用第一代语言,我相信所有程序员最终只能将精神病院作为最后的归宿了。

1.2第二代语言:汇编语言

为了解决机器语言无法读懂的问题。很自然,我们就想到能不能使用人可以读懂的单词来代替一些二进制指令和数据,方便我们人去读、编写代码。于是,汇编语言诞生了。他使用了大量的助记符来代替二进制指令,方便我们人去编写代码。如下是一段典型的汇编语言代码:

显然,这样的代码,要比起机器语言来,对于我们程序员来说,爽了很多,至少不需要再去背诵那些难记的二进制指令了!于是,有了更好的武器,意味着我们可以解决更复杂的代码,写个几百行、几千行汇编语言代码也成为不那么复杂的事情。

【注】现在仍然有很多领域在使用汇编语言,比如:操作工业机器人、单片机编程、甚至某些计算机病毒的编写等。

1.3第三代语言

随着晶体管、集成电路的出现,计算机的功耗越来越小、速度越来越快,计算机很快深入到了各行各业。有个很著名的定律叫做摩尔定律,他深刻的展示了计算机发展的规律:

“当价格不变时,集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18个月翻两倍以上”

英特尔公司创始人---戈登·摩尔

摩尔定律在我们身边有着实实在在的体验,我们现在手边用的电脑、手机比起十年前强大的很多倍,但是价格实际上确越来越低!十年前,北京房价是3000一平的地方,现在涨到了4万,涨了十多倍。十年前,一个笔记本需要两万人民币,现在只需要几千元,但是性能确更好。我们多么希望,房价也能遵循摩尔定律啊!

这样,随着计算机深入更多的企业、单位、甚至更人。我们很自然的就希望使用计算机解决我们身边的问题。这种需求越来越明确,越来越复杂。汇编语言在体系结构设计上的缺陷,根本无法胜任解决复杂问题。使用汇编语言写几万行代码,几十万行代码,那真的可以称之为”噩梦”.

于是,各种各样,结构化设计更加优良的第三代语言诞生了。例如:C语言、Fortran、cobol、pascal、ada、c++、java、c#。

第三代语言数量众多,大体上分为:面向过程和面向对象两大类。C语言是典型的面向过程的语言。C++、JAVA是典型的面向对象的语言。

大家在学习过程中,不要有这样的误解。学了面向过程会对学习面向对象有不好的影响,影响思维。那纯属扯淡,只能说明你面向过程根本没入门! 事实上,面向过程和面向对象是相辅相成的。 在面向对象编程中,也离不开面向过程。关于,面向过程和面向对象的区别,我们将在面向对象章节中详细说明。

1.3.1 C语言

第三代语言中,C语言是最重要的!可以称之为“现代语言的鼻祖”。其他很多语言都跟C语言有千丝万缕的联系!

C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发

1.3.2 C++语言

显然就是C语言的升级版,看名字我们就知道了,就是C语言面向对象的版本!在C基础上,一九八三年又由贝尔实验室的Bjarne Strou-strup推出了C++。 C++进一步扩充和完善了C语言,成为一种面向 对象的程序设计语言。

1.3.3 JAVA语言

SUN公司的JAVA也是以C/C++为原型开发的,甚至有人将JAVA称之为“C++-”(C加加减).看名字就知道是将C++中某些不太好用的地方砍掉!

1.3.4 Object-C语言

现在IOS和Mac开发中的主流语言。 根据C语言所衍生出来的语言,继承了C语言的特性,是扩充C的面向对象编程语言。它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。

1.3.5 C#语言

微软发明的一种希望替代JAVA的语言。盖茨曾经非常认可JAVA,,“JAVA是我见过最好的语言”,因此,微软跟JAVA曾经有一段蜜月期,合作非常好。但是后来由于版权纠纷,闹掰了。盖茨一怒之下,就要搞一个比JAVA更好的语言。因此,我们在C#中可以看到大量的JAVA中有的特性,非常明显的”山寨”,当然也可以称为”微创新”。创新都是源自”山寨”。但是,微软山寨了JAVA的细节,但是没有学到JAVA的精华,即跨平台。当然,这跟微软本身的公司特性有关,微软名字叫做:Microsoft,但是我们知道他的核心产品是windows,所以他希望将他所有的产品都跟windows绑定再一起,这样C#就失去了JAVA的跨平台的优势。

附:贝尔实验室(IT行业的圣地)

晶体管激光器太阳能电池、发光二极管、数字交换机通信卫星、电子数字计算机、蜂窝移动通信设备、长途电视传送、仿真语言、有声电影立体声录音,以及通信网、C语言、C++语言等许多重大发明的诞生地。

详情请参考百度百科:http://baike.baidu.com/view/37115.htm

附:历史上最古老的IT公司IBM

IBM(International Business Machines Corporation),国际商业机器公司,或万国商业机器公司的简称。总公司在纽约州阿蒙克市,1911年创立于美国,是全球最大的信息技术和业务解决方案公司。

详情请参考百度百科:http://baike.baidu.com/view/1937.htm

附:微软的前景堪忧

微软的核心产品是windows. 微软的成长基本上跟个人电脑PC的普及和发展是同步的。但是,随着手机、平板电脑的发展,我们发现个人电脑的地位明显的在下降,这也意味着 windows的地位在显著的下降。“成也PC,败也PC”. 如果,微软不在手机和平板电脑上发力,将不可避免的沦为”第二个诺基亚”。

---尚学堂老高扯淡预言

附:山寨和创新

任何一种创新都不是凭空天上来的, 都是基于以前的旧事物发展的。都是一种”山寨”. 我们看到计算机语言的创新史其实就是一部山寨史。当然,如果把别人的跌出拿来只换个名字那叫耍流氓、不要脸,是真的”山寨”。 如果把别人的东西拿来进行改进,做的更好,那才就叫”创新”。

附:到底应该学哪门语言

很多童鞋会有疑问,到底应该学什么语言呢? 纠结了很长时间,仍然没有下手。我的说法是,JUST DO IT!  学了再说。 其实,天下文章一大抄,语言之间固然有差异,但是隐藏在语言背后的编程思维方式没有差别。如果你精通了一门语言再去学其他语言,很快就可以上手。

纠结是个坏毛病。小时候,老是纠结于以后做爱因斯坦呢还是盖茨呢?纠结了很多年。长大了,才发现真的是想太多了!

2.JAVA语言的发展史

SUN公司介绍

SUN公司全称是:Stanford University Network.  SUN公司是从斯坦福大学孵化器出的高科技公司。创立后,曾经市值名列IT公司第一位。在2001年时,市值2100亿美元,远超过google公司、IBM公司。SUN公司不仅打败了包括 IBM 在内的全部工作站(Work Station)和小型机(Mini Computer)公司,而且依靠它的 Solaris(一种Unix)和风靡世界的 Java 程序语言,成为在操作系统上最有可能挑战微软的公司。太阳公司不乏能人,它不仅为 Google 培养了 CEO埃里克.施密特和首任工程部副总裁韦恩.罗森(Wayne Rosen),并且在一定程度上奠定了今天 Google 工程部门的基础。

当然,今天的SUN公司已经一落千丈,并且被oracle公司收购。sun公司从成立到市值2000亿美元经过了20年,但是走下坡路只用了1年时间!这就是IT行业的残酷性!

3.JAVA的诞生和核心特点

上世纪90年代初,SUN公司的James Gosling(高司令,^_^)领导的Green项目,着力打造一个分布式的、可以在消费类电子产品(如电视机顶盒)使用的系统架构。

这种架构中,要求写的代码可以运行在各种消费类电子产品中,即要求代码的中立性、跨平台性。

最初,Green项目使用的C++,但是在研发过程中发现C++并不能很好的适应新的需求。于是,这些高人对C++编译器做了改写,仍然不太理想,不太符合跨平台的特性。 牛人有牛人特有的牛脾气,于是,大家决定重起炉灶,开始研发一种新的语言,即JAVA

经过一年半的研发,整个产品研发完成。但是,很遗憾,消费类电子产品并没有高速的发展起来,JAVA进入蛰伏期。

【注】跨平台特性,始终是JAVA的核心优势!

4.JAVA的飞速发展

无心插柳柳成荫!90年代中末期,有一个改变世界的大事出现了:互联网的爆发式增长。在传统产业,例如钢铁产业要想取得产量翻番,那需要很多年的时间。但是,在互联网行业都是呈指数级增长,爆炸式的增长。google可以在短短几年就增长到上千亿美元市值。

互联网将各种各样的电脑连到了一起,这时,我们发现电 脑的操作系统各种不同。因此,急需一种跨平台的语言,通过它编写的程序可以在各种平台上运行。JAVA正好符合这种需求。使用JAVA编写的applet程序给了90年代的人们极大的震撼,于是JAVA迎来了他的黄金时代!

JAVA诞生后,经历了如下版本的发展变化:

•    1991年,Sun公司的Green项目,Oak

•    1995年,推出Java测试版

•    1996年,JDK1.0

•    1997年,JDK1.1

•    1998年,JDK1.2,大大改进了早期版本的缺陷,是一个革命性的版本,更名为Java2

•    2004年,J2SE 5.0 (1.5.0)  Tiger老虎

•    2006年,J2SE 6.0 (1.6.0)  Mustang野马

•    2011年,JAVASE7.0

5.JAVA的特性和优势 

简单性

就是c++语法的纯净版。没有头文件,指针运算,结构,联合,操作符重载,虚基类等等。由于语法基于c,因此学习起来完全不费力。

面向对象

面向对象是一种程序设计技术,他将重点放在数据(即对象)和对象之间的接口上。

可移植性(跨平台性)

这是JAVA的一个重要的优势。JAVA代码或者说字节码、二进制码可以跨平台的移植,而不用管具体的操作系统和硬件环境。JAVA本身就是面向网络的,只有在网络环境中才能显示出他的优势,比如:现在我有一个网络环境,要让我的笔记本和手机交互,笔记本环境是windows发出一个让手机定时录音的JAVA代码,手机只有简单Linux内核操作系统,照样可以完美的执行这个代码。

“一次编写,随处运行”:“write once, run anywhere”

JAVA在设计时就很注重移植和跨平台性。比如:JAVA的Int永远都是32位。不像c++可能是16,32,可能是根据编译器厂商规定的变化。这样的话程序的移植就会非常麻烦。

高性能

JIT(JUST IN TIME)即时编译。将一些“热点”字节码编译成本地机器码,并将结果缓存起来,在需要的时候重新调用。这样的话,使JAVA程序的执行效率大大提高,某些代码甚至接待c++的效率。随着这种技术的一天天完善,也许有一天会超越编译代码的效率。

分布式

JAVA是为internet的分布式环境设计的,因为他能够处理tcp/ip协议。事实上,通过url访问一个网络资源和访问本地文件是一样简单的。Java还支持远程方法调用(RMI,remote method Invocation),使程序能够通过网络调用方法。

动态性

就是在需要时将某些代码添加到正在运行的程序中。反射机制。当需要把某些代码添加到正在运行的程序中时,动态性是一个非常重要的特性。Java的动态特性是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所需要的类,这是C++语言进行面向对象程序设计所无法实现的

多线程

多线程的使用可以带来更好的交互响应和实时行为。多线程的简单性是Java成为主流服务器端开发语言的主要原因之一。

安全性

Java适合于网络/分布式环境,为了达到这个目标,在安全性方面投入了很大的精力,使Java可以构建防病毒,防篡改的系统。

健壮性

Java是一种健壮的语言,吸收了C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)。Java程序不可能造成计算机崩溃。Java系统仔细检测对内存的每次访问,确认它是合法的,而且不致引起任何问题。不过,即使Java程序也可能有错误。如果出现某种出乎意料之事,程序也不会崩溃,而是把该例外抛弃。再通过异常处理机制,程序就会发现这类例外,并加以处理。

6.JAVA三大版本的区别

SUN公司推出了JAVAEE、JAVASE、JAVAME适应各种不同平台上的开发和运行工作。我们以后的学习会围绕他们开展起来。

•    J2EE (JAVAEE)

–    Java 2 Enterprise Edition:

–    定位在服务器端的应用

•    J2SE  (JAVASE)

–    Java 2  Standard  Edition

–    定位在个人计算机上的应用

•    J2ME  (JAVAME)

–    Java  2  Micro  Edition

–    定位在消费性电子产品的应用上。

7.JAVA语言为什么能够成功

一个产品的成功和一个人的成功是一个道理。除了自身具备过硬的优势外,还需要那么一点点狗屎运,甚至狗屎运非常关键。就是我们所讲的天时地利人和。JAVA的成功除了自己具备跨平台特性外,更重要的是正好踩中了互联网发展的节奏。微软的成功除了windows好用外,也是正好踩中了个人电脑发展的节奏。所以,我们除了自己努力外,也需要出去走走努力才踩一坨狗屎才行!

附:斯坦福大学的房产生意经

斯坦福大学依靠自身庞大的校区,创建了斯坦福科技园(硅谷的前身),初期采用房租免费等方式,鼓励自己的毕业生在科技园创业、鼓励社会企业入驻。由于免费的方式再加上其他优惠的政策,吸引了大量的创业者加入进来。最终大家添柴加火,造就了今天的硅谷。这才是最高明的房地产商啊!相比我国的房产商杀鸡取卵式的发展,无语!北京五环外房价都3万多了,一个精英人才就算是年薪20万,买个100平的房子,需要不吃不喝15年!如果要吃喝的话,基本一辈子都在为这100平的房子打工!赤裸裸的剥削至此,还有什么话说!

---尚学堂老高扯淡语录

附:跟斯坦福大学有关的IT公司

牛逼的大学,不可思议的大学。看看这个大学的毕业生和教授创立的公司:

1.    惠普公司

2.    SUN公司

3.    思科公司

4.    雅虎公司

5.    Google公司

6.    英特尔公司

7.    NVidia(最大的显卡公司)

8.    耐克(卖鞋的,斯坦福除了IT还有耐克)

斯坦福大学毕业生创立的小于10亿美金的中小公司就不说了。这八个大公司加起来的市值,估计远远超过大部分国家的鸡的屁了吧?

【Java】Java_01初步的更多相关文章

  1. Java反射-初步入门

    Java反射-初步入门 学反射先了解什么是反射. 百度百科:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动 ...

  2. 接口自动化:HttpClient + TestNG + Java(三) - 初步封装和testng断言

    在上一篇中,我们写了第一个get请求的测试类,这一篇我们来对他进行初步优化和封装 3.1 分离请求发送类 首先想到的问题是,以后我们的接口自动化测试框架会大量用到发送http请求的功能. 那么这一部分 ...

  3. 关于部门后端所有转向java前初步设想

    Java服务有些什么形式?眼下来看主要是下面几类: 1.  执行在Web应用server的Servlet 2.  Thrift.PB.Avro等相似框架写的java服务 3.  WebService( ...

  4. Java——单例模式初步

    1.7 单例模式初步 好书推荐:java与模式 1.7.1 什么是设计模式 设计模式是在大量的实践中总结和理论化之后优选的代码结构.编程风格.以及解决问题的思考方式.设计模式就像是经典的棋谱,不同的棋 ...

  5. JAVA面向对象初步知识总结:封装、继承、多态

    1.封装 把数据和方法包装进类中,以及具体实现的隐藏,常共同被称作是是封装.其结果是一个同时带有特征和行为的数据类型.所谓具体实现的隐藏是通过访问权限控制实现的.JAVA 子类重写继承的方法时,不可以 ...

  6. Java网络通信初步认知

    本文转载自:http://wing011203.cnblogs.com/ 在这篇文章里,我们主要讨论如何使用Java实现网络通信,包括TCP通信.UDP通信.多播以及NIO. TCP连接 TCP的基础 ...

  7. JAVA:NIO初步了解

    简介: Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式. Java NIO: Ch ...

  8. Java的初步认识

    PS:弥补那些错过的时间,弥补那些本是决定做而没有做的事情,当初说好了学习编程要把自己学到的或是理解的写到博客中记录下来,可是由于各种缘由最终是没有实现...经过几番周折决定把那些丢掉的重新捡起来.对 ...

  9. java socket初步学习一 ( tcp)

    Java socket通信程序: 第一版本: 实现功能: 服务器地址:127.0.0.1  端口:5050 客户机:端口5050 客户端发送字符:“t” 服务器接收到该字符并回复:“r” 流程: 建立 ...

随机推荐

  1. 杀掉MYSQL死锁进程

    vi /usr/local/killmysqlprocess.sh #!/bin/bash #*/1 * * * * /usr/local/src/killmysqlprocess.sh backdi ...

  2. APP中常见上下循环滚动通知的简单实现,点击可进入详情

    APP中常见上下循环滚动通知的简单实现,点击可进入详情 关注finddreams博客,一起分享一起进步!http://blog.csdn.net/finddreams/article/details/ ...

  3. vi相关内容

    vi显示行号: 第一种是,手动显示:在vim命令行模式下输入 :set nu 取消显示:在vim命令行模式下输入: set nonu 第二种是,永久自动显示:我们修改一个配置文件. 我们输入命令:vi ...

  4. Error converting bytecode to dex: Cause: java.lang.RuntimeException: Exception parsing classes

    http://blog.csdn.net/xx326664162/article/details/51859106 总算有个靠谱的了

  5. 链表学习二:链表反转与查找倒数第K个

    //单链表反转 ListNode* RevertList(ListNode* m_pHead){ ListNode* pCurrent = m_pHead; ListNode* pPrev=NULL; ...

  6. 软件配置篇-java下载及安装

    1.进入java官网下载合适版本: 下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.htm ...

  7. vue中的组件,Component元素,自定义路由,异步数据获取

    组件是Vue最强大的功能之一.组件是一组可被复用的具有一定功能,独立的完整的代码片段,这个代码片段可以渲染一个完整视图结构组件开发如何注册组件?第一步,在页面HTML标签中使用这个组件名称,像使用DO ...

  8. Kubernetes环境下调整WebLogic JVM基本参数

    基于Kubernetes启动WebLogic后,发现JVM的最大heap size一直在700多M左右,通过 kubectl logs 察看pod启动状态,发现日志中并没有-Xms和-Xmx参数.日志 ...

  9. DWZ(一):框架初了解

    DWZ富client框架(jQuery RIAframework),是中国人自己开发的基于jQuery实现的Ajax RIA开源框架. DWZ富client框架设计目标是简单有用.扩展方便.高速开发. ...

  10. iOS:XMPP即时聊天知识

    XMPP即时聊天框架:XMPPFramework   XMPP The Extensible Messaging and Presence Protocol(可扩展通讯和表示协议). 基于XML XM ...