展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > 编程概述

编程概述

编程不是艺术,核心是解决问题,要求精确描述并忽略部分现实。控制复杂性是中心议题,通过降低模块耦合来管理代码。复用已有知识是编程技艺核心,通过简单接口构建可复用的信息块,实现有效积累。

本文目录

    谈谈编程(1)编程概述

    编程这事儿,往玄乎了说,可以看作是实用魔法的一个分支。编程魔法师拿时间和精力当祭品,跟计算机里的精灵签个契约,换来驾驭代码的本事。

    要提高编程水平,没什么捷径,多看、多写就是了。这篇文章,说白了也是基于经验的一些分享,重点聊几个方面:

    编程的基本概念
    软件开发中的方法论
    编程实践
    嵌入式编程的特点

    我们从不同角度来聊聊“什么是编程”,或者说“编程的本质问题到底是什么”。当然,这并非要下一个什么标准定义,而是希望借此梳理各种编程思想,加深我们对这件事的理解。

    编程概述

    1. 编程不是艺术

    有一句很经典的话:“我们的世界是模糊的、连续的、不精确的,但软件是精确的、离散的、形式化的,这就注定了软件不能完全描述现实世界。因此,我们需要知道描述哪些部分,忽略哪些部分,这就是软件的本质问题。”——Tom Demarco

    编程不是艺术。它不追求某种完美,它的核心目标就是解决问题。

    和艺术那种“只能意会,不可言传”的调性完全相反,编程忍受不了自然语言的模糊性。它要求问题最终要能表述成可编译、可运行的代码,文字和图表只是辅助沟通的工具。

    其实,每个程序员身上都戴着两副面具:一副是职业的,一副是专业的。戴上职业面具,程序员会用能找到的最好用的工具,用最简单直接的方式,在合理的成本内,解决掉问题中必须解决的部分。

    而戴上专业面具的程序员,会不厌其烦地学习各种编程知识(很多都不是当下职业直接需要的),不断积累经验,吸收那些可以复用的模式和思想。他们会花大量时间去琢磨,程序表象的背后,CPU的汇编代码里究竟发生了什么。他们身上有种强烈的探索未知领域和持续升级的欲望。

    他们不断接近技艺的完美,而这个技艺本身,恰恰是通过“不谈完美、但求有效”的方式来解决问题。他们付出了大量努力,背后驱动力就是好奇心和进取心。就像《魔法学徒》里描述的魔法师,他们所追求的东西,只有志趣相投的同行才能真正理解,与阵营无关。了解事物真相本身带来的满足感,就足以当作一切努力的最好回报。

    2. 控制复杂性

    Betrand Meyer说过:“任何一个正在构建大型系统的人,天天面对的中心议题就是:如何剔除不必要的、人为的、自找的复杂部分,并控制好剩下的、无可逃避的复杂性。”

    从这个角度看,编程可以被看作一种管理工作——管理的对象是代码,而控制的核心正是代码的复杂性。

    我们传统的思维习惯,喜欢谈本质,追求一种叫做“道”的东西。但在编程这件事上,表象和本质其实同样重要。所有程序说到底,不过是一些汇编语句的组合,但了解这个本质,在大多数实际场合并不能帮助我们解决具体问题。

    写代码的目的是解决问题。当代码的数量增加到一定程度,对代码自身的管理和控制,就会成为一个重要问题。数量,真的会改变本质。

    管理的要诀在于削弱、孤立被管理的对象,让它们彼此之间“鸡犬之声相闻”,却“至老死不相往来”。每个被管理的对象,在完成自身工作的前提下,对其他对象的了解应当尽可能少。通过尽量降低对象间的耦合程度,来控制复杂性。

    只有有效地控制住复杂性,我们才能使用越来越大的信息块,驾驭越来越多的代码,用这些0和1的操作,去实现前人没有、甚至无法完成的工作。

    3. 复用

    编程技艺的核心,说到底就是代码的复用。复用已有的知识,是积累和提高的前提,否则就像西西弗斯,每天推着石头上山,永远无法真正累进。在上帝视角看来,重复本身就是一种惩罚。

    编程这个职业,知识更新确实快,能学的东西也多。有些人觉得累,但也有些人觉得其乐无穷,甚至觉得能从事这个职业是件很幸运的事。

    编程的实质,其实更像是建筑——根据应用需求,不断构建更大的信息块。我们所写的所有程序,都可以看作是对语言本身的扩展。换句话说,我们一直在开发新的语言:每个函数、每个类,都是在为现有语言增加新的功能。我们按照适合特定应用的模式,组合各种信息块,完成实际的应用。这些信息块,有的是自己造的,有的是借来的。

    信息块能被组合的关键,在于简单、明确的接口。所以,我们应当针对接口编程,而不是针对应用编程。应用往往意味着变化,也意味着难以复用。将应用合理分解为模块,定义好模块间的接口,然后按照接口来构建模块。模块分解的原则很明确:

    • 模块的耦合程度尽可能低(这被称为最少知识原则);
    • 接口尽可能简单(也被称为接口隔离原则);
    • 如果将变化的因素封装到模块中,每个模块应该只封装一个因素(这就是单一责任原则);
    • 使特定于应用的代码尽可能少。

    针对接口编程的好处有两个方面:一是信息块可以被复用;二是复杂性可以被更好地控制。

    人们用各种方式复用知识。其实,C语言本身又何尝不是知识的一种复用呢?其他复用方式包括:库函数、新的语言和编译器、新的脚本、类库、程序框架、设计模式、面向对象、面向组件、面向服务、面向方面、面向领域、各种开源代码、开发环境提供的各种Wizard和糖衣、各种代码生成工具等等。充分了解编程环境,善于复用各种资源,是程序员的基本功。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 语言 编程
    上一篇: 编程和我
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。