面向未来的跨界开发技术(下)

2024-03-24 17:08

本文主要是介绍面向未来的跨界开发技术(下),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者简介:余果,腾讯社交用户体验设计部高级UI工程师,前端开发组负责人,UI开发通道评委,腾讯云特邀布道师,《Web全栈工程师的自我修养》作者

在上一篇文章中,我们定义了“未来”的时间段,也描述了如何“面向未来”去学习。简单的总结下,没有实践场景,学不到真正的技术。如果不动手去做,读再多书也不会学到新技术。

在本文中,我们继续聊聊如何“跨界开发”。 我在腾讯的社交用户体验设计部工作,在这不长不短的6年多工作经验中,跟很多设计师打交道,也跟很多工程师打交道。我学到的一个宝贵知识是,设计不等于艺术,工程不等于科研。

设计不等于艺术。用文艺的话说就是“艺术发现问题,设计解决问题”。也即是说,设计为商业服务。作为上市公司的设计部门,需要清晰地展现产品,构建用户的渴望。在某种程度上,需要隐藏个人的“术”,而构建一个系统性的体验给用户。设计的创作虽然也依赖灵感,但整体上是科学的、可推导的。

工程不等于科研。科研需要在一个专精的技术点上达到一百分,甚至突破人类知识的最外层,达到101分。但是在工程的场景下,更重要的是投入恰到好处的技能点去实现现阶段的目标。

因此,当我想要独自创建一个自己的产品的时候,我自然而然在设计、前端、后端、APP客户端等都投入了恰到好处的技能点。

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

我把这些心法都记录在我的新书《Web全栈工程师的自我修养》中。 我有一个假说,那就是“好的前端工程师一定是好的全栈工程师,反之不一定”。

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

首先,如果我们都同意全栈工程师的定义是“能够独自完成一个产品的人”(而不是“精通一切技术的人”)。那么一般的Web产品或者App产品会需要的能力,大体上分为“技术”、“学习”和“产品感”三个方面。

技术是实现一个产品需要的“工程能力”,包括下图列出的前后端语言,数据结构和算法,系统设计能力,数据库,移动客户端。

学习体现了持续学习和解决新问题的能力。除了图中列出的技术,还有持续增长中的新技术,所以有效的学习能力必不可少。

产品感包括对用户体验的理解,以及根据产品数据来持续迭代产品的能力。为什么产品感很重要?App Store有一些优秀的App,是由个人开发者独立开发的,他们完成了从构思到设计、从开发到发布的整个过程。如果没有良好的产品感,是无法实现从“程序员”到“工程师”的转变的。 前端工程师在学习和产品感上都有天然的优势。

因为国内即使是最优秀的大学,也没有“前端”这门专业。vue.js的作者Evan本科学的是艺术史,Node大神TJ是学设计,都不是计算机专业。最终进入到前端领域,靠的是爱好、勤奋和学习能力。所以我想“前端工程师学习能力强”这一点应该没有人能反驳。

在产品感上,因为前端经常跟用户界面打交道,所以在工作中就会思考怎样的用户界面会吸引用户。用户可能使用多种多样的浏览器和设备访问网站,因此也需要同理心来感受用户的实际访问情况。再次强调,“没有实践场景,就不会有阵子的成长”,前端会在“产品感”上有更多实践场景。

当然,不是所有的前端都有这样的想法,但是对于走心的前端来说,提升整体能力的机会有很多很多。 对于前端工程师而言,比较熟练的自然是前端技术(HTML/CSS/JavaScript),而熟练使用前端技术的前提,就是对系统有所理解。

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

说到后端语音,其实并不构成很高的技术门槛。在服务器端,如果不是用户量特别大的系统,数据量都可以通过一台服务器来处理完成的话,前端工程师也经常会跟后台API和简单的模板型语言打交道。

只要投入时间,应用层的后端语言很快就能上手,你需要的只是一个使用后端 语言的机会。 在学习后端语言时,我的建议是,专注项目,精简需要的技能列表。

