瞎扯淡 瓶颈期,求指点.

hellomac · 2013年09月05日 · 最后由 firstbibi1 回复于 2013年09月23日 · 13100 次阅读

作为一个连 HTML 都不知为何物零基础的人,也就是朋友口中的"野生程序员",在一年前机缘巧合邂逅了 Ruby,从此一见钟情. 只啃了 Ruby 基础语法,就搞起了 Ruby On Rails,被虐的很惨,但也一直在坚持. 可是渐渐的,我发现我遇到了许许多多问题,比如 CRUD 写过很多,但是你问我为什么 new 方法中要建个类的实例我却解释不清。应该是我基础太薄弱的关系吧.Ruby On Rails 写了一些,但 Ruby 写的很少,元编程也只能搞懂寥寥几种,这让我很难搞懂 Ruby On Rails 的源码,始终无法深入. 也曾想过去上@knwang的课程,但现有条件又不允许,不可能拿出大块时间完成课程. 零零碎碎的学,势必系统性会很差,难以提高,我该何去何从?请前辈指点。

楼主性别?

#1 楼 @ShiningRay 如果性别是您回复本帖的因素之一的话,您不妨观望。也谢谢你关注。

#2 楼 @hellomac 楼主文笔感性细腻,不错

#2 楼 @hellomac 1 楼可是人人仰慕的屌丝大神...

去个小公司,从项目的开头开始做起,把这个项目做起来,处理好各种发现的情况,就差不多了. 我就是这样成长起来的,和 lz 一样,一开始啥也不会

#4 楼 @zj0713001 一直觉得"屌丝"是个自嘲词,用在别人身上,似乎不妥。

#4 楼 @zj0713001 这个背景信息太少,没法对症下药

还是学习学习测试吧

#7 楼 @ShiningRay 比如主题中的疑问:CRUD 中,为什么 new 方法中要新建个类的实例?

# GET /wikis/new
  # GET /wikis/new.json
  def new
    @wiki = Wiki.new     #  <=======这行的作用是什么,删掉可以吗?

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @wiki }
    end
  end

@hellomac 对症下药给个解决办法 1. 真正弄清楚,面向对象的意思,推荐书籍 Ruby for Rails 2. 元编程,一定要学,非常非常重要 3. 拿实际项目练手。

#5 楼 @neverlandxy_naix 尝试参与了一些小项目,起初确实有所收获,但越到后来,越不涨经验值,反倒成了砍柴,这不是我想要的。

#9 楼 @hellomac 这个是为啥呢,我也不懂啊,哈哈哈哈,其实可以不用的,这个 new 只是用来显示一个表单。 新的实例(未保存的)可以用于 form_for 中,不用 form_for 其实不新建实例也无所谓

问具体的问题就另外开个帖子好问了,不用说其他废话的

#9 楼 @hellomac 就这个疑问而言,补一下 Object-oriented programming 的基础知识即可

2 楼头像为何不同,bug?

#14 楼 @siyang1982 楼主被我问了性别之后改了头像,然后那个是缓存了以前的

不熟悉 html、javascript、css,搞 web 开发很难,不管用多神奇的框架,这 3 项都是基本功。

#14 楼 @siyang1982 #15 楼 @ShiningRay 之前的头像并非本人,为避免误会,更换了头像。

#9 楼 @hellomac 在 new 方法里面创建类的实例是给模版中的 form 用的,实例的属性对应 form 的表单

#12 楼 @ShiningRay #13 楼 @blacktulip 表单也是对象,具有字段值等等属性,新建只是为了保证用户填错的时候可以协助填写默认值,理解是否正确?

非计算机专业的野生程序员 还是得打好基础 把基本概念搞清 如面向对象等等

我现在还是看到 2 种楼主的头像。。2 楼是新的 其余的楼都是旧头像 有点乱

正题:推荐打好 ruby 基础,不要着急学 rails,稳扎稳打。切勿急躁。推荐《Eloquent Ruby》这本书,如果认真的读一遍,相信你再看 rails 源码就不会那么晕了

#18 楼 @gaicitadie 你说的没有错,但是我觉得楼主问的不是这个。

#19 楼 @hellomac 这里新建一个实例,是为了在内存中开出一片小区域来存放数据。

@wiki = Wiki.new

