期望与成为开发人员的现实

2015年10月左右,我开始对编程产生兴趣。

我从Python开始(因为在Coursera上学习Python的课程就是我在Google上搜索“如何学习编程”时出现的内容)。

我了解了诸如if / else语句,for / while循环,变量,函数等基本知识。

我想说的是我很开心,但这只是一个谎言。 我很喜欢挑战的想法 ,但是我感到自己没有做好准备,而我基本上只是在经历挑战。 这是我所谓的“驼峰”的开始,但后来更多。

我听说过有关训练训练营的内容以及作为Web开发人员的毕业生能赚多少钱,而且我还意识到,能够制作全世界人民可以在任何设备上使用的Web应用程序听起来真是太酷了。

我开始学习HTML,CSS和JavaScript。 我的旅程的这个阶段有些模糊,因为它是零星的和无组织的。 我记得我使用了哪些资源,但我不记得确切地使用它们的顺序,但是我会尽力而为。

  • Coursera的更多Python课程
  • Codecademy(首先是免费版本,然后是付费版本)
  • Colt Steele的Web开发新手训练营
  • Gordon Zhu的观看和编码(第一个实用的JavaScript —免费的东西—然后是付费的订阅视频)
  • freeCodeCamp
  • W3Schools教程
  • Hack Reactor准备
  • 欧拉计划的挑战(我当时解决了问题10)
  • The Iron Yard(附近的训练营)举办的网络开发人员聚会
  • Dinner and Code举办的Web开发人员聚会
  • 由圣安东尼奥编码挑战大会举办的Web开发人员聚会
  • MDN
  • CSS技巧

可能还有更多,但这就是我目前能想到的。

今天,我仍然使用其中的许多资源:

  • 其他乌迪米课程
  • freeCodeCamp
  • W3Schools教程
  • 由圣安东尼奥编码挑战大会举办的Web开发人员聚会
  • MDN
  • CSS技巧

“驼峰”

在大多数情况下,我仍处于“驼峰”状态。我一直在努力,但是似乎我变得越来越糟。 当我开始编程时,我已经快20岁了,从字面上看,我的大脑正被重新连接,以编程和算法的方式思考。 这是一个痛苦的过程,但唯一的出路就是通关。

“驼峰”基本上是指学习了简单而容易实现的成果(什么是变量?)之后但要能够产生有价值的东西之后学习成为开发人员的时间。

在这里,您感觉自己正在做比以往更多的工作,并获得比以往更少的结果。

这是暂时的

克服它,我知道你可以!

设计

我不是设计师。 当我查看出色的设计时,我会欣赏它,但是很多时候我不明白为什么它“起作用”。 我是一个非常数学倾向的人。 数学可以帮助我增加生活的理性,这可以使我感到扎根。 我也喜欢音乐理论,这有助于我增加对音乐的理解和理解。 我发现我更了解我所理解的事物。

但是,我一直在努力提高自己的设计技能,并且学到了一些通用的知识,这些东西实际上已经走了很长一段路:

  • 基本的色彩理论,色轮,各种配色方案。
  • (如果/当您完全迷路时,只需转到Adobe Color并选择一些很棒的东西)
  • 如果您不知道自己在做什么,文本应该几乎是黑色或白色或介于两者之间。
  • 使用诸如图像颜色提取之类的工具从图像中查找主要颜色,并将其用于设计中。
  • 对字体的基本了解,例如衬线与无衬线之间的区别。
  • 我从字面上认为我可以在Google的字体中找到任意2种漂亮的字体,然后它们可以一起工作。 自己很酷,一定在一起很酷吧? 不要犯那个错误。 除非您非常确定自己在做什么,否则我只会找到一种适合您网站色调的喜欢的字体,然后使用建议的字体配对。
  • 通常,字体少即是多。
  • 真正的黑色作为一种字体颜色是非常苛刻的,并且在大多数流行的网站上通常不使用。
  • 8pt风格指南,实际上与音乐理论非常相似。 这个想法是,当您设置填充,边距,宽度或高度时,应使用8px的倍数。 在这里更多。
  • BOX-SHADOW非常棒。 如果您不是很经常使用盒子阴影,那您就错过了。
  • ^也是线性梯度。
  • 意识到别人是比我更好的设计师。 我并不是要成为世界上最好的设计师(如果您愿意,此技巧可能不适合您):
  • 如果您不确定将框阴影设置为什么,或者不确定过渡的规格是什么,或者不确定线性渐变或任何视觉上复杂的CSS,请使用GOOGLE IT! 有很多很好的例子。 我经常用Google之类的东西“框阴影的好例子”,然后找到我喜欢的东西并复制并粘贴。 作为开发人员,我们知道不要为算法重新发明轮子,但是实际上我花了很长时间才意识到我也不需要为设计重新发明轮子。
  • Bootstrap是ehh。 称我为仇恨者,我只是不喜欢它。 我也不喜欢您的设计和响应能力取决于其他因素的想法。 如果没有Bootstrap无法创建一个响应式,视觉上令人愉悦的网站,那么您实际上并没有为自己做任何事情。 如果可以,并且只要喜欢使用Bootstrap,就可以了。 老实说,我更喜欢使用语义UI,尽管现在对于我的许多个人项目,我只是从头开始。
  • Normalize.css非常重要! 我真的没有想到不使用它的原因。 在您操作系统上的Google Chrome版本上,显示器上看起来有些不错,但这并不意味着在其他人的设置上看起来不错。 Normalize.css可以帮助……。 规范样式。
  • 我读了《围棋:图形设计的基德指南》一书,该书确实有助于总结出许多有用的信息,使孩子容易接近。