也就是说,如果你已经精通JavaScript,就直接使用Node开始搭建后端吧,不要去学PHP或Java了。除了增加复杂度,并没有太大意义。

人类的大脑并不是为了处理复杂项目而设计。人类从原始村落进步到现代化都市,并不是发生了生理上的进化,而是协作方式发生了改变(分解复杂项目,每人都遵循共同接口,只完成分解后的工作)。所以全栈工程师在学习技能时也应认识到自己大脑的极限。

当然,如果团队对后端语言有要求,那必须遵循团队已有的技术能力。

总之,不要在某一特定时间同时学习多门语言,除了增加技术复杂度,没有任何意义。 说到Node,推荐一个网站。它是《软件随想录》作者Joel最新的革命性产品,能够让开发者以最快方式开发Node程序,而无需购买服务器和搭建开发环境。

如图,在package.jsondependencies里加入新的依赖库名称和版本号,保存,服务器会自动下载好对应的库到你的node_modules目录中。 还提供库名补全功能。 接下来你就可以直接在代码中使用这个库了,因为这个库已经安装在云端的“本地了”,太方便了! 说说移动客户端开发吧,具体而言是指iOS和Android客户端。

客户端原生开发与前端开发的相似之处是,本质上都只对数据进渲染,生成用户界面,以及对用户行为做出响应。从2015年开始,客户端开发和前端开发有越来越多的相似点,比如使用MVC的架构方式来把界面、逻辑和数据分开,比如都可以用React技术栈来实现。 当前端工程师接触到客户端原生开发,绝对会有一种“打开新天地”的感觉!原本依赖客户端提供的设备接口,现在全都可以通过原生接口直接操作;原本超过几千行就崩溃的图文表单,使用原生UITableView可以如黄油般顺滑。

如果希望复用已有的技能,而不是从头开始学习原生语言开始学习,可以考虑Hybrid(混合式)和React-Native两种方案。

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

对于React-Native而言,虽然跟Hybrid一样使用JavaScript作为编程语言,但是另一种解决思路。React重新定义了一种渲染界面、处理数据和处理交互的编程方法,然后在各个平台中都能渲染成原生界面。通过这种方式,React宣称实现了“Learn once, write everywhere”。

因为React-Native实际上会编译成原生界面,所以性能一般比Hybrid好。React-Native正在提供越来越多的组件,但是要注意的是,有一些组件比其他组件性能更好。比如NavigatorNavigatorIOS都能实现应用内导航,但NavigatorIOS是直接封装了iOS的Navigator,所以性能更好。

在选择组件时,我们需要根据性能和开发方便做权衡。如果对性能要求不高,那么使用Navigator即可,如果对性能要求很高,就应该针对iOS平台使用NavigatorIOS,对Android平台使用其他技术或者Navigator。 算法和数据结构,在大学计算机课程中占了很大比重。各种ACM竞赛也主要考察算法和数据结构,让一些学生认为这就是软件工程中最重要的部分。

实际上,“算法和数据结构”可以认为是和“系统设计”相反的技能树。理论走的是深度,是在追问在给定的计算能力约束下如何把一个问题解决得更快更好。而系统走的是广度,是在追问对于一个现实的需求如何在众多的技术中设计出最多快好省的技术组合。

现代的编程语言有很高的抽象程度,程序员无需掌控到内存级别的分配和释放,只要使用高级抽象的数据结构即可。JavaScript本身没有复杂的数据结构,但是使用prototype和闭包可以模拟出任何数据结构(包括树和链表),更有甚者,通过第三方库(比如underscore)可以作为增强版的JavaScript来使用。

“算法和数据结构”应该是基础内功,没有内功,只剩招数,无法成为绝世高手。很多自学成才的前端不理解算法,可能会写出渲染性能很糟糕的网站。

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

现在大部分题目已经支持JavaScript。 下面聊一下数据库。 数据库往往是网站发展到一定规模之后的最终瓶颈。