Wiki 是个 class,按传统 OOP 的理解,class 是 instances 的结构图。你把一个 instance (此例中的 @wiki 想象成一座房子,房子里面放的是家具 ( 用户通过表单输入的数据 ) 。

那么显然,你需要先建一座房子,( 在内存中开辟一块空间 ) ,@wiki = Wiki.new 这条指令就是建起这座房子,然后你可以让用户把家具放进去。

如果光有 Wiki 这个结构图,没法放家具,家具不能放到图纸里面。


以上是比较肤浅的解释,可以先这么理解着,以后对 OOP 理解深入了就好懂了。

new 不就为了实例一个对象给表单的吗?为什么要实例???不实例其实也是可以的,不是吗?

实例是为了把这个对象的原生属性都传过去,表单自然知道一些默认值。

#21 楼 @young4u_amy 2L 是旧的,其它才是新的. 你说的道理我明白,只是写 Ruby 的机会很少,除了自己练习,没有使用的地方. 可能对我来说:使用 Ruby On Rails 开发网站是主要的用途. 不实际使用的东西,很难有动力持续下去。

ruby 比较迷惑,python 可能好点~

#24 楼 @hellomac 到 github 找个感兴趣的 gem,迈出第一步就好说了

#24 楼 @hellomac 楼主就不要顾左右而言他了,很多事情你没说清楚,没法帮你,程序员是不会跟你感性的。 你现在在做什么,之前学过什么,学到什么程度,现在学 Ruby 和 Rails 希望做什么

#22 楼 @blacktulip 谢谢,这么说我就理解一些了. 有时候初心者即使读了几百遍<<提问的智慧>>仍然会问出糟糕的问题,因为它真的搞不清自己到底问的是什么,只好一股脑说出来,等待热心人拯救. 在社区一年,感觉越来越有人情味了。越来越多的前辈遇到新手的无脑问题不再是哼一声扭头就走,而是细心的指导. 谢谢你们,社区有大家更美。

#27 楼 @ShiningRay 1.在一个小团队打杂,做着和技术有关没关的事情. 2.接触到社区之前只会聊 QQ.现在的技能就是 HTML(熟悉),CSS(入门),JS(新手),Ruby(入门),Ruby On Rails(入门).按照新手 - 入门 - 熟悉 - 精通 - 资深划分. 3.希望能独立制作自己喜欢的网站,而不是拿 Discuz!,WP 一类的改改模版。

#29 楼 @hellomac 应用应需求而生,源码应应用而生,重构应源码而生。

做得多,想得多,看得多,熟悉得多,十万个为什么,也会一天天减少。

#29 楼 @hellomac 算法、数据结构、面向对象、设计模式这些东西其实都比较需要了解的。

楼上也给出了很多建议。

根据你的目标,我觉得直接做你喜欢的项目好了,自己设计,自己想需求来做。对用户来说,功能和体验是关键,代码其实不重要。所以能实现功能的代码就是好代码。 然后你可以把代码放到 Github 上,然后给别人看

基础理论看书,还要看别人写的代码,看看好的代码长什么样。Rails 隐藏的 Magic 太多,所以初学者想深入理解 Rails 比较难

头像一定要好。比如说。我的~!

#22 楼 @blacktulip 正解。楼主。。其实你需要的是一本系统的书籍,一本从数据结构到面向对象,到 ruby 语法,到 rails 的书。。其实你真正需要的是镐头书~~涵盖了这一切。。。

#6 楼 @hellomac 额 你一定不知道 1 楼分享的《屌丝程序员如何一个人打造日 PV 百万的网站架构》还有翻译了 Javascript 搞基程序设计... #1 楼 @ShiningRay 看来很多人不知道你哈哈哈

#33 楼 @jarorwar 为什么需要了解数据结构呢?您能谈谈必要性吗? #34 楼 @zj0713001 你一定不知道"百万"其实我看过,甚至那个"冇问题"我也匆匆看过几眼。

#35 楼 @hellomac 哈哈哈 不错不错 我帮楼上一起回答一下问题吧 数据结构我个人认为(我刚本科毕业 2 年 理解不深)是开发中最难的基础知识 做了 2 年 ruby 当初学的知识也差不多忘光了(各种经典结构还记得 但是没法默写实现代码了)但是我觉得收益很深的地方 是在设计模型关系的时候 能有很清晰的思路来解决遇到的问题 其他方面 至少能清楚知道什么时候用 Array 什么时候用 Hash 吧...

跟位置,排序相关的用 Array 非重复,有对应关系的用 Hash,另外不懂 New 是因为没有找过老婆,买过房,你找了老婆,买了房就明白为什么要写 New 了

#37 楼 @yakczh 楼主是找老公吧..

#36 楼 @zj0713001 其实您说的例子我仍然觉得和数据结构无关.@yakczh 解释的很好了。

#37 楼 @yakczh 您说的这个太有难度了。

#36 楼 @zj0713001 我觉得数据结构是算法的基础吧。也不需要掌握很深奥的部分,记住一些常用的,卡住了知道上哪里找方案就行了

系统学习下比较好,基础的东西不打好难以长远

我 09 年接触 Ruby 的,跟你一样什么都不懂就开始玩儿 ruby,虽然到现在技术也不咋地,但是还是可以分享点经验的,

  • 建议你先学下 设计模式 再学 Ruby ( Programming Ruby 绝对是一本 翻不完 的书,有些只是带过的一句话都是发人深省).

  • Rails 中运用了很多的设计模式。如果源码有些地方看不懂的话可以在社区建议开个板块,代码相关的,然后发帖问下。

我也是经常遇各种坑,没基础不可怕,可怕的是别人在玩,你玩比别人更嗨皮。

43 楼 已删除

楼主在看什么书,看完了没。

编程需要思考,没有思考你当然不知道为什么他们 (大牛们) 这么做

  1. 学一门公认 sucks 的语言 (php?java?) 对比下和 ruby 的差别,你就知道为什么要这样设计了

  2. 学学 gosu 什么的,写些小游戏 自己领悟怎么写能复用代码

#43 楼 @bhuztez 少喷点没坏处,erlang 那 所谓的 OO 才是歪门邪道呢

#34 楼 @zj0713001 果然是不经常冒泡导致的啊

#39 楼 @hellomac 我也没说和数据结构有关啊...我只说了自己的使用而已... 我上来就说了 大学时认真学的数据结构早忘光了...

#9 楼 @hellomac 这个我知道。以前 @iBachue 叔问过我,我没答出来,可能被鄙视了,之后他告诉我原因了。

50 楼 已删除

#42 楼 @Ddl1st 为什么我觉得刚好想法。。。难道设计模式的东西不是在写过一定量的代码之后去看才更合适么? 上来就设计模式的话,给我的感觉就是,我刚开始用 Linux 系统,你就建议我去做内核参数调优一样。。。

当然,也许正是因为我这样的想法,所以我到现在还什么都不会写。。。

#51 楼 @RainFlying 同意,设计模式不太适合新手看,代码写多了才有感觉

需要时间和功夫花下去,不可能一蹴而就

#9 楼 @hellomac 从 MVC 角度来讲,View 的数据应该都由 Controller 提供。这样 View 就不用写逻辑代码,只需要显示数据。

比如你需要给 Wiki 表单的 Title 一个默认值,那么可以这样写

@wiki = Wiki.new
@wiki.title="default title"

而不是在页面上面判断

感觉要系统的学的话把几本经典的书都看了,光看不行,还得边看边把书上的代码都敲一遍,自己要想想,简单的改一下,看是不是与你预想的的结果一样。

有本书叫“Patterns of Enterprise Application Architecture"里面有一张讲了"active record"是神马意思,同时还讲了其它数据源的组织方法。

#54 楼 @cxh116 说的不对啊,标准的 MVC 中 View 应该是 Model 的表现形式,所以数据不应该是由 Controller 提供,Controller 只是将 View 展示给用户

看了楼主的问题,我感觉我现在有很大的疑问,为什么 1+1=2?

#57 楼 @edokeh 嗯,是的,在 MVC 中,数据是由 Model 直接访问得到的. 但在 Rails 中,View 需要的数据,应该是由 Controller 获取,而不是直接在 View 层调用 Model 的层方法来获取. 咱们是基于 Rails 的 MVC,所以参考一下 Rails 手册的说明

http://guides.rubyonrails.org/action_controller_overview.html

For most conventional RESTful applications, the controller will receive the request (this is invisible to you as the developer), fetch or save data from a model and use a view to create HTML output. If your controller needs to do things a little differently, that's not a problem, this is just the most common way for a controller to work.

A controller can thus be thought of as a middle man between models and views. It makes the model data available to the view so it can display that data to the user, and it saves or updates data from the user to the model.

@lgn21st 此贴建议加精,理由如下:

  • 每个人在每个阶段都会遇到瓶颈期。
  • 集中讨论瓶颈期,可参考的也比较多。

#42 楼 @Ddl1st
很多书我也是在反复翻,看一次实在是不能全搞懂. #44 楼 @Rei 现在还是在看元编程,看看能不能多搞懂一些. #45 楼 @jjym 我觉得以我现在的程度,实在不适合学多门语言,至少要达到收放自如的程度才会去考虑. #54 楼 @cxh116 #57 楼 @edokeh 两人说的都有一定道理,我也需要好好想想了。

#60 楼 @Ddl1st 好的,讨论帖能够如此,我很乐意加精。

#61 楼 @hellomac 有没有看《Web 开发敏捷之道》这本书?这本是我的入门书,在这本书的范围内就可以写出基本的 CRUD 网站,比如博客。其他的书是辅助怎么把程序写得更好。我翻过别的入门书觉得都没有这本好,但是这本书中文第 4 版翻译很烂并且落后一个大本版,要追新就要看英文原版了,初学阶段不知能不能啃下来——我觉得现在中文确实缺乏一本入门书。

具体到 Wiki.new 这种代码的疑问上,确实是基础缺失的问题。专业出来的人是从底层学起的,计算机电路怎么判断逻辑,数据是怎么储存的,然后学 C 语言这种贴近硬件的语言,感受怎么控制计算机计算逻辑,分配内存。培养了控制计算机的语感,然后才到开发应用。如果有打算在编程这条路走下去,有必要补一补。我看的是学校的教科书,不知道有什么更好的书。

还有,你可能在读 Ruby China 的源码,我建议现在先不要读。我都没阅读过大部分代码,只在维护的时候去找相关代码。现在应该自己动手做些简单的目标,比如留言板,然后部署到线上。

#61 楼 @hellomac 有没有试过多学习几门语言,不用太深入,了解语言的一些特性。然后发现很多自己不知道的东西,然后学习发现不知道的东西

#63 楼 @Rei 早期看了中文的第三版,后来补看了英文的第四版,也算是我的入门书了吧. 但当初看的时候感觉懂了,后来实际操作的时候因为版本等种种原因,还有很多还是很迷惑的地方,比如那个strong_parameters,这个还需要钻研下. 可能大家有基础的多,很难遇到像我这种完全的初学者即使囫囵半片的啃过教材仍然半懂不懂的情况. 个人觉得像 C 那样接近底层的语言,本身就很反人类,迫使你像计算机一样思考,其实和 Ruby 的思想是背离的。甚至说:Ruby 之类的类型之所以还存在,是不是因为技术上的瓶颈,而非我们编程需要呢? 起初接触完全是兴趣,甚至说现在也是兴趣,不仅仅是工作需要。保持探索世界的好奇心。

#64 楼 @hellfig 这个暂时没有,我现在对 Ruby On Rails 还算是比较有兴趣,无暇旁顾。

#65 楼 @hellomac Wiki.new 在我理解无论在抽象意义还是底层意义上都是需要的。例如到柜台填一张表,不是说“我要填一张表”就完事了,而是从存放表单的抽屉(Wiki)里面抽出一张表(.new),你才知道这张表有什么内容,需要填什么字段。计算机编程就是充满了大量的声明,无论声明的是逻辑,还是数据,还是结构,因为计算机什么都不懂,需要人来指挥。

C 是贴近硬件,但已经比汇编语言抽象了很多,曾经 C 是作为高级语言的。程序员的工作就是处在人类和计算机之间做翻译,不然的话打开 Word 写一份项目需求交给别人实现不是更人性化?

觉得某个语言好,是因为在解决某个问题的时候它的表达能力恰好很方便,解决不同层面的问题时就不一定觉得 Ruby 很好用了。

驾驭计算机,而不是和它作对。

#67 楼 @Rei 你上面说的我很赞同,除了最后一句"驾驭计算机,而不是和它作对". 我一直当计算机为自己的伙伴 (恋物癖?),我们是合作的关系,而不是谁驾驭谁. 我们做很多事情,可能更需要的是"协同",而不是"指挥".或者说,"指挥"也是"协同"的一部分. 可能说的有点酸,呵呵。

#68 楼 @hellomac 你这话真感性,但我觉得毫无用处。不知你组装过台式机没有,没有的话就去找一台拆解,然后再装起来,看看这个伙伴的底子是什么,想想要怎么让它干活。只把脚伸进泳池是学不会游泳的,打球要努力把它打破踢烂。

#68 楼 @hellomac No No No , 不存在合作关系,计算机仅仅是工具,跟一把锤子一样。你用锤子敲钉子,锤子跟你不是合作关系...

#69 楼 @Rei 我自己的第一台电脑就是亲手组装的,虽然花了很长时间. 情感真的毫无用处吗?@ShiningRay 这么说,你也这么说。无论是计算机还是网络,并不一定是冷冰冰的,是吧? #70 楼 @blacktulip 我知道它是工具,但我不希望它仅仅是工具,如此而已。

#71 楼 @hellomac 你想太多了... 回到冰冷的现实中来吧 o_O

#71 楼 @hellomac 之所以提醒你感性无用,是因为从你帖子看得出感性已经阻碍你了解计算机原理了。编程就是个纯理性的活。我喜欢我手头的硬件,我也喜欢我开发出来的软件,我也有个人的编码喜好,但这跟怎么编程是两回事,软件纯粹是人写出来的,硬件也是人研发生产出来的,做开发要把心态放到生产者的角度。

或者说楼主是畏难,用情感做借口拉开和计算机的距离。分配内存,变量声明这些知识了解底层原理之后都不会有太大疑惑,学习新语言的时候都是看它需要声明到什么程度,能自动化到什么程度。遇到难理解的部分,就说它不人性化,那很遗憾,能理解人的意识的计算机还没开发出来。

#74 楼 @Rei #人艰不拆 ...

#67 楼 @Rei 我倒有不同意见。页面的 form 字段未必一定要对应到 table 的字段.. form 提交一些零散的值,由后台去分析和组合。
抽出一张表的确一眼就可以看出要填哪些,但在表单中 给你一个@wiki, 你还得去查 Model 有哪些 field, 然后一行行的写 input. 跟 @wiki 这个对象关系不大。 之所以有这种 controller 里 new 对象的习惯,是一些便捷的约定而已,通过 @wiki, form_for 便捷方法可以帮你猜到表单的 action, 同时将字段放在同一个命名空间 wiki 下,这样提交后,create 方法就很简单。 rails 将表单与 model 紧密关联,的确便于开发。但仅仅是便捷而已。没那么多"意义" 什么的...

#76 楼 @nickelchen @Rei 说的抽一张表指的是 controller 里面的 @wiki = Wiki.new

#76 楼 @nickelchen 可以这样写

<%= form_for :wiki do |f| %>

或者

<%= form_tag wikis_path do %>

甚至

<form action="/wikis" method="post">

都行,只要知道自己要什么。

@wiki 的作用:

  1. 设定 :wiki 这个 param scope
  2. 设置默认的 action 地址
  3. 设置默认值,或者错误时候 render 的值

#71 楼 @hellomac 不不不,感情是好的东西,人不可能没有感情 但是过于感性就不能集中自己的注意力和精力去解决问题,因为你会被多余的感受所干扰。 大家都知道男性的思维模式是“解决问题”为导向的 刨除杂念,不要在意一时自己遇到瓶颈或怎样,享受自己解决问题学习新知识的过程即可。

透过计算机,透过你开发的软件,你为你的用户提供服务的时候,你可以在设计中倾注感情,传达给用户。但是计算机是不会理解这些的。同时,你真的要要理解机器,就要像机器一样思考。

#78 楼 @Rei 我帖子讨论的是在 controller 里的 new 方法中,@wiki = Wiki.new 是不是有那么重要的意义。以及不使用 @wiki = Wiki.new 就不行,或者违背了某些重要的意义..

#74 楼 @Rei 其实心态并不是很理性的东西。追求"代码如诗"恐怕也是很多人的目标. 现在很难说谁对谁错,毕竟经历不一样。我会好好借鉴前辈的经验.路都是自己走出来的,也许遵循前人的脚步是一条捷径. 至于说不人性化,只是个人的一点感触罢了,我只是说出我现在阶段的认识,可能并不正确,但我现阶段就是如此,也许到以后才会有略微正确的认识。这只是成长阶段一个必然阶段吧! BTW,我不觉得表达自己的感受和"畏难"之间有任何必然联系。以后也许我会研究底层原理,也许不会。无非是在衡量时间成本与收益平衡,并不是说,懂底层就高级了,就啃钻研了。我这么说估计又会得罪不少人,并不是所有人都容得下不同意见. #75 楼 @blacktulip 你应该发现我忽略了很多人的回帖,你也应该知道为什么。

#79 楼 @ShiningRay 追求"结果导向"与性别没有直接的关系。一切强调性别差异而不指出必要性的行为都是耍流氓. 不管是学习还是生活,可能都会遇到瓶颈,发帖求问无非是希望更快的解决。我觉得说出来要比闷在心里更好些. 享受学习,享受生活,你我共勉。

@blacktulip @Rei 女人在表达某种情感的时候千万不要跟她争执。或者劝啊什么的.... 😄

#80 楼 @nickelchen 可能楼主也有这个疑问吧,为什么要 new 一个 @wiki 以及它后续拿来做什么,问题我理解得不是很清楚。

#61 楼 @hellomac 我碰到瓶颈就会去学点新东西……刚学 C++ 的时候弱到连 iterator 都弄不清楚到底是干吗的……然后学了下 Python……一个 for loop 就把这概念搞清楚了…… 后来做 Web……上来就框架也是各种一头雾水……后来仔细研究了下 HTTP……发现根本就是很简单的东西……自己写了点纯 CGI 程序……再去理解 WSGI 的实现就容易多了……最后用框架才能没压力 指望完全避开底层那基本上只能迷糊下去了……

个人对这种野生的程序员很畏惧,因为,一,会把代码搞的“又臭又长”,二,完全不理解测试的含义,三,如果不擅长沟通,会成为无法理喻的那个人。 建议:一、多用休息时间搞一些自己的小项目,小插件,gem 等,提高对项目的理解,不要成为会吃饭的代码机器。 二、一定要有一个自己的技术博客。 三、不要理会别人如何看你,听从自己内心的声音,如果你觉得 Rails 开发已经到达极限,无法在短期内突破,那么可以换换职业发展的思路。

#86 楼 @liwei78 你这话我就不爱听了,就算有计算机基础没有编码经验,没有理解面向对象的含义,也没看过设计模式,一样会写出 又臭又长 的代码。

重点在于思考: 为什么别人的代码那么干净利落,而我的结构复杂,而且非常的长,什么逻辑都塞到一起

#88 楼 @RainFlying 个人看法,我不喜欢 rspec,入门教程应该用默认组件,而且测试占的比重太大。不过如果《Web 开发敏捷之道》没有好的翻译的话,中文最新的教程就是 Rails Tutorial。

楼主,我看你的具体问题牛牛们都给你回答了. 我想关于系统,是不能要求每一种地方一点不差的都系统了解,只是以不同的角度和目标上去丰富去系统。不懂的东西太多,像大海一样多:),对谁都一样,永远都是一样。所以你必需有目标,这样就知道该选择先去看什么后去看什么,这个我觉得是很重要的。另外,所谓"系统", 就是无数细节的积累,有序的积累。

