我的大学之技术篇

 

我的大学之技术篇
  这是我的大学总结的第二篇,第一篇是关于考研,这篇是关于技术的。这里说的技术,指的是计算机技术,更细一点就是指编程技术。作为安徽师范大学国土资源与旅游学院学生会电子部技术部(呵呵,以前校学生会和绝大数学院也是没有这样的部门的,后来应该是受我们国旅院的启发相继成立了类似的部门吧)的创始人(其实这样说不准确,因为电子技术部的成立离不开很多人的努力,包括当时学生会的主席李卓,高坤龙,老乡徐腾腾和梁燕老师)和第一任部长,我很乐意和大家尤其是电子技术部的学弟学妹,分享我四年学习编程的心得和经验以及我对这个领域的思考和前景的看法,可能在编程高手面前,我这是班门弄斧了,那就权且卖弄一回,有不当之处,敬请批评指正。 

  

  关于史前

  先说下电子技术部成立之前我的情况。我家也在农村,上大学之前,根本很难有机会接触电脑,连手机基本上都是个想象中的东西。刚上大学的时候,连电脑开关机都成问题,对一些基本的、很多人认为是常识的流行元素也不知道,不知道周杰伦,不知道S.H.E(当时只知道在英语中是“她”的意思),不知道任何汽车牌子,不知道霓虹灯是什么(我当时一直以为是“迷红灯”),不知道阿迪达斯和耐克......所以那时候说编程对我来说就是天方夜谭。记得大一军训结束后第一次在优秀班集体评比大赛上看高年级的同学放power point(幻灯片),看到那个画面能自由地切换,觉得好神奇,并兴奋了一晚上。记得第一次,在广播台一个04级学长那看到cool editor这款声音编辑软件,自己在网吧找了一个月,才找到了,虽然只是个试用版而且只能最多保存时长为一分钟的声音,但已经很兴奋了。总结起来,大学的时候那会,我简直就是个计算机白痴。但话又说回来,如果你上了四年大学之后,不要求你成为编程高手,连个浏览器的概念都不知道,连个扣扣截图的快捷键都不知道,男孩子连个系统都不会装(尤其是有电脑的同学),那么你真的是大学白念了。我大二的时候曾遇到一位以前教过私塾的老先生,他问我“汨”是什么字?我当时说念“yue”。他说我这大学简直就是白念了,最后送我一句话叫“无穷岁月增中减,有味诗书苦后甜”。那次经历对我触动很大。

  回想四年下来,变化真大啊,尤其是计算机这块。先晒晒我的编程技术吧。在IT界,无论你掌握的某项编程技术多么好,你也不要说自己精通xx,这点请学弟学妹们记住。四年时间,先后学了网页设计与布局技术,即html(超文本标记语言)、css(层叠样式表)、javascript;平面设计技术:photoshop、illustrator(可简单认为,ps是处理位图的,illustrator是处理矢量图的)、fireworks等;多媒体技术,以音频视频制作、处理为主:cool editor、gold wave、会声会影、premier 等;RIA(即Rich Internet Application,富英特网应用程序)技术:flash、actionscript 2.0/3.0、flex、air;服务端尤其是网页服务器端技术:asp、php等;正统编程语言C/C++、Java、C#;还有其他的诸如ajax、设计模式、软件架构知识等等(实在不好归类,因为技术之间都是相通的),除了C语言是大学老师教的,其他都是自学的。虽然不能说,每种技术都能学的得心应手,但至少能游刃有余吧。我也不止一次和电子部的同学说,这些技术中任何一种学好了,都能独当一面(可惜又多少人明白这个道理呢?)。说的功利点,掌握了其中任何一门技术毕业后去找个三两千一个月的工作还是很轻松的。只有你到毕业后整天为了找工作而疲于奔命的时候,你才明白,原来上了四年大学你什么都不会,大学真的是荒废了(不要笑,这是事实,如果大学里努力学习的同学和整天就知道睡觉、看电影、打游戏、上网、谈恋爱的(这是现在大学生的通病)的同学最后结局一样,那老天就太不公平了)。你也许纳闷,我哪来那么多时间学习这些东西?其实对于走出校园、走进社会的同学并走上工作岗位的同学来说,大学真像度假一样,有大把可以自由支配的时间(这是我的感受,我在上海做了40天的网页游戏开发回到学校就是这种感觉,)。如果你把很重要的但不紧急的事情往后推,那么你以后永远估计都“没”时间去做了,直到有一天你发现它成了你一个致命的麻烦,你才后悔莫及。举个例子,很多同学在扣扣空间转载了很多好文章,说收藏了等以后有时间慢慢看,可事实上,后来你真的看了吗?应该是被遗忘在记忆的长河里了吧。所以看书学习不应该分时间和场合的,尤其是对于我们安师大这样就注意形式,一天到晚搞所谓的“第二课堂活动”(基本上是逢场作戏、千篇一律的活动),不注重第一课堂学习,折腾得低年级的同学人仰马翻的学校,所以在学生会里打拼了一段时间后,我开始学会“整时间玩或者搞活动,零碎时间学习”。王娟,再次提醒你一下,这是我和你说的“优雅”的生活的一个方面。你若再不采取行动,做自己的事情,大学也快结束了,现在是没有什么整的时间给你准备的。另外,基本上我每个寒暑假都要看点书,学习一些编程技术,平常上学期间其实是没有大把时间给你学习自己喜欢的东西的。我的php和div+CSS网页布局等东西就是在寒暑假学习的,假期看书有时虽痛苦但也惬意。说到寒暑假,我不得不提一个话题,就是低年级同学去打暑假工的,我是不大赞成这样做的。对于一般同学来说,家里并不缺你那一两个月打工赚的三两千块钱(当然带带家教、锻炼下自己就另当别论了),你所做的无非是跟风,看到别人打工自己也去打工,要不就是虚荣心使然,其实你想啊,平常上学学的就一塌糊涂,利用这些寒暑假,看看自己喜欢的书,学学自己喜欢的东西多好。这可是学习的黄金时间,拿我们学院地理信息系统专业的同学来说,很多同学整天云里雾里,学地理信息系统专业除非你一点不感兴趣,不打算以后在此方面发展,否则你就得抓紧时间学好编程基础,你以为就靠平常老师教的那些编程知识能管用,他们无非是照本宣科罢了。如果你到了大二甚至大三还都不会编码,那么你就是个废物!至于打工,等你毕业之后,有漫长的几十年时间等你打工呢。我们中国有句古话叫“厚积薄发”,你大学里学好了,毕业之后能很快成为你那个行业的精英,收入自然比别人高,而且是高的多,岂不更好?这叫长远投资,说白了叫“放长线,钓大鱼”。教育投资的成本与回报是最大的。尤其是对于广大来自农村的孩子,好不容易上个大学,你承载的可能是一个家庭乃至一个宗族的希望,父母省吃俭用供你上学,你所要做的就是好好学习积极进取,将来出人头地。我相信这是你家庭最希望看到的,而不是挖空心思打工赚钱,四年后混个大学文凭。这样,你不说对得起家里人,最起码对不起那些劳碌而又期待的眼神。况且随着大学教育由精英化教育转变大众化教育,大学生越来越多,这个文凭价值在不断下降。毕业后,你去找工作,谁稀罕你那个二流三流的大学文凭?毋须多言,你懂的。

  编程技术那么多?学哪种好?

  这是刚学编程的同学常问的一个问题。其实所有的编程都是相通的。我后来能自学其他的编程语言,很大程度上归功于我的C语言基础不错。这点很感谢安师大给我们地理专业开设这门课程。C语言可谓是第一个比较成熟的、能使人们远离汇编等二进制语言、用自然语言来表达自己思想和设计软件和计算机应用的语言了。后来很多语言,都是在C语言的基本上发展起来的。他们摒弃了C语言中不好的、繁琐的或者难以理解的部分,并在其基础上添加了一些新的优良特性。比如说C++,它是本质就是C语言的一个超集,增加了面向对象的特性(C语言是不支持面向对象特性的,这样大型的工程设计和维护起来很麻烦),所以C和C++是不分家的。Java嘛,就是一种纯面向对象的、且设计的比较优雅的语言,就这点来说, C++就是个大杂烩了。还有C#,也无非是微软眼红Java取得的成就,高薪挖走了Sun公司的Java开发工程师,再结合微软的windows系统应用而开发的微软版的Java罢了。还好,C#最后在服务端语言(asp.net)中找到了自己的归宿。你看Java之于jsp和C#之于asp.net,是不是如出一辙?再比如,我比较熟悉的actionscript 3.0,它语言风格就比较像Java,只不过它的API是运行在flash player或者AIR中罢了。当然actionscript 3.0的很多语言元素也借鉴了很多其他语言,比如当中的as关键字,就借鉴了VB。对比C/C++、Java、as3等,你看你在C语言中学到的,诸如定义变量的方法、for/while等循环、if条件语句等,在其他语言中也是大同小异吧。只不过在不同语言中具体写法可能不太一样,但都差不多的,比如C中数值类型有int、float类型,C++、java中同样有啊,定义一个变量a,这样写:int a;而在as3中这样写var a:int;只不过,数据类型一个写在前面,一个写在后面罢了,因为as3是从as1.0/as2.0演变来的,它有脚本语言的特点,所以习惯性用var关键字申明变量。同理,同样是脚本语言javascript中,申明一个变量也用关键字var。但你会发现as3中申明一个变量必须(推荐做法)用冒号申明变量类型,而javascript中不需要,这是因为javascript是一种弱类型要求语言。那么同样是脚本语言,同样遵循ecma标准,为什么as3要求申明变量类型呢?这是as3是改进版的actionscript,如果你写过as2,那么你看as2中是不是也不用申明变量类型,对吧?所以我敢断定,下一代的javascript(也就是javascript 2.0,html5的大潮真是势不可挡啊)语言也一定会要求申明变量类型的,这是语言发展的规律,因为强数据类型是很有必要的(至于原因嘛,有兴趣的同学可以私下和我交流)。再比如,定义常量,在C语言中用define关键字(被称作宏定义),在java中和as中用const关键字罢了(被称为类常量,当然存储区和实现机制可能不一样),其实原理和语言开发者设计他们的初衷也是一样的。所以,无论学那种编程语言,其原理都是一样的,只不过实现细节可能不一样。

  再者,C语言的模式给其他语言提供了最初的模型,所以理解好了C语言可以很轻松地理解其他语言现象。举个例子,在C语言中有一个概念叫指针(很多同学看到这个概念很头疼吧?),C++中同样有(正如上文所说的,C++只不过C语言的一个超集,只是增加了面向对象的特性,所以下文不区分C和C++,这就是你在很多书上看到的把C和C++放在一起的写法:C/C++),指针直接与内存单元打交道,速度快效率高,但特别容易出错,而且是莫名其妙的错误(呵呵,有利必有弊)。所以在Java中取消了指针这个概念,但Java中真没有指针吗?我们知道,在Java乃至像as这种脚本语言中,基元数据类型赋值时一般传递的是数值本身(复制数据到新内存单元),但对于复杂数据类型(比如数组)赋值时传递的是引用,这里的引用无非就是地址空间,本质还是指针嘛。而在C#中,默认情况下无论是对于基元数据类型还是复杂数据类型传递的都是传值而不是传引用,如果你要传引用那就在参数前面加上refererence关键字,其传引用底层实现机制是传递地址空间,还是指针。当然,C/C++中的指针和Java和C#中的“指针”还是有区别的。再举个例子,比如说C/C++中,有一个数组a,a中有五个元素也就是说从a[0]至a[4],你引用a[5]编译器也不会报错的,因为编译器认为你引用a[4]后面相邻的一个内存里的数据嘛(当然这样可能会带来麻烦,如果这个内存单元是系统程序的或者其他程序的,可能导致程序出错或者系统死机),但在C/C++中的确可以引用的,而在Java和C#中你这样引用,编译器会直接报错的,告诉你引用的数组引用超出数组范围,这样就能避免类似在C/C++中由于引用匿名内存而可能出现系统崩溃的问题。你肯定会觉得,哈,Java和C#真好,竟能帮我干这样的事情,太体贴了!你是舒服了,但你想过没有,Java和C#的这种机制难道就没用什么不好的地方吗?的确,这种对数组长度检查的机制是以消耗更多内存为代价的。每次编译程序时,Java和C#编译器都要检查数组是否越界(也就是引用的数据是否超出了数组长度),这个检查当然也就需要计算机CPU去执行,让编译器去消耗更多的内存,如果一个程序里数组比较多且复杂,那么这种内存消耗就比较可观。反过来,C/C++编译器就没这样的内存消耗。你听了上面的分析可能觉得很神奇,你肯定会问,你是怎么想到的?这不是我说的,我是我在《Java 编程思想》书上看到的,作者Bruce Ekcel说的,所以要多看书多学习。同样道理,在C/C++中,程序员必须手动分配内存同时必须手动调用free()等函数手动清理内存,而在Java和as3中(C#中不知道有没有,我估计有)有自动垃圾回收装置,能自动回收内存,避免一部分内存泄露,你肯定又会说,哈,还是Java好嘛,你看内存管理本身就困难,有了自动回收垃圾的装置(garbage collector,以下简称gc)多好。但你想想,gc的运行难道就不需要消耗额外的内存吗?虽然C/C++没有gc,但它也不需要支付这部分的额外的内存消耗。这点也是为什么Java没有C/C++运行速度快的原因之一。所以,每一种语言有各自的利与弊,不能一棒子打死,说这种好,那种不好。你要学一种编程语言,就要好好地去学精学透,达到触类旁通。不要一会儿学这个一会学那个,然后告诉别人你会很多东西(对于那些想学好编程但又不能坚持的同学,给他一根棒棒糖,然后什么话都不要说,看来周涛同学应该来我这里领一大包棒棒糖。周涛,老大这样说你,你不生气吧?)。有些技术或者编程语言来的快去的也快,来的时候真是“忽如一夜春风来,千树万树梨花开”,大家都跟着学,一是洛阳纸贵;去的时候,如“夜来风雨声,花落知多少”。如asp,asp其实已经不流行了,就微软方面已经被用C#来作为编写语言的asp.net取代了,asp刚出来那会,学asp的人真多啊,各大校园里学asp的学生数量真是壮观,用宋丹丹的一句话来说,真是“锣鼓喧天,鞭炮齐鸣,人山人海”。可是如今呢?末路繁华何以堪啊。你搜索下,能在网上尤其是国外网站找到很多篇主题为“asp将死”的文章。我不是说asp不好,只是说大家学编程语言不要跟风,学一个东西,要学到它原理性的东西,万变不离其宗嘛。再比如说,假如你懂asp里服务器端接受表单数据是用Request对象,那么不管是后来的asp.net还是开源的php乃至商业级的jsp甚至Adobe力推的coldFusion(文件扩展名.cfm),接受表单的都是定义一个类似Request的对象,比如说在php中就是$_REQUEST对象。只有你掌握了这些基本的原理,你管他asp死不死,你学习其他服务端编程语言就很快能上手的。这话是我从一个叫“诚续缘”(其实就是“程序员”啦,他的QQ签名这样写的:本人男,爱好女。哎,看来搞编程的都难讨老婆啊,有兴趣的美眉可以加他啊,QQ:12175046)的网友说的话中体会到的。原来是这样的,那个时候我在上海做网页游戏开发,有天我问了他这样一个问题:html5的大潮势不可挡,我担心将来as3会死,网页游戏虽然现在很火,但最终它的开发语言as3会可能会被html5替代,那个时候,我靠什么生存啊?他是这样回答我的,即使将来as3会死,但编程之道和游戏运营的理念是不会变的。他以前是写C++的,现在转行写as3,并没有什么困难吧,因为编程语言都是相通的,抓住原理性的东西就可以了。讲到这里了,你应该明白应该学哪种编程语言了。无论哪种,理都是一样的。但就平心而论,C/C++比较难上手,短期内不容易有什么成效,需要经年累月的积累方为高手;而Java、C#乃至as3等其他语言,由于比较符合人的自然思维,比较容易上手(这就是你看到很多人经过三两个月的培训就直接上手java企业开发了,对于难找工作的同学,不妨去报一个这样的培训班,这样的培训机构很多,学费也不是很高)。但就运行效率,还是C/C++效率高和速度快,一方面操作系统就是用C/C++写的,C/C++直接调用操作系统的API,操作系统原生态地支持C/C++调用;另一方面,诸如Java和C#这样的语言,编译器和运行环境都是用C/C++来写的,执行Java或者C#等程序的时,是程序先调用运行时的API,而这些API再去调用系统的API,所以效率当然就要稍微差一点了。这点,Adobe AIR也是一样,flash API运行在Adobe AIR上,而AIR去调用底层的操作系统API。两者与C/C++相比,就相当于多了一层外壳,这层外壳导致它们的效率相对较低下。但Adobe AIR与之不同的就是,有个明显的创新之处:Adobe AIR模糊了传统桌面软件与网络应用的界限。此话怎么说呢?在IT界,开发传统桌面软件,比如你看到的QQ,要比开发网络应用比如QQ邮箱周期时间长的多,而且消耗的人力物力多的多(开发桌面软件难度大,上手难)。而Adobe AIR将传统的开发网络应用的技术,比如说js、ajax、CSS、flash 等,引入到开发桌面软件上来,大大缩短了桌面软件的开发周期和成本,这是它的创新之处。但Adobe AIR目前只是个鸡勒,只能运行些诸如音乐播放器、图片浏览器之类的简单应用,如果运行大型的尤其是一些与内存或者大量数据打交道的程序,就会频频死机。期待Adobe 更好地优化AIR,前进路上虽有困难,但结果诱人。当然AIR在移动设备市场,目前发展势头也不错,尤其是Google的开源操作系统Android的应用上。目前你所看到大多数桌面软件,还是以用C/C++开发为主。

  第三,编程思想都是一样的,要做到高屋建瓴

  国内计算机教育,真让人堪忧。很多计算机书籍的作者都是照本宣科,讲解知识其实是知其然而不知其所以然。所以市场上真正的好书并不多。倒不是说,这些作者不想讲所以然,而是他们当年也是被这样照本宣科过来的,而绝大多数又缺乏思考,就继承了这种照本宣科的传统,代代相传,真是悲哀。比如说,变量i++,其实外国人设计这种写法最初的目的就是对i=i + 1的简写嘛,因为这种让变量自增1的情况经常遇到,尤其是在循坏控制里面,但你看国人把他搞的多复杂,尤其是在我们那令人好笑的,号称是能拿国家二级计算机证书的国家二级计算机考试的试题中,那些孔夫子式的出题人,真是头悬梁、锥刺股、兢兢业业、闭门造车、魂牵梦绕,吃掉一千袋方便面、抽掉二千包中华烟、喝掉三千袋茶叶,花了九百九十九小时经过九百九十九次思考终于研发出来一道试题:

while(++b=a++=(i++)+(++j)+(++k)++)

最后让你求a、b、i、j、k的值,真让人无语。考生一看这个题目,啊,i++先变后用,++i先用后变;j++先变后用,++j先用后变,k++先变后用,++k先用后变,a...,b…,

→→ → →→→,最后该考生牺牲了。

  还有一点,国内很多计算机教材,喜欢装腔作势,不懂装懂或者故作高深。比如,我们经常在某个教科书上看到这样的话:这个内容不常使用或者超出知识范围,此处不作讲解。结果花了好多血汗钱买这本书的读者又牺牲掉了(不是说,书籍是人类灵魂进步的阶梯嘛,国内的正版图书实在太贵,学生时代买一本自己喜欢的书就得省吃俭用好多餐,也难怪盗版盛行了,我支持正版,但我买盗版)。其实你看国外的技术书,讲的其实很细的,而且大多数作者,都很诚实,他不清楚的就直接坦白告诉读者他不知道,比如我买的那本《ppk谈javascript》是javascript书籍中的一本经典之作,当提到Ajax中的XMLHttpRequest的对象的中间两个状态时,作者也不明白这两个状态的作用,就直接坦白说他不知道;但我相信当初设计这两个状态的肯定是有用的。这要是在国人出的书中就要装腔作势了,美名曰“这个用不到,不作讲解”。再比如说,在《AS3编程精髓》这本书中,世界级大师Collin就告诉读者尽量不要使用事件Event.OPEN,因为它在不同的浏览器中的表现不一样,且在IE浏览器,无论资源有没有加载都会触发这个事件,其实这种行为是错的,之所以导致这种错误实际是Adobe的flash平台的bug。而在国内的书中(我看过的那本清华大学出版社的朱治国等人编写的《flash编程》那本书里就是这样),一个劲地告诉读者,当要找一个资源开始加载的时刻就去侦听这个事件,真是可笑,作者自己也没搞清楚,还在这里误人子弟。所以看国外的计算机书,不仅能学到how还能学到why,即使你不愿意看英文原著,那也多看看翻译的书。像《C++编程思想》、《Java编程思想》、《Windows程序设计》、《设计模式:可复用面向对象软件的基础》等国外的图书,都是经久不衰,闪烁着智慧光芒的经典书籍,建议大家看看。国内目前有这种前瞻性的书,在flash编程领域,孙颖的《flash编程殿堂之路》可谓算是一本难能可贵的书了,当然作者读的外文技术书籍很多,思想受影响很大。故只有从语言的最初设计的初衷和全局的角度去学习,才能学的好,学的深。思想这个东西靠自己感悟的。比如说我们在编程领域为了程序的可维护性和可扩展性,把数据结构、用户界面和程序逻辑分开,这就形成了MVC设计模式(本质上来说,它是一种脱藕的思想);而在网页设计这一块,其实也存在一样的东西,比如说我们在设计网页时强调三层分离,即结构层、表现层和行为层也要分开,即纯表现网页文档结构的html层、表现网页样式的CSS层和实现网页行为的javascript要分开,而不是出现类似<p color="red" οnclick="func()" /></p>这样三层不分的代码。一个是传统程序开发,一个是网页设计,无论是mvc也好,三层分离也罢,其原理和思想的初衷都是一样的。再比如说,我们说现在主流的RIA开发技术是Flex RIA(另外微软的Silverlight 和Java Fx也站一定的市场),我们可以说Flex是新技术也可以说它不是新技术,就它创新地扩展了flash(swf,发音swif)的应用领域(flex编译后的文件仍然是swf文件)是新的,但就整个互联网发展来说其实它也不是新技术,你看网页的制作是以html、CSS架构的,而flex用MXML(一种扩展的xml)结合“CSS”布局,本质是一样的,两者都类似xml,只不过html由浏览器解释它,而MXML编译后运行在flash player中罢了;flex比html、CSS好些是因为html尤其是CSS有浏览器兼容性问题(不同浏览器对于同一代码表现可能有差异,这种差异有好有坏),而flex不存在浏览器兼容性问题,但需要浏览器嵌入flash player,这无疑是增加了成本,至少是程序运行成本。所以个人觉得flex的MXML也是借鉴了html布局嘛,即使微软的WPF也逃不出这个定式,它使用的也是类似这样的布局语言,好像叫XAML(发音:zaml),甚至连Android手机平台的软件界面布局也和这类似。