这并不是我的个人观点,而是得到了大量网站证实。在用户量激增、feeds数激增时,第一个扛不住的就是数据库。所以当我们聊website scale,可能一半的时间都在聊数据库的扩展。 MobgoDB 是一个面向文档( document- oriented) 的 数据库, 而不是关系型数据库。面向文档有这样几个好处:

1.易于使用:不再有行(row)的概念,取而代之是文档(document),因此更加灵活,也更符合现代面向对象语言的开发者对数据的看法。此外,key跟value不再是固定的类型和大小,因此,添加和删除字段变得更加容易了,实验可以很容易地进行。

2.易于扩展:数据库的大小正在加速增长,这也是符合安迪-比尔定律的。既然数据库的增长变成必然,那么如何扩展?从技术上分为纵向扩展(scale up)和横向扩展(scale out)两种思路。纵向扩展是指增加单个计算机的性能,使用更大的内存、更快的CPU和更大的硬盘。但是纵向扩展毕竟会遭遇性价比评价,所以现在的大型互联网系统都采用横向扩展的思路,将多个普通的计算机连接成为集群。基于此,想要增加性能只需要添加一台普通的计算机到集群就好了。

不过,管理1000台计算机集群显然比管理一台计算机困难的多。

MobgoDB采用横向扩展的架构设计,面向文档的数据类型时它能够轻松地在多台服务器之间进行数据分割。MobgoDB能够自动处理跨级群的数据和负载,自动重新分配文档,以及将用户请求到正确的机器上。这样,开发者能够集中精力写程序,而不用担心扩展的问题。

安迪-比尔定律:Andy gives, Bill takes away.(安迪提供什么,比尔拿走什么。) 安迪指英特尔前CEO安迪·格鲁夫,比尔指微软前任CEO比尔·盖茨,这句话的意思是,硬件提高的性能,很快被软件消耗掉了。

3.卓越的性能:MobgoDB的一个主要目标是提供卓越的性能。在一些设计中,这一目标得以体现。比如MobgoDB能对文档进行动态填充(dynamic padding),也能预先分配文件以利用额外的空间来换取稳定的性能。总之,MongoDB在各方面的设计都旨在保持它的高性能 关于横向扩展,腾讯云的云服务器支持弹性定价,当用户达到一定级别时可以随时扩展。此外,腾讯云还支持各种关系型数据库、文档型数据库和数据库缓存机制。现在,腾讯云有对学生的特别优惠活动,只要上传学生证,就可以以1元低价获得域名+服务器。(参考地址) 好了,今天的分享就到这里,谢谢大家。 涉及到的链接单独放出一页,大家可以拍照,字号很大,后排也能看到。这样也许哪天在相册翻出来也会想到吧(哈哈)。 

这篇关于面向未来的跨界开发技术(下)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/842225

相关文章

【C#跨平台开发详解】C#跨平台开发技术之.NET Core基础学习及快速入门

1. C#与.NET的发展历程 C#是由Microsoft开发的现代编程语言,最初伴随着.NET Framework发布。随着技术的进步,特别是针对跨平台开发的需求,Microsoft推出了.NET Core,这是一个开源且跨平台的框架,支持Windows、macOS和Linux。 2002年:C# 1.0 发布,仅限于Windows。2016年:.NET Core 1.0 发布,开启了C#跨

当前开发技术的未来发展:趋势、机遇与挑战

在信息技术飞速发展的今天,开发技术正经历着前所未有的变革。从云计算到人工智能,从物联网到区块链,这些技术不仅推动了软件开发的创新,也为各行各业带来了深刻的影响。本文将探讨当前开发技术的几大趋势,以及它们在未来可能带来的机遇与挑战。 1. 云计算与边缘计算的融合 云计算已经成为企业数字化转型的基石。随着技术的进步,边缘计算作为一种补充云计算的技术,正逐渐成为焦点。边缘计算通过在数据源附近进行数据

