新手问题 你们是如何一步步成为学会编程的?

chairy11 · 2014年05月16日 · 最后由 fredwu 回复于 2014年05月19日 · 8789 次阅读

这种问题好像实在太老太老了,但很想再问问。 能详细地讲讲,你们是如何,从刚刚接触到编程,接触到的是什么,怎么做,然后如何一点点提升(或快速提升),至今日的境界吗? 为什么我总觉得脑子里全是碎片,然后没有融会贯通的感觉呢?

同问论坛各位大神 🙏

酒要少吃,事要多知。

匿名 #3 2014年05月16日

假如不是按部就班地去学习的话,我一般也是会有很长时间「脑子里全是碎片」,然后某一天忽然就顿悟了……

放弃一切不切实际的幻想,踏踏实实解决一个又一个的问题,无它。

我是来学习的

已经准备大师球,高手快出来!

没达到高手水平…不过一直都是不断的做实验项目,确定下一步自己要验证或学会那部分东西,然后着手实现……

我是这么干的,找个大床,躺在上面,然后做一场梦,然后你懂的

#3 楼 @dorentus 怎样才能顿悟啊?

樓主的問法不好,誰要是好好跟樓主解釋的話就是自詡高手,一般真正的高手都不覺得自己是高手。

聆听大神指导模式:ON

只看书不动手,只提问不自己尝试解决问题,就能学会

10000 小时定律,写程序并不是多天才的工作,数学别太差,干上 10 年,基本上在自己的领域“所遇无非故物了”

融会贯通,是多么高的境界啊,我还没达到

匿名 #18 2014年05月16日

#10 楼 @chairy11 要是有方法的话就不叫顿悟了啊

以上为玩笑 :)

还是要多动手吧,一个问题一个问题地去解决,然后不知不觉中就成长了。


拿我自己为例吧,几年前,那时我完全没有接触过 iOS 开发(只是有几年 PHP web 开发经验,C 和 C++ 算是会,但是没真的写过代码),然后一个朋友把一个 iOS 外包的单子丢给了我

项目的框架代码从他以前的一个项目里面直接拿过来(已经是可编译运行状态),然后接下来的都要我自己做

刚开始两周,只有几个简单的需求过来,于是我多半时间都花在这里改改那里改改看会发生些什么 -_- 遇到的各种问题,基本上都可以在 stackoverflow 和官方文档里面找到答案(问题都太常见了,甚至我都不需要自己提问,直接搜索就 OK);中间还走了不少弯路,比如没有把 Obj-C 的语法文档看完,到后来才明白 selector 是怎么一回事……

再接下来需求逐渐多了起来,更详细也更复杂,也就只能慢慢地去实现了;这时写代码或者重构代码的时间渐渐多了起来,查 google 的时间相对减少了。

然后后面有几个比较复杂的需求,涉及到一些动画,于是又看了不少相关的资料,最后实现了(然后甲方改主意,这个需求被砍了……)

一共大概花了三个月,项目结束,在 app store 上架。于是我终于可以说我会写 iOS 应用了……(但是其实后来才知道要学的东西还有很多很多)。

#18 楼 @dorentus 恩,喜欢这样的答案。

老师教的。。

不知道 10000 小时定律,是怎么得出来的, 为什么不是 9000 小时,或者 14000 小时? 另外,很多时候,看起来的小领域,进去了发现是个小宇宙。 1w 小时哪够?

同问,产生了太多的知识碎片,怎么办才好

提供一个权威的答案,《编程大师访谈录》书中盖茨讲述了他的经验,就是读代码,他如果面试的话会给两页代码让应试者读。

可以参考一些书籍比如 Ruby 相关的《Matz 的程序世界》,我比较喜欢的一本书微软专家写的《编码》,讲了 cpu 的原理,科普书很有趣。

《功夫熊猫》这个电影其实很有启发意义,最重要的恐怕就是喜爱了。在高手透关的时候,口念 inner peace,也就是需要静下心来,让答案自己浮现。

踩坑,不掉坑里不长记性,掉坑多了痛怕了经验值刷多了就知道怎么对付了。

我讲一个最近的体会。前几天我听了 Rubyconf 的一些内容,看着 youtube 的那个自动翻译的字幕听的,多少听懂了一些。

