优秀的程序员和一般的程序员差别在哪?

thbcm阅读(336)

一个普通的程序员和一个优秀的程序员之间,到底存在什么样的差异呢?我认为这种差异主要体现在他们的编码能力和思维方式上。

如果按照学习发展路径来看,程序员大致可以分为五类,依次是:

1. 拷贝型程序员:代码的搬运工

这类程序员就是传说中的“代码拷贝员”,这类程序员只会改代码,却不会写代码,对编程毫无兴趣,只是希望以此糊口。

他们对实现功能几乎没有思路,唯一的技能就是从网上或其他团队成员的代码中拷贝片段,然后拼凑到项目中。

只要项目能运行,他们就认为任务完成了。他们对技术提升没有兴趣或没有方向,成长得很慢。

2. 新手型程序员:功能至上,忽略细节

新手程序员由于经验有限,面对新功能需求往往不知所措,需要通过学习、搜索资料等方式来解决问题。

他们将重点放在“完成功能”上,而忽略了边界条件、性能、可读性、可扩展性、编码规范等重要因素。

因此,他们的代码往往bug较多,稳定性不高,开发周期长,维护成本高,甚至会出现开发一个月,改bug却要改好几个月的尴尬局面。

3. 学习型程序员:热衷创造,忽视复用

这类程序员对所在领域的语言已经比较了解,对于一般功能可以有较为清晰的实现思路。

他们喜欢“创造代码”,即使有现成的实现方案,他们也希望自己重新实现一套,以达到“学习”的目的。

他们不喜欢复用别人的代码,即使项目中存在相似的功能,他们也会以“需求不同”的借口来重新编写代码。

这种做法虽然有利于学习,但也会带来一些问题。例如,开发周期可能较长,代码膨胀,影响项目的维护。

从项目的角度来看,这类程序员最大的问题在于他们缺乏对代码复用和项目整体架构的理解,导致代码质量不高,维护成本增加。

4. 实现型程序员:功能至上,忽略架构

这类程序员一般拥有较为丰富的经验,他们不再追求“创造代码”来进行学习,而是更注重快速实现功能。

他们熟悉常用的框架和工具,能够快速理解需求,并给出解决方案。他们对边界条件和性能问题也有一定的考虑,因此经常被团队评价为“牛人”。

然而,这类程序员往往只关注“完成功能”,而忽略了代码的可读性、可扩展性、编码规范等问题,对项目整体架构的把握也较少。

他们产出的代码维护难度较高,甚至几个月后自己都难以理解。当需求变更时,他们会抱怨需求变化,却很少反思自己的代码问题,导致项目维护成本不断增加。

5. 架构型程序员:追求优雅,注重可持续发展

这类程序员比实现型更进一步,他们拥有丰富的经验,对相关框架和工具等都很熟悉,对代码的质量和架构有着更高的追求。

他们不仅关注“完成功能”和“稳定性”,更注重代码的优雅、可读性和可扩展性。

尽管架构型程序员在“实现功能”阶段的速度可能不如实现型程序员快,但他们在项目中后期会展现出巨大的优势。

他们能够构建出更合理、更可维护的系统,为项目的长期发展奠定坚实的基础。

从代码搬运工到架构师,这条道路并不平坦,需要不断的学习和积累。

希望每个程序员都能找到自己的方向,不断提升自己的技能,最终成为一名优秀的软件开发者。

新范式:AIGC推动的数据要素产业价值促进创新

thbcm阅读(303)

引言

大模型的发展与数据要素的价值创造互为因果,LLM正推动着数据要素以“激发AGI”的全新范式创造价值。如何有效地整合规模化、高质量的数据以用于大型模型的训练,不仅是推进大模型发展的窗口,也将成为进一步发掘数据要素潜在价值的关键动力。遵循技术发展的规律和市场的原则,将有助于各企业筛选并确定发展通用大模型与行业特定大模型的独特路径。

01 从人工智能发展历程,看数据要素价值创造

自2022年末至2024年初,GPT以其卓越的表现引起了广泛关注。随着Sora的诞生,短时间内智能的极限被不断突破。我们目睹了数据价值的极大增强:大型模型通过吸收海量数据,掌握了人类的语言模式、逻辑推理,在诸如文本创作、多语种翻译、情绪识别、复杂问题解构与执行等众多领域取得了翻天覆地的成就,甚至能够在视频制作中模拟物理动作,因此,被誉为“世界模拟器”。数据不单是构建这些复杂模型的根基,更是推进它们持续进化的源泉。

 

在美国20世纪70年代的一场语音识别竞赛中,展现了两种截然不同的设计:一种是借助于人类丰富的知识,深入挖掘对人类语言的理解,通过手工编写的规则来描述语音与语言的结构,例如将音节组合成单词,或根据上下文确定单词的发音。另一种是依赖于海量的数据,采用统计从大量语音中提取特征,基于数据的新方法展现出其优越性,特别是在处理庞大、复杂和多变的语音数据时,新方法能够更好地适应不同的口音、方言和噪音环境。这场比赛的结果直接引发了自然语言处理技术路径的重大转变,统计学与计算能力逐渐崛起为该领域的主导。

 

2004年,DARPA挑战赛。第一年的比赛宛如一场惨烈的车祸现场,被人们戏称为“沙漠溃败”。然而,仅仅一年半后,第二次赛事便再度启动,展现出两种截然不同的技术路线:一种是依托于人类丰富的经验和总结,例如预先探查沙漠路径,为车辆设计特殊程序以突破路途中的障碍物;另一种则是依赖于庞大的数据,通过机器学习来学习道路特征进行导航和脱障,同时加强对道路数据的实时采集,使无人车能够“随机应变”。这一次,依旧是依赖数据的第二条技术路线取得了胜利。从沙漠赛道到城市街道,从基本导航到复杂的交通规则遵守,这些挑战赛成为无人驾驶技术发展的重要里程碑。

 

2016年,AlphaGo凭借数百万局人类棋手的对局数据进行训练,掌握了高水平的棋局策略和模式。然而,第二个版本AlphaGo Zero却完全依赖于自我对弈生成的数据进行迭代训练,从而获得了超越人类棋手的知识和经验,达到了前所未有的围棋境界。这每一次不同类型的比赛,都是算法从统计、机器学习发展到深度学习的过程,也是算力从单片机发展到GPU的过程,更是人类经验逐步让渡于海量数据的过程,同时也是人类带着数据冲击机器智能新上限的过程。

 

我们目睹了数据要素在各行各业中通过投入替代、价值倍增以及资源优化三种方式创造价值,发挥着至关重要的作用。回顾人工智能的发展历程,我们可以看到算法从统计学习、机器学习逐步演化为深度学习,计算能力也从单片机发展至GPU,这一系列变革反映了人类经验向海量数据的过渡,同时也是人类携带数据挑战机器智能极限的历程。从依赖经验到主要从数据中挖掘规律,从专注于解决单一问题到促进AGI的发展,这些转变不仅体现了数字要素的价值,更要求我们以全新视角重新评估其重要性。

 

