分享 我对待技术学习的态度

whitecrow · 2014年05月18日 · 最后由 edward1992 回复于 2014年06月16日 · 11065 次阅读
本帖已被管理员设置为精华贴

博文原文地址:我对待技术学习的态度

本文仅谈业余时间的技术学习,不谈工作中的要求。

技术固然要时时学习,因为更新快嘛,但对待技术上学什么,怎么花时间学,需要一个指导思想,否则浪费时间而且效果不好。

1)抓住主干,而非细节 最近很火的一句话是“你不要用战术上的勤奋掩盖战略上的懒惰”。放到技术学习上就先主理解主干后关注枝叶,比如 C++ 的好书很多,《Effective C++》和《Inside C++ Object Model》是好书,但它们都不是用来入门的,为什么?因为它们不是主干,语言实现细节和各种坑你都了解了,碰到实际问题依然用不好 C++。

2)尽量不折腾 不去折腾那些不成熟的技术,尽量用较为成熟的技术。在一年多之前,我用 AngularJS,MongoDB 的时候把我可给坑惨了,所以我下决心如果不因为工作坚决不碰 Go 语言,Node.js,要学不如学 Erlang。新技术应用场景不清晰,前景不清晰,生态环境弱,类库少,坑多不容易跳出来。简而言之就是风险大于收益。同理我也不喜欢用 Linux 而喜欢 Mac,Vim 的包也是别人弄好了直接 install 的。

3)尽量学习经典原理而不是浪费时间在细节上。 这一点条和第一点类似,多花时间学习抽象模式,设计原则,类型系统,看诸如《SICP》《The little schemer》《Essential of Programming Language》这种书,如果不是因为工作绝不浪费时间到《Dive into python》这种具体到语言细节的书上。

4)尽量学习形而下的系统而不过多上升到形而上的思想上。 上一点谈到了抽象模式和类型系统,但切不可单纯从思想上判断哪种语言一定好,哪种抽象模式就一定好,一定要结合形而下的系统综合看待,学习 C 语言就要随着 OS 学习,学习 Lisp 就随着编译器或分析器一起学习,学习 Ruby 或 Python 就跟着 web 开发来学习,通过某一类系统架构理解语言的优劣,通过语言来理解为何这么架构系统。

5)学好那些通用技能。 比如:1,如何进行 Debug,2,如何阅读源代码,3,如何进行基本性能监控,4,熟练用好自己的编辑器和*nix 命令行,5,git 技巧,6,项目管理能力,7,关系型数据库的知识。

写的很好!

谢谢楼主分享学习心得。

楼主的观点非常赞同,但是 AngularJS,MongoDB 应该不算不成熟的技术吧。

#3 楼 @wcc526 你说的对,我是前几年的时候折腾的,至今对 AngularJS 持保留意见。

我觉着吧,你可以不喜欢特定的技术,比如 Angular, MongoDB, Node.js 等等,或者判定他们不适合你或你公司的应用场景,但不必要以“技术不成熟”为理由拒绝学习。

什么技术都是从不成熟到成熟的。只用完全成熟的技术,公司产品难有竞争力,个人难找工作,社会也没进步,扯远了,哈哈。

关于你说的不学细节我也不赞同。貌似这是计算机科学家的态度,不是程序员的态度。基础当然重要,但要形成生产力,还是需要细节,大量的细节。

写的好!

写技术笔记真的很有帮助

#5 楼 @billy 1)我赞同得学细节,但是是先抓主干,再抓细节 2)Angular, MongoDB, Node.js 如果是工作需要才会去学习,不需要的话,风险远大于收益。

说实话 node.js 比 erlang 毫无技术上的优势,只是容易招人容易学。 AngularJS 数据绑定和单页面 web APP 那一套,四年前 JAVA 就有框架实现了,最近被炒火市场需求居多,不代表它技术领先。 MongoDB 现在看来作数据分析是个不错的容器,当时我学它用它做业务方面的数据库,被坑了,“应用场景不清晰”。

@whitecrow 我不知道 Angular 和 Java 的那个框架有什么关系,也许原理类似,这很正常,Angular 从来也没说他那个是独创的,Knockout.js 比它还早出现呢,但 Java 能广泛应用在浏览器?

