不懂编程也能成就一番科技事业
转载自:a16z.com 编者按:小程序项目的成功需要团队协作,特别是非技术岗位同事们的协作。非技术岗位的同事们如何通过增强「技术素养」提升团队整体协作水平,从而提升客户业务和服务水平?本文针对这个目标系统地展开介绍并提出诸多建设性、可操作的建议。
软件正在成为我们生活中的分量越来越大,但我们真的了解它是如何工作的吗?
我们可能是家里的技术专家,对智能手机或笔记本电脑了如指掌,但这只是表面现象。现实是,我们大多数人实际上并不了解我们使用的大多数技术在底层是如何工作的。如果你必须向我解释互联网的工作原理,你能做到吗?
显然,我们不需要了解我们使用的所有东西的工作原理,就像我们不需要知道为什么用小苏打水煮土豆会使它们在烤制时味道更好,或者为什么冰块会减少肿胀一样。但技术比这要实际得多,因为很多人都在销售软件的公司工作。而每个人都在使用软件的公司工作。
这些都是需要记住的重要事情,尽管我们经常听到我们如何处于软件工程的黄金时代,然而没有人能够以足够快的速度雇用软件开发人员。一个被低估的现实是,在初创企业和科技公司内部,大多数角色都不是技术性的。每个组织都雇用了营销人员、销售人员、招聘人员和管理人员,他们的工作描述不涉及任何有意义的计算机科学知识,甚至不涉及基本的 HTML,但他们的职业生涯和工作流程还是由软件主导的。
如果你符合这种描述,请问你自己:我是否了解我工作中使用的软件背后的基本概念,或者我的公司实际开发和销售的是什么东西?这些问题并不是修辞手法。掌握更多的技术知识将帮助你更好地与工程师合作,找出机会来自动化或改进你的工作流程,并把自己变成善用软件工具完成工作、驱动企业发展的一个奇才。简而言之,技术素养提供了一条路径,让你作为一个非工程师在一个由工程师主导的领域中脱颖而出。
技术素养并不意味着要学编程
人们对「技术」的看法是二元的——有懂编程的软件开发人员,也有不懂的其他所有人。但是,学习如何编程是一项艰巨的任务:你需要先持续投入数百甚至数千小时的宝贵时间去学习。此外,如果你想获得一个学位,甚至只是从一个训练营毕业,也需要相当大的资金和时间投入。虽然在某些方面,构建软件程序从未如此简单,但今天的开发人员需要了解比过去多得多的领域工具(例如,如何使用 npm 或 storybook)。
如果你不想成为一名软件工程师,那还有什么意义呢?如果这就是「技术」的含义,那么对大多数人来说,它是完全不可触及的。
这种对技术素养的二元看法在许多电影中被滑稽地歪曲着,并没有真实展现软件工程师的实际工作。在任何一部电影中,你都可以看到「编码员」做着这样的事情。
这段「代码」实际上是维基百科上的一个 SVG 文件,它基本上是用来表达一个图像(如矩形);换句话说,这不是你在现实生活中看到的软件工程师「代码」的东西。这部电影想要表达的意思很清楚:无论这些编码员在做什么,完全都是魔术,我们没有机会理解它,而且我们还不如一笔带过,因为没有人会注意到它。(摘自电影《社交网络》,它至少试图做到准确。)
正如你将看到的,事情比这更细微。技术性是一个频谱——它不是一成不变的——有很多不同的地方你可以解决。你不需要成为一个开发者来理解文件类型之间的差异,也不需要知道 SVG 是一种用于设计的图形格式。而且,如果你去过创业公司的办公室,你可能知道,开发人员不会在透明的全息屏幕上写代码。
你可以把它想象成就像演奏乐器一样。能够在吉他上弹出几个和弦和能够扯出一个粗糙的独奏之间有很大的区别。两者都很好,而效用则完全取决于你要完成的任务。技术素养也不例外。你不必学习如何编写代码,就可以从了解什么是代码以及如何编写代码中受益。
具备技术素养仅仅意味着你对技术工作的基本原理感到舒服,关键是你对你所从事的领域有更深入的了解。有用和实用的技术知识有两层。
- 基础。软件和硬件的基础知识。
- 什么是计算机?
- 什么是互联网?
- 什么是数据库?
- 领域。与你的工作相关的更深层次的知识。
- 我们正在开发、销售和使用什么产品?
- 它们是如何工作的?它们能解决什么问题?
- 我们的工程师是如何开发和使用它们?
- 你们团队的工具是如何工作的?
如果你读到这里,希望你能相信在技术知识谱系上有你的一席之地,而且你不需要成为一名开发人员,也可以成为一名了解基本知识的人。但是,具备技术知识的意义何在呢?对于初创企业和科技公司的人来说,有两个重要的意义——了解并与开发人员协作,并把自己培养成为工作所需的工具专家。
与软件工程师协作并了解他们的重要性
如果你在一家初创公司工作,你有可能需要与开发人员合作。这项工作可能是内部的——关于内部工具、集成、提供专业知识等——也可能是外部的——向开发者进行营销、销售和招聘。无论哪种方式,能够与他们沟通是一项非常有价值的技能。
根据我的经验,开发人员可能是一些最好奇、最善于思考、最有创造力的人。但远处观察,他们在最好的情况下会让人望而生畏,在最坏的情况下会让人害怕。开发人员的名声——不管是赢得的还是其它原因——都是一个具有高标准和特殊品味的强硬群体。但就像任何其他受众一样,这种看法的大部分源于他们的与众不同。了解什么是代码,它是如何工作的,以及开发人员每天都在做什么,将有助于打破这种障碍并建立合作关系。
对于某些角色来说,与开发人员一起工作是其工作内容的一部分。想象一下,你是一家消费类初创公司的产品经理,正在为一项重大的新功能发布而工作。你想了解为你的规格建立架构需要什么。这是两天的事还是20天的事?你如何解释和分配延迟的时间?在发布前调整一项用户体验会有多困难?在许多方面,产品管理是关于设定期望,如果不了解香肠是如何制作的,就很难做到这一点。
但开发者并不是唯一的内部利益相关者。想象一下,你是一家 B2B 创业公司的营销团队,该公司正在为开发者推出一个新的产品系列。你如何阐述该产品的有趣之处?你应该写什么样的内容让开发者觉得有趣?你应该在哪里发布和推广它?营销人员需要了解他们的受众,以创造和发布有吸引力的内容。
在这样的情况下——以及你可能已经想到的许多其他情况——了解开发者和他们所做的基本工作将使你走得更远。下面列举一些对常见岗位比较重要的技术知识。
产品
这一点很简单:产品经理的整个工作都是以与软件工程师的良好合作为前提的!如果不了解他们是如何工作的——以及他们的工作方式,那么他们的工作就不可能顺利。如果不了解他们是如何工作的——以及他们为开发你的规格而编写的代码的基本情况——你就会看到一个黑盒子。有效地确定功能工作的优先次序,保持严格的时间表,并使利益相关者保持一致,都是以了解你的开发人员正在做的工作为前提的。而作为一名开发者,你难道不愿意与一个花时间了解你的技术的人携手合作吗?
你不想与你的开发者发生协作摩擦,也不想过多地参与其中,那么肯定要取得一个平衡。但作为一般规则,对于产品经理来说,技术知识是没有商量余地的。
招聘
技术招聘被广泛认为是当今初创企业最令人沮丧的招聘瓶颈之一。招聘人员的任务是寻找合格的开发人员,了解哪些类型的角色与他们有关,并能够解释为什么某个特定的角色是一个令人信服和有趣的挑战。技术素养可以帮助招聘人员更快地确定强有力的候选人,明智地谈论内部工程组织,并阐明候选人将从事何种有趣的工程问题。
市场营销
十年前,很少有人认为开发者是值得推销的对象——他们根本没有购买力。今天,有数以百计的公司已经证明了这是错误的,其中许多面向开发者的公司已经上市。作为一个营销人员,开发人员是你不能忽视的受众。即使你的产品没有明确地以他们为中心,每个创业公司最终都需要建立一个开发者项目(见 Slack 和 Twitter )。如果没有技术知识,营销人员将被蒙在鼓里,不知道如何有效地与这个潜在的有利可图的受众交谈和接触。
销售
像营销人员一样,销售代表现在的任务是与越来越多的技术组织打交道。开发人员不喜欢被推销,这是出了名的,所以这个过程需要一种特殊的方法:注重不做作,快速实现价值,并允许开发人员自己使用产品。不言而喻,你需要了解典型的开发者工作流程——尤其是与你所销售的产品有关的工作流程——以及是什么让你公司的产品对这些技术受众具有吸引力。技术素养是能够在这领域明智地发表自己见解的必要条件。
工作中的技术素养:与工具打交道
了解并与开发人员合作只是拼图的一部分。软件正在成为所有团队运作方式中越来越大的一部分。十年来,销售部已经在 Salesforce 上建立了自己的支柱,同样的模式也越来越适用于其他团队。
不言而喻,你越是了解你的团队所依赖的软件,你就越是精通它。这已经很自然地发生了:规模足够大的团队通常会有一个「强大的用户」,他似乎知道 Salesforce、Lever 或你的团队运行的任何软件的来龙去脉。你想成为这个人。
科技公司的大多数职位都需要使用软件工具
虽然技术知识会帮助你了解这些工具以及它们在更广泛的生态系统中的位置,但工作并没有结束。要成为一个真正的超级用户需要花时间阅读文档,在网上寻找教程,并与你所关注的任何工具周围的社区接触。例如,Hubspot 有一个充满活力的论坛,用于询问产品问题和了解其他公司如何使用该工具。但对于所有这些,技术知识是基础。
在工具领域,还有一个技术知识可以帮助的领域:整合。你日常使用的工具与你公司堆栈的其他部分整合。Lever 的招聘信息可能会显示在你的营销网站上,而 Lever 则作为内容管理系统;Intercom 可能会从你的数据仓库中提取用户级数据。随着整合的进行,问题也随之而来。只要有基本的技术知识,再加上一点小技巧,你的提问角度就可以从
「这个招聘启事没有显示在网站上——工程部的人可以帮我吗?」
变为
「我检查了一下,看起来我们最近的 Netlify 构建失败了,因为有一个 Contentful 条目缺少一个标签。我把它归档以解决这个问题,但不管是谁创建的,当你有机会的时候,能不能解决这个问题?」
后者不需要知道如何编码——只需要对网站的工作方式和 CMS 的工作方式有一定的了解——但它可能意味着立即修复和几周内修复的区别。这类情况还有无数种,包括:
- 调试 Salesforce 中的数据和你的仓库中的数据之间的不匹配
- 在不需要工程人员帮助的情况下对你的营销网站进行复制修改
- 将数据从 Segment 发送到一个新的客户激活工具上
你的技术素养越高,你就会在公司的工具链的缝隙中发现更多这样的小机会——你的影响力也就越大。
最后,任何关于技术素养的讨论都需要考虑所谓的低代码和无代码工具的 「出现」。它们使非工程师能够比以往做得更多,比如建立登录页面、内部工具或数据管道。虽然这是一个较长的讨论的一部分,但在这些工具中构建真正的东西,通常需要与一些技术性的东西对接——无论是 API 端点还是简单的数据库——而具备技术知识往往意味着自给自足和被工程资源拖延的区别。
提高技术水平的一些建议
不幸的是,这是最难的部分。人们没有像他们希望的那样具备技术知识的主要原因之一是,这真的很难做到:没有训练营,没有学位,没有书,也没有一站式的商店,涵盖你在特定情况下可能需要知道的一切。学习软件的基础知识通常是由博客文章、YouTube 视频、咖啡聊天和 2011 年的幻灯片等奇怪的东西拼凑而成。
但是,有一个好消息! 如果你在创业公司或科技公司工作,你就处在一个通过良好的、经验老道的获得更多技术知识的最佳环境。你周围都是真正的开发者,你的工具使用的是真正的数据,而你的队友则被困在那些可以被有意义地改进的工作流程中。当边界案例和错误出现时,你就处于一个重要位置,用你的技术知识解决它们。
这里有几个提示,帮助你开始你的旅程。
制定一个计划
学习「吉他」很难,但用吉他学习一首歌要容易得多。同样,如果你试图学习关于软件的所有知识,你会很快被淹没(而且你可能已经被淹没了)。仍有一些基础知识是每个人都应该知道的——比如如何弹奏和弦——但神奇之处在于你如何应用它。
首先,看看你的公司和你的角色,以及你认为更多的技术可以给你带来优势的地方。早些时候,我们确定了技术素养可以提高你的表现的几个领域。
- 了解并与开发人员合作
- 成为你的工具链的专家
对于每一个领域,初创企业的员工和领导都应该思考它们与自己的特定职能之间的关系。如果你是一名营销人员,你会想专注于培养对开发者角色的复杂理解,以及深入研究特定的主题,如电子邮件交付能力或数据如何在系统之间移动。对你想学的东西要有针对性(或者至少要从学习开始)。要问的一个有用的问题是,「我在哪里因为不懂技术而吃了亏?」
找一个或两个软件工程师朋友
如果你在创业公司工作,你周围已经有很多人整天都在做你想学的东西:软件。如果你打对了牌,他们可以成为你技术扫盲路上的宝贵资源。如果你没有一个工程团队(或者如果你真的不喜欢他们),你可能有一两个朋友可以填补这个角色。
在这个舞台上,你要有备而来。用你事先想好的问题进行有条理的对话,比无目的的好奇心更能利用开发者的时间。试着把注意力集中在你最薄弱的领域,并提前做研究,这样你就不会把所有的学习负担放在别人身上。
考虑到你是一名客户经理,在一家销售 NoSQL 数据库(如 MongoDB )的创业公司工作。你对开发人员如何使用数据库了解得越多,你就会成为更好的卖家;但要求开发人员向你解释这整个知识图谱是一个注定要失败的要求。相反,提前做研究,并写下让你困惑的具体要点。「我正在阅读 SQL 和 NoSQL 之间的区别,我不明白的是你如何查询 NoSQL 数据库」对比「你能向我解释一下 NoSQL 吗?」要好得多。
当然,如果有人真的对你有帮助,请他们喝杯咖啡或其他什么东西吧!
善用搜索
这个建议在任何关于学习的文章中都可以找到。除了在特定的工具上加快速度之外,网络上没有多少地方有你可以直接阅读的资源;你需要做的就是抓紧时间。根据我的经验,解释技术概念的最佳内容在两个地方。
- YouTube。上面的确有很多垃圾,但它可以成为技术概念视觉解释的金矿。最有用的视频不一定是最漂亮或制作最好的。
- 公司特定的博客。这类博客比较难找,但一般来说,任何个人概念的最佳内容都来自于靠该概念赚钱的公司。我最喜欢的例子是 Duo Security 关于 SAML 的帖子,以及 Cloudflare 关于了解其公司的指南。
像任何事情一样,你需要完善你的搜索技能,并发展一种直觉,以确定一项内容是否值得你花时间。
考虑基础编程训练
我已经说过多次,你不需要学习如何编码就能成为技术人才。但它确实有帮助! 了解编程是如何工作的,什么是语言,以及像(软件)包和版本控制这样的基本模式将对你有全面的帮助。
- 你会对开发人员的实际工作有一个具体的了解
- 你将能够编写简单的脚本,并使用工具来自动化你的工作
- 你将会对开发人员今天使用的工具(React、Redux等)有一个第一视角的看法。
你不需要最终成为一名成熟的程序员,把它看作是探索性学习。
如果你只是想踏踏实实地学习,网络上有很多令人难以置信的免费资源。我最早是通过 Codecademy 的 Python 课程开始的。有人给我的一个有用的建议是,想一想你想建立或自动化的很酷的东西——也许是一个小费计算器或发送电子邮件的东西——然后试着专注于学习你需要开发的某个特定的工具。
寻找你所在领域的影响者和专家
一旦你建立了你的计划,并开始在网络上寻找有用的内容,你很可能会遇到一些在你的特定领域创造有用的东西的通常嫌疑人。在社交媒体上关注这些人,订阅他们的新闻简报,并查看他们的YouTube频道的更新。举几个例子。
- Benn Stancil 关于数据策略和工具的 Substack
- Corey Quinn关于AWS的通讯
- Vicki Boykis 关于技术和技术文化的通讯
- 我的「技术知识 Newsletter」,关于如何获得更多的技术素养
你可能不会理解你读到的所有内容,但多元化阅读是强大的,你会惊讶于你的进步有多快。
雇主/公司可以做点什么
我们已经谈了很多关于员工个人可以做的事情,但初创企业和科技公司的领导人也应该把技术素养视为一个紧迫的问题。如果你是一个雇主,请考虑如何通过以下计划帮助你的员工提高技术素养。
- 为继续学习、会议、书籍和在线课程提供教育津贴
- 弥合与工程的差距的公司活动,专注于扶持非技术团队
- 为员工提供专门的时间来学习编码基础知识和技术基础
- 为有兴趣的员工提供与公司工程师的帮扶计划,使他们能够尽快掌握内部基础设施和贡献。
给予员工资源和时间来提高他们的技术素养,从长远来看将为公司带来红利。你将建立一个比竞争对手更了解开发者和他们的工具集的团队——这个团队更有能力处理繁忙的创业经历中可能出现的任何曲线。