作者mgtsai ()
看板Soft_Job
标题Re: [请益] 目前发展学习JAVA或C#
时间Sat Aug 23 03:21:34 2008
顺着原 po 的问题
如果现阶段在烦恼要选择哪一个语言好
我会回答,哪一个都好,真正的重点在於
自己倒底有没有办法利用这个语言,好好完成一件工作
如果自称很熟悉语言A,但在处理真实工作时,却又丢三落四
一下子这边漏掉一个条件判断,一下子弄错那边一个回圈处理
在这种状况下,即使选择其它语言BCDEXYZ写程式,情况一样类似
这是写程式的内在逻辑概念够不够好的问题,和选用哪种语言,没有任何关系
如果现在还在烦恼选择语言
倒不如,先随便挑一个语言,然後用它来处理手头上的所有问题
当一而再,再而三,处理过的问题够多,累积够多处理抽象问题的经验
有这样的基础後,再回头来谈用哪个语言好哪个语言不好才比较恰当
* * * * * * * * * *
P.S. 我想,在这个问题的讨论时
大家经常把语言 (Language) 与平台 (Framework) 的概念混用
在决定一个工具好用或不好用时,某种程度而言
平台与函式库集所扮演的角色,会比语言本身还重
大家觉得一个"语言"好用,其实,大部分是指,这套工具所提供的"函式库"好用
但大部分的 programmer 分不太清楚语言与函式库的差别
所以,我在文中,还是依大家的习惯,写成这是不一样的 "语言"
* * * * * * * * * *
举个例子,我曾遇过一位号称写 .NET 有好几年经验的人
但他写的程式码,总是问题很多
後来试图深入了解他的程式码,但我自己那时只熟 Java
经过约十五分钟的访谈与 code overview
当看到某一段 code 时,我那时心中所想的是
如果这个部分使用 Java 开发,那可以使用 HashMap 解决这个问题
但他讲了一堆听起来好像很复杂的方法,但总是缺东缺西丢三落四
由於那时我不熟 .NET,那时我先问他一句,.NET 有没有像 map 的物件可以使用?
他当然听不懂我讲什麽
随後,我抢了他的键盘萤幕,在 MSDN 找了约十分钟左右
找到了一个东西,叫做 Dictionary,就告诉他
你这个部分,使用 Dictionary 这个物件可以很方便地解决
一开始他还无法体会出 Dictionary 如何使用
我就想办法找资料,凑出几行 sample code
教他 Dictionary 该怎麽应用在原本的问题上
为何会发生,由不熟 .NET 的人,教懂 .NET 的人,如何写 .NET code?
从这个例子中,可以看出一些端倪
常写 Java code 的人,我想,collection 物件是家常便饭
如果真的有认真在写 code,对於 collection 物件的抽象概念,一定了然於胸
当换到不同的平台,遇到类似的问题时
脑中第一个所想的是,新平台上有没有类似的物件可以使用
自然而然,在搜寻时,就会很有目标性,很快找到自己要的东西
所以即使我那时并不熟 .NET,但我却可以很快找到 Dictionary 正是我要的物件
并进而教别人该怎麽用
这是我使用 Java 的所学到的抽象概念,转移上 .NET 的结果
这种概念,通常是 language independent
但却可以透过在某个语言上深化学习的过程中
同步加强 language independent 的抽象化能力
当累积到一个程度之後,就开始出现外溢效应,很轻易地扩展至其它语言与平台
就像 Java HashMap -> .NET Dictionary 这个简单的例子
如果写程式时,没有使用 collection 的习惯
那这个跨语言抽象概念扩展就不会发生
讲白一点,就是因为够熟悉 Java,顺带地连自己不熟的 .NET 也莫名奇妙地增强
当然,反方向也会成立,当够熟悉 .NET 时,连带地其它语言的能力也会一同增强
当然,并不是每一件事都可以这样对应
比如,.NET 的 DataSet 很好用
但在 Java 中却没有对应的物件 (不考虑 3rd party packages)
* * * * * * * * * *
为何还会有人觉得这种跨语言的外溢效应很不可思议?
恕我直接说,有很多 programmer 其实是属於拼凑型的 programmer
当碰到问题时,就东剪一段程式码西凑一块程式码,试图处理问题
当然在很多情况下,这种方法很好用,但,这是只知其然而不知其所以然的方法
当自己没有花力气好好研究自己经手过的每一行程式码时
再多年的经验,恕我直说,真的用处不大
所以,当碰到其它的平台时,会觉得那是火星人的东西,也是理所当然
恕我直说,这是因为从未真正下工夫研究过号称自己会自己懂的东西
当然,以初入门而言,谈跨不跨平台还尚早
好好利用自己会的语言做好每一件事累积足够的经验才是要务
要评断平台与平台间的比较,等到自己做得好现有的工作後再说
* * * * * * * * *
当然,每一种语言与平台,都有属於自己的特色
这是有机会接触不同平台时,再花时间力气了解即可
就像 Ruby 的 continuation,这个概念在其它的主流语言中,几乎见不到
即使接触新语言时,多多少少都要花点时间力气都摸索学习
但,这并不是个无法跨跃的鸿沟
因为,两个不同语言抽象概念相似的地方,远比相异的地方多很多
好好学习其中的抽象精神,才叫做真正的写程式
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 116.59.40.27
※ 编辑: mgtsai 来自: 116.59.40.27 (08/23 03:26)
1F:推 dumbjames:推最後一句..这就是为什麽我助教跟上级都可以用嘴写程式 08/23 10:46