6 个月学会编码——产品经理的旅程
6 个月学会编码——产品经理的旅程
原文:https://medium.com/hackernoon/learning-to-code-in-6-months-a-product-managers-journey-b5d09b856f72

Photo by Christopher Gower
PS:我有一个新的 Youtube 频道,在那里我不用代码就能制作东西。可以在这里查看—【https://tinyurl.com/ycvdpoqt】
在做了五年的产品经理后,我想学习如何自己开发新产品来实现一些想法。作为一名项目经理,我对制作线框和做一些设计相当满意,但我从来不需要建造它。然而,在过去的一年里,我的一些来自计算机科学背景的同行提到,知道如何编码真的很有帮助,特别是作为一名项目经理。我最初拿起一本 Javascript 书(出于好奇),开始花几个小时自学如何编码,目标是学习全栈开发。
我练习了许多 codewars 挑战,然后参加了 Hack Reactor (一个训练营),在那里我每周花 80 个小时学习全栈开发。这是一次疯狂的旅程,历时六个月。以下是我一路走来学到的东西:
- 工程师应该得到很多信任:我一直很尊重软件工程师,但 6 个月的编码工作让我更加尊重他们。产品中没有“小变化”,制作漂亮的产品需要大量的工作。此外,大规模生产产品需要大量的工作。我参与的一个项目是为一个 Twitter 克隆体构建一个微服务,同时处理超过 1000 万个数据点(这只是 Twitter 所面临的数据量的一小部分)。针对读取速度、写入速度进行优化,以及理解系统设计和架构,即使是在这种规模上也是非常困难的,花费的时间比我预期的要长得多。
任何教你“如何在 4 周内建立 twitter”的人都是在过度简化复杂的问题。你或许可以做出原型,但是我们日常使用和喜爱的产品是复杂的。
2。每个人都可以从学习如何从技术上说话中获益:
不要把编码仅仅看作一种技能,而是一种语言。无论你的专业是什么,如果你从事技术工作,能够用技术说话是很重要的。
深入理解什么是服务器,前端如何与后端交互,什么是 API,以及我们日常工作中使用的构建模块等元素可以让您更好地理解构建软件需要什么。这肯定会在我成为产品经理之前就帮助我与工程师沟通。随着我们周围的一切都变得越来越技术化,即使你最终没有全职编码,技术化的说话能力也是非常有益的。
3。尝试一种语言后不要放弃学习如何编码:我在几年前涉足编码,一直认为它不适合我。我曾经在艰难地学过 Python,并不喜欢它,所以我没有进一步追求编程的欲望(尽管这本书真的很好,我也推荐它)。我在高中的时候也上过 C 语言的课,当时我觉得 C 语言并不直观。但是当我开始学习 JavaScript 并从一开始就爱上它时,我感到很惊讶。整体美感和在游戏机上尝试东西并看到结果的能力让我奇怪地上瘾。
4。学习编码增加了学习其他技术技能的亲和力。技术变化如此之快,以至于大多数新的进步在几年后都会变得无关紧要。这意味着我们必须快速适应新技术。学习如何编码让我对学习新的技术知识感到很舒服。在开始这次旅程之前,我总是有点害怕。例如,在过去的六个月里,我学习了 web 开发,但对我来说,做一个移动应用程序的原型是令人兴奋的。现在,我的恐惧消失了,取而代之的是当我想学习新技术时的好奇心。
5。调试和逻辑一样重要:过去几个月最惊人的成果之一是观察我改进的解决问题的方法。当事情没有按预期运行时,我学会了系统地解决问题。对我来说,编程的逻辑非常自然。但是没有自然到来的是调试。当事情没有按照我的逻辑运行时,耐着性子去理解为什么对我来说并不容易。最初,我有很快放弃的倾向,要求一个同行迅速看一看,有一个迷你恐慌发作或只是责怪编程环境。随着时间的推移,我学会了冷静地独立解决问题和逻辑部分一样重要(如果不是更重要的话)。理解为什么输出与预期不同、解构问题并诊断问题的能力是编码的关键。学习这些让我成为一个更好的问题解决者。
6。学习编码没有一个“正确”的方法:网上有大量免费的资料,也没有一个网站教你如何做好编码。例如,如果你在自由代码营上找不到一个概念,你可以在代码学校、树屋、 Udemy 、 Udacity 、 Frontend masters 或 Youtube 上查找——这个列表是无穷无尽的,而且还在不断增加。这就是为什么很难建立一个纯内容的公司来教授技能。对一个人来说是好的解释对另一个人来说不一定是最好的解释。此外,免费内容的数量惊人。
学习是个人的,所以找到你喜欢的东西和哪些资源最适合你很重要。
没有一个正确的网站订阅-尝试一堆,大多数带有 30 天免费试用。我参加了一次训练营,因为我觉得我会从这种结构中受益,这是一次奇妙的经历——也不是每个人都需要。我还经历的一件事是,学习给我们编码是一个非线性的过程。这不像你只遵循一个网站上的课程——你在不断强化来自不同地方的概念。没有比这更好的自学时机了,因为材料很容易获取。
7。和其他事情一样,擅长编程没有捷径:编程六个月了,还是个初学者。即使你连续编码 30 天,你也不太可能在一个月内成为大师。这段时间可能只能给你一个粗略的介绍。在过去的几个月里,我开始意识到,有很多我不知道的东西,比我开始时想象的要多。学习编码本身并不难,但是很多人倾向于把成为一个真正优秀的程序员所需要的东西看得过于简单,而实际上这需要大量的工作。
在没有真正了解你在做什么和为什么做的基础知识的情况下,开发一个“应用程序”比以往任何时候都容易。努力真正理解概念,投资于数据结构和算法,这将使编程变得更好。几年前,我遵循一个这样的程序,在 30 天内构建了一个 rails 应用程序,但什么也没学到——它实际上只是告诉什么代码放在哪里。不要走那条路。
8。学习编码并不意味着你必须成为一名软件工程师:我不认为我会仅仅是一名软件工程师。我还有其他我喜欢并想应用的优势。我依然热爱做产品经理;我依然热爱公司运营;我喜欢和设计师一起工作,和用户交谈;现在我也喜欢编码。无论我下一步选择做什么,学习编码都是一项资产。
9。学习基础知识的资源非常丰富,但是提高基础知识的资源却很少:有大量的基础编码资源,但是能够让你更上一层楼的资源却很少。
当我写代码的时候,我有这样的问题,其他人也使用同样多的 for 循环吗?我写的代码好吗?我该如何改进?谷歌的人会如何处理这个问题?你如何设计系统架构?如何更好地进行系统设计?
参加训练营的一个好处是能够向经历相同旅程的同龄人学习和交流。我的假设是,提高的最佳方式是向公司内部的同事学习。在工作场所之外,没有足够的明确资源来了解这一点。我发现的问题不是如何开始学习编码,而是了解你现在在哪里,如何变得更好。
就我个人而言,我发现积极寻求比你优秀的人的反馈非常有帮助。另一个有用的技巧是阅读开源项目的代码,以获取好的实践,并尝试为它们做出贡献。另外,像 Thinkster 这样的资源对于度过初级阶段也很有帮助。
10。社群有帮助,但不能是唯一的资源:找到一个社群,哪怕只是一个人,如果你是编码的话,也是极其有帮助的。Hack Reactor 最棒的地方之一就是社区。学习如何通过结对编程向他人表达思想和技术观点是令人惊奇的。看别人怎么解决问题,让你成为更好的程序员。它可以小到看到一些真正有用的键盘快捷键,以了解人们如何以不同的方式处理同一件事情。我找不到一个可以复制同样经历的在线社区。原因有很多,但那是另一篇文章。同时,你不能仅仅通过结对编程来学习。成为社区的一员增加了你的个人经历和工作。
11。招聘仍然从根本上被打破:仍然都是为了赢得同样的游戏:简历、面试、白板,以及突破算法和数据结构的挑战。要想被聘为软件工程师,你通常不得不玩一个不同于作为一名软件工程师真正需要的游戏。如果我想找一份软件工程师的工作,我可以想象这个过程会有多平凡。在大多数情况下,招聘过程是一维的,没有考虑到许多应该测试的东西。和那个人一起工作感觉如何?例如,他们是否能让周围的人发挥出最好的一面,而这实际上与一个人对数据结构的擅长程度无关)?b)他们是否坚持解决问题?他们能学得快吗?他们能交流吗?这些是招聘经理经常忽略的许多因素中的几个。尽管自学在不断增加,但招聘仍然着眼于一套传统的指标。对于大多数工作来说,CS 学位是首选或必需的,因为他们还没有找到更准确的属性集。