{"id":20743063,"url":"https://github.com/aimingoo/shu","last_synced_at":"2025-03-11T12:31:56.251Z","repository":{"id":200262060,"uuid":"705142550","full_name":"aimingoo/Shu","owner":"aimingoo","description":"《告前端同学书》全文，欢迎转载。此”书“是文体，不是出版书。^^.","archived":false,"fork":false,"pushed_at":"2023-11-28T14:48:38.000Z","size":16,"stargazers_count":15,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-18T02:22:21.828Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aimingoo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-15T06:35:02.000Z","updated_at":"2024-07-10T06:58:10.000Z","dependencies_parsed_at":"2025-01-18T02:21:52.518Z","dependency_job_id":"e5beb0d6-e325-4dc7-8dd0-34a57f81779b","html_url":"https://github.com/aimingoo/Shu","commit_stats":null,"previous_names":["aimingoo/shu"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aimingoo%2FShu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aimingoo%2FShu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aimingoo%2FShu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aimingoo%2FShu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aimingoo","download_url":"https://codeload.github.com/aimingoo/Shu/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243034665,"owners_count":20225386,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T07:08:56.940Z","updated_at":"2025-03-11T12:31:56.212Z","avatar_url":"https://github.com/aimingoo.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"## 告前端同学书\n\n\u003e 一年前，InfoQ的编辑约请我对前端技术做了些回顾总结，说了三个方面的话题：其一，前端过去的15年大致可以怎样划分；其二，前端的现状以及面临的挑战；其三，前端会有怎样的未来。后来刊发成综述，是《技术15年》。缘于文体变动，访谈的味道十不存一，所以这里再次整理成文，是为《告前端同学书》。\n\u003e\n\u003e 周爱民/aimingoo\n\n各位前端同学，就我的所知来看，每一个具体的技术，在其方向上都有着不同的标志事件，也因此有着不同的阶段划分。但是我想，如果从我们这个领域对“前端”的认识来观察这件事，大概会对不同的前端阶段能有更清晰的认识。\n\n早期前端的从业人员大多来自后端开发者、应用软件开发者，或者网页设计师，而并没有专职的前端开发。例如说阿里巴巴在2010年之前都把前端归在产品部门，可见前端工程师的来源和定位一直都很模糊。这个时代，ECMAScript还陷在Ed4的泥坑中没有走出来，IE浏览器带来的标准分裂还没有得到全面的修补，源于对这个领域的漠视，大厂优势也没有体现出来，前端开发者们基本上各自为战，框架和中间件层出不穷而又良莠难分，开发工具和环境却荒草凄凄以至于乏善可陈。但是也正是在这个时代，ES6、CSS3、HTML5等等都在筑基、渗透与蓄势。\n\n随着专用工具链和开发流程的成熟，前后端分离的运动从项目内部开始蔓延到整个领域，出现了专门的前端开发工程师、团队，以及随之而来的角色细分，很多独立的技术社区就是在这个时代出现的。前后端分离不仅仅是一种技术表现，更是一种行业协作的模式与规范，并且反过来推动了工具和框架的大发展。信心满满的前端不拘于一城一地，一方面向前、向专业领域推进，从而影响到交互与接触层，因此更丰富的界面表现，以及从移动设备到人机交互界面等领域都成了前端的研究方向，是所谓“大前端”；而另一方面则向后、向系统领域渗透，有了所谓工程师“全栈化”运动。这个时候的“全栈”，在工程上正好符合敏捷团队的需求，在实践上正好又叠加上DevOPS、云端开发和小应用的几阵助力，前端因此一片繁华景象。\n\n所以2008年左右开始的前后端分离是整个前端第二阶段的起点，这场运动改变了软件开发的体系与格局，为随后十年的前端成熟期拓开了局面。那一年的SD2C我谈了《VCL已死、RAD已死》，而十年后阿里的圆心在GMTC上讲了《前端路上的思考》，可算作对这个时代的预言和反思。\n\n相对于之前所说的第一、第二阶段，我认为如今我们正行进在一个全新阶段中。这个阶段初起的主要表现是：前端分离为独立领域并向前、后两个方向并进之举已然势微。其关键在于，前端这个领域中的内容已经逐渐复杂，而其应用的体量也将愈加庞大，因此再向任何方向发展都难尽全力、难得全功。\n\n摊子铺得大了，就需要再分家。所以下一个阶段中，将再次发生横向的领域分层，一些弥合层间差异的技术、方法与工具也将出现，类似于Bable这样的“嵌缝膏”产品将会再次成为一时热门。但长期来说，领域分层带来的是更专精的职业与技能，跨域协作是规约性的、流程化的，以及工具适配的。从ECMAScript的实践来看，规范的快速更新和迭代已经成为现实，因此围绕规范与接口的新的开发技术与工程模型，将会在这个阶段中成为主要力量，并成为维持系统稳定性的主要手段。\n\n这是在一个新阶段的前夜。故此，有很多信息并不那么明朗，比如说像前后端分离这样的标志性事件并没有出现，亦或者出现了也还没有形成典型影响。我倾向于认为引领新时代的，或者说开启下一个阶段的运动将会发生在交互领域，也就是说新的交互方式决定了前端的未来。之前行业里在讲的VR和AR（虚拟现实和增强实境）是在这个方向上的典型技术，但不唯于此。几乎所有在交互方式上的变革，都会成为人们认识与改变这个世界的全新动力，像语音识别、视觉捕捉、脑机接口等等，这些半成熟的或者实验性的技术都在影响着我们对“交互”的理解，从而也重新定义了前端。\n\n行业生态也会重构，如同今天的前端大会已经从“XX技术大会”中分离出来一样，不久之后“交互”也会从前端分化出来，设计、组件化、框架与平台等等也会成体系地分化出来。前端会变得比后端更复杂、更多元，以及更加的生机勃勃。这样的生态起来了，一个新的时代也就来临了。简单地说，1、要注重领域与规范，2、要跟进交互与体验，3、要在生态中看到机会。\n\n然而，前端的同学们，我们也不要忘记在这背景中回望自身，正视我们前端自己的问题。\n\n其一，底子还是薄，前端在技术团队与社区的积累上仍然不够。看起来摊子是铺开了，但是每每只在“如何应用”上下功夫，真正在网络、系统、语言、编译、机器学习等等方面有深入研究的并不多。一直以来，真正有创建性或预见性的思想、方法与理论鲜见于前端，根底薄是首要原因。\n\n其二，思维转换慢，有些技术与思想抛弃得不够快，不够彻底。不能总是把核心放在“三大件（JS+CSS+HTML）”上面，核心要是不变，前端的革命也就不会真正开始。要把“Web前端”前面的“Web”去掉，就现实来说，很多人连“观望”都没有开始。\n\n其三，还没有找到跟“交互”结合起来的有效方法与机制。前端过去十年，在IoT、机器学习、云平台等等每一次潮流都卡上了点儿，但是如果前端的下一次转型起于“交互”，那么我们目前还没有能力适应这样的变化。当然，契机也可能不在于“交互”，但如果这样，我们的准备就更不充分了。\n\n其四，向更多的应用领域渗透的动机与动力不明确。长期以来，前端在各个领域上都只是陪跑，缺乏真正推动这些领域的动机与动力。往将来看，这些因素在前端也将持续缺乏。寻求让前端持续发展，甚至领跑某些领域的内驱力量，任重而道远。\n\n同学们，我想我们必须有一种共同的、清醒的认识与认知：浏览器是未来。去操作系统和云化是两个大的方向，当它们达成目标时，浏览器将成为与用户接触的唯一渠道。研究浏览器，其本质就是研究交互和表现，是前端的“终极私活”。但不要局限于“Web浏览器”，它必将成为历史，如同操作系统的“文件浏览器”一样。\n要极其关注JavaScript的类型化，弱类型是这门语言在先天条件上的劣势，是它在大型化和系统化应用中的明显短板。这个问题一旦改善，JavaScript将有力量从其它各种语言中汲取营养，并得以面向更多的开发领域，这是JavaScript的未来。\nAI和WASM在前端可以成为齐头并进的技术，一个算法，一个实现。对于前端来说，性能问题一直是核心问题，而交互与表现必将“大型与复杂化”，例如虚拟现实交互，以及模拟反馈等等，而WASM是应对这些问题的有效手段。\n所谓交互与表现，本质上都是“空间问题”。亦即是说，前端表现中的所谓布局、块、位置、流等等传统模式与技术，与将来的交互技术在问题上是同源的。就像“盒模型”确定了CSS在前端的核心地位一样，新的空间定位技术，以及与之匹配的表现与交互方法是值得关注和跟进的。\n前端要有更强的组织力，才能应付更大规模的系统。这里的组织力主要是针对工程化而言，所有工程化工具，其最终的落脚点都在快速、可靠，并以体系化的方式来组织工程项目。这包括人、资源、信息、时间、能力与关系等等工程因素，每个方面都有问题，都值得投入技术力量。\n\n相较于新入行的前端的同学们，我能从没有前端走到如今前端的大发展，何其幸也。以我一路之所见，前端真正让我钦佩的是持久的活力。前端开发者几乎总是一个团队中“新鲜血液”的代名词，因此前端在业界的每个阶段都走在时代的前列。如今看C语言的老迈，操作系统的封闭，后台的保守，以及业务应用、产品市场等等各个领域都在筑城自守，再看前端种种，便总觉得开放与探索的信念犹在。\n\n曾经与我一道的那些早期的前端开发者们，如今有做了主管的，有搞了标准的，有带了团队的，有转了后端的，有做架构做产品做运维等等一肩担之，也有开了公司做了顾问从商入政的，但也仍然还有在前端一线上做着努力，仍看好于这一个方向并在具体事务上勉力前行的。我曾经说，“任何事情做个十年，总会有所成绩的”，如今看来，这个时间还是说少了，得说是：几个十年地做下去，前端总能做到第一。\n\n惟只提醒大家，领域分层的潮流之下，层间技术的核心不是功能（functional），而是能力（capabilities）。向应用者交付能力，需要有体系性的思维，要看向系统的全貌。我们专精于细节没错，专注于一城一地也没错，然而眼光高远而脚踏实地，是前端朋友们当有之势。\n\n亦是这个时代予我们的当为之事！\n\n周爱民/aimingoo\n\n初稿于2022.06\n\n此稿于2023.10\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faimingoo%2Fshu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faimingoo%2Fshu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faimingoo%2Fshu/lists"}