学习3D地图引擎开发技术心得

现在市场上关于学习3D技术的书籍很多,有很多写的确实很好。个人认为好书的话一本就够了,书太多看的头晕眼花的也消化不了。我从开始学习到现在开了不下百本的相关资料,但主要还是围绕着基本学习资料在看。重要的是把一本书上的东西吃透就行。先说说我是怎么学的,各位也帮着我指导一下。 <!--[if !supportLists]-->1,  <!--[endif]-->由于从没接触过3D之类的开发(不过以前就

跨界融合:Scratch与硬件的创新集成

跨界融合:Scratch与硬件的创新集成 Scratch,这款由麻省理工学院媒体实验室开发的图形化编程工具,不仅在软件层面上激发了无数孩子的编程兴趣,更通过与硬件的集成,拓展了其在智能硬件控制领域的应用。本文将详细探讨Scratch如何与硬件设备集成,以及如何利用这一集成进行创新教学和项目开发。 1. Scratch与硬件集成的无限可能 Scratch 3.0版本新增了对硬件的支持,如mic

【系统分析师】-WEB开发技术

目录 1、负载均衡技术 1.1、应用层负载均衡 1.2、传输层负载均衡 2、有状态和无状态问题 3、CDN内容分发网络 4、持久化技术 1、负载均衡技术 1.1、应用层负载均衡 1)http 重定向 HTTP 重定向就是应用层的请求转发。用户的请求其实已经到了HTTP重定向负载均衡服务器,服务器根据算法要求用户重定向,用户收到重定向请求后,再次请求真正的集群。

2024-01-开发技术积累

文章目录 递归删除文件执行任务超时时间读写锁获取异常栈信息通过NIO读取文件单例模式代码NIO管道写文件(来自nacos)NIO读取文件(来自Nacos)spring指定注解扫描 递归删除文件 xxl-job源码 public static boolean deleteRecursively(File root) {if (root != null && root.exi

1.0.1 分享一些实用的web开发技术网站

一些JAVA项目开发过程中涉及到的web前端技术、素材资源、学习网站。 来自于我的有道笔记: http://note.youdao.com/noteshare?id=70c5c8b006deb73a586b6f7dcf7b1266&sub=6B2711BE719D4B5EA90B659DE8B59C71

【报告分享】元宇宙论坛跨界对话-穿越虚拟世界与真实世界-阿里研究院(附下载)

摘要:近来,“元宇宙”成为热门话题,越来越频繁地出现在人们的视野里。大家都在谈论它,但似乎还没有一个被所有人认同的定义。元宇宙究竟是什么?未来它会对我们的工作和生活带来什么样的改变?对于元宇宙,业界对此持有不同的态度:坚定信仰,相信在5到10年内会有新的商业模式落地,并且会诞生千亿市场百亿市值的公司;理性期待,元宇宙需要10年以上才会真正落地;冷眼旁观,认为元宇宙几乎无外乎是现在AR/VR和数

端开发技术——Flutter富文本组件

简介 flutter 富文本组件。 github地址: https://github.com/ThinkerJack/jac_uikit 使用方式 运行 flutter pub add jac_uikit 组件文档 使用方式: HighlightedTextWidget.builder(text: "全部文案包含高亮文案测试用",highlights: [HighlightWord

白酒:茅台镇白酒的品牌合作与跨界营销案例

云仓酒庄豪迈白酒,作为茅台镇的知名品牌,在品牌合作与跨界营销方面也有着杰出的表现。通过与不同领域品牌的合作,豪迈白酒进一步拓宽了市场渠道,提升了品牌曝光度和影响力。 首先,云仓酒庄豪迈白酒与品质餐产品牌的合作成为了品牌合作的一大亮点。酒庄与国内外知名餐饮企业展开合作,共同推出特色菜品和酒水套餐。通过与餐饮企业的合作,豪迈白酒得以进入品质餐饮市场,与消费者建立起更加紧密的联系。这种合作模式不仅