遭受“野生程序员”
腾讯公司内部的团队许多,在团队办理上有项目和专业两个维度。也即是说,有些团队是项目维度的,全部团队一起保护一个商品,成员来自不相同的作业岗位;有些团队是专业维度的,比方一个组都是前端工程师,保护不相同的商品。
由于前端组是规划部最接近后台技能的团队,所以团队平常的作业和技能交流同享,都不局限于前端技能范畴,还包含许多效劳器端或许移动端的技能。从前端到后端,一些技能疑问都要咱们自个来处理。
在招聘前端工程师的时分,咱们对应聘者的请求是,在把握底子前端技能的前提下,最好有更为全部的技能。这么,即便咱们的项目人力构造、途径和方向发 生改变的时分,他也可以愈加灵敏地转移到别的人物中。并且技能的全部更能体现一自个对技能的热心以及较强的学习才干。从团队多样性来讲,多一些技能品种的 话,咱们在一起也能磕碰出新的火花。
有一次,我在QQ群发布了一条简略的信息:“招聘前端工程师,全栈更佳。”随后有一个“全栈工程师”A君向我自荐。
我细心看了他的简历:“三年作业阅历,拿手PHP、MySQL数据库、jQuery、HTML和CSS,对CDN加快和网络安全也颇有研讨。”他的简历让我眼前一亮,所以我跟他进行了一次简略的电话面试。
电话面试的第一个环节按例是让A君简短地介绍自个。A君在一个传统作业的小公司做IT技能支撑作业,公司的3个网站项目都是他一手建立,从架构到编 码细节他都如数家珍。他声称能处理全部技能疑问,老板提出的一切需求都能完结,并且只要他能完结。跟着近来公司业务量越来越大,他还招了两个部属,可是主 要的编程作业仍是他在做。
我问他:“咱们的职位是前端工程师,那么您有哪些前端方面的技能呢?”他答复:“我拿手HTML、CSS和JavaScript。”
“关于Web功能优化,您有哪些了解和阅历吗?”他思索了一阵答道:“咱们在发布项目之前紧缩CSS和JavaScript源代码,这么文件体积就变小了,用户加载必要资本所花的时刻也就更短了。”我持续说道,极好,还有吗?他想了半响,答不上来了。
本来关于Web功能优化,有十分多的方面可以去做,我期望应聘者能尽量多答复一些。
紧缩源码和图像
JavaScript文件源代码可以选用混杂紧缩的办法,CSS文件源代码进行通常紧缩,JPG图像可以依据具体质量来紧缩为50%到70%,PNG可以运用一些开源紧缩软件来紧缩,比方24色成为8色、去掉一些PNG格局信息等。
挑选适宜的图像格局
假如图像颜色数较多就运用JPG格局,假如图像颜色数较少就运用PNG格局,假如可以通过效劳器端判别浏览器支撑WebP,那么就运用WebP格局和SVG格局。
兼并静态资本
包含CSS、JavaScript和小图像,削减HTTP恳求。
敞开效劳器端的Gzip紧缩
这对文本资本十分有用,对图像资本则没那么大的紧缩比率。
运用CDN
或许一些揭露库运用第三方供给的静态资本地址(比方jQuery、normalize.css)。一方面添加并发下载量,另一方面可以和别的网站同享缓存。
延伸静态资本缓存时刻
这么,频频拜访网站的访客就可以更快地拜访。不过,这儿要通过修正文件名的办法,保证在资本更新的时分,用户会拉取到最新的内容。
把CSS放在页面头部,把JavaScript放在页面底部
这么就不会堵塞页面烘托,让页面呈现长时刻的空白。
每一个条目都可以进一步深层发掘下去。
Web功能优化分为效劳器端和浏览器端两个方面。
Web功能优化分为效劳器端和浏览器端两个方面。
此外,由于中文的歧义性,Web功能优化这个词既可以解读成页面加载速度(Page Speed)的优化,也可以解读成页面烘托功能(Page Performance)的优化。或许是二者的调集。所以,应聘者假如能在这个疑问上多做一些剖析,会有很高的加分。可是A君在网络功能方面的研讨仅仅浅 尝辄止,停留在紧缩资本方面,这说明他还没有满意了解HTTP协议自身。
关于网络功能和HTTP协议,作为大公司的前端工程师是十分垂青的,由于每一个页面都会有亿万用户拜访量,任何一点对效劳器带宽压力都会集腋成裘,终究形成很大的本钱。关于这方面的技能详解,我在后边会有一篇独自的文章来剖析。
接着上面的故事,我想已然他对Web功能优化方面不太了解,也许他是一个偏后台的程序员,因而就又问道:“关于效劳器端MVC架构的技能完结,您是怎么了解的?”他说:“是数据模型、视图、控制器的别离。”
我更进一步问道:“这种架构办法有啥长处?您在项目中是怎么运用这一架构的?”他答复说:“MVC的架构办法会让项目可保护性更高,一切触及界面 的代码都在视图(view)里边,一切触及基地逻辑的代码都在模型(Model)里边,URL路由之类的代码都在控制器(Controller)里边。我 在项目中运用了MVC架构的PHP构造——CodeIgniter。”
我一边翻开他的网站,一边持续跟他电话交流。当看到网站的CSS代码都直接内嵌在HTML头部的时分,我不由得问他:“为啥您的网站的CSS代码 都内嵌在HTML里边呢,是运用自动化东西兼并进入的吗?”他支支吾吾地说:“由于在本地调试的时分,CSS文件修正常常不收效,所以就直接在HTML里 面改了,这么对比快。”
好吧,我想这是一个典型的“知易行难”的开发者,他知道选用MVC架构的项目的可保护性更高,可是在别离款式与构造上面还没有到达最底子的请求,甚 至把CSS写在HTML中。至于他说的在本地环境上发现CSS文件常常缓存,也许要看看本地效劳器的缓存设置是不是有疑问,然后再做调试。略微了解一点 HTTP的浏览器端缓存,这就不是难事了。我更赏识在开发流程上花时刻去了解和优化的应聘者,而不是敷衍了事,仅仅以完结需求为方针的人。
我俄然想到他说的“一切需求他都能完结,且只要他能完结”,所以就想问问他代码版别办理方面的疑问。我说:“您们团队如今参加了两个新人,那么您们 怎么进行代码版别办理?”他答复:“咱们有一台测验效劳器,用FTP来测验代码,假如在测验机上没有疑问的话,咱们就会发布到出产环境。”
我说:“等等,我不是问您们代码布置的疑问,是平常您们怎么办理代码版别,怎么分工协作的?”他说:“咱们把代码从测验效劳器上拷下来,修正完了今后再传上去。”
到这儿,我总算理解为啥他们团队的新人无法疾速融入项目了,由于项目没有运用SVN或许Git这么的版别办理东西。团队只要一自个在写代码的时 候,缺少版别办理东西的疑问也许还不会露出出来,可是当更多成员参加时,全部项目就会步履维艰,咱们都要花许多的时刻兼并代码,以及找回丢掉的代码。假如 呈现了外网bug,版别东西也能帮咱们把站点状况疾速康复到之前的时刻点。在本书的后边章节,我会具体介绍版别办理东西。
终究我抱着简直失望的心境,问了下关系数据库规划准则方面的疑问,他的答复也不是很抱负。
我知道,我又遭受了“野生程序员”。
啥是“野生程序员”
所谓“野生程序员”,即是没有计算机根底常识和有关教育阅历,靠着对计算机开发的喜好进入这个作业,尽管常识面对比广,可是各方面都一知半解的开发者。
这几年我从一个求职者,转成为一个招聘者,有一个感触即是,我国高等教育与商场需求不接轨。学校不了解商场终究需求啥样的人才,其建立的课程和技 术通常比商场技能现状落后了5年以上。我在大学学惯用ASP搭站,可是如今现已简直没有人用ASP搭站了。一个直接的结果是,许多高校结业生不能满意公司 的请求。
与此同时,我国互联网商场蓬勃开展,格外是移动互联网的发力,让我国越过“WAP年代”,直接进入“App年代”。商场的热钱都投入到互联网行 业,“BAT”等大公司不断扩大,创业公司也如漫山遍野,全部商场对软件工程师的需求缺口无穷,所以许多公司在招人的时分,无法招聘到“专业”的计算机专 业结业生。
在美国,由于教育与商场稳定开展了许多年,供求关系相对平衡,计算机有关专业本科现已成为底子请求。举例而言,美国的硅谷公司(如Google)绝大多数前端开发招聘岗位都有一个最低请求——本科学历,计算机有关专业。
对比而言,从我国的大公司(如腾讯)的招聘网站上可以看出,有一些前端开发岗位没有对学历的请求,也有一些请求“本科及以上学历”,少量才会请求 “本科学历,计算机有关专业”。咱们的团队中就有一些成员是大专学历。许多公司在招聘的时分通常放松了对学历的请求,只垂青项目和阅历,而不垂青学历。这 是一件功德,代表商场在高等教育的规划和质量都跟不上商场请求的状况下,给予更多有喜好和才干的年轻人进入IT范畴的时机,也填补了人才商场的空缺。
美国硅谷,是国际互联网公司的基地,是一切求职者朝思暮想的圣地。在最开端,硅谷之所以姓名傍边有一个“硅”字,是由于本地公司多数是从事加工制作 高浓度硅的半导体作业和电脑工业。随后,互联网公司和软件公司逐渐替代传统的硬件公司,让硅谷获得了新的生命,但硅谷这个姓名保留了下来。在硅谷从诞生到 开展壮大的全部生命周期中,斯坦福大学起到了很大的效果,我以为称之为硅谷的妈妈也不为过。
在我国,由于方针、环境、前史要素,还有大学教育投入上的区别,致使大学在全部互联网开展中起的效果没那么大。中美两国IT人才商场供求关系上的这些不相同,也反映在全部作业文明中。
一个直观的反映即是软件工程师的“草根”化。本来许多软件工程师的收入都很高,处于中上层水平,对比金融作业的白领也毫不逊色,可是一谈起程序员, 咱们的形象仍是“一年四季的T恤(在作业展会上免费拿的)牛仔裤,平常也喜爱宅在家里,不会像相同收入的金融白领,平常喜好听歌剧打高尔夫球”。这种区别 一方面是外部人士对软件工程师作业的成见,另一方面也是程序员作业的自黑习气。在招聘时岗位请求就现已放到最低:不请求学历、上班不请求着装、上下班时刻 灵敏,这么才好更方便地招聘。而金融作业有意识地刻画一种“高手”文明,从学历就设置高门槛,即便有些作业底子不需求那么高的学历。
回到结业生的论题,许多跨专业的学生发现自个喜好在互联网和计算机方向的时分,就开端了自学之路,底子上学习办法有这么几种。
书:在计算机图书范畴,技能难度跟图书销量是成反比的,从标签教起的HTML/CSS根底书本卖得最好,其次是关于JavaScript和jQuery的书,Angular和Node.js之类的就没那么畅销了。
互联网:得益于全国际都在互联网上同享的资本,如今的学习者有了更多的挑选,比方关于Web开发根底教育的W3CSchool,还有海量的技能博客。我自个喜爱订阅一些英文大站,比方Smashing Magazine、tuts+等。我在读大学的时分,Google Reader还没有持久关闭,那时分我很喜爱用RSS来重视这些站点的更新状况。Google Reader下线后,就底子上抛弃了RSS阅览的习气,转而用一些交际网站来追寻更新状况,可是有时仍是会淹没在许多无用的信息里边。
社团:学校的网站社团也孕育了许多才干很强的开发者,社团通过历届的传帮带,技能有所堆集,比方师兄会教师弟用Sublime编辑器,这就比还在用 Dreamweaver的同学更有优势。此外,学校社团有一些定点客户,比方学校教务处、周边商户,所以有更多的实战阅历,在结业时著作集也丰厚了不少。
由于有这么一些自学途径,所以不必定只要计算机专业结业的学生才有时机进入互联网作业。结业今后,这些计算机喜好者进入不相同的作业岗位,不相同的是,有些进入大公司,有些进入小公司。这两者的生长轨道通常会不太相同。
小公司有许多野生程序员
流水线作业流程有许多长处,但通常来说,大公司才需求许多专精某种技能的工程师,构成一个Web开发团队。创业公司只需求几个技能全部的人来做开发和技能支撑,有时分乃至只要一两自个罢了。
当然,最首要的要素即是本钱和报答的疑问。招聘和保持巨大的IT研制团队需求一笔不小的开支,小公司并没有那么多Web效劳的需求,通常公司也许只 需求一个公司站点就可以了,如今乃至彻底不需求Web站点,可以用微信公共账号或许taobao这么的大途径来完结。假如招聘一个完好的Web研制团队,从用户研 究到交互规划、从App开发到数据库办理,直接结果即是全部团队大多数时刻都空闲着,无事可做。与之对比,延聘一个或多个全栈工程师会更高效、更省钱。
第二个要素是,许多传统线下公司并不会格外依靠IT技能,有些时分线下途径占有了公司大多数收入来历,所以公司不需求架起十分完善的线上效劳。由于 线上效劳的用户量少,所以Web效劳对稳定性、承受压力、用户体会的请求都没有那么高。此外,由于没有太多首要的用户数据,所以异地容灾也不需求。
由于公司的开发团队小,所以网站不论呈现啥疑问,都需求他们去处理。从域名到效劳器,从前端到后台,从规划到内容,都是一人包办。野生程序员了解 的常识不断增加,可是样样都不通晓。我知道几个小公司的程序员,他们没有清晰的职称,开发者都统称为程序员,规划师都统称为美工。
在Web技能的任何方向,比方前端开发或许效劳器端开发,他们既没有很强的阅历,也没有清晰的喜好。那么当他想换岗到大公司的时分,会发现大公司对岗位和责任的细分十分清晰,而自个的才干达不到某个细分岗位的请求。所以他们很难在专业上持续前进,然后堕入原地踏步的困境。
大公司仍是创业公司
在许多论坛上,常常会看到结业生提出这么的疑问:如今有一个大公司和一个创业公司的时机摆在我面前,我应当挑选哪一个?本来每自个有不相同的主意、不 同的危险偏好,旁人没办法关于这个广泛的疑问给出标准的答案。可是已然发问者是结业生,这种状况下我仍是主张挑选大公司,由于会挑选创业公司的人通常有自 己的主意,现已承受创业公司的邀请去作业了,不会去发帖问询咱们的定见。当然这是恶作剧,真实的要素是,在大公司的头两年,是从学生到职场人士的一个转 变,您也许会从大途径学习到一些标准的流程办法,养成一些足以影响您终身的习气,知道更多的能对您职场有协助的人脉。
大公司能给您的
较小的危险
每个公司都有关闭的也许,可是,明显大公司比小公司的危险低多了。假如您的危险承受才干较低,那么不得不思考这个要素。
技能最好实习
在大公司,对代码质量和一致性的请求很高,所以通常在终究发布前会有代码检查(Code Review)流程和项目总结会等。假如您完结了一个使命,可是没有选用最好实习,仅仅hack{![所谓hack,即是不高雅的处理方案。比方一个界面 的调整,假如选用最好实习,需求用MVC架构来别离出界面有关的代码,并且把有也许有关的变量获取出来,合理命名并且放在合理的方位。假如是hack,可 能就不论这么多,看见哪里需求修正就原地修正了,表面上看很快处理了疑问,可是这会给后边跟进的搭档形成很大的困惑。]}了一下,那么别的搭档也许都会指 出您的疑问,并且请求您改正今后再提交。小公司或许创业公司人力对比严重,在他们看来,疾速完结和上线,比高雅地上线更首要,所以关于一些最好实习类的问 题,只能睁一只眼闭一只眼啦。
笔直专精的技能
大公司专业分工很细,并且有更多技能交流和沉积的空气,所以简单让人在笔直专精的技能方向有满意的开展。在小公司更能训练技能的广度,深度上缺少锻 炼的环境。可是本来二者的利害,都是外界的,技能人员的自个生长除了作业时刻的训练,还要靠下班后的时刻,外界仅仅给予一个环境或许时机。
效劳海量用户的阅历
相同是做一个网站,效劳少量用户量和效劳海量用户量时需求思考的作业是彻底不相同的。小网站遇到的疑问,大网站必定遇到过,而大网站遇到的疑问,小网 站就不必定遇到过了。当一个网站开展到业界最强时,它的疑问没有人遇到过,这时分就不能凡事问baidu、Google或Stack Overflow了,而要自个去探究处理方案。
软技能
硬技能是指每个职位需求的专业技能,软技能则是通用的技能,比方交流、影响力、项目办理和讲演等。越是大公司,越是垂青影响力,所以会有许多训练教您怎么进步影响力。
我在面试一些来自小公司的应聘者时,就发现他平常的作业中,周边环境很少有同享和沉积的习气。沉积和总结是很首要的,在腾讯,规划师做完一次规划定 稿今后,就会把规划的思路,包含全体的规划个性、规划标准和颜色的断定等都总结成一封邮件或许PPT,发送给部分搭档。每自个都要有意识地保护自个的著作 集,它在半年一次的查核、提升面试乃至今后的换岗中都十分有用。可是小公司的规划师不太会总结自个著作集,时刻紧迫是一方面要素,另一个首要要素是环境不 需求他这么做,因而就缺少了这方面的训练。
人脉
每年都有不少人从大公司离任去创业,这是十分天然的作业。关于大公司出来的人来说,之前堆集的人脉资本这时分会起到很大的效果,比方创业时期的一些 协作时机或许资本的互利,等等。假如创业失利,也不会很惨,由于您之前触摸的人脉可以给您供给作业时机。但假如您刚结业就挑选创业,创业失利今后没有人能 给您供给作业时机。
心态
本来大公司能给予结业生最大的优势,即是供给一个心智培养的土壤。之前参与面试官训练的时分,我大约了解过公司招聘一个结业生投入的本钱。从学校招 聘,到组织面试官面试提名人,再到关闭训练和一些课程训练,再给一段时刻了解项目,终究3个月试用期后也许还要筛选掉一些。假如把本钱平摊到每一自个身 上,这些投入要一年才干收回来。而小公司不会有这么大的耐性去培养一个新人。假如没有满意的时刻去学习和生长,也许在一两年后,职工的才干也对比全部,但 是样样都不通晓,也说不清楚自个的方针是啥,所以就成为了“野生程序员”。
归纳来讲,在大公司中,从硬技能到软技能都会有许多阅历丰厚的长辈可以教您,您会在大途径上学习到许多东西。作业几年今后,职工的挑选也许多,要么走技能道路持续开展下去,做高级工程师;要么学习办理和领导力;要么出去创业。
所以,我的自个主张是,从结业生自个出路开展的视点来看,先参加一家上市大公司是个不错的挑选。