@jianhua.cheng

WEB 全栈的学习

March 27, 2016

此篇博客是阅读《WEB 全栈工程师的自我修养》后结合自己的一些想法总结而出的,希望能给自己以外的人带来些许收获。

先精后广,一专多长

先说明这句话的含义:在一个特定的方向上有足够深入的钻研,然后再将学习的范围扩展开来。如何拓展,围绕核心的专长,先是该领域所需要的知识再拓展前后相关的领域的学习。例如,我现在以前端为发展目标,我需要学习 JavaScriptCSSHTML,这是这个领域所需要的最基本的知识。其中的JavaScript还可以往Node.js发展,这样又是一条拓展的方向,此时就往 JS 版的后端靠近了。为了熟悉 WEB 的开发,最好还得懂后端的开发流程或者具备后端开发的能力(好在我在大二的时候,开始就是写后端的)。为了能编写出具有良好用户体验的交互页面,还可以学点设计。对于大前端,原生 APP 的 UI 也是能学习的一个方向。除此之外,还有很多的技能树……基于这些,如果一开始你最基本的前端没专精到一定程度,相关联的都学了个遍,最后在有限精力的限制下没有突出任何亮点! 工作需要你在你所负责的领域里做到足够好,没有一门专精的技术是站不住脚跟的。作者的话是:

有一个专长,得到一个能让您成长的工作,进入强大的团队,您就能有自己的阵地,以此为生,然后再逐步学习更加广博的知识,朝自己的个人目标去努力。如果您连阵地都不稳固,就不存在开枝散叶、落地生根的可能性了。

如何做到专精呢,在掌握了基础的前提下,继续深入到性能优化、SEO(Search Engine Optimization)、多种框架,响应式页面等前端细节中去。

围绕商业目标去学习

当您只有一把锤子,您看什么都像钉子

为了工作的话,不能一心只醉于一门单独的技术,要考虑你的技能能带来的收益。有人要反驳了(我也想),一门做到极致不就够了么?但是何必吊死一棵树上,编程语言是工具,不能痴迷于一个工具死不放手,当别的工具能更好的实现你想要达成的目标的时候,就该给自己的工具箱里添加一个新工具了。

关注用户体验

这个我只能看看作者的观点了,用户体验很重要,现在都是产品为王,内容至上的时代。各种优秀的产品刁钻了用户的品味。所以,每一个糟糕的用户体验背后都蕴育商机。要做自己产品的用户,从用户的角度去考虑产品的使用方式。作者泛化了 用户 的定义:所有您为之服务的人。比如我们课程中的 PPT 演讲,表达自己观点的时候。基于接收方的立场来进行你的“服务”。

从学生到工程师

证明自己的能力

作为一个大三的在读学生,专业所在学校不出彩。但是可以有的是项目经验,在老师的工作室中有机会参与到实际的项目当中,完成任务目标的过程中能学到额外的许多知识。但是小项目毕竟有其局限,而我想从事的前端在学校除了HTML5的课程与其关联,并学不到有关的前端技术。一切只能靠自学,光有项目经验也许不够,还需要更多用以展示自己的作品,作品是证明自己能力的最佳工具。

  • 参与到开源社区中去,提到这个莫过于 GitHub了。一直觉得自己没那个能力加入到其中去,或许只是不够自信。往后在熟悉的项目中看看 issues 列表,看看有没有自己能解决的问题,也为使用着的开源项目贡献点微薄之力。那在开源项目中贡献代码有哪些好处呢?

    • 证明了阅读和编写好的代码的能力,公司直接需要的技能
    • 开源项目需要协作,协作能力
    • 对新鲜事物的热情
    • 开源项目多为英文描述,英文不错
    • 阅读文档的能力
  • 博客,如果觉得前面那个难以做到的话,那么这个只需要你总结自己获得的经验和知识,然后把它描述出来,用键盘敲出来。唯一的成本是时间与耐心,然而付出的这两样收获的是一份梳理完整后的知识体系。可以简单的使用 CSDN的博客来书写,支持 Markdown 语法,或者是使用 hexo + GitHub Pages搭建一个静态博客,很简单,丰富的主题效果可以自由选择。还有 WordPress之类的选择,推荐 hexo,免费使用,配置简单。

  • 个人项目,这个选择其实相当不错,可以运用学到的最新技术和自己喜欢的技术结合起来,不受任何人限制的最大化利用自己的知识体系。平时课程中有许多的大作业,如果时间足够,可以很用心的来完成一个酷炫狂拽*炸天的作品。期待能够完成我的这个计划。

大公司更有利于成长

这么说的原因无非是大公司能提供更好的环境,避免成为“野生程序员”(什么都懂一点,但是基础和技能的专业性都不够)。

  • 严格的代码质量
  • 有更多的经验丰富的前辈来指导你
  • 垂直专精的技能。对一个领域技能足够深度的训练,小公司则是广度,因为身兼数职
  • 服务于海量用户的经验。小公司遇到的问题,大公司肯定遇到过;大公司遇到的问题,小公司不一定能遇到。服务不同人数的项目,所需要考虑的问题是很不一样的,性能优化与许多的工程问题在小公司的项目中并不需要考虑太多,这会造成进阶能力的缺失。

向移动端的转型

