继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

成长路径:送给准备入行的同学!

申思维
关注TA
已关注
手记 28
粉丝 422
获赞 3787

先跟大家说一个事实:

我公司招聘(小初创公司 )的时候, 曾经一个星期收到一千封简历: 600 IOS, 200 安卓, 200 美工。 95%都是应届生。

前些天跟几个培训机构的朋友聊天, 大家也纷纷表示, IOS现在工作不好找。

所以, 各位同学务必记住: 全栈开发才是趋势, 一人多能才是出路!

  • 如果你只会切菜, 你就是打杂的。
  • 如果你不但会切菜,还会煎炒蒸炸,粤菜鲁菜都精通,你就是大厨! 老板离不开你!

下面是我总结的全栈开发的路径:(按照顺序来看,提及到的具体技术,请大家自行google 官方网站来学习。)

HTML , CSS

互联网开发的本质是web开发。 这个是基础中的基础。

不要以为android, ios中用不到CSS。 现在越来越多的app已经被页面的改动拖死了。 微信,QQ,京东都开始越来越多的使用 native 壳 + webview了。 所以, 大家务必把 CSS 学好!

时间: 20分钟看概念。(主要是看CSS的各种属性), 然后自己动手写上3,5个静态页面。 也就熟悉了。

javascript, jQuery, jQuery的各种插件。

javascript的语法非常简单, 5分钟入门。 (基本上你学会了for, if, try, 声明数组, hash, 以及 this的用法,也就没了)

jQuery 可以认为是javascript的人性化改版。 好多难用的,难以理解的函数,都被改造成了对程序员和蔼可亲的函数。 这个非常棒。

jQuery 操作DOM是重点。 这里建议大家多看看书, 30分钟看书,6 个小时练习。

jQuery Plugs

光会jQuery是远远不够的。 我们在实际的工作当中,是要为web页面添加很多功能的。 所以, 要使用各种各样的插件。

下面是我回顾过去多年的项目经验,梳理出来的最常用的若干组件:

  • 上传图片 jquery-file-upload

  • 弹出窗口 modal dialog

  • 轮播图 slider

  • 表单验证 form-validate

  • 树状菜单 jstree

  • 图表 highchart

  • 时间选择器 datepicker

  • 标签页 tab

  • 提示框 tooltip

  • 快捷编辑 inplace editor

  • 超级强大的下拉框: select2

  • 地图插件: amap 高德地图。 bmap 百度地图

  • 标签 tag

  • 动画 animation

  • 限制性输入框 masked input

基本上,只要大家把上面的这些插件都“熟悉了”(也就是每个都做过demo), 那么做项目的时候, 老板就会对你很放心了。 也许你的算法不好,没关系啊,能解决问题就行。

数据库基础:SQL

很多参加过前端培训的同学, 我发现都是不懂数据库的。 所以我把它单独列出来。

数据库就用 Mysql. 会用之后, 发现 sqlite, postgres 等等都是一样的。

基本功:

  • select ... where .
  • update
  • insert
  • delete
  • 创建,删除数据库,
  • 创建,删除index
  • foreign key 与 1对多,多对多的关联关系,以及 join.

基本上,把这些了解过了, 你对数据库也就能上手用了。(注意, 务必都要手动敲一遍)

同时, 要熟悉 安装mysql, mysql GUI 客户端的过程。

一门后端语言, 比如Ruby

后端语言, 包括 Ruby, Python, Java, PHP, .NET等等。

这里我推荐Ruby. 它非常优雅, 简单。 不花哨。 同样的事儿, Ruby 语言2行代码, 用Java写的话,你的先写3个Class再加一堆getter setter.

学习语言的基本功, 包括几个方面:

  • 数据类型, 以及各种转换。
  • 常见的 for, if-else, try-catch
  • this/self , 作用域这样的高级特性
    (指针啊, static non-static, 元编程这样的特性,可以边做项目边学)
web开发的框架, 比如Rails, Spring, Play.

框架跟语言不一样。

学习了语言,你会发现 你其实只能写个算法。 连GUI都做不了。所以,我们需要借助框架来写Web.

java世界中比较知名的有:SSH (Spring Struts Hibernate, 居然跟十年前没太大变化) 以及 Play这个借鉴了Rails的框架。 Python中有Django, Tornado, PHP中有Cake, ThinkPhp等等。