在近日,萝卜快跑引起了广泛关注,其在一些城市的实践虽显示出些许迟钝于道路路况的反应,但总体表现证明了其实施的可行性。随之,将有越来越多的网约车司机面临由无人驾驶技术所替代的局面,这仿佛重现了农业机械取代农民的传统耕作,移动支付淘汰传统支付方式的历史场景。

 

展望未来20年,车路网云的新时代将为近地空中飞行打开无尽的发展空间与可能性。在未来的世界里,或许我们将见证如同电影中描绘的场景:地面行驶着无人驾驶汽车,而低空则被各型飞行器占据。诸如空中出租车和无人配送等新型服务模式的涌现,预示着未来城市交通将向三维空间延伸。

 

随着车路网云技术的不断进步,那些掌握着最新一代城市交通技术、人工智能技术、云计算技术的国家,其发展效率必将提升至新的高度。技术的升级正推动整个社会效率的持续提升,这一趋势势不可挡。同时,这也见证了数据要素通过投入替代、价值倍增和资源优化等方式,发挥了巨大的作用。这也是中国在过去二十年里迈向数字化生活和生产方式的根本动力。

 

02 算力和数据是基础设施层的关键,中国正加速挖掘数据价值

图:智算中心的基础架构

 

在数字化的新时代,数据已化身为重要的生产资料,而算力则成为处理这些数据的强劲引擎。伴随着人工智能、大数据、云计算等前沿技术的飞速进步,算力与数据的关键作用愈发显著,它们共同构筑了当代信息社会的基础设施层。在这样的大背景下,中国正致力于深化数据价值的挖掘,推动经济与社会向数字化方向的全面转型。

图:中国通用算力规模与预测

 

算力、存储、网络构建智算中心作为基础,智算中心的基于最新AI理论和领先的AI计算架构,算力技术与算法模型是其中的核心关键,算力技术以AI芯片、AI服务器、AI集群为载体,而当前算法模型的发展趋势以AI大模型为代表。

智能算力规模正在快速增长,复杂的模型和大规模的训练需要大规模的高算力支持,这不仅需要消耗大量计算资源,而且对算力的速度、精度、性能也提出更高要求。

AI生态加速收敛,大模型技术逐步收敛,生态走向聚合,模型更收敛、框架更归一。为了开发更高性能的 AI大模型需要更强的算力平台,算力底座技术门槛将提高,未来训练核心依赖集群系统能力。

图:算力底座技术门槛提高

 

算力,作为数据处理的核心能力,其发展水平直接关系到一个国家的科技创新能力和产业竞争力。中国在算力建设方面投入巨大,不仅在超级计算机领域取得了显著成就,连续多年位居全球超算TOP500的数量首位,而且在云计算、边缘计算等领域也展现出强劲的发展势头。通过构建高性能的算力平台,中国为各行各业提供了强大的数据处理能力,支撑起复杂的数据分析和模型训练需求。

 

数据的价值在于其能够被有效利用,政府高度重视数据资源的整合与开放,推动公共数据资源的开发利用,鼓励企业间的数据共享与合作。通过建立数据交易市场、完善数据治理体系,国内逐步释放数据的潜在价值,促进数据资产化、服务化。同时,也在积极探索数据隐私保护和安全使用的法律法规,确保数据价值的挖掘在合法合规的框架内进行。

 

在应用层面,中国将算力和数据的优势转化为实际的生产力。无论是在智能制造、智慧城市建设,还是在金融科技、医疗健康等领域,数据驱动的决策和智能化的服务逐渐成为常态。例如,通过大数据分析,金融机构能够更准确地评估风险,提供个性化的金融产品;而智能制造则通过实时数据监控和分析,优化生产流程,提高产品质量和生产效率。

 

未来,随着5G网络的普及和IOT技术的发展,数据的产生和应用将更加广泛。中国将继续加大对算力和数据基础设施的投入,推动技术创新和产业升级,构建更加完善的数据生态系统。总之,算力和数据是现代社会不可或缺的基础设施,加速挖掘数据价值,它们是推动经济增长和社会进步的关键资源。

 

03 AGI的发展遵循扩展定律

 

AGI‌的发展不仅体现在技术的进步上,‌还涉及到算力的持续提升和模型规模的演进升级。‌随着AI变得越来越流行和易于获取,‌研究想法的增长无疑加速了技术的发展。尤其是在算力层面,即便面对着摩尔定律的放缓趋势,片内互联技术的突破仍为单个芯片设计的规模拓展与能效提升开辟了新的工程成就之路。‌这些技术进步为AGI的发展提供了强大的基础。

扩展定律,作为人工智能产业内部破解困局的共识:通过运用更庞大的模型架构,配备更强大的计算能力,从更广泛的数据集中挖掘更深层次的隐含知识与普遍适用的能力。从GPT 1演进至GPT 3的过程中不断探索实验,当参数规模增加至百倍之多,训练数据集增至五十倍之际,GPT 3.5展现了能力的“涌现”:全球逾亿用户蜂拥而至,验证了该模型能够以近乎类人的方式理解上下文和进行对话交流;同时,此模型还展现出了更高级的泛化能力和思维链能力,能够对于未知情境做出合理的推断,并将复杂问题分解为简易任务,逐步解决。由此塑造出的AGI(人工通用智能)初步形态:一个基础且通用的大型模型能够进行内容创作,能够革新程序编码、文档编辑等多样化工具软件的使用体验,能够“转生为”机器人,借助具身智能加快机器人研发的步伐,并且改变了科学研究的传统范式,促成了生物医学、材料科学、工业仿真等多个领域的新突破。

 

 

中国的LLM型路线见证着数据要素的作用,比如阿里巴巴通义千问,自2023年8月以来,其连续发布了7B、14B、72B及200B参数版本,随着参数规模的壮大,模型的能力亦显著提高。AI研究了几十年,唯一有效的东西便是scaling law(尺度定律),就是不断放大数据、算力和算法这几样生产要素。

 

 AGI正逐渐成为推动社会进步和产业革新的关键力量,技术不断进步,从最初的专家系统到机器学习,再到深度学习的兴起,AI技术已经取得了显著的成就。随着计算能力的增强、大数据的积累和算法的创新,AGI成为了科技发展的下一个里程碑。AGI的发展背景是复杂多元的,涉及技术进步的内在逻辑、经济社会的外在需求、伦理法律的约束条件以及国际竞争合作的大环境。未来,AGI的发展将在这些因素的共同作用下不断推进,同时也需要全社会的智慧和努力来确保其健康、有序和有益的发展。

 