今天听一段 ted 讲座,我感觉似乎能听懂一些句子了,以前基本上只能听到一些单词。

如果我直接听英文,听不懂会觉得很无聊,那个字幕还是起了作用的。我觉得要选符合自己水平的学习材料,逐步提高。

#21 楼 @zealinux 可能是这本书吧?一万小时天才理论 http://book.douban.com/subject/4726323/

想说几点

  1. 很多牛人都经历了一万小时的努力,变得很牛。但不见得努力一万个小时,就会很牛。
  2. 一万小时,指的是精深训练。精深训练首先是是那种不很舒服的训练,有难度,但难度有不能过高。一流的运动员,觉得一天能有 4 个小时这样的时间就谢天谢地了。既,并非所有时间都能算在这个一万小时里面。
  3. 这本书的例子,多数和运动,音乐有关。而且基于髓鞘质,简单来说,就是一件事情重复多了,就可以做的更好。和运动有关的,很多都需要反复的重复。但和思维有关的,似乎更注重方法(当然这些基于我的了解,很可能是错误的)。
27 楼 已删除

修炼。。。

动手实践,还有推荐你一本入门好书,松本行弘的程序世界

#29 楼 @googolxi 我学 ruby 读的第一本书就是《松本行弘的程序世界》,当时花了一周硬着头皮看,但没怎么看懂。现在还没勇气看第二遍。这本书真的适合入门吗?

#30 楼 @chairy11 没看懂就不适合 再看提问换书

实践出真知 真本事都是从真项目里逼出来的

#29 楼 @googolxi 《松本行弘的编程世界》不太适合入门,这本书主要讲解松本当时为什么要创建 Ruby、以及如何从各种语言中吸取精华的。还是比较适合有一定经验的人看。

Ruby 的入门书还是松本的《Ruby 编程语言》那本书。这个讲解更加细致!

恕我直言,我觉得你不适合自学编程,还是找个 IT 公司边实习边学吧。

新手自学编程,有两点误区:

1)不会抓主干。打个比方,新手喜欢看别人推荐的“好书”,“先抓主干,再理枝叶”是学习的正途,《Effective C++》之类是好书,但它们都不是用来入门的,为什么?因为它们不是主干,语言实现细节和各种坑你都了解了,碰到实际问题依然用不好 C++。大多数技术细节其实高手也不清楚,更不用说新手了,你把 Rails 开发的主干抓好,细节地方就查 Guides。

2)不会看 log,不会调试程序。出现了 bug 配置半天,改半天,耐心耗尽,更不容易学了。这个没办法自学,你可以网上搜一下别人如何进行 debug、看 log、调试程序的视频资料。Rails 圈子里的学习资料其实对新手非常不友好。

最好的方式,还是找个 IT 公司边实习边学吧。

看了本谭浩强的 Basic 指南就会了…… 👌

之后的事只是慢慢增加熟练度罢了。。。

#37 楼 @jiyinyiyong 谢谢,这么详细,感动 ing... #36 楼 @whitecrow 谢谢,接受你的建议… #33 楼 @diguage 恩……我感觉也是。其实我前阵子拿出来想重看一遍的,但一看到目录里设计模式文字编码什么的,就觉得,好吧,还是先不看了……

俺学 rails 是这样的....

  1. 毕业设计想做一个 git 代码托管网站,设计基本照抄 gitlabhq, 代码基本没抄,经过这么一下对 git 本身和周边的了解拓展的很快
  2. 上班后老板让我接了一个系统,我自作主张给用 rails 重构了 (原 python), 期间就是买了 railscasts 的 pro, 各种看视频学 rails 应用,然后也是到处看资料拓展思路。磕磕碰碰写好上线
  3. 这周接了一个 php 系统,又毅然决定给他改成 rails 的,这将是我写的第三个 rails 应用。

在学习的路径上我非常同意 @jiyinyiyong 说的,关键是如何解决问题,寻找和学习解决问题的思路和方法。什么时候什么场景适用什么技术方案。知道一个问题怎么解的时候,写程序就是一个水到渠成的事情了,平时不用太过于纠结细节,细节永远是在实践中完善的

#41 楼 @chairy11 btw...我的工作是运维..........平时写代码时间很少,大多数时间都是在搞搞 linux, 业余时间学习学习高大上的技术。所以实际上是个眼高手低型选手..

