我们是否应该在公司内部进行软件开发?

153 阅读11分钟

我们是否应该在公司内部进行软件开发?

  • 内部开发的好处:
    • • 根据特定行业需求定制解决方案。
    • • 更好地控制技术选择和未来方向。
    • • 从长远来看可以节省成本。
    • • 通过提供稳定的工作和崭新的发展机会来吸引和留住人才。
  • 内部开发的挑战:
    • • 大量的前期投资和持续的维护成本。
    • • 需要建立一支具有专业技能的专业软件开发团队。
    • • 与内部用例相比,为更广泛的市场设计和开发软件的复杂性。
    • • 如果管理不善,技术债务的风险就会不断增加。
  • 内部开发的替代方案:
    • • 与满足细分行业需求的专业软件公司签订合同。
    • • 利用现有的第三方 API 并将其集成到内部系统中。
  • 公司文化的重要性:
    • • 营造积极的工作环境,其特点是具有竞争力的薪酬和福利、开发人员的自主权和所有权、专业成长和发展的机会、灵活且适合远程的工作政策、最少的官僚主义和精简的流程。
  • 外包:
    • • 考虑将开发外包给经验丰富的专业人员,以完成平台替换或持续维护。
    • • 有可能更快地获得结果和专业知识,同时降低与内部开发相关的风险。
  • 内部开发的风险:
    • • 低估内部构建新平台的复杂性和潜在陷阱。
    • • 问题包括技术债务的累积、软件团队的管理困难以及可能超出预算和时间表的预期。
  • 替代解决方案:
    • • 探索专为具有独特需求但开发资源有限的企业设计的低代码平台。
    • • 简化开发,同时允许通过后端集成和脚本进行定制。
  • 批判性评价:
    • • 仔细评估重写相对于现有解决方案的潜在优点和缺点。
    • • 考虑收入损失、客户影响和长期维护成本等因素。
  • 内部专业知识:
    • • 利用现有的具有技术技能的内部人才来构建所需平台的基本版本。
    • • 这是一种经济有效的方法,既能赋予员工权力,又能满足紧急需求。
  • 聘请内部开发人员:
    • • 讨论雇用内部开发团队与外包的优点。
    • • 一些人主张通过有竞争力的薪酬、工作与生活的平衡以及良好的福利来吸引经验丰富的开发人员。
    • • 其他人则警告称,对于范围有限的小型项目,不要进行内部开发,因为可能会造成成本超支。
  • 软件解决方案:
    • • 承认购买现成软件和开发定制解决方案之间的权衡。
    • • 商业软件提供了便利和标准化流程,但可能无法完全满足独特需求。
    • • 定制软件可以提供更大的灵活性,但需要大量开发时间和资源的投入。
  • 明确要求的重要性:
    • • 与开发人员(无论是内部还是外包)合作时,强调明确定义的项目要求。
    • • 使用项目符号概述功能并设置具体的时间表和里程碑以避免范围蔓延。
  • 构建与购买:
    • • 强烈建议不要从头开始构建软件,因为其复杂性和成本。
    • • 探索替代方案,例如收购现有公司、迁移到竞争对手的平台或利用具有最低限度定制的开源解决方案。
  • 技术复杂性:
    • • 承认当前解决方案看似简单,但强调 ED 等数据交换协议可能带来的挑战

news.ycombinator.com/item?id=411…