我不反对你反对 Angular 或 Node 或其他,我反对的是你的理由是他们的技术不够成熟。Angular 和 Node 还要多成熟你才能学?当然你学了一些之后发现不适合就不学了,这个完全合理。

很实在的经验分享。

过早的纠结细节,容易陷进去

Linux 也可以不折腾的。

可以不喜欢 Linux,但请不要说因为 Linux 折腾。

所以說這種文隨便講講原則就可以了,不能具體舉例子,一舉例子就冒犯人。

其实原则就是学那些最基础的,同时吃透那些焦掉了的技术。后端比如 Ruby,前端比如 JS 吃透,这些搞定,看看那些基础书,系统啊,编译器啊,算法啊,其他那些什么新玩具不过是新壶旧酒,底子够了一摸就能用了。

没有实际效果的玩意千万别浪费时间,比如编辑器,Textmate 看熟了菜单快捷键,基本上 3 天时间的研究可以秒杀一堆 Vim 熟手啦。

反 geek 思想,要是每个人都这么做,技术也就变的枯燥单调,没有了发展,如果没有了巨人,又怎样站在巨人的肩膀上。但如果只是为了个人生活,工作,那么这就比较实用。

观点有对有错。

第一点,在初学阶段是这样,先抓主干,理清脉络,然后再去看细枝末节。然后慢慢的形成体系。而且不光是编程语言,还有很多其他计算机知识也是类似的。并且一定要对计算机有系统的学习。但是你不能把自己就定位于初学者。如果永远是初学者,那么请转行。

例如以前我面试的时候经常问一个很基础的很简单的问题,但是很多人都不能很满意的给出答案,问题是:main 函数里面不停的调用 main 会是什么效果。 代码如下 int main(void) { main(); return 0; }

其实这个问题深究下去是一个计算机很本质的东西,函数调用依赖栈,局部变量在栈里面分配。这也是很多安全问题的本质原因。你可能觉得这类问题是细节问题。但是绝对是核心问题之一。如果这类问题答不上来。只能说明知识不够系统。

所以说初学的时候抓住主干快速入门。入门后继续深入学习。

第二点,如果一个程序员对新鲜事物都没有学习的欲望了。还干程序员干嘛?不管成熟不成熟,花点时间了解下,然后根据需求选型就可以了。就像第一点说的。如果真的不要不自己定位于初学者,知识比较系统,学个语言,学个库,真的需要花很多时间么?如果发现不好用,或者你不喜欢,或者不适合你的场景,或者是坑太多,你不选型就可以了啊。和学不学有什么关系?

刚好你提到了 golang,里面有一个特性,分段式栈管理,刚好第一点提到了栈,如果不能真的理解函数是怎么调用的,看到这句话也仅仅是一个宣传语。

第三点和第四点 我觉得理论和实践要结合,要深入学习任何一方面的东西。理论和实践都非常重要,没有谁轻谁重。学理论能够知道大体上这东西是什么,怎么来的,怎么想的。但是实际中你去做的时候,会遇到很多工程问题。这类工程问题。对于程序员是很有价值的。并且如果你要把理论理解很清楚很深入。需要自己去实际做点东西的。所以我觉得两类书籍都是有价值的。第四点和此类似

总结就是不要光看理论,泛泛而它,不要光只知道怎么用,但是不明白为什么,两个都很重要。慢慢的积累就会形成一套自己模式,这些模式,时间长了,懒得给别人解释细节了。就是你说的形而上。很多时候行家只是一句话的问题。但是外行看就是形而上。因为搞太久了。懒得说很多句话去解释了。

第五点,不评价

#19 楼 @jasl 你说得非常对,有大部分观点不适合于新手。但是新手必须“抓住主干,而非细节。”我对这点体会比较深,对于 RoR 来说,细节是指语法细节和框架的一些特殊应用技巧,主干则是基本 Ruby 语法,以及对 MVC 和 Routes 的应用。

顶,大牛们

