来源:lucida (@peng_gong)

zh.lucida.me/blog/levels-on-learning-and-using-technologies/

关键字

技术,生活,反思。

关于

Bjarne Stroustrup在他的新书《A tour of C++》

里面举了一个旅行的例子来比喻初学编程语言:

…as an analogy, think of a short sightseeing tour of a city, such as Copenhagen or New York. In just a few hours, you are given a quick peek at the major attractions, told a few background stories, and usually given some suggestions what to see next…

…you do not know the city after such a tour. You do not understand all you have seen and heard. You do not know how to navigate the formal and informal rules that govern life in the city…

…to really know a city, you have to live in it, often for years.

简而言之,编程语言是City,而开发者则是Traveller——这是一个很有意思的比喻,在这篇文章里,我试图延续这个类比(Analogy)——把这个类比放大到初学,掌握,了解以至精通一门技术的层面。

不过需要注意:我自己并没有精通哪一门技术——所以这篇文章的内容是值得怀疑(susceptible)的,但它可以作为一个不错的参考。

0. Stranger(陌生人)

使用一项技术最初的层次就是听说过没用过——就像我们之中的大多数人都听过南极,听过北极,知道南极有企鹅,北极有北极熊,但是却从来没有去过南极或北极。

Stranger具有以下的特征:

  • 知道这项技术的名字。

  • 知道这项技术的一些术语。

  • 知道这项技术的一些关键人物的名字。

  • 了解少量技术的细节,但没有使用这项技术的实际经验。

以我本人和RoR来打个比方:

  • 知道RoR是Ruby on Rails。

  • 知道Rails,Gem和Rake的存在。

  • 知道DHH也知道松本行弘。

  • 看过The Ruby Programming Language,还使用一个基于RoR的博客框架Octopress写博客。

  • 但从来没有使用RoR去搭建网站。

所以我是一个RoR的Stranger。

对于新技术,绝大多数人都是Stranger——但是就我对国内技术社区的观察,相当数量的Stranger意识不到自己还是Stranger——认为知道一点术语一些人名就算了解一门技术,甚至把它写在简历上(Familiar with XXX)或是开始与别人进行讨论(当然都是毫无意义的讨论)。

1. Tourist(旅行者)

当开发者真正开始用一项技术作出了可以用的东西:

  • 面向用户的产品(End-User-Oriented Product),比如一个手机应用,或是一个浏览器插件。

  • 或是面向程序员的工具(Programmer-Oriented Tools),比如一个页面抓取框架,或一个简单的Parser Generator。

  • 注意教科书范例(Textbook examples)和Hello world不属于可以用的东西——这些只是Dead Code——被执行一两次,然后被遗忘。

这时这个开发者就进入到了Tourist阶段:

  • 了解这项技术的基本元素。

  • 使用这项技术做出了实用的产品或工具。

  • 了解对这项技术的部分细节。

根据的学习目的的不同,Tourist又可以分为Salesman和Sightseer。

1.1. Salesman(旅行商)

Salesman是具有明确目的的Tourist——他们学习技术的目标是为了完成某一项业务,就像旅行商去某地出差是为了卖商品而非观光一样。

绝大多数职业开发者在开发生涯中都会扮演Salesman这个角色——接到一个任务,涉及到某项不熟悉的技术,需要在限定时间内完成。

1.2. Sightseer(观光者)

和Salesman相反,Sightseer学习技术的目标是为了拓展视野,增加见识,而非完成某项特定业务。

具有主动学习精神的开发者在业余时会时常扮演Sightseer角色——找到自己认为有价值的新技术或是基础知识进行系统学习,从而拓宽视野,提高水平。

2. Resident(居住者)

如果一个旅行者在一个地方待了半年以上,那么他/她就会变得原来越像当地人。随着Tourist对某项技术的日益精进,他/她会逐渐演变成这项技术的Resident:

  • 熟悉这项技术的基本元素。

  • 熟悉这项技术的生态系统(Ecology):既包括开发工具(编辑器,命令行工具,集成开发环境等),也包括开发社区(讨论组,邮件列表等)。

  • 了解这项技术能做什么,不能做什么。

  • 了解这项技术有那些坑,如何绕过这些坑,以及识别这些坑带来的问题。

  • 对某些领域有深入的研究——但并不受限于特定领域。

  • 使用这项技术做出了有相当价值的产品或工具。

同Tourist一样,根据使用技术的目标不同,Resident可以分为Worker和Craftsman:

2.1. Worker(工人)

技术是Worker的谋生手段,一个优秀的Worker应具备以下特征:

  • 对于给定问题,知道如何给出经济有效的解决方案。

  • 以团队合作为主,了解团队合作的价值,能够推动团队项目健康前进。

  • 追求按时交付。

