不一样于某些“难于上手、难于精通”的职业,前端这一岗位就像暴雪公司的游戏设计同样:“易于上手、难于精通 ”。前端
前端技术的“易于上手”致使它在某些技术人员那里不受待见。他们认为HTML与CSS根本都不是程序语言,甚至认为JavaScript是一种功能不全的玩具型语言。因此直到我几年前毕业的时候,大学都没有前端相关的课程和专业。而市场对前端工程师的需求又很大,学校的输出跟市场的要求没有对接上,因此每每出现学生找不到工做,公司又招不到人的现状。node
一个库是一系列对象、方法等代码,您的应用程序能够把这个库 “连接 ”进来。这个库起到了重用代码的做用,为您省下了重写这部分代码的工做量。git
而一个框架是一个软件系统中可重用的一部分。它可能包含子程序、库、胶水语言、图片等一些“资源”,这些资源一块儿组成了软件项目。框架不像库,可能包含多种语言,某些功能可能经过API的方式让主程序调用。因此框架是一个更加灵活和宽松的名词,在具体的情景中,它可能指一个库、多个库、脚本代码,或者多个可单独运行的子程序的集合。程序员
在出现一些热门框架时,建议开发者先去了解框架的建立初衷,合理使用,而不是盲目收集。web
7、向移动端转型技术是服务于市场的,在市场发生变化的时候,若是开发者不能顺应变化,就有被淘汰的风险,毕竟不少开发者所服务的这个岗位诞生都不到十年,消亡可能也会在十年以内发生。对于目标是全栈工程师的人来讲,技术能力更是多多益善。面试
风投在评估一个创业项目是否会成功的时候,有一个指标就是创始人是不是本身产品的目标用户。若是不是,那产品颇有可能会失败。数据库
在大公司,一些工程师士气低迷每每就是这个缘由,成功来得很慢,失败也是。由于你们惧怕失败,因此想把产品调整得天衣无缝才发布。可是世界上成功的软件都不是完美的软件,而是在合适的时间发布的、刚刚够用的产品。若是它能活下来,在后面的版本中,它才有机会愈来愈好。npm
《精益创业 》中有一句话:“客户需求只有在实际使用中才能辨明,再多的前期调研也只能发现客户认为他们想要什么,而不是客户实际上想要什么。所以在不了解客户真实需求的状况下,只会多作多错。”编程
iOS原生App
iOS原生App开发的技能树相对比较新,须要学习Objective C这门语言,以及Xcode的一些操做方法——主要是sto ryboard,以及各类官方类库的使用方法。它带来的收益也很高,对于独立开发。AppStore仍然是地球上最好的软件市场,对于团队,在将来5年都不会缺乏对iOS开发者的需求。json
Android原生App
使用Java编程,若是有Java编程经验,Android原生App是最好的选择,由于用户量和用户比例都在稳定增加。
WindowPhone原生App
如今用户量还不多,除此以外也不知道如何评论… …
WebApp
技术是最简单的,传统前端开发的技能树能够无缝移植,包括 HTML5/CSS3/JavaScript等。应用场景包括浏览器中打开的WebApp、微信中的页面,或者混合模式App。WebApp的好处是自然无缝移植到全部支持Web标准的平台——甚至Kindle。
此外,对于中国开发者来讲,微信公众号也是一个巨大的平台。之因此提到微信,是由于微信这个平台在中国的覆盖率几乎跟Android和iOS加在一块儿同样多,并且微信也有比较成熟的支付方式。
混合模式App(Hybrid App)同时使用Web技术与原生程序语言开发,经过应用商店区分移动操做系统分发,须要用户安装使用。就像混合动力汽车使用汽油和电力两种动力同样,混合模式App使用两种技术制造。
混合模式App对于用户来讲跟其余App同样,须要去苹果AppStore或者Android应用商店下载。因此App须要对应的操做系统平台的技术,好比Objective C或者Java制做总体框架。App启动后,它的所有界面或者部分界面中,使用网络视图(WebView)技术来实现。WebView能加载显示网页,能够将其视为一个浏览器,它通常使用WebKit渲染引擎加载显示网页。
混合模式App一些经常使用的优化方法以下:
PhoneGap经过对各个平台底层功能进行封装和抽象,而后经过JavaScript暴露出一致的API,让开发者能够经过JavaScript编写跨平台的原生APP。
虽然看上去“一次编写、处处运行”的愿景很美,可是PhoneGap有这样几个缺点。
固然,PhoneGap的优点也很明显 。
8、持续集成SVN
集中式代码管理的核心是服务器,全部开发者在开始新一天的工做以前必须从服务器获取代码,而后开发,最后解决冲突,提交。全部的版本信息都放在服务器上。若是脱离了服务器,开发者基本上能够说是没法工做的。
在企业内部,使用SVN没有什么问题,服务器压力和内部带宽都可以承受全部员工一块儿操做SVN。可是在开源世界,这种架构方法就不行了,著名的开源软件的开发人数太多了,所以诞生了Git。
Git
Git是一个分布式版本控制软件,是天才工程师、Linux内核开发者Linus开发,目的是更好地管理Linux内核源码。其初版于2005年发布,它与SVN最大的不一样之处就是基于分布式的理念。
鼓励频繁的提交
SVN践是频繁地提交,而不要等到代码没问题了再一次性提交。对于可能损坏主干原则的代码,不要直接提交到主干,而是建立一个分支,在分支中频繁提交。
肯定分支流程
基本上全部的特性和较大的bug修复都应该使用分支来修改。
定义主干原则,而且坚守它
咱们团队的主干原则是“主干对应的代码必须是能够发布而且不会产生bug的”,若是不能保证新增的或者修改的代码符合这一原则,就在分支提交代码。任何人破坏这一原则引发bug,就请你们吃饭。
不要把逻辑的修改和代码格式化操做混在一块儿
若是您作了一些代码格式化的操做,就单独提交此次修改。好比您去掉了代码中全部的空行,那就单独提交一个 commit,而后再作一些逻辑的修改,再提交。这样能够避免“天哪,全部的东西都不同了”,出现问题以后更容易追溯。
不相干的代码分开提交
也就是说不要在一次提交里修复两个bug。
保持工做代码库的“干净”
若是您有文件不想也不须要提交,就加入到忽略列表(ignorelist) 。不须要提交的文件包括编译后文件、配置文件和第三方依赖等。这样的好处是,您每次打开SVN提交界面,若是没有修改过任何代码,就会看见一个空的列表 ,若是修改过代码,就显示修改过的代码。这能提醒您不要漏掉任何须要提交的文件。
为何须要包管理?
在咱们平常工做编写的软件中,可能有绝大部分代码都不是咱们本身输入的。咱们“依赖”一些第三方的框架或者库。在Web前端开发中,咱们依赖各类框架、库、静态资源等;在PHP开发中,咱们依赖各类框架、库;在iOS App开发中,咱们依赖各类库、模块、资源等。在复杂一点的依赖环境中,您所引入的第三方库也依赖其余的“第四方库” “第五方库”… …如何保证互相之间都不会出现冲突很重要。
如何让咱们依赖的资源有条不紊地在一个地方进行管理和更新,而不用重复“搜索、下载、移动”这一系列繁琐的手工操做?这就要引入“包管理”。
Node.js
Node.js的包管理器npm应该是世界上最有名的包管理器。若是没有npm,Node不会有今天的普及度。npm收集了大量优秀的Node.js代码包,而后这些库吸引更多开发者进入Node.js开发的行列,反过来又促成了npm的繁荣,就像鸡生蛋,蛋生鸡同样。
npm如何引入依赖组件?
第一种是在本身项目的根目录里写一个package.json
。这是一个json对象,在其中的dependencies
或者devDependencies
值列出所须要的模块和版本,而后用命令行切换到项目根目录,运行npminstall
。经过这种方法,其余人在获得您的代码以后,仅须要一个package.json
文件,就能够简单地使用npminstall
命令来安装所须要的全部依赖。模块会所有下载到node_modules
文件夹。
"dependencies": { "gulp-util": "2.2.14", "through2": "~0.4.1" },
由于node_modules
文件夹里全都是第三方代码,其实是脱离于本身项目的代码库的。因此应该在.gitignore
或者 SVN的忽略文件列表里忽略掉node_modules
整个文件夹,并且全部项目成员也不该该修改node_modules
里的任何东西,不然在未来npm
安装的时候可能会丢失您的修改。若是发现某个模块有修改的必要,要向原做者提出issue
。或者推送请求。
首先须要良好的架构
Make和依赖关系
Make是一个经典的构建工具,现代不少构建工具(好比Grunt、Gulp等)都参考了它的一些基本原则来设计。 Make的基本模型是:定义一个任务时首先声明依赖关系,而后说明根据这些依赖调用哪些应用程序来生成目标文件。由于每一步都须要使用不一样的应用程序调用不一样的数据,因此这里面须要设置依赖关系。
另外一方面,使用包管理工具能够把项目须要用的第三方包,以及每个包的特定版本,都集中在一个配置文件中。此后,咱们经过一句命令,就能够下载这些包到本地的开发环境。每一个软件包都会涉及其余的软件包,软件包里程序的运行须要有一个可执行的环境(要求有其余的程序、库等),软件包依赖关系正是用来描述这种关系的。
因此, “依赖关系”既属于“包管理”,同时又属于“构建工具”。
Grunt和Gulp
Make很强大,并且在全世界范围内几乎全部的计算机领域用了几十年,它的稳定可靠通过了普遍验证。不过从学习成本角度来讲,它须要学习者具有一些Linux编程的基础,难度较高。因此,Grunt和 Gulp诞生了,它们都是用 JavaScript来实现的构建工具。
Grunt引爆了前端架构工具的概念,获得了普遍的应用。如今,Grunt的生态环境已经很是庞大,愈来愈多的开发者着手Grunt开发,为它添砖加瓦。可是Grunt有几个问题 。
因此虽然Grunt有先发优点,可是因为它有几个痛点没有很好地解决,因此又诞生了Gulp。
Gulp的意思是 “大口吸” ,它最初的logo是一杯饮料,上面有一根吸管,很形象地跟它的宣传语相呼应:“基于流的构建工具” 。与Grunt最大的不一样就在于,Gulp基于 “流 ”的理念。
Gulp基于Node.js的流的概念,因此前一个任务的输出就是后一个任务的输入。
从语法风格上来说,编写任务的过程更像是 “编程 ”,而不是 “编写配置” 。Gulp经过对接前一个任务的输入和后一个任务,就像一个管道,两者能够同时进行,不输出在磁盘中,没有多余的中间产物,性能更加高效。
当前,Gulp的社区还远不如Grunt成熟,有些功能的插件,Gulp可能就没有。不过从我的偏好来看,我更倾向于Gulp,它的技术理念更好。
9、理解编程语言通用用途语言 VS 特定领域语言
不少编程语言倾向于通用解决方案,而不是只解决具体问题。这些语言都被设计为能够在任何领域使用,好比C、Java、Python和XML,它们被称为 “通用语言 ”(General Purpose Language, GPL)。咱们能够看到用 C编写的全部类型的软件,从游戏到客户端软件,从服务器端软件到手机端软件。
与之相对应的,有些编程语言被设计为特定领域专用,叫作 “特定领域语言 ” (DSL)。DSL的目的是解决特定领域的问题,而不是像GPL同样能够解决任意的软件问题。DSL在计算机软件开发中十分常见,好比前端开发中常见的HTML和CSS就是一种DSL,专用于Web开发。MySQL是一种DSL,专用于操做数据库。Make是一种DSL,专门用来处理Shell脚本操做系统文件输入和输出。
若是您是一个以解决问题为目标的全栈工程师 ,我建议您在考虑发明一个DSL以前先考虑如下方案 。
框架和库拓展了语言
在快速开发中,真正重要的是库,全栈工程师的目标每每是快速解决商业问题,不必定须要长期完美的方案。使用方便好用的框架能大大节省学习成本和开发时间,因此有些时候咱们的技术选型步骤是:先选择框架,而后选择语言。
一个误解,Swift是一种语法很像脚本语言的编译语言。脚本语言跟编译语言的差别不在于语法,而在于编译机制。
脚本语言,是指支持用脚本的方式编写程序的语言,它无需编译便可直接在运行时环境中解析。在操做上,它缩短了传统的 “编写编译连接运行 ”过程。脚本语言一般具备简单、易用的特性,并且经常很短小。
相比编译语言脚本语言有更高的开发效率,可是在执行效率上会有所牺牲。因为如今的趋势是硬件成本愈来愈低,而工程师的人工成本愈来愈高,因此脚本语言的使用空间愈来愈大,有一些脚本语言( Python、Ruby )已经在成熟的商业网站中使用。
不一样的脚本语言有不一样的设计原则,可是它们每每有一个共同的目标,就是以简单的方式,快速完成某些复杂的任务。
脚本语言不须要编译
脚本语言的特色是无需编译便可运行,它在对应的运行环境中直接运行,运行时经过解释器来逐句解析。
由于语言跟对应的解释器(或者编译语言跟对应的编译器)是分开的两个概念,因此从科学上讲,只要给定合适的运行时环境和库支持,任何语言均可以做为脚本语言来使用(也就是编写脚本) 。也就是说, “编写脚本”是对语言的一种使用方法 ,而称某种语言为脚本语言是一种工程上的约定俗成的用法,而不是科学上的定义。
并且另外一个问题是,不管是脚本语言仍是编译语言,最终都须要编译成机器码让机器来执行。好比JS语言 ,在v8引擎中被编译为机器码而后执行,若是是使用Node.js。那么这个机器码可能会被缓存起来,这样的话,跟编译语言就没什么区别了。
脚本语言经常不须要关心清理内存
由于脚本语言的设计目标是快速写出能运行的程序,它更倾向于取悦工程师,而不是优化性能。因此在语法上就忽视内存管理,而该语言的解释器则各显神通,把清理内存垃圾的重担揽在本身的黑盒里面,无需工程师关注。
脚本语言经常会对特定领域优化
脚本语言经常是动态类型语言
脚本语言的抽象层经常更高
脚本语言经常有包管理器
10、全栈游乐场虚拟专用服务器(VPS)是把一台服务器分割成多个虚拟专享服务器的优质服务。每一个VPS均可分配独立公网IP地址、独立操做系统、磁盘空间、内存、 CPU资源、进程和系统配置,模拟出 “独占 ”使用计算资源的体验。
比较廉价的选择是虚拟主机(Virtual Host),又称虚拟服务器或虚拟空间。虚拟主机将一台服务器的某项或者所有服务内容逻辑划分为多个服务单位,对外表现为多个服务器,从而充分利用服务器硬件资源。
若是使用虚拟主机,跟其余人共享CPU和内存等资源,这就像是合租。若是其余人在使用卫生间,您就无法用了。虚拟主机的好处是很便宜,国内一些服务提供商提供年费仅几十元的虚拟主机。虚拟并不是指不存在,而是指空间是由实体的服务器延伸而来,其硬件系统能够是基于服务器群,或者是单个服务器.
为何推荐一个全栈工程师买一台VPS本身玩玩?
对网站全貌有所了解
若是采用第三方的托管服务来搭建博客系系统,新建一个帐号就能够开始写了,好处是很方便,缺点是在自定义功能上好比绑定独立域名,安装插件和修改路径格式代没那么灵活。
若是有瘾vps搭建一个博客网站就麻烦一些。
看上去很折腾,不过这种折腾是有意义的,由于他那里在操做的过程当中理解了web工做原理。
时间就是金钱
推荐使用vps的第二个缘由就是稳定。若是您想把精力集中在有用的技术上,而不是服务器无响应或者IP北墙等一些无聊的杂事,那么vps是最有性价比的选择。
部署本身的环境
学习Linux
理解HTTP
经过本身去配置和操做服务器,会让前端工程师也得http有更好的理解。
每一个人都有不一样的需求,不过选择vps的原则都差很少,首先须要考虑的固然是性价比,主要参数是内存、CPU、硬盘和流量。
关注服务及安全
能力越大责任越大,当你有了安装vps操做系统的能力,您就必定要学会保护本身的服务器。
操做系统的选择
域名解析
通常来讲,域名购买商和服务器提供商都提供DNS解析的能力,不过域名在哪里注册和域名在哪里解析是两回事。
由于国内网络环境比较复杂,用户可能来自电信、联通、移动、教育网等网络,因此建议把域名的域名服务器设置为国内的智能DNS提供商,好比DNSPod。DNSPod除了能够根据用户IP来给出最佳的IP之外,还提供额外的功能,好比网站监控等增值服务。
云服务器
11、高效工程师阅读英文资料
时间管理四象限
消除重复工做
给本身留出不被打扰的时间
番茄工做法
过去跨界学习的成本很高,大部分人都不敢轻易尝试,但现在互联网时代给咱们带来了机遇,天天上网均可以看到其余领域名人写的文章和微博,经过查看这些内容,咱们就能对于本来彻底陌生的领域有一个感性的认识,时间一久咱们就可以在潜移默化中理解另外一个领域的从业者的思惟方式,当您开始跨界学习以后,就会增长更多的机会。
或许每一个工程师会在不一样的环境中,跨不一样的界,可是在将来,我认为跨界出来的那部分能力才真正定义了“您”。
在前面的章节里“如何成为全栈工程师”里,我给有志成为全栈工程师的同窗的的第一个建议是“关注商业目标”,第二个建议是“关注用户体验”。而好的设计师优秀用户体验的必要非充分条件。
首先,一个事实是:过去的工程师普片不在乎设计。有意无心,他们忽视设计的重要性。
知乎网站上有一个帖子,问题是“为何部分开发工程师不喜欢调节界面UI细节?”。我比较赞同下面这个回答:
我发现程序员大体能够分为科学家和工程师两类,科学家关注技术是否优越,而工程师关注产品是否完美。和科学家类型的程序员合做项目每每是件痛苦的事情,他们太过关注本身手中的的锤子是否先进,却不在乎本身敲进去的钉子是否平整光滑不扎屁股,更不要说这可钉子是否是跟其余钉子对齐里。那些“资深”程序员更是如此,那个年代不少用户体验技术不成熟,能作出一个能用的东西已经不易,更不要说作出一个性能还算不错的产品。抱着这个想法走到今天,大多数应该被淘汰的程序员反而作到更高的位置,开始拿这种过期的想法熏陶小弟。(来自陈鑫的回答)
在传统Web设计流程中,咱们也参考里工业化的流水线:按交互设计、视觉设计、前端开发、后台开发的流程来生产一个产品。按照这种细致的分工,设计师就要输出3个以上的页面:手机、平板、超大屏幕的电脑等。设计师在交付设计稿的时候若是有须要调整的地方,3个页面就要从新调整,只要设计发生里调整,就要更改每一个对应的样式,大量的人力和时间就浪费在没必要要的“流程”中。
咱们的解决方案:视觉设计师关注设计模块和总体氛围,只须要给出一份为PC设计的视觉设计稿。让有必定合计理论基础的前端工程师根据拿到的PC设计稿直接建立能够适配多个平台的页面,也就是一个“响应式”的页面。
另外一个例子,咱们想在页面或者App中建立一些动画效果。在老式Web设计中不会有不少动画,可是如今,页面和App更强调每个操做都给用户动画反馈,有些是为了更炫,有些是为了给用户操做反馈。可是浙西动画很那在设计稿中体现,这会给设计师和工程师带来很大的沟通成本。
咱们的解决方案:让有必定设计功底的前端工程师主动提出本身对动画而看法,作出效果以后再反馈给设计师去确认,优化后的流程十分高效。
推荐一本书,Robin Wiliams的《写给你们看的设计书》,本书调理清晰简单易读,一个周末的下午或者天天半小时,持续一周就能够读完。但它的理论会如此深入地停留在您的脑海里,每次看到不符合这些理论的设计,对应的理论就会迸发出老。
设计的四大基本理论是:亲密性、对齐、重复、对比。
因此“设计感”实际上是“科学”而不是“艺术”。这些只是理论或者“规则”,规则老是能够被打破的,可是前提是要熟练掌握这些规则。在没有掌握这些规则以前,请遵循规则。
十3、全栈思惟做者讲了一个把一本英文书籍交给两个颇有兴趣作翻译的年轻人的故事,结果因为各类各样的理由延期交稿,延期里也不主动告知,而他们完成的部分也只能算勉强及格,错译、漏译的状况经常出现,可能存在一些能力问题,但他们给咱们的感受倒是根本就不上心。
若是想拖延一件事,或者不想作一件事,老是能找到理由。懒惰的终极缘由就是您想逃避这件事。对于全部刚开始工做的年轻人,我告诉大家:老板给您的任务,根本不关心您有sm理由,只关心您完成没有。
有人认为兴趣是成功的老师,没法完成某些事情是由于没有兴趣。其实我认为耐心是一种能力,有些人天生缺少这种能力。在能力不足、困难重重的时候,惟有投入大量的时间才能保住着珍贵的信任。
新人没有经验、知识不丰富,这均可以理解,可是以此为理由输出不合格的产品,那就是本身的问题。
不是每一个人都有足够的自律和积极性。虽然做为全栈工程师,咱们的学习目标一直是提高我的的技术能力。可是在组织中工做,并不须要特别强的我的能力或者天赋、更须要的是稳扎稳打、虚心学习,不要惧怕批评,而应该真诚沟通、珍惜每一次机会,完成每个承诺。
好的管理者能让平凡的员工作不平凡的事
高效能的管理者并不奢求完美的人才,他能让平凡的人成就不平凡的事业
《卓有成效的管理者》中的核心是5个思惟习惯,这5个思惟习惯环环相扣,很是经典。
每一条都会花一章的篇幅来展开说明,每一章都有些让我醍醐灌顶的部分。好比“有效的管理者重视对外界的贡献”。
重视贡献,才能使管理者的注意力不为自己的专长所限,不为其自己的技术所限,不为其自己所属的部门所限,才能看到总体的绩效,同事也才能使他更重视外部世界。
一个事实是,程序员的沟通能力所带来的价值被大大低估来。在咱们的招聘流程中,技术能力过关,可是由于沟通能力这一项不过关,而直接被拒绝的面试者比例仍是很高的。可是为了不没必要要的争议,大企业的HR每每不会把拒绝的缘由传达给应聘者,因此对方也不知道本身为何会被拒绝。
沟通能力的评判每每是很是微妙和主观的,并无一份考题能证实您的沟通能力好或者差,只是面试官能根据本身的判断来决定。为了不无休止的争论,因此刚脆不告诉拒绝缘由是最好的。
沟通是软技能
针对目标听众
佛家有一个词叫“度己度人”,就是在帮助别人的过程当中,其实也在帮助本身。因此反过来想,做为需求的请求方,最开始就得找到那个很关键的人,对于他来讲,帮助您对他是颇有好处的。也就是说他能把这件事看成i本身的冠军任务。若是您的要求对于他人纯属累赘,那么他人天然不肯意帮助您了,任您多么会沟通,最终都无论用。
因此,受权给平级的同事的时候,最好的方法就是诉诸对方的利益。若是一件事情能够对双方的KPI都有好处,那么对方也愿意帮助您一块儿分担这个任务。若是您把不擅长的事情受权给对方,而做为交换,能给对方一些资源,那也是诉诸利益的一个好方法。
其次的方法就是把问题上升到上级领导,让上级领导安排资源,可是这种方法不能常常用,不然上司会认为您不会主动解决问题,只会提出问题。被受权的那一方也以为您在拿领导压制他,可能会存在负面的情绪。
有方法
麦肯锡的金字塔原理就是,任何事情均可以概括出一个中心论点,而此中心论点可由3至7个论据支持,这些一级论据自己也能够是论点,被二级的3至7个论据支持,如此延伸,状如金字塔。使用金字塔方法的前提是,您的有一个中心目标。不能是两个,更多更不行,只能是一个。
表达本身的想法
看到这里,这本书就读完了!