• 北京面试所感 at 2017年04月16日

    哈哈。

    也不是不想写。只是觉得,一方面,我可能很难和全栈营的同学们讲清楚一些观点,因为这些观点大多是建立在一些技术经验的基础上的;另一方面,我也拿捏不好分寸,毕竟我并不了解全栈营的全部,又很容易把文章从针对全栈营的补充写成质疑或批判,那样就更不妥当。

    不过,如果以其他的角度简单写一些自己的看法和理解,倒是可以。

  • 北京面试所感 at 2017年04月16日

    通篇暴露出来三个大问题,我一一点给你:

    1. 对技术没有正确的理解
    2. 对自己的市场定位不准确
    3. 缺少正确的学习方法

    对技术没有正确的理解

    先从一个例子说起。

    可以大致了解到 ruby 的工作原理

    这句话,我不知道是全栈营里讲师的原话,还是楼主自己讲出来的话。

    我手下还是有全栈营里培训出来的人,几斤几两我非常清楚,所以我就简单问一下楼主:

    1. 你能讲讲 Ruby 中基本数据类型对应的内存模型么?
    2. 能讲讲 Ruby GC 原理及调优么?
    3. Ruby 里是如何实现 Symbol 的?
    4. 为什么说 Ruby 是动态、强类型语言?

    如果针对以上问题能讲出一二,我可以认为你大致了解 Ruby 的工作原理,否则请收回这句话。

    同样,

    全栈营给了我这样的计算机小白,节省了我最少 4 年的时间投入(大学计算机专业为例)

    这样的说法也是完全错误的。

    你有找计算机专业四年的专业课看过么?看过其中的多少?掌握了多少?

    大学里的计算机专业,四个月学两三门专业课,每一门专业课都要多读好几本相关领域的书籍,还要参考论文,最后还有考试和大作业,由整个院系和个别经验丰富的教授把关,从理论到实践,四年一直是这么过来的。 四年的学习,从数据结构、算法到数据库、网络协议、编译原理,再到操作系统、图形学原理,哪个没亲手摸过?

    当然,即使是用四年时间花在技术上面,要处理这么多的领域也必然有的放矢;但若只有四个月时间,那就真的和科班出身的相去甚远了。

    对自己的市场定位不准确

    首先,仅说北京的互联网公司里面,大公司的技术岗,面向 985/211 计算机相关专业 校招,批发价年薪 18~30 万;小公司的技术岗,面向从一本到三本的 计算机相关专业 毕业生,价格基本在月息 8000 起步。

    科班出身是硬门槛,科班出身意味着对技术的深度、广度有一定掌握,同时也具备一定的学习能力,能做到“越学越快”;若是没有科班出身,就只能用更强的实力跨过这道门槛。

    再说说企业对用人的要求,这个要求字面上很简单:

    • 有能力快速上手公司实际项目,推进项目进度,促进团队发展;这样的人对公司可以做出较大贡献,给大价钱
    • 或者,有一定的技术功底,有较强的学习能力,能够在一定时间培养之后参与到实际项目中;这样的人需要公司先投资一些成本才会有回报,所以本身给的价钱没那么高,而且在人选上会非常慎重

    所以以楼主现在的阶段来看,一万的月薪是不匹配的。论坛里有不少前辈,刚毕业第一份工作的工资可能还不到这个价格。我自己,毕业之前有过几年做项目、带团队的经验,毕业第一份工作月薪 7000(不过当时公司给租房子,算上房租就一万多了)。

    缺少正确的学习方法

    学编程,脑力劳动,不是越野跑、练体操,不需要什么肌肉记忆。

    程序员写代码时候,用的最多的肌肉就在双手十指上,键起键落,这就是肌肉记忆。

    但是,应该按下哪个键、应该写出什么样的代码、应该怎样组织结构复杂的代码,这些东西是人身上哪块肌肉能记得住的?

    必须是在形成肌肉记忆后在去补充理论知识

    如果是练健身,这么做没错;如果是学编程,那就闹笑话了。

    楼主也这样写到,

    就像学习数学一样,知道一个公式后,只有不断的应用,更换不同的应用场景,才能做到真正的理解和消化

    所以,这个学习过程为什么不能是“先了解概念,后进行实践,再修正对概念的理解,再次进行更好的实践”这样的良性循环呢?


    以上,话讲的重了点,希望楼主能不忘初心,也祝楼主能在北京找到满意的工作。

  • 去读个这方面的研究生。

    或者,

    给自己一些时间,系统学习一下这方面的网上公开课。

  • 分享一下开发心得经验 at 2017年04月13日

    大神我也想 Transfer 到英国去。。。

  • 《Rails Tutorial》这本书吃透 60%~70% 的时候就可以了。

    想要达到这个程度,需要把书里面的例子先重复做几遍,然后举一反三做点扩展的功能。

  • 继续请教:保证开发环境和生产环境的一致性,解决的又是什么问题呢?

    我的理解,这样做,通过保证开发与生产环境库、变量一致的手段,既方便了测试与调试,也降低了代码部署失败的风险,从而降低了运维成本,并为高级自动化的手段提供了更多可能。

  • 说到部署,我用过 Git Hook,Capistrano 和 Docker 来部署 Rails 应用。最近确实产生了一个疑问:如果我不拆微服务,那么用 Docker 部署 Rails 的优势和成本究竟有哪些?

  • 我只想要平静的生活

  • 无法启动 puma at 2017年03月22日

    贴一下我项目里相关的配置:

    deploy.rb

    set :bundle_bins, %w(gem rake rails sidekiq sidekiqctl)
    
    set :puma_rackup, -> { File.join(current_path, 'config.ru') }
    set :puma_state, -> { "#{shared_path}/tmp/pids/puma.state" }
    set :puma_pid, -> { "#{shared_path}/tmp/pids/puma.pid" }
    set :puma_bind, -> { "unix://#{shared_path}/tmp/sockets/puma.sock" }
    set :puma_conf, -> { "#{shared_path}/puma.rb" }
    set :puma_access_log, -> { "#{shared_path}/log/puma.log" }
    set :puma_error_log, -> { "#{shared_path}/log/puma.err.log" }
    set :puma_role, :app
    set :puma_env, -> { fetch(:rack_env, fetch(:rails_env, 'production')) }
    set :puma_threads, [4, 16]
    set :puma_workers, 4
    set :puma_worker_timeout, 30
    set :puma_init_active_record, true
    set :puma_preload_app, true
    set :puma_prune_bundler, true
    
    namespace :puma do
      desc 'Create Directories for Puma Pids and Socket'
      task :make_dirs do
        on roles(:app) do
          execute "mkdir #{shared_path}/tmp/sockets -p"
          execute "mkdir #{shared_path}/tmp/pids -p"
        end
      end
    
      before :start, :make_dirs
    end
    

    Capfile

    require 'capistrano/rvm'
    require 'capistrano/bundler'
    require 'capistrano/rails/assets'
    require 'capistrano/rails/migrations'
    require 'capistrano/scm/git'
    install_plugin Capistrano::SCM::Git
    
    # Plugins
    require 'capistrano/safe_deploy_to'
    require 'capistrano/puma'
    require 'capistrano/puma/nginx'
    require 'capistrano/faster_assets'
    require 'capistrano/sidekiq'
    require 'sshkit/sudo'
    

    你可以对照检查一下

  • 恩恩是啊。所以我才说是滚雪球,就是有了核心业务,越滚越大的意思。

  • 刚才摸索着配置好了阿里云的 CDN,发现比国内其他同类产品好用太多。

  • 根本不用这么复杂,只要能把握住技术的商业价值就有足够的机会盘活生意,接下来就是滚雪球、搞增长的事情;生意越盘越大,自然能吸引到优秀的人来加入。

    然而能做到这一点的 CEO 还是太少了,所谓“技术的商业价值”,如国内 BAT 等公司、国外微软、谷歌和雅虎等公司才是把这一点发挥的淋漓尽致。

  • 出一些书 at 2017年03月18日

    哈哈巧了,除了 Ruby 那几本书,其他的我不是正在读就是已经读过。

  • 非常赞同。

    CEO 会直接决定一个因素,公司发展的驱动力,是技术还是业务;进而造成两方面影响,研发结构与产品品味。

    如果是传统公司,IT 仅做业务支持,也就无所谓;如果是技术公司,这会直接影响到公司的命。

  • .......

  • 够大

  • 大哥语法错了... =。=

  • 要不去 FLAG 感受一下。。

  • 分享一下测试心得经验 at 2017年03月17日

    英文的没有问题啊~ 我先拜读、学习一下。

  • 这样需要配别的什么东西一起用吧,否则谁来处理前端资源优化、压缩的任务呢?

    我实在不想折腾前端,能省则省。

  • Turbolinks 的事件处理

    不能好好的写$(document).on('ready', function() {}),要写成page: change,后来又改成page: load,最近升级到 Rails5,还要改写成turbolinks: load

    然而前端是我的弱项,从一个坑跳到另一个坑里,天知道我经历了什么……

  • 当然,告诉了。

  • 我一路自学 Rails,看到这个东西的时候就知道不能用。。

  • 感谢!

    我之前写的确实不对,这次受教了。

  • 我先去参考一下 Homeland 的 Dockerfile。

  • 嗯那就是我道行还不够深,先把 Dockerfile 写对了,再考虑用进去。

    容器部署的调度工具我也是昨天才想到这个问题,脑子里转了一圈发现周围没什么好用的。至于提升运维能力,这得看公司发展,我自己心很大,但这不是我一厢情愿就能做成的事情。

  • 没有,只是用 Puma 起了多线程。

  • 是我没讲清楚。 我目前不用 Docker 是有原因的:

    1. 微服务的拆分与持续维护的成本,在我看来是不可估量的。
    2. 每次 Build image,会在 image 内部重新 bundle install,就有可能引起依赖软件的版本变化,就有可能引入未知的新的 bug,且排查成本较高。而这种 bug 在常规开发/部署的方式中几乎不存在,即使有也能很快定位到问题。
    3. 在企业中不能脱离人员架构讲技术。我可以自己用起来 Docker,但总有人不是那么熟练;不论是培训、技术转型还是后期维护都会有成本,这种成本现阶段是完全不必要的。
  • docker 也有 docker 的成本,业务没那么复杂的时候,Docker 有点大材小用。

  • 上面那段 nginx 的配置在 development 环境中如何体现?