2.2. Craftsman(工匠)

同Worker不同,技术并非Craftsman的谋生手段,而是某种“副业”——用来提升声望,修炼开发水平。

一个优秀的Craftman往往具备以下特点:

  • 对于给定问题,知道如何给出优雅的解决方案。

  • 以单兵作战为主,主要靠个人推进项目,但也能进行一定程度的团队合作。

  • 追求极致美感。

3. Architect(架构者)

有想法且有能力的人在一个地方待久了都会有将这个地方变的更好的冲动——一种方式是从源头出发,推翻旧制度建立新社会,也就是革命;另一种方式则是保留现有的制度,对其进行温和但持续的改进,也就是改良。

技术也是如此,任何技术都跟不上开发者成长的脚步,当这种差距到达一定程度时,就会有卓越的开发者站出来,创造出新的技术,他们就是Architect:

  • 熟悉多项互相关联的技术,并了解他们的优势和不足。

  • 具备强大的领导能力,深厚的基础和大量实际开发经验。

  • 能够带动整个技术的生态系统发展。

  • 好吧,我编不下去了(尼玛我要都知道我还至于是IT苦屌么 –_-)

如果你看过Matrix 2: Reloaded

就会知道Architect这个词放在这里再好不过。

根据目标不同,Architect分为Reformist和Revolutionist。

3.1. Reformist(改良者)

改良者的目标:把现有技术变的更好。(Makes existing technology better)

例如:

  • GoF总结Design Pattern。

  • John Resig创造jQuery。

  • Anders Hejlsberg为C#引入LINQ。

3.2. Revolutionist(革命者)

革命者的目标:用更好的技术取代现有技术。(Replaces existing technology with better one)

例如:

  • Alan Kay把细胞的概念引入软件开发]进而创造出OOP的核心概念。

  • Don Knuth对计算机算法(TAOCP)以及计算机排版(TEX)的贡献。

  • iPhone于2010年之前的任何手机(iPhone4除外)。

小结

这篇文章利用A Tour of C++里的隐喻,把学习/使用技术分成了四个层次七个头衔:Stranger,Tourist(Salesman,Sightseer),Resident(Worker,Craftsman),Architect(Reformist,Revolutionist),然后给出了各个头衔所应具备的特征和能力。

关于同类文章

之前也有类似的文章,例如程序员的十层境界和开发者的八种境界

这些文章的共同点:

  • 看似很牛逼但回想一下啥都没说。

  • 不会给人带来什么价值。

  • 没有一个鉴别的标准。

  • 没有指导性,也没有使用价值。

本文的应用场景

考察状态

以我自己对编程语言的掌握为例:

  • C/C++: Stranger.

  • Python: Craftsman.

  • Java: Worker.

  • C#: Craftsman.

  • JavaScript: Sightseer.

  • Scheme: Sightseer

将上面的列表转置:

  • Stranger: C/C++

  • Sightseer: JavaScript, Scheme

  • Worker: Java

  • Craftsman: C#, Python

结合这些头衔的定义,一目了然。

制定计划

运用本文的词汇,可以进行非常精炼的计划制定:

  • 例如 Make a thoroughly sightseeing of C++;

  • 或是 Become a proficient worker on IntelliJ;

  • 抑或 Take a short tour of Sublime Text。

以上。

——The  End——

往期精彩回顾

并发编程的艺术01-面试中被问到并发知识答不上来?

并发编程的艺术02-过滤锁算法

并发编程的艺术03-Bakery互斥算法

并发编程的艺术04-TAS自旋锁

并发编程的艺术05-队列自旋锁

并发编程的艺术06-复合&层次自旋锁

并发编程的艺术07-非阻塞同步演进 并发编程的艺术08-并发队列与ABA问题

长按识别

你点的每个在看,我都认真当成了喜欢

本文分享自微信公众号 - 黑帽子技术(SNJYYNJY2020)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