第四点,不要一个劲地埋头写代码,抬头看看IT世界的发展趋势,思考下自己的未来

我知道,很多学编程的同学都有自己创业的梦想,毕竟替别人打工即使待遇再高那也是打工。作为一个人,尤其是一个男人,我们需要那种功成名就的成就感。如果是这样,就多关心下IT行业发展的趋势。也许,当然我们必须先这样做,对于刚刚迈入编程大门的同学,应该先完善技术之后,再去思考市场需求、企业经营之道、用人的学问。其实,我们可以一边学着技术一边思考这些问题。比如说,腾讯为什么每推出一个新的应用就会很快占有市场呢。这可不仅仅是腾讯扣扣用户群数量庞大,纵观腾讯的每一个产品,尽管它可能是模仿甚至是抄袭的,但它的用户体验一定是最好的。请记住,这是一个用户体验至上的时代,所谓用户体验,就是用户使用你的产品爽不爽。腾讯能抓住用户的心。尽管这样,腾讯的名声并不好,它把它的魔爪伸到哪一个IT领域,那一个领域的尤其是中小企业的销售额、市场占有额就会锐减甚至破产,多数IT企业提到腾讯就会说这“狗日的腾讯”。所以现在腾讯在努力做中国“最受尊敬”的互联网企业。我看难啊。腾讯之能堂而皇之模仿和抄袭,一方面是因为中国的互联网相关法律不健全,另一面是国民和尤其是政府的纵容(庞大的税收啊)。当年微软抄袭一家小公司的产品,差点被美国联邦调查局罚得破产,但在中国是少有这样的事情的。尽管腾讯可以在中国做到只手遮天、翻手为云覆手为雨,然而她却不能引领互联网技术潮流。相比较而言,Google公司做的就非常令人称道,Google一直是新技术革命的开拓者和弄潮儿。且不说她的搜索引擎的优势,它在Google地图和Gmail中使用Ajax开创Ajax时代,同时带来异步思想的浪潮;现在Google又将Android操作系统开源,又带来了移动设备的革命。我相信有一天,安卓手机的市场占有率肯定能达到绝对优势,因为只有开源才有强大的生命力,毕竟开源社区的智慧是无穷无尽的。这是我对技术前景和IT企业的思考的思考。

