`
djsl6071
  • 浏览: 593450 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

关于蔡学镛前辈《Java夜未眠》的一些摘要

阅读更多

题记:最近看了《 java 夜未眠》这本书,感觉很不错,里面将当时(包括现在)的一些现状,以及一些知识点分析的很清楚、很透彻,而且浅显易懂,写作风格幽默风趣,读起来也不费力;虽然有些地方比较偏激,但那是不可否认的事实,确实感同身受啊,如果大家没有看过,推荐大家有时间也看一下;下面是书中一些不错的片段,当然,整本书都是不错的,这些只不过是我更感兴趣的。

 

培养兴趣
把程序设计当成兴趣可以让你学得更快乐,学习效果自然会更好。在我到一个单位面试时,主管看了我的履历之后问我:「你怎么有这么多时间学会这么多东西、做这么多事?」 我的回答是:「把工作、学习、和娱乐结合在一起,时间就会是别人的三倍。」
   
我承认我很幸运,可以把程序设计当作赚钱的工作,学习的题材,以及茶余饭后的休闲活动。不是每个人都像我这般幸运,但是我相信至少大家都可以把它当成兴趣。相信我, 调整你的心境,把它当成是兴趣,而非苦差事,你非发现你的「程序功力」与日俱增。

慎选程序语言
   
慎选程序语言很重要,一开始就学太难的程序语言很容易让你遭遇到挫折而放弃。你可以挑比较容易且有趣的语言下手,建议您可以从下面的语言中择一:
    VB
:简单,好用,书籍多。
    Java
:比 VB 稍难,比 C/C++ 简单,书籍多,用途非常广,相当有前途。可以当作学习 C++ 的跳板。
    Python
:简单,好用,各个平台都支持(包括 Windows Linux MacOS BeOS ... )。国外很红,国内较少人用。原文书不少, 但中文书目前只有一本(欧莱礼出版)。我预期 Python 会是下一个热门的程序语言。
   
这三个语言只是我给各位的建议,你也可以多听听别人的意见。在选定一个程序语言之后,就要执着,不可以很快放弃,又改学另一个程序语言,否则永远都只懂皮毛。有句谚语是 这么说的:「 A jack of all trades is master of none 」。如果你号称会 C++ Java 等十种程序语言,只不过每种程序语言都停留在 Say Hello 的阶段,相信面谈主管很快就会 对你 Say Goodbye
   
当你学精某程序语言,然后想再学另一个程序语言,你会发现有了前一个程序语言札实的根基,学任何新的程序语言都很快。

 

程序与香鸡排片段

在台湾的软件公司内部,有许多非科班出身的程序员,他们的薪资低廉,通常又很努力。软件公司就算聘到了这种便宜又努力的程序员,也不要太高兴,因为这样的程序员,通常都只是把目前的公司当一个学习的过渡阶段,等到学得差不多,拍拍屁股就走人了,才没打算一辈子接受这样的低薪。但可悲的是,大部分的公司都没有良好的程序员生涯规划制度,反正大家互相利用。所以这些程序员很可能在做计画的过程中,学不到东西又磨得身心俱疲。 所以,何苦来哉!不如我们通通去卖香鸡排吧!但是你们只能到通化街夜市和士林夜市卖,不可以到我属意的饶河街夜市和我抢生意(我打听过,饶河街的摊位租金是三者中最便宜的)。我的摊位名称要取做什么呢? ... 嗯!就叫做 “Java 鸡排 好了,以纪念我曾有过的 Java 程序员身份。我打算把鸡排分成三种大小,最大到最小分别叫做 J2EE J2SE 以及 J2ME 。哪天你到饶河街夜市,发现了一个乾乾瘦瘦、看起来营养不良的少年头家用著生硬的台语在吆喝著: 来呦!来呦!好呷的香鸡排, J2EE 一块 50 J2SE 一块 40 J2ME 一块 30......” 请你也来光顾一下吧! ... 看在 Java 的份上。

 

关于职业生涯

生涯规划会随着年纪增长和生活经验的累积,以及人生观的改变而有阶段性的差异,所以生涯规划不宜过于长期。生涯规划应该以渐进的、多样的方式来进行。渐进的,才不会好高鹜远;多样的,才可以分散风险。而且,生涯规划要及早,因为有越充分的时间准备,越有可能实现。即使你想潇洒地背着吉他到异乡旅行弹唱,你也得好好地练吉他吧!

把握时间朝着你所规划的生涯迈进!时间过得很快的,浪费不得。你不会希望有一天你在床上醒来,睁开眼后盯着天花板,你发现你已经五十岁了,昨晚五十大寿 birthday party 的宿醉使得你现在头痛欲裂。你发现这些年来你依旧是浑浑噩噩的度过,生涯规划依旧只是「规划」,没一个实现。你在床上抱头痛哭,就在你五十岁生日当天。

信息应用领域变动快速,许多软件人员欠缺判断能力,不能及早学习妥相关的技术以为因应。特别是在这几年的光景,许多新应用领域的窜起,相当程度地撼动了原有的软件霸主,以往那些唯唯诺诺、以微软技术马首是瞻的人难得压错了宝,这次也算是让他们学到了教训,这何尝不是一种领悟。啊!多么痛的领悟,你(微软)曾是我的全部。

许多软件人员缺乏自我学习的能力。软件人员应该问问自己:这半年来技术能力精进了多少?技术飞快地在进步,如果你没跟着进步,在相对坐标看来就是退步。我以前很变态,只要一天没看技术书籍就会觉得今天真是白活了,然后有一股冲动想要「做傻事」;现在我虽然比较没这么逼迫自己了,但看书还是看得很勤快。

软件人才培养不易,折损率高。一些我认识的优秀软件人才,最近常 forward 一些「过劳死」、「人生的意义」之类的文章给我,显示了他们工作上的厌倦感。他们在电话中告诉我,他们忙得没时间接触新技术,技术已经跟不上别人了。这厢大叹人才难寻,那厢努力折损人才。

 

关于知识的等级

专业知识是一种无形的资产,不容易评估其价值。但是大致上,专业知识可以分成四个层次,价值由低而高分述如下。

Know-What

受过训练,通过认证,而精通某领域的基本知识,这类的知识就称为 know-what ,也称为认知性的知识( cognitive knowledge )。 know-what 是一切知识的根基,但是有了 know-what ,并不表示有能力可以活用这些知识。许多软件人员在通过专业认证之后,就开始学会狮子大开口了,其实他们的知识可能还停留在 know-what 的阶段,而 know-what 阶段的知识对公司来说是没有太多生产力的。此阶段的软件人员应该努力地提升自己,以进入下一个阶段,也就是 know-how

Know-How

know-how 阶段的知识也称为进阶技能( advanced skills ),指的是可以活用书本上学来的知识、理论,以解决实际的问题。 know-what 的知识或许可以透过「填鸭」方式生硬地吞下去,但是 know-how 的培养一定要透过实务经验的累积与体会。如果有一个好老师或 leader 的引导, know-what 可以很快地提升成 know-how ,靠自我的培养则通常会比较辛苦。不过,当我要引导学生由 know-what know-how 时,往往会有许多「不识货」的学生嫌我啰唆。

Know-Why

know-why 阶段的知识指的是对整个系统的掌握度( system understanding ),也就是了解各种知识背后复杂交错的因果关系。有了 know-why 的知识,软件人员除了能顺利地进行软件计划之外,还能进一步解决更大、更复杂的问题,因为一切的知识都是有条理的。具有 know-why 的软件人员对整个计划具有强烈的「第六感」,可以直觉地做出正确的判断,预先知道可能会遇到的问题。计划的 leader 必须具备 know-why ,才能全盘掌握计划。

Care-Why

care-why 指的是自发性的创意( self-motivated creativity )。有了源源不绝的创意,才能保持高度的竞争力。软件产品相当需要创意和洞烛先机的能力,在大家一窝蜂抢做某软件或某服务之前,就已经先完成深度的耕耘,技术自然比别人来得扎实,也能迅速地迎合市场需求,为公司创造最大的利益。

 

关于买书读书

如果你最近是个大忙人,有一堆事情要做,就先别急着买计算机书籍。计算机书籍更新的速度很快,可不比四书五经,可以祖传父、父传子, 代代受用不尽。以前我也常冲动之下买了好书回家,然后忙得没空读它,等到空闲下来时,新版本也已经出现了,懊悔不已!如果不急着用的书, 千万别急着买,不然可能还没来得及看这本书,新版本又出来了,信息界不流行考古的。

 

Java 学习之道

认识 Java 的原理
*
学会 Java 语言
*
对象导向的思维
* API
*
开发工具的用法

下面分别就这几点详细阐述。
学习 Java 的原理
了解 Java 的原理,才有可能真正体会 Java 的一切,学习任何事情,只要能掌握原理,就会比较顺利。我发现许多人使用 Java 已经逾年,却连 Java 最基本的特质都不清楚。

一般来说,信息系毕业的学生,对于信息的新事物学习的速度,会比其它科系来得快,就是因为四年的教育为他们奠定了学习新事物的基础,这也是信息系课程的价值所在。

除非你受过的基础训练够扎实,否则在学习或使用 Java 的过程中,你一定会需要参考到这些信息系学科的知识。我建议各位可以在闲暇之余,把信息系课本的书拿来读一读。这是治本之道,绝非立竿见影的特效药,必须要有耐心。

学习 Java 语言
学习 Java 语言很简单,毕竟 Java 语言也只包含五十多个关键词( keyword )与几十个算符( operator ),再加上 Java 语法( syntax )也很简单,所以一般人可以很快就学会 Java 语言。危险的是,很多人认为已经完全掌控 Java 语言,但其实对于内部的运作机制仍不能掌握,这些盲点有时候会让你无法完全掌控 Java 语言。克服这些盲点的方式是看「 The Java Language Specification, 2nd Ed. 」(没有中文版)来彻底弄懂 Java 程序语言,并看「 Inside the Java Virtual Machine, 2nd Ed. 」(有中文版,但翻译得@#%$)来彻底掌握 Java 虚拟机器的运作方式。

学习对象导向的思维
学会了语言,并不代表就可以设计出好的对象导向系统架构。想要成为对象导向的专家,往往需要:

*
多看相关的书,特别是 Design Pattern Refactoring 的书。
*
多观摩别人的程序(例如 Java API design implementation
*
多写程序

学习 API
学会 Java 语言之后,还需要学会一些 API 才能写出有用的程序。 Java API 非常多,必须规划好一个学习路径,才不会在浩瀚的 API 大海中迷失。必备的 API 包括了: IO New IO Collection Framework Network RMI JAXP... 等。至于其它的 API ,就看你的需求而定,大致上分成:

* GUI
类: JavaBean -> Swing -> JavaHelp -> Java2D -> Image IO -> JAI -> Java 3D ...
* Enterprise
类: JDBC -> JDO -> Servlet -> JSP -> EJB -> JMS -> JTA/JTS...
* J2ME
类(这一类不是我的专长,无法提供学习顺序建议)

学习开发工具的用法
只用 JDK ,是很难写出大型程序的,所以通常程序员会使用 JBuilder/VisualAge/ VisualCafe 等工具,这些软件卖这么贵,一定有它的价值,值得花一些时间好好学习这些开发工具的使用方式,你将会发现开发工具所提供的许多功能,可以让你在开发过程中生产力大增。

 

Static 的意义与实作方式

 

Class(static) field :共用一块记忆体
class(static) method
:共用一块记忆体
instance(
static) field :随着每个 instance 各有一块记忆体
instance (
static) method :共用一块记忆体
    instance method
为什么不是随着每个 instance 占有一块记忆体,反倒是共用一块记忆体?其实,让每个 instance method 如同 instance field 一样,随着每个 instance 占有一块记忆体,这么做当然是可以的,只是 Java 编译器和 JVM 都不这么做,因为太浪费记忆体空间了。一个 field 少则占用一个 byte ,多则占用数百 Byte ,但是 method 少则数个 byte ,多则数百 Kilo Byte Mehtod 耗费的记忆体是 field 的数百倍,甚至数千倍,当然是能共用就尽量共用,比较不会消耗记忆体。既然 JVM 让一个 class 的所有 instance 共用相同的 instance method ,下面两行程式码在 instanceMethod() 内部时,如何区分是 instance1 instance2
instance1.instanceMethod();
instance2.instanceMethod();
因为编译器会帮我们在把 instance1 instance2 个别传入 instanceMethod() 中当作第一个参数。也就是说,任何 instance method 参数的实际个数都会比表面上多一个,这个多出来的参数是由 Java 编译器帮我们加上去的,用来代表对应的 instance 。此参数的变数名称为 this ,也是 Java 的一个关键字( keyword )。
   
当调用某个 instance method 或使用某个 instance field 时,你必须在前面加上该 instance 的名称,如果该 instance method/field 相关的 instance 和当时程式码所在的 instance method instance 指的是同一个 instance 时,该 instance 的名称就是 this ,这种情况下,你也可以选择不在前面加上「 this. 」。
   
然而,在某些状况下,非得在前面加上「 this. 」不可。例如,当 method 中的参数或区域变数和 instance field 名称完全相同时,如果不在前面冠上「 this. 」,那么指的是参数或区域变数;如果在前面冠上「 this. 」,那么指的才是 instance field

分享到:
评论

相关推荐

    Java夜未眠-蔡学镛--高手

    从给定的文件信息来看,我们探讨的主题是“Java夜未眠—蔡学镛”,一个在IT行业,尤其是Java领域有着深厚造诣的人物。蔡学镛,现任梦工厂首席技术总监兼框架师,以其对Java的深刻理解和独到见解,在业界享有盛誉。 ...

    java夜未眠-蔡学镛著

    《Java夜未眠》是台湾知名程序员蔡学镛的一部专为Java工程师撰写的著作,旨在深入探讨Java编程语言的方方面面,帮助读者提升技术水平和理解深度。这本书在Java社区中享有较高的声誉,对于想要深入了解Java的开发者来...

    Java夜未眠PDF

    《Java夜未眠》是由知名IT人士蔡学镛创作的一本独特散文集,它不仅仅是一本书,更是广大程序员的情感共鸣和心灵慰藉。这本书以PDF格式呈现,方便电子阅读和分享,让程序员们在繁忙的工作之余,能有一份属于自己的...

    [Java夜未眠.电子书].java夜未眠

    不眠之夜,一本蔡学镛的《Java夜未眠》恰能适应你的心情,就像一杯清香醇厚的咖啡,让孤独的身影不再冷清寂寞。作者以诙谐、戏谑的笔触,写出时下程序员共同的心声。无论您是程序员与否,本书都可以带给现代社会的...

    Java夜未眠

    不眠之夜,一本蔡学镛的《Java夜未眠》恰能适应你的心情,就像一杯清香醇厚的咖啡,让孤独的身影不再冷清寂寞。作者以诙谐、戏谑的笔触,写出时下程序员共同的心声。无论您是程序员与否,本书都可以带给现代社会的...

    java蔡学镛的文章

    蔡学镛,又被称为Chia Heng Yung,是一位知名的Java技术专家,他撰写了多篇关于Java技术的文章,这些文章可能涵盖了Java的基础知识、进阶特性以及最佳实践。他的文章对于Java开发者来说是宝贵的资源,可以帮助他们...

    Java夜未眠.程序员的心声

    不眠之夜,一本蔡学镛的《Java夜未眠》恰能适应你的心情,就像一杯清香醇厚的咖啡,让孤独的身影不再冷清寂寞。作者以诙谐、戏谑的笔触,写出时下程序员共同的心声。无论您是程序员与否,本书都可以带给现代社会的...

    Java夜未眠.程序员的心声(PDF版)

    Java夜未眠.程序员的心声(PDF版) 不是技术性的文章,但是累了的时候可以看一下。

    java夜未眠txt

    【标题】"java夜未眠txt" 指的是一本关于Java编程技术的电子书,可能是由原版的CHM格式转换成更便于阅读和分享的TXT格式。"夜未眠"通常用来形象地表示作者或读者对于编程的热爱,暗示在深夜仍然沉浸在学习或研究Java...

    Java夜未眠.程序员的心声.pdf

    《Java夜未眠.程序员的心声》是一本由蔡学镛撰写的书籍,它以轻松幽默的方式揭示了程序员这一特殊职业的生活与思考。这本书的独特之处在于,它不仅是一本技术书籍,更是一本深入探讨程序员内心世界的文学作品,旨在...

    java夜未眠

    java夜未眠-程序员的心声——蔡学镛,换种心态学习java

    蔡学镛--香鸡排三部曲

    从蔡学镛的《香鸡排三部曲》中,我们可以提炼出一系列关于IT行业,尤其是程序员职业状态的深刻洞察,以及对台湾社会经济环境的反思。以下是对该系列文章中涉及的关键知识点的深入分析: ### 程序员的社会地位与薪酬...

    蔡学镛软件架构入门

    ### 蔡学镛软件架构入门 #### 一、软件架构定义及理解 软件架构是软件系统的基础骨架,它定义了软件系统的主要组件及其相互之间的关系。架构是软件设计的一个重要方面,它不仅决定了系统的组织结构,还影响着系统...

    超亢奋的ppt设计秘诀 蔡学镛

    蔡学镛在平安科技上课时的课件

    瓜哇夜未眠Java程序员的心声

    不眠之夜,一本蔡学镛的《Java夜未眠》恰能适应你的心情,就像一杯清香醇厚的咖啡,让孤独的身影不再冷清寂寞。作者以诙谐、戏谑的笔触,写出时下程序员共同的心声。无论您是程序员与否,本书都可以带给现代社会的...

    PPT制作技巧,不瞌睡的简报设计模式,支付宝蔡学镛

    关于视觉元素,蔡学镛指出,高质量的图像和图表可以大大提高PPT的吸引力。他建议选择清晰、相关的图片,并使用专业的图表工具来创建易于理解的数据展示。同时,注意版权问题,确保所使用的素材是合法且允许商业使用...

Global site tag (gtag.js) - Google Analytics