#87 楼 @Ddl1st 你的回复我没读懂,我的话不爱听,然后用自己的话转述一遍,就爱听了,是么?,。。。。另外,思考是人人都会的,问题是我们怎么解决?我给 lz 提出了 3 个建议。

#91 楼 @liwei78

个人对这种野生的程序员很畏惧

事实证明不是只有所谓的 野生的程序员 写的代码不堪入目。

还有就是我跟楼主一样什么都不懂就开始学 Ruby, 很显然我也是你口中的 野生的程序员

刚刚大一做 web 的时候和你一样,虽然实现出来了,但是有些代码始终还是搞不懂,也不知道具体的实现原理,这貌似就是一个认知的过程,等你做多了,看多了,就会快速入门,然后一步一步提升。 千万不要泄气,坚持就是胜利。

堅持,多練

#42 楼 @Ddl1st 请问如何学设计模式呢? 面对各种高深的概念,自己却无从下手,很难感受到设计模式的优点,以及如何应用。 请问有没有很好的设计模式的代码例子可以练习?最好推荐一下类似的资源。

#95 楼 @crazyitman 人家说学模式的最高境界就是心里没有模式,随意而用 (好高的境界.. 😏) . 我觉得如果当细细看过一遍某模式之后还不明白好处的话,那说不定有可能你现在还不需要去想模式的事,就是你并没有真正遇到需要那个问题的情景。不如回过头来自己写写东西,一点一点加功能中要求自己把程序结构不断组织的更好,到遇难题了组织不通时,就得那个问题来看看相关的所谓的模式,也许那时就有完全不一样的感受了,就会了。模式是解痛的,痛过才明白。 (我文艺了~>_>)