LibreCUDA 是一个开源项目,通过 ioctls 和 QMD 直接与硬件通信,无需专有驱动程序即可在 Nvidia GPU 上执行 CUDA 代码

  • LibreCUDA 的目标: LibreCUDA 旨在取代专有的 CUDA 驱动程序 API,允许您在 Nvidia GPU 上运行 CUDA 代码,而无需依赖 Nvidia 的软件。
  • 工作原理: LibreCUDA 不使用标准 CUDA 运行时,而是通过 ioctls(输入/输出控制系统调用)和 QMD(Nvidia 的 MMIO 命令队列结构)直接与 GPU 硬件通信。这种低级方法使 LibreCUDA 能够直接控制 GPU。
  • 当前功能:
    • • 分配和释放 GPU 内存。
    • • 映射分配的 GPU 内存以供 CPU 访问。
    • • 将 CUDA ELF 二进制文件(编译后的 CUDA 代码)上传到 GPU。
    • • 通过命令队列启动 CUDA 内核(在 GPU 上执行的功能)。
  • • **示例代码分解:**提供的示例演示了一个简单的“write_float”内核,它将浮点值从 CPU 内存复制到 GPU 内存。以下是分步说明:
    1. 1. **初始化:**代码初始化 LibreCUDA 并识别可用的 GPU。
    2. 2. **上下文创建:**创建一个 CUDA 上下文,它代表在特定 GPU 上执行 CUDA 代码的环境。
    3. 3. 模块加载: “write_float”内核从 CUBIN 文件(编译的 CUDA 代码的二进制表示)加载。
    4. 4. **内核检索:**从已加载的模块中检索特定的“write_float”函数。
    5. 5. 内存分配: CPU 和 GPU 上都分配了内存来存储浮点值。
    6. 6. **数据传输:**浮点值从 CPU 复制到 GPU 内存。
    7. 7. **内核启动:**启动“write_float”内核,以源和目标内存位置的地址作为参数。
  • 项目状态: LibreCUDA 仍在开发中,仅支持有限的 CUDA 功能。尚未准备好投入生产使用,但欢迎开发人员做出贡献。

github.com/mikex86/Lib…

参与者在自我提升计划中反思个人成长和未来探索的潜力

  • • **一次大胜利 (OBW) 概念:**作者描述了一个名为“一次大胜利”的个人发展框架,该框架专注于在 8 周内追求一个有意义的目标。
  • • **将关注点从结果转移到过程:**与强调达到特定终点的传统目标设定不同,OBW 鼓励参与者拥抱旅程并关注沿途发生的内部转变。
  • • **个人 OBW 体验:**作者分享了他们参与 OBW 的积极体验,强调 OBW 如何帮助他们将个人成长置于外部成就之上。他们描述了在 8 周结束时感受到的成就感和“更好的状态”。
  • 邀请加入未来的 OBW 队列: OBW 的创建者 David Cain 邀请第一批参与者加入该计划的未来几轮。
  • • **读者评论和讨论:**本文包括了参与过 OBW 概念的读者的评论。一位读者对该框架及其个人成长潜力表示出热情。另一位读者提出了一个有效的观点,即需要制定切实可行的目标来解决社会问题并为世界带来积极变化。

www.raptitude.com/2024/08/do-…

Raspberry Pi RP2354A/B 微控制器具有 2MB 闪存、可选 80 针封装、改进的 ADC、带 BUSY 信号的 UART 和可编程 I/O

  • 新款 Raspberry Pi 芯片: RP2350A/B 是 Raspberry Pi 的新型微控制器,拥有 2MB 闪存和与 RP2350A/B 兼容的引脚排列。
  • 更多 GPIO! 令人兴奋的是,还有 80 针版本,带有更多 GPIO 针脚,可以扩展项目可能性。
  • • **透明度:**撰写有关 RP2350 的文章的 Luke Wren 强调,他没有为他的文章收取任何报酬,并且自由地表达自己的观点。
  • • **飞行福利?**吉米·詹姆斯幽默地指出,虽然卢克没有得到经济补偿,但他可能得到了一项福利——乘坐德米特里·格林伯格的飞机飞越奥斯汀!
  • ADC 修复和 UART: Jimmy James 询问了之前型号的 ADC 缺陷以及 UART 是否有传输完成位。Dmitry Grinberg 似乎非常喜欢使用 PIO(可编程输入/输出)来执行自定义任务,他说他不使用 UART 等内置外围设备。
  • PIO 与内置外围设备: 其他用户也表示,虽然 PIO 功能强大,但仅仅依靠它可能并不适用于 RS485 通信等常见任务,因为 RS485 通信通常需要专用硬件 UART 和传输完成信号。
  • MicroUSB 还在吗? Kilrah 对官方 RP2350 主板仍然使用 microUSB 而不是更现代的 USB-C 连接器表示失望。
  • 5V 容差和电源选项: sdomi 对 5V 容差很满意,简化了项目连接。他们还希望有板载电池选项,如 LiPo 或 AA 支持。
  • 渴望更小的芯片: corey 表达了对更小、更精简的 RP2 芯片的渴望,类似于 ATTiny 或 SAMD21 微控制器,这表明这个细分市场尚未得到充分服务。
  • 数据表见解: Jimmy James 随后分享了数据表中的见解:
    • • ADC 错误似乎已修复。
    • • UART 现在有一个 BUSY 信号来指示正在进行数据传输。
    • • 他想知道 QSPI 接口是否可以与低功耗串行 SRAM 配合使用,以实现电池供电的非易失性存储