此外,AI规模法则的提出预示着计算资源的可持续增长与成本的持续降低,从而为AGI的发展奠定了物理上的可能性。OpenAI首席执行官山姆·奥特曼所提出的AI时代摩尔定律——宇宙中的智能数量每18个月翻一番,进一步凸显了AI技术发展的速率与规模。

 

在模型方面,随着算力的不断强化,基于大模型的AGI智能能力已远超传统适用于特定场合的中小型AI模型。一旦完备的通用AI得以实现,其将在AI+各种场景下展现广泛的应用潜力,同时算法的逐步确立也为AI技术的持续优化开辟了新的可能性。这种相互作用的关系促进了AGI技术的不断前进与发展。AGI的进步无疑遵循着扩展的原则,通过算力的系统提升与模型规模的逐步升级,推动着AGI技术的迅猛前行。

 

04 AGI领域应用层创新发展

 

OpenAI的联合创始人伊尔亚·苏茨克维,在一次深入的访谈中,曾以一句精辟而抽象的话语概括了人工智能模型的本质:“The models just want to learn!”此言并非赋予了模型以生命般的学习欲望,而是揭示了模型被设计的初衷——从浩如瀚海的数据中自动汲取隐含的规则与经验,借助算法的巧思与算力的增强,不断优化学习的效率,拓宽学习的边界。

 

AGI市场,犹如一座宏伟的大厦,其结构复杂而有序,主要分为基础设施层、模型层、中间层以及应用层。大模型在应用层的探索与创新,如同点亮了这座大厦的璀璨灯塔,为AI领域带来了前所未见的机遇。随着计算能力的飞跃提升,数据量的激增,以及算法的持续优化,大模型已悄然崭露头角,在自然语言处理(NLP)、计算机视觉、语音识别等多个领域展现出了强大的能力。这些显著的进步,使得大模型在追寻人工通用智能(AGI)的道路上,愈发展现出全球领先的潜力。

 

AGI,这片神奇的土地,以其无限的可能性与挑战,吸引着无数探索者。它要求模型不仅能在某一领域内专精,更要具备跨领域的知识表示与推理能力,如同一位博学多才的智者,能自如地穿梭于不同的领域,应对各种挑战。同时,AGI还需具备自适应学习的能力,犹如生命体一般,能根据不同的任务与环境,灵活地调整学习的策略与参数。

 

然而,真正的智能不仅仅是逻辑的推理与知识的积累,更是情感的理解与社交的互动。因此,大模型在追求AGI的道路上,还需赋予其情感与社交智能,使其能够更加深刻地理解人类的情感,适应人类社会的需求。

 

在智能的征途上,伦理与道德的指引不可或缺。大模型在实现AGI的旅途中,必须植入伦理与道德的判断能力,确保其在决策的每一步都能遵循人类的价值观与道德规范,成为维护人类福祉的守护者。人机协作与交互,是AGI融入人类社会的重要桥梁。大模型应具备与人类协作与交互的能力,能在人类的生产、生活中提供智能化的服务与支持,成为人类智慧的延伸,生活的益友。

 

因此,大模型在应用层的探索与创新,为AGI的实现注入了蓬勃的生机。通过算法的不断优化、应用领域的持续拓展、智能水平的日益提升,大模型正稳步迈向AGI的高峰,为社会带来更为广泛、更为深入的智能化服务,开启一个崭新的智能时代。

                    图:AGI市场的四层结构示意图

 

应用行业现状

· 营销和零售:‌AGI应用颠覆营销领域,‌推动营销效率提升和体验优化。‌

· 金融:‌金融行业整体处于AGI应用探索期,‌逐渐向产品测试期迈进。‌

· 企业应用:‌AGI应用覆盖企业全流程,‌注重效率、‌知识管理和流程优化。‌

· 教育:‌集中在应用探索和产品测试阶段,‌学生侧应用速度快、‌探索程度深。

 

05 通用大模型与行业大模型并驾齐驱,小模型市场需求更大

在大模型的演进之路上,每一次通用大模型的力量提升,皆如潮水般席卷,对散落的应用与解决方案形成无可匹敌之势;大模型所蕴含的通用智能之价值,势必超越那些零散场景应用的总和。然而,在AI的广袤天地中,通用大模型与行业大模型各承其妙,各有千秋。通用大模型,犹如璀璨星辰,于众多领域与任务中展现卓越性能;行业大模型,则如精密的钟表,针对特定行业或领域精准调校,专业定制。尽管通用大模型在诸多领域捷报频传,但行业大模型仍不可或缺,当应用场景对反应速度有极高要求时,我们或许更需依赖一个更为小型的模型。这类模型虽不具备大模型的普适智能,却在特定垂直场景中展现出无可比拟的优势。此时,对模型进行精细调整,满足定制化需求,追求实时性与高效率,将行业数据注入其中,打造出规模更小、垂直更深的行业模型,方能满足市场那更为庞大的需求。

 

在通用大模型的雄厚基础之上,行业大模型得以筑建。这些通用模型,蕴含着深邃的知识储备与卓越的泛化能力,不仅为行业大模型奠定了坚实的知识根基,并极大地提升了互动体验的丰富度;同时,它们还大幅降低了从零起步训练模型所需的海量数据和计算资源,显著提高了行业大模型开发及其应用的效率和成效。经由对通用大模型实施提示工程、检索增强生成、精调、持续预训练/后训练等手段,模型能够更精准地适应特定数据集或任务需求,进而衍生出行业大模型的特定版本(即模型有变),或赋予其行业大模型所具备的功能(即模型不变)。。如今,市场上涌现的众多行业大模型,如金融、法律、教育、传媒、文旅等领域,大多基于Llama、SD、GLM、Baichuan等国内外广为人知的开源大模型而构建。

 

在专业领域内,大型模型往往需根据特定数据集与任务进行精细调整或定制开发。针对B端客户群体,每一家企业均有其独树一帜的商业运作、数据资产及业务流程,对于大型模型所寄望解决的关键问题亦各具特色,个性化需求普遍可见。因此,供应商所提供的行业大型模型不单是产品与工具的集合,更包含必要的定制化服务与支援,甚至于需要客户的积极参与和共同建设。可以这般理解:行业大型模型中的产品宛如“待装修之房屋”,客户必须依据各自用途进行“内部装潢”方能真正满足其需求。例如,借助TI平台之力,构建了行业大模型的精选商铺,推出了MaaS服务,为客户提供了一系列周全的行业大模型解决方案,覆盖模型预训练、精细调整及智能应用开发等多个方面。

 

 

行业大模型需

重视全生命周期的安全保障机制

 