#16 楼 @mjf429 多谢补充,你说的也能够补全文中写得偏激的,不完善的地方。受教。

为什么我说在工作之外,不要关注细节(特别是语法细节)。因为细节这个东西,实践的时候,查查 Guides 和文档就够了,再不行就 Google 一把,故意去学习这些细节并不能提高你对编程的理解,或者说提高得太慢。

通用技能,get ..

Go 也不算新技术

#16 楼 @mjf429

如果你只看到一块砖,那你最多只能成为一个好的工人,如果你看到的是一个大厦,那你可以成为一个好的建筑师,但是如果你看到的是一个城市,那么你就能成为一个伟大的工匠.
如果你只看到一块砖,那你最多只能成为一个好的工人,如果你看到的是一个大厦,那你可以成为一个好的绘图员,但是如果你看到的是一个城市,那么你就能成为一个好的规划绘图员.

#25 楼 @yukihiro_matz 眼一花,还以为你是 Matz 真人。。。。

#7 楼 @whitecrowMongoDB现在看来作数据分析是个不错的容器,当时我学它用它做业务方面的数据库,被坑了 为理由来暗示MongoDB是不成熟的技术

就相当与 自行车现在看来是个不错的陆上交通工具,当时我学它来试图横渡大西洋,被坑了==>自行车真是个不成熟的技术

因为新技术应用场景不清晰?对啊,自行车说明书上好像真没有写不能在海上骑呢,问题是我们是工程师啊,不是什么小白啊,如果连某项技术大致的应用场景都不能了解,还要啥自行车呢……

#28 楼 @aptx4869 好吧,我的具体例子不完善,说道具体细节可辩论的太多了。几年前 MonogoDB 是怎么宣传的你可能不了解。不多说了,免得争吵。

谢谢楼主的分享

同时 祝愿:每个人 都有 自己的 态度

再 请:不要 争论

(我好像不明白 讨论 与 争论 的 区别)

学习 Lisp 就随着编译器或分析器一起学习

LZ 你是不是对 Lisp 有什么误会==

这一点条和第一点类似,多花时间学习抽象模式,类型系统,看诸如《SICP》《The little schemer》《Essential of Programming Language》这种书,如果不是因为工作绝不浪费时间到《Dive into python》这种具体到语言细节的书上。

