• #44 楼 @jasl 才一个小时!!!我的面试都跨年了!!!好吧,算周期都有一周以上,平均两三周。。。

  • #42 楼 @shooter 哈,被你严谨地发现了,我是故意去掉了 require 'active_support/all' 以方便理解。

    其实写成 from <= to 这种形式就 OK 了,都怪我最近被面试题搞的编程思维太 OO 了。

  • #36 楼 @rasefon 详见 为什么我反对纯算法面试题

    看过这上面的分析,我相信你明白我为什么反对纯算法面试题了。原因就是纯算法的面试题根本不能反应一个程序的综合素质!
    
    那么,在面试中,我们应该要考量程序员的那些综合素质呢?我以为有下面这些东西:
    
    * 会不会做需求分析?怎么理解问题的?
    * 解决问题的思路是什么?想法如何?
    * 会不会对基础的算法和数据结构灵活运用?
    
    另外,我们知道,对于软件开发来说,在工程上,难是的下面是这些挑战:
    
    * 软件的维护成本远远大于软件的开发成本。
    * 软件的质量变得越来越重要,所以,测试工作也变得越来越重要。
    * 软件的需求总是在变的,软件的需求总是一点一点往上加的。
    * 程序中大量的代码都是在处理一些错误的或是不正常的流程。
    
    所以,对于编程能力上,我们应该主要考量程序员的如下能力:
    
    * 设计是否满足对需求的理解,并可以应对可能出现的需求变化。
    * 程序是否易读,易维护?
    * 重构代码的能力如何?
    * 会不会测试自己写好的程序?
    
    所以,这段时间,我越来越倾向于问应聘者一些有业务意义的题,而且应增加或更改需求来看程序员的重构代码的能力,写完程序后,让应聘者设计测试案例。
    
    比如:解析加减乘除表达式,字符串转数字,洗牌程序,口令生成器,通过ip地址找地点,英汉词典双向检索……
    
    总之,我反对纯算法面试题!
    

    以上是摘自该文章总结,我以为我在网上可见的 开源项目 都完全体现了上面所有要求,而这些都是来自我实际工程生涯中的长期结果,要算法有算法,要代码风格有代码风格,要需求分析有需求分析,要文档有文档,要重构有重构,就看面试官能否有水平 Hold 住。

  • #32 楼 @luikore 定量的技术容易被规则分析,但定性的艺术很难被分析,画家还是靠艺术修养比较多吧。好的艺术家必然是涉足多种领域的,但是对颜料的研究只是其价值体现很少的一部分。

    大师难求呀,很多人只好挑容易验证的标准来考核了。。。

    搞编程的,最多的是码农,其次是真正的工程师,稀有的就是创作出像 coffee script 这种级别的黑客了。

  • #30 楼 @fsword 经典。

  • #28 楼 @rasefon 本人作为一个工程师一直在做这种工作,请看我的 开源软件 ,我丝毫不觉得它们是次要的,画家对不必要的细节也会细致的刻绘,国外优秀网站都很注重细节。

    说到底,会算法(就是像这种面试)和会利用算法解决实际问题(你想想 Google Analysis 背后的技术吧)真的是两种能力。

  • #25 楼 @rasefon #24 楼 @camel

    毫无疑问,算法好的确实逻辑性会强,但是它只是占工程里的一小块。

    你们说的算法的好处这点无可厚非,但是请不要犯了和“大数据”这种名词一样忽悠的毛病,搞 Machine Learning 的和搞 Web 工程的是两个工种,多想想 github 的开源软件和 infoq 的实战文章被创造出来的最大来源吧:)

  • #21 楼 @rasefon 算法它的确也是实用的能力,但它只是数学模型,而不是工程模型。因为算法只是从工程中提炼,就像你不会因为 MongoDB 用了 B-Tree 而去为它买单,而是为它提供了良好的工程而买单。所以我以为用人单位对待面试者也应该如此。

    对于你举例的"业务逻辑密集型软件,比如各种 ui,金融软件等",如果你觉得它们只是单纯的体力劳动,我不赞同,只能说明你的经验太浅了,我以为两者兼备,而且智力投入更重要,这个从国内外网站的质量就可以看出来。国内对开源软件贡献的太少,而国外的开源遍地开花。国内的只会死板的逻辑性分析开源软件,最多打个补丁,而国外更多在于创造解决方案。

    所以对于成熟的软件工程师,比如三四年以上,我以为看 TA 如何解构分析 TA 之前做过的项目更为有益,或者就面试公司的实际工程问题,去考察面试者的经验和思路,以及迭代过程。

    #22 楼 @fsword 分析的在理。

  • #17 楼 @rasefon 但是我反对面试时过多的考察这种单向编码的笔试,而是应该结合业务来互动为主,当然这个得要求面试官有足够的驾驭能力。

    我最讨厌压力编码了,这就是变相的加班,把工程师当码农使。写程序其实是个创造性的过程,只有艺术家自己才能给自己压力,外在的压力只会导致堆砌垃圾冗余问题代码。

    #18 楼 @camel 写和理解是两回事(我个人觉得最重要的是结合业务能深入的理解),做学术写的代码和做工程写的代码也是两回事。这种只占软件工程里一小部分的算法,我觉得没必要拿出来太当回事。

    请问你写过的软件中有多少是需要你手工实现这种基础算法的,如果简单或有很强的应用,那为何我们写 Ruby 的基本就用不到呢,而是直接放到 Array#binary_search 就可以了呢。编写常用排序算法,也就是对不会实际工程的刚毕业的学生练练得了。

  • #13 楼 @rasefon

      第 2466 位会员
    ID: rasefon
    Name: Raw
    城市: 上海市
    公司: Autodesk
    Email: [email protected]
    Since: 2012年6月08日
    倍受大家喜欢的帖子
    
    Ruby 发个很好的 Ruby VM 的学习资料 13 人喜欢, 9 条回复
    数学 傅立叶变化的完美解释。 5 人喜欢, 6 条回复
    算法 相似图比较算法。 2 人喜欢, 2 条回复
    瞎扯淡 恒大威武!!! 0 人喜欢, 39 条回复
    瞎扯淡 关于 C++,关于 gc 的一些东西 0 人喜欢, 24 条回复
    瞎扯淡 分享一首非常赞的歌和歌词。 0 人喜欢, 1 条回复
    Ruby 无意中找了 ruby 语法的伪 BNF 范式,发出来给大家参考一下。 0 人喜欢, 4 条回复
    Ruby 2.0 respond_to?(x,x) 坑死人! 0 人喜欢, 4 条回复
    瞎扯淡 最近想到一个关于上传图片的问题。 0 人喜欢, 8 条回复
    Gem Ubuntu 下国内的 gem 镜像有问题。
    

    对于这种以关注 VM, 傅里叶,相似图,BNF 范式的人去写二分查找,红黑树,AVL 树等数据结构为兴趣的人,本人表示不需要解释。

  • 社会太残酷还是我太软弱 at 2014年01月03日

    在资本家眼里员工只是可以替代的商品而已,所以福利该争取的还是先争取。

    过去的就过去了,当学习人生和技术吧。年轻,一切都好,写代码的时候注意身体:)

  • #1 楼 @goinaction 从单独给这道题和我问的算法业务还真没看出来,就大部分应用层的 Rails 系统而言,真的不需要应用什么算法,当然这也不是说算法就不需要了解和掌握,它对你架构系统有好处。如果写一些底层库,可能需要那么一些算法,但是很多开源都有,而且也只是作为一个模块引入即可,所以应用层的开发人员只需要了解原理即可。

    #2 楼 @linjunhalida "手写二分查找代码"难度其实挺高的,在同样了解基本算法原理条件下,除非面试者提前背书,否则写的代码真的有 BUG。二分查找算法"虽然早在 1946 年就有人将二分查找的方法公诸于世,但直到 1962 年才有人写出没有 bug 的二分查找程序。",我觉得我们论坛大部分人都比不过那些大牛吧,何况也没人发明个厉害的基础算法出来,所以面试中的大部分实现我可以说就是和高考一样的性质,背书而已。

    本人不是算法大牛,智商也只是够考个三本学校而已,了解的常用算法最高层次也只有二分查找和 B-Tree 等相对直观的概念而已,其他高级的红黑树,优先队列等数据结构我可能就得花一点时间去明白其中过程。

    但是这不妨碍我写诸多 Ruby 相关开源软件统计分析引擎框架 statlysis 。就个人直观的理解,常用算法无非就是 CPU 和 IO 互换,或者发现里面某些规律,比如以下几种(数据挖掘和机器学习等排除)

    1. 各种树,无非是针对查找,删除,插入等组合优化。
    2. 各种排序,里面包含各种二分,三分,广度优先,深度优先等思想。
    3. 散列,只要知道映射原理就可以了,如果对 IO 有要求的,可以适当降低精度。
    4. 图论,这个 Web 开发一般还真用不到,我唯一用过的是 依赖排序
    5. 动态规划简单的就是理解为 Rails 里的各种组合和缓存嘛,哈夫曼编码也就是排个序映射一下而已,等等。

    以上可能有错误,望算法大牛指点!我分析的关键点是上面的都太数学了,是给 Knuth 等搞数学的人玩的,给那些写数据库,操作系统,网络等的大牛们玩的。

    而对于像我这样的类似 DHH 一样容易数学不及格的人直观的理解这些算法即可,也许我们更懂得直观的如何像作一幅油画一样把一个大型程序写好并模块化,依我看 Web 开发大牛 @huacnlee 也是属于这种人。

    #4 楼 @bhuztez 在理,算法的话,我们就阅读和使用为主,真的要实现那也是因为符合不了实际业务。

  • #8 楼 @wppurking 嗯,能顺利解决问题的技术都是好技术。

    混合语言是好事情,Ruby 这种脚本语言做数据处理肯定比 Java 方便多了。不过直接用 ElasticSearch 的 API 提供对外服务感觉像是把 MySQL 直接暴露在外网一样。。。不知道是否做了一层包装,还是我理解错了?

    对于数据源来说,statlysis 其实是包括了"复用现有 Model"和"独立设计业务相关 document"两种 ETL 方案的,这个可以见 README 的两个案例,ETL::LessonLog 和 ETL::ProblemLog 两个 Mongoid Model 就是类似于你这里的"独立设计业务相关 document"。

    我觉得 statlysis 采用 数据库 ORM,和 ElasticSearch 采用 Restful HTTP ,才是两种方案在 ETL 上的最大区别。

    。。。本来是想和大家讨论 statlysis 的,意想不到的是抛砖引玉出了与其他成熟方案的对比,很有收获:)

  • 目前待业正在找工作 ing,但是对比特币及其前景不太确定。

    @hpyhacking 可以兼职后台数据统计分析部分吗?个人有 基于 Mongoid/ActiveRecord 的 statlysis 统计分析引擎 经验。

  • #6 楼 @small_fish__

    Sphinx 是个独立的程序,它本身没有问题。但是提供给 Sphinx 数据源时可能要注意 MySQL 查询的索引了,或者你发个贴和大家一起讨论下吧:)

  • #4 楼 @small_fish__

    你能用 MySQL 可以 Handler 的数据量,Sphinx 一定可以,而且它也是分布式的,见 用 sphinx 轻松搞定方便管理的多节点过亿级数据搜索

    如果要用 ElasticSearch 的还是问 @wppurking 这些有经验的人吧:)

  • #2 楼 @wppurking

    ElasticSearch 确实很强大,它提供的 facets,让我想起以前用 Sphinx 里面提到的 facets,只是没想到可以这样活用!你的分析很对,良好的 DSL 查询是必杀技。

    我说一下 ElasticSearch 对于写 Ruby 的我和 statlysis 来说的三点不足吧,可能有失偏颇:)

    • 语言层面。相对于 Java 社区项目,我更偏向 Ruby, JavaScript, C/C++ 等社区的项目,毕竟 Java 社区自成一个体系,想进去能使用上大部分工具门槛比较高,于是我就放弃 Hadoop 了,不过理念可以借鉴。我会采用的解决方案是 MySQL,MongoDB,Redis,PostgreSQL,Sphinx 等。
    • 只能通过 HTTP 沟通。几乎所有统计需求都要一一在 ElasticSearch 重新生成一份,而 statlysis 可以很好的复用现成 Model 的,简单来说,更接近 ORM 操作。包括在展现数据时的条件查询和遍历。
    • DSL 集成。statlysis 是可以直接通过 DSL 查询配置语句的,只需要一行非常接近业务的代码即可。而 ElasticSearch 拆成不同的类,得自己去组织 ETL 和统计分析。

    个人觉得 ElasticSearch 最大的好处是它是独立的应用程序和解决方案,在稳定性上很好。而 statlysis 的目标就是面向用 Ruby on Rails 开发的中小型网站,当然 MongoDB 能 Hold 住的数据量,它也能 Hold 住,我目前的经验是十亿级别。

  • 《架构腐化之谜》随想 at 2013年12月30日

    #10 楼 @bhuztez 哈,不和你理论这个 G 点,我说的是它相对的在 Rails 网站中的技术难度排名(不要和我说其他框架或架构)。

  • 《架构腐化之谜》随想 at 2013年12月30日

    #8 楼 @bhuztez

    哈哈,“架构”这个词确实和“大数据”一样是忽悠人的:)

    我也和你理解的一样,真正的架构都蕴含在 HTTP,数据库,编程范式里了,而另外一端就是在一个项目里做细节性的编程。不过有些项目真的比较大和难,比如 12306.cn,两端得很深地结合在一起思考。

    人月神话说的”理解了数据之后,代码通常是可以丢掉的“确实没错,因为这里的代码指的就是业务代码,公司上下都理解业务,当然这代码就微不足道了。”数据“就是一种设计啊,它是我们好用的"家电"。

  • 《架构腐化之谜》随想 at 2013年12月29日

    #6 楼 @yfractal 嗯,所以代码就是写给有记忆限制的人类去读的,顺便让机器运行。但是人类不能和机器比如何去细枝末节地分析所有业务代码的程序语法树。

  • 《架构腐化之谜》随想 at 2013年12月29日

    #3 楼 @zeeler 在理,不过难得的就是马云如何拆,如何重构整个阿里集团的人力资源。

  • 双系统同步的问题 at 2013年12月29日

    #4 楼 @kenshin54 在理,之前解决了相同的坑。

    相关记录见 http://mvj3.github.io/2013/12/16/refectoring-code-at-sunshine-library-in-three-months/ "同步机制的范式转移"部分 和 http://github.com/mvj3/distribute_tree 项目。

  • 数据恢复了,虚惊一场 at 2013年12月29日

    RubyChina 这种讨论型论坛的数据量不大吧,每天备份一下就好了。

  • 《架构腐化之谜》随想 at 2013年12月29日

    #1 楼 @bhuztez 。。。那不是只能待在别人制定的框架之内了么。如果框架解决不了,那问题就难解了。

  • 友情支持一个!

  • 人类思维和软件工程学 at 2013年12月18日

    #2 楼 @loveky 已改 ,我也觉得这样会更好些:)

    #3 楼 @Rei 哈,谢谢提点,已在开头提示"原文地址排版效果更佳” :)

    本来讨论的地方就 Ruby China 一个大本营,所以也还是在这里贴一个,有更新我会同步。

  • 红宝石 大战 Hangman at 2013年12月18日

    #9 楼 @luikore 大赞,果断 star 和 fork!

    你写的数据结构内核比我的更精妙,不需要手工调整参数什么的。

    不过原理上我感觉是差不多的,上午我想稍微改写一下,发现自己原来写的难以维护,调了几小时无果后放弃了,以后有机会再弄:)

    #10 楼 @pepsin 加上网络部分后确实让人写代码的时候想脏 Hack 的成分会更多些,我后来不得已也是把 Source 类拆成了 Local 和 Remote 两部分了。写代码的过程已经被我记到 人类思维和软件工程学 的 混沌时代 这一段里了。

  • 红宝石 大战 Hangman at 2013年12月17日

    #7 楼 @luikore 我的树种在这里 https://github.com/mvj3/hangman/blob/48034eee7ec0c1167226984b512f99bf3cd07af5/lib/hangman/constants.rb#L53 ...

    该项目数据结构的核心基本就在这里了。但是我这里不一样的就是,不是正式定义里的包括分类数据和判断过程的决策树(我可能说错了哈,没做过机器学习方面的工作),而仅仅是作为 为访问优化的数据结构 提供给外部程序逻辑 用于对决策条件的不断收敛。

  • 海量日志分析方案 at 2013年12月17日

    #9 楼 @algking 正则解析是属于 ETL 这部分的流程吧。。。

    数据结构化之后,用 Python, SQL, R 等都可以分析的,用 Erlang 做数据分析还是第一次听说哈

  • 红宝石 大战 Hangman at 2013年12月17日

    #5 楼 @luikore 在理,我的 解题步骤 也算是没加缓存的决策树吧:)