还是用Rails吧。 那么, 无论任何一个Web框架,都需要具备下面一些基本功能:

ORM(数据持久层)

让我们免于直接书写 select from 这样的语句。 有的同学问为什么, 当你见到100行的select from 的时候,你就会极度受不了这样的语法的。 Java中的框架叫 Hibernate. Rails中自带这个叫ActiveRecord.

处理路由。

Java的第一个web框架Struts,05年红遍了大江南北。 它被人最推崇的地方,就是如何把一个 "/some_controller/action" 这样的URL, 交给对应的controller 和 action 来处理。 Rails中叫router, 可以认为更加简单方便。

必要的表单辅助方法。

例如, <select> 标签,就是很复杂的东西。我曾经见到一个很著名的收费项目,没有使用表单辅助方法, 手写select标签, 写了8000多行。我都无语了。 COPY起来机器都卡。 而在rails中, 3行代码搞定。

良好的页面渲染。

比如JSP, PHP, 都是这样。 在Rails中,我们使用erb. 可以很方便的在controller中定义变量, 在view中渲染。 也可以把公共的页面提取出来, 然后被其他页面公用。

方便的单元测试。

当老板问起:“这个项目明天能上线吗?” 你的时候心是特别虚的。 但是,如果你有单元测试, 就可以先运行个命令(例如 $ rake tests)然后,告诉你的老板: “我们总共有300个单元测试, 通过了290个, 失败的10个不影响核心功能,我觉得明天可以上线”。 是不是就很专业?

数据库迁移

这个可能刚入行的同学很少听说。 据我了解,在python, java中都比较少见。 只在Rails中见到。 这是对于“数据库的版本控制”。

我们在团队协同开发时,最大的问题是: 数据库容易不同步。 比较low的解决办法是把 sql文件放到代码仓库中,然后有了改动随时更新。

最好的办法, 是把数据库的变迁,使用代码来表示。 这样的话, 别人下载来代码, 运行个命令, 数据库就是最新的了。

后端的组件大集合

下面是我梳理了过去十多年的项目,总结出来的最常见的web后端组件:

1. 分页

把结果集合按页显示。这个东东看起来常见, 实际上实现起来特别复杂。甚至专门有个论文: “分页设计模式”

在Rails中特别简单,使用 Karminari

2. 上传图片

后端处理上传的过程也极其常见:

  1. 处理request
  2. 保存到本地
  3. 生成各种尺寸的缩略图
    等等。

但是这么简单的东东在任何语言里面都很麻烦。

在Rails中, 使用 carrierwave

3. 上传图片到云端CDN

仅仅把图片上传到你的本地服务器还不够。 图片在北京服务器上,西藏的朋友访问起来是特别慢的。

最初 CDN只是极少数有财力的公司的专利。 现在越来越多的公司开始为平民提供服务了。 upyun就是其中一个。

ruby中的用法已经省略到几行代码了。 具体见 'upyun'的例子。

4. 发送短信

这个是最简单的技术。但是用的也最多。基本过程就是:

  1. 申请账号,充钱
  2. 添加个短信模板
  3. 使用代码向短信服务商发送请求。
  4. 短信就发送到了用户手机上。

任何语言都可以很方便的实现它。 具体的短信提供商自行搜索吧。

5. 所见即所得编辑器 WYSIWYG

图片描述
如果你的项目是 论坛,或者内容管理系统,那么就一定会用到它。

最著名的编辑器是 CKEditor。

虽然已经有人为大家做好了, 但是这个东东还是很复杂。

在Rails中使用的话, 记得用 'ckeditor' gem, 不要用 'ckeditor_rails' gem.

6. 发送 HTTP请求的包

虽然各种语言都有内置的发送HTTP请求的工具, 但是还是不如一些专门的第三方包好用。

Ruby中使用 HTTParty。

这些第三方包一定要满足几个特点:

  • 可以发送RESTful请求
  • 可以设置 timout等参数
  • 可以记录 log

7. 良好的日志工具: log4j, log4r

大家一定记住: 少用断点! 这个东东太low了。
一定要使用日志!

  • 断点: 每次都得人肉运行。 无法把信息存留下来。
  • 日志: 每次都会自动的记录下所有日志。 把信息写到某个文件中。

我们在生产环境中, 永远会使用日志作为调试bug的工具。断点就是个玩具。在开发的时候用用还行。

