Can I become a good programmer without math and algorithms knowledge?

2023-05-16

Knowledge of algorithms has very little to do with programming skill.  As some random dude* on the internet once said:  "When in doubt, use brute force."  Let's unpack what this means.


A good programmer knows how to implement a dictionary algorithm in Python.  A great programmer knows that someone smarter than she is has already implemented a dictionary as part of the python language, and trusts that it will work well enough for most purposes.


A good programmer tries to pick the best algorithm in terms of performance.  A great programmer picks the simplest non-stupid algorithm and only considers changing it later if performance is an issue (it almost never is), if changing the algorithm will significantly improve overall performance (it almost never does), and if the performance improvement justifies the cost of making the change (how many dollars is a 5% overall improvement worth?).


Good programmers have a deep understanding of big-O notation.  Great programmers know that in the real world, battles are won and lost in the coefficients.  (This is particularly true in kernel and compiler coding.)


Good programmers know that they'll spend 98 days/year debugging and 2 days/year doing performance optimization.  Great programmers tilt that ratio towards optimization by choosing simpler algorithms that are easier to understand and easier to debug.




To give an analogy:  you don't really need to understand assembly language to be a great programmer, unless you happen to be writing operating system or compiler code.  Likewise, you don't really need a deep understanding of algorithms unless you're writing mathematical libraries, in which case, you do.  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Can I become a good programmer without math and algorithms knowledge? 的相关文章

  • UART、IIC、SPI、CAN通信的区别与应用

    文章目录 1 通信的基本知识1 1 数据通信的种类1 1 1 串行通信1 1 2 并行通信1 1 3 总结 1 2 数据通信的传输方向1 2 1 单工1 2 2 半双工1 2 3 全双工1 2 4 总结 1 3 数据通信的方式1 3 1 同
  • STM32 CAN总线说明

    简介 xff1a CAN是Controller Area Network 的缩写 xff08 以下称为CAN xff09 xff0c 是ISO国际标准化的串行通信协议 由德国电气商博世公司在1986年率先提出 此后 xff0c CAN通过I
  • ubuntu 使用虚拟can 与 socketCAN使用

    原文链接 xff1a https blog csdn net xiandang8023 article details 127990159 创建虚拟CAN接口 在Linux上能使用虚拟CAN接口之前 xff0c 需要在终端执行以下三个步骤
  • Python 使用can模块(记录稿)

    直接安装 xff1a pip install python can 如果报这个错 更新一下pip pip3 install upgrade pip 或者是 pip install upgrade pip 再安装wrapt pip insta
  • CAN总线 标准帧/扩展帧滤波器设置

    在CAN协议里 xff0c 报文的标识符不代表节点的地址 xff0c 而是跟报文的内容相关的 因此 xff0c 发送者以广播的形式把报文发送给所有的接收者 节点在接收报文时 根据标识符 CAN ID 的值决定软件是否需要该报文 xff1b
  • CAN通信讲解(2)——数据帧和遥控帧

    本文注意参考了 CAN入门书 xff0c 源于此书图片不再特殊标注 目录 2 1 帧的种类2 2 数据帧和遥控帧2 3 仲裁过程2 4 各段详解2 5 小结 数据帧和遥控帧格式类似 xff0c 放在一起串讲 2 1 帧的种类 CAN协议帧分
  • CAN通信讲解(3)——错误据帧

    本文注意参考了 CAN入门书 xff0c 源于此书图片不再特殊标注 目录 3 1 总线错误的种类3 1 1 位错误3 1 2 ACK错误3 1 3 填充错误3 1 4 CRC错误3 1 5 格式错误 3 2 错误帧结构3 3 错误状态3 3
  • 【车载开发系列】CAN总线帧种类介绍篇

    车载开发系列 CAN总线帧种类介绍篇 CAN总线帧种类介绍篇 车载开发系列 CAN总线帧种类介绍篇一 CAN总线当中帧的种类二 五种类型帧用途说明三 数据帧的组成1 xff09 帧起始2 xff09 仲裁段3 xff09 控制段4 xff0
  • CAN报文解析—案例

    1 CAN报文定义 CAN报文是指发送单元向接受单元传送数据的帧 我们通常所说的CAN报文是指在CAN线 xff08 内部CAN 整车CAN 充电CAN xff09 上利用ECU和CAN卡接收到的十六进制报文 2 CAN协议中CAN报文种类
  • CAN总线电平(隐性与显性)

    nbsp nbsp nbsp nbsp CAN2 0B规范定义了两种互补的逻辑数值 显性和隐性 同时传送显性和隐性位时 总线呈现显性状态 同时传送显性状态位时 总线呈现显性状态 同时传送隐性状态位时 总线呈现隐性状态 显性数值表示逻辑0 隐
  • roscore报错: ‘ascii’ codec can’t decode byte 0xe6 in position 13: ordinal not in range(128)

    零 问题描述 使用ROS是 xff0c 执行roscore报一下错误 xff1a ascii codec can t decode byte 0xe6 in position 13 ordinal not in range 128 The
  • CAN报文格式简析

    Date xff1a 2022 5 11 Author xff1a MJQ Meta xff1a CAN CAN基础篇 CAN报文格式简析 1 Motornala和Intel格式 建议直接看图 xff0c 小白也能秒懂 xff01 注 xf
  • IMX6ULL与STM32F103的CAN通信实现

    IMX6ULL与STM32F103的CAN通信实现 硬件连接驱动层实现IMX6ULLSTM32F103ZET6 应用层实现IMX6ULLSTM32F103ZET6 结果 在上一篇博文中 xff0c 我们利用USBCAN设备及其上位机软件 x
  • Nvidia jetson agx xavier can通讯失败,修改时钟源pllaon

    一 问题详情 在调试Xavier can的过程中 xff0c can通信始终有问题 xff0c 收发都会报错 后来发现时钟源导致波特率不匹配 xff0c 所以不能通信 二 修改时钟源 在虚拟机使用官方sdkmanager xff0c 下载安
  • RT-thread 中CAN总线的应用

    准备 xff1a RT thread Studio 2 2 5 CubeMX 6 6 1 rt thread驱动包 4 0 3 1 新建项目 2 打开CubeMX Settings xff0c 设置CAN 找到CAN1 xff0c 并勾选激
  • QT5使用PCAN读取CAN数据

    文章目录 QT5使用PCAN读取CAN数据 CAN Bus example 重点讲解 pro文件 创建CAN bus Device 参数设置 接收报文 PCAN支持的QCanBusDevice ConfigurationKey类型 QT5使
  • STM32F042 CAN使用例子

    代码如下 include mycan h CAN初始化 tsjw 重新同步跳跃时间单元 范围 1 3 CAN SJW 1tq CAN SJW 2tq CAN SJW 3tq CAN SJW 4tq tbs2 时间段2的时间单元 范围 1 8
  • CAN接口芯片MCP2515的波特率和滤波器设置问题

    配置波特率代码 MCP2515ByteWrite CNF1 3 MCP2515ByteWrite CNF2 0x80 PHSEG1 3TQ PRSEG 1TQ MCP2515ByteWrite CNF3 PHSEG2 3TQ 功能 波特率的
  • STMCubeMX5.10版本CAN使用loopback模式自测

    使用芯片 STM32F103C8T6 cube软件版本 5 10 软件包版本为 STM32Cube FW F1 V1 7 0 一 配置时钟为使用外部晶振 并配置为72M 二 使能 can 并配置参数 设置can波特率为500k 并设置为lo
  • CAN资料整理(三):CAN的位时间、同步、位定时

    目录 一 位时间 二 同步 1 硬同步 2 重新同步 三 位定时 1 传播段延迟时间的确定 2 位定时参数确定 由于CAN属于异步通讯 没有时钟信号线 连接在同一个总线网络中的各个节点会像串口异步通讯那样 节点间会使用约定好的波特率进行通讯