我读书的时候在学校建暗黑服务器,只能从源代码编译,没办法,只好学习了 linux 和 c,融会贯通的感觉一开始比较难有,等你解决完很多问题以后就明白了,"看代码看数据的组织形式"

#44 楼 @jiyinyiyong 让学长膜拜一下.....求学习编译原理....

感觉不同人学习能力有差异

同意解决问题比代码本身重要

提供一种可能的思路,把编程问题和熟悉的事务建立关联

#45 楼 @ruohanc 一起膜拜徐林迪吧,他给我讲了半天看了例子,Cirru 还是在用很另类的解析器。

#43 楼 我发现我的很多想法和 @mjf429 类似。"看代码看数据的组织形式",Linus 也说过同样的话“bad programmers worry about the code. good programmers worry about data structures and their relationships.“请问你有博客吗?我非常想去看看。

#43 楼 @mjf429 我周末和我哥呆一起(他是计算机本硕,现在在百度上班),他问我:“你知道科班出身的程序员和非科班的有什么不同吗?” 我说:“是什么?” 他说:“科班的基础扎实,很多东西理解程度不一样。” 他说应该先从 C 语言学起,一开始就接触太高级的比如 ruby 这种,其实是很难去理解的。但如果先把 C 理解透了,再来用 Ruby 这种高级的语言,可能就会“哦!它这样用,太爽了!你知道它为什么这样做,好在哪里……会得心应手” (原话不记得了,大概就这意思。BTW,他用的是 Java,做的是 Android 开发,现在也接触 PHP,但对 Ruby 没接触)

融会贯通需要深度思考,楼主每次遇到需要深度思考的时候就“哎呀,太难了,提问吧”,就这样变成原地踏步。

  • 大一跟学校学 java,js,C#。那时候对游戏感兴趣就跟着网上教程做了些俄罗斯方块,贪食蛇等等

  • 大二苦读书,什么《thinking in java》《java 核心技术》《CLR via C#》《C#基础入门》等等,读了一堆凶器(厚的能砸死人),然后凭兴趣去接触了WP7,WPF等等,顺道做了点不入流但对编程技术有锻炼的小游戏和小软件。

  • 大二下接触 ruby,三观颠覆,决定当个 ruby 程序员。于是去学了 rails。

  • 因为我上的专科,之后就是实习生活直到毕业了

  1. 关于融会贯通,还是要多读书多写。如果不是 IQ250 的天才少年,估计单靠自己的理解还是很难的,多读书,多读基础的书有助于你理解编程这个事情的本质。让你把‘编程’这一行为的本质和语言的实现从不同的编程语言和技术中‘抽象’出来。以后你在看到什么新奇的技术或者技巧,会反射性的洞悉其原理,这样我觉得就是做到融会贯通了。

  2. 要去努力理解‘编程’,行成自己的编程世界观。你写的每一行代码,调用的每一个方法,你都可以想象他背后做了哪些事情,而不是当成魔术一样。那样就需要你总结编程中的基础规则,所有的‘魔术’也都是在规则之下的组合变幻,当然这个规则最基础的就是‘语法’。

  3. 多接触有趣的技术,避免成为井底之蛙。多接触也是多理解,多理解不同的技术才能看到他们的共同之处。

  4. 入门语言,语言对于编程的理解还是有影响的,因为每个语言的行为不同,而你是通过语言来与计算机交谈的,语言在编程中和程序员是最亲密的,理解编程刚开始也是通过语言来作为桥梁。比如 C 和 ruby 中,char str[] = "hello world"str = "hello"这两句话在你用不同的语言时其意义与背后行为也是不同的。所以要多尝试以不同思维来接触不同语言。不过入门语言倒是无所谓。

#48 楼 @whitecrow 我之前自己建了个自己的博客,后来老不更新,后来自己撤下来了,最近我一直在总结自己这些年的经验,感觉有些东西还是对新手有帮助的,挺愿意和大家分享的,欢迎随时和大家交流,家里最近比较忙,过段时间我会把博客再开起来

啥也不用干,多问诸如"你们是如何一步步成为学会编程的?"这样的问题就会了

找技术一流的团队加入。所在团队的水准对于新手而言非常重要。

没有快速提升的捷径,但是通过额外的努力(比如做工作外的项目,或是投入到开源社区中),提升的效率更高。

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