举个例子: 在上亿用户的应用中, 每秒钟产生的log就几百屏。这个时候是没有机会给你时间打断点,一个变量一个变量的分析的。

所以,在优酷,每天会产生一个G的日志。 有了问题,我们都会在日志中分析。

8. 要在恰当的时候使用配置项

很多初学者会忽略这个问题, 配置项,有什么用?

下面一些东西必须提取出来:

  • 调用的第三方的服务的域名
  • 常见的系统常量
  • 版本号等等

千万不要把我们的后台服务器域名 分散的写在代码中。 曾经有个项目, 请求了后台120个接口, 每个接口的域名都是 'http://yoursite.com/interface' ,如果它有个配置项, 就可以写成: SERVER + '/interface'.

同学们, 配置项做起来容易,收效也大,大家务必重视起来!

ruby中的工具叫: rails-config

9. 分析HTML

可能一般的项目会用不到。 但是一旦用到,就会用的特别多。

我们这个时候,要对XML, HTML做分析的话,就得借助工具。否则用语言自带的分析XML 工具的话,会特别复杂。

这样的工具要:

  • 支持 CSS selector
  • 支持 各种常见的DOM操作
  • 传统的XPATH也要支持。

ruby中的工具叫 nokogiri.

10. 普通登录 和 单点登录

普通的登录,就是在某台特性的web应用中登录。 这个在传统语言中特别麻烦。 Java中的框架之前交Acegi. 现在好像被整合到了某个著名框架中。

总之, 需要对数据库中的用户进行密码验证, 还要有注册,解锁, 发送邮件,忘记密码等功能。 还要记录最后一次登陆IP。特别复杂。

Rails中的解决方案是Devise.

单点登录, 是让一个用户可以在多个不同的WEB应用中登陆。 需要在目标WEB应用中都添加一些配置,然后搭建一个单点登录服务器。

单点登录特别适合把一个大项目拆分成多个小项目。我曾经成功的把一个项目拆分成了20多个子项目。 各个项目之间还特别独立。

Ruby 中的单点登录服务器是 ruby cas.

11. 定时执行的任务

例如: 我要在每天的上午十点 发送一个提醒邮件。

Rails 中这个组件是 rufu-scheduler,下面是这个脚本的例子:


scheduler.every '180s' do
  # 每隔180s执行
end

scheduler.in '5s' do
  # 5s时执行
end

scheduler.in '10d' do
  # 10天时执行
end

scheduler.at '2030/12/12 23:30:00' do
  # 在某一个详细的时间段执行
end

12. 延迟执行的任务

跟“定时执行”不同, 延迟执行的任务的特点是:

  • 不能马上执行
  • 不能立刻结束

常见的场景是: 我要发送一万封邮件。

如果一封一封的顺序发送, 那么估计要3个小时。

所以,解决方案是: 让十个或者更多进程(也叫worker)在后台发送邮件。每发送一个邮件,就是完成一个任务。 这十个进程每隔一段时间,就扫描一下任务表,看有没有任务要做。

ruby中的组件叫 DelayedJob

知道软件工程的知识。
  • 重构
  • 单元测试
  • 代码风格,代码的坏味道
  • 设计模式
  • 常见的实现模式

同学们, 对于上面的概念, 如果面试官问到你这样的概念时, 千万不要不懂装懂。 对于新手, 你说不知道, 显得诚实。 我做面试官时, 最怕对方说:“重构,我知道呀! 就是重新构造代码么”。 一旦对方让你说说 重构的常见“手法”时, 就懵了。

所以, 对于上面几个概念,大家务必有时间要多看书。多学习!

要知道自动化工具
常见的工具
  • java中的: Ant, Maven, Ivy
  • c: Make
  • Rails: Rake,
  • javascript: npm, grunt
自动化的部署工具
  • Ruby: Capistran
  • Python: Fabric
测试的自动化工具
  • Selenium : 专门测试Web页面的工具。 可以实现对页面的各种操作。
  • Appium : 专门测试App的工具。 原理同 Selenium . 把人肉的操作过程使用代码记录下来,然后重现。

这两个工具各位同学务必要学会! 然后在你的同事面前运行一下, 亮瞎他们的双眼。 ^_^