在大型模型的数据处理流程中,相较于传统模型,其复杂度更高,诸多不可控的因素孕育着不容轻视的安全隐患,涉猎数据隐私保护、推理过程安全、内容审查安全、版权防护等诸多方面。这便迫切需求一套系统化的安全防御机制,对于行业大型模型而言,此需求尤为显著。安全厂商倡导的大型模型安全框架,针对模型全生命周期内的各类安全风险,提供了原则与方法上的指导,覆盖内生安全及应用安全两个维度,助力体系解决大型模型在生产研发过程中遇到的基础设施、数据、模型、算法等各层面的安全风险,以及不合理应用可能触发的决策失控风险等。在此之中,针对大型模型生产研发过程中内在的安全问题,应由大型模型研发团队与安全团队共同聚焦,通过安全评估等机制确保大型模型的应用能够达成安全目标。总而言之,将安全举措具体实施于研发、训练、测试、部署发布等每一个环节,同时,也是业界共识,旨在提升大型模型的安全水平,其中可采纳的措施包括prompt安全评估、红蓝对抗演练、源代码的安全防护、基础设施漏洞的安全防护等多种方式。

 

 

 

2024CSDI 9月20-22日

共话科技应用元年

 

正值LLM时代,智能软件研发的技术、范式和工具都发生了巨大的变化。无论是依赖于深度学习、神经网络和大数据技术。还是软件研发的范式从传统的规则驱动和专家系统转变为数据驱动和模型驱动。大量的智能软件研发工具和框架应运而生。数据成为了智能软件研发的核心。智算资源的需求与训练部署复杂的模型,开发者需要利用高性能的硬件(如GPU、TPU等)和分布式计算技术(如云计算、集群计算、数据库等)。这些技术应用便是IT企业探寻与研究的必选题。

 

2024CSDI峰会将以数智+跃迁为主旨,于9月20-22日深圳召开,携国内众多顶尖优秀企业,面向技术管理者和一线技术带头人。抽丝剥茧:以业务与新兴技术应用为导向的:大数据开放架构、AIGC产品创新、智能化开发、LLM智能终端创新、LLM数据智能、多模态LLM、大模型规模化应用、云架构生态、质量工程效能、组织战略、智能化开发、安全LLM等先进数字技术进行全面解析,帮组企业构建和借鉴适合自身的技术应用与业务实践。

总结

科技浩瀚星海中,数据要素的创新如同璀璨星辰,与科技发展交织成一张推动技术进步的巨网。智能研发与应用创新之舟,正乘着这股浪潮,破浪前行,其航向呈现出多元化的航迹、跨界融合的风帆以及可持续发展的舵盘。在技术与市场这对孪生潮汐的影响下,企业们如同智慧的航海家,将不同领域的技术与知识汇于一炉,锻造出更具竞争力的产品与应用之锚。

 

AI的洪流、大数据的海洋,云计算的苍穹下,先进数字化技术如星辰般璀璨,AI Agent作为自主决策和任务执行的智能体,在金融,医疗,制造业,展现出卓越的效能。它运用大型语言模型(LLM)作为罗盘,理解复杂的语言指令,生成自然流畅的语言回应,极大地提升了人机交互的航速与平稳。

 

物联网(IOT)应用则如精细的蓝图,通过捕捉精准的产品数据,为研发的精准优化。

 

数字员工在AGI应用市场将形成人才汇聚效应,不仅高效完成自动化和智能化任务,更将深度参与企业决策,提供精准数据支持和智能建议,助力企业提升竞争力。

微软、阿里巴巴、小米、腾讯、华为、360、平安集团、渣打银行、工商银行、招商银行、随行付、易方达、长亮科技、南方电网、广州银联、穆迪信息、拍拍贷、宇信集团、投哪儿金融、天维信息、萨摩耶、华泰证券、招商证券、国信证券、陆金所、广发基金、中国银联、恒天软件、天阳宏业、中数通、电信规划设计院、oppo、步步高、vivo、爱立信、百富计算机、厦门航空、福建联迪、网易、星网视易、升腾科技、视睿电子、飞利浦、金山软件、金山游戏、欧特克、顺丰、深信服、欢聚时代、虎牙、珠海健康云、优视科技(UC)、52TT、天翼云、凯米网络、电信设计院、ADmaster、博思软件、网宿科技、珍爱网、金蝶、唯品会、中国联通、中国移动、传动数码、无限极、中电、珠海网博、中软、同盾科技、杭州顺网、蓝凌软件、长园深瑞、中南民航、远光软件、广联达、中国电信、传音、利通、物理研究所等。

2024年Vue组件库大比拼:谁将成为下一个Element?

thbcm阅读(301)

2024 年,Vue生态蓬勃发展,越来越多的开发者开始探索更适合自己项目的组件库。

今天我们来看一下2024年最受欢迎的几款Vue开源组件库,除了Element,开发者们还有哪些选择呢?


1.Vuetify



Vuetify是由社区支持的Vue组件库,以其完整实现Material Design而闻名。

优点

●Vuetify严格遵循Google的Material Design指南,为用户提供一致且美观的视觉体验。

●Vuetify拥有丰富的组件和预制模板,能够满足大部分项目的开发需求。

●Vuetify拥有庞大的社区,提供丰富的示例和文档,方便开发者快速上手和解决问题。

缺点

由于Vuetify严格遵循Material Design,想要进行深度定制需要理解Material Design的设计理念和规范。

2.Daisy UI



Daisy UI是基于Tailwind CSS的组件库,以其简洁易用、快速开发的特性而受到欢迎。

优点

●Daisy UI 提供直观的API 和简洁的代码,方便开发者快速上手。

●Daisy UI组件库体积小巧,加载速度快,能够提升用户体验。

●Daisy UI 提供灵活的主题系统,开发者可以轻松定制组件样式,满足项目需求。

缺点

●Daisy UI 组件库组件数量相对较少,功能较为简单,可能无法满足一些复杂场景的需求。

●使用Daisy UI之前需要先学习Tailwind CSS,增加了学习成本。

3.Headless UI



Headless UI是由Tailwind Labs开发的无样式Vue组件库,以其极高的灵活性而著称。

优点

●Headless UI不包含任何样式,开发者可以完全自定义组件样式,满足项目设计需求。

●Headless UI与Tailwind CSS无缝集成,开发者可以轻松使用Tailwind CSS的样式库。

●Headless UI组件库体积小巧,性能出色,能够提升用户体验。

缺点

●使用Headless UI需要开发者自己实现组件样式,增加了开发工作量。

●Headless UI组件数量有限,不适合需要丰富预设组件的项目。

4.Element Plus



Element Plus是由Element团队开发的Vue 3组件库,以其功能全面、国际化支持强大而著称。

优点

●Element Plus提供丰富的组件和指令,涵盖大部分常见需求,能够满足大部分项目的开发需求。

