The Key To Accelerating Your Coding Skills

原文链接:http://blog.thefirehoseproject.com/posts/learn-to-code-and-be-self-reliant/

附上个人认为翻译的比较好的一篇:https://www.jianshu.com/p/8806de7a7597建议看完英文版在看翻译

accelerating : 加速

When you learn to code, there is a moment when everything begins to change. At Firehose, we like to call this the inflection point of coding. After this phase, the way you operate as a developer will be dramatically different. Building up to the inflection point is the process of becoming self-sufficient in programming, to the point where you no longer need any hand-holding. It can be a frustrating experience, but once it’s behind you, it is incredibly empowering.

Firehose:教授ruby语言的网站,作者的机构,
inflection:变音,转调
inflection point:拐点
phase:相位,阶段
operate:运转,动手术;操作,经营
dramatically:戏剧性的,引人注目的
process:处理,过程
self-sufficient:自足;自负;傲慢
hand-holding:手把手的帮助
hold:持续;持有;保留;控制
frustrating:使人沮丧;令人泄气
incredibly:难以置信的;很,极为
empowering:授权
stuff:道具;材料
figure:图形;任务;出现;描绘
steps to take:要采取的步骤

At Firehose, our goal isn’t just to teach you Ruby, how to build web applications, or how to write tests. Although we do teach these skills and more, our primary goal is to accelerate students past the inflection point so they gain the ability to solve any problem they encounter. We believe that being able to problem solve on your own is an invaluable skill, and this method of teaching will take you much further than simply learning how to build a set of apps.

goal:球门;进球得分;目标
application:申请表;实际应用;用途
although:尽管
primary:主要的
accelerate:使加快
gain:收获;获得;获利;利润
ability:能力;力量
encounter:遇到
invaluable:无法估计的,非常宝贵的
further:更远的;增进

The Tutorial Phase (3-8 weeks of serious coding)

When you start out learning to code, there’s a lot of information that you don’t know yet. This information is called domain-specific knowledge. Examples include: knowing how to write a loop in ruby or how to extract something from a database using Ruby on Rails. Domain-specific knowledge encompasses the protocols unique to a certain programming environment.

The first step to becoming a self-sufficient developer is learning how to do specific tasks. Once you master certain tasks, the broad strokes of how the pieces fit together will start to become apparent. Over time, you’ll begin to recognize patterns and eventually, the things that initially seemed confusing and foreign will become second nature.

tutorial :adj家庭教师的;指导的;n.导师的个人指导
serious :严肃的;认真的;庄重的;危急的;
domain-specific :
domain :领域
Examples include :例如
extract :摘录
rails :是一个用Ruby语言写的开源Web开发框架
encompasses :包括
protocol :条约;协议;礼仪
unique :唯一;独特;独一无二
certain :无疑的;肯定的;某一的
master :vt控制;n主人;adj主要的;
broad :adj宽的
strokes :n一击;vt轻抚
pieces :n件;
apparent :adj显然的;表面上的
Over time :随着时间的过去
recognize :认识
patterns : 模式
eventually :终于;最后(侧重动作和行为的结果)
initially : 开始;最初
confusing :莫名其妙的,难以理解
foreign :外国的
nature : 自然

For students starting out, the most important skill to acquire is attention to detail.

Paying close attention to detail is important when going through materials like documentation or tutorials. Even the most minor typos and misspellings will result in error messages or bugs. Seeing error messages is a frustrating experience at first, but it’s a crucial step in the learning process. Dealing with error messages and problems in this phase teaches you one of the most important skills of programming within a safe environment: being detail-oriented.

acquire : 获得vt;
attention : 注意,专心,留意 n
detail :细节,详情
paying close attention :关注
materials :原料
tutorials :指导
minor :较小的adj;未成年人
typos :打字稿
misspellings :拼错;拼错的词
crucial :决定性的
dealing with :处理
within :在...之内;在内部;里面
detail-oriented :注重细节
oriented :导向的

 

 Debugging error messages is incredibly important. The fact of the matter is, error messages are just a part of programming: they are seen by inexperienced and very experienced developers alike. The only difference is, the more experience you have dealing with error messages, the less time you’ll need to spend trying to fix them. Here’s why:

incredibly :难以置信的;很;极为
fact :事实
matter :物质;题材;困难;重要性 n;要紧,有关系 vi
inexperienceced :经验不足的,不熟练的
experienced :有经验的
alike :同样的,相像的

 

  • Over time, you will learn how to read error messages and extract the relevant details of the problem quickly. The first time you see an error message, it will take you a while to decode what it actually means. But after you’ve seen hundreds of error messages (and you will see hundreds!), you will be able to pinpoint the problem’s location and the relevant details you need in order to fix it.
  • You should learn from each error message that you resolve. Don’t just fix the error and be done with it; understand what is wrong with the code you’re fixing. By learning from each of your errors, the next time you make the same mistake, you’ll be able to fix it much faster.
  • Initially, you will probably ask for help on each error message you see. Over time, you’ll learn to ask for help less frequently by double-checking your code and conducting smart Google searches.
extract :摘录,提取
relevant : 有关的,切题的,有重大作用的
actually :实际上
a while :一会儿
decode :解码
actually :实际上
pinpoint : 精确查找
resolve :是分解;解决
don`t just : 不只是
frequently : 频繁的
double-checking :
conducting :指挥家;组织

In the tutorial phase, you will follow instruction. At first, you’ll find it challenging to follow instructions and error messages will happen frequently. Over time, you’ll develop the skill to debug errors and pay better attention to small details, and you’ll be able to make progress much quicker. As you’re wrapping up the tutorial phase, you’ll notice you’re able to write code at a much more rapid pace.

At this point, some people feel confident– like they’re ready to ditch the training wheels and start building things without structured guidance– and will happily dive into the deep end. Other students will reach for more tutorials, trying to obtain more domain-specific knowledge in search of a “full understanding.” Unfortunately, tutorials will only take you so far, and true confidence isn’t found in tutorials or guides. True confidence comes from struggling through a problem you have no idea how to solve, and discovering a solution on your own.

instruction : 教授;操作指南;使用说明书
challenging : 富有挑战性的
wrapping up :结束
rapid :急速的,快的
pace : 踱步于,走动vt;步速;一步,步子
confident :自信的
ditch : 在...上掘沟;开沟;沟壑
training :培养;训练
wheel : 轮子
structured guidance : 结构化指导
dive into :潜入
obtain :获得
in search of : 寻求
full understanding : 充分理解
unfortunately : 不幸的
struggling :奋斗的
solution : 解决 n.;

The dirty little secret of programming is…

You will never know everything you need to know to solve all your problems. Going into the journey, you probably envisioned yourself eventually learning everything you need to learn, and then being squared away. This moment will never happen.

Programming is a life-long learning experience. Experienced software engineers seek to find solutions to problems they haven’t solved yet because it gives them the opportunity to learn more. If you find yourself waiting for the moment when you finally feel like you know everything there is to know about coding, know this: the day you’re waiting for will never come. And that is a wonderful thing.

secret : 秘密
journey :旅程
envisioned :envision 预想
eventually :最后,终于
squared away :Yep,got·em all squared away。(全部解决了-绯闻女孩第二季)
Experienced :有经验的
seek :寻找
opportunity :机会

The master has failed more times than the begginer has even tried.

 

You will be ready to jump into the next phase of your journey when:

  • You’ve seen enough error messages that they no longer startle you. Instead, you know how to decipher what they mean and where to look for the problems in your code.
  • You’re a pro at Googling for solutions. When you’re working to add a feature or see a confusing error message, you know what to search for to find the information you need.
  • You’re able to reference code you’ve written in other parts of your application and follow patterns within them, rather than always seeking out step-by-step instructions.
startle : 使吓一跳
decipher : 破译,辨认
pro :赞成者
feature :特征
confusing :莫名其妙,难以理解的
reference :参考,涉及,提及
patterns :型,样式,榜样,典范,n;模仿,仿制vt
within :在内部
seeking out :
instruction :

The Inflection Point (2-4 weeks with the right mentality)

The inflection point stage is one of the most frustrating stages of learning to code, but in many ways, it’s the only stage that matters. It’s the point when you phase out of using tutorials and begin solving problems for which no one has lined up a solution for you.

At some points, you will feel like you aren’t ready to tackle this phase and like you want to return to building something with an outline of exactly what to do. Don’t fall prey to this mentality. The reason you’ll feel frustrated is:

mentality :心态,思想方法;智力,智能
frustrating :
matters :事项,事态
tutorials :
lined up : 排队
tackle :
outline : 轮廓;大纲
exactly :精确的;准确的
prey :捕食,掠夺,折磨
mentality :心态;思想方法,智力,智能
frustrated :挫败的,失意的

During the inflection phase, you will be coding 10-20 times SLOWER than in the previous phase.

You may start questioning yourself and wondering if you are actually capable of becoming a programmer. Feelings of insecurity and doubt are common in this stage.

Despite the fact that you’ll feel like you’re learning and accomplishing things at a much slower rate, in reality, you are achieving the things that matter the most. While your domain-specific knowledge is screeching to a putter, everything you’re learning will be about procedural knowledge.

Procedural knowledge is the ability to teach yourself what you don’t know along the way. When you need to implement a new feature, what type of Google search should you do? At this point in time, you’ll feel like you’re “in the dark” when it comes to many of the things you want to accomplish. Learning how to find the light on your own is critical because you can never know everything there is to know, so you need to be able to teach yourself how to solve the problem at hand.

Most people do not realize that in order to learn to code, you need to learn both domain-specific and procedural knowledge.

mentality :心态;思想方法,智力,智能
previous :以前的;早先的
wonder :对。。。感到疑惑vt;惊奇n
actually :实际上
capable :能干的
insecurity :不安全;危险
doubt :怀疑
despite :尽管,不管
accomplishing : 完成
rate : 比率,进度
reality :现实;真实;实际
matter : 要紧,有关系;重要性,物质,麻烦,困难,毛病
screeching :尖叫,发动机啸声
putter :置放者n;混过vt;闲荡vi
procedural :程序上的
about :关于prep;附近的adj;大约adv;大致n

implement :使生效vt;工具n
feature :容貌n;起重要作用vi;以。。。为特色vt
in time :及时
accomplish :完成,实现,做成功
critical :批评的,爱挑剔的,决定性的,危险的,临界的

For the rest of your life, go outside your limits every single day

Some software engineers stay inside their comfort zone once they find their footing. These types of programmers are known as maintenance programmers– not something you should strive to be. Instead, you should strive to go outside your limits every single day. The most common reason programmers quit their jobs is because “it’s not challenging anymore since I’ve solved all the interesting problems.”

Rather than trying to pull coding projects into your comfort zone, you should be seeking out problems that are outside your current skill set. This is the only way to build on and expand your skills.

In the words of a Firehose student upon passing his inflection point:

I still feel like I’m in the deep end! I’m just getting more comfortable knowing that’s where I’ve got to be!

In web development, there are actually two inflection points that will come together.

The web development inflection point is the point when you become capable of building any database-driven application that you want. This means being able to build a web application with many pages that stores and retrieves information from a simple database. Web developers call this: “mastering CRUD.” At this phase, you should also be able to integrate with any 3rd party library (a ruby gem for example) simply by following the documentation provided on GitHub or a blog post.

footing :立足处
known as :被称为
maintenance :维持;维护;报养;维修,赡养费
strive :奋斗,抗争,努力
quit :停止;放弃;离去
current :现在的;最近的
expand :扩张
upon :在...之上;接近
capable :能干的;能胜任的;有才华的
database-driven application :数据库驱动的应用程序
stores :储存v;贮藏n;
retrieves :检索
mastering CRUD :掌握 增删改查
integrate :使结合成为整体
3rd party library : 第三方库
provided :提供

The algorithm and data structures inflection point is a less superficial inflection point, but it is actually more important. Someone who has conquered this point will have mastered the programming language they’re working in, in addition to mastering the fundamentals of programming and having a depth of knowledge for solving complex coding challenges.

People who have conquered the algorithm and data structures inflection point will be able to:

  • Write sorting algorithms
  • Implement and reverse linked lists
  • Understand and write programs leveraging stacks, queues, and trees
  • Write computer programs using recursive or iterative solutions

In short, once you pass this inflection point, you will have mastered data manipulation and will understand the performance implications of your code decisions. Traditional computer science degrees focus exclusively on getting students past the algorithm and data structures inflection point. Many universities teach this with programming languages that are generally not used in the industry, like Scheme, Racket, or LISP.

algorithm :算法
data structures :数据结构
superficial :表面的;表皮的,肤浅的;缺乏深度的
conquered :征服
in addition :另外
fundamental :基本的adj;基本原则n
complex :复杂的
challenge :挑战
implement :使生效vt,执行;工具n
reverse :使翻转
linked :链接
leverage :力量,影响;促使...改变vt;杠杆作用,杠杆的力量n
recursive :递归的
iterative :迭代的
manipulaton :操作
performance :演出;执行;表现;性能
implication :暗示;牵连;卷入;含义n
decision :决定,决心,判断;结果
traditional :
exclusively :专门地;专有的
universities :
generally :一般地, 通常, 大体上, 广泛地, 普遍地adv
industry :工业

 

In most technical interviews, the interviewer will assume you’ve passed the web development inflection point, given that’s easier to do, and focus their questions on evaluating your skill in algorithms and data structures. These questions will generally focus on the topics we mentioned above: sorting algorithms, reversing linked lists, and using stacks, queues, and trees.

technical :技术的;应用科学的;专业的adj
interviews :面谈,面试
assume :假定,采取,承担vt;装腔作势vi
given :考虑到prep,倘若,假定;规定的adj
evaluating :评估
generally :一般地, 通常, 大体上, 广泛地, 普遍地
topic :题目,论题,话题
mention :说起;提到,谈到;提及,讨论

Once a developer has passed both the web development inflection point and the algorithm and data structures inflection point, they hold the keys to the kingdom.

These developers will be able to solve challenges that intersect the two: complex algorithms that need to be built in the context of advanced web applications. This is at the heart of what professional web developers do every single day.

kingdom :王国
intersect :横断,横切;相交
complex :复杂的
context :上下文;环境
advanced :超前的,先进的adj
heart :要点;心脏n;鼓励vt
professional :职业的adj,专业的

Consequences of the Inflection Point

The biggest consequence of the inflection point will sound a bit counterintuitive when you first hear it. Take a deep breath in:

When learning to code, domain-specific knowledge doesn’t matter in the grand scheme of things.

Yup. I’m not joking– it really doesn’t matter that much at all. Once you pass the inflection point, these concepts will fluidly translate with just a week or two of tutorials, maybe even days!

What ultimately really matters is:

  • You have a solid grasp on a web development framework
  • You have a solid grasp on writing algorithmically complex code in any programming language
consequence :结果,后果n  /'kɒnsɪkw(ə)ns/
counterintuitive :违反直觉的adj.
breath :呼吸
grand :宏伟的,豪华adj;大钢琴n
scheme :vt. & vi. 策划; 图谋;n. 阴谋, 诡计,计划, 方案
Yup :是的【俚】
joking :开玩笑的
concept :概念,观念,想法
fluidly :流畅的
translate :vt. & vi. 翻译; 解释; 转化
tutorial :adj. 家庭教师的;指导教师的;家庭教师职责的,辅导的;指导的;n. 导师的个别指导
ultimately :最后,最终
solid :固体,实心,结实,稳定,可靠adj;固体n
grasp :理解,控制,抓住n;抓住,领会vt
framework :架构,结构n
algorithmically :算法。在算法上
complex :

 

Hiring managers want developers with solid web development and algorithm skills.

While I was working at PayPal, my team hired a Senior Rails Developer who had no experience in Rails– he had been coding a lot in Python, LISP, and Perl. Within a couple of days, he was already making a big impact. And within weeks: a huge impact. He quickly rose to become the technical team lead and was one of the best hiring decisions I’ve ever been involved in.

Don’t sweat the stack. Many people will say things like, “AngularJS is hot these days,” “JavaScript is on the rise,” or “the latest fad is…” My response to that is: “so?” When you’re learning how to program, your singular goal should be to find the inflection point and annihilate it. Once you do, learning that new, sexy fad won’t be a difficult task at all.

Become self-reliant. Having the ability to learn new coding skills without structured guidance means you no longer need to wait for anyone to help you out. This means that for the majority of what you need to learn, you can simply search the internet and read the various material on what you need to know.

This doesn’t mean you immediately “know” everything, but just that everything is now “figure-out-able,” so in essence, you are unstoppable.

hiring :雇用,租用n&v
hired :
senior :年长的,资深的adj
rails :是一个用Ruby语言写的开源Web开发框架
couple :一对
a couple of days :几天,一两天
impact :效果,影响n;冲击vi;撞击vt
huge :巨大的,庞大的
rose :玫瑰;起立;增加;应付,胜任;起身
technical :技术的
decision :决定,果断
be involved in :涉及,与什么有关联

sweat :流出,使出汗,使干苦活
stack :堆,使堆叠
rise :上升
lastest :最新,最近,最迟
fad :一时的爱好;时尚
singular :单数的;单一的,突出的,卓越的,非凡的
annihilate :歼灭,消灭,彻底击溃;毁灭

self-reliant :依靠自己的,独立的
reliant :依赖的,可靠的,
structure :结构,构造n;组织,安排,构造,制定vt
guidance :指导,引导n
majority :多数n;成年【律】 /mə'dʒɒrɪtɪ/
internet :
various :各种各样的;多方面的adj
meterial :材料
immediately :立即,马上adv;直接的
figure :图形,数字体型,人物n;出现,计算vi;描绘,认为,象征vt
essence :本质,实质
unstoppable :无法停止的,无法阻止的adj

The Skills You Will Develop During the Inflection Point

As a software developer, the best reference material is similar code that you have already written. When you fully understand the code you’ve written, you don’t need to commit all the details to memory. This means that the first question you should ask yourself when building a new feature is: “Have I built something similar before?” If the answer is yes, revisit the code and walk through the code line-by-line in your head. Re-explain to yourself what it’s doing and ask yourself, “could I use the same approach now?”

Videos suck at explaining domain-specific details because they take so darned long to watch. Say you want to integrate with the Google Maps API. Once you’ve experienced doing so once, it can take less than a minute to open the code up in GitHub, copy the code, and paste it into a new project. Videos, on the other hand, can often take 10-30 minutes to re-watch.

during :在...的时候
reference :提及,涉及,参考,查阅n
meterial :
simalar :相似的,类似的
commit :交付vt;犯罪,犯错,承诺
details :
feature :
revisit :
approach :方法,方式;靠近,接近,通路,入口n;接洽,交涉,着手处理vt;接近,走进,靠近vt&vi
suck :吸;吮vt&vi;舔vi
suck at :烂,做的不好;Wow,You suck at this too;Girl,you suck at this game
视频很难解释特定领域的细节
darned :可恨的,岂有此理的adj&adv;darn的过去式(织补)
integrate :使结合成为整体vt;使(融入)vt&vi
experienced :
on the other hand :在另一方面

 

Strategies for Passing the Inflection Point as Efficiently as Possible

Because passing the inflection point is the most important part of learning to code, you should set yourself up to make the process as smooth as possible. This means you should start preparing while you’re in the tutorial phase and maintain the right mindset during this period of time.

strategy :战略
efficiently :效率高地,有效的adv
set...up :建立
smooth :光滑的,顺利的,平稳的adj;使优雅vt使光滑
preparing :准备的,预备的adj
tutorial :/tjuː'tɔːrɪəl/
maintain :保持;继续vt;报养,维护;供给赡养
mindset :心态,倾向,习惯,精神状态
period :(一段)时间,时期;句号

 

During the tutorial phase, take breaks from going over structured material and give yourself challenge problems along the way.

  • For every handful of lessons, try to do something that is outside the scope of the tutorial you’re following. If the tutorials you’re going through provide “challenges” or “self-directed” pieces, do all of them. Solving unguided challenges will give you the important experience of doing things without structured guidance.
  • Try to use tutorials as little as possible. At Firehose, we often walk students through how to integrate certain gems or do things using the provided documentation. Rather than simply following the instructions explained in tutorials that are geared towards people who are just starting out, many students will follow the documentation and use the tutorials as a back-up. Note that documentation will treat you like a developer who has passed the inflection point. Getting comfortable reading and following documentation on GitHub will give you a leg up when you’re on your own.
  • Focus on the essentials and use repetition. Learn how to do common things like spinning-up an application from scratch, pushing a new app to GitHub and Heroku, and building a database migration early on.
break :休息;中断;突变
going over :彻底审查
go over :检查,重做
structured :
scope :视野,眼界
go through :完成,做完,检查,经受,通过
provide :规定,提供,抚养,作准备
self-directed :自我导向
integrate :/'ɪntɪgreɪt/
gem :是ruby库和程序的标准包
provided :
geared :面向;链接的的adj;geared motor减速电动机;
back-up :备份
treat :招待,对待,看待,款待 n&vt&vi
leg up :联系上下文,这个话的意思,应该是“在你独自开发的时候祝你一臂(腿)之力”
essentials :概要
repetition :重复,反复,重复的事,副本
spinning-up :
scratch :抓痕,抓, from scratch :从头做起,从头开始
Heroku :一个支持多种编程语言的云平台
migration :迁移

Pushing through the inflection point can be challenging. Here are some pointers to get you through it:

  • Understand that this is a difficult process and go easy on yourself. Also, set realistic expectations. You can’t compare your “superman”-level speed of going through tutorials to your “snail”-speed of learning things on your own. Keep in mind that you’re learning plenty, but at this phase, you’re learning a brand new skill of figuring new things out on your own.
  • If you’re struggling with self-confidence, know that what you’re feeling is completely normal. Keep working. If you continue to struggle, try talking to someone who has recently passed the inflection point. They will be able to relate to the position you’re in and will assure you that what you’re experiencing is only temporary. Work consistently, but don’t overwork yourself. At this phase of the game, know that you can only be productive for around 6 hours a day at the most. Working in an exhausted state will only prolong the time you spend building up to the inflection point.
realistic :现实的,实际可行的
expectation :预料,期望
compare :比较,对照
snail :蜗牛,迟钝的人;缓慢移动
keep in mind :记住,牢记
plenty :丰富,大量n;足够的adj
brand :商标,牌子n;打烙印vt
figuring :
struggling :挣扎,奋斗 struggle
self-confidence :自信
completely :完整的
struggle :
relate :vt&vi (把...)联系起来;vt讲述,叙述
assure :保证,担保vt;使确信,弄清楚
experience :经验
temporary :临时的
consistently :一贯的,坚持的,固守的adv
productive :多产的,富饶的,富有成效的;有益的adj
exhausted :/ɪgˈzɔ:stɪd/ 耗尽的,用完的,筋疲力尽的adj
prolong :拖延,延长vt

The best way to gain confidence at this stage is to power through any doubts you have. Your emotions may start to feel like a roller coaster. At times, you’ll feel like you’re on fire, but after 15 hours of struggling on the same problem, it’s very common to feel the polar opposite.

It can be frustrating to have no idea if something will take you 5 minutes or 5 hours, but every time you power through and successfully implement a new feature, the rush of confidence will be everything you need. After solving a handful of hard problems without any help, you’ll be addicted to the feeling of building things outside your comfort zone.

gain :收获,增加
doubts :怀疑
emotions :情感,情绪n
roller :滚压机,巨浪
coaster :沿岸贸易船;杯托,小托盘,雪橇
roller coaster :过山车
struggling :奋斗,挣扎
polar : 两极的
opposite :相反的

frustrating : 令人泄气,使人沮丧,产生挫折
implement : 使生效,贯彻,执行vt;工具n
feature : 容貌,特征n;其重要作用vi;以...为特色vt
rush :匆促;急流;急需的adj;突袭,匆忙做的vt;冲;闯vi
addicted : 上了瘾的,入了迷的,沉溺于某种(尤其是不良的)嗜好

How to know when you’ve passed the inflection point

The final stage of the inflection point process is acceptance. Acceptance that software development is a process of continuous learning. Acceptance that the feeling that you’ve successfully learned everything just means you should start thinking about solving more complicated problems.

Have you experienced the inflection point yet? Share this post and start a conversation with your friends– you would be surprised how many people have reached and surpassed this moment.

final :最后的
acceptance :接受,认可,赞成n
process :处理,加工vt;过程n
continuous :连续的adj
complicated :结构复杂的adj
conversation :交谈,谈话,回话n

 

 
AuthorKen Mazaika

Ken Mazaika is the CTO and co-founder at Firehose. Previously, he was a tech lead at WHERE.com (acquired by PayPal) and a member of the PayPal/eBay development team in Boston.

previously :先前adv
tech :技术
acquired :后天的,已经获得的,已成习惯的,adj;取得,捕获v

 

下一篇:Teach Yourself Programming in Ten Years

posted @ 2019-05-10 17:28  游小刀  阅读(1143)  评论(0编辑  收藏  举报
levels of contents