对于一些 持续集成的工具, 大家也要去学习(当然了, 要先学会单元测试,才能做持续集成)。 不过, 可惜的一点是,我无论在大公司, 还是小公司, 都没有遇到过做持续集成的朋友。 有些孤独。 侧面也反映出, 大家对于“实现代码” 和 “测试代码” 的平衡,不好掌握。

一开始就要学习的: Linux, Vim, Git

虽然这三个技术我放在了文章末尾, 但是它们应该在你学习的第一天就出现。

对于点亮 .NET 和 IOS技能树的同学, 你们可以继续用Windows/Mac. 但是对于Java, Php, Android的同学, 赶紧用Linux!!! 因为,最后,你们的程序都要运行在Linux上的。

推荐大家使用 ubuntu (读音 乌班图,而不是 优版图) 桌面版。 目前最高版本是 16.04 LTS。 这个是最广泛的Linux.

推荐大家使用 win7 + ubuntu双系统。 这样对于新手比较友好。 不要使用虚拟机,特别卡。

Vim

如果你开发的语言不是Java, Object C 这样的传统语言(需要编译), 而是 javascript, scala, Ruby, Python这样的动态语言,推荐使用VIM. 理由很简单:

世界上只有三种编辑器: Vim, Emacs, 其他。

同学们还是直接用Vim 吧。没那么花哨,极度好用。就是学习曲线略高。 一旦用上了,你身边的人看你敲键盘,完全是眼花缭乱的感觉。比鼠标流 效率高太多。

版本控制工具: Git

不要用SVN. 过时了。

更不要用 CVS, VSS这样 的工具, 更加的过时。

使用Git。 使用命令行。 不要用图形化的工具, 也不要在IDE中使用GIT。

下面是必须掌握的Git命令:

clone, add, commit, push, pull, merge, branch

具体的大家自行查看吧。

推荐唯一的一本书:《Pragmatic Programmer: 从小工到专家》

图片描述
作者是 敏捷宣言的两个创始人。 世界顶级软件专家。

这本书05年9月左右开始,引领了我过去十一年的技术之路。充满了大量的方法论和安身立命的内容。 大家务必学习。 我过去读了好多本书,很多书是我一年就可以翻完的(因为已经具备了相应的知识和丰富的经验)。但是,这本书是特别少有的让人每次读起来都有收获的书。

通篇没有几行代码, 都是文字,但是句句经典。

你要有自己的个人博客!

作为一个互联网程序员,你务必要有自己的博客或者个人网站。 比如 http://siwei.me 就是我最好的名片。好多朋友和机会都是从我的个人网站找到我的。

写技术博客很简单,你不需要长篇大论。 我每天写博客,无非就是把自己每天遇到的问题和想法记录下来。 一般来说不超过20行。 有的时候甚至就几十个字。但是它一旦被记录下来,你翻阅起来就特别方便。不需要去翻源代码了。

程序员的知识很复杂的,不是看几本书就够的。

软件开发不是一个特别系统的学科。 它的内容特别繁杂。 我梳理了过去5年我写的上千篇文章,发现工作中用到的内容,是一个大杂烩: 有app端,有H5端,有语言层面,也有服务器层面,有脚本,还有方法论,如何梳理需求,各种工具,等等等等。

所以,大家不要认为, 我学了一本书,(某某开发指南)我就立马是个前端开发好手了。大家不要把自己限定成 前端 或者 后端; 也不要对自己说我就是一个java程序员, 我才不学PHP呢。

你一定要做一个全栈好手,需要你做什么你就能顶上!

结语

没想到会写这么多,不过还有很多东西没能特别详细的说明。 一家之言,我的观点与市面上流行的不太一致。 但是作为行业老兵,我坚持自己的观点。

希望对大家有用。祝各位同学顺利!

打开App,阅读手记
265人推荐
发表评论
随时随地看视频慕课网APP

热门评论

用心写了,不像其他人,写个几行就不写了,就是为了积分,而且内容,呵呵了

写的挺好的,受益。谢过

觉得全栈工程师是好,但是怎么也应该先从一个方向主攻,深入了解后,再发展其他方向做全栈,如果每个都是皮毛,那全栈的意义就失去了。我就是个应届毕业生,我个人是这么觉得,毕竟术业有专攻,走好一步再走下一步,如果一开始就想着自己要做全栈工程师,可能最后丢了西瓜捡了芝麻。虽然全栈也是我自己的目标。

查看全部评论