学习和使用技术的4种层次相关推荐

  1. 如何阅读书籍 学习、使用技术的四种层次

    如何阅读书籍 摘要 这篇文章从如何阅读书籍出发,简单讨论了如何选择书籍.是否阅读原版和阅读数量这几个常见问题,然后自己的阅读问题进行了分析和总结. 注意 "如何阅读"指" ...

  2. MySQL主从原理,基于快速学习一门技术的3种方式!

    根据经验,想要快速学习一门技术有3种方式. 第一种方式是通过代码来理解它的实现,反推它的逻辑. 这种方式的难度很大,而且起点相对高,能够沉浸其中的人非常少,过程相对来说是苦闷的,但如果能够沉下心来看代 ...

  3. NLP多任务学习:一种层次增长的神经网络结构 | PaperDaily #16

    在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考. 在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果. 点击本文底部的「阅读原文」即刻加入社区 ...

  4. 计算机辅助的临床会谈,e医生学习日记24-临床心理学三种研究技术

    e医生学习日记24-临床心理学三种研究技术 (2006-05-12 06:54:59) 1.访谈法:是研究者通过与研究对象的交谈来收集有关对方心理特征与行为的数据资料的研究方法.特点是由研究者(访谈者 ...

  5. 复用和多址,手画一张图带你学习五种复用技术和四种多址技术及其区别

    很多时候我们经常碰到这些名词,频分复用.频分多址,时分复用.时分多址等等,我曾经就是被这些概念给搞混了,所以特地花了点时间来整理出下面的笔记,如下图.下面将会介绍五种复用技术和四种多址技术,然后他们之 ...

  6. 基于小样本学习的图像分类技术综述

    基于小样本学习的图像分类技术综述 人工智能技术与咨询 昨天 本文来自<自动化学报>,作者李颖等 关注微信公众号:人工智能技术与咨询.了解更多咨询! 图像分类是一个经典的研究课题, 典型的图 ...

  7. 学习C++开发技术,常见误解有哪些?

    学习C++你是否会有以下几点误解? 1."要理解C++,你必须先学习C" 2."C++是一门面向对象的语言" 3."为了软件可靠性,你需要垃圾回收&q ...

  8. 01【活动】如何系统的学习一门it技术

    [活动]如何系统的学习一门it技术 本系列文章归档在CSDN平台正文活动中的相关经验之谈 目录 [活动]如何系统的学习一门it技术 1. OOP技术 2. 什么是懂技术 3. 学习前的准备工作 4. ...

  9. 个人学习笔记 ——【技术美术百人计划】图形 2.1 色彩空间介绍

    个人学习笔记 --[技术美术百人计划]图形 2.1 色彩空间介绍 图形 2.1 色彩空间介绍 个人学习笔记 --[技术美术百人计划]图形 2.1 色彩空间介绍 图形 2.1 色彩空间介绍 一.色彩发送 ...

  10. 深度学习传感器融合技术在自动驾驶汽车感知与定位中的应用研究进展

    论文研读--Deep Learning Sensor Fusion for Autonomous Vehicle Perception and Localization: A Review 深度学习传 ...

最新文章

  1. 【系统分析与设计】软件开发模式之敏捷开发(Scrum)分析
  2. C++ Primer 5th笔记(chap 16 模板和泛型编程)重载与模板
  3. linux字符设备开发
  4. jenkins集成sonar
  5. 模板引擎工作原理_zuma致:新手SEO须知搜索引擎工作原理
  6. zookeeper 客户端 zkCli.sh 的使用 查看节点
  7. 基于STM32F103的智能循迹小车(舵机加双电机加灰度传感器的方案)
  8. html js 邮箱格式,email 格式_JavaScript验证Email邮箱格式的三种方法
  9. 固态硬盘安装linux系统教程视频,固态硬盘 能安装linux系统吗
  10. 计算某一天是星期几(C语言,可运行)
  11. 蔡康永:我要的三国就是威力无双。0氪玩家玩了两个礼拜后
  12. 技术分享 | 年终总结
  13. Apple?apple!
  14. innobackupex全量恢复
  15. 【opencv】二维面找角点/关键点 实现
  16. openstack基准测试项目Rally介绍
  17. int3断点指令的原理和示例
  18. 正则表达式与自动机基础 NFA 驱动程序 手写 NFA 自动机
  19. 【AI算法】数据分析
  20. C语言 struct <结构体类型名> 结构体变量名

热门文章

  1. html蔚蓝网注册页面,如何在网站中添加手机短信验证码注册功能?
  2. SAS用proc means和proc univariate求数据的样本均值、中位数、四分位数、样本方差、极差、变异系数、二阶、三阶和四阶中心矩、偏度、峰度、标准差和对数据进行正态性检验
  3. 解决模拟人生3(SIM 3)闪退问题
  4. 计算机软件网络工程师考试试题,网络工程师考试试题及答案.doc
  5. C++机器学习经典资料
  6. 滴滴估值630亿美元开启新一轮融资,2021年前上市;索信达新三板退市后二次“流血”冲击香港IPO;蜻蜓FM COO肖轶离职...
  7. mstar v56几路hdmi_TCL MStar常用升级方法图文教程
  8. matlab编程求卫星轨道长度,GPS卫星轨道计算及其MATLAB仿真.pdf
  9. 360 和 qq 之争
  10. 东方快车谋杀案java_2015年第13本(英文第9本):Murder on the Orient Express 东方快车谋杀案...