作者提到这个,是因为目前移动端十分热门,大家都用手机下载、使用着各式各样的 App,在目前,原生 App 确实体验更好。说到转向移动端,我就提提我所了解到的可能——混合模式 App(Hybird App。也就是在原生 App 启动后,部分或全部的内容是由WebView加载网页实现的,淘宝 App 也是这样做到的。 IonicPhoneGap都能达到用JavaScript编写,然后导出成多个平台的应用的目的。“一次编写,到处运行”,自然有其缺点,如果想了解,可以点击链接查看或者 Google。

知识性内容

这里列出一些书中提到的知识性内容,有许多我都并不是了解,仅在此做个记录,待之后的学习中深入。

HTTP 基本原理及优化方式

减少请求减小文件。在这里有个疑惑,最近看到了HTTP2这个新的 HTTP 规范,其中提到了新技术中减少请求不是那么必要的优化措施,还可能是反优化,但是鉴于目前的方案以及 `HTTP2 的尚未普及,这两样应该仍是我们所需要知道的最基本的优化方式。

缓存带来的性能提升

还不太了解这部分的内容,先不做总结……

设计模式

待最近正阅读《JavaScript 设计模式》的读完后来个总结。

工具使用

版本控制工具

Git 是现在非常流行和有名的版本控制工具,最早是 Linux 之父为了对 Linux 系统的版本控制而开发出的一个工具。官方的中文教程: 《Git Book》

版本控制的最佳实践:

  • 鼓励频繁提交。对于可能损坏主干原则的代码可以创建一个分支,在分支中频繁提交。此外可以尽情的频繁提交,不要等着代码没问题了再一次性提交,对于功能性的提交请加上必要的备注信息。
  • 确定分支流程。基本上所有的特性和较大的 bug 修复都应该使用分支来修改。
  • 定义主干原则,并坚守它。主干对应的代码必须是可以发布并且不会产生 bug 的,如果不能保证新增的或者修改的代码符合这一个原则,就在分支中提交代码。
  • 不要把逻辑的修改代码格式化操作混淆在一起。为了问题的回溯,如果只是格式化了代码之类的操作,也请单独提交这次修改,然后再做一些逻辑的修改(实质性的代码的修改),再提交。
  • 不相干的代码单独提交。也就是说不要在一次提交中修复两个 bug。
  • 保持工作代码库的“干净”。把不想活不需要提交的文件加入到“忽略列表”中去,包括,编译后文件、配置文件和第三方依赖。避免打开 svn 的提交列表,显示一堆没必要的文件。

包管理

npmBower是两个基于Node.js的包管理工具。

构建工具

作者提到了 GruntGulp,结合我个人的学习,我会在接下来学习的构建工具为:GulpWebpack。其中Webpack与著名的React框架还有ES6 + Babel的结合使用是我想要学习的主要原因。

Geek

可以学习使用VPS搭建属于自己的小服务器,可以使用它来部署自己的项目上去玩玩,据我所知,还能科学上网(●’◡’●)

一些建议

高效工程师

阅读英文资料

这个无可厚非,软件开发领域的英文资料最齐全,文档最新。使用框架的时候可以免于查找中文文档的艰辛……英文能力对英语程序员的进阶还是十分重要的。

在此推荐一个大家都知道的社区 StackOverflow,作为最大的 IT 工程师平台,平时我们遇到的许多问题基本都能找到详尽的解决方案。除了这个我还想推荐两个我经常向身边的朋友推荐的中文社区(我没收广告费!)SegmentFault稀土掘金

时间管理

作者介绍了一个广为人知但是却也很有效的时间管理工具:时间管理四象限 地方个

  • 重要而且紧急
  • 不重要但紧急
  • 重要但不紧急
  • 不重要不紧急

应该将 80% 的时间花在“重要但不紧急”象限中,避免“瞎忙”。奇妙清单、Trello 都是不错的时间管理工具,奇妙清单简单易用,Trello 则更加全面但是使用更复杂一些。

给自己留出不被打扰的时间

编写程序需要大量的精神投入,需要整块连续的时间思考,尽量腾出整块的时间来进行工作,不仅仅是编码,做计划、总结、思考同样需要。

纸上头脑风暴

笔跟纸是最灵活、最容易修改、成本最低的头脑风暴方式。—— 作者

之前看过一本刘未鹏前辈写的《暗时间》,里面同样提到了纸是思维的缓冲区,头脑思维有一定的“内存限制”,但是纸却是“无限”的,将脑海中思考的东西一步步记录在纸上可以帮我们整理思路,梳理思维中的条理以及漏洞。所以刘未鹏也是及其推荐写博客的,这是一个自我强化学习的方式。回到正题,我们不一定要遵循完整的“Mind Map”的方式来梳理,只需要将脑海中的关键字列出来,分别拓展开来就能达到帮助我们“风暴”的目的,整理总结同样适用。

懂点设计

当我们知道一个“东西”的名字,就会在看到这个“东西”的时候,立马意识到它。但是如果我们不知道它的名字,可能一辈子也不会认识它。这就是约书亚树原理。——作者余果

以上这句话摘自原书,也是作者引自“《写给大家看的设计书》—— Robin Williams”中。 “设计感”就是我们身边的约书亚树,我们虽然不清楚某个设计为什么是美的,哪些设计是“专业”的,哪些是“业余”的,但是我们能感觉出来。所以懂设计就是让我们不仅能感觉,还能掌控,使我们的创造更加“专业”,更美。

跨界

其实上面的设计就属于这个,除此之外我们还能学点管理、沟通。其中沟通是我们的软技能,即使我们是技术至上的工程师,但是一个更好的沟通技巧仍然是我们学习工作、生活的绝佳利器。

不恰当的地方请指教,可在下方评论~


Jianhua Cheng

Written by Jianhua Cheng who lives and works in Shanghai. Try to build something more attractive and interesting. You can follow him on Twitter, Github