#95 楼 @crazyitman http://book.douban.com/subject/2334288/ 通俗易懂 作者的大话系列都非常赞

其实我让新手看设计模式只是让让他们在写代码之前会考虑怎么组织自己的思想,我刚学的时候我就挺纠结这个问题,问身边的人也没有给出满意的答案。当时的第一感觉就是要把方法写短。在之后的学习中,才意味到什么叫面向对象,把代码中的结构分离,在之后遇到了设计模式,使得对需求的改动对原有的代码不会造成任何影响。其实这对我来说最大的好处是更方便别人维护。我不喜欢我写的代码,别人看到之后有种想辞职的冲动。

#96 楼 @roadt roadt 文艺着,并且深刻着,内功一定很深厚!

#97 楼 @Ddl1st 用挑剔的眼光去看待自己的代码,不断的优化自己的代码。设计模式只是途径之一而已!

#99 楼 @crazyitman 经常优化自己代码,是好事,但是在优化的时候有没有忽略重构的原因?

其实我的理解设计模式是对面向对象的细分。如果你对面向对象有很深刻的理解,但是看设计模式对编程还是有帮助的。

我以前学 Ruby 的时候我就在想为什么要有那么多的类,写在一个类里面不就行了,然后是方法,为什么有那么多,我应该怎么去理解这种含义。当时也不知道上哪去问,只能自己慢慢摸索,后来就慢慢体会到了 duck typing 应用到实际的代码中。其实这个在设计模式中会体现出来的。

