论java、C++和心中大格局

最近关于编程又有了许多新想法,想写在这里,作为一个小小总结。
        首先,关于C++和java,我要否定两个观点。之后,我要记下我心目中对于编程之大格局的认识。
        一、否定:C++是计算机专业毕业生的专利,而java是IT民工的代名词 
        现在这个时代,转行IT的人很多,培训出来的,跨专业自学的。水平参差不齐。这些人大多是自认为IT行业很赚钱而来的,结果真正学了编程之后,要有很多人被淘汰,还有更多人被慢慢淘汰。而其中,学java的占很大一部分。为何是java呢?首先在于web开发的火热,膨胀了了市场对java程序员的需求。其次在于java web开发相关的框架很多,这些框架容易理解,容易上手(虽然熟练掌握也不是那么简单)。相比较而言,C++语法的复杂、艰深,开发的高要求导致了更高的标准。这个标准简单讲,就是你至少要有一定计算机专业基础。
        也正因此,很多C++程序员就骄傲起来,觉得自己在这个行业中属于非同一般的地位。觉得自己因使用C++而高贵,尤其是和那些培训、自学出来的java程序员相比。他们觉得C++只有一部分人可以做,而java谁都可以做。

        我要首先否定这个观点。
         第一,java容易上手,那是因为java这个语言设计的高级、优雅且尊重“人性”;C++语法复杂,无非是因为C++只追求运行效率,而不怎么在乎程序员,说白了C++是为“机器”设计的编程语言,而不是为程序员设计的。
        第二,java容易入门,使用便捷,并不代表java的技术低级!正相反,java的技术一样可以高不可攀。拿web举例,人们觉得web开发无非就是用spring、struts、hibernate三大框架搞个网站,是属于IT民工要做的活。 然而一切技术都有高下之分。三大框架的确简单,但真正精通熟练应用也要下一番苦功的。而在三大框架之上,高性能网站构建、并发、缓存、数据库优化等等名词所代表一切才
真正代表着web开发的技术水平和境界!而往底层讲,要精通java虚拟机的机制原理,也绝不只是一两年功夫搞得定的!
        所以,低级的C++程序员一样是低级程序员,而高级的java工程师同样可以成为大牛。 
        糟糕的C++程序员也只能用C++写出烂代码,而优秀的java工程师同样可以用java写出诗歌的美丽和优雅。 

二、否定:C++和java是两种技术路线,要想登上高峰,就只能专注一种,否则就是贪多嚼不烂
        这样的看法其实多少有些迷信的成分,好像武侠小说里常常写一些高手,一辈子专注于某把破刀破剑破棒子却一辈子无敌。所以人们常觉得在IT行业,最好专注于某项技术、某种编程语言、某种开发环境以至于某天达到炉火纯青的地步。例如,我高中时候还一度以为自己要将汇编作为一生追随的技术。现在想起来挺幼稚的。
        与那种想法相反,编程高手往往都是技术多面手,因为他们已经不局限于某种语言或某个平台了,他们已经做到对各种技术融会贯通、游刃有余。例如我现在在华为的主管也是java、C++都玩的6的。

否定完这两种我一直讨厌的观点,算是长出一口恶气,最后,谈下我心中的编程大格局!
   在编程方面,我一直有两个大的方向,一是向上,不断专研java技术,追求最尖端的web开发技术。高性能网站的构建与数据库优化技术,将会是我的追求。
   另外一个方向是向下,扎根地下、深入底层:自制操作系统、Linux开发,甚至是深入Linux内核。编程语言方面,C、C++以及jvm以至于自制编程语言,甚至编译原理。
   这就好比一棵树的成长。枝干长多高,根就要扎多深!根扎多深,枝干才能长多高!
   这就是我的编程大格局!

附上《头文字D》里我最喜欢的一段台词。这部动画里,有技术者所追求的一切:热情、执着与疯狂。




         

时间: 2024-10-06 20:17:08

论java、C++和心中大格局的相关文章

《Java语言程序设计》大作业报告 九宫格游戏

    <Java语言程序设计>大作业报告     中国石油大学(北京)2015 - 2016 学年第二学期     班级:_____计算机14-1_______ 姓名:_____  许 恺_________________ 学号:______2014011329___________     题意分析 程序首先需要九个可以移动的格子,大小相等,有字符串标示,其次要可以相应鼠标和键盘方向键的控制,可以自由移动,并且与此同时记录步数,最后在满足条件时弹出对话框并显示步数以及是否打破记录,关于打破

java实现把一个大文件切割成N个固定大小的文件

//java实现把一个大文件切割成N个固定大小的文件 package com.johnny.test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; public class FenGeFile { p

java面试笔试题大汇总

java面试笔试题大汇总(一)JAVA相关基础知识 1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过程抽象,二是数据抽象. 2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),

java 常见的异常大集合

算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityException 文件已结束异常:EOFException 文件未找到异常:FileNotFoundException 字符串转换为数字异常:NumberF

基于Java LinkedList,实现Android大数据缓存策略

import java.util.HashMap; import java.util.LinkedList; /* * 基于Java LinkedList,实现Android大数据缓存策略 * 作者:Zhang Phil * 原文出处:http://blog.csdn.net/zhangphil * * 实现原理:原理的模型认为:在LinkedList的头部元素是最旧的缓存数据,在LinkedList的尾部是最新的缓存数据. * 在一个LinkedList(类型C的链表)维护一个存储堆栈,添加元

java:IO-读写大文件

import java.io.*; class Test { public static void main(String args[]){ FileInputStream fin =null; FileOutputStream fout = null; try{ fin = new FileInputStream("e://d/from.txt"); fout = new FileOutputStream("e://d/to.txt"); byte [] arr

Java数组的十大方法

Java数组的十大方法 以下是Java Array的前10种方法.他们是来自stackoverflow的投票最多的问题. 0.声明一个数组 String[] aArray = new String[5]; String[] bArray = {"a","b","c", "d", "e"}; String[] cArray = new String[]{"a","b",

Java实现的5大排序算法

Java实现的5大排序算法 1.Java排序算法之选择排序 选择排序的基本思想是遍历数组的过程中,以 i 代表当前需要排序的序号,则需要在剩余的 [i-n-1] 中找出其中的最小值,然后将找到的最小值与 i 指向的值进行交换.因为每一趟确定元素的过程中都会有一个选择最大值的子流程,所以人们形象地称之为选择排序. 举个实例来看看: 1.初始: [38, 17, 16, 16, 7, 31, 39, 32, 2, 11] 2.3.i = 0: [2 , 17, 16, 16, 7, 31, 39,

Java基础语法&lt;五&gt; 大数值BigInteger BigDecimal

如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有平有用的类:BigInteger和BigDecimal.这两个类可以处理包含任意长度数字序列的数值. BigInteger类实现了任意精度的整数运算 BigDecimal实现了任意精度的浮点数运算 使用静态的valueOf方法可以将普通的数值转换为大数值: BigInteger a = BigInteger.valueOf(100); 遗憾的是,不能使用人们熟悉的算术运算符(+ *)处理大数值. 而需要使用大数