●Element Plus支持多种语言,方便开发者构建多语言项目。

●Element Plus提供详细的文档和示例,方便开发者快速上手和学习使用。

缺点

Element Plus组件样式定制化不如其他库灵活,可能无法满足一些个性化需求。


5.PrimeVue



PrimeVue是由PrimeTek开发的企业级Vue组件库,以其强大的主题和样式定制功能而著称。

优点

●PrimeVue提供丰富的组件,涵盖大部分常见需求,能够满足大部分项目的开发需求。

●PrimeVue提供强大的主题和样式定制功能,开发者可以轻松定制组件样式,满足项目需求。

●PrimeVue提供企业级支持和商业授权,适合需要高可靠性和稳定性的项目。

缺点

PrimeVue部分高级功能需要付费使用,增加了使用成本。

6.Quasar



Quasar是由社区支持的一个全功能框架,以其支持多种应用模式,适合构建跨平台应用而著称。

优点

●Quasar提供全功能框架,支持SPA、SSR、PWA等多种应用模式,能够满足各种项目需求。

●Quasar提供丰富的插件和CLI工具,能够提升开发效率。

●Quasar支持构建移动端和桌面端应用,能够满足跨平台需求。

缺点

●Quasar功能丰富,学习曲线较陡峭,需要较长时间学习才能熟练使用。

●Quasar的一些复杂功能需要较多学习才能使用,增加了学习成本。


7.Ant Design Vue



Ant Design Vue是由Ant Group开发的Vue组件库,以其基于Ant Design的设计语言,提供统一且优美的视觉效果而著称。

优点

●Ant Design Vue基于Ant Design的设计语言,提供统一且优美的视觉效果,能够提升用户体验。

●Ant Design Vue提供丰富的组件和图标库,能够满足大部分项目的开发需求。

●Ant Design Vue拥有庞大的社区,提供丰富的示例和文档,方便开发者快速上手和解决问题。

缺点

由于Ant Design Vue遵循Ant Design的设计规范,想要进行深度定制需要理解Ant Design的设计理念和规范。


8.Naive UI



Naive UI是一个轻量级Vue组件库,以其轻量级、高性能、适合现代Web应用而著称。

优点

●Naive UI组件库体积小巧,性能出色,能够提升用户体验。

●Naive UI采用现代化设计风格,能够提升用户体验。

●Naive UI易于使用和定制,方便开发者快速上手和满足项目需求。

缺点

●Naive UI虽然覆盖了大部分常用组件,但在一些高级功能和复杂场景下,可能无法满足需求。

●Naive UI社区和文档支持相对较少,可能无法及时解决开发者遇到的问题。

2024 年,Vue 组件库百花齐放,开发者拥有更多选择。

选择合适的组件库需要根据项目需求、设计风格、开发效率等因素综合考虑。

为什么从大厂出来的程序员都很厉害?普通人可以参考这两点!

thbcm阅读(305)

对于程序员来说,写代码也许并不难,更困难且更重要的是写出能解决实际问题、经得起考验的代码。

而程序员们要想快速提升自己的能力,有两种方法尤为重要

一、跟着牛人干

初入职场,我们面临着选择:加入什么样的团队?选择什么样的导师?这决定了我们未来的发展方向,所谓跟对团队,做大做强!

1. 见识正确的架构方案和做事方式

牛人,指的是那些在领域内经验丰富、精通技术、拥有良好思维习惯的人。

他们不仅精通技术细节,更懂得如何将技术应用于实际问题,如何设计合理的架构,如何高效地完成项目。

如果可以加入他们的团队,我们就可以亲眼见证他们如何思考问题、如何解决问题,学习他们高效的做事方式和严谨的思维逻辑。

2. 避免误入歧途,建立正确的思维模式

很多程序员刚毕业那几年,不幸进入了一个缺乏经验、缺乏规范的团队,每天跟着一群毫无章法、随便搞搞的研发一起工作。

这种环境下,他们只能学习到错误的知识,错误的思维方式,最终导致自己能力停滞不前。

而跟着牛人干,可以避免这种误入歧途的风险,从一开始就建立起正确的思维方式,为未来的发展打下坚实基础。

3. 弥补自学不足,加速成长步伐

自学固然重要,但它只能让我们掌握基础知识。想要真正精进,需要在实践中不断学习。

跟着牛人干,相当于拥有了一位经验丰富的导师,可以帮助我们快速掌握实战技能,弥补自学不足,加速成长步伐。


二、参与更复杂的核心业务项目

在工作中参与复杂度更高的核心业务项目,是非常好的能够磨炼能力的机会。

1. 挑战极限,突破自我

核心业务项目往往涉及到复杂的业务逻辑、高并发、高稳定性等技术难题。

参与其中,我们可以接触到更复杂的场景,面对更严峻的挑战,从而突破自我,提升自己的技术能力。

2. 积累经验,提升解决问题的能力

在核心业务项目中,我们需要面对各种各样的问题,并寻找解决方案。

这个过程可以帮助我们积累大量的实战经验,提升解决问题的能力,让我们在面对类似问题时更加游刃有余。

3. 了解业务,提升代码质量

参与核心业务项目,意味着我们需要深入了解业务需求,才能写出更符合实际需求的代码。

这个过程可以帮助我们提升代码质量,写出更易于维护、更具可读性的代码。

4. 团队合作,提升沟通协作能力

核心业务项目往往需要多个团队协作,这可以帮助我们提升沟通协作能力,学会如何与不同团队的人员进行有效沟通,如何协调资源,共同完成项目目标。

我们常常听到“大厂出来的程序员很厉害”的说法,这其实就是因为大厂的成长环境提供了许多宝贵的学习机会,比如优秀的团队、完善的习题、从0到1的项目积累等等。

无论是跟着牛人干,还是参与核心业务项目,都需要我们保持持续学习的态度,不断精进自己的技术和能力。

成本太高!86%用户计划放弃Oracle Java!太贵了啊……

thbcm阅读(298)

近年来,Java 领域不断在经历变化。

Oracle 对 Java 定价和许可模式的不断调整,引发了用户对高昂成本的强烈不满,并推动了 OpenJDK 的快速崛起。

Azul 近期发布的《2024 年 Oracle Java 使用、定价与迁移调查》 报告,进一步印证了这一趋势。


高昂成本成迁移主因:Oracle Java用户纷纷转向OpenJDK

报告指出,高达 53% 的受访者认为 Oracle Java 的高昂成本是他们迁移的主要原因。

2023 年 1 月,Oracle 第四次调整了 Java 定价和许可模式,将收费标准从 Java 使用量或使用地点转变为企业员工总数,直接导致用户使用成本大幅增加。

这一变化也成为了许多用户转向 OpenJDK 的直接诱因。


市场份额持续下降:Oracle Java时代走向终结

