写点什么

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

2019 年 9 月 20 日

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

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


题目如下:

“阿姨周末在家干家务,收拾房间用时 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 年 9 月 20 日 08:001907

评论

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

架构师训练营 第 5 周作业

Lingjun

极客大学架构师训练营

深入理解编译优化之循环展开和粗化锁

程序那些事

JIT 编译优化 循环展开 粗化锁

Android架构组件-App架构指南,你还不收藏嘛

小吴选手

架构 架构师 架构总结 架构要素 P7架构师

简直了!顶级架构师分享心得,如何在项目中兼容多种数据库

犬来八荒

Java MySQL 数据库 面试

cms项目系列(一)——SSM框架搭建

程序员的时光

spring

游戏夜读 | 互动剧的黎明到了?

game1night

Go: 字符串和转换优化

陈思敏捷

go golang string 字符串

我是如何解决邮件焦虑的

vinkyqy

效率 职场 邮件

面试细节: i = i++和 i = ++i

Java小咖秀

JVM Java 面试 经验分享

锦囊篇|一文摸懂SharedPreferences和MMKV(二)

ClericYi

java架构-一些设计上的基本常识

猿灯塔

Java

高承实:区块链在新基建中的作用和未来发展

CECBC区块链专委会

新基建 政策扶持 技术特征 链上数据 产业场景

为什么我建议你读一读历史?

Phoenix

历史 中国历史

ARTS Week6

时之虫

ARTS 打卡计划

分布式缓存

Arthur

阿里技术官:这样带你学Spring全家桶,其实没你想的那么难

小吴选手

spring Spring Cloud Spring Boot

逆袭之路,普通二本的八年开发码农如何进阿里拿年薪百万

小谈

Java 面试

一个简单的技术选型心得

i风语

Java 架构

六月我在工作中蜕变,勤奋小人打架终于赢了

程序员小跃

效率工具 加班 沟通 复盘

编程核心能力之组合

顿晓

Java 学习 pipe

第四周

仪轩

18个Java8日期处理的实践,太有用了建议收藏

码哥小胖

MySQL SQL语法 sql查询

为什么建议项目中统一线程池类?

张挺

架构师训练营第4周总结

aoeiuvzcs

Week5命题作业

星河寒水

极客大学架构师训练营

程序员的晚餐 | 7 月 3 日 好久没做饭

清远

美食

Redis系列(五):你要的Redis集群搭建来了,实践与否你自己选!

z小赵

Java redis 分布式 高并发

农产品电商平台的S曲线分析

石云升

增长 S型曲线 破局点

计算机操作系统基础(十一)---线程同步之互斥量

书旅

php laravel 线程 操作系统 进程

Redis分布式锁课堂开课了!

小闫

redis Spring Cloud Redis项目

太牛 了!快码住!GitHub上标星75k!超牛的《Java面试突击版》

犬来八荒

Java git Linux 面试 Java 面试

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