就市场方面,在我上大学短短这四年间有很多互联网企业崛起了,很多人也因此富可敌国。究其原因是他们能抓住市场动态,及时推出用户需求的产品。李彦宏的百度公司靠搜索服务发家了,现在人们上网基本上离不开百度了。好123网站(现在已经被百度收购)也成功了,她是第一个将各类网站整理分类并为用户导航的企业。哎,hao123之后,各类阿猫阿狗竞相模仿好123,出现名目繁多的导航网站,良莠不齐,什么好看123、2345、265导航、淘宝123,真是数不胜数,而且这些网站越来越流氓化,往往一不小心你的浏览器主页就被篡改了,而且手段越来越高,让人防不胜防,令人头疼。千橡公司的人人网靠做学生社交服务也成功,类似的还有开心网、猫扑网、豆瓣网等。靠网上购物发家的淘宝网、当当网等等,国外也有很多这样的例子,提供相册服务的facebook、视频点播的iTunes等等(国内也有,比如优酷、土豆、酷6、奇艺网等)。究其成功原因还是他们能分析市场需求,及时推出用户需要的产品,所以最终获得了成功。这里还有反面的例子,我们知道sun公司(开发辉煌的java编程语言的那家公司)已经被Oracle公司收购了。当我第一次听说这个消息,简直就不相信,当年叱咤风云的sun公司怎么会沦落到这步田地呢(我们这里暂且不考虑资本主义世界的金钱交易)。其他的且不说,就拿Java Servlet来说,这是一种可以在浏览器执行的小程序,可以实现类似今天的flash功能。当年sun公司的高层领导并没有意识到这种小程序的潜在巨大市场前景,沉溺于Java带来的成功,固步自封,不思进取,臃肿的JVM(Java虚拟机)和简陋的Java类库支持,最终葬送Servlet的大好河山。如果当时有一个sun高层领导意识到这一点,那么今天flash取得的市场,就是Java的,你玩的农场牧场、三国杀等游戏,就是用Java编写的了,而不是flash actionscript了。何其悲哀!还有一个例子,我们现在的操作系统都使用图像用户界面(GUI),其实这种技术和思想早在20世纪60年代美国国家实验室Xerox PARC实验室就产生了。但最终获得这笔财富的,不是这些开发人员。当时这个实验室的开发人员没有一个意识到这种图形用户界面的巨大市场契机。结果,一个叫Steven Jobs在实验室工厂车间工作的工人意识到了,他购买了这个操作系统的版权,建立自己的公司,并销售这样的机器。这就是今天的威名赫赫的苹果公司,而Steven Jobs也就是苹果公司的创始人。关于这段计算机史话一直为人们津津乐道。Macintosh (苹果公司)开发的第一代带有图形界面的操作系统的机器叫Lisa由于过于昂贵,其实是失败的,但这种失败,引发了微软的注意力,微软受其启发,放弃了原先继续开发的MS-dos操作系统,转而开发自己的图形用户界面,即windows(窗口)系统。最终的财富,却流入了乔布斯和比尔·盖茨的腰包里。这样的例子还有很多,比如Adobe收购display软件,你肯定没听过这款软件,但你一定听说过photoshop,display是photoshop的前身。这个软件已经成为业界和印刷行业的事实标准了。所以,有一天,我们开始思考编程或者IT领域的市场,说明你已经不仅仅是一个coder那么简单了。