此贴我没有放大化设计模式的学习,我只是说看下了解下概念对学习有帮助,没说你一定要学。我也是在学习当中才发现以前为什么不早些看到这个。

代码出现重构可能有以下几个问题:

  • 逻辑有问题
  • 性能有问题
  • 设计有问题

逻辑和性能有问题当然可以很方便去改. 设计有问题就影响到很多快的功能,重构的就不是这段代码,而是所有的。

#100 楼 @Ddl1st 感谢你耐心的指导。 自己还是个 ruby 初学者。以前照着 Ruby on Rails Tutorial 敲代码,实现一个个功能。 就在此时此刻,自己尝试不依靠例子,自己去构建一个自己设计的网站,脱离了拐棍,发现自己是寸不难行,不知如何把 MVC 各个层关联到一起? Rails 做了好多你不所知的工作,学会了 Rails 开发网站一定很方便,效率一定非常高。(初学者很蒙) 简单学习了一下 Node.js,它很清晰,Http 协议说的很清楚,自己能够看懂。 Conventions in Rails 对于初学者来说,感觉莫名奇妙,就好像是神奇的魔法。 我好想,能够理解好 Rails,可以在开发的时候应用自如。可能现在自己还是入门级,不能理解 Rails 的精髓。

匿名 #103 2013年09月07日