Oracle 在 Java Development Kit(JDK)分布市场中的份额逐年下降。

2020 年,Oracle 在 Java Development Kit(JDK)分布市场中约占 75% 的份额,但到了 2023 年,这一比例降至 42%。

调查显示,这一趋势仍在持续,高达 86% 的使用 Oracle Java SE 的受访者表示正在迁移或计划迁移其全部或部分 Java 应用程序,只有 14% 的用户计划继续留在 Oracle。


迁移计划:大多数用户将在两年内完成迁移

调查显示,大多数用户将在两年内完成迁移。

66% 的 Oracle Java 用户计划在两年内开始迁移到 Java 的替代方案。

其中 52% 计划在一到两年内完成迁移,14% 计划一年内完成迁移。只有 14% 的用户计划继续使用 Oracle Java。


迁移完成情况:迁移过程顺利,用户对结果满意

目前,83% 的用户已经完成了迁移或需要在不到 3 个月内完成迁移。

值得注意的是,84% 的用户表示迁移过程比预期的要容易或符合预期。

这表明,用户已经找到了可行的迁移方案,并对最终结果较为满意。


生产应用中的 Java 支持:OpenJDK 成为主流选择

在生产应用中的 Java 支持方面,46% 的用户选择付费支持的 OpenJDK,包括 Azul Platform Core / Zulu, Azul Platform Prime / Zing, Bellsoft Liberica, IBM Semeru 等。

45% 的用户选择免费支持的 OpenJDK,包括 Amazon Corretto, Eclipse OpenJ9, Microsoft Build of OpenJDK 等。

需要注意的是,虽然 OpenJDK 是一个开源项目,但它本身并不提供商业支持。用户需要选择付费支持的 OpenJDK 版本,以获得更完善的服务和保障。

00后计算机学生的就业最优解在哪里?有3条路可以走!

thbcm阅读(295)

近年来,互联网裁员、互联网寒冬、996、35岁危机等词汇,似乎成了当下程序员的标签,不少计算机专业的毕业生因此而对未来感到焦虑迷茫。

然而,在如今的经济环境下,机械土木、生化环材等专业的就业现状又是怎样的?

尽管负面信息层出不穷,但相比之下计算机专业的发展方向和空间还是较为广阔,就业、考研、考公都有不错的前景。

一、就业:机会与挑战并存

1. 学历:敲开大门的敲门砖

互联网企业,尤其是头部大厂,对学历的要求往往较高。

本科及以上学历是基本门槛,而985/211出身的学生则更具优势。一些竞争激烈的岗位甚至要求第一学历为985/211,专升本或非全日制研究生可能无法满足要求。

然而,学历并非决定性因素。对于双非院校的学生,也不必过分焦虑。只要自身能力过硬,具备扎实的专业知识和实战经验,依然有机会进入互联网企业。

2. 能力:决定胜负的关键

在激烈的竞争中,个人能力才是决定最终面试结果的关键因素。

● 专业知识

在本科阶段积累的专业知识和研究经验,是面试时的重要加分项。

计算机专业学生应重点掌握Python和C++等编程语言,以及数据库、数据结构与算法等基础知识。阅读相关书籍,学习名师课程,并完成课后习题,能有效提升专业水平。

● 实习经历

实习经历是展现能力、积累经验的重要途径。在寒暑假期间积极申请互联网企业的实习,几段优质的实习经历能够帮助你在竞争中脱颖而出。

● 目标明确

不同的岗位对编程语言的要求有所不同,例如开发岗偏向于C++、Java,算法岗则主要使用Python。在应聘前,明确自己想要应聘的岗位,并根据企业招聘要求进行针对性准备。

● 实习转正

通过公司实习转正,是进入互联网企业的性价比很高的一种方式。在实习期间表现优异,将有机会获得直接转正的机会。

二、读研/读博深造:提升竞争力



1. 学历提升

随着互联网行业的竞争日益激烈,越来越多的计算机专业学生选择继续读研或读博,以提升自身竞争力。高学历意味着更优厚的薪资待遇和更大的发展空间。

如今,大部分公司的算法岗要求应聘者为硕士以上学历,高学历为毕业生带来更多就业机会。博士毕业生可以选择留校任职或进入研究所工作。

2. 申请准备

● 保研:抓住机会

对于想要读研的同学,建议尽量争取保研资格。成绩排名不太靠前的同学,也应尽早准备考研。

● 博士申请:注重出身

对于想要读博的计算机专业学生,本科学历尤为重要。如今博士招生普遍实行申请考核制,一个好的本科或研究生出身,对成功申请目标院校博士至关重要。

3. 科研之路:探索未知

研究生阶段和博士阶段离不开科研工作。在决定深造之前,应提前了解科研工作的特点。科研工作需要勤奋、能吃苦、耐得住寂寞,并具备发现问题、解决问题的能力。

● 论文发表:提升影响力

在科研过程中,阅读大量的英文文献,并努力发表高水平的论文,对未来的发展有很大帮助。

三、进体制:稳定与发展并重



1. 稳定选择:另一种选择

并非所有计算机专业学生都适合在互联网企业进行高强度、快节奏的工作。对于那些追求稳定生活,或者不善于代码开发的学生来说,进入体制、选调生、考公务员或考企事业单位编制,也是不错的选择。

2. 进入方式:多条路径

● 选调生:机会难得

选调生分为中央选调、定向选调和普通选调。定向选调一般要求学校为985院校和部分顶尖211院校,并要求党员身份、学生干部经历、各种奖项荣誉等条件。定向选调是985院校学生进入公务员系统的首选模式。

● 考公/考事业编:竞争激烈

考公一般针对应届毕业生,理工科专业在国考中可选岗位有限,竞争十分激烈。





未来是未知的,但我们可以通过努力将未知变为已知。在规划未来时,不要过分担忧和焦虑,而是着眼当下,努力提升自身能力,开拓眼界,提高认知。

人生的道路充满着各种可能性,没有最好的选择,只有最适合的选择。希望本文能为计算机专业毕业生提供一些参考,帮助大家找到适合自己的道路,在未来的人生道路上取得成功!

编程新手必备:想成为全栈开发者,要掌握什么技术?

thbcm阅读(329)

在现在的IT行业,只会单一技能的程序员,在软件开发领域怕是不太吃香,相反,全栈开发人员的角色变得越来越重要。

那么,如果想成为全栈开发者,需要具备哪些技能呢?


1.前端开发



前端开发负责构建用户与软件交互的界面,为用户提供直观、友好、高效的体验。关键技术和工具包括:

● HTML/CSS

这是构建网页的基础,HTML负责网页的结构,CSS则赋予网页美观的样式。

● JavaScript

作为网页交互性的核心,JavaScript让网页能够响应用户的操作。

● 前端框架

