如何避免前端源代码 知乎被人随意修改知乎

我谈谈做PC开发的常用工具吧&br&everthing:快速搜索文件&br&grepwin:可以快速搜索某个文件夹下文件的内容&br&autohotkey:可以自定义快捷键完成琐碎工作,并且支持脚本&br&directory opus:一个功能强大的shell,但是是收费的,淘宝上160块钱一个license&br&sublime text:不仅仅是前端开发需要,作为一个出色的代码编辑器,无论开发什么软件都需要&br&notepad++:对编码的支持比前者更好一点,支持的代码格式似乎也更多一点&br&sysinternal工具集:这几乎是PC客户端开发的必备软件,里面的Process Explorer,TCPView,DebugView都是经常要用到的工具。&br&HttpAnalyzer,WireShark这类的抓包工具也是必备&br&大致一下子想到的就这些,都不错,建议都准备一个。&br&最后我想说的是,无论如何,给自己配置一个SSD,一个机械键盘,一把人体工学椅。这些东西能大大提升你写代码的愉悦感,一个250G的SSD大概500左右,一个国产的机械键盘也就三四百块钱。人体工学椅买国产的达保利就可以,我用的就是最低端的那款,也就2000块钱,反正我觉得用了以后腰比以前好多了,打乒乓球时拉起弧圈刷刷叫,以前打一晚上腰就不行了,当然,这也有可能是心里作用。。。
我谈谈做PC开发的常用工具吧 everthing:快速搜索文件 grepwin:可以快速搜索某个文件夹下文件的内容 autohotkey:可以自定义快捷键完成琐碎工作,并且支持脚本 directory opus:一个功能强大的shell,但是是收费的,淘宝上160块钱一个license sublime text…
没人邀请,看到这个问题不错,路过怒答。(多图预警)&br&&br&前百度工程师,曾负责百度 &a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&前端集成解决方案&i class=&icon-external&&&/i&&/a& 的核心设计与开发工作。我现在称这个领域为【前端工程】。没错,这是我最爱唠叨的问题域。&br&&br&这是一个非常有趣的 &u&&b&非主流前端领域&/b&&/u&,这个领域要探索的是如何用工程手段解决前端开发和部署优化的综合问题,入行到现在一直在学习和实践中。&br&&br&在我的印象中,facebook是这个领域的鼻祖,有兴趣、有梯子的同学可以去看看facebook的页面源代码,体会一下什么叫工程化。&br&&br&接下来,我想从原理展开讲述,多图,较长,希望能有耐心看完。&br&&br&&br&---------------------------- 我是一条分割线 ----------------------------&br&&br&&img src=&/07c2bdef6ccef3ada425d61e3062dd09_b.jpg& data-rawwidth=&389& data-rawheight=&238& class=&content_image& width=&389&&&br&&br&让我们返璞归真,从原始的前端开发讲起。上图是一个“可爱”的index.html页面和它的样式文件a.css,用文本编辑器写代码,无需编译,本地预览,确认OK,丢到服务器,等待用户访问。前端就是这么简单,好好玩啊,门槛好低啊,分分钟学会有木有!&br&&br&&img src=&/d53b504bbc9f1887eddf06d_b.jpg& data-rawwidth=&400& data-rawheight=&98& class=&content_image& width=&400&&&br&&br&然后我们访问页面,看到效果,再查看一下网络请求,200!不错,太(TM)完美了!那么,研发完成。。。。了么?&br&&br&等等,这还没完呢!对于大公司来说,那些变态的访问量和性能指标,将会让前端一点也不“好玩”。&br&&br&看看那个a.css的请求吧,如果每次用户访问页面都要加载,是不是很影响性能,很浪费带宽啊,我们希望最好这样:&br&&br&&img src=&/6a8ca252211cec85a31ac4_b.jpg& data-rawwidth=&401& data-rawheight=&98& class=&content_image& width=&401&&&br&利用304,让浏览器使用本地缓存。但,这样也就够了吗?不成!304叫协商缓存,这玩意还是要和服务器通信一次,我们的优化级别是变态级,所以必须彻底灭掉这个请求,变成这样:&br&&br&&img src=&/fd74ab2bf02d79dd7aff180e_b.jpg& data-rawwidth=&400& data-rawheight=&98& class=&content_image& width=&400&&&br&强制浏览器使用本地缓存(cache-control/expires),不要和服务器通信。好了,请求方面的优化已经达到变态级别,那问题来了:你都不让浏览器发资源请求了,这缓存咋更新?&br&&br&很好,相信有人想到了办法:&b&&u&通过更新页面中引用的资源路径,让浏览器主动放弃缓存,加载新资源&/u&&/b&。好像这样:&br&&br&&img src=&/8ad1ade55f5_b.jpg& data-rawwidth=&304& data-rawheight=&110& class=&content_image& width=&304&&&br&下次上线,把链接地址改成新的版本,就更新资源了不是。OK,问题解决了么?!当然没有!大公司的变态又来了,思考这种情况:&br&&br&&img src=&/7dc885bf_b.jpg& data-rawwidth=&579& data-rawheight=&310& class=&origin_image zh-lightbox-thumb& width=&579& data-original=&/7dc885bf_r.jpg&&&br&页面引用了3个css,而某次上线只改了其中的a.css,如果所有链接都更新版本,就会导致b.css,c.css的缓存也失效,那岂不是又有浪费了?!&br&&br&重新开启变态模式,我们不难发现,要解决这种问题,必须让url的修改与文件内容关联,也就是说,只有文件内容变化,才会导致相应url的变更,从而实现文件级别的精确缓存控制。&br&&br&什么东西与文件内容相关呢?我们会很自然的联想到利用 &a href=&///?target=http%3A///view/.htm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&数据摘要要算法&i class=&icon-external&&&/i&&/a& 对文件求摘要信息,摘要信息与文件内容一一对应,就有了一种可以精确到单个文件粒度的缓存控制依据了。好了,我们把url改成带摘要信息的:&br&&br&&img src=&/dbc1d_b.jpg& data-rawwidth=&588& data-rawheight=&310& class=&origin_image zh-lightbox-thumb& width=&588& data-original=&/dbc1d_r.jpg&&&br&这回再有文件修改,就只更新那个文件对应的url了,想到这里貌似很完美了。你觉得这就够了么?大公司告诉你:图样图森破!&br&&br&唉~~~~,让我喘口气&br&&br&现代互联网企业,为了进一步提升网站性能,会把静态资源和动态网页分集群部署,静态资源会被部署到CDN节点上,网页中引用的资源也会变成对应的部署路径:&br&&br&&img src=&/0866cb58bcfa06b162e0d91_b.jpg& data-rawwidth=&574& data-rawheight=&259& class=&origin_image zh-lightbox-thumb& width=&574& data-original=&/0866cb58bcfa06b162e0d91_r.jpg&&&br&好了,当我要更新静态资源的时候,同时也会更新html中的引用吧,就好像这样:&br&&br&&img src=&/16d6d6c32e52ef1d1a835fb2ed15f864_b.jpg& data-rawwidth=&574& data-rawheight=&456& class=&origin_image zh-lightbox-thumb& width=&574& data-original=&/16d6d6c32e52ef1d1a835fb2ed15f864_r.jpg&&&br&这次发布,同时改了页面结构和样式,也更新了静态资源对应的url地址,现在要发布代码上线,亲爱的前端研发同学,你来告诉我,咱们是先上线页面,还是先上线静态资源?&br&&ol&&li&&b&&u&先部署页面,再部署资源&/u&&/b&:在二者部署的时间间隔内,如果有用户访问页面,就会在新的页面结构中加载旧的资源,并且把这个旧版本的资源当做新版本缓存起来,其结果就是:用户访问到了一个样式错乱的页面,除非手动刷新,否则在资源缓存过期之前,页面会一直执行错误。&br&&/li&&li&&b&&u&先部署资源,再部署页面&/u&&/b&:在部署时间间隔之内,有旧版本资源本地缓存的用户访问网站,由于请求的页面是旧版本的,资源引用没有改变,浏览器将直接使用本地缓存,这种情况下页面展现正常;但没有本地缓存或者缓存过期的用户访问网站,就会出现旧版本页面加载新版本资源的情况,导致页面执行错误,但当页面完成部署,这部分用户再次访问页面又会恢复正常了。&/li&&/ol&好的,上面一坨分析想说的就是:先部署谁都不成!都会导致部署过程中发生页面错乱的问题。所以,访问量不大的项目,可以让研发同学苦逼一把,等到半夜偷偷上线,先上静态资源,再部署页面,看起来问题少一些。&br&&br&但是,大公司超变态,没有这样的“绝对低峰期”,只有“相对低峰期”。So,为了稳定的服务,还得继续追求极致啊!&br&&br&这个奇葩问题,起源于资源的 &u&&b&覆盖式发布&/b&&/u&,用 待发布资源 覆盖 已发布资源,就有这种问题。解决它也好办,就是实现 &u&&b&非覆盖式发布&/b&&/u&。&br&&br&&img src=&/9b3a9df114d14a14130a70abf5733837_b.jpg& data-rawwidth=&631& data-rawheight=&456& class=&origin_image zh-lightbox-thumb& width=&631& data-original=&/9b3a9df114d14a14130a70abf5733837_r.jpg&&&br&看上图,用文件的摘要信息来对资源文件进行重命名,把摘要信息放到资源文件发布路径中,这样,内容有修改的资源就变成了一个新的文件发布到线上,不会覆盖已有的资源文件。上线过程中,先全量部署静态资源,再灰度部署页面,整个问题就比较完美的解决了。&br&&br&所以,大公司的静态资源优化方案,基本上要实现这么几个东西:&br&&br&&blockquote&&ol&&li&配置超长时间的本地缓存
—— 节省带宽,提高性能&br&&/li&&li&采用内容摘要作为缓存更新依据
—— 精确的缓存控制&br&&/li&&li&静态资源CDN部署
—— 优化网络请求&br&&/li&&li&更资源发布路径实现非覆盖式发布
—— 平滑升级&br&&/li&&/ol&&/blockquote&&br&全套做下来,就是相对比较完整的静态资源缓存控制方案了,而且,还要注意的是,静态资源的缓存控制要求在&b&&u&前端所有静态资源加载的位置都要做这样的处理&/u&&/b&。是的,所有!什么js、css自不必说,还要包括js、css文件中引用的资源路径,由于涉及到摘要信息,引用资源的摘要信息也会引起引用文件本身的内容改变,从而形成级联的摘要变化,大概示意图就是:&br&&br&&img src=&/edf10bb428d39d721e1e_b.jpg& data-rawwidth=&709& data-rawheight=&371& class=&origin_image zh-lightbox-thumb& width=&709& data-original=&/edf10bb428d39d721e1e_r.jpg&&&br&好了,目前我们快速的学习了一下前端工程中关于静态资源缓存要面临的优化和部署问题,新的问题又来了:这(TM)让工程师怎么写码啊!!!&br&&br&要解释优化与工程的结合处理思路,又会扯出一堆有关模块化开发、资源加载、请求合并、前端框架等等的工程问题,以上只是开了个头,解决方案才是精髓,但要说的太多太多,有空再慢慢展开吧。或者大家可以去我的blog看其中的一些拆解:&a href=&///?target=https%3A///fouber/blog& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&fouber/blog · GitHub&i class=&icon-external&&&/i&&/a&&br&&br&&blockquote&总之,前端性能优化绝逼是一个工程问题!&br&&/blockquote&&br&以上不是我YY的,可以观察 百度 或者 facebook 的页面以及静态资源源代码,查看它们的资源引用路径处理,以及网络请中静态资源的缓存控制部分。再次赞叹facebook的前端工程建设水平,跪舔了。&br&&br&建议前端工程师多多关注前端工程领域,也许有人会觉得自己的产品很小,不用这么变态,但很有可能说不定某天你就需要做出这样的改变了。而且,如果我们能把事情做得更极致,为什么不去做呢?&br&&br&另外,也不要觉得这些是运维或者后端工程师要解决的问题。如果由其他角色来解决,&u&&b&大家总是把自己不关心的问题丢给别人&/b&&/u&,那么前端工程师的开发过程将受到极大的限制,这种情况甚至在某些大公司都不少见!&br&&br&妈妈,我再也不玩前端了。。。。5555&br&&br&&br&&br&========================[ 10.29更新 ]========================&br&这里更新一下:&br&&br&在评论中, &a data-hash=&4b1a0d3f97fddca9ed6fc820a7be261c& href=&///people/4b1a0d3f97fddca9ed6fc820a7be261c& class=&member_mention& data-editable=&true& data-title=&@陈钢& data-tip=&p$b$4b1a0d3f97fddca9ed6fc820a7be261c& data-hovercard=&p$b$4b1a0d3f97fddca9ed6fc820a7be261c&&@陈钢&/a&&a data-hash=&aed& href=&///people/aed& class=&member_mention& data-editable=&true& data-title=&@fleuria& data-tip=&p$b$aed& data-hovercard=&p$b$aed&&@fleuria&/a& @林翔 提到了rails,刚刚去看了一下,确实是完成了以上所说的优化细节,对整个静态资源的管理上的思考于本答案描述的一致。很遗憾我直到今天()才了解到rails中的assets pipeline。这里向以上3位同学道歉,原谅我的无知。&br&&br&不过整篇回答没有讲解到具体的解决方案实现思路,只是介绍了前端在工程化方向的思考,答案本身是可用的,了解rails的人也可以把此答案当做是对rails中assets pipeline设计原理的分析。&br&&br&rails通过把静态资源变成erb模板文件,然后加入&%= asset_path 'image.png' %&,上线前预编译完成处理,不得不承认,fis的实现思路跟这个几乎完全一样,但我们当初确实不知道有rails的这套方案存在。&br&&br&相关资料:英文版:&a href=&///?target=http%3A//guides.rubyonrails.org/asset_pipeline.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The Asset Pipeline&i class=&icon-external&&&/i&&/a&,中文版:&a href=&///?target=http%3A//guides.ruby-china.org/asset_pipeline.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Asset Pipeline&i class=&icon-external&&&/i&&/a&&br&========================[ 10.31更新 ]========================&br&用 &a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&F.I.S&i class=&icon-external&&&/i&&/a& 包装了一个小工具,完整实现整个回答所说的最佳部署方案,并提供了源码对照,可以感受一下项目源码和部署代码的对照。&br&源码项目:&a href=&///?target=https%3A///fouber/static-resource-digest-project& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&fouber/static-resource-digest-project · GitHub&i class=&icon-external&&&/i&&/a&&br&部署项目:&a href=&///?target=https%3A///fouber/static-resource-digest-project-release& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&fouber/static-resource-digest-project-release · GitHub&i class=&icon-external&&&/i&&/a&&br&部署项目可以理解为线上发布后的结果,可以在部署项目里查看所有资源引用的md5化处理。&br&&br&这个示例也可以用于和assets pipeline做比较。fis没有assets的目录规范约束,而且可以以独立工具的方式组合各种前端开发语言(coffee、less、sass/scss、stylus、markdown、jade、ejs、handlebars等等你能想到的),并与其他后端开发语言结合。&br&&br&assets pipeline的设计思想值得独立成工具用于前端工程,fis就当做这样的一个选择吧。
没人邀请,看到这个问题不错,路过怒答。(多图预警) 前百度工程师,曾负责百度
的核心设计与开发工作。我现在称这个领域为【前端工程】。没错,这是我最爱唠叨的问题域。 这是一个非常有趣的 非主流前端领域,这个领域要探索的是如何用…
1、SublimeLinter
= 错误语法&br&2、JsMinifier
=自动压缩js文件&br&3、Sublime CodeIntel
=代码自动提示&br&4、Bracket Highlighter
=代码匹配&br&5、CSScomb CSS
=属性排序&br&6、SublimeTmpl
=快速生成文件模板&br&7、SideBarEnhancements
=设置sublime text2/3支持浏览器预览&br&8、ColorPicker
=调色盘&br&9、Tag
= Html格式化&br&10、Clipboard History
= 剪贴板历史记录&br&11、SideBarEnhancements = 侧栏右键功能增强&br&12、GBK to UTF8
=GBK转黄成UTF8&br&13、SFTP
=ftp插件&br&14、WordPress
= WordPress函数&br&15、PHPTidy
=排版PHP代码&br&15、YUI Compressor
=压缩JS和CSS文件&br&16、Alignment
=代码对齐&br&17、Emmet
=大名鼎鼎呀&br&18、Prefixr
=css自动添加 -webkit 等私有词缀&br&&br&---------此类问题,建议大家先百度一下,有很大大牛写了相关插件,也很好找-------------
1、SublimeLinter = 错误语法 2、JsMinifier =自动压缩js文件 3、Sublime CodeIntel =代码自动提示 4、Bracket Highlighter =代码匹配 5、CSScomb CSS =属性排序 6、SublimeTmpl =快速生成文件模板 7、SideBarEnhancements =设置sublime text2/3支持浏览器…
&b&若想转行做技术,考研、自学都可以,但你首先要有兴趣。&/b&&br&我以我的经历给题主一些建议,但是我的每条建议都是建立在「对计算机、互联网充满兴趣」这一前提上的。我本科读的是物流管理(经济管理类专业),现在大四。我在2015年秋天决定转行,在2016年夏天找到工作,如今在杭州一家医学互联网公司做后端开发。&br&&br&&b&一、转专业或转行的原动力,一定要是兴趣驱动,而不是利益驱动。(注意:这是判断你要不要转专业、转行的关键因素)&/b&&br&&br&我是靠着兴趣自学,然后转行成功的,而且我对计算机、互联网的兴趣确实已经持续很多年头了。&br&&br&所谓兴趣驱动,就是要求你对计算机或互联网有着充分的好奇心和足够支撑你学习的热情。&br&有些人,他们使用电脑上网就是聊聊天看看剧、查查资料打打游戏,如果还会P个图,那就已经很了不起了。&br&但有些人,他们就是很在意一个网页为什么可以排版得如此美观,在意一个有趣的小程序到底是怎么做出来的,在意为什么贴吧大神可以把照片中史泰龙的头搬到曾轶可的身体上。&br&后面这类人,很容易将好奇心转化为兴趣,然后将兴趣转化为能力,甚至内化为价值观。&br&而且兴趣的驱动有一种独到的好处,它会给予你十足的动手能力,以及动手后的成就感和欢欣。&br&「成就感」是个很了不起的东西,它如果和兴趣相辅相成、共同驱动,你的学习速度会提高一个量级。&br&&br&所谓利益驱动,则是认为自己没什么可以拿出手的吃饭的本领,以为IT待遇高、门槛低,是一条好路子。现在市面上一大堆培训班出来的「程序员」找不到工作,叫苦不迭,说到底就是奔着这条高待遇的路子来的———其他的先不管,我先赚着钱再说。若你是这种想法,转专业、转行前一定三思。&br&&br&毕竟兴趣才是最好的老师,换句话说,「&b&你要有一颗Geek的心,而不是功利的心。&/b&」&br&&br&&b&二、善于自学,杜绝一开始就想要拜师、培训的想法。&/b&&br&&br&这一点我想首先说一个小故事。我之前是一名Beatbox口技表演者,总会有同学或者陌生人,在得知我拥有这个技能后,立刻就要认我做师父,恨不得我可以嘴对嘴,啊不,面对面地给他们讲课,他们希望我能够让他们速成。&br&实际上,Beatbox的基本技巧,网上的教学视频数不胜数,而且他们还讲得比我好,比我更专业。但是,我的「徒弟们」却鲜有人能够耐心地去搜搜教程、跟着视频认真得学一学。&br&&br&同样,想学计算机技术,网易公开课、Coursera、慕课网、实验楼,这些都是自学的好地方,而且花销很小。何必要到技术社区苦苦地寻求一个师父呢?何必丢一笔钱给培训机构呢?&br&但是,自学一定要学得系统,要有一套自己的流程,而且一定要善于使用搜索引擎,这个我后面再讲。&br&&br&&b&三、善于使用搜索引擎,这是一个人非常优秀的特质。&/b&&br&&br&&img src=&/v2-e3dfe43dfccd030e37c804f0_b.png& data-rawwidth=&650& data-rawheight=&608& class=&origin_image zh-lightbox-thumb& width=&650& data-original=&/v2-e3dfe43dfccd030e37c804f0_r.png&&&br&倒不是说一定要用谷歌,也可以用百度(虽然黑百度是知乎的政治正确)。其实一定程度上来讲,Google、Baidu、Bing、搜狗都可以。当你善于使用搜索引擎查询自己的问题时,用哪个引擎根本不重要,因为一个引擎搜不到答案, 你就会换一个引擎,直到搜出自己想要的。&br&&br&====== 更新=======&br&&br&&b&四、关于系统化学习、自学的流程。&/b&&br&&br&前面有位答主提到过,自学最好不要按照科班的课程设置来,他说得很对。&br&我们要选择「&b&兴趣+成就感双驱动&/b&」这种学习方法,就要在一开始最大程度地避免能浇灭自己信心的东西,基础原理可以在入门以后再进行学习。&br&科班的计算机课程都是从「计算机组成原理、数据结构、算法导论、C语言、计算机通信原理」开始的,这些基础课程有一个共性,课程中的概念大多都很晦涩、抽象,因为它们接近底层原理,十分容易让人一头雾水,这对自学者来说极为不利。&br&那什么样的自学流程才是适合自学者的?&br&我认为是「&b&系统学习一门编程语言 -& 自己给自己提需求 -& 动手折腾 -& 遇到问题 -& 逐一解决 -& 理解原理&/b&」,我就遵从的这条路线。&br&先说说这条路线的好处。很多人在入门了一门编程语言后就变得手足无措,他们根本不知道自己到底能做什么。而自己给自己提需求,就可以驱使自己迈开步子、动起手来。&br&我举个例子:大学里的班长有时候需要收集班级同学的信息,比如寒假几号离校。通常班长的做法就是,班级QQ群里或微信群里吼一声:「麻烦同学们把离校时间私聊给我!」。最后自己手动整理成表格。&br&假如我是一个刚学会PHP的班长,我可以想到,利用PHP+数据库做出一个表单网页,去收集班级同学的信息,然后马上动手去实现。动手的过程中我可以慢慢掌握前台如何正确的将数据传输到后端、后端如何将数据储存到数据库中。我还会想着将数据库的信息如何导出为Excel表格,于是我打开搜索引擎搜索自己的疑问,从而了解到一个叫做PHPExcel的PHP库,简单学习一下官方提供的使用方法,就可以将数据库中每人的离校时间数据转为Excel表格。&br&做完这个网页,不光自己省心省力,而且如果有同学说一句「班长还会写网页啊?」就更能够让自己心里美滋滋,这就是「成就感」。&br&接下来不断循环「&b&提需求 -& 动手做 -& 遇到问题 -& 解决问题&/b& 」这个过程,刚入门的自己也就慢慢成长起来了,起码不再手足无措了。&br&&br&那么如何系统地学习一门编程语言呢?&br&&b&首先,你必须要知道编程是严谨的,要本着一颗严谨的心去学习。&/b&&br&你最好按照这个顺序来,大部分的教学视频也是这样来的:&br&&ul&&li&&b&了解这门编程语言的基本语法。&/b&&/li&&li&&b&了解这门语言的基本数据结构(整数、浮点数、布尔、字符串、数组、列表、字典等)&/b&&/li&&li&&b&如何定义变量及其数据类型(有的语言不需要定义数据类型),如何给变量赋值。&/b&&/li&&li&&b&如何正确使用这门语言的逻辑语句(If、For、While)&br&&/b&&/li&&li&&b&如何运用这门语言的常用函数。&/b&&/li&&li&&b&如何自己写一个自定义函数,如何给自己的函数设置参数。&/b&&/li&&/ul&&b&至此,你已经可以自己做点东西了。然后:&/b&&br&&ul&&li&&b&理解面向对象,运用面向对象。&/b&&/li&&li&&b&学会Debug,学会查错排错。&/b&&/li&&li&&b&学会使用各种已有的类库。(前辈栽的树、造的轮子)&/b&&/li&&li&&b&学习一门框架。&/b&&/li&&li&&b&……&/b&&/li&&/ul&上面提到的这些,网络上的教学视频基本都会讲到。我强烈建议你在听课的时候,打开搜索引擎放在一边,时刻准备着搜索自己不理解的问题。同时准备一个编辑器,老师敲什么代码你就敲什么代码。&br&学习的过程中不要好高骛远,不要刚学会基本语法就想着上手框架。这样会走很多弯路,这就不算是「系统学习」了。&br&若你在学习的同时,想要给自己提一些小需求,那么你可以尽管提、尽管做。&br&首先捋清楚思路,至少动手的方向不要错。然后脑中构思实现过程,逐一去实现。途中若遇到基本功的问题就回去温习基本功,遇到超纲的问题就去求助搜索引擎。直至你完成了自己的需求,「成就感」和欢欣就会让你更加坚定这条道路。&br&&br&&b&五、关于方向的选择。&/b&&br&&br&其实我在准备写这一条建议的时候我就后悔了,实在是夸下了海口。因为我只是一个刚转行成功、刚踏入职场的新人,而且现在只在做开发岗,运维、测试等岗位都还没尝试过,所以对于方向选择这个问题上我实在不敢给出什么人生经验。&br&先了解一下目前市面流行的编程语言吧!搞清楚每门语言的适用方向(像Python这种有多种方向的要都了解下),是Web开发还是移动APP开发或者桌面程序开发?然后到招聘网站看各自适用岗位的岗位职责,了解具体的工作内容。&br&多结识一些行业前辈,他们会给你很多有用的建议。我是因为7年前就开始写自己的独立博客,所以会认识一些互联网行业的朋友,在转行过程中他们帮了我很多,感谢他们。&br&多到技术社区逛一逛,最后决定选好什么语言。&br&一定不要犹豫太久(我很后悔大三才做转行的决定)。&br&&br&&br&&b&本答案还会不定期更新。&/b&&br&&b&最后祝各位都能转行成功,共勉。&/b&
若想转行做技术,考研、自学都可以,但你首先要有兴趣。 我以我的经历给题主一些建议,但是我的每条建议都是建立在「对计算机、互联网充满兴趣」这一前提上的。我本科读的是物流管理(经济管理类专业),现在大四。我在2015年秋天决定转行,在2016年夏天找到…
说到,带前端新人,我以亲身经历来讲,真心不容易,尤其是小白同学,楼主提到三个问题:&br&第一 可以分哪些阶段培养?第二,每个阶段安排什么样的开发任务比较好?第三, 每个阶段以掌握到什么样的技能为标准&br&&br&分几个阶段,应该结合公司使用的技术,来划分,但是HTML,CSS,JS基础必然是基本的也是必须掌握的,结合我厂的情况,分为三个阶段:&br&第一, CSS和HTML基础,结合w3school自学,css布局 &a href=&///?target=http%3A///& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&学习CSS布局&i class=&icon-external&&&/i&&/a&&br&此阶段安排的任务很简单,就是随便截网页,PSD2HTML,让新人自己练手,一般聪明点的学生,这个过程也就1周搞定。&br&推荐此书: &a href=&///?target=https%3A///subject/4736167/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&精通CSS(第2版) (豆瓣)&i class=&icon-external&&&/i&&/a&&br&&br&掌握技能 PSD2HTML&br&&br&第二,JS基础,这个就有难度了,结合实际经验,很多新人学习JS基础语法,如没有实战,仅仅看书,即使学了,也不会掌握的很好,除非之前有过其他语言编程经验。&br&此阶段任务安排是看慕课网或妙味课堂的视频,并完成课后练习,再结合犀牛书巩固复习。&br&&br&掌握技能 &br&&ol&&li&语法: 标识符, 数字, 字符串, 语句, 表达式, 字面量, 函数&/li&&li&对象, 函数, 继承, 数组, 正则, 变量提升, 闭包, 原型继承, 立即自执行函数, 高阶函数, 函数的四种调用方式等&/li&&li&DOM, BOM 和 Ajax 请求&/li&&/ol&&br&第三,也是最后阶段,安排学习AngularJS&br&该阶段任务就是独立完成饿了吗或者飞饭首页的练习。&br&掌握技能 &br&1. ui-router, ng-resource, AngularJS&br&2. git 使用&br&&br&当新人经过1个半月的培训后,就可以上项目fix bug了。&br&&br&来公司不到6个月,带过很多新人,有0基础的,有培训机构培训过的,有后端转前端的,他们中学的好的,往往不是那些聪明的学生,而是那些勤奋的学生。&br&&br&另外,送一份我个人总结的资料:&a href=&///?target=https%3A///ShuyunXIANFESchool/newcomer& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - ShuyunXIANFESchool/newcomer: 新人培训&i class=&icon-external&&&/i&&/a&
说到,带前端新人,我以亲身经历来讲,真心不容易,尤其是小白同学,楼主提到三个问题: 第一 可以分哪些阶段培养?第二,每个阶段安排什么样的开发任务比较好?第三, 每个阶段以掌握到什么样的技能为标准 分几个阶段,应该结合公司使用的技术,来划分,但…
# 安装一个浏览器 (个人建议chrome, 并且小白期间不要把时间放在浏览器兼容的问题上)&br&# 找一些好教材 (教材推荐的太多了这里不再啰嗦, 请自行搜索)&br&# 安装一个查文档的工具 (其实网上可以直接查, 如果用的时mac的话推荐&a href=&///?target=http%3A///dash& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Dash for Mac&i class=&icon-external&&&/i&&/a&, 其他操作系统请自行搜索)&br&# 一个轻量级的编辑器 (注意是轻量级, 而且是编辑器. 既然是要学习而且是从基础学起, 就不要用一些太自动化的功能. 推荐: Sublime Text, Vim, Textmate. 如果从来没有用过Vim就不推荐了, 别浪费这个时间)&br&# 安装xcode以及command line tools&br&# 安装node, npm, 和各种packege&br&# 推荐一个本地服务器环境的工具: &a href=&///?target=http%3A///en/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&MAMP & MAMP PRO&i class=&icon-external&&&/i&&/a&&br&完
# 安装一个浏览器 (个人建议chrome, 并且小白期间不要把时间放在浏览器兼容的问题上) # 找一些好教材 (教材推荐的太多了这里不再啰嗦, 请自行搜索) # 安装一个查文档的工具 (其实网上可以直接查, 如果用的时mac的话推荐, 其他操作系统请自行搜…
&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&当然,这个不同行业/企业对“中高级前端开发”的定位或理解是不一样的。单就电商而言,我觉得是基本上能够独立解决各种业务需求,独}

我要回帖

更多关于 神秘代码 知乎 的文章

更多推荐

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

点击添加站长微信