造第一类永动机机难还是写代码难?

为什么千万不要重写代码? - 知乎专栏
{"debug":false,"apiRoot":"","paySDK":"/api/js","wechatConfigAPI":"/api/wechat/jssdkconfig","name":"production","instance":"column","tokens":{"X-XSRF-TOKEN":null,"X-UDID":null,"Authorization":"oauth c3cef7c66aa9e6a1e3160e20"}}
{"database":{"Post":{"":{"contributes":[{"sourceColumn":{"lastUpdated":,"description":"日常心得。","permission":"COLUMN_PUBLIC","memberId":206533,"contributePermission":"COLUMN_PUBLIC","translatedCommentPermission":"all","canManage":true,"intro":"日常心得。","urlToken":"netjob","id":3643,"imagePath":"ad226f15aeb327.jpg","slug":"netjob","applyReason":"","name":"程序员的自我修养","title":"程序员的自我修养","url":"/netjob","commentPermission":"COLUMN_ALL_CAN_COMMENT","canPost":true,"created":,"state":"COLUMN_NORMAL","followers":13867,"avatar":{"id":"ad226f15aeb327","template":"/{id}_{size}.jpg"},"activateAuthorRequested":false,"following":false,"imageUrl":"/ad226f15aeb327_l.jpg","articlesCount":17},"state":"accepted","targetPost":{"titleImage":"/b8bb0b69eb868df119cb95ac59f56cb1_r.jpg","lastUpdated":,"imagePath":"b8bb0b69eb868df119cb95ac59f56cb1","permission":"ARTICLE_PUBLIC","topics":[],"summary":"程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的一切推倒重来。是的,他们决不会满足于简单的增量劳动。 或许这种微妙的心理定位可以解释:为什么程序员进入新项目组后宁愿丢掉旧代码重新写,也不愿意修修补补。他们认为旧…","copyPermission":"ARTICLE_COPYABLE","translatedCommentPermission":"all","likes":0,"origAuthorId":206533,"publishedTime":"T18:53:10+08:00","sourceUrl":"","urlToken":,"id":199063,"withContent":false,"slug":,"bigTitleImage":false,"title":"为什么千万不要重写代码?","url":"/p/","commentPermission":"ARTICLE_ALL_CAN_COMMENT","snapshotUrl":"","created":,"comments":0,"columnId":3643,"content":"","parentId":0,"state":"ARTICLE_PUBLISHED","imageUrl":"/b8bb0b69eb868df119cb95ac59f56cb1_r.jpg","author":{"bio":"抑郁症患者。创业中的科技专栏作家。","isFollowing":false,"hash":"cbba82d75b970c","uid":32,"isOrg":false,"slug":"luckystar","isFollowed":false,"description":"不看私信,请加微信luckystargo,说明来意。你还可以在虎嗅、百度百家、今日头条等媒体平台读到我的文章。","name":"luckystar","profileUrl":"/people/luckystar","avatar":{"id":"b21bee1dc03ddb4478ccda315e7c9e78","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},"memberId":206533,"excerptTitle":"","voteType":"ARTICLE_VOTE_CLEAR"},"id":271035}],"title":"为什么千万不要重写代码?","author":"luckystar","content":"程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的一切推倒重来。是的,他们决不会满足于简单的增量劳动。或许这种微妙的心理定位可以解释:为什么程序员进入新项目组后宁愿丢掉旧代码重新写,也不愿意修修补补。他们认为旧代码简直一团糟。但是,事实上真是这样吗?你之所以认为旧代码一团糟,其实是由编程的一个基本定律决定的,那就是:写代码容易,读代码难。为什么你觉得旧代码异常混乱?因为读代码更难。这大概就是代码Reuse难以实现的原因。 这就是你组里的每个人都喜欢用不同的功能将分割的字符串转换成一个数组。比起猜测旧的功能是怎样实现的,重新写一个自己的功能要简单和有趣多了。作为这个公理的推论,你可以问问身边的程序员他们正在奋战的代码怎么样?「简直是一塌糊涂!」他们肯定会这样说。「我简直想推倒重来!」为什么认为代码这么糟糕呢?「额,看看这个功能,竟然有两页长!完全不知道这些东西为什么在这里!完全不知道这些API是干什么的。」他们会这样回答你。漫画:读别人代码是一种怎样的体验?曾经,Borland的创始人 Philippe Kahn当初就是向记者们吹嘘:Quattro Pro会比Microsoft Excel要好用得多,因为它是从头开始编写的,全部都是新的源代码!但是,认为新代码比旧代码好简直就是荒谬。旧代码是已经运行过的,测试过的。无数的bug在被发现前都上线运行过,发现之后程序员们可能在花了好些日子才修复了这些bug。这种修复可能是一行代码,也可能是几个字符,无数的时间和精力都花在了这些bug修复上。当你决定抛弃这些旧代码从零开始的时候,你也丢掉全部前任努力的结果。新代码一定比旧代买好?NO,重写可能会带来更大的风险。对技术领导者来说,重写项目的代码也是一个异常艰难的决定。因为从公司层面说,重现代码甚至会威胁产品的市场竞争力。一旦决定重写代码,那么与竞品相比,你可能落后了2~3年——在软件行业,这时间可够长的。你理想中的新代码会带来产品功能的提升▼但事实上,即便重写的新代码可以实现旧代码的所有功能和需求,但是为产品带来的市场竞争力只有边际提升。因为重写用的新技术、新语言、新框架并没有给产品带来质的飞跃。更不用说在重写的漫长过程中可能会遇到一些意外情况,比如:1、缺钱:资金链的断裂▼2、缺人:核心程序员离职最终导致效果不佳:达不到原产品应有的所有功能和需求,白白浪费了时间和金钱,也丢掉了市场竞争力。▼所以重写代码意味着,你在把自己置身于非常危险的境地,可能几年后你也写不出比以前更好的代码。你只是花了一大笔钱把已经存在的代码又写了一遍。当你觉得眼前的旧代码很烂时,该怎么办?你觉得旧代码写的很烂,那又怎样呢?它们已经上线,已经在实际运行中经受住了考验。所以当你发现前任留下的代码乱七八糟的时候,不妨冷静下来,从以下三个方面入手理解代码、改善代码:1、代码的结构有问题如果一段网络代码突然弹出了自己的对话框,应该是UI代码需要被处理。这些问题可以被解决掉,你要一次次小心地移动代码,重构,改变接口。还需要一位细心的工程师立马仔细地检查这些改变是否有问题,从而不打扰到其他人。事实上,甚至比较大的结构变化也可以不扔掉代码来完成。大牛程序员Joel Spolsky回忆说,曾经在某个项目中,他和他的团队花了好几个月重新架构在一点上:把代码动来动去、清理、创建有意义的基类,并创建了模块之间的完美接口。但是他们始终非常小心翼翼,并没有产生新的bug、也没有丢掉任何旧代码。2、代码的效率不高曾经,Netscape的渲染代码被传非常缓慢。但事实上,这只会影响该项目的一小部分,这部分是你可以优化甚至重写的。你完全不必重写全部代码。优化速度的1%工作量,会让你获得99%的爆炸性提高。3、代码写得很丑有些代码真的写的很丑,比如Joel曾参与一个项目,开始用下划线做开始的成员变量约定,但后来改用更标准的「M_」。所以一半的功能用「_」开始,一半用「M」开始,这看起来真的很丑陋。但这个问题5分钟就能解决,而不用从头开始写全部的代码。最后,你要记住,从头开始再写一遍并不意味着你会写出比以前更好的代码。因为你没有参与到上一个版本的创建,所以你其实根本就不算有经验。一旦你准备推倒重写,你可能会再犯一遍版本一犯过的错,甚至会产生更多的新问题。一个总结:面对糟糕的旧代码,Keep Calm & Carry On !在大型商业项目中,推倒重来是非常危险的行为。当然,如果你是在做实验,想到新算法可以随时重写。如果你跳槽、或刚接手一个新项目,面对看上去异常混乱的旧代码,请冷静下来,忍住推倒重写的冲动,想想上面这些经验之谈。关于专栏:栏主目前正在做的事情是帮程序员换工作,所以这个专栏用来记录日常所思所想,一切关于程序员职业发展的事。欢迎关注。","updated":"T10:53:10.000Z","canComment":false,"commentPermission":"anyone","commentCount":26,"collapsedCount":0,"likeCount":447,"state":"published","isLiked":false,"slug":"","isTitleImageFullScreen":false,"rating":"none","titleImage":"/b8bb0b69eb868df119cb95ac59f56cb1_r.jpg","links":{"comments":"/api/posts//comments"},"reviewers":[],"topics":[],"adminClosedComment":false,"titleImageSize":{"width":640,"height":356},"href":"/api/posts/","excerptTitle":"","column":{"slug":"netjob","name":"程序员的自我修养"},"tipjarState":"inactivated","annotationAction":[],"sourceUrl":"","pageCommentsCount":26,"hasPublishingDraft":false,"snapshotUrl":"","publishedTime":"T18:53:10+08:00","url":"/p/","lastestLikers":[{"bio":"相见时难别亦难","isFollowing":false,"hash":"abbe2deb5bf43","uid":36,"isOrg":false,"slug":"li-cha-77-19","isFollowed":false,"description":"","name":"广寒","profileUrl":"/people/li-cha-77-19","avatar":{"id":"7f41e8351","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"度厂民工","isFollowing":false,"hash":"06c76f1cb74778f7eba32e982aa96fba","uid":60,"isOrg":false,"slug":"cao-ying-seso","isFollowed":false,"description":"","name":"居里猴姐","profileUrl":"/people/cao-ying-seso","avatar":{"id":"v2-b5afb2ade25","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"程序员","isFollowing":false,"hash":"d911aacdff0d997b02b97ee2","uid":444600,"isOrg":false,"slug":"huang-di-de-xin-tou-xiang","isFollowed":false,"description":"","name":"皇帝的新头像","profileUrl":"/people/huang-di-de-xin-tou-xiang","avatar":{"id":"b5e1ff57b6abfecc2bbd8cbc","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"计算机视觉 ","isFollowing":false,"hash":"1af10964fafb9165abbe2ca2dcc5462f","uid":037700,"isOrg":false,"slug":"lianera","isFollowed":false,"description":"","name":"lianera","profileUrl":"/people/lianera","avatar":{"id":"a3b1feeafc24723c6fcb60","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},{"bio":"without you ,I am nothing。","isFollowing":false,"hash":"76acee9bc67be18201e68","uid":940000,"isOrg":false,"slug":"dong-bi-cheng-99","isFollowed":false,"description":"对环境和吃衣住行敏感和挑剔的人。","name":"blwb","profileUrl":"/people/dong-bi-cheng-99","avatar":{"id":"f20b338de1fecfa5cbb8cc7c8ffc57a6","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false}],"summary":"程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的一切推倒重来。是的,他们决不会满足于简单的增量劳动。 或许这种微妙的心理定位可以解释:为什么程序员进入新项目组后宁愿丢掉旧代码重新写,也不愿意修修补补。他们认为旧…","reviewingCommentsCount":0,"meta":{"previous":{"isTitleImageFullScreen":false,"rating":"none","titleImage":"/50/2fe385a19de85fee500ce_xl.jpg","links":{"comments":"/api/posts//comments"},"topics":[],"adminClosedComment":false,"href":"/api/posts/","excerptTitle":"","author":{"bio":"抑郁症患者。创业中的科技专栏作家。","isFollowing":false,"hash":"cbba82d75b970c","uid":32,"isOrg":false,"slug":"luckystar","isFollowed":false,"description":"不看私信,请加微信luckystargo,说明来意。你还可以在虎嗅、百度百家、今日头条等媒体平台读到我的文章。","name":"luckystar","profileUrl":"/people/luckystar","avatar":{"id":"b21bee1dc03ddb4478ccda315e7c9e78","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},"column":{"slug":"netjob","name":"程序员的自我修养"},"content":"现在,几乎整个互联网行业都缺前端工程师,不仅在刚起步的创业公司,上市公司乃至巨头,这个问题也一样存在。没错,优秀的前端工程师简直比大熊猫还稀少。每天,我司的 HR 群都有人在吐槽招不到前端工程师。实话说对这些需求,我们也无能为力,因为在供不应求的前端招聘市场上,优秀的前端工程师才是有话语权的那一方。放眼全球,不仅在国内的互联网行业,在国外,前端工程师一样是需求旺盛、供不应求的香饽饽。举个例子,根据
抓取的数千家网站的职位显示:目前前端的热门岗位——「HTML5」是需求增长最快的开发岗位,在所有开发职位中排名第一,MongoDB 和 iOS 紧随其后位列第二、第三。目前,HTML5 可以说是最热门的前端岗位了,在 2010 年和 2014 年底有两次爆发性增长,现在在美国的岗位需求甚至超过了 iOS。但是,市场上优秀的前端工程师却相对较少,全世界范围看都是个难题。原因一:前端相对来说是一个新领域,当今的 Web 需要更多的工程师可能很多人认为前端开发和 Web 开发类似,而 Web 开发已经有 20 多年的历史,所以前端并不是一个新领域。然而,前端工程师的概念中的「接口技术实现和用户体验作为一个专业的工作领域」,却无疑是很新的。大概几年前,前端开发的技术增长迅猛,如下图所示:过去几年前端工程师的可视化增长趋势 by Google Trends15 年或更久以前,Web 的可视化设计和技术实现所需要的资源是平均分配的。随着网站的发展—网站不仅是一个登录页面,工程资源的需求越来越明显。人们开始专门学习网站专用的 JavaScript、后端技术、UX、数据库,甚至系统设计。今天,一个像 Airbnb、Facebook、Quora 的 Web 应用程序,投入的工程资源比设计资源多得多。换句话说,如今,做出网页的视觉设计比技术实现要更快,所以当今的市场需要更多的工程师。现在,一位合格的前端工程师,必须对视觉设计有兴趣。很显然,要处理大量的 Web 应用程序需求,技术任务就要进行分类,以便于多人同时处理网站请求。事实上现在已经不可能一个人快速地解决所有的技术细节了。现在还有一类人是独自处理一个 Web 应用程序的所有问题,即「全栈工程师」,但是优秀的全栈工程师同样如大熊猫一般数量稀少。现在,一个创业公司想要成功,几乎要覆盖一个 Web 应用程序的诸多技术方面:前端、后台、DBA、运营等。虽然已经有一些服务可以让企业购买登陆页面的前端模块和组件;但是如果你想要创造一些真正的 Web 应用程序,除了求助前端工程师,别无他法,就像你要创立一个品牌你也绕不开请一位设计师一样。原因二:对前端,普遍存在巨大的误解,其实前端一点也不简单大多人都认为前端开发是一个「相对于其他模块来说更简单的领域」,在他们心中的前端工程师是这样工作的:把 Photoshop 文件、图片或者线框放进一个网页;偶尔设计 Photoshop 文件、图片或者线框;用 Javascript 编程,为网页制作动画、过渡效果;用 HTML 和 CSS 编程,确定网页的内容和布局。事实上,前端工程师在做的是:在设计师和工程师之间实现可视化的语言;用可视化的设计,定义一组代表内容、品牌和功能的组件;为 Web 应用程序的会话、框架、需求、可视化的语言和规格设定底线;定义 Web 应用程序的设备、浏览器、屏幕、动画的范围;开发一个质量保证指南来确保品牌忠诚度、代码质量、产品标准;为 Web 应用程序设定适当的行距、字体、标题、图标、填充等等;为 Web 应用程序设定多种分辨率的图像,设备为主的实体模型,同时维护设计指南;标记 Web 应用程序,使之语义化,SEO 友好;用一种友好的,耗电少的,设备和客户端感知的方式连接 API,获取信息;开发客户端代码来显示流畅的动画、过渡、延迟加载、交互、应用工作流程,大多数时间用来考虑渐进增强和向后兼容的标准;保证后台连接安全,采取跨域资源共享 (CORS) 的程序考虑,防止跨站点脚本 (XSS) 和跨站请求伪造 (CSRF) ;最重要的是,尽管有严格的期限、利益相关者的要求,以及设备的限制,无论现在还是将来永远是「客户第一」。为了实现上述目标,前端工程师采用了从可视化到编程的多种工具 ,甚至有时要照顾市场、 UX 到内容改进等等。原因三:大量糟糕前端工程师的存在,扰乱了市场这或许是难以招到优秀前端工程师最明显的原因。由于前端工程师的入门门槛非常低, JavaScript、CSS、HTML 并不是很难入门掌握的语言,似乎只要花一点时间,谁都可以通过网上教程和书本学会它。对的,前端工程师市场就是被这些浅尝辄止的家伙搞坏的。糟糕的前端工程师是这样做事的:滥用 JavaScript 库,因为他们实际上并不了 JavaScript 的核心(e.g. 一切都用 jQuery);滥用 JavaScript 插件,无节制的复用别人的代码,哪怕自己根本读不懂;不看需求、设计,也不做比较或评价,就给 Web 应用程序添加 CSS 框架,却只用到框架的一小部分;认为只要用了 CSS 框架,网站就是响应式的,或是对响应式设计的意义理解不到位;一边在说着「响应式 Web 设计」,却对服务器端解决方案技术一无所知;用 CSS 编程时不做预处理器、命名规范等;忽视性能、内存泄露(并不理解内存泄露的真正含义),不会检测代码;不会用指标衡量一个产品,或者这种指标旨在自己的电脑、浏览器、设备有效;忽视 30 年来的软件工程技术,闭门造车。要知道,入门容易精通难,计算机和软件的基础对你用 JavaScript 或浏览器编程都非常重要。Web 可能是最有影响力的平台和环境之一,在那里执行的程序必须被小心对待。一位优秀的前端工程师不仅要考虑 Web 技术和语言,并且还要了解所有不同的组件、系统和概念。以下是优秀的前端工程师在即时面对普通的任务也会做的事情(这才是市场急需的前端):DNS 解析,使用 CDN,把资源请求分散到多个域名上去;理解 HTTP Headers (Expires、Cache-Control、If-Modified-Since)Steve Souders 的所有高性能网页优化规则(参考:High Performance Websites 一书)如何解决 PageSpeed、YSlow、Chrome Dev Tools Audit、Chrome Dev Tools Timeline 等工具列出的所有问题;何时把任务传到服务器,何时适合传到客户端;缓存,预取和延迟加载技术的使用;原生 JavaScript,知道何时从头开始做,何时参考别人的代码,同时可以评估这样做的优缺点; 最新的 MVC Javascript 库知识以及用法;CSS 标准的知识与用法;JavaScript的计算机科学部分的知识(内存管理,垃圾收集算法等等等等)换句话说,如果说掌握(或者某些简历里自称的精通) HTML+CSS+JavaScript,了解后端知识,只是 60 分的合格前端;那么要想成为受追捧、拿高薪的 80 分优秀前端,要对业务需求和、架构设计有真正的运用;而 100 分的顶级前端,则必须要能够兼顾技术和设计,更接近「以前端开发为主的全栈工程师」了。100offer 说:市场不是缺少前端,而是缺少优秀的前端工程师现在,前端工程师终于前所未有的在 Web 中占有了一席之地。随着多设备、浏览器和 Web 标准的演变革命,前端正在成为兼顾逻辑、性能、交互、体验的综合性岗位。虽然现在互联网行业普遍缺少前端工程师,但是我们相信越来越多的人将会加入前端的大军。不仅是因为大多数前端工作提供的优渥薪水和办公环境,也是因为 Web 中的前端编程变得越来越有挑战和意义。最后,分享一组 3/4 月的 100offer 拍卖数据:前端工程师人均收获 8.2 个面试机会,已入职的前端工程师平均薪资涨幅达39%。其中,前端 Offer 之王共收获 47 个 offer,最高 offer 薪水 38k*16 ,某电商公司开出的。加油吧,前端。","state":"published","sourceUrl":"","pageCommentsCount":0,"canComment":false,"snapshotUrl":"","slug":,"publishedTime":"T19:50:47+08:00","url":"/p/","title":"为什么整个互联网行业都缺前端工程师?","summary":"现在,几乎整个互联网行业都缺前端工程师,不仅在刚起步的创业公司,上市公司乃至巨头,这个问题也一样存在。没错,优秀的前端工程师简直比大熊猫还稀少。 每天,我司的 HR 群都有人在吐槽招不到前端工程师。实话说对这些需求,我们也无能为力,因为在供不…","reviewingCommentsCount":0,"meta":{"previous":null,"next":null},"commentPermission":"anyone","commentsCount":40,"likesCount":501},"next":{"isTitleImageFullScreen":false,"rating":"none","titleImage":"/50/ca1f6d43de3d81f74437e_xl.jpg","links":{"comments":"/api/posts//comments"},"topics":[],"adminClosedComment":false,"href":"/api/posts/","excerptTitle":"","author":{"bio":"抑郁症患者。创业中的科技专栏作家。","isFollowing":false,"hash":"cbba82d75b970c","uid":32,"isOrg":false,"slug":"luckystar","isFollowed":false,"description":"不看私信,请加微信luckystargo,说明来意。你还可以在虎嗅、百度百家、今日头条等媒体平台读到我的文章。","name":"luckystar","profileUrl":"/people/luckystar","avatar":{"id":"b21bee1dc03ddb4478ccda315e7c9e78","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false},"column":{"slug":"netjob","name":"程序员的自我修养"},"content":"贺师俊,网名Hax,人称「贺老」,资深Web开发专家。信仰Web标准,HTML纯化论者+CSS理想主义者+JavaScript改革派+REST信徒。现任百姓网前端架构组负责人。1997年,Hax通过自主招生考试进入复旦大学文科基地班,曾担任复旦国学社《常识》报主编,直到该报纸被禁,可见其犀利文笔和批判精神由来已久。除了办报纸,课余时间Hax都泡在机房,2块钱一小时,到毕业一算,网费超过了2000块。本科毕业后,Hax意外进入了上海交通大学的机关部门工作,期间负责某国家社科项目网站开发,从前端到后端,Hax带着几个学生,几乎所有事情都要亲力亲为。2004年,网站上线,日均PV达60万。2004年教师节,Hax放弃高校教师正式编制离开学校,投入一无所知的未来。离开之前,他的Title是教育部下某全国性网站的技术总监。离开半年之后,Hax才得到第一份全职工作,Title是Lead Software Architect,半年后被炒鱿鱼。又半年后,才再次找到工作,Title是应用软件工程师。一年半中只有6个月正式工作,Title迅速从技术总监缩水到码农。Hax戏言:「不知道我当时是不是很怂,不过老婆总是夸耀她当年居然没有抛弃我。」十多年后的今天,坐在百姓网位于交大徐汇校区的办公室,似乎命运画了一个圈,Hax很喜欢当下的状态:「十年后现在的我没有啥Title,不过大家都知道我是一个前端。」认清技术驱动力,确定职业方向从高校到外企,再到盛大两进两出,甚至培训机构兼职,从业经历丰富的Hax对不同类型的公司都有自己的体会。在这位年近40的「高龄程序员」看来,要想避免「技术没练好,产品也没做成」的痛苦,首先要认清自己。按对技术的热情驱动划分,一般可以分为两类程序员:1. 产品工程师「实现了功能、产生了价值」,是产品工程师的技术驱动。他们的目标是创造出一款产品可以改变世界。这类程序员比较适合向全栈工程师发展,需要广泛涉猎,在工作中切换各种技术。2. 技术专家「解决了问题,探索了未知领域」,是技术专家的内心动力。这类程序员适合选定一个技术领域深挖。以上两者并没有优劣之分,但是会决定你的职业方向。所以你要考虑的是你内心更希望成为哪种人,是能和产品人员一起甚至单枪匹马可以搞定一个改变世界的产品,还是在某个技术领域上做到业界顶尖。极个别的天才能两者都做到,但是大多数人只能选其中一个方向努力。如何做出下一个职业选择?在这个供小于求的市场,优秀的程序员从来不缺少工作机会,那么,在面对众多类型的工作邀请,改如何做出正确的选择呢?Hax认为,在职业规划中你至少需要考虑以下两点:1. 确定理想的工作状态不同类型的公司会带给你不同的工作状态。在缺少技术牛人团队的事业单位,Hax曾苦恼技术能力的瓶颈、和团队协作的缺失。在等级明显、缺少创新机制的盛大,Hax也体会了大公司之下个体的无力感和挫败感。而在工程师文化盛行的公司,每个人都会很有意思。无论是撸起袖子亲身写代码的CEO,还是对写代码兴趣浓厚的财务、客服,都会为你带来工作的正能量,这也是Hax选择百姓网的原因之一。2. 明确追求的工作目标在不同的工作阶段,每个人可能有不同的工作追求。经过十多年的代码生活,从盛大创新院出来后Hax并不急着找下一份工作,在他看来,能否「实践职业想法」是挑选工作的主要指标,而这往往是在大公司无法实现的。在这个猪都能飞上天的互联网风口时代,无数的公司在高速扩张、招兵买马,但是Hax却拒绝加入膨胀迅速的公司,因为在他看来,有两个问题无法避免:首先,公司跑的太快,团队规模太大,必将稀释团队文化,快速老化;另外一点,Hax比较较真,在讨论技术方案的适用性时,需要静下心评估试用场景,讨论优缺点,这在追求速度的、浮躁的公司是难以做到的。尤其是前端团队,在大公司中常被挑来挑去,一会儿拆分,一会儿合并。其实,技术怎么用、为什么这么写,与公司的组织架构有关系。前端技术与后端、设计、产品都有很多关联,容易受到各方面的挤压。作为开发最末端的一环,前端的工作依赖很多部门,且dirty work比较多,因此在选择公司时必须慎之又慎。如何成长为优秀的前端工程师?作为公认的资深Web开发专家,Hax认为,成长为优秀的前端工程师并没有固定的方法,每个人都需要探索一个自己的方式,并有一个方法去衡量。拿Hax的话来说,「首先是程序员,其次才是前端程序员。」对于不同技术阶段的前端工程师,Hax给出了不同的建议:1. 初级前端工程师成长指南打好基础。扎实地学习一些计算机基础课程,比如算法、数据结构、编译能力等。偏向产品和设计的知识也要掌握——这会影响到将来的高度。学会翻墙,学会用Google,学会用GitHub、Stack Overflow、知乎等社区。积极参与技术活动,哪怕自掏腰包也要参与和交流,这是对自己的投资。良好的人脉更有利于在跳槽时获得推荐;如果你不善于混圈子,来100offer参加拍卖不失为一次性收获批量面试机会的好方法。最重要的是,坚持不懈地学习。比如几天前年近40的Hax刚挑战了全英文报告,因为他深知不进则退,学好英语才能获取全世界范围内最一手的资源和信息。2. 优秀的前端工程师是怎样的?如果你做到了以上几点,只能算作合格的前端工程师。在Hax这位资深的Tech Leader眼中,能在面试中获得青睐的优秀前端工程师应具备的素质包括以下:对技术不发怵。比如,前端虽然入门比较简单,但是同其他领域一样,一旦深入下去,就会遇到算法,千万不能给自己设限,要攻克算法。有用户体验的Sense。前端尤其看重细节,较真儿才能看出人的素质,优秀的程序员做的东西绝对不会是粗糙的。这些细节的养成,不能单靠热情,而要形成良好的习惯。具备「好奇心」和「懒惰」的美德。比如,你如果对探究某个兼容性问题有兴趣,但当探索完毕后,又厌烦每次都要为这个问题写额外的兼容性处理代码,那么激励自己去寻找工程方法来避免重复的事情,这就是程序员应该具备的美德。3. 顶级的前端工程师是怎样的?在前端这个当下互联网市场上最热门的领域,可遇而不可求、最被雇主欣赏的前端工程师需要具备:非常强的用户体验能力和工程能力;平面设计师/交互设计师的能力和代码能力。以上两点能精通之一即非常稀少的前端人才。需要说明的是,对任何一项稍微复杂的技术,要说精通都是非常难以定义的。Hax认为,精通可以用「自由」来定义。即运用这项技术来达成目标的「自由度」,达到「信手拈来」的地步,当可算作精通了。总之,作为程序员,在工作中,对技术问题一定要精益求精,正如Hax所说,「搞技术的,再较真也不为过,怕就怕不较真」。在职场中,一定要将心态放平,「失败是常态,成功才是偶然的」,即便是顶级的工程师在职场上也不可能一帆风顺。站在职场的分岔路口,首先要有信心,有选择的权利说明自己是优秀的;其次,务必弄清楚自己的职业目标,慎重做出下一个职业选择,才能实现自身的价值。100offer说:早就听说Hax因犀利的技术批评为人所知,但是见到笑眯眯的Hax本尊,之前的惴惴不安却一扫而光。Hax是一位典型的技术人,正直而坦诚,理性而阳光。作为Web开发领域的大神,他不仅专心打磨技术,更愿意提携后辈,在各种技术社区分享和讨论。也许,程序员的职业发展道路不应该是沉默而孤独的,自由而热烈的交流更能推动自身的不断成长。----------------------关于专栏:栏主目前正在做的事情是帮程序员换工作,所以这个专栏用来记录日常所思所想,一切关于程序员职业发展的事。欢迎关注。","state":"published","sourceUrl":"","pageCommentsCount":0,"canComment":false,"snapshotUrl":"","slug":,"publishedTime":"T18:44:13+08:00","url":"/p/","title":"不走管理,也能成为前端专家? | 100offer专访贺师俊Hax","summary":"贺师俊,网名Hax,人称「贺老」,资深Web开发专家。信仰Web标准,HTML纯化论者+CSS理想主义者+JavaScript改革派+REST信徒。现任百姓网前端架构组负责人。 1997年,Hax通过自主招生考试进入复旦大学文科基地班,曾担任复旦国学社《常识》报主编,直到该报纸…","reviewingCommentsCount":0,"meta":{"previous":null,"next":null},"commentPermission":"anyone","commentsCount":22,"likesCount":279}},"annotationDetail":null,"commentsCount":26,"likesCount":447,"FULLINFO":true}},"User":{"luckystar":{"isFollowed":false,"name":"luckystar","headline":"不看私信,请加微信luckystargo,说明来意。你还可以在虎嗅、百度百家、今日头条等媒体平台读到我的文章。","avatarUrl":"/b21bee1dc03ddb4478ccda315e7c9e78_s.jpg","isFollowing":false,"type":"people","slug":"luckystar","bio":"抑郁症患者。创业中的科技专栏作家。","hash":"cbba82d75b970c","uid":32,"isOrg":false,"description":"不看私信,请加微信luckystargo,说明来意。你还可以在虎嗅、百度百家、今日头条等媒体平台读到我的文章。","profileUrl":"/people/luckystar","avatar":{"id":"b21bee1dc03ddb4478ccda315e7c9e78","template":"/{id}_{size}.jpg"},"isOrgWhiteList":false,"badge":{"identity":null,"bestAnswerer":null}}},"Comment":{},"favlists":{}},"me":{},"global":{"experimentFeatures":{"ge3":"ge3_9","ge2":"ge2_1","nwebStickySidebar":"sticky","nwebAnswerRecommendLive":"newVersion","newMore":"new","sendZaMonitor":"true","liveReviewBuyBar":"live_review_buy_bar_2","liveStore":"ls_a2_b2_c1_f2","homeUi2":"default","answerRelatedReadings":"qa_recommend_by_algo_related_with_article","qrcodeLogin":"qrcode","newBuyBar":"liveoldbuy","newMobileColumnAppheader":"new_header","zcmLighting":"zcm","favAct":"default","appStoreRateDialog":"close","mobileQaPageProxyHeifetz":"m_qa_page_nweb","iOSNewestVersion":"4.2.0","default":"None","wechatShareModal":"wechat_share_modal_show","qaStickySidebar":"sticky_sidebar","androidProfilePanel":"panel_b"}},"columns":{"next":{},"netjob":{"following":false,"canManage":false,"href":"/api/columns/netjob","name":"程序员的自我修养","creator":{"slug":"luckystar"},"url":"/netjob","slug":"netjob","avatar":{"id":"ad226f15aeb327","template":"/{id}_{size}.jpg"}}},"columnPosts":{},"columnSettings":{"colomnAuthor":[],"uploadAvatarDetails":"","contributeRequests":[],"contributeRequestsTotalCount":0,"inviteAuthor":""},"postComments":{},"postReviewComments":{"comments":[],"newComments":[],"hasMore":true},"favlistsByUser":{},"favlistRelations":{},"promotions":{},"switches":{"couldAddVideo":false},"draft":{"titleImage":"","titleImageSize":{},"isTitleImageFullScreen":false,"canTitleImageFullScreen":false,"title":"","titleImageUploading":false,"error":"","content":"","draftLoading":false,"globalLoading":false,"pendingVideo":{"resource":null,"error":null}},"drafts":{"draftsList":[],"next":{}},"config":{"userNotBindPhoneTipString":{}},"recommendPosts":{"articleRecommendations":[],"columnRecommendations":[]},"env":{"edition":{},"isAppView":false,"appViewConfig":{"content_padding_top":128,"content_padding_bottom":56,"content_padding_left":16,"content_padding_right":16,"title_font_size":22,"body_font_size":16,"is_dark_theme":false,"can_auto_load_image":true,"app_info":"OS=iOS"},"isApp":false},"sys":{},"message":{"newCount":0},"pushNotification":{"newCount":0}}

我要回帖

更多关于 磁力永动机 的文章

 

随机推荐