一个计算机技术研究生阶段常被提起的问题

正在学习一门技术,却发现这门技术已经被实现了,使用者只需要简单操作,不需要高深的知识,是继续学习,还是另投他路?

问题补充

我目前正在初学机器学习的东西,在看standford的公开课,为此我还重新在学习概率论和高数,每天都要回家学上1,2个小时。然而,我发现hadoop有个子项目叫mahout,里面有很多机器学习的算法,比如著名的Naive Bayes,使用者只需要传入一个文件,他可以自动的训练,计算,然后给出结果,非常方便。我感到很郁闷,如果一个技术已经没有了实用的价值,仅仅是一个初学者就可以使用,那么我学习的意义在哪里?

大家的回答

程劭非(程序员)

  1. 世界上并不是每项技术只需要有一个人懂的。
  2. 每项技术,每个人去做,结果都不一定相同,做的过程中也可能产生不同的想法,不动手的人永远不会知道。
  3. 库是给那些有志于做产品的人用的,他们在底层技术上是初学者,但是却可能是产品上的大师,如果你的定位跟他们不同,不要跟他们做一样的事情:拿别人的库来用。
  4. 不要重新发明轮子。也就是说,自己想造轮子前,先学习别人怎么造的。

大雄(喜欢算法)

就比如做机器学习的人,他只是想通过一些样本去得到一个预测值,他本来最应该关心的是数据的特征和评价的规则,但你要他天天憋着去实现一个个机器学习算法,这本身就是一种浪费时间。

正如:你不会为了实现一个普通的文件格式处理而从汇编和操作系统API研究起,更不会从硬件设计研究起,更更不会从材料科学和电力系统研究起。你只需要一个脚本语言,三五行代码就解决了自己的问题。技术都是这样,有人把它做得更简单是好事,让人可以更专注地去做他本来应该关心的问题。

问题最后一句话是要说“已经没有了实现的价值”吗?你所能“学”到的技术,都是已经被实现的技术,这没什么奇怪的,都已经被总结出来了,甚至写成书了,它很可能已经被写了千八百遍了,但你再写一遍并非没有意义,你可以更了解这技术的原理,方便你的使用,也可以深入去完善这门技术。

就像朴素贝叶斯,虽然它已经被提出了好几十年,但到最近几年仍然有人在不断改进它。而在工业界,往往数据挖掘者会分工成三个职位:1、海量数据挖掘性能优化。2、机器学习模型改进。3、基于具体领域的特征研究。这都是很有技术含量的工作,但“学习一个机器学习算法”和“照着书实现一个机器学习算法”只不过是初学者做的事情,从入门到精通,需要一个专注的过程,而不是靠抓住一个别人没有做过的事情去投机,这样早晚也会被新人顶替的,呵呵。

Eagle(研二在读,对机器学习、信息检索、数据…)

无论是什么技术 都是为了解决某类问题而生的,学习的目的是为了更好的理解技术 从而更好的解决问题,而不是说你能实现它 而别人不能。自己亲自实现一遍会理解的更透彻 尤其会遇到一些现实的问题,即使是实现 也还涉及到数据结构层面的优化 可做的东西也不少。你觉得不需要高深的知识 只是因为你没在现实场景中应用的经历,像机器学习这种技术 有了一定的积累后 建议多做做实际项目。

徐天鸿(程序员,音乐爱好者)

实际生产环境问题是多样与复杂的。如果只是解决固定的,例行化的问题,只需要了解工具的使用方法即可,甚至都不用知道理论。理论基础及实现过程是让你对问题本质的理解产生质变的必要条件。关键还是看你需要做什么,需不需要对一个问题有深刻的理解。

好比我只要知道头疼吃阿司匹林2颗即可。也可以解决问题。但医生必需要深刻理解阿司匹林背后的药理,才能对自己的病人进行准确的掌控。区别就在这里。