最后一点,就是人了。一个大型软件或者项目需要很多人的合作,从现在开始你就可以结交写志同道合的朋友,毕竟独学则无友,孤陋则寡闻。朋友将成为你将来创业重要的一环。

最后,我总结下我自己四年下来的技术沉淀与不足。学的比较好的是flash客户端编程,其次是网页布局和设计这块,尤其是服务端编程,另外编程基本功也还好,代码风格和规范都还行。不足之处有很多,首先我不是一个计算机专业的,对计算机专业的一些基础课程的知识知之甚少,比如算法、数据结构、操作系统原理、编译原理、计算机网络等,无论哪种编程语言都无所谓,这些基础知识才是真正地决定你能走多远上升到多高的关键因素,大牛之所以是大牛,是因为大牛在是小牛的时候,都牢牢地掌握了这些重要的基本知识;编程语言可能会过时,正如现在很少有人用BASIC语言编程一样,但这些计算机基础学科就像老酒一样,益发醇香,经久适用。第二,现在写代码也不局限于完成就万事大吉了,而是怎样去写的优雅、鲁棒;设计一个程序,思考着怎样更易维护和扩展,这就是设计模式和软件工程的知识了,这些知识是非一朝一夕所能掌握的,需要不断实践不断体会感悟,这才是王道,熟练掌握架构之道,才能做到无招胜有招。例如,光一个音乐播放器,我已经写了很多版本了,我不断追求opp、优雅。以上知识也将是我去武汉三年所要学的内容,哎,三年之后会是什么样呢?

我一直醉心于我的个人网站(http://www.hootina.org)的设计,其实不仅是对完美编程技术的追求,而且更是对精美设计的追求。可惜,美术功底实在不好,不过我会不断努力的。感谢陆苗丫头等,我每次设计一个东西你总说不好看,这样激励我不敢懈怠,不断努力。

另外,我的四年时间基本上都花在计算机尤其是编程上面去了,这样非常不好,毕竟我得到了一些东西的同时也失去了很多东西,比如原先很多生活乐趣和兴趣。编程不能成为我的生活全部,我应该花点时间陪陪家人、好友。这点我未来一定要注意,因为生活除了计算机还有很多美好的事物。

好了,就写到这吧。祝我电子技术部的学弟学妹一切安好、快快乐乐,祝我国的互联网事业更加美好,祝曾经给予我帮助和关怀的任何人平平安安、幸幸福福。

――伯龙2011年7月10日3:25于宿舍

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值