@hellomac 初入 web 开发时有同感,之前是学习和使用 javaweb 开发。javaweb 开发和 ruby on rails 给我不同的感觉就是,java 在工作上不需要自己掌握很多问题,因为分到底任务就那么一小块,自己也感觉就是一直在打杂工。认识 ruby on rails 后,感觉很多方面的知识都是自己可以去涉及到,还就是包括那些 html,css,js 这些。这样感觉开发也就越有意思,再后来就是来社区看大牛们的帖子。@huacnlee的如何从零开始学会 Ruby on Rails 让我学习的很多,也是一步一步的做着。感觉自己在 ruby on rails 开发上可以继续下去。

#85 楼 @Kabie 把握好度很重要. #86 楼 @liwei78 一概而论如同语言之争无意义. #90 楼 @roadt "所谓"系统", 就是无数细节的积累,有序的积累.",高端大气上档次. #96 楼 @roadt "痛过才明白",低调深刻有内涵. #100 楼 @Ddl1st 现在对于各种设计模式理解的还很初级,我判断设计出问题的一个现象就是"牵一发而动全身",当你修改其中一个功能的时候,要修改很多甚至是不相关的模块,说明你搞错了. #102 楼 @knwang 其实很多有基础的人,他们经历了一个很艰难,或者说很痛苦的学习过程后,想当然的认为后来者也需要如此,而并没有去思考那些过程真的值得吗?或者换句话说,我能不能简化这个过程,让后来者更轻松些?技术可能真的很复杂,但化繁为简不就是技术人员应该做的工作吗?比如"Tealeaf Academy ",有机会一定要尝试. 受兴趣驱动学习有一个好处就是当你看到一个陌生概念的时候,你可以停下来,搞清楚再上路。对新手来说,真的不必那么急."贪多嚼不烂"会为今后的学习埋下更多隐患. 可能我迷茫过,但我从未失去信心。坚持就是胜利. 也许现在还不会经常有"模仿智者"的机会,但事在人为.:) #103 楼 @TREE 我觉得成就感是保持兴趣的因素之一,现在社会分工越来越细,注重协作的同时忽略了个体的感受。我喜欢 Ruby On Rails 这种打破细致分工可以让我全盘掌握的感觉。

