点击围观!腾讯 TAPD 助力金融行业研发提效、敏捷转型最佳实践! 了解详情
写点什么

从小朋友的一道数学题聊聊职业程序员

  • 2019-09-20
  • 本文字数:1544 字

    阅读完需:约 5 分钟

从小朋友的一道数学题聊聊职业程序员

之前辅导小朋友做数学作业时的一道题,从这道题和小朋友聊到了串行、并行,聊到了电脑的结构,聊到了业余程序员和职业程序员的巨大不同。


题目如下:

“阿姨周末在家干家务,收拾房间用时 10 分,用扫地机器人扫地用时 15 分,擦桌子用时 4 分,用洗衣机洗衣服用时 25 分,晾衣服用时 4 分,请问阿姨做完这些事最少需要多少分?”


这题的核心显然是哪些地方能尽量并行化,从而提高效率,人和电脑很大的不同是,人只有一个大脑,电脑则可以认为多核 CPU 形成了多个大脑,使得电脑能够在同一时刻做多件事,不过尽管电脑拥有多个大脑,但它同时还有其他很多地方是共享的,例如内存、磁盘、网卡等,当多个大脑都要同时去操作共享的地方的时候,就会导致串行化,这就对程序员怎么写高效的并行化代码带来了巨大挑战,和小朋友说,一个职业的程序员可以让拥有八个大脑的电脑几乎同时在干八件事,但一个普通的程序员有可能会导致有八个大脑的电脑同时只能干一件事,数学也是我认为的一个程序员最重要的基础,数学高度训练了一个人解问题的思维能力(包括了举一反三等抽象能力),而这也是一切程序的基础,所以我招学生的时候都会特别注意数学成绩。



从这个拓展开点来讲下职业程序员和业余程序员的区别,我觉得要成为一个业余程序员的门槛其实是挺低的。


业余程序员通常就是碰到一个实际的问题或需求,形成一个解决问题或实现需求的思路,然后把这个思路翻译成代码。


但作为职业程序员,除了要做这些外,更重要的是还得考虑以下问题。


  1. Robust

  2. 这点我觉得是职业程序员和业余程序员最大的区别,怎么让一个程序在各种情况下都能稳定的运转,这个其实是非常不容易的,写个玩玩的东西不难,要写一个能在生产级 robust 运转的东西就非常难了。

  3. 举个例子,家里的空调很多现在还不是很智能,尤其是在温控方面,现在通过温度感应器,红外智能遥控设备,可以比较好的做到智能温控,但这类程序一般写的不咋样,如果自己通过这些设备的 API 写一个其实不复杂,但如果想下怎么让这段程序能 robust 地运行(例如如果程序运行的机器挂了,温度感应器出问题了,红外遥控的指令是不是真生效了等等),就会发现挺复杂的,毕竟谁也不想这程序失效了,大半夜热醒或冷醒。

  4. 在之前的程序员的成长路线Remix文章里也写到过,能写出防范异常代码的程序员绝对是 NB 的。

  5. 要做到代码的 Robust,会要求在设计和写代码的时候对异常状况有充分的考虑,同时对代码尤其是使用到的 API 需要深刻理解,经验在这个时候也会发挥一些作用。

  6. 高效

  7. 这个主要就类似前面那个题目的例子,职业程序员应该做到尽可能充分发挥运行程序的机器的能力,这通常会需要对代码运行的机制,怎么写高效并行化的代码要有充分的掌握。

  8. 可维护性

  9. 怎么知道自己写的代码运行的状况,有问题时怎么通过有效的异常信息来处理问题,代码未来的可扩展性,这些要做到其实也都不容易。


