先跟大家说一个事实:
我公司招聘(小初创公司 )的时候, 曾经一个星期收到一千封简历: 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, 元编程这样的特性,可以边做项目边学)
框架跟语言不一样。
学习了语言,你会发现 你其实只能写个算法。 连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. 上传图片
后端处理上传的过程也极其常见:
- 处理request
- 保存到本地
- 生成各种尺寸的缩略图
等等。
但是这么简单的东东在任何语言里面都很麻烦。
在Rails中, 使用 carrierwave
3. 上传图片到云端CDN
仅仅把图片上传到你的本地服务器还不够。 图片在北京服务器上,西藏的朋友访问起来是特别慢的。
最初 CDN只是极少数有财力的公司的专利。 现在越来越多的公司开始为平民提供服务了。 upyun就是其中一个。
ruby中的用法已经省略到几行代码了。 具体见 'upyun'的例子。
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呢。
你一定要做一个全栈好手,需要你做什么你就能顶上!
结语没想到会写这么多,不过还有很多东西没能特别详细的说明。 一家之言,我的观点与市面上流行的不太一致。 但是作为行业老兵,我坚持自己的观点。
希望对大家有用。祝各位同学顺利!
共同学习,写下你的评论
评论加载中...
作者其他优质文章