dmitry.gr/?r=06.%20Th…

Mozilla Firefox Nightly 引入了垂直选项卡和侧边栏功能,以增强浏览和多任务处理能力

  • • Mozilla 发布了 Firefox Nightly 131,其中包含新的垂直标签和侧边栏体验。
  • • 这些功能旨在改善浏览时的上下文切换和多任务处理。
  • • 侧边栏允许用户在执行主要任务的同时快速访问喜爱的工具,如书签、扩展程序和移动标签。
  • • 垂直标签使扫描信息和在任务之间切换变得更加容易。
  • • 这是一个正在进行的项目,Mozilla 鼓励用户通过 Mozilla Connect 提供反馈,以帮助完善这些功能。
  • • 鼓励 Web 扩展开发人员使用新的侧边栏和垂直选项卡来测试他们的扩展,以识别任何潜在问题。

blog.nightly.mozilla.org/2024/08/07/…

FlexAttention:用于可定制和高效注意力实现的 PyTorch API

  • • **问题:**传统的注意力机制实现通常不够灵活,需要为不同的变体定制内核。这可能非常耗时,并且会限制实验。
  • • **FlexAttention 的解决方案:**它引入了一个模块化 API,允许用户使用可组合的“模块”定义注意逻辑。这些模块处理分数计算、屏蔽和偏差应用等任务。
  • 主要优点:
    • • **灵活性:**无需自定义内核,即可支持各种注意力变体(例如,块稀疏、本地)。
    • • **效率:**利用 TorchDynamo(PyTorch 的图形编译器)和 TorchInductor(Triton 代码生成器)来优化执行。
  • 工作原理:
    • • 用户使用 mods 定义注意力逻辑,mods 是修改注意力分数的函数。
    • • TorchDynamo 将此逻辑编译成高效的 Triton 内核。
    • • TorchInductor 负责处理不同硬件平台的代码生成和优化。
  • 性能: FlexAttention 借助自定义手写注意变体实现了具有竞争力的性能。它目前正在努力提高其后向传递效率以匹配 FlashAttention3。
  • 未来工作:
    • • 作为 PyTorch 2.5.0 中的原型功能发布。
    • • 添加对推理和PagedAttention的支持。
    • • 提高性能以匹配 H100 GPU 上的 FlashAttention3。
    • • 取消序列长度为 128 的倍数的限制。
    • • 添加对广义查询注意(GQA)的支持。
  • 灵感: FlexAttention 从之前的工作中汲取灵感,例如 FlashAttention、Triton 中的 BlockSparseAttention 和 SplashAttention。

pytorch.org/blog/flexat…

三星与 iFixit 的维修合作失败凸显了延长设备使用寿命面临的挑战

  • • **三星的维修做法与可持续性声明相冲突:**本文强调了三星对环境可持续性的承诺与其阻碍设备可维修性的做法之间的矛盾。虽然三星提倡资源循环利用和减少浪费,但其行为却使消费者难以维修设备,导致设备寿命缩短和电子垃圾增加。
  • • **失败的 iFixit 合作伙伴关系:**以提供维修指南和零件而闻名的 iFixit 与三星合作创建了一个自助维修计划。然而,由于三星不愿为独立维修技术人员提供必要的支持,该计划最终失败。这种缺乏支持实际上阻碍了三星设备强大维修生态系统的发展。
  • 蓬勃发展的维修生态系统的重要性: iFixit 首席执行官 Kyle Wiens 强调,持久耐用的产品需要全面的“生态系统”,包括软件更新和物理维修选项。如果没有现成的零件、维修指南和制造商的支持,独立维修将变得极具挑战性。
  • • **三星错失的机会:**维恩斯对三星缺乏对可修复性的承诺表示失望。他认为三星拥有设计易于修复的手机的资源和专业知识,但选择不优先考虑这一点。
  • • **iFixit 仍致力于维修:**尽管三星遭遇挫折,但 iFixit 仍致力于其使命,即让人们能够修复自己的设备。该公司认为可修复性是可持续发展的一个重要方面,并将继续开发资源并倡导维修领域的消费者权利。

www.androidauthority.com/samsung-ifi…