官方服务微信:dat818 购买与出租对接

web全栈开发 技术,web全栈开发进阶之路,web全栈开发方向

2万

主题

2

回帖

8万

积分

管理员

积分
89408
发表于 6 小时前 | 显示全部楼层 |阅读模式
    余果是腾讯社交用户体验设计部的高级 UI 工程师,同时担任前端开发组负责人以及 UI 开发通道评委,还是腾讯云特邀布道师,并且是《Web 全栈工程师的自我修养》的作者。

    在之前的一篇文章里,我们明确了“未来”所涵盖的时间段,同时也阐述了怎样“面向未来”进行学习。简略地归纳一下,倘若没有实际的实践场景,那么就无法学到真正的技术。要是只是单纯地读书而不去动手实践,即便读再多的书,也不会掌握到新的技术。

    在本文中,我们继续聊聊如何“跨界开发”。

    我在腾讯的社交用户体验设计部工作。在这 6 年多的工作经历中,有长有短。在这段时间里,我与很多设计师有过接触,也与很多工程师有过交流。我学到了一个很宝贵的知识,那就是设计和艺术是不同的,工程和科研也是不同的。

    设计和艺术不同。文艺的表达是“艺术发现问题,而设计解决问题”。这意味着设计是为商业服务的。作为上市公司的设计部门,要能够清晰地展示产品,营造出用户的渴望。在一定程度上,要把个人的“术”隐藏起来,给用户构建一个系统性的体验。设计的创作虽依赖灵感,但总体上是科学的、可推导的。

    工程和科研不一样。科研要在一个专门的技术点上达到满分,甚至超越人类知识的最边缘,达到 101 分。然而在工程的情形里,更为重要的是投入合适的技能点来达成当前阶段的目标。

    因此,当我想要独自创建一个属于自己的产品时,我在设计方面投入了恰到好处的技能点。我在前端方面也投入了恰到好处的技能点。我在后端方面同样投入了恰到好处的技能点。我在 APP 客户端方面也投入了恰到好处的技能点。

    我并不是想要做全栈工程师才学这些技能,而是因为想要独自做一些产品。在这个过程中,我持续学习,不知不觉就领悟到了全栈工程师的一些心法。

    这些心法被我记录在了我的新书《Web 全栈工程师的自我修养》里。

    我有一个假说,即好的前端工程师往往也是好的全栈工程师,然而反过来却不一定。

    我必须老实承认,因为没有数据能够证明,所以这只是我个人的一个假说。

    以下是我的推导过程。

    如果我们都认同全栈工程师的定义为“能够独自完成一个产品的人”,而非“精通一切技术的人”。那么通常的 Web 产品或 App 产品所需的能力,大致可分为“技术”“学习”以及“产品感”这三个方面。

    - 还包括移动客户端。

    学习展现出了持续学习的能力以及解决新问题的能力。除了图中所列举的那些技术之外,还有在不断增长的新技术,因此,具备有效的学习能力是非常必要的。

    产品感包含对用户体验的理解,还包含依据产品数据持续对产品进行迭代的能力。为何产品感很重要呢?在 App Store 中,有一些非常优秀的 App 是由个人开发者独立开发的,他们历经了从构思到设计,从开发到发布的整个流程。倘若没有良好的产品感,就不能够实现从“程序员”到“工程师”的转变。

    前端工程师在学习和产品感上都有天然的优势。

    国内最优秀的大学也没有“前端”这门专业。vue.js 的作者 Evan 本科读的是艺术史,Node 大神 TJ 学的是设计,他们都并非计算机专业。他们最终进入前端领域,凭借的是爱好、勤奋以及学习能力。所以我认为“前端工程师学习能力强”这一点无人能够反驳。

    前端经常与用户界面打交道,所以在工作中会思考什么样的用户界面能吸引用户。用户可能通过各种浏览器和设备访问网站,这就需要同理心去感受用户的实际访问情况。再次强调,只有有实践场景,才会有成长,前端在“产品感”方面会有更多实践场景。

    当然,不是所有的前端都持有这样的想法。然而,对于那些用心做事的前端而言,提升整体能力的机会是极为丰富的。

    前端工程师比较熟练的通常是前端技术,比如 HTML 和 CSS 等。而要熟练使用前端技术,前提是对系统有一定的理解。

    系统设计是用软件工程的方式来架构一个软件系统,它能够对应解决现实生活中的实际问题。我感觉在软件系统中常常会用到 HTTP 协议,用于进行客户端与服务器端的通信,甚至服务器与服务器之间的通信。对于必须掌握 HTTP 的前端工程师而言,他们往往已经有了大概的了解。

   


    说到后端,语言并非构成很高的技术门槛。在服务器端,若不是用户量特别大的系统,且数据量能够通过一台服务器处理完成,那么前端工程师常常会与后台 API 以及简单的模板型语言有接触。

    投入时间的话,应用层的后端语言能够很快被掌握。你所需要的仅仅是一个能够运用后端语言的机会。

    学习后端语言时,我的建议如下:要专注于项目;要精简所需的技能列表。

    如果你已经非常精通,那就直接运用 Node 去着手搭建后端。不要花费时间去学习 PHP 或者 Java 了。因为这样做除了会让事情变得更加复杂之外,并没有什么特别重大的意义。

    人类的大脑并非是为处理复杂项目而被设计的。人类从原始村落发展到现代化都市,并非是由于基因或生理方面发生了进化,而是协作的方式发生了改变。这种改变表现为分解复杂项目,让每个人都遵循共同接口,只完成分解后的工作。因此,全栈工程师在学习技能时也应该认识到自己大脑的极限。

    如果团队对后端语言有要求,那么就必须要遵循团队已经具备的技术能力。

    总之,不要在特定的某一时间去同时学习多门语言。这样做除了会增加技术方面的复杂度之外,没有任何意义。

    说到 Node 时,要推荐一个网站。这个网站是《软件随想录》的作者 Joel 推出的最新的具有革命性的产品,它可以让开发者以最为快捷的方式去开发 Node 程序,并且不需要购买服务器以及搭建开发环境。

    如图,将新的依赖库名称和版本号添加到.json 中,然后进行保存。这样一来,服务器会自动把对应的库下载到你的目录里。

    还提供库名补全功能。

    你接下来就能够直接在代码里使用这个库啦。因为这个库已经被安装在云端的“本地”啦,这实在是太方便啦。

    说说移动客户端开发吧,具体而言是指iOS和客户端。

    客户端原生开发的本质是对数据进行渲染,生成用户界面,并且对用户行为做出响应。前端开发的本质也是如此。2015 年起,客户端开发和前端开发有越来越多相似点。例如,都使用 MVC 的架构方式将界面、逻辑和数据分开。并且,都可以用 React 技术栈来实现。

    当前端工程师接触到客户端原生开发时,会有一种特别的感觉,就像是打开了新天地!原本是依赖客户端提供的设备接口的,而现在这些接口都可以通过原生接口直接进行操作了;原本那些超过几千行就会崩溃的图文表单,在使用原生开发后,就可以像黄油般顺滑地运行了。

    如果想要复用已有的技能,而非从一开始就学习原生语言,那么可以考虑(混合式)以及 React 这两种方案。

    无需多言,实际上就是在 Web 页面中进行渲染。只要你熟悉移动站点开发,就可以直接上手开发。这种方式的优点是足够简单,缺点是加载速度会比较慢,并且无法渲染大量数据。

    对于 React 来说,尽管它像(某种其他技术)一样使用  作为编程语言,然而它是另一种解决思路。React 重新界定了一种用于渲染界面、处理数据以及处理交互的编程方式,并且在各个平台上都能够渲染成原生界面。通过这样的方式,React 宣称达成了“Learn once, write ”。

    React 实际上会编译成原生界面,所以其性能一般比较好。React 正在提供越来越多的组件,不过要注意的是,有些组件的性能比其他组件要好。例如,和都可以实现应用内导航,但是直接封装了 iOS 的,所以它的性能更好。

    选择组件时,我们要依据性能和开发的便利性来进行权衡。倘若对性能的要求不是很高,那就可以直接使用。倘若对性能的要求很高,就应当针对 iOS 平台来使用,对于其他平台则使用其他技术或者。

    算法和数据结构在大学计算机课程里占比较大。各类 ACM 竞赛主要考察的也是算法和数据结构,这使得一些学生觉得它们是软件工程中最为重要的部分。

   


    实际上,“算法和数据结构”可被视为与“系统设计”相反的技能树。理论侧重于深度,即探讨在既定计算能力约束下,怎样能更快速、更好地解决一个问题。而系统注重广度,也就是探究对于一个实际需求,如何在众多技术中设计出最节省且效果良好的技术组合。

    现代的编程语言抽象程度较高。程序员不需要掌控到内存级别的分配与释放。只需使用高级抽象的数据结构就行。它本身没有复杂的数据结构。然而,使用和闭包能够模拟出任何数据结构,包括树和链表。甚至通过第三方库(比如)可以当作增强版的来使用。

    算法和数据结构属于基础内功。倘若没有内功,仅剩下招数,便无法成为绝世高手。许多自学成才的前端由于不理解算法,有可能会编写出渲染性能极为糟糕的网站。

    那么如何提升算法和数据结构能力呢?推荐一个网站

    现在大部分题目已经支持。

    下面聊一下数据库。

    数据库往往是网站发展到一定规模之后的最终瓶颈。

    这并非是我的个人观点,而是有大量网站予以证实。当用户量急剧增加,feeds 数量也急剧增加的时候,首先承受不住压力的就是数据库。所以当我们谈及 scale 这个话题时,或许有一半的时间都在谈论数据库的扩展。

    它是一个针对文档的数据库,并非关系型数据库。面向文档具有以下几个益处:

    易于使用:不再有行的概念,而是以文档来呈现。这样更加灵活,也更符合现代面向对象语言开发者对数据的看法。并且,key 与 value 不再有固定的类型和大小,所以添加和删除字段变得更为容易,实验能够很容易地开展。

    数据库的大小在加速增长,这符合安迪 - 比尔定律。因为数据库必然会增长,所以就有如何扩展的问题。从技术角度来看,分为纵向扩展(scale up)和横向扩展(scale out)这两种思路。纵向扩展就是增加单个计算机的性能,比如使用更大的内存、更快的 CPU 和更大的硬盘。但是纵向扩展终究会面临性价比的评价。所以如今的大型互联网系统都秉持着横向扩展的思路,把多个普通的计算机连接成集群。基于这样的情况,要是想提升性能,只需往集群中添加一台普通的计算机就可以了。

    管理 1000 台计算机集群这件事,显然比管理一台计算机要困难很多。 管理 1000 台计算机集群比管理一台计算机更困难。 管理 1000 台计算机集群的难度明显比管理一台计算机大。

    采用横向扩展的架构设计,当面对文档的数据类型时,它可以在多台服务器之间轻松地进行数据分割。它能够自动处理跨级群的数据与负载,自动对文档进行重新分配,并且能将用户请求引导到正确的机器上。如此一来,开发者就能够将精力集中在写程序上,而无需担忧扩展方面的问题。

    安迪指英特尔前 CEO 安迪·格鲁夫,比尔指微软前任 CEO 比尔·盖茨。安迪 - 比尔定律的意思是,硬件提升的性能,很快会被软件给消耗掉。

    主要目标是提供卓越性能。在一些设计中体现了这一目标,例如可对文档进行动态填充,还能预先分配文件以利用额外空间换取稳定性能。总之,各方面设计都旨在保持其高性能。

    腾讯云的云服务器在横向扩展方面支持弹性定价,用户达到一定级别后能够随时进行扩展。同时,腾讯云也支持多种类型的数据库,包括关系型数据库、文档型数据库以及数据库缓存机制。目前,腾讯云针对学生推出了特别优惠活动,只要上传学生证,就能够以 1 元的低价获得域名和服务器。(参考地址)

    好了,今天的分享就到这里,谢谢大家。

    涉及到的链接会单独放出一页,大家可以进行拍照。这页的字号很大,即使在后排也能够看到。也许有一天,大家在相册中翻出这页时,也会想起相关的事情吧(哈哈)。

    看完记得点个赞!

更多帖子推荐

您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|小黑屋|关于我们

Copyright © 2001-2025, Tencent Cloud.    Powered by Discuz! X3.5    京ICP备20013102号-30

违法和不良信息举报电话:86-13718795856 举报邮箱:hwtx2020@163.com

GMT+8, 2025-4-25 21:14 , Processed in 0.070667 second(s), 17 queries .