所以说,一个程序员的水平通过代码是最容易反应的,可能短短的几行代码,就能看出巨大的差距,当然,其实职业的程序员在上面的几点上彼此也是会出现很大的差距,成为业余程序员不难,要做到上面三点,成为真正的一个写的代码可供生产级业务使用的职业程序员,光要学习的东西就已经不是一个数量级了,同时还需要大量的训练(1 万小时理论在程序员行当我觉得也是挺适用的,尽管不代表有了 1 万小时就一定是个优秀的程序员),感兴趣的可以根据自己的需要去极客时间挑选一些专栏学习,里面很多作者还是很赞的。


作者简介:


林昊,2007 年加入阿里巴巴,12 年一直从事基础技术架构领域工作,参与了淘宝从单机到分布式的技术架构改造,主导设计和落地了阿里的异地多活,统一调度的技术架构,打造了 HSF,T4,Sigma 等产品。


本文转载自公众号 HelloJava(ID:hellojavacases)。


原文链接:


https://mp.weixin.qq.com/s/7FASc0MNydFJVNMit0NRPA


2019-09-20 08:003206

评论

发布
暂无评论
发现更多内容

数据分析师被当作取数机怎么办?

雨果

数据中台 数据分析师

深度解析:智能合约DAPP(bsc)币安链系统项目开发解决方案

I8O28578624

聚焦六大典型应用场景,博云金融行业容器解决方案更新发布!

BoCloud博云

云计算 云原生 容器云

华为云确定性运维,为政务云平台稳定可靠运行保驾护航

华为云开发者联盟

云计算 华为云 政务云 企业号十月PK榜

数据培训机构的学习费用是多少

小谷哥

SAST + SCA: 结合使用安全升级

SEAL安全

SCA 安全测试 攻击 SAST 应用安全测试

使用Mask R-CNN模型实现人体关键节点标注

华为云开发者联盟

人工智能 华为云 mask 企业号十月 PK 榜

阿里内部最新发布的并发图册+JDK源码速成笔记,终于解脱束缚了

Geek_0c76c3

Java 源码 程序员 JVM 开发

2022年最新【Java经典面试800题】面试必备,查漏补缺;多线程+spring+JVM调优+分布式+redis+算法

Geek_0c76c3

Java 开源 程序员 架构 面试

32天高效突击:狂刷《Java权威面试指南(阿里版)》,offer拿到手软

Geek_0c76c3

Java 数据库 开源 程序员 架构

资源成本降低80%!Serverless云函数的弹性架构实践

Geek_2d6073

自制操作系统系列(三):加载其他文件执行

操作系统

全网首发“Java面试考点大全”,25+专题梳理:JVM+多线程+Spring全家桶+MySQL+Redis等

Geek_0c76c3

Java 数据库 开源 程序员 开发

前端技术培训后的职业规划

小谷哥

前端培训怎么学习好就业?

小谷哥

流程引擎的架构设计

京东科技开发者

架构设计 报表 workflow BPM 流程引擎

带你认识JDK8中超nice的Native Memory Tracking

华为云开发者联盟

开发 华为云

数字化背景下,低代码发展的动力和阻力

SoFlu软件机器人

web丨nft元宇宙链游项目系统开发模式逻辑详细(成熟源码)

I8O28578624

web前端开发培训学习后的就业方向

小谷哥

PriorityQueue源码-成员变量解析

知识浅谈

Priority Queue 10月月更

以太坊质押时代到来,开发者机遇何在?

TinTinLand

区块链 以太坊 开发者 质押挖矿

分享一个好问题:企业为什么要区分数据中台和数据平台?

雨果

数据中台 大数据平台

量化与科技的相遇!亚马逊云科技揭开神秘的量化私募

Lily

单刷 3 届 Hackathon,朝着理想中的数据库出发丨TiDB Hackathon 选手访谈

PingCAP

TiDB

数据中台选型前必读:数据中台与大数据平台有什么区别

雨果

数据中台 大数据平台

国产分布式数据库发展趋势与难点

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库 企业号十月PK榜 企业号十月 PK 榜

java培训机构口碑排名哪家比较好?

小谷哥

从小朋友的一道数学题聊聊职业程序员_文化 & 方法_BlueDavy_InfoQ精选文章