React、Angular和Vue.js等框架和库,帮助开发者快速构建复杂的用户界面。

● CSS预处理器

如SASS或LESS,它们让CSS的编写更加高效和易于维护。

● 版本控制

Git作为版本控制系统,帮助开发者管理代码的变更和协作。


2.后端开发



后端开发负责处理软件的业务逻辑、数据存储、安全控制等,为前端提供数据支持和服务。关键技术和工具包括:

● 编程语言

如Node.js、Python、Java和Ruby,它们各自搭配不同的框架,如Express.js、Django、Spring Boot和Ruby on Rails。

● API设计

RESTful API和GraphQL等技术用于构建数据查询的接口。

● 身份验证与授权

JWT、OAuth等技术保障数据安全和用户认证。


3.数据库开发



数据库开发负责管理软件的数据存储、检索和操作,保证数据的完整性和一致性。关键技术和工具包括:

● 关系数据库

如PostgreSQL和MySQL,它们是传统的关系型数据库管理系统。

● NoSQL数据库

MongoDB和Cassandra等NoSQL数据库,提供了灵活的数据存储解决方案。


4.移动开发



随着智能手机的普及,移动开发也成为了全栈开发者的必备技能。

移动开发负责为移动设备创建应用程序,满足用户在移动端的各种需求。关键技术和工具包括:

● 本地开发

Swift用于iOS应用开发,Kotlin则是Android开发的官方语言。

● 跨平台开发

React Native和Flutter等工具允许开发者使用一套代码为多个平台创建应用。


5.云计算



云计算将软件部署到云平台,提供更强大的计算能力、存储能力和扩展能力,释放软件的潜力。关键技术和工具包括:

● 云平台

AWS、GCP和Azure等提供了丰富的服务,支持应用的部署和管理。

● 容器化与协调

Docker和Kubernetes等工具帮助开发者管理和部署容器化应用。

● 无服务器计算

AWS Lambda、Google Cloud Functions等提供了无需管理服务器的计算服务。


6.UI/UX设计



UI/UX 设计负责设计应用程序的用户界面和用户体验,提升用户满意度和忠诚度。关键技术和工具包括:

● 设计工具

Figma、Sketch和Adobe XD等工具帮助设计师创建和迭代设计。

● 原型和线框图

InVision和Balsamiq等工具用于快速构建和测试设计概念。

● 用户研究与测试

通过用户研究和可用性测试,确保设计满足用户需求。


7.基础设施和DevOps



基础设施和DevOps负责管理软件的基础设施、部署和持续集成/持续交付(CI/CD),保证软件的稳定运行和快速迭代。关键技术和工具包括:

● 基础设施即代码(IaC)

Terraform和Ansible等工具帮助自动化基础设施的构建和管理。

● CI/CD工具

Jenkins、CircleCI、Travis CI和GitHub Actions等工具支持持续集成和持续交付。

● 监控和日志

Prometheus、Grafana和ELK Stack等工具用于监控应用性能和日志管理。



通过掌握上述技术和工具,全栈开发者可以在软件开发的各个阶段发挥关键作用,从前端界面到后端服务,再到数据库管理和云计算部署,无所不包。

随着技术的不断演进,全栈开发者的角色将越来越多元化,但核心始终不变:构建高质量、用户友好的软件解决方案。

8月编程语言排行榜公布!Python份额首次超过18%,已成霸主!

thbcm阅读(331)

TIOBE已公布8月编程语言榜单,跟小狮妹一起看看本月在编程语言排名方面有什么值得关注的地方吧~

1.排名榜单



前20名

21-50名

51-100名

第 51-100 名如下,由于它们之间的数值差异较小,仅以文本形式列出(按字母排序):

2.榜单亮点



Python份额首次超过18%

TIBOE官方在8月榜单中给出的标题是“Python正在追逐Java的TIOBE索引记录”。

本月,Python的份额首次超过18%。上一次有语言达到18%以上还是2016年11月的Java。

Java也是有史以来份额达到过最高的语言:2001年6月达到 26.49%。

目前,Python与排名第二的C++之间的差距已经扩大到8%,第一名和第二名之间的最大差距同样出现在2016年11月,当时Java领先C语言9.55%。

TIOBE CEO Paul Jansen对Python给予了高度评价:

“总而言之,Python的霸权地位已无可争议。下一步,Python很有可能成为有史以来最流行的编程语言。”

他还表示,尽管Rust和Kotlin等新兴语言正在迅速接近TIOBE指数前10名,但它们要真正威胁到Python的地位,还有很长的路要走。

其他变动

SQL的排名上升至第7位;

Go语言和Fortran则下降至第9位、第10位;

MATLAB和PHP的排名也有所提升,分别升至第11位和第13位;

Rust从13位下降至14位;

Kotlin则从20位上升至18位。


3.TOP10编程语言TIOBE指数走势

TIOBE 编程社区指数是一个衡量编程语言受欢迎程度的指标,该指数每月更新一次。

虽然TIOBE排行榜反映编程语言的热门程度,但它并不能说明一门编程语言的优劣或编写的代码数量。

排行榜可以作为评估编程技能是否与时俱进的工具,也可以在开发新系统时作为语言选择的参考。

在国内,为什么大多数程序员不愿意编写单元测试?

thbcm阅读(306)

单元测试,作为软件开发过程中至关重要的一环,其优点不言而喻:提升代码质量、加速bug定位、降低修复成本、延长项目生命周期等等。

然而,与这些显而易见的优势形成鲜明对比的是,在国内大多数公司,单元测试的落地情况却并不理想,这是什么呢?

一、单元测试的优势



1.提升代码质量,增强交付信心

单元测试为开发人员提供即时反馈机制,帮助他们在代码编写阶段及时发现并修复问题,从而提高代码的健壮性和可靠性。

虽然单元测试不能完全替代系统测试和验收测试,但它无疑为构建高质量软件奠定了坚实基础。

2.快速定位bug,提高调试效率

单元测试的测试范围小、逻辑简单,一旦发现错误,能够迅速锁定问题代码,避免在复杂的系统代码中迷失方向,从而显著提高调试效率。

3.降低bug修复成本,节省开发时间

软件开发领域有一条著名的“10倍法则”:越晚发现bug,修复成本越高。

单元测试帮助开发人员在编码阶段就解决大部分问题,避免bug遗留到后期,从而节省宝贵的开发时间和成本。

4.延长项目生命周期,降低维护难度

良好的单元测试覆盖率可以有效约束代码风格,提高代码可读性和可维护性,即使面对人员变动和需求变更,也能保证项目的长期稳定运行。

我们已经知道了单元测试是多么重要的。为什么程序员仍然不编写单元测试呢?为什么程序员总是有理由拒绝编写单元测试呢?

二、为什么不写单元测试

