我在网络空间工作的时间越长,我就越意识到将最好与最好分开的不是他们的知识——而是他们思考问题的方式。显然,知识在很多情况下都非常重要和关键——但在一个快速发展的领域中,你进步和获取知识的方式(至少在相当长的一段时间内)会显得比你已经知道的重要。更重要的是:你如何应用这些知识来解决日常问题。希望能给出一些不同的建议。在这篇文章中,我想谈谈一个前端工程师的心态,希望能帮助你找到通往卓越的道路。不要只解决问题,想想是怎么回事。许多人编写CSS和JavaScript直到它可以工作,然后再转向其他事情。我通过代码审查发现这种情况经常发生。我总是问每个人:“为什么要添加float:lefthere?”或“overflow:hiddenherenecessary?”,他们经常回答:“我不知道,但我一删除它们,页面就乱七八糟了。”JavaScript是一样的,我总是看到一个setTimeout条件被竞争,或者有人无意中阻止了事件传播而不知道它会影响页面中的其他事件处理。我发现在很多情况下,当你遇到问题时,你只是解决了当前的问题。但是,如果您从不花时间了解问题的根源,您将一遍又一遍地面对同样的问题。花点时间找出原因,这可能看起来很费时间,但我保证它会在未来为你节省时间。当你完全理解了整个系统之后,你就不需要一直猜测和争论了。前后端开发的主要区别之一是后端代码通常运行在一个完全在你控制之下的环境中。前端相对不受您的控制。不同用户的平台或设备是前端永恒的话题,你的代码需要优雅地控制所有这些。记得2011年之前在看一个主流的JavaScript框架时看到过如下代码(简化版):varisIE6=!isIE7&&!isIE8&&!isIE9;本例中使用变量IE6来判断IE浏览器的版本是否为6以下。那么等到IE10发布的时候,我们的程序判断还是会有问题。我知道在现实世界中,功能检测并非100%有效,有时您必须依赖有缺陷的功能或基于浏览器功能检测的设计糟糕的白名单。但是你为它所做的一切都是至关重要的,因为你预见到一个不再有错误的未来。对于我们中的许多人来说,我们今天编写的代码比我们的工作周期更持久。我写的一些代码已经有8年以上的历史了,并且仍在生产环境中运行。这既令人满意又令人不安。浏览器在阅读规范文档时难免有bug,但是当同样的代码在两种浏览器中呈现出不同的效果时,人们总是会猜测而不认为“广受好评”的浏览器是对的。而“谦虚”的浏览器是错误的。但事实并非如此,当你的假设错误时,你选择的解决方法都会在未来出现问题。一个很好的例子是flex元素的默认最小尺寸。根据规范的描述,flex元素的初始min-width和min-height值是auto(而不是0),这意味着它们应该默认收缩到其内容的最小尺寸。但是在过去的8个月里,只有Firefox的实现是准确的。如果你有这个浏览器兼容性问题,发现Chrome、IE、Opera、Safari有同样的效果而Firefox没有,你可能会认为Firefox搞错了。事实上,我已经看到很多这样的事情发生了。我在自己的Flexbugs项目中报告的许多错误都是这样的。而这些解决方案的问题将在两周后的Chrome44中修复后反映出来。与符合标准的解决方案相比,这些解决方案都损害了正确的规范行为。当相同的代码在两个或多个浏览器中呈现不同时,您应该花一些时间来确定哪种效果是正确的,并根据此编写代码。您的解决方案应该面向未来。另外,所谓“优秀”的前端工程师总是在感受变化,在某项技术成为主流之前就去适应,甚至为这样的技术做出贡献。如果您训练自己查看规范并想象在浏览器支持它之前它是如何工作的,那么您将成为谈论并影响其发展的人。阅读其他人的代码以获得乐趣阅读其他人的代码可能不是您周六晚上的娱乐活动,但毫无疑问,这是成为一名优秀工程师的最佳途径。自己解决问题肯定是个好办法,但不应该是你唯一的办法,因为它会很快把你稳定在某个层次上。阅读别人的代码会开阔自己的视野,阅读和理解别人写的代码也是团队合作或开源贡献的必备能力。我其实觉得很多公司在招聘新员工时犯的最大错误就是他们只从大纲来评估写新代码的能力。我很少看到要求应聘者阅读现有代码、找出其中的问题并修复它们的面试。没有这样的面试过程真的很糟糕,因为作为一名工程师,你的很多时间都花在了添加或更改现有代码上,而不是构建新的东西上。和比你聪明的人一起工作我的印象是,很多前端开发人员(相对于全职工作)都是自由职业者,而有类似想法的后端开发人员并不多。可能是因为很多前端是自学的,后端大多是在学校学的。无论是自学还是自主工作,我们都面临一个问题:你没有机会向比你聪明的人学习。没有人帮你review代码,也没有人来和你碰撞灵感。我强烈建议,至少在你职业生涯的早期,你在一个团队中工作,尤其是一个通常比你更聪明、更有经验的团队。如果您最终选择在职业生涯的某个阶段独立工作,请务必让自己参与开源社区。保持对开源项目的积极贡献,这会给你带来团队合作相同或更多的好处。“造轮子”造轮子在商业上很糟糕,但从学习的角度来说却很好。您可能很想直接从npm中提取这些库和小部件,但想象一下您可以自己学习构建它们有多少。我知道有些人读到这篇文章特别不赞成。不要误会我的意思,我没有说你不应该使用第三方代码。具有多年积累的测试用例和已知问题的经过良好测试的库使其成为使用它们的明智选择。但我想在这里谈的是如何从优秀走向卓越。我认为这个领域的许多伟人都是我每天都使用的非常流行的库的作者或维护者。如果您不构建自己的JavaScript库,您可能拥有成功的职业生涯,但如果您从不亲自动手,那么淘金几乎是不可能的。这个行业的一个常见问题是:我接下来应该做什么?如果您还没有尝试学习一种新工具来创建新应用程序,请尝试重新创建您最喜欢的JavaScript库或CSS框架。好消息是所有现成的库的源代码都会在你遇到困难时帮助你。记录你学到的东西有很多原因,但也许最重要的原因是它迫使你更好地理解这件事。如果你不能清楚地表达它是如何工作的,那么在整个过程中它会促使你弄清楚你并不真正理解的东西。很多时候你甚至没有意识到你不理解它们——直到你自己写它们。根据我的经验,写作、演讲和做演示是强迫自己完全理解某事的最佳方式。即使没有人看你写的东西,整个过程也会让你受益匪浅。最后说个题外话。我一直有整理面试题的习惯,随时准备跳出自己的舒适区。不知不觉中整理了229页。我将在这里与您分享。需要的话,点此免费获取问题+分析PDF【点我】免费获取此面试问题+分析PDF。