处理冒名顶替综合症

这个领域是巨大的。 您将永远不会了解一切。 在这个领域,您很可能永远都不是最好的。

没有人知道所有事情,并且可以说,即使您冻结了时间并且该领域不再增长,您仍然不能成为所有这方面的专家。

一开始,我一直以为“一旦我对X,Y和Z感到更满意, 那么 我将成为一名优秀的开发人员。 “但事实是,我(以及我在现实生活中认识的每个开发人员)都不了解所有事情,有时我们仍然会犯一些愚蠢的错误(尽管肯定比以前少了)。

随着知识库的增长,我们试图缩小我们的知识差距。 我们可能总是在知识上存在空白。 人类的状况。 * 叹气 *

您不会因知道如何做而得到报酬, 因为能够弄清楚事物的能力而得到报酬, 为公司提供具有成本效益的价值

我以为,如果我不是[插入最新时尚]的专家,并且有5年的经验,那么我就不可能成为开发人员的竞争者。

我没有学位-下颚后就退学了

  1. 意识到生命是短暂而宝贵的
  2. 能够承受我彻头彻尾讨厌我的大学经历的事实

某些地方完全将我排除在外。 没关系,我可能根本不想在这样的地方工作。

但是大多数人只是说我需要经验:

  • 因此,我自愿参加了当地的聚会。
  • 我自愿帮助我所在城市的共同工作空间。
  • 我问我的理发师是否可以给他一个网站(由于他是我的朋友,我只向他收费100美元-我基本上每小时可以赚3美元:不到最低工资的一半)。
  • 我意识到在纸面上,我并没有给人留下深刻的印象,因为我没有学位并且没有工作经验,所以我回避了非技术人员(例如HR),因为他们没有看到我可以提供的价值。 他们对我来说是死胡同。

我现在从事的工作是从我参与的本地freeCodeCamp松弛中得知的。

我冷淡地给领导(现在是我的老板)发了电子邮件,而领导恰好是他自己。 他查看了我的GitHub和产品组合上的代码,并说他想雇用我,其余就是历史。

到目前为止,我还没有使用过React或Redux,也没有真正使用过Node或Express。

我使用了一些Perl进行模板制作(旧的基础架构,他们现在不会花时间/金钱来改变它们),使用EJS进行较新的模板制作,使用了很多香草JS,一些jQuery等。

我还在学习WebdriverIO,Selenium,Mocha和Chai编写测试,以帮助解决有很多问题的项目。

一方面,我在React,Redux,SCSS,路由,OAuth等方面日趋完善

一直在学习! 然后,当您在纸上留下深刻的印象时,您将具有与此相关的技能。

如果您不喜欢学习,我认为这不是适合您的领域。

应对时尚

我推迟学习React / Redux / Webpack / etc很久了,因为我太担心我会花2个月的时间来真正扎实地学习它,然后React被其他一些技术所取代。

这种恐惧是基于现实的,这是我必须接受的现实。 领域在不断变化。 但是,站在正确的位置并不一定比朝“错误”的方向前进更好,因为即使您朝着“错误”的方向学习,也会学到很多东西。

推迟的好处是:

  • 我足够熟练地学习算法,可以在我的本地编码挑战聚会上赢得奖品。
  • 我了解了JavaScript的良好基础。
  • 我并没有太快地添加复杂性。

而且由于有了坚实的基础,我一开始就可以很快地习惯使用React。 我并没有那种我不负责任何技术的糟糕情况。

好消息是,听起来像是基础,您不必不断地重新学习基础!

直觉