btw,我猜 LZ 这基本前面提到的书里没一本看完过 (

#31 楼 @bugmenot 我不知道你为什么做出这样的猜测,也许是帖子里的语气让你不舒服。也无意指责你的猜测。我很奇怪帖子中只有三四个人在和我讨论文中的主要观点,而其他人在纠结于不影响论点的例子当中的细节。

只是希望下次回帖的时候能够做一点换位思考,我为什么发这个帖子,我想要讨论和分享什么。

P.S. 这四册书中,第三本和第四本没看完,因为剩下的部分并不是我需要的知识,如果这让你觉得获得了安慰,我无话可说。

第六,很长的一段话,换行更利于阅读。

#32 楼 @whitecrow 没有…只是觉得扯类型系统的话 TAPL 更加好吧……哈哈哈 (写 Rails 的管得着类型系统吗 233

你的观点去掉例子的话没有什么大错,但是都是大条道理。什么是大条道理?就是把内容换到其他领域来说也一样一个意思。讲大条道理很多时候的一个坏处就是空口说大话,个人觉得与其说大条道理不如分享自身熟悉领域的经验 (LZ 说类型系统什么的恐怕连 M&M 类型系统都没搞清楚吧),比如 Mongodb 怎么坑、Erlang 怎么完虐 node 几条街、Lisp 连 Parsing 都不用怎么来学编译原理之类的

如有得罪,多多包涵,就是这样。

#34 楼 @bugmenot 我既分享过大条道理,也分享过自身熟悉领域的经验(http://ruby-china.org/topics/17423 http://ruby-china.org/topics/19349)。后者固然在技术论坛比较政治正确,但抽象的或总结性的思考,我相信也是有人需要的。

#35 楼 @whitecrow 扯上政治正确不跟你说了 (

看楼主的帖子,受益匪浅,学习一个新的技术,或在框架,我都停留在表面,没有深入学习,只是为了赶工期,只要代码能正常运行就好了,没有从根本上理解这个技术或在框架的精髓。以后要多多向楼主学习

看看热闹。

对于第一条我很认同 抓住主干 而非细节 我学 ruby 的时候 看了基本语法 就开始看元编程了 其他的细节用到再说 但是对于折腾这点来说 我有不同见解 我觉得多折腾未必不是好事 新手往往起步的时候比较脆弱 遇到错误可以能就没法下手 打击积极性确实是这样 但是总是无痛起飞 那成长起来的小鸟能经历风雨吗?另外 AngularJS 的质量也还是能称得上稳固的 linux 的下像 Ubuntu 和 fedora 这样的发行版桌面系统的易用性也不差

#39 楼 @zhang_soledad 你说得对,后面几条不适用于新手。

学习了,感谢。

赞同,因为学习必须考虑时间成本的,去掉耗时耗力的细枝末节,节约下来的时间又可以学很多其他更核心更有用的东西了。

43 楼 已删除

不太苟同啊,简单说,没有细节,何来主干,让你做个 Login Form,你来和我谈模式,这种情况我带队的时候还真是经常碰到这样的,来一个项目要 POC,一天功夫可以快速弄个原型的,和我扯东扯西,各种模块各种分层都覆盖了,具体要做东西却是傻眼了。

折腾是新手入门必须经过的一个过程。如果没有折腾这个教训最为前提,就不会明白什么是细节什么是主干。一个好的导师会让新手的折腾时间压缩到最短。

另外,让我来说的话。如何 debug 和利用 google,stackexchange 是对新手最重要的,应该排到第一位。剩下提到的几点,其实正常人都应该没多久就能无师自通,除非这人写代码只是为了混饭吃。

就跟看人“看脸”似的,这估计也是看技术实力的吧,不同的人有不同的看法。有些人就可以把操作系统,Linux 玩的很溜。

觉得少了坚持学习的热情也不行

有兴趣有目的的折腾强过没有目的随大流的折腾

细节是怎么做,原理是为什么这么做,由细节推动理解原理,根据原理可以去推导具体的实现细节。在选择技术方面上,了解该技术提倡的理念,发现里面蕴含的原理,比深究具体细节来的更快更好。一个技术如果在方向上出问题,具体细节的实现再怎么完美,都是徒劳的。就像托勒密地心说体系几乎完美的解决了各个行星运行轨道的问题,但是它从根本上就错了,无论它在细节再怎么完美和优雅。追本溯源,如果这个体系开始就确立了太阳为中心,根本不会不会出现那么多需要解决的细节问题。一个好的体系应该是解决问题,而不是制造问题。

看了这么多评论,很想知道,楼主是何许人也,很吊的感觉?? 不知道工作多久了,敢如此评论。综合评论,莫装 13。。。

#51 楼 @jeremy16601 恩。。。我觉得楼主只是说说自己的学习态度而已。何必上来就喷。

#51 楼 @jeremy16601 我劝你好好说话!!!我谈谈自己的学习态度,你有不同的态度就亮出来,有不同的意见提意见。评论技术无非各抒己见,难道因为怕被说装逼就不分享不评论不表达,呵呵呵。

一大早看见这种评论真是恶心,很多人离开技术论坛论坛就是受不了这种语气,导致论坛越来越水。

#53 楼 @whitecrow 只是看不惯你这样的装逼行为。你可以有你的态度,但是别表现的 自己好像什么都懂一样,很明显在找骂。

几个评论比原文更精彩啊!

#54 楼 @jeremy16601 楼主分享一下自己的看法而已,又没找你要电话号码,也没逼着你去信。你上来就说人家装逼,敢问楼主写的哪一点冒犯你了,让你用这么泛酸的口气说话?

#51 楼 @jeremy16601 言辞需要斟酌。😄

不成熟的技术有时候还是值得折腾折腾的

技术就是一个个的细节

#54 楼 @jeremy16601 那请问你做过什么了不得的事情,让你觉得你可以这么有底气地骂人?你凭什么用这种居高临下的审判口气说人家呢?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号