随机推荐

  • MissionPlanner-开发历程-1

    1 Mission Planner 简介 Mission Planner是使用C 开发的开源飞控地面站软件 xff0c 使用MavLink通信协议 xff0c 浏览官方网站 Mission Planner是ArduPilot开源自动驾驶项目
  • 关于SpringSecurity配置中的一些问题解决(登录页面不跳转,报错302)

    1 为何在自定义的登录页面中登录完页面不跳转 xff1f 主要是SpringSecurity在校验csrf跨域时候 xff0c 会传一个csrf相关的随机token值 xff01 在SpringSecurity 4 之后 xff0c 其cs
  • DAY2. jetson nx gpio

    更新 扩展接口说明 xff0c 官方说明文档 xff1a Jetson Xavier NX DevKit Carrier Board Specification v1 0 pdf 分割线 参照这个文档 xff1a https www jet
  • 使用kinect2进行目标跟踪-ROS平台

    之前闲得无聊 xff0c 在ROS平台上调用Kinect摄像头进行目标跟踪检测 首先 xff0c 要在ubuntu下安装好Kinect2和ROS的接口 xff0c 参考http www mamicode com info detail 15
  • 在ROS中使用opencv-灰度处理

    没什么好说的 xff0c 直接看代码理解吧 xff1a include lt ros ros h gt ros标准库头文件 include lt iostream gt C 43 43 标准输入输出库 cv bridge中包含CvBridg
  • GCC的编译流程分为了四个步骤:

    GCC的编译流程分为了四个步骤 1 预处理 xff0c 生成预编译文件 xff08 文件 xff09 xff1a Gcc E hello c o hello i 2 编译 xff0c 生成汇编代码 xff08 s文件 xff09 xff1a
  • Android自定义控件基础

    采用自定义控件解决重复编写代码的问题 总共分三步 1 写好一个自定义模板布局 title XML span class hljs pi lt xml version 61 34 1 0 34 encoding 61 34 utf 8 34
  • String,StringBuffer,StringBuilder的区别(优缺点)

    最近学习到StringBuffer xff0c 心中有好些疑问 xff0c 搜索了一些关于String xff0c StringBuffer xff0c StringBuilder的东西 xff0c 现在整理一下 关于这三个类在字符串处理中
  • nginx+tomcat重复请求

    好久不写技术文章了 xff0c 越发的觉得单纯的讲技术没啥意思 怪不得知乎越来越火 xff0c 因为大家都喜欢看故事 xff0c 不喜欢硬生生的技术文章 笔者今天就来就给大家讲故事 最近网站压力突然增大 xff0c 把带宽都占满了 xff0
  • Android真机获得root权限修改文件权限

    好久没有更新博客了 xff0c 最近因为重装了系统导致所有的配置都不存在了 xff0c 当要修改Android权限去查看数据库文件的时候 xff0c 发现又忘记了怎么去获得修改权限 xff08 其实第一次弄这个内容的时候就费了很大的劲 xf
  • Android完全自定义控件并且实现监听事件

    本篇文章带来Android的完全自定义控件 载体是自定义一个开关的控件 xff0c 并且能够响应事件 xff0c 首先我们先创一个项目 xff0c 名字就叫ToggleView xff0c 修改MainActivity span class
  • 2016年总结,辛勤劳作的一年

    直到刚才听到门外的爆竹声 才意识到这一年 xff0c 快结束了 今天是11月26号 xff0c 其实离2017年还有一段距离 xff0c 趁着今天有空 xff0c 给自己写一篇文章 其实 xff0c 我是很不想说 xff0c 你好 xff0
  • Android屏幕适配实战

    说一下在项目里面遇到的一个问题 xff0c 和解决思路 需求来源于运营小姐姐 xff0c 她们希望在App的搜索关键字前面加上图片醒目效果图如下 布局很简单左边一个SimpleDraweeView xff0c 右边一个TextView xf
  • 定制阿里代码检查,实现你自己的代码规范检查

    几个月前 xff0c 阿里开源了p3c xff0c 我也接到了老大交给我的技术改造 是这样的 xff0c app是老项目了 xff0c 半年前接入了ARouter xff0c 由于Activity繁多 xff0c 就没有去全局支持ARout
  • Fresco内部诟病引起的初次从网络加载PNG图片失败

    如题描述 xff0c 这个问题在项目中存在已久 xff0c 今天由于自己的功能在首页 xff0c 初次启动的体验极其糟糕 xff0c 所以硬下头皮把这个问题解决了 先来描述一下怎么样一个差的体验吧 就是当我第一次加载网络PNG xff08
  • 不用第三方写一个简单的推流软件

    https github com iOSSinger SGLivingPublisher 不用第三方写一个简单的推流软件 6 commits 1 branch 0 releases 1 contributor Objective C 100
  • 【安防百科】视频监控中常用的分辨率

    http www 360doc com content 17 0317 10 33642774 637585058 shtml 在上一节跟大家谈了摄像机的线数 xff0c 线 是模拟时代的产物 xff0c 当今世界早已是数字化的世界 xff
  • ubuntu20.04下的录屏与视频剪辑软件

    ubuntu20 04下的录屏与视频剪辑 一 录屏软件SimpleScreenRecorder安装与使用1 安装2 设置录制窗口参数3 开始录制 二 视频剪辑软件kdenlive的安装1 安装2 启动 一 录屏软件SimpleScreenR
  • 八、Gazebo 学习笔记:附加网格(Mesh)

    官网教程链接 xff1a http gazebosim org tutorials tut 61 attach meshes 概述 先决条件 xff1a 创建一个移动机器人 网格可以在视觉上和传感器上增加模型的真实感 本教程演示了用户如何使
  • Can I become a good programmer without math and algorithms knowledge?

    Knowledge of algorithms has very little to do with programming skill As some random dude on the internet once said 34 Wh