1.应用软件开发模式与单元测试的适配性问题

国内软件行业以应用软件开发为主,这类软件的特点是需求变化快、迭代周期短,而单元测试更适用于需求稳定、系统复杂的服务器端开发或算法开发。

频繁的需求变更会导致单元测试代码需要不断修改,甚至推倒重来,反而增加了开发人员的工作量,降低了开发效率。

2.快速迭代的开发模式与单元测试的成本博弈

在国内互联网行业,“唯快不破”的理念深入人心,快速迭代、快速试错成为主流开发模式。

相较于投入大量时间和人力进行单元测试,企业更倾向于选择快速开发、快速上线,通过功能测试和用户反馈来验证产品,即使代码质量有所牺牲也在可接受范围内。

3.单元测试对开发人员的技术要求与人力成本的制约

编写有效的单元测试需要开发人员具备扎实的编程基础和测试思维,这无疑提高了对开发人员的要求。

然而,在国内快速迭代的开发模式下,企业很难负担高水平开发人员的成本,也难以提供充足的时间和资源进行单元测试培训。

4.单元测试与测试人员技能要求的错位

将单元测试完全交给测试人员执行并不现实,因为这需要测试人员具备与开发人员相当甚至更高的代码理解能力。

而目前国内软件测试行业更注重黑盒测试,即从用户角度进行功能验证,对白盒测试的需求相对较少,这也导致了白盒测试岗位需求的减少。

5.国内外软件开发环境和理念的差异

与国内追求快速迭代的应用软件开发不同,国外很多公司专注于系统级软件开发,这类软件需求稳定、对可靠性要求极高,因此更重视代码质量和单元测试。

例如,Google 公司推崇“测试驱动开发”的理念,研发测试比例高达 10:1,这与其对软件质量的极致追求密不可分。

这么看来,国内公司单元测试难以落地也不全是程序员的“锅”,而是多种因素共同作用的结果。

在应用软件快速迭代、需求频繁变化的背景下,单元测试的投入产出比需要被重新评估。

当然,这并不意味着单元测试毫无价值,对于追求高质量、高可靠性的系统级软件开发来说,单元测试依然是不可或缺的保障。



程序员如何提升编程中的沟通效率?Get这些“暗号”!

thbcm阅读(309)

在软件开发中,我们常常为沟通效率低下而头疼。

接手维护项目时,面对低质量代码,不得不一次又一次地与前任开发者沟通;

团队内部,模块分散,编程风格各异,使用对方服务时需要反复确认;

跨团队合作,技术栈不同,更需要花费大量时间统一标准……

这些问题的根源在于代码本身带来的学习成本和沟通成本。每一份代码都像是一本需要重新学习的书籍,需要反复研究和沟通才能理解。

然而,为什么学习了 Spring 框架后,我们与他人交流相关问题时效率会显著提高?

答案在于 Spring Boot 框架应用了一个简单却强大的原则:惯例优于配置(Convention over Configuration,CoC)。

这个原则帮助编程者提前建立起隐形的公共知识体系,当一方提及某个知识点时,另一方早已心领神会,无需反复解释,沟通效率自然水到渠成。


一、惯例原则:用“共同语言”编程

惯例原则起源于 Ruby On Rails 框架,其核心理念是将编程中公认的配置方式和约定信息作为内部默认规则。例如MyBatis 的映射文件通常命名为 xxxMapper.xml。

由于是默认统一的规则,大多数开发者都会优先采用,久而久之,便对规则形成统一认知,沟通时自然减少了重复理解和沟通的时间。

我们可以将惯例原则理解为一种约束,在特定框架(知识体系)下,根据这些约束制定默认规则,框架便能基于这些规则实现统一操作。

例如,Spring 框架中,使用 @Autowired 注解自动注入 Java Bean,框架通过解析注解自动寻找对应的 Bean。

因此,惯例原则也被称为“按约定编程”。

与契约原则(DBC)强调的“按统一协议/标准协作”不同,惯例原则更注重隐性知识的共享。

例如,使用 Maven 管理工程结构,其实是预设了维护者已经了解 Maven 相关的惯例约定。


二、惯例原则解决的问题

以常见的 Maven 自动生成的 Java 工程结构为例,这个目录结构对 Java 程序员来说不言自明,这就是一种公认的惯例。

惯例原则主要解决了编程中对共同隐性知识的学习问题,通过统一的默认规则,建立起沟通的桥梁。

当然,我们可以不使用惯例,但代价是花费大量时间解释和说明新规则,并确保消除其他人的误解。

除此之外,惯例原则还间接带来了以下好处:

● 形成编程圈的专业行话

在编程领域,使用惯例就像使用专业术语,无需额外解释, everyone gets it.

● 减少决策次数,降低认知负担

惯例帮助开发者快速做出选择,避免在众多技术方案中犹豫不决,从而专注于解决实际问题。


三、惯例原则的副作用

使用惯例原则能带来良好的可维护性和沟通效率,但也要警惕其潜在的副作用:

● 灵活性降低

过于定制化的默认规则,虽然统一了认知,但也限制了灵活性。例如,统一使用 ApiResponseResult 类处理 JSON 返回格式,如果需要修改数据格式,可能需要改动大量代码。

● 自定义惯例的风险

自定义惯例需要团队内部反复确认,否则可能导致严重问题。例如,数据库 YN 字段默认值不统一,可能导致数据迁移时出现错误。

● 参考变强制

惯例原则可能演变成强制标准,导致设计僵化。例如,数据类只能写 get、set 方法,或者代码只写在一个层级。

● 不同框架惯例不可复用

不同知识体系下的惯例不同,不可混淆使用。例如,C++ 和 Java 的开发惯例就存在差异。


四、如何正确使用惯例原则

为了避免惯例原则的副作用,我们需要掌握以下技巧:

● 遵循大多数人的惯例

选择业界公认的惯例,例如 Java 的驼峰命名、MySQL 数据库字段的下划线分割等,确保理解一致性,减少沟通成本。

● 明确惯例的适用范围

不同的惯例适用于不同的编程语言、场景和行业,需要根据实际情况选择使用。

● 自定义惯例需团队确认

自定义惯例时,确保团队内每个人都知晓并理解,并在实际编码中与调用方反复确认。

● 平衡惯例与灵活性

不要过度使用惯例,在需要灵活性的情况下,可以选择配置或代码实现。

● 避免强制他人使用惯例

惯例应该是一种自由选择,而不是强制要求,避免破坏他人的编程习惯,降低开发效率。



总之,惯例优于配置原则就像软件开发中的隐形桥梁,帮助我们跨越沟通的鸿沟,提升开发效率。

但也要警惕其潜在的副作用,灵活运用,才能最大限度地发挥其优势,构建高效、可维护的优质软件。

联系我们