作为开发人员的直觉变得如此强大。 我看到了一个从未见过的错误,我可以立即排除很多可能性并缩小选择范围。

我记得在开发人员早期在浏览器开发人员控制台或终端中引发错误时,我感觉计算机对我大吼大叫。 现在,如果某些事情无法正常运行,我打开控制台,我真的很高兴看到错误,因为这是一个线索!

配对编程

我学习编程已有2年多的时间(尽管实际上已经致力于编程1年多了)。 我很ham愧地承认,2018年2月23日是我第一次真正尝试结对编程。 我去了当地的Codeathon,并与队友Kia Farhang一起编程。 我们共同努力决定制作什么和应用程序的行为,以及向评委展示。 我负责应用程序的前端(以及后端的一小部分),起亚利用Test-Driven-Development方法来创建大量后端,以正确地从用户那里获取数据,并致电给Yelp,并返回必要的信息。

我的第一个结对编程经验很棒(尽管起亚真的很聪明,所以YMMV)。 在如此疯狂的期限内工作真是有趣又令人振奋。 但是,将某些复杂性抽象给另一个人真的很酷。 我们基本上就需要什么数据达成了一致,我研究了数据到达后如何处理,他致力于如何获取,修改和发送数据。

我真的很期待更多的结对编程,尤其是起亚。 我认为这将帮助我们双方以更快的速度发展。

集成开发环境

VSCode,曾经是Sublime(在此之前是Notepad ++),但我更喜欢VSCode。

Mac vs Windows vs Linux

我开始使用Windows,因为那是我拥有的笔记本电脑类型,也是我成长的唯一操作系统。 我的工作使我可以使用MacBook Air,虽然我认为Apple笔记本电脑价格过高,但我对它的挫败感却大大减少了,而且使用起来很愉快。 电池也是杀手(在我不使用Mac时通过将其插入Mac给手机充电。我的手机电量从35%下降到95%,而Mac则像10%的电池丢失了!!!)最重要的是:否更多命令行。 对于日常工作而言,这可不是一件小事。

将来我可能最终会运行Linux,但是如果您是初学者,我强烈建议您使用Mac。 实际上,学习曲线还不错。 使用Windows大约有10年的经验,但是我在Mac上的工作效率更高,而在Mac上的经验还不到6个月。

*我不是苹果迷。 我有一部Android手机,我讨厌iTunes,我认为iPod已经过时,我认为Apple Watch绝非愚蠢(您想佩戴一款可提供您手机已经具备的功能的易碎,昂贵的手表吗?我知道我没有)。 我也认为Windows非常糟糕,我的MacBook air具有很多我喜欢的功能。

底线:编程可能会固有地令人沮丧,因此,选择一台可以最大程度地减少沮丧感的笔记本电脑是不费吹灰之力的(特别是如果您是初学者,对我而言,这更令人沮丧)。

我开发某些东西的一般过程

  • 想一个想法/想法
  • 写出特定功能的注释
  • 我称这为“转储”。 事情对其他任何人都没有意义,我只需要把想法从头脑中弄到计算机中即可。 我通常会打开IDE并将文件另存为JS文件,以便可以使用CMD + /快速注释掉似乎可以解决的问题。
  • 我还可以使用键盘快捷键快速上下移动句子(从而按上下文排序)
  • 我提炼脑筋
  • 想想边缘案例
  • 考虑可能的实现
  • 考虑是否需要路由,如果需要,路由如何工作
  • 画一些线框(我用笔和纸)
  • 将工作分解为可管理的块

一般提示

  • 如果您最终要在信息数组上进行forEach / reduce / map / loop,则最初只是硬编码出该数组中的一项。
  • 我的范式是让一切正常运行,然后分支并让其他一切正常运行。
  • 在使用动态数据之前,请确保静态数据有效。
  • 例如,在我的投资组合中,我将拥有一个卡片式UI画廊。 我没有创建所有内容,而是只为一个项目制作了内容,并重复了16次,以测试UI功能。 现在,我可以在任何地方找到它,可以添加和删除内容,并且知道它可以工作

发展目标相互矛盾

我经常不得不尝试平衡:

  • 我知道哪些方法可以完成需要做的事情?
  • (我知道)最好的方法是做什么,为什么?
  • 我知道哪些方法值得我们去做需要做的事情?

然后,我尝试找到重叠的部分。

结论

学习成为一名开发人员很困难。

主要通过自学来学习成为开发人员更加困难。

在没有指导的情况下学习成为开发人员真是愚蠢。 全世界和网络上都有聪明的开发人员。 利用它们!

我希望本文中的某些信息对您的旅行有所帮助。 一直在学习!

照片由 Mantas Hesthaven拍摄