推荐一台华硕商务笔记本电脑,适合前端开发工程师使用,编程的时候字母小,不要小屏幕,大屏幕,以便看清。

作为一个文科妹子,我在看过几乎所有热门 github 教程之后依旧一头雾水,在近半年的摸索中终于明白啦~新年初,把自己纯小白的学习经验分享一下吧!&br&&br&&b&#什么是 Github ?&br&&/b&必须要放这张图了!!!&br&&img src=&/7c9d63fb_b.png& data-rawwidth=&600& data-rawheight=&412& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/7c9d63fb_r.png&&(图片来源&a href=&/question//answer/& class=&internal&&GitHub 是怎样的一个存在? - Deep Reader 的回答&/a&)&br&&blockquote&&p&Git 是由 Linux 之父 Linus Tovalds 为了更好地管理linux内核开发而创立的分布式版本控制/软件配置管理软件。&/p&&/blockquote&好吧,我相信看到这里你已经晕了,这也是我一开始看那些所谓经典教程的感受。写这些教程的人都是几年以上的程序员呀,他们往往直接就告诉你所有命令的含义或者整个体系。&br&&blockquote&专家盲点(expert blind spot)就是对一个事物知道的越多,就越发不记得“不知道这个事”的情形。&/blockquote&&br&&b&简单来说,Git 是一个管理你的「代码的历史记录」的工具。&br&&/b&&img src=&/cd910ad32ac_b.jpg& data-rawwidth=&214& data-rawheight=&164& class=&content_image& width=&214&&我不是程序员为什么要学这个啊啊啊!又不要管理代码们!&br&&br&别急,虽然 github 学习门槛高,一会你就知道为什么人人都应该会这个啦!&br&&br&----------------------------&br&&b&学习步骤&/b&&br&&br&##注册安装&br&去官网注册一个账号(这个你应该会,恩就不放链接了)&br&然后,下载一个&a href=&///?target=https%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub Desktop&i class=&icon-external&&&/i&&/a& mac客户端是最方便的啦!(命令行什么的真的是会越来越晕!先别管他们!)&br&&br&假设33(珊姗就是我啦)、小四和你三个人一起写一本小说(澄清一下,并没有黑任何人的意思,恩!),暂且叫做...《梦里花落爱吃土时代》&br&--&br&图(脑补)&br&--&br&(⊙v⊙)嗯!终于可以正式开始了!&br&&br&&b&#step1:创建新项目&/b&&br&我们三个人在不同的城市要远程共同写一本书,要有一个漂亮的笔记本吧?&br&&img src=&/fa17ad198ae_b.png& data-rawwidth=&895& data-rawheight=&334& class=&origin_image zh-lightbox-thumb& width=&895& data-original=&/fa17ad198ae_r.png&&&br&「repositories」就是你的笔记本们。你只需知道 Repository 是个放项目的地方就行。有时候会出现 Repositories,是多个 Repository 的意思。&br&&br&**fork**&br&如果你不想新建一个笔记本,看到小四之前写过一个好到炸裂的文章,想把他的直接全部偷过来,修改修改就成你自己的文章了,这应该怎么办呢?&br&github 还提供了一个很赞的功能叫做 fork ,你只需要点击这个神奇的按钮,就可以把他的「笔记本」变成你自己的啦!任意修改都可以哦~&br&&img src=&/ed6d6fdc68fbfa829997b_b.png& data-rawwidth=&808& data-rawheight=&201& class=&origin_image zh-lightbox-thumb& width=&808& data-original=&/ed6d6fdc68fbfa829997b_r.png&&&br&&br&&b&#step2:把「笔记本」克隆到本地&/b&&br&「笔记本」在云端,你要把它摘下来放到自己的电脑上写小说才方便呀,在这里我们叫「clone」是不是很形象?步骤如图:&br&&img src=&/b5d537f10af3_b.png& data-rawwidth=&838& data-rawheight=&309& class=&origin_image zh-lightbox-thumb& width=&838& data-original=&/b5d537f10af3_r.png&&或者是直接去我们的客户端&br&&img src=&/cde6dbb8be6_b.png& data-rawwidth=&1112& data-rawheight=&773& class=&origin_image zh-lightbox-thumb& width=&1112& data-original=&/cde6dbb8be6_r.png&&&br&&b&#step3:可以开始写作啦!&/b&&br&你的笔记本里已经自动有一个文档了,这个时候让我们回到网页版[微笑脸]&br&你只需要在 web 端点开这个README.md可以开始在里面写你的小说了。&br&&img src=&/5cff90f3bd0cd5e400bcc637_b.png& data-rawwidth=&1024& data-rawheight=&335& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&/5cff90f3bd0cd5e400bcc637_r.png&&或者直接点开刚刚 clone 到电脑上的文件夹直接在里面写。&br&ps:需要注意的是,文本支持 markdown 格式,可以先参考这个&a href=&///?target=http%3A///p/q81RER& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&献给写作者的 Markdown 新手指南&i class=&icon-external&&&/i&&/a&。&br&&br&&b&#step4:上传你写的小说&/b&&br&在本地写完之后你要上传到云端让我和小四都能看见你写出什么幺蛾子了吧?&br&回到客户端,你发现有变化!!!&br&&img src=&/2e2d2a0da9ef8005ee01f_b.png& data-rawwidth=&517& data-rawheight=&542& class=&origin_image zh-lightbox-thumb& width=&517& data-original=&/2e2d2a0da9ef8005ee01f_r.png&&没错,在你头像旁边给你这次提交内容起一个名字,以后如果再次寻找的时候会很方便。然后点下面的 Commit to master,还有右上角的 Sync 就好啦!&br&&br&&b&#step5:回退到之前的版本&/b&&br&夜深人静的时候,我趁着你们都在睡觉把小说的结局偷偷地改成女主死掉了!&br&你醒来觉得我这结局改的也太悲伤了,完全不能接受!结局必须要和之前那样王子公主幸福的生活在一起的 happy ending!&br&问题又来了,怎么退回到我修改结局之前的 happy ending?&br&&br&还是刚刚那个客户端,选择History 然后点击小齿轮,选择潇洒地点 roll back to this commit!&br&你又回到happy ending的状态啦!!&br&&img src=&/e2b413faf67ea77b36c93_b.png& data-rawwidth=&301& data-rawheight=&223& class=&content_image& width=&301&&&br&&b&#step6:&/b&&br&小四写了一章华丽无比的番外,你要更新本地的小说和他写的保持一致怎么办?&br&git pull&br&&img src=&/f5c5c0b43d1f9f7ab27267fbcc16d9fd_b.png& data-rawwidth=&279& data-rawheight=&354& class=&content_image& width=&279&&&br&-----------&br&好了,知道这些基本操作入门应该够了,我们来回顾一下(不要嫌弃我的画工啊喂!)&br&&img src=&/6c22d708defbc7df2240b_b.png& data-rawwidth=&800& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/6c22d708defbc7df2240b_r.png&&&br&入门初期迅速得到一些正反馈对于学习一门新技能来说实在是太重要了!尤其是编程这么炫酷的事情!&br&所以先不要管什么复杂的 issue 呀 wiki 呀乱七八糟的操作,按照上面的一步一步来,如果遇到什么问题 google 之,一般都会解决的。&br&&br&有一个段子不就是说,当你遇到问题去找最高级的工程师,他们一般都会直接 google 吗?而且自带的帮助手册也是解决问题的好办法,比如你要新建一个 branch=》&a href=&///?target=https%3A///Kunena/Kunena-Forum/wiki/Create-a-new-branch-with-git-and-manage-branches& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Create a new branch with git and manage branches · Kunena/Kunena-Forum Wiki · GitHub&i class=&icon-external&&&/i&&/a&&br&&br&&b&这种遇到问题先自己尝试解决的小技巧,也是我自从学编程以来最大的收获。&/b&&br&&br&------------------------&br&&br&&b&#除了写代码你还可以用 github 做什么?&br&&/b&&br&回到文章开头,我又不是程序猿不用写代码玩这个干啥?&br&&br&你有没有碰到过团队里几个人共同协作写一个文档的时候?或者说需要反复修改的东西?比如最简单的写论文,用 word 保存一个一个版本 e-mail 给 boss?下次再找上次修改了什么地方简直要死啊有木有!!!&br&&br&相信你看了我的远程协作写小说的例子应该已经明白了, github 说白了就是一个「版本控制工具」。我们所谓的「回退」到历史记录,随时查看更改了什么地方,利用这个功能可以做的事情简直太多啦!&br&&br&就像 github 其中一位创始人[Chris](&a href=&///?target=https%3A///defunkt& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&defunkt (Chris Wanstrath) · GitHub&i class=&icon-external&&&/i&&/a&)也详细描述了[GitHub初创的前因后果](&a href=&///?target=https%3A///67060& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Startup Riot 2009 Keynote 路 GitHub&i class=&icon-external&&&/i&&/a&),他说道:&br&&blockquote&&p&Do whatever you want.&/p&&/blockquote&所以不是程序猿可以用这个来做什么呢?&br&&b&1、写书&br&&/b&和 33 一起写小说的例子,还记得吧?几个人你一章我一章共同修改一本书,或是几个出版社的编辑对新书进行校对,利用这个神器就可以随时看到哪里出现了问题和更改。如果想自己写书的话 gitbook 也是不错的选择(又是一个坑。。)&br&&br&&b&2、写文档神器&br&&/b&身为科研狗、产品狗、射鸡湿的你,是不是经常写文档?一个成熟的文档可能会有好几个版本,需要不断地迭代,然后不断提交给老板看哪里需要修改。在不同版本间自如切换就要用到git branch和git rebase了。&br&想想看,用 git 的分支管理不比拷贝粘贴更方便吗?&br&&br&&b&3、健身&br&&/b&有个哥们为了激励自己健身把每日计划都放上去了,还可以邀请其他人一起来相互监督!(我才不会说我自己也开了一个呢哈哈哈)&br&&a href=&///?target=https%3A///hoosin/EveryDaySport& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&hoosin/EveryDaySport · GitHub&i class=&icon-external&&&/i&&/a&&br&&br&&b&4、找男票&br&&/b&没错,看这个项目!利用众包的形式一起罗列男友条件的 list 然后试图自己开发出一个男票233333&br&&a href=&///?target=https%3A///YixuanFranco/YourBoyfriend& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&YixuanFranco/YourBoyfriend · GitHub&i class=&icon-external&&&/i&&/a&&br&有人评论问我用这个找到男票了吗?&br&统一回复:&br&并!没!有!&br&&br&&b&5、用GitHub搭建博客、个人网站或者公司官网&/b&&p&一个有自己域名的独立博客,是不是很帅?!&/p&&p&GitHub本身提供免费的托管服务,又提供了贴心的 Pages 功能,可以绑定你自己的域名,免费、高效、不限流量,做一个个人页面绰绰有余。&/p&&p&Jekyll 的教程和我自己的博客会稍后放出。。(先给自己挖个坑)&/p&&br&&p&&b&6、用GitHub协作翻译&/b&&/p&&p&苹果官方发布的各种官方手册,比如最近开源的 Swift &a href=&///?target=https%3A///numbbbbb/the-swift-programming-language-in-chinese& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&numbbbbb/the-swift-programming-language-in-chinese · GitHub&i class=&icon-external&&&/i&&/a& 就是国内一个自发组织起来的团队,30多个人用9天时间即将翻译和校对工作全部完成,他们每人都还有自己的事情,上班、上线、创业,这么大的工作量在以往简直是不可能完成的任务!&/p&&br&&p&&b&7、项目管理&/b&&/p&&p&GitHub最初是为了开发的管理而生,当然也就具备了项目管理的潜质,特别是与开发密切联系的项目中,它的优势尽显。比如这篇文章介绍了如何使用GitHub结合 Trello 等其它工具进行项目管理:&a href=&///?target=http%3A//xiaocong.github.io/blog//team-collaboration-with-github/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&使用GitHub进行团队合作&i class=&icon-external&&&/i&&/a&。当然,GitHub还是很偏重开发的管理,一般的项目管理还是适合使用 wortile 之类的产品。&/p&&br&&b&7、政府文件?&/b&&br&之前看到一个知乎回答说:日本政府把宪法放上去了,德国政府也做过类似的事:German Federal Law Now on GitHub。除了德日之外,英美在 GitHub 上也有很多公众服务:英国政府多达 10 页的项目目录:&a href=&///?target=https%3A///alphagov& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Government Digital Service · GitHub&i class=&icon-external&&&/i&&/a& 其中很多是政府项目的源代码或者设计原则之类。芝加哥的公开地理信息:Forking your CityNew York Open City: City of New York 路 &br&(原谅我找不到这个回答了,欢迎补充)&br&&br&&b&8、科研项目及数据&br&&/b&较早的&a href=&///?target=http%3A//arxiv.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&arXiv&i class=&icon-external&&&/i&&/a&、&a href=&///?target=http%3A//plos.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&PLoS&i class=&icon-external&&&/i&&/a&之外,较有气象的可以推荐&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&mendeley&i class=&icon-external&&&/i&&/a&、&a href=&///?target=http%3A//www.doaj.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&开放期刊目录&i class=&icon-external&&&/i&&/a&&br&教育方面:&br&&ul&&li&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&OpenStudy&i class=&icon-external&&&/i&&/a&:一个社会性学习网络,通过互助来更好地学习,主题涉及到计算机、数学、写作等。&/li&&li&&a href=&///?target=http%3A//openhatch.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&openhatch&i class=&icon-external&&&/i&&/a&: 通过练习、任务等帮助新手更好地进入开源社区&/li&&/ul&&b&9、个人简历&br&&/b&&p&GitHub上的代码无法造假,也容易通过你关注的项目来了解你的知识面的宽度与深度。现在越来越多知名公司活跃在GitHub,发布开源库并招募各类人才,例如:&a href=&///?target=https%3A///facebook& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Facebook&i class=&icon-external&&&/i&&/a&、&a href=&///?target=https%3A///twitter& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Twitter&i class=&icon-external&&&/i&&/a&、&a href=&///?target=https%3A///yahoo& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Yahoo&i class=&icon-external&&&/i&&/a& ...&/p&&p&开始有了第三方网站提供基于GitHub的人才招聘服务,例如:&/p&&ul&&li&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHire&i class=&icon-external&&&/i&&/a&:通过它,可以找出你所在地区的程序员。&/li&&li&&a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&&i class=&icon-external&&&/i&&/a&:通过它,能评估某位程序员在GitHub、LinkedIn、StackOverflow、hackernews等多个网站的影响力。&/li&&/ul&甚至专门有一个项目就是自动根据你的 GtiHub 公开项目创建个人简历:&br&&a href=&/question//answer/& class=&internal&&我们可以使用 Git 以及 GitHub 做哪些事情? - Kane Blueriver 的回答&/a&&br&&br&&b&10、设计资源库(重点来了!!!)&br&&/b&做 ppt 不知道到哪里去找高质量美图?&br&最近半年初入设计圈,收集了不少 bookmark 想在年底来一个总结。 于是自己创建了这个Design- Resource List 项目,旨在让更多的设计师找资源变得有章可循。&br&&br& 先更新一部分,大概还有200多个还没放过来。。(吐血) 所以,欢迎大家也推荐自己收藏的资源,加入这个项目并一起持续更新么么哒 :)&br&&a href=&///?target=https%3A///timmy3131/design-resource& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&timmy3131/design-resource · GitHub&i class=&icon-external&&&/i&&/a&&br&&br&11、&a href=&///?target=https%3A///explore& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Explore · GitHub&i class=&icon-external&&&/i&&/a& 更多好玩的内容等你自己发现哦&br&&a href=&/question/& class=&internal&&你在 GitHub 上看到过的最有意思的项目是什么? - 调查类问题&/a&&br&&br&-------------------------------------&br&&b&#更多高阶教程:&/b&&br&&b&如果你已经不满足于上面的基础知识了,欢迎探索更高级的玩法!&br&&/b&1、&a href=&///?target=https%3A///GitCafe& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitCafe&i class=&icon-external&&&/i&&/a& / &a href=&///?target=https%3A///GitCafe/Help& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Help&i class=&icon-external&&&/i&&/a&&br&2、[git简明指南](&a href=&///?target=http%3A//rogerdudler.github.io/git-guide/index.zh.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&git - the simple guide&i class=&icon-external&&&/i&&/a&)墙裂推荐!漫画的形式很形象(恩我承认比我画的好看多了)&br&&p&3、在线交互学习 github 的网站&a href=&///?target=http%3A//pcottle.github.io/learnGitBranching/%3FNODEMO& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Learn Git Branching&i class=&icon-external&&&/i&&/a& 这个也很好玩~&/p&&p&4、[GitHub自身的官方博客](&a href=&///?target=https%3A///blog& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The GitHub Blog · GitHub&i class=&icon-external&&&/i&&/a&)&/p&5、&a href=&///?target=http%3A//danielkummer.github.io/git-flow-cheatsheet/index.zh_CN.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&git-flow 备忘清单&i class=&icon-external&&&/i&&/a&&br&&br&&b&入门书籍推荐:&br&&/b&&a href=&///?target=http%3A///subject//& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub入门与实践 (豆瓣)&i class=&icon-external&&&/i&&/a&比较基础&br&&a href=&///?target=http%3A///subject/3420144/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Pro Git (豆瓣)&i class=&icon-external&&&/i&&/a& 更高级的教程,很全面!&br&&br&对了对了,还有阳志平老师的两篇非常全面的旧文(这么称呼好生疏啊2333)&br&&a href=&///?target=http%3A///tech/github.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&如何高效利用GitHub&i class=&icon-external&&&/i&&/a&&br&&a href=&///?target=http%3A///tech/git.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Git与Github入门资料&i class=&icon-external&&&/i&&/a&&br&&br&------------------------&br&( ⊙ o ⊙ )啊!知乎居然还不支持 markdown 心好累。。&br&&br&祝大家新年快乐。&br&ps:有朋友问我真的用 github 来写小说吗?&br&o(╯□╰)o只是举例子啊!方便大家理解而已...&br&还是会写一点点代码的(*/ω\*)&br&&br&欢迎各位程序员哥哥们纠错呀,别忘了点赞赞赞!!!!!
作为一个文科妹子,我在看过几乎所有热门 github 教程之后依旧一头雾水,在近半年的摸索中终于明白啦~新年初,把自己纯小白的学习经验分享一下吧! #什么是 Github ? 必须要放这张图了!!! (图片来源) …
&b&这是个很长的故事,讲述的是一名电竞玩家转行文字编辑后的程序历程与开发感悟。&/b&&br&&br&&b&&b&-----------------&/b&&/b&&br&&b&目录&/b&&br&&b&-----------------&br&&/b&&ul&&li&&b&序&/b&&/li&&li&&b&引言(一)&/b&&/li&&li&&b&引言(二)&/b&&/li&&li&&b&一,奇葩的转行&/b&&/li&&li&&b&二,第1个电商项目&/b&&/li&&li&&b&三,一个阶段小结&/b&&/li&&li&&b&四,第2个电商项目。&/b&&/li&&li&&b&五,第3个电商项目(上)&/b&&/li&&li&&b&六,第3个电商项目(下)&/b&&/li&&li&&b&七,第4个电商项目&/b&&/li&&li&&b&八,前端开发者快速升级通关的一些个人经验总结&/b&&/li&&li&&b&九,谈谈互联网项目环境对于前端开发者向高阶晋级的影响&/b&&/li&&li&&b&十,个人职业发展的超级野路子——准职业选手转编辑再转php开发再转前端开发&/b&&/li&&li&&b&十一,个人素养与coding(一)——我是如何反复“打怪”强化“代码素养”的&/b&&/li&&li&&b&十二,个人素养与coding(二)——电竞/编辑经历对开发基本功素养的影响&/b&&/li&&li&&b&十三,个人素养与coding(三)——开发者的战术素养和程序的正与邪,开发者的道不同不相为谋&/b&&/li&&li&&b&十四,个人素养与coding(四)——开发者的战略素养对职场嗅觉的影响&/b&&/li&&li&&b&&b&后记:第4个电商项目——分裂,生存,可能还有崛起。&/b&&br&&/b&&/li&&/ul&&br&&b&&b&======================&/b&&br&这里是序。&br&&/b&&b&&b&======================&/b&&/b&&br&&br&&b&这是一篇长文。&/b&&br&&b&&br&任何一篇长文或专题,都是应该有一个序。&/b&&b&这是做为一个合格的媒体编辑/记者非常重要的技能点,要反反复复地训练。我曾经训练过很多次,但时间已然有些久远,已经好久没有动笔写这样的序,借这个机会,&/b&&b&让我再次尝试做好一名编辑该做的事情。&/b&&br&&br&这篇文章主要是对我个人这两三年从事前端开发以来的“升级打怪”经历的回顾和总结,进而来回复题主对于“&b&前端开发工程师&/b&”这一职业存在怎样的发展空间,而它进入高阶之后需要具备怎样的能力以及这些技能或知识可以从哪些地方、项目或企业中获取得到的,等前端coder职业发展上存在疑惑的问题,来发表一些我的个人见解。&br&&br&然而,我是没权力也没有义务告诉任何一个人Ta未来的路该怎么走,但却可以告诉你我是如何走的,而且我的路子是很野的,真的很野,对于很多大咖来说,绝对不能说是成功的,但对于没有机会进入一流互联网项目历练的大多数程序开发从业者而言,或许我的经历会有那么一点点借鉴的意义。&br&&br&其实我曾想过,是不是要把自己这个跳跃性如此之大的从业经历写下来,是持有怀疑态度的。曾经某猎头在把我推荐给BAT某家时,建议我不要把媒体编辑的经历做太详细的描述或直接去掉,而我确实也用一些编辑手段弱化了那段经历,还是将它放在简历里面。我觉得,这不是什么问题,写文字一直是我的兴趣,并且曾经是我的谋生手段,而且还做得不算太差,只是和程序开发的关联性少了一些。&br&&br&当然了,是获得了电话面试的机会,但第一轮就被KO了,那只是1年多以前事情,但3个月等于1年的电商开发节奏,现在我已经忘记了当时的情形,只记得那个电话来到的时候我刚刚通宵完成一个项目的公关,那会儿脑子是一塌糊涂的。&br&&br&当然,那时我的能力应该达不到人家的要求,但如果现在还有从来一次的机会,我觉得自己应该有能力拿下这样的offer,但暂时没有这个必要。&br&&br&请别误会,并不是说BAT级别的offer对我没有吸引力,而是对于现阶段的我而言,暂时不能为了这样的机会离开现有的项目和团队,而且现在的项目可以让我做擅长的和感兴趣的事情,并基本都能够按照自己的意志去落实下去,而大公司一般只能是做螺丝钉,不能有太多个人意志的,而且好的机会已然被老人们占据了,只是为了去镀金而去当别人的打手或救火队员,这显然是不理性的。&br&&br&另一方面,我其实发现了程序开发者要想快速成长,不一定非要进入BAT或一线的互联网企业中进行历练,创业项目一样可以快速成长,只要你把握好机遇和机会。请相信我,这是绝对是可行的,这就是我想把自己的经历写下来的原因。&br&&br&ok,在开始之前,我觉得预先告诉各位看客,作为一个由平面媒体编辑/记者转行做互联网开发的Coder,本人的码字功底还是不错的,因此篇幅会很长,很长,很长。&br&&br&如果你确实不感兴趣,建议不用浪费时间,聊技术或开发理念终归是有些枯燥的,也可能存在我写得不够清楚而让你看不明白的地方。不过,如果你真的对一名先是由编辑大跨行转php开发,再由php转前端切图,然后是如何用2年时间从月薪8K涨到月薪35K的职业经历感兴趣的话,那就一直往下看。&br&&br&此外,如果这篇文章有幸被某个单位相中,想转载的话,那么该给这篇文章起一个怎样的标题,我就不再代劳了,标题党的功力已经退化得差不多了。还有,我是知道有不少错别字的,但已经逃离媒体行业很久,好不容易不再为错别字太多而担心稿费被扣,那么我真的不想再为这个问题而烦恼&b&。&/b&这不再是我的职责,而是你的。不砸别人的饭碗,这是做人的本分,不是吗?&br&&br&当然,我的版权意识是比较浓的,毕竟咱也做了好多年的写手、编辑、记者。我的意思——转载可以,但记得署名,只要署名(知乎的名字就可以了),永久免费。但对于不署名的,我保留追究的权利,并至少按1000字/千元(RMB)的稿费标准收取稿费。不要觉得贵,这是我当年做写手的后期可以拿到的最高稿费标准,也就是我认为我的文字值这个价,请按此执行,不谢。&br&&br&&b&再劝一次,篇幅真的很长。&/b&&br&&br&&br&=======&b&引言1&/b&=======&br&&br&一夜之间来了这么多赞,倍感欣慰。&br&&br&正好今天我们部门要搬家,正好没有发版需求和特紧急的开发任务。我打算偷懒让人帮我打理桌面,哈哈,我好抽时间,继续补充一些关于前端开发或程序开发方面的想法,希望把这个话题扩大,让更多人来关注和讨论,期待真正的前端大牛来分享职业发展的经历,会有人需要的。&br&&br&顺便说一声,我还是想求赞的。这不违法吧?&br&&br&嗯,先让我回想一下,为啥这个题目会让我愿意投入这么多精力来码字,愿意出来现身说法?&br&&br&我觉得,这肯定是一个好问题。题主想要在职业选择迷茫期获得前辈提供的经验,而决定是否要继续走前端开发这条路线。事实上,这个问题具有普遍性意义。不管是在校学生,还是工作了,但依然对前端这个工种到底有啥可玩的,它能发展到哪个位置,前端能出技术总监或CTO吗?&br&&br&男怕入错行,女怕嫁错郎。因此,任何的回复都会对题主或关注这个话题的人的职业决策带来影响。因此,我才会对意识流的高票答案用了一些刻薄的语言来回复,并不想卖弄文字技巧,先说声抱歉,但我是故意。&br&&br&职业路径选择,是一个严肃的话题。&br&&br&补充在最后,是关于个人对程序修养的看法或理解。为啥说这个?这和前端开发或各种程序员的职业发展有啥niao关系吗?我认为是有关系的,而且很大,约往高处,关系越明显。可以这么说,个人的修养好坏在很大程度上会决定一个人的职业发展高度,写代码也是一样的。这似乎很哲理化,但我的观念就是这样的。&br&&br&当然,也是个人的观点,你可以不用同意,甚至觉得我在扮高调,放屁。但我希望你回得有理有据,咱们用文字约战。&br&&br&==========引言2===========&br&&br&暂时没有看到让人满意的回复,忍不住回复。&br&&br&先对题主说:这个问题其实有很多类似的提问了,这里有一个集合前端开发知识的整理文章,&a href=&/question/& class=&internal&&知乎上,前端开发领域有哪些值得推荐的问答? - JavaScript&/a&,在里面可以找到很多你赶兴趣的问题与答案。&br&&br&开始之前,我要对于目前的高票答案进行吐槽。&br&&br&高票答案说的确实是有点点道理的,但对于从事前端并陷入迷茫的提问人来说,绝对是然并mei啥卵yong的。不知为何大家给高票,如果只是因为答主用了一个新鲜的说辞,而大家觉得有点意思就顺手点了个赞,那么,我认为这对于知乎的严肃性是一种伤害,当然对于知乎的娱乐化则是一种推动。也可能,大家更喜欢意识流的答案,抑或是,我太严肃了。&br&&br&好吧。我尝试用严肃又有点轻松文字表达方式来回答题主的疑惑。到底前端的路可以怎么走?&br&&br&&b&纯属个人路线,仅供参考。如有雷同,请勿代入。&/b&&br&&br&&b&==========================&/b&&br&&b&一,奇葩的转行。&/b&&br&&b&==========================&/b&&br&先var身份。&br&&br&首先,前端一枚。30++++了,算是老猿吧,年纪不小了。至今没啥拿的出手成绩,就喜欢coding,不谈天荒地老,只希望能写到写不动。&br&&br&其实,我也不知道自己的水平在什么段位,年初拿到了两个一线互联网的offer,被定位在相当于阿里P6/P7样子,也不知道怎么评的,自己觉得最多P5的水准,自感能力有限和性格不适合大公司,主要是被现在领导忽悠说那些大公司政治斗争非常厉害的,我又特担心自己EQ值太低,经不起考验被扫地出门而颜面无存也就放弃了,所以还是一起做电商创业项目比较实在,薪水别太离谱,有感兴趣的活干,说话分量也有那么一点,关键是上班能自由一点点,其实也挺好的。&br&&br&当然,不是本人逼格有多高,有些大企业还是比较向往,比如企鹅厂比如狼厂,但是人家看到我这种奇葩的半路出家的野路子和尚,就连HR初期的筛选都过不了,更别说去面谈做题什么的了。哎,说起来全是泪,伤心得一塌糊涂。不说这个,还是说开发经历吧。&br&&br&在开发人员里面,我的经历应该算是比较奇葩的。怎么个奇葩法呢?&br&&br&首先,做过几年的媒体编辑,对的,是平煤(对文字要求严格,错别字个数有严格限制的),客串过记者(采访过不少上市公司的总裁,如果说互联网的话,最牛逼的是现在京东的4个总裁之一,辛弃疾的后裔,如果他还记得我的话...),曾经写过不少IT媒体的专栏,比如电脑报、电脑商情报、电脑爱好者之类的媒体,后来看到IT媒体日薄西山,就半路出家。当然,不是去少林寺做和尚,只是转行做了另一种和尚——程序猿。&br&&br&嗯,跳跃似乎有点大,好多以前的同事不忍直视,其实自我感觉还好,因为业余就爱好博客,经常玩弄各种php开源博客系统,纯属自娱自乐,虽然没有参加过任何技术培训班(其实是因为写稿的真没几个钱可以用来交学费,都挺贵的),不过不管怎样,经过一通自我学习和努力,总算混进程序开发这一行当。&br&&br&现在每天就是T恤+牛仔+拖鞋+电脑背包,非常标准的coder。所以说,曾经是个文艺青年的我,在coder这个队伍里面,自我感觉文字控制能力还算是不错的,也不知道算不算个开发技能点?&br&&br&&b&==========================&/b&&br&&b&二,第1个电商项目。&/b&&br&&b&==========================&/b&&br&当然,奇葩的转型,那么开发的经历也就比较崎岖了。&br&&br&先干了一段时间的php+前端混合开发的外包,就是那种用开源项目套页面做简单功能的二次开发类型项目,触摸最多的如wordpress、phpcms、discuz!,drupal之类的,框架也玩弄了thinkphp、CI,不过做外包的开发累死累活也没几个钱,技术也不会有太明显提高。&br&&br&后来机缘巧合吧,前前前东家要做个电商交易平台,一时半会找到合适的负责人,感觉我还看得过去就被赶鸭子上轿转做了项目主管,负责整个项目基础设施建设,其实就是招人和分配任务等,不过干得最出色就是切图和切图,虽然当时开发方式还属于未开化的刀耕火种,于是乎将自己定位成前端是比较靠谱,而php的活就兼顾一点是一点。&br&&br&还好,虽然技术比较烂,但是那个项目发展得比较顺利,拿到了A轮(号称3000W美金,水分可能比较大,不过那也是两三年前的事情了,按互联网的3个月=1年的节奏,感觉真的好遥远),有钱之后引入了一批更牛逼的开发人员(主要是前端和php),虽然是我的手下,但那波人能力在当时来看绝对是很强,我也从来没敢把人当手下,甚至很多问题都得向人家请教,技术不行就要虚心请教,这没什么好害羞的。&br&&br&人家确实也比较牛逼,带来一些先进的前端开发理念,比如前端构建,前端MVVM,纯静态html+restful api构建web网站的开发方式。这些前端开发理念在2012年-13年那会儿绝对算是非常先进的玩意,那时nodejs还未成熟,而grunt也才出来不久,fis可能还在萌芽阶段,而各大互联网公司对于nodejs也只是内部尝试探索。&br&&br&后来,随着项目发展,前端的需求越来越复杂,需要尝试MVVM、SPA的前端开发技术了,而我作为当时项目的前端负责人,也需要对前端代码做了重构才能适应项目的发展要求,就是做类似这样的事情—— &br&&br&&a href=&/question/& class=&internal&&如何将一个已经上线的项目前端部分平滑过渡至组件化和工程化? - 前端开发&/a&&br&&br&这是我做的第一个的大规模的前端项目重构,当时的技术总监评估给到我的时间是10天,但我拖到了20天才基本完成,基本天天9-10的节奏。从现在的角度看,绝对是一次失败的重构经历。但是,个人从其中获得了很多有价值的经验,让我有机会尝试了许多新的前端技术,包括:&br&&br&1,构建工具使用gulp,那时才刚出来不久,之所以选择它也就是图个新鲜,这是前端开发的通病吧;&br&2,基于less预编译的css模块化,watch监控自动编译;&br&3,基于gulp.spritesmith的雪碧图自动构建,根据watch监控雪碧图目录,自动按目录生成sp图和一份less,less保存到CSS的模块中,进而自动触发less的自动编译;&br&4,js模块化是AMD方案,模块加载是用requireJS。我们只做了一点点小改进,那就是通过gulp自动生成require.config(开发和生产各一份),第三方js模块的路径根据一定规则自动构建,而不是手工配置。&br&&br&js模块按目录的方式打包,打包后的文件带上MD5戳,非覆盖式发布,解决AB版迭代和缓存问题。现在看来那种按目录整体打包方式是相当粗暴的,代码冗余非常严重,但无奈当时的水平也就这样而已。不过呢,将需要重复手工配置的有规律的前端资源调度实现自动化,其实就是前端工程化的雏形,至少是给我打开了前端工程化探索的大门。&br&&br&事实上,这种开发思维不是当时的我所能想到的,而是项目所引入的前端人才提供的开发思维。非常感谢这位同事,虽然一起共事的时间只有短短3个月,而我们也只是点头之交,甚至你现在还可能鄙视那时技术那么烂的我,但却还当着你的领导。不管怎样,感谢你让我看到了前端开发往深入发展的另一种可能。&br&&br&应该说在很多大公司的互联网公司里面,前端开发在很多年前已经有成套的而且相当成熟的前端工程化开发体系,但对我个人或那个项目的而言,这种方式在当时绝对是非常非常新鲜的,以至于我们那个团队的人逐步离开后(那波人中的前端现在基本也是前端领域的能手了,有在YY的有在VIP也有在UC的),接手的前端无力接管这种不太一样的开发模式,而又只好用原始的方式来生产新版的前端静态资源。当然,绝对不是我留了什么后手,而是交接了一个月多,也找不到能够很好理解的前端。&br&&br&大家别笑话,现在还有很多创业型项目的前端开发模式还依然停留在刀耕火种的开发模式下,包括很多已经名声在外的电商。在中国,电商从来都不是以技术为第一生产力的,技术很重要,但却没技术人想的那样重要,大家一开始都是以实现业务逻辑为前提,先把业务跑起来,领导管你用神马开发模式,老是不能按时出货就得滚蛋。&br&&br&有兴趣,大家不妨研究一下一些知名电商的前端代码,没有模块化的知名项目还不少(包括上市的项目),而甚至还有各种裸奔的代码在线上跑的,当然这些其实是创业期发展过快的后遗症,发展太快就可能没有很好的契机做基础设施建设,那么现有的业务代码过于复杂,后来的人只能在原来的基础上改改改成能满足业务需求就万事大吉了。这其实是国情决定的,业务需求的实现大于一切,电商业务发展就像高速的列车,一旦开动起来就很难停下来。&br&&br&这种情况下前端代码模块化和重构难度就非常非常大了,你见过哪个师傅敢说给一辆高速跑的列车换零件的吗?这种坑不是一般人有信心往里面挑的,谁碰谁倒霉。另一边却是代码生产和发布效率的日渐低下,可能只是改一段静态说明文字抑或是修正一个小bug,发布流程都要跑上个把星期才敢放上线,但是大家不也活的有滋有味的嘛。从业务的角度,技术真没那么重要了。&br&&br&&b&==========================&/b&&br&&b&三,一个阶段小结。&/b&&br&&b&==========================&/b&&br&扯太远了,回一下神。回归主题。前端的路该怎么走——&br&&br&我个人认为初中级前端要想快速进步,最好的方式:&br&&br&&b&①一定要在一个有多人协作的前端团队呆过。通俗地说,要和比你牛逼的人一起干过活,见过牛人长啥模样。&/b&&br&&b&②一定要找到一个在业务上对前端有较高要求的公司或项目,特别是各种奇葩甚至恶心的需求,对于技术人来说其实是快速进步的机会。&/b&&br&&br&第二点很重要。重要的事情要念3遍,不去外包公司,不去外包公司,不去外包公司。当然,第一点更加重要。但是,有牛人愿意带,在很多时候这属于小概率事件。即便有机会进入这样的项目,你也千万别期待别人会手把手教你什么。我只能告诉你,耳濡目染的能量还是非常强大的。&br&&br&因此,从两个角度看,楼主现在项目既对技术要求不高,也似乎没看到牛人,是时候换一家公司了。还是那个意思,技术的进步一定来自于业务的不停变化,当要求你必须实现各种奇葩需求,而你又把人家的需求给实现了,那么就意味着进步。&br&&br&当然,如果天赋异禀,而且非常自律自学能力也牛逼,就当我没说。至于能否偶遇牛人,这就得看个人造化了。如果你发现某项目的确有大牛存在的,薪资要求甚至可以降低以求获得快速进步的机会。技术人要明白,你能拿多少,在一定水位之前,基本和技术能力成正比关系的。&br&&br&&b&==========================&/b&&br&&b&四,第2个电商项目。&/b&&br&&b&==========================&/b&&br&似乎又跑题了。咱们继续聊程序人生。&br&&br&我的第一个电商项目的经历很不成功,但是可能由于公司管理和文化方面的原因,导致了那一拨我认为非常不错的技术开发人才来到项目后,均不到半年都另谋高就出走了。而我认为自己需要进一步提升,也就选择了离开。&br&&br&说得直白点,就是技术能力/经验都涨了,薪水还是万年不变(本来就够低的,不知道有没有人听说过给技术经理级别的薪水定位是月薪税前8K的电商项目呢?(TM)的我白痴痴的还一干就干了整整2年,虽然自己能力可能就值这么多而已,要么干脆点把我换掉要么给点点和岗位匹配的薪酬,对吧?),又没有更牛逼的人供你参考膜拜,离开是唯一的选择。你懂的。&br&&br&这个时候时间来到了2014初了,我跳槽到了一家做在线教育的电商创业项目,月薪Double,title是前端项目经理(这叫法有点点怪怪的),做的事情其实就是前端那一块的事情,我在这个项目前后只呆了半年的样子,加入这家公司只是为了看看自己到底值多少钱,其实项目并不是很感兴趣,只是给我Double的薪资,也就加入了。&br&&br&这个项目的总负责人其实是电信那边出来的,职业的资历可能比较牛逼,但对技术其实一概不通的,而我的直接上司是技术总监但感觉也不怎么懂技术,更像是个项目经理,只会催进度,而技术的细节怎么去实现,或者前后端分工协作的模式该如何界定,他并没有任何腹案。&br&&br&也正因为他们对此没有概念,而我从上一个项目重构经历得出了一些前后端分离的经验,给他们分享了一些最新的前端开发模式的信息,告诉他们前端这一块必须尽早进行模块化构建,而那时项目才刚刚开始,我正好有机会从头做起。对我来说是很好的实验机会。&br&&br&和上一版本相比,构建的流程没有太多变化,模块化只有css和js模块化,我只是对规范和文档要求严格一些,改善了一些构建工具的监控开发体验问题,比如gulp.watch监控文件编译,如果发生语法错误就自动跳出watch问题。&br&&br&如果要说一个比较大的改变,实际是项目需求带来的变化,该项目由于需要移动端开发,而移动端需要用到前端模板引擎(artTemplate),我们在维护模板引擎的时候需要反复地维护类似这样的代码:&br&&div class=&highlight&&&pre&&code class=&language-text&&&script type=&text/html& id=&adv_list&&
&div class=&adv_list&&
&div class=&swipe-wrap&&
&% for (var i in item) { %&
&div class=&item&&
&a href=&&%= item[i].url %&&&
&img src=&&%= item[i].image %&& alt=&&&
&script type=&text/html& id=&home1&&
&div class=&index_block home1&&
&% if (title) { %&
&div class=&title&&&%= title %&&/div&
&div class=&content&&
&div class=&item&&
&a href=&&%= url %&&&
&img src=&&%= image %&& alt=&&&
&/code&&/pre&&/div&html包裹在script内部,编辑器看起来不是很好看,而且多人一起搞容易冲突。于是,我就改进了前端mvc模板维护的机制,弄成这样子:&br&&img src=&/83d71e3f839e0bfc4a8f92c_b.png& data-rawwidth=&1047& data-rawheight=&797& class=&origin_image zh-lightbox-thumb& width=&1047& data-original=&/83d71e3f839e0bfc4a8f92c_r.png&&&br&开发人员维护一份html,通过构建工具自动将html编译成AMD规范封装的js模块,模块id自动编译,比如tpl_index_flash就是tpl/index/_flash.html文件(加下划线就被编译封装在script标签内,如果不加下划线命名html文件,就直接转化为js对象),而这个文件会被编译保存在js/tpl/index.js模块中。操作模板就使用AMD模块的实例对象,但开发人维护的html比直接放在html结构中要简单多了,代码冲突也几乎没有了,而且这份模板放在js里面可以借助js压缩优化,也可以方便地实现异步调用模板,做加载上的优化。&br&&img src=&/a897fefedfd248e59a00914_b.png& data-rawwidth=&1355& data-rawheight=&796& class=&origin_image zh-lightbox-thumb& width=&1355& data-original=&/a897fefedfd248e59a00914_r.png&&&br&&br&在这个项目中,我最大的进步就是项目需要前端mvc模式开发,使得我有机会进一步改善前端自动构建的htm模板维护机制(html模板编译js化),优化Watch即编译的前端开发体验问题。但是这时候,由于我的家庭原因,需要请长假(还少1个月),经过考虑后我办理了离职,但给这个项目的前端留下的前端工具和模式基本沿用了下来。&br&&br&&b&==========================&/b&&br&&b&五,第3个电商项目(上)。&/b&&br&&b&==========================&/b&&br&家里的事情解决后,我又得重新找工作。当然,技术和经验又涨了一点点,同时一些互联网求职的经验也涨不少(主要是在线教育这个项目有个UC出来的产品经理在这方面沟通比较多,偷师了一些经验),不再向以前那样白痴痴地不调研市场行情就傻乎乎地投简历。我学会了通过内推或猎头的方式找项目,至少行情比自己投简历要好很多。大家别笑话,可能还有很多人木有意识到这点,特别是像我这种半路出家没有在很像样的互联网公司呆过的同学,这方面的意识是比较滞后的,往往会落得同工不同酬的悲惨结局。&br&&br&2014年6月底,经过猎头推荐来到了一家化妆品起家的互联网电商。这个公司的业务规模很大,我进入的是一个会包含PC、H5、APP(安卓和IOS)等多端并行开发的海淘项目,进去的时候是以其前端开发主管的身份进去的。咱们是现实的屌丝一名,在薪水的提升面前,其实title没那么重要啦,对吧?&br&&br&这个项目在一个很高大上的,反正是和屌丝身份格格不入的地方办公。创始人是化妆品电商行业比较牛逼的,而且一直做的是电商,所以这家公司的互联网氛围还是比较浓厚,但也意味着快速开发迭代的节奏。我进入的时候项目的第一期已经上线,并且已经获得了千万美金级别的风投。&br&&br&进去那天,上午是超级简单的入职培训,下午熟悉项目,第2天上午就来了一个紧急需求——3个专题活动页面需要快速上线,隔天就得见到东西,因为项目投放了一个演唱会地推,线上必须在演唱会开始之前见到相应的推广活动页面。&br&&br&当时我所负责的组员有3个(其中1个,家人出事请假了),也就是能干活的包括我,就三个人。好吧,那时我其实还叫不全两名组员的名字就大伙分工,一人一个页面,用原始的方式切切切,把东西弄出来。那天,我们三个前端、两个php以及一个测试的妹子(可能是姐姐)搞到了凌晨3点多。&br&&br&这是我第2天上班的节奏,现在还记忆犹新。其实,真的有点被吓到了。那时候(其实才是去年,但电商的节奏让我感觉已经很久很久以前的事情了),项目的后台系统很不完善,没有啥可供运营使用的东西,专题快速部署的系统当然也不会有的,那么前端的工作就被限制在一些生效效率极度低下的专题页面的开发上,而且没啥大多没啥技术含量,就只能靠人力维持。&br&&br&随着项目的发展和投入的逐步加大,活动页面需求越来越多,人力维持是不太现实的,我们需要一个专题快速生产的系统。经过项目和产品需求分析后,务必要控制在2个星期内完成,而实际给到开发的时间其实只有1周。。。但主要工作其实对编辑器二次开发,后台编辑器上传图片时,可对图片进行二次修改编辑,我们二次开发就是要增加图片生成商品锚点定位、倒计时,甚至后来还提出了直接将锚点商品加入购物者的功能。。。&br&&br&这其实主要是前端的要啃下来的活,php只是从属配合,把生成锚点代码和展示配置保存到数据库。如果有人问我前端有什么需求值得去每个前端都去尝试,那么我会将web编辑器列为其中一个。谁弄谁知道。&br&&br&这个项目是我做电商前端开发以来的最难搞的需求,没有之一。当然,如果开发周期预计得足够长,一切难点都不是问题,难就难在限时实现,和参加奥数比赛类似。由于时间有限,项目经理帮我们找了个有类似功能实现的kindeditor编辑器插件,但是人家是加密了的,我们只能把代码扒了出来进行反编译,接入到我们的后台编辑器里面(ckeditor),接下来就是两个人接力coding,住了好几天7天连锁。。。尼玛,现在回想起来,没有在马桶上坐挂,那是命不该绝。后怕。&br&&br&这个编辑器项目总算如期交付,虽然后期有很多兼容性bug,但还都在可控范围内,解决了专题发布效率低下的问题,而前端开发也由此从手工维护专题的漩涡中解脱出来。我也因此在不到1个月时间内被列入了核心开发的岗位,并提前转正加薪(税前应该大于20K了)。其实,我当时很想着离开的,毕竟开发的节奏太快了,压力着实有点大。只是作为已过而立之年而且转行跳跃非常大的一个人,这些年过得有点昏昏噩噩,没啥成就,如果在这里学会了放弃,以后可能会变成一种习惯。而且,这份经历可能成为职业污点,毕竟开发圈子其实很小,不是东家就是西家,也就坚持了下来。现在回头看来,是正确的。谁没有过放弃的念头呢?&br&&br&&b&==========================&/b&&br&&b&六,第3个电商项目(下)。&/b&&br&&b&==========================&/b&&br&但是,项目需求迭代的速度并没有因为我们程序开发经常通宵,也不会因为某个人可能存在放弃的念头而会慢下来。这才是‘正常的’互联网电商的节奏,因为去年开始做海淘的项目开始喷发,有点当年千团大战的感觉,如果你把节奏慢下来,可能意味着落后,一步慢就会步步慢。&br&&br&Boss发话说,我们第一期发版后的UI界面和性能体验实在太糟糕了,而好多页面的首屏加载速度让人难以忍受,甚至有白屏情况,让要我们尽快出台优化方案。其实,上线只有1个多月,前期又没有太多时间做基础设施建设,整套系统都是在一个相对完整的商业系统上二次开发而来,能有多少好的性能体验呢??&br&&br&但是,在民营企业里面,Boss的话就是圣旨。就得立刻响应和执行。&br&&br&于是,我们整个技术团队就对前端性能优化做了一次相对完整的评估,雅虎XX条军规,出台了一些优化方案。这个方案实施,我提出了要响应快速的迭代需求,前后端模式需要建立起松耦合的开发协作体系。其实,这个时候阿里前后端开发体系的一系列文章才出来几个月,对于业界的影响还是有的,至少这个项目来自后端开发的传统程序员基本能接受这种开发思维,但是问题是如何建立?&br&&br&对于一个已经在线上跑的项目,彻底的打翻重构是不现实的。我又一次面临了一个有难度的前端模块化工程化、前后端分离开发体系建立的需求。但这次不同,这个项目代码规模更大,业务更复杂多变,而且一直是高速运行的。&br&&br&入职后的1个多月里被专题和编辑器羁绊住了(中间还请了一个星期的假),网站的其他业务其实我没有太多精力去顾及,还好另外一个同事手脚麻利,维护性质的需求一般能很好地解决。当我有机会从头梳理前端以及服务端View层的代码逻辑时,还是被那些商业电商系统混乱的前端代码结构给震住了。&br&&br&我就不说哪家了,国内的开源或不开源的电商系统,大部分精力放在后端的业务实现层面,而前端这边压根是啥没有模块化概念的。当然,为啥这个项目的技术选型要选这样一个系统?鬼才知道呢,反正我是不知道的。但是,既然负责这一块,别人挖的坑就得由接手的人来填。这是行规,你懂的。&br&&br&在电商这个领域,解决前后端耦合的问题,主要要做好服务端模板层的规划,控制权尽可能只压在前端或后端,多方维护的情况尽可能减少。以PC端为例,这里是要求SEO的,那么页面的渲染必须在服务端完成。当然,这里会涉及页面性能优化和前端资源调度的问题,服务端模板层最好是由前端团队来掌控。然而,不是每个前端开发人员都是懂后端语言的,这个其实是提高了前端人才的准入门槛,但这又是必须的。&br&&br&至少我前面几个电商项目都是这种情况,其他电商的做法就不清楚了。这里简单说我们的做法:&br&&br&&b&1,服务层按功能分层、分域,服务端view层独立开发域。&/b&&br&&br&比如,核心底层基类分出一个开发域,通用函数或组件也可以一个开发域,后台各种管理运营或配置系统划分为不同的域,而前台的,比如首页、列表页或专场、搜索、详情、购物车、登录注册找回密码、会员中心也可以分别各一个域。此外,即便是服务端模板层的开发语言,无法前端团队没能力决定,也至少单独一个开发管理的域。这是前后端松耦合的关键。&br&&br&当然了,不是各种开发域分得越细就越好,务必要根据按开发团队的人数以及实力来确定。如果分的太多太细了,代码合并管理的重复量会提升。每个人可能同时负责好几个域的开发,解决了代码耦合,但却降低了开发效率,而且增加系统间联调的风险,这是不合理的。&br&&br&&b&2,对服务端模板层进行公共页面、组件抽象。&/b&&br&&br&比如全站的很多头尾部是共用的,变化的部分相对较少的,进行公共文件剥离和抽象。垂直类电商一般是以页面为颗粒度的,页面展示大多以大块大块的图文列表出现,太精细的抽象是没必要的,至少我所负责的项目大抵如此。其他大众类电商因为要展示的商品种类多,页面可能会做的非常细腻,以更精细的页面组件来组织view层代码结构才会显得有必要。&br&&br&&b&3,开发前端静态资源调度机制。&/b&&br&&br&为什么要做这个事情?这个问题我就详细展开了,太多了。理论层面的,可参考&br&&a href=&/question/& class=&internal&&大公司里怎样开发和部署前端代码? - 前端开发&/a&&br&当然,因为业务不同,我们有自己实现机制。但需要解决的问题基本上,张云龙讲得比较通俗易懂,我也就不班门弄斧。&br&&br&&b&4,我们遇到的问题——TTI延迟引起的前端构建框架重构&/b&&br&&br&前端模块机制是建立在requireJS基础上的,但之前我做的是异步的方式,在以前的项目中其实对于性能优化没有那么苛刻,但是这个项目不一样。是当前竞争最惨烈的一个垂直领域——海淘。因此,任何一个可以改善用户体验的优化,对于项目的意义都是巨大的。&br&&br&从用户体验出发的几个核心时间指标包括:Start Render、DOM Ready、Page Load、TTI。不同的性能指标对用户体验的影响是不同的,而指标本身受哪些因素的影响也是不同的。一般的前端优化都会考虑前面三个的优化点,而最后的TTI优化往往被忽略。我们却碰到了必须解决这个问题的点,业务场景发生在需要加入购物的按钮上。比如详情页的下单按钮。&br&&br&不好意思,我不好拿原来自己做的项目来做说明,就随便找一个电商的详情页来替代 因为大家的问题是类似的,比如这页面 &a href=&///?target=http%3A///gz1912.html%3Ffrom%3Dindex_hotdeals1_pos003_onsale& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&姬芮(Za)隔离霜聚美订制礼盒&i class=&icon-external&&&/i&&/a&&br&&img src=&/df5e1aa35a1b66a16aff4_b.jpg& data-rawwidth=&1440& data-rawheight=&1800& class=&origin_image zh-lightbox-thumb& width=&1440& data-original=&/df5e1aa35a1b66a16aff4_r.jpg&&&br&如上图所示,两张页面是加载先后的两次截图对比。当用户打开页面时候,页面结构的渲染很快就完成了,但一些异步的请求较慢,SKU的计算也需要耗费一些时间,但问题用户可以看到加入购物车的按钮啊,大红色的很吸引人,让人点击的欲望是很强烈的。但是,有些时候网速稍微卡断一点,那么这个加入购物车的按钮就一直点击不了的。很多小白用户就可能会问,为啥不能点击加入购物车啊?我敢肯定一定有这样的投诉,只是看网站开发者如何对待这个问题而已。&br&&br&这个就是典型的TTI问题。&br&&br&&b&什么是&/b&&b&TTI?&/b&? 最好百度。简单滴说,Time To Interact指的是页面可交互的时间。这个应该越早越好,如果页面因为需要等待异步请求的结果才能计算,而异步的数据可能是回不来的,那么就不要让用户可以这么快地看到可交互的元素,因为它会吸引人去点击,但却没有响应,投诉就必然。&br&&br&当然,这个问题发生在我们的网站很多地方,比如详情页、购物车以及生成订单的页面,要知道这些页面的交互分分钟对转化率产生影响的。然而,采用requireJS异步请求模块的方式,这个TTi问题就会更加突出。&br&&br&因为页面首次渲染会发生在css加载完成之后,如果不做任何处理,加入购物车的按钮就会很早呈现在用户面前而触发用户去点击,但由于页面一方面要等待异步的js完成,还要等js发起的ajax请求返回的数据做进一步处理,即便是我们对按钮做loading状态处理,但require异步的js可能会发生很多意外,页面的购物车按钮区域一直在loading,而导致用户无法点击加入购物车。&br&&br&也就是说,我们用requireJS框架代码的模块化管理,但却不能在生产环境中直接使用它的异步机制,因为它会对TTI延迟带来影响。怎么办?&br&&br&ok,到这里你可能对js模块化有些很反感,有这么多毛病干嘛还要模块化啊?这个问题很深刻,但问题不能单纯从一个角度看待,任何事物都是有两面性的。&br&&br&其实,如果用其他模块化方案,只要是异步加载js的,都会存在类似的问题,包括seajs。要知道模块化开发一定是团队配合的必然选择,既然已经选择了requireJS作为模块化机制,那么它带来的问题,我们就要着手研究解决方案。&br&&br&&b&5,&/b&&b&前端模块化开发与&/b&&b&TTI延迟问题的解决&/b&&br&&br&首先,我们的前端团队已经熟悉了requireJS,基本都能掌握AMD模块开发要点。首次重构的代码已经发布上线后,必须先将TTI问题严重的几个页面,做loading状态处理,让用户等待。&br&&br&但这只是过渡方案,更优化的解决方案是要对前端开发构建流程做优化调整,把异步的模块在发布生产时必须合并起来,作为同步加载的模块,放置在页面最底部,而且合并的文件应尽可能降低代码的冗余。&br&&br&但是页面js资源不仅仅只是优化一个页面,将一个页面combo成一个模块就完事了,应该想服务端模板一样,js也要分层,将最底层最核心的类库抽离出来单独combo,多个页面之间共用的模块也要单独combo(这种形式的combo结果可能有多个,因为如果共用模块过多,按一定的大小来合并,我们的原则是mini化之后不能不要超过200K一个文件,如果超过了,就要另起一个文件,当然,这个要灵活处理),前面两者是在页面之间可以相互继承的,而只有当期页面私有逻辑的js模块则应该是一个单独的模块。&br&&br&那么,网站js最终的形式可能是这样的:&br&&img src=&/805edad04af25_b.png& data-rawwidth=&486& data-rawheight=&318& class=&origin_image zh-lightbox-thumb& width=&486& data-original=&/805edad04af25_r.png&&这是我们希望得到的模块combo结果。我们采用的线下combo,然后将combo的结果发布到CDN,这样就需要解决以下的一些列问题:&br&&br&1,如何区分核心js和页面共用js?&br&2,构建流程上如何解决它们的修改,然后编译的版本迭代问题?&br&3,对于开发的角度,在本地开发能够快速调试,包括源码调试以及combo状态调试?线上的问题代码,如何方便开发人员调试?&br&4,私有模块化如何调用共用模块的方法,或采用怎样的机制来对共用模块进行单独的实例化?&br&5,多个模块化之间,combo的先后顺序是什么?&br&6,内嵌资源比如img图片引用,如果引用的图片发生了修改,如何解决它的缓存问题?&br&7,如果业务模块很多,比如好几百个(电商的业务很容易达到这样的量),那么可能因严重影响代码发版的速度,是不是考虑增加构建的缓存机制,或服务端combo的机制?&br&……&br&&br&好吧,这些问题最终演变出来的,其实就是一整套环环相扣的前端工程化解决方案。&br&&br&这里面,单独就js而言,要涉及很多代码规范问题,比如js通用模块开发标准,私有模块开发标准,私有模块提升为公共模块的机制,第三方插件的改造规范,js模块的碎片化程度如何掌握?这是一个度的问题,等等。&br&&br&&img src=&/6be45aba9fd_b.png& data-rawwidth=&600& data-rawheight=&446& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&/6be45aba9fd_r.png&&&br&因为加入CDN网络后的,强缓存解决方案是更换URL路径,而对于访问量大一点的电商来说,非覆盖式发布是最佳的选择。前端架构的开发机制还会涉及服务端模板引擎的如何加载前端静态资源的问题,如果是纯静态的移动端网站优化,可能还需要你自己设计一套开发机制以及静态html开发的具备模块化能力的模板引擎,来解决动态变化的css或js引用问题以及开发调试的体验问题。&br&&br&好了,这其实是业务逻辑开发以外的,高阶前端开发者需要面临上述的前端痛点问题。这会涉及方方面的调整,比如前后端边界的处理,前后端交互的API规范,开发调试环境、测试以及发布流程的设计,版本迭代回滚,以及性能监控等等一些列衍生问题。。。&br&&br&我可以负责任地告诉,不同的项目,前端架构设计是不太一样的,因为业务逻辑不同,前后端开发人员配比以及能力模型也不同,那么前端架构就可能得采用不同的设计方案。&br&&br&当你的业务发展要面临这些问题时,可能前端就没有大家想想中那样简单了?&br&&br&&div class=&highlight&&&pre&&code class=&language-text&&“一叶障目不见泰山”
“前端说白了只是语法糖,一种编写页面的容器api和程序语言的封装,是计算机发展的大树长出的小枝桠。”……
&/code&&/pre&&/div&&br&如果我说了这么多,举了这么实例和理论分析,如果大家还认同这样的看法,就当我什么话页没有说过。就此打住别再往下看,但我也劝你别再干前端了。对于这种似乎是很文艺的表达方式,咋一看,好像挺有意思的,但如果要想玩文字游戏,我们就得按游戏的规则来把问题说清楚:&br&&br&请问什么是前端的“一叶障目不见泰山”?&br&请问什么是语法糖?&br&请问什么又是计算机的大树?&br&请问计算机的小枝桠又是什么?&br&&br&&u&作为前端从业者,我对于这样的无厘头描述是表示反感的。因为这是一个很严肃的话题,而编程又是要求逻辑严谨的工作,任何意识流的或空泛的描述都应该是不被允许的。当然,如果我的文字伤害了答主,或违反了知乎的游戏规则,那么该对我关小黑屋的就关小黑屋。我没有意见。&/u&&br&&br&是的,前端从某个角度上看,业务本身的实现并不难,不会涉及太多深层次的算法问题,但是如果要将页面优化做到比较好,解决方案诞生的过程中一定涉及很多计算机底层的逻辑算法的问题。&br&&br&比如facebook这种的网站,是上万个AMD模块的代码规模,不同国家的用户进入同一个页面要加载的css和js组合可能是几百万种时,人家可是要找博士来研究前端架构的解决方案!当然,这个不是我说的,如果认为我在吹牛散布假消息,大家记得找张云龙大侠来问清楚——&br&&a href=&///?target=https%3A///fouber/blog/blob/master/.md& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/fouber/blog/&/span&&span class=&invisible&&blob/master/.md&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&br&当然,绝大多数项目是没有到达这样的量级的,比如我们也就几百个js模块,但是对这些模块的依赖关系处理,就已经涉及递归、排序、排重、对比以及插入等底层算法,只是很多人还没有接触到这一层面而已,并不意味着前端开发就不需要。此外,如果你的前端团队如果要用到nodejs做中间层开发,前端开发人员还会面临大量的服务端开发的问题。这是另一个话题,我就不再说了。&br&&br&总之,在我看来,前端开发的难点不在于某个业务逻辑的本身实现,而在于规模化生产的前端工程化问题的解决。&br&&br&&b&==========================&/b&&br&&b&七,第4个电商项目。&/b&&br&&b&==========================&/b&&br&这是第3个项目电商的延续,因为是同一拨团队继续干的项目。这份经历暂时不方便透露太多,只能说这是以我原来的第3个电商项目的技术团队核心成员为班底的,又一个从零开始的项目,同样是海淘。经过半年多一点,现在已经走到了B轮,暂时只能透露这个消息。&br&&br&对于做海淘的电商而言,因为我们属于后进者,节奏要比其他项目要快一些,要不是没有任何机会的了,也就意味着别人可能是半年或3个月就融资一次,那么我们就得基本上2个月就进行一次融资,至少在C轮以前必须是这样的速度,要么只有等死。可想而知,要能完成这样的融资节奏,那么开发、推广和运营是怎样的节奏呢?&br&&br&作为参与者当然是非常非常辛苦的。这几个月不能说天天有发版,但基本上每周二周四会有一个小版本,1周或2周就得完成有一个中级版本,可能是多个版本交替迭代的,而一个月就一个大版本更新。竞争激烈,我们必须按这样的速度去迭代才可能有活路。&br&&br&那么,单就前端开发而言,如果没有很好的模块化、自动化、流程化的控制体系,你能想象搞这种速度的开发迭代,哪个程序员会和你玩?还好,半年来30来号技术开发,技术团队的离职率基本为0,技术负责人的项目管理能力非常厉害的(我知道的就是,华为那边出接近100W年薪挖他,他没走,当然我也是跟着他混)。&br&&br&ok,不能再说了。只是有感而发,差点停不下来。如果哪天这个项目有个完结了,比如我离开它,或项目走到了上市或被收购,或资金断流散场,我会回来把这份经历补充好。埋坑。&br&&br&&br&==================这里是分割线=================&br&&br&&b&八,前端开发者快速升级通关的一些个人经验总结。&/b&&br&&br&&b&这纯属个人经验,不一定适合你。还是那句话,如果感兴趣就往下看,不强求。&/b&&br&&br&在评论里面,我说了,从转行做全职前端,从切图开始升级发展到做电商前端架构,只是花了2年时间。不管你信不信,这绝对是事实。当然,我是有好几年php+前端混合开发基础的,不算是从白丁开始的,但转行那时候的前端技能最多就是初中级别,只会用jq插件完成逻辑。&br&&br&我现在的好几下属,做前端的时间都比我长,有个已经5年了,但依然找不到方向。我平时在招聘前端时,面试的前端好多都干了3-5年了,还是那样。不是我想笑话这样的人,或绝对自己真的可以吹牛逼,我只是觉得可能是大家没有看清楚前端这个工种的未来,没踩准快速升级通关的节奏。当然,也可能你还不够努力。反正,种种原因吧,各有不同,我只能说我自己的。&br&&br&这两年,我手机里面全部是前端开发书籍,没有100本页有50本,背包里面总有一本关于技术开发的书籍。每天除了上班干活,吃喝拉撒睡外,全部时间几乎全部放在看书写代码写demo上面。以至于忽略了很多事情,包括对家人的照料。这些努力是你看不到的。当然,除了自身努力外,我确实也踏对了前端开发迅猛发展的节奏,比较早地接触了Nodejs,比较早地看到了前端构建前端工程化的价值。&br&&br&不过,有时候一个人的价值往往不仅仅是看他的代码能力有多少,经验有多少,还要看你能号召多少人跟你一起干。就好比一个人的财富,并不只是他所拥有的银行存款、固定资产或者股票等等他直接控制的财富的总和,而是除了这些意外,他能调动多少资源,所有他能调动的资源页都是他的财富。&br&&br&技术人做到一定程度之后,再往上发展,需要有一定的号召力,因为绝大多数企业不会给你开那么高的薪酬,甚至给你股份期权。当有几个人愿意跟随你的时候,那么在找项目谈价格时,就会掌控议价的主动权。因为,你已经不是一个人在战斗,你的价值绝对不是以一个人的开发技能来衡量的,而是由跟随你的团队的整体实力来决定。&br&&br&当然,有人愿意跟着我,是因为这两年我除了一直站在代码开发的第一线外,还坚持了以下几样东西:&br&&blockquote&&b&1,从不藏私。&/b&把你知道的东西,毫无保留地分享给你周围的同学,记得是毫不保留。知道多少,分享多少,这样才会不断促使自己去知道的更多。技术层面不存在教会徒弟饿死师傅这种事情,如果你抱有这样的想法,那就太狭隘了。&br&&br&&b&2,对代码要有洁癖。&/b&洁癖到什么程度?包括一个空格,一个标点符号,不要觉得无所谓,一定要觉得有所谓。要追求能力极限上的完美,包括逻辑判断的严谨、文档的完善、代码格式的完美。&br&&br&&b&3,言出必行。&/b&一个需求来到我这里,只要我有答应别人的时间节点,不管如何也要想尽办法把它实现了。如果确实无法按时,一定提前沟通,但二次调整的时间一定一定要准时,下死命也要完成。事不过三,不给自己留任何后路或找理由。&/blockquote&总之,言出必行既是项目管理能力问题,也是个人诚信问题,这样团队里的其他人才会愿意相信你,依赖你,跟随你。&br&&br&其实,很多时候技术和经验积累到一定程度之后,业务处理上的能力或技巧,大多数人的差距其实很小的,但拉开差距的往往不是技术本身,而是对待人,对待技术,或对待需求的态度不一样。我不敢说,技术层面有多厉害,即便是现在的项目给我的技术评级是P7,之前也有拿到的几个offer给我技术评级也是P6/P7,但我自认为没有到达这个水准。&br&&br&既然如此,可能是对待人,对待技术,或对待需求的态度上做得不错。&br&&br&举个新鲜的例子:&br&&br&&p&前几个月我们有一个微信jsSdk分享有礼的需求,这个需求非常重要,我决定自己书写前端逻辑,避免耽误与外部的合作。但这个需求关键的点是需要获得两次微信用户授权,一个是交易授权签名,一个是分享授权签名。但由于后端开发同事没有经验,只做了交易授权签名,但他也已经非常努力了,基本通宵达旦了,但当我发现另一个授权签名没有服务端接口时,前端的逻辑是走不通的,等别人调休完成再做吗?但项目其实是务必在第二天提测,要不无法按时上线,而广告已经投放出去了。&/p&&br&&p&如果是你会如何处理?&/p&&br&&p&当时已经是凌晨5点了,后端的同事都疲惫不堪回去休息了,我决定自己来书写服务端另一个授权签名的api,但这里有一个坑,授权签名的算法里面要求前端post一个url,而这个URL必须是不经过转义,但微信jsSDK里面没有特别说明这个(可能是我没看仔细忽略了),从安全的角度我习惯对前端ajax的url字段进行了转义处理,导致一直调试不通,找了各种原因,还是没找到原因。。。已经是早上9点多,别人已经又来上班,而我还没有下班,但已经很困很困了,但知道这个需求很重要,咬牙再坚持,碰巧在这个页面 &a href=&///?target=http%3A//mp./debug/cgi-bin/sandbox%3Ft%3Djsapisign& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&微信 JS 接口签名校验工具&i class=&icon-external&&&/i&&/a& 看到了问题所在,如图&/p&&p&&img src=&/f38e65bbb3ee8b159e06_b.jpg& data-rawwidth=&850& data-rawheight=&612& class=&origin_image zh-lightbox-thumb& width=&850& data-original=&/f38e65bbb3ee8b159e06_r.jpg&&在php端对这一字段反转义,调试就通了,在那天中午前能够按时提测,最后没有太大问题终于是上了线。虽然还有不少细节没处理好,但至少别人接手可以轻易解决。那天我回家修休息已经是下午3点了。也即是,我从前一天10点开始,一直干到了第二天的下午3点,就为了完成当初承诺的时间节点。&/p&&br&&p&事实上,这个需求不是很难,但技术开发有非常明确的截止时间,而需求又是我自己亲自做的。如果是其他同事,看到api似乎是服务端的事务,其实作为前端开发的你,人家都走了,你也跟着走人,最后担主要责任的一定不是前端开发,对吧?但是,这不是我的做法,因为这个项目既然是由你来接手,并评估可以按时完成的,那么不管哪里出了问题,这都是你的问题。因此,我会去书写服务端的api逻辑,尽管这似乎不是我的责任。&/p&&br&&p&好了,说了这么多。其实快速通关可能是需要时运,但更多是个人的努力与坚持。这个没有什么诀窍的,而且很多时候和技术本身没有关系,而是对待困难的态度要有点点不一样。&/p&&br&最后,回归到楼主的问题本身——到底前端的路可以怎么走?&br&&br&前面提过两点,如果当你要从中级跨入高级前端,这除了项目环境外,还需要你要有一定的坚持,并且选对前端未来的发展路线,至少我认为有以下几种路线可供选择:&br&&br&&b&1,业务层面的高手,做到非常了解某个领域的业务逻辑。比如垂直类电商的业务逻辑,这样你其实可以尝试带队,做项目管理,最终发展做项目经理。&/b&&br&&br&&b&2,前端工程化解决能手。就是我在第六章罗里吧嗦列举出来的一堆问题,你都能有腹案去解决,每个项目的工程化方案都是不一样的,这种人才的需求也很旺盛,尤其是哪些基础设施建设不太完善的项目。&/b&&br&&br&&b&3,nodejs服务端方面开发。这个可能在岗位上更像是后端开发了,只是前端可以通过这个方向进入服务端开发的领域,做的牛逼,其实做一下CTO的梦还是可以做一做的。。。&/b&&br&&br&&b&4,如果上面觉得都不适合你,但你对前端开发又比较了解,那么转行做产品页也是不错的选择。具备开发思维的产品,在很多时候是一个优势。&/b&&br&&br&&b&5,创业。&/b&&br&&br&&b&按现在的行情,&/b&&b&前面4个方向任何一个方向做好了,作为打工者,你的收入都不会太低,一般不会低于25W年薪吧?&/b&&br&&b&如果第一点和第二点你都能做得很好,前端架构师这种岗位就可以去试试,35W以下年薪可以不用考虑;&/b&&br&&b&如果你连第三点也做得不错,那么系统架构师职位是可以去尝试的,50W年薪的岗位就应该在你的考虑范围;&/b&&br&&b&如果你连这4点页都做的比较到位,我觉得你最合适干第5点,这个值多少钱,就不知道了。&/b&&br&&br&&b&此外,移动互联的前端开发也是一个很不错的发展方向,你也可以尝试做&/b&webapp和hybrid app的开发。。。多端的开发能力,也是前端开发人员不错的发展方向。&br&&br&=================================&br&感谢,周末码的字能感动到人,还是比较高兴的。希望我的这份回答能成为个人在知乎的一个亮点,因此我决定继续分享一些东西,顺便预先挖一个坑。&br&================================&br&&br&&p&如果要说一个通行的经验,我会说——做一行就爱一行。&/p&&br&&p&我想以后自己不写代码了,经过这两年开发历程,自认为做其他职业其实也不会太烂。这可能很性格有关,就比如当初我做编辑,也不算差,还算是当时报社的第一打手,好多黑报道几乎出自我手,只是当初好单纯的说。&/p&&br&=======================&br&&p&&b&九,谈谈互联网项目&/b&&b&环境对于&/b&&b&前端开发者向高阶晋级的影响。&/b&&/p&=======================&br&&br&&b&(上)&/b&&br&&br&&p&我在前面曾经提到过一个观点——“技术人要明白,你能拿多少,在一定水位之前,基本和技术能力成正比关系的。”&br&&/p&&br&&p&什么是一定水位之前?什么又是一定水位之后?&/p&&br&&p&这里我觉得要对这两个名词做一下解析,避免大家对我的这种说辞产生误解,以为是这位编辑是在玩弄文字游戏。&/p&&br&&blockquote&所谓的“一定水位”,就是指当一个前端开发者的开发能力进入中高级之后,不同特点的前端开发者再往深入发展时将会出现后续发展路径上的选择差异的那个状态或时刻。&/blockquote&&br&&p&名词解析总会是有点绕的,但这是我所能表述的最简单的一种解析了,希望看官你能明白我所指的是什么。但在这里,我应该要对中高级前端的开发能力进行一个定位,否则我们并不清楚这种“水位”到底该如何度量。&/p&&br&&p&当然,这个不同行业/企业对“中高级前端开发”的定位或理解是不一样的。单就电商而言,我觉得是基本上能够独立解决各种业务需求,独挡一面了。如果非要有一个衡量的标准,那么我们公司的定位是具备以下技能点:&/p&&blockquote&&p&1,html、css和js较为扎实的基本功,尤其是js方面能力,要能脱离jq/zepto之类的工具类库也能干活,具备良好的面向对象编程的思维,能够书写和维护较大规模的前端业务代码。&/p&&p&2,熟练使用Sass、LESS、Stylus等CSS 预处理器中的一款。&/p&&p&3,掌握至少一种前端模块化开发规范及其相关框架,比如AMD(requireJS)或CMD(seajs)。&/p&&p&4,掌握至少一款前端MVC/MVVM框架,并有一、两个项目实战经验。&/p&&p&5,熟悉至少一门热门的后端开发语言,比如php,java。&/p&&p&6,团队协作方面,有在具有较大规模的电商开发经验,必须具备至少一个有多人协作开发的项目参与经验,掌握SVN或Git中的一种。&/p&&p&7,熟悉前端页面的优化原则,熟悉http协议的通讯机制,对静态资源缓存机制较深入的了解。&/p&&p&8,熟悉HTML5和CSS3,有移动H5网站开发经验。&/p&&/blockquote&&p&把H5开发经验加上,是因为移动互联网已经是几乎所有的互联网项目的业务发展重心,随着时间的往后推移,以后这一点应该成为前端招聘JD的标配。但我之所以把这项列在最后,因为从PC端切换至H5端开发,其实并不是那么难,只要项目需要,给一点点时间,任何一个有经验的前端都能快速切入,如果连这点快速学习能力都不具备,Ta不可能是一名中高级别的前端。&/p&&br&到了这一层面,按当前的市场行情,基本可以以20K为分水岭(就是这个话题——&a href=&/question/& class=&internal&&月入20k的前端该具备什么能力? - 前端开发&/a&)。不同的公司略有差异,一流公司不差钱,这个阀值一般会更高一点。我没有在一流的公司里面呆过,但在三四流的电商项目中跑了一圈,了解到的情况就是这样子。当一个开发人员越过了这个分水岭,绝大多数企业都不太可能只会让他单纯地去写代码,而不要求他做其他事情。不同的环境,安排的代码外的事项一般这样子:&br&&br&1,开始要求带新人,负责项目需求的跟进与开发任务的实施。职位一般表现为主管或经理,或即便是没有职位上的直接提升,但干的活都是要求带人,日常工作就会涉及需求评估,分配任务和难点攻关,重要或紧急需求的实现(救火队员),等等。&br&&br&2,代码能力比一般的前端高了,也有可能被安排一些底层的前端工具研发,以提高前端的生产效率为主要任务的团队中去。&br&&br&后面这种情况,在规模大且核心业务已趋于平稳的互联网企业可能会碰到,比如百度的FIS团队,比如阿里蚂蚁金服的前端工程技术团队。了解Web开发的都应该知道,由于前端开发语言本身的局限性,导致前端开发工作的碎片化非常严重,重复的工作非常多,开发体验是相当不好的,规模化生产的效率低。企业的规模越大,这种糟糕的开发体验就对其生产效率的负面影响页就越突出。因此,像BAT级别的企业才会设立专门的部门来解决这个问题。&br&&br&但是,其他快速发展的项目则普遍是第1种情况,尤其是快节奏的电商,比如唯品会、聚美、蘑菇街,等等,还有N多。为什么?因为电商务必要快!那么人才培养成熟后(或招揽的人才具备同等水平),往往被优先安排到业务最繁忙的事务上。因为这样才能最快地出成绩,而前端生产效率低下这种负面影响并不是那么的重要,甚至可以说一点也不重要。&br&&br&因为中国的电商几乎都是以市场营销为导向的,满足业务需要才是最关键的。只要业务发展快,融资节奏跟得上,前端这一技术细分领域是否模块化,是否工程化,就显得真的不那么重要了。页面少几个连接数还是多几个连接数,并不会有立竿见影的影响,高并发上来了,顶不住的话,有大不了我多几台服务器就是了,但营销需求的开发一定要优先满足。&br&&br&而规模更小或创业初期的互联网项目,如果能用得起这样前端的,往往都是除了开发外,还有做更多的事情,包括招聘、培训、带团队、需求评估与跟进,书写业务逻辑,甚至还要自己切图,事情多,工作杂,加班加点是正常的,每天过得累死累活,比如我就是这么过来的。&br&&br&于是,有前瞻意识的前端leader才可能会去考虑前端构建、前端模块化以及工程化方面的事情,而把一部分精力投放到提高前端团队的生产效率的构建工具开发上面来。当然,我算是比较早就意识到这一点的前端之一吧,所以才能快速地成长。&br&&br&那么,这两种不同岗位安排,对开发者后续的影响又有什么区别呢?&br&&br&在规模越大的团队,工作划分得越细腻,专注的点就越深,但同时就可能会被限制在某个狭窄点上,成为某个角落的技术专家。但页会因为缺少去了解具体业务细节的机会,而让他的发展受到限制,那么这种人才往往是不太适合去做创业的,一直呆在大平台上才更容易创造高价值。&br&&br&就前端这个工种而言,如果它的发展都不跳出前端这个范畴,那么我的理解是这样的:&br&&img src=&/8aa7feaa5ca5_b.png& data-rawwidth=&868& data-rawheight=&404& class=&origin_image zh-lightbox-thumb& width=&868& data-original=&/8aa7feaa5ca5_r.png&&&br&在大平台的前端团队中,一般容易批量生产技术专家类型的人才,这些人才对他所在技术领域的研究会足够深,但也可能(只是一种相对较低的可能性,不是绝对)不太容易诞生前端架构类型的人才。为什么?因为做前端架构必须要深入了解业务,同时要务必了解业务团队的能力模型。&br&&br&比如:&br&我们都知道,解决规模化生产的javascript开发模式有很多种,未必一定是AMD或CMD,还有以命名空间或类继承为原子模型的js组件化架构,等等。但是,不同类型的多人协作开发模式,对于前端开发者的能力要求是不一样的。很显然,AMD或CMD规范的模块化方案对于开发者的能力要求是最低,而以一个通用基类+继承的组件化方案,对开发者的要求可能是最高的。&br&&br&为什么我会这么说?&br&&br&因为很多初中级的前端还可能还不知道何为类,何为继承。js的类和继承并不是那么的直接,请问你要他如何在这种开发模式下书写业务逻辑?而AMD或CMD就不一样了,我可以不要求你务必理解规范的意义,但我可以强制要求开发人员严格按照规范的实施标准,依葫芦画瓢,让前端组员快速参与到业务逻辑的开发中。&br&&br&相比之下,AMD的规范更加死板,但也更加容易对入门的开发者进行强制要求,对于小成本的创业型项目,就能快速地通过简单培训,让初级的前端也能参与到业务的开发上来,这也就是我为什么一直使用requireJS作为前端架构的模块化方案的原因。&br&&br&因为它足够简单,入手的资料也齐全,我连培训文档都不用自己书写(像阮一峰这样的大神分享的知识、文档给创业项目太多的帮助了),而我所经历的都是创业项目,初期的给到手上的工程师质量是层次不齐的,从4k-5K到10K+++不等,请问这样的原材料,如果要像不缺钱的项目那样使用各种高档的性能可能更好的模块化方案,可行吗?换做是你会这么干吗?&br&&br&创业一定要压缩成本,以最小的成本做出价值,这才是一个合格的架构师该考虑的,性能啊,设计模式啊,这些都不是最重要的。请问如果一直是在高大上的项目打滚的前端工程化设计开发者,咱们花大成本挖他过来,给到创业项目的方案可能是无法落地的。&br&&br&我所在的第3个电商项目就出现了这样的情况,花大价钱挖来了一批来自BAT的前端高工,但是出来好多前端解决方案都是无法落地。当然,我从他们给出的解决方案以及相关的代码中,学到了很多,让我见识了淘宝、百度之类的一些内部前端开发模式。&br&&br&在这里,我可以给半路出家没有机会进入顶级公司的人,你真的想知道别人如何做的,或想了解细节是什么。说实在的,有太多的途径了。最简单的一招就是——比如利用招聘需求,发布一个高要求高薪资的岗位,让HR帮你把对应的人给约过来,多聊一聊,就基本能知道了。谁叫大公司的HR喜欢带有色眼镜看待半路出家的人,难道你就不能以牙还牙以眼还眼吗?&br&&br&这种招数我确实用过一两次,但毕竟是灰色手段,用多了对身心健康是有害的。最佳的方法是多看人家分享的演讲视频,多参加行业交流。比如这两年我通过自费参加的行业分享会的事情,报名费和路费没有万把块也有好几千了吧,当然如果能通过公司层面的企业间交流或引入高级人才来获得成长机会当然是最好的。&b&越是高端的人才,掌握的核心知识点就越多,&/b&&b&当然&/b&&b&价值会越高。半路出家的和尚一定要把握好这种智力资源,务必要对高端知识有良好的嗅觉!!!&/b&&br&&b&&br&对的,能力比你强的人,对你来说就一种活着的智力资源,而不是你的职场对手,做人别那么狭隘。&/b&比如我第1个电商项目,从2012年开始到2013年公司融资成后引入了一批优秀的人才,我当时是拿着8K的薪水,干着项目经理的活,而引入的手下却拿着你两倍甚至更高的薪酬时(我是主管,手下的薪酬我一定是有办法知道的,不管公司层面再怎么保密也是没法的,当然这种属于非常初级别的权力游戏,如果你连这点手段都不会使,你可能需要回炉去做最底层的开发者)}

我要回帖

更多关于 2017华硕笔记本推荐 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信