#104 楼 @hellomac 可能你觉得自己是那个 special one,其实你只是 one of ...不要浪费时间去回复啦,搞一个 gem 或者某个开源软件的插件吧,对你有益。

对于这个话题,我只想说的是“你尽力了吗?”

我是希望 lz 真心的把 ruby 和 rails 当成职业,这样你会享有它的回馈。技术范围内的问题不是问题,态度才决定一切。不要生气。

为什么要 new 呢,你要把他生出来才能用呀。 当年理解了 2 个知识点自己才觉得入门了,一个是数据类型,一个是面向对象。。。

好好学习吧,我也是新手

我觉得你要有耐心,把基础打牢,不然,越到后面,越会发现问题

一开始学别看 元编程 , 太深了。

代码编写的能力,是随着代码量的积累而慢慢提升的,想一下子吃成胖子是不可能的,跨过了这些,以后学习任何语言或者哪方面的技术,都会变的相对简单!另外,Web 开发敏捷之道是本好书,多看几遍,不一定所有的东西都看懂,有些东西以后接触了就懂了!

多看书,看牛人的 blog,多动手

匿名 #114 2013年09月11日

@crazyitman 大连的吗?在大连有 Ruby 相关的工作吗

大概看了一下楼上各位的回复,很多人耐心解答,让人觉得温暖。

