什么是全栈工程师
关于全栈工程师的定义,Quora 上得票最高的回答是:
全栈工程师是指,一个能处理数据库、服务器、系统工程和客户端的所有工作的工程师。根据项目的不同,客户需要的可能是移动栈、Web 栈、或者原生应用程序栈。
流水线开发流程“各司其职”的弊端
- 工程师职责不清导致效率低下
- 工程师缺乏主人感导致产品质量差
- 工程师缺乏全局的视野影响个人成长
- 更多角色导致项目效率低下
全栈工程师首先要“一专多长”。一专多长的意思是,工程师首先有一个专精的方向,在这个方向上足够精通后(高级工程师级别),以此为突破点去学习更多的知识,增加自己的长处。如果还没有获得某个方向上足够深入的理解,就不要囫囵吞枣地去学习其他领域的知识。
勿在浮沙筑高台,“全栈”是一个长期积累的过程,是专精型工程师 在不断解决问题的过程中积累知识和经验所形成的能力,而不是一蹴而就的过程。
解决问题,而不是醉心技术。如果新计划不是你擅长的,怎么办?您应该马上开始学习新的技术,这就是我说的关注问题,而不是醉心技术。
延伸阅读
- 《黑客与画家》
- 《专业主义》
如何成为全栈工程师
“先精后广,一专多长”
建议初学者学习全栈技能的时候,先在一个特定的方向上有比较深入的钻研,然后再将学习目标逐渐推广开来。
作为一个求职者,无论是毕业生还是社会招聘,仅仅满足招聘要求是不够的。您需要在招聘要求的方向上 200% 的能力来得到这个职位。
围绕商业目标
老板雇用一个员工,不是因为他能写程序,而是因为他能帮助自己赚钱。 一切都要围绕商业目标来进行,包括您做的项目、您的汇报方式,以及您在学习新技能时进行的取舍。
记住,当您只有一把锤子,您看什么都是钉子。 而如果您痴迷于工具,反而看不到问题的所在。因此,要先看看 有哪些问题需要解决,然后再补充您的工具箱。 永远从商业目标的角度来决定学习哪个东西,而不是纯粹为了锻炼 技术能力而去学习。
关注用户体验
老板雇用您不是因为您能写代码(或者做工具),而是因为您能帮他赚钱。所以您要用一切办法,去优化流程解决痛点, 做工具是一个可选的方法,但不应该是您的第一个想法,更不是唯一的方法。假使真的是做一个工具,最终汇报邮件的时候,不要以 “我做了一个工具。。。”开头,而应该以“我发现了一个问题。。。”开始。
延伸阅读
- 《重来:更为简单有效的商业思维》
- 《精益创业》
从学生到工程师
延伸阅读
- 《编程之美:微软技术面试心得》
野生程序员的故事
野生程序员容易陷入样样不精通的窘境。
大公司还是创业公司
大公司能给您的:
- 较小的风险
- 技术最佳实践
- 垂直专精的技能
- 服务海量用户的经验
- 软技能
- 人脉
- 心态
作者个人建议是,从毕业生自己前途发展的角度来看, 先加入一家上市大公司是个不错的选择。
延伸阅读
- 《打造 Facebook》
工程师事业指南
那个什么都懂的家伙
软件工程师事业指南告诉您,最核心的 3 个词就是技术、成长和声望。 技术是您的武器,成长就是好好打磨武器,而声望是 您一生的积累。
积累作品集
延伸阅读
- 《您就是极客:软件开发人员生存指南》
- 《代码整洁之道》
全栈工程师眼中的 HTTP
尽量减少同一域下的 HTTP 请求数 浏览器常常限定了对同一域名发起的并发连接数的上限。 IE 6/7 和 Firefox 2 的设计规则是,同时只能对一个 域名发起两个并发连接。新版本的各种浏览器普遍把这一上限 设定为 4 至 8 个。
把静态资源放在非主域名下,这种做法除了可以增加浏览器并发, 还有一个好处是,减少 HTTP 请求中携带的不必要的 cookie 数据。
除此之外,前端工程师经常做的优化是合并同一域名下 的资源,比如把多个 css 合并为一个 css, 或者将图片组合成 css 拼图。
还有一些优化建议是省掉不必要的 HTTP 请求,比如内嵌小型 css, 内嵌小型 javascript, 设置缓存,以及减少重定向。
高性能网站的关键:缓存
服务器缓存
浏览器缓存
延伸阅读
- 《网站性能监测与优化》
大前端
知识体系
- 对浏览器兼容性的了解
- 对 HTML/CSS/JavaScript 语法和原理的理解
- 对编辑器和插件的熟悉程度
- 对调试工具的了解程度
- 对版本管理软件的熟悉和应用经验
- 对前端库/框架的使用。
-
标准/规范
-
对代码质量,代码规范的理解。
- 对 JavaSript 单元测试的熟悉。
- 对性能优化的应用和理解。
- 对 SEO 的应用和理解。
- 代码部署。
-
移动 Web。
-
代码架构
- 安全
- 对自动化测试的理解
向移动端转型
有哪些方向
- iOS 原生 App
- Android 原生 App
- Windows Phone 原生 App
- Web App
- 混合模式 App(Hybrid App)
延伸阅读
- 《Getting Real》
- 《从 0 到 1:开启商业与未来的秘密》
- 《Building iPhone Apps with HTML, CSS, and JavaScript》
持续集成
版本控制最佳实践
- 鼓励频繁地提交
- 确定分支流程
- 定义主干原则,并且坚守它
- 不要把逻辑的修改和代码格式化操作混在一起
- 不相干的代码分开提交
- 保持工作代码库的“干净”
包管理
- npm
- bower
延伸阅读
- 《Pro Git book》
- 《Git 版本控制管理》
理解编程语言
通用用途语言 VS 特定领域语言
特定领域语言(Domain Specific Language, DSL)。 DSL 的目的是解决特定领域的问题。
如果您是一个以解决问题为目标的全栈工程师,我建议您在考虑 发明一个 DSL 之前先考虑以下方案:
- 尽量使用您熟悉的通用语言来解决问题,比如 Python, Java 或 C++.
- 优化您的方案,提炼出一种真正精简、优雅的扩展库。
- 开源您的扩展库,根据其他人的贡献来继续优化解决方案。
延伸阅读
- 《代码大全》
- 《代码的未来》
- 《禅与摩托车维修的艺术》
全栈游乐场
就是说了需要有一个自己的 VPS, VPS 可以让你对网站的全貌有所了解。
延伸阅读
- 《鸟哥的 Linux 私房菜:基础学习篇》
- 《只是为了好玩:Linux 之父林纳斯自传》
软件设计方法
设计模式
设计模式的关注点在于以下几个方面:
- 高效编写代码
- 高可复用性
- 抽象带来的可读性
《设计模式》一书中作者列出了 23 种软件设计模式,分为三大类:
- 创建型模式,就是用来创建对象的模式,它对实例化的过程进行了抽象。创建型模式帮助一个系统独立于如何创建、组合和表示它的那些对象。
- 单例模式
- 工厂方法
- 抽象工厂
- 建造模型
- 原型模式
- 对象池模式
- 多例模式等
- 结构型模式,主要解决类、对象、模块之间的耦合关系。
- 适配器模式(Adapter)
- 桥接模式
- 组合模式
- 装饰模式
- 外观模式
- 享元模式
- 代理模式等
- 行为模式,用来识别对象之间的常用交流模式并加以实现。
- 观察者模式(发布订阅模式)
- 黑板
- 责任链
- 命令
- 解释器
- 迭代器
- 中介者
- 备忘录
- 空对象
- 模板方法
- 访问者等
架构模式
比如:MVC
设计原则
- DRY,是 "Don't Repeat Yourself" 的缩写,在一个系统里,对于任何数据或变量,都应该配置在有且只有一个地方,其他地方都应该引用这里的数据。
- 惯例优于设置,开发人员仅需要规定应用中不符合约定的部分。
- KISS 原则,是 "Keep it simple, stupid" 的缩写,意思是说软件设计当中应该注重简约的原则。
- 最少知道原则,它是“松耦合原则”的一个具体实例,是指在面向对象编程中,每一个软件单元应该尽可能少地与其他单元发生作用。
延伸阅读
- 《设计模式:可复用面向对象软件的基础》
- 《JavaScript 设计模式》
高效工程师
提速 100 倍
- 阅读英文资料
- 时间管理四象限
- 既紧急又重要的(立即执行)
- 紧急不重要(他人代劳)
- 重要不紧急(制定计划,建议工程师把 80% 的工作投入到该象限中,避免“瞎忙”)
- 不紧急不重要(对它所不)
- 消除重复工作
- 给自己留出不被打扰的时间
- 番茄工作法
- 跨界思考
- 纸上头脑风暴
- 使用版本控制工具和构建系统
- 不要加班
延伸阅读
- 《软件随想录:程序员部落酋长 Joel 谈软件》
- 《卓有成效的程序员》
学习设计
设计基础
设计的四大基本理论是:亲密性,对齐,重复,对比。
设计工具:
- Axure
- Sketch
- Quartz Composer
- 代码
延伸阅读
- 《响应式 Web 设计全流程解析》
- 《写给大家看的设计书(第 3 版)》
- 《写给大家看的设计书:实例与创意》
全栈思维
有兴趣就够了吗?
扯一些理由(特别是私人的理由)根本就是不专业的态度。 不要给自己没能完成的事情找任何理由,而要以诚恳的态度说明当前进度,以及未来是否能如期完成目标,如果不能,就直接说出来。
在职场中,我们评估一个人并不是根据他的能力,而是他能 承担的责任。同样,我们最终评估一个人是否应该升职加薪, 不是看他的能力,也不是看他投入的时间,更不是看兴趣, 只是看他的责任。
学一点管理
- 好的管理者能让平凡的员工做不平凡的事
- 根据员工特质来授权
沟通: 被忽视的竞争力
延伸阅读
- 《卓有成效的管理者》
- 《麦肯锡教我的写作武器》
- 《金字塔原理》
- 《安静:内向性格的竞争力》
Comments