【连载】小马过河 —— Angular 学起来难吗?

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wGL3k77y9fR1k61T1aS/article/details/78210332

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1


Angular 学起来难吗?

答案是:不知道。准确的说应该是 "因人而异"。我曾经说过:任何卖包治百病的大力丸的都是骗子,任何逢人就说一项技术很简单的也是骗子 —— 你连对方的技术背景都不问就敢说很简单,这跟医生不诊断就开药有什么区别?不过是莆田系的那一套罢了。

对纯而又纯的萌新……

对于那些没有任何技术背景(无论前后端还是App)的萌新来讲,Angular 是很难的。Angular 的设计目标是让你写 "好" 代码,而不是写 "出" 代码。所以对于萌新来讲,要写好 Angular,不但要学会关于 Angular 的概念、知识,更重要的是得学会 "写程序" 。后者才是最难的。

对于萌新来说,从 Angular 学起就像是绑着沙袋练长跑,开始确实会比较累,但是到了学成的那一天,你会发现自己身轻如燕。重要的是,它会送给你业界在多年的实践中总结出来的一些经验和教训。

如果一个萌新是在一个有高手带队的团队中学习,那么你是一个幸运儿 —— 你只要假装绑着沙袋跑步就行了,其最终效果却和真的绑着沙袋时差别不大。

总之,对于纯而又纯的萌新来说,学习 Angular 的关键是:多想、多练、高手带,等你摘下沙袋的那一天,你才会发现这世界是多么的美好。

对有其它技术背景的萌新……

如果你只是个前端萌新,但已经是一个Java高手、.NET高手或 iOS / Android高手,那么恭喜你,你将有机会 "平移" 到 Angular 中。当然,除非你在一个团队中,否则仍然要面临很多的挑战,但这种挑战主要不是来自 Angular 本身,而是来自 Web 生态。

事实上,我认为任何一位开发人员想要成为高等级的架构师,都至少需要掌握一门后端技术和一门前端技术,否则你怎么能设计好跨前后端的架构呢?以我为例,四年前我还是一个纯而又纯的后端,然后利用对后端技术的理解在两周内平移到了 AngularJS 中,而今年我又利用对 Angular 的理解在两周内平移到了后端的 Spring Cloud 技术体系中。我相信每一个人都有机会做到这种平移。

略显尴尬的是中级水平的前端萌新。

中级萌新对原本的技术还没有用到融会贯通的程度,而学 Angular 时视野又不够高,看不出这些技术之间的相通之处,这时候就可能遇到瓶颈。

这是挑战,也是机遇。

那些你在原有技术体系下没能理解透的技术,到了新的技术体系下,可能会看到它被活学活用的例子,这也许就是你的灵犀一指。当然,刻苦努力是必不可少的,我始终相信《一万小时天才》理论才是正道,天才固然有,但我自己不会是那个幸运儿。

对团队领袖……

Angular 做出了很多技术选择。这些选择都倾向于进行更有效的团队协作、长期演化时更好的可维护性以及需求频繁变化时更高的可扩展性。这些选择都不能让你短期内写程序更快,但可以更好。所以,如果是一个或几个萌新组成的短线项目,没有高手坐镇,成果也没有计划使用超过一年,那么,我不建议你们使用 Angular —— 除非你就是想把它当做 Angular 的学习项目。

反之,如果你要实现一个长线项目,并且对代码质量的要求比较高,那么我会推荐你使用 Angular。

通常,只要一个 Angular 高手就可以带起一个高效的团队:

Angular 有完善的 AOP 机制,可以统一处理公共需求,比如登录、日志等等,而这些只需要一个高手就能搞定,萌新只要根据业务需求实现功能就可以了,而不必关心那些复杂的全局性功能,轻松加愉快。

Angular 有着开箱即用的路由和表单,这些都是在多年的实践中总结出来的,不用你去评估筛选第三方库,也不用担心第三方库的质量。

Angular 使用 TypeScript 作为主语言,它既有动态语言的灵活,也有静态语言的严谨,萌新在 IDE 中就可以直接发现很多种错误,而不用等运行起来甚至发布给用户之后才发现。也许,你再也不用担心半夜被老板叫起来改 BUG 了。

总而言之,对同等资历的团队而言,Angular 胜在代码质量高、长线成本低,这是它得以成为 Google 的 AdWord(这是 Google 的主要收入来源) 等系统的前端框架的重要因素之一。

呃…… HR 的因素

有时候,技术选型还需要考虑公司的 HR 策略。

有些公司的人员流动性很强,这时候选择 Angular 有利有弊。

好的一面是不管谁来都得老老实实照着规范写,不照着写你都编译不过去,因此可以用技术手段强制保障代码的质量基线。同时,Angular 本身的难度也会替你筛掉一批混子,省下一些面试成本(我就曾面试低端程序员面到昏天黑地、怀疑社会,对此我深有体会)。

坏的一面是你的平均用人成本会比较高,因为没有几个培训班敢拍着胸脯说一个月就能把纯而又纯的萌新给培训成有生产力的 Angular 程序员。同时,你的这些工作可能不容易外包出去,因为普通的外包公司是不会投入资源去培养 Angular 程序员的(也许少量骨干除外?)。所以,对于一些短期的、周边的系统,用 Angular 往往弊大于利。

然而……

然而,难不难其实是个伪命题。就像本文的标题所暗示的那样:小马过河,自己试。不要听老牛说浅就觉得浅,也不要听松鼠说深就觉得深,这又不是什么人命关天的大事,自己静下心来花一天试试不就知道了?记住,所有号称中立却不问你的技术背景和意愿的对比、评测,都是骗子。别被忽悠,这是我在十九年的码农生涯中总结出的最重要的经验教训之一。

总之

纸上得来终觉浅,绝知此事要躬行。

我一直认为,对于一个程序员来说,决定他前途的不是已有的知识甚至天赋,而是勇气和眼光。你是否愿意尝试新事物?你是否会因为别人说难而放弃?你是否会愿意仅仅为了满足好奇心而去探索一门新知识?在这个日新月异的时代,这些品质决定了你的深度与高度,也决定了在十年后你到底是把一年的经验重复了十次,还是真的有了十年经验,决定了你是否能有能力跳出技术的限制,看到日新月异的技术背后,那些不变的思想内核。

这些,正是我希望在中国的 Angular 社区中好好培养的性格与文化。

关于本文

作者:@汪志成

原文:https://zhuanlan.zhihu.com/p/29815486


0?wx_fmt=jpeg

展开阅读全文

没有更多推荐了,返回首页