不过恕我直言,楼主更享受在这里看别人回复、回复别人的同时顺便发发牢骚,不愿意把那些时间用在看书写代码上。行动力弱,给再多建议也没治。

坚持下来就好了,遇到问题并用自己的方式解决它,解决的问题多了,你会发现没有想象中的那么困难

做哪一行都有瓶颈期。都得熬,熬耐心,熬毅力。。。这不是说而是做,很多人都熬过来了。

也白了少年头。。。。。。。。。

说的挺悲怆,tmd 熬出来的人赚的也多呀。。。。。滋养多少高富帅宅男。。。

#114 楼 @TREE 我了解的不多,我原来那家公司(人员 4000+)据我了解只有一个项目组在用。

匿名 #120 2013年09月14日

@crazyitman 确实不多,或者是一些公司的一些项目用上一点相关技术。

去 Rails 化~ 单独看看 Ruby ~ 有时候看看书 想想为什么会这样 试着把书中的代码写成自己能理解的伪代码~

@crazyitman @TREE 大连,一眼望去,都是 Java 做外包的…… :(

匿名 #123 2013年09月16日

@dyingbleed @crazyitman 纯外包对新人成长有很大的困扰,不过最近在坛子里研究 Ruby 的大连朋友也有好几个呢,有空大家一起聊聊。

#123 楼 @TREE 所以哥们儿北漂啦!哈哈~

匿名 #125 2013年09月17日

@crazyitman 加油!

匿名 #127 2013年09月17日

@crazyitman 嗯!

看了你的 topics,起点很高呢。先 html——》javascript——》——》ruby——>rails,会不会好点。ruby 看下语法,基础知识,面向对象,设计模式,不懂不要紧,先硬头皮读,后面会慢慢想通。

新手飄過,共同努力....

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