电子工程师自学成才pdf
by Ali Spittel
通过Ali Spittel
The most common question I get from blog readers is “What is your advice for new programmers?” So, I thought it was time to write up my thoughts.
我从博客读者那里得到的最常见问题是“您对新程序员有何建议?” 因此,我认为是时候写下我的想法了。
I will write up my full story in the future, but I took two computer science classes in college. Then, I got a software engineering internship shortly after. I started doing web development work. Initially, I worked on the backend and then eventually on the frontend. My college definitely did not teach web development in those first few computer science classes, so I taught myself.
将来我会写完整的故事,但是我在大学上了两门计算机科学课。 然后,不久之后我获得了软件工程实习机会。 我开始进行Web开发工作。 最初,我在后端工作,然后在前端工作。 我的大学在最初的几门计算机科学课程中绝对没有教授Web开发,所以我自学了。
I don’t think my story is unique. All programmers are self-taught to some degree, whether they’re fully self-taught or have a masters in computer science. Everyone has taught themselves something like RegEx along the way. In fact, self-teaching may be one of the most important skills you can have as a developer.
我认为我的故事不是独一无二的。 无论是完全自学还是拥有计算机科学硕士学位,所有程序员在某种程度上都是自学成才的。 在此过程中,每个人都自学了诸如RegEx之类的东西。 实际上,自我教学可能是您作为开发人员可以拥有的最重要的技能之一。
In addition to my own experience, I also teach people to code as my primary job and for organizations I volunteer with. So this article is drawing on that experience as well.
除了我自己的经验之外,我还教人们将编码作为我的主要工作以及与志愿服务的组织的代码。 因此,本文也借鉴了这种经验。
So here are my tips for getting started.
因此,这是我的入门提示。
If you want to start programming, there has to be a reason for that. That reason can be you love writing code or that you want to have a more lucrative career. It could be that you are doing a bunch of Excel work and you want to make that more efficient.
如果要开始编程,则必须这样做。 原因可能是您喜欢编写代码,还是想要拥有一个更有利可图的职业。 可能是您正在做大量的Excel工作,而您想提高效率。
Keep track of that reason. Programming is hard, and you will get frustrated sometimes. It is essential to keep that reason in mind and to stick with it. You could put a sticky note on your computer or a note on your home screen. Or (like me) write it on your mirror with a dry erase marker.
跟踪该原因。 编程很难,有时您会感到沮丧。 必须牢记这一理由并坚持下去。 您可以在计算机上贴便利贴,也可以在主屏幕上贴便利贴。 或者(像我一样)用干擦标记笔将其写在镜子上。
This may be a less common piece of advice, but I think its really helpful. Before you start writing code, if you haven’t looked at math in a while, I would revisit the concepts from Algebra 1. Programming is built on Algebra 1 math, like functions and variables. Understanding these concepts outside of programming will be super valuable in the future. I recommend Khan Academy’s Algebra 1 course!
这可能是一条不太常见的建议,但我认为它确实很有帮助。 在开始编写代码之前,如果您有一段时间没有看过数学了,那么我将重温Algebra 1的概念。编程基于Algebra 1数学,例如函数和变量。 在编程之外理解这些概念将在将来变得非常有价值。 我推荐可汗学院的代数1课程!
let x = 1; // conceptually the same as algebraic variables!
function add (x, y) { // the same as algebraic functions! return x + y}
Finding a community to support you as you start writing code will be helpful. This community will be valuable, because other people will be in the same place as you. They can offer resources that helped them and offer encouragement.
在开始编写代码时,找到一个可以支持您的社区会很有帮助。 这个社区将很有价值,因为其他人将与您同在一个地方。 他们可以提供帮助他们的资源并提供鼓励。
I would suggest finding a meetup in your area as the top solution here. Even small cities tend to have a group somewhat nearby. If there isn’t one, I would suggest dev.to and the CodeNewbie community as two excellent alternatives. CodeNewbie has a weekly Twitter chat, a Slack group, and podcasts to listen to. Dev.to has a bunch of blog posts and a #discuss tag where you can post your questions.
我建议在您所在的地区找到一个聚会,作为这里的最佳解决方案。 即使是小城市,附近也会有一群人。 如果没有,我建议将dev.to和CodeNewbie社区作为两个很好的选择。 CodeNewbie每周进行一次Twitter聊天,一个Slack组和要收听的播客。 Dev.to有很多博客文章和#discuss标签,您可以在其中发布问题。
One of the most important parts of programming is taking a large problem and breaking it into smaller and smaller pieces until those pieces are solvable. If you are looking at a blank text editor not knowing where to start, it may be because you haven’t broken down the problem enough!
编程中最重要的部分之一是解决一个大问题,并将其分解为越来越小的部分,直到这些部分可以解决为止。 如果您正在查看空白的文本编辑器,而该文本编辑器不知道从哪里开始,则可能是因为您没有充分解决问题!
Related to the previous point, a lot of times it is beneficial to write down in detail what you are trying to do in plain words before even trying to write code. This process is called pseudocoding, and it can take whatever form you want it to. It can also be helpful to solve a problem really slowly on paper first. You think about or even write down the individual steps you are going to take to solve that problem.
与上一点有关,很多时候,甚至在尝试编写代码之前,用纯文字详细记录您想做的事情都是有益的。 此过程称为伪编码,它可以采用您想要的任何形式。 首先在纸上慢慢地解决问题也有帮助。 您考虑甚至写下解决该问题要采取的各个步骤。
// if the user has more than ten points// display "winner" on the page// else// keep playing
If you’re learning to code as a second career, especially if you’ve been away from the classroom for a while, learning how to learn is going to be a big part of your process. There are lots of ups and downs involved, which is very natural! I would brace yourself for that rollercoaster before starting out.
如果您正在学习编码作为第二职业,特别是如果您离开教室已有一段时间,那么学习如何学习将成为您工作的重要组成部分。 这涉及很多起伏,这很自然! 在开始之前,我会为过山车做好准备。
There are a million and one resources for learning how to code. Some are free, and some are paid. I would start with the free resources. Make sure you like writing code first. Then after that, you could think about moving onto paid resources or even a bootcamp.
有上百万种资源可用来学习编码。 有些是免费的,有些是付费的。 我将从免费资源开始。 确保您喜欢先编写代码。 然后,您可以考虑迁移到付费资源甚至是训练营。
There are a lot of worlds within programming, so try to find one world that you love and focus on that. Instead of trying to learn 8 programming languages, frontend and backend, compiled and interpreted languages, all the text editors, developer tools, and so on, find a few things you are really interested in and get good at them.
编程中有很多世界,因此请尝试找到您喜欢的世界,并专注于此。 不用尝试学习8种编程语言,前端和后端,编译和解释语言,所有文本编辑器,开发人员工具等,而是找一些您真正感兴趣并精通它们的东西。
Recognizing patterns in code is one of the most important skills you can have. When people talk about writing “DRY” code (i.e., Don’t Repeat Yourself) they are talking about reducing the patterns in your code. I recommend the game Set for pattern recognition — you can even play online each day on the New York Times’ website!
识别代码模式是您可以拥有的最重要的技能之一。 当人们谈论编写“ DRY”代码(即,不要重复自己)时,他们谈论的是减少代码中的模式。 我建议您使用Set Set模式识别游戏-您甚至每天都可以在《纽约时报》的网站上在线玩 !
// not DRY codelet reversedString = string.split("").reverse().join("")let reversedString2 = string2.split("").reverse().join("")
// cleaner code
const reverse = string => string.split("").reverse().join("")let reversedString = reverse(string)let reversedString2 = reverse(string2)
It will be easier to write clean code in the future if you get into the habit early. Bad habits can be hard to break. Here are my tips for writing cleaner code. If you are doing web development, running HTML and CSS validators on your code can tell you exactly what to fix!
如果您早日习惯,将来编写干净的代码会更容易。 不良习惯很难克服。 这是我编写简洁代码的技巧。 如果您正在进行Web开发,则在代码上运行HTML和CSS验证器可以确切告诉您要解决的问题!
// Not great
function avg (a) { let s = a.reduce((x, y) => x + y) return s / a.length}
// Much better!
function sumArray(array) { return array.reduce((number, currentSum) => number + currentSum)}function averageArray(array) { return sumArray(array) / array.length}
Everybody learns differently. Whether you are a visual, audio, or kinesthetic learner, you learn differently than the next person. Identify how you learn best, and rely on resources that fit that style well. For example, I learn best from reading the documentation and its code examples. I lose focus easily in tutorials.
每个人的学习方式都不一样。 无论您是视觉,听觉还是动觉学习者,与下一个人的学习方式都不同。 确定您的最佳学习方式,并依靠适合该风格的资源。 例如,通过阅读文档及其代码示例,我会学得最好。 我在教程中容易失去重点。
Struggling a little bit when you are learning is really important. You want to solve the problem yourself and find an answer using resources that exist. That said, it is unproductive and demotivating to struggle with a problem for too long. After a few hours, reach out to someone for help!
在学习时奋斗一点很重要。 您想自己解决问题,并使用现有资源找到答案。 话虽如此,与问题作斗争太长时间是无济于事的。 几个小时后,请与他人联系!
Programming is hard, and finding the right answer won’t be immediate. One of the most pivotal moments in my programming journey was failing at writing a Sudoku solver. It can be challenging to adjust to not getting everything right away and seeing those error messages. But that is a huge part of programming.
编程很困难,而且找到正确答案并不是立竿见影的。 在我的编程旅程中最关键的时刻之一是未能编写Sudoku求解器 。 进行调整以使其无法立即获得所有内容并查看这些错误消息可能会具有挑战性。 但这是编程的重要部分。
Error messages are super helpful! When you are starting out, that red error message can be terrifying! One huge step to take is to read through those messages, understand them, and then use them to solve the problem. In fact, you will get to a point where a program silently failing will be far more annoying than a useful error message.
错误消息超级有帮助! 当您刚入门时,红色错误消息可能会令人恐惧! 迈出的重要一步是通读这些消息,理解它们,然后使用它们来解决问题。 实际上,您将到达一个程序无声失败的地步,而不是有用的错误消息。
There isn’t a right answer for what programming language to learn first. Some will be easier to pick up. My top three are Python, Ruby, and JavaScript. I like them because they have a large community behind them, have more straightforward syntax, and are interpreted, so you don’t need to go through a compiling process.
对于首先要学习哪种编程语言,没有正确的答案。 有些会更容易拿起。 我的前三名是Python,Ruby和JavaScript。 我喜欢它们,因为它们背后有一个庞大的社区,语法更直接,而且可以被解释,因此您无需经过编译过程。
It is straight up 100% impossible to know everything about programming. Nobody knows every programming language, every single method that’s out there, every library and framework, or the perfect solution to every problem. Don’t worry about learning everything, just focus on what you do know and extend that.
完全不可能了解编程的全部知识,这是100%不可能的。 没有人知道每种编程语言,那里的每种方法,每种库和框架,或者对每个问题的完美解决方案。 不必担心学习所有内容,只需专注于您所知道的知识并加以扩展即可。
Learning one thing in depth is better than learning a tiny bit about a lot of things, especially at first. That in-depth knowledge will carry over and make learning that next thing easier. Put the blinders on, so you don’t get tempted to drop what you’re learning and move to something new.
深入学习一件事比学习一点点很多事情要好,尤其是刚开始时。 深入的知识将延续并让学习下一件事变得容易。 戴上遮光罩,这样您就不会迷失掉所学的内容,而转向新的东西。
The fundamentals of programming are invaluable. You will use them no matter what you end up doing with programming. Focus on having a solid knowledge of loops, conditionals, functions, data types, and (in most languages) object-oriented programming before moving on to learning about that awesome library that everyone’s talking about.
编程的基础是无价的。 无论您最终要做什么编程,都将使用它们。 在继续学习每个人都在谈论的很棒的库之前,请专注于对循环,条件,函数,数据类型和(在大多数语言中)面向对象编程有扎实的知识。
It will be so much easier to learn that library once you know the fundamentals really well. They will also carry over from language to language, so you only have to really learn them once. After that it’s just syntax!
一旦您非常了解基础知识,就会更容易学习该库。 它们还将在语言之间延续,因此您只需真正学习一次即可。 之后,这只是语法!
Problem-solving is the basis of programming! Getting better at this is critical. Solving riddles, writing code on paper, and breaking down problems can really help with problem-solving.
解决问题是编程的基础! 做到这一点至关重要。 解决谜题,在纸上写代码以及解决问题确实可以帮助解决问题。
Something I sometimes see with new developers is that they approach programming like a research problem instead of a problem-solving project. If they Google something well enough, then they’ll have a solution. Yes, Google and Stack Overflow are super helpful, but rely on yourself sometimes too. Try something out a few different ways before researching it. Or, research small parts of the problem instead of the problem itself — i.e. “turn a String into an array JavaScript” instead of “reverse string JavaScript.”
我有时与新开发人员一起看到的是,他们像研究问题一样对待编程而不是解决问题的项目。 如果他们在Google方面做得足够好,那么他们将提供解决方案。 是的,Google和Stack Overflow很有帮助,但有时也要依靠自己。 在研究之前,请尝试几种不同的方法。 或者,研究问题的一小部分而不是问题本身,即“将字符串转换为数组JavaScript”而不是“反向字符串JavaScript”。
One of the biggest things to learn is how to find good answers to your questions or to learn new features of your language or library. Using Google is important, so is joining communities and subscribing to resources. The Google template I normally use is “problem language/framework/library” in as few words as possible and without filler. So, “sort array JavaScript”, “spin element CSS”, or “create router Vue.”
要学习的最大的事情之一是如何找到问题的良好答案或学习语言或库的新功能。 使用Google很重要,因此加入社区和订阅资源也很重要。 我通常使用的Google模板是“问题语言/框架/库”,请尽量少用单词,并且不带填充符。 因此,“排序数组JavaScript”,“旋转元素CSS”或“创建路由器Vue”。
When you’re learning, you will be building various projects to practice (and show off) your skills. Pick project ideas that are interesting to you — you will be much more likely to finish them and want to put work into them. Related: complete those projects. A few really good finished projects is way more impressive than a bunch of half-finished ones!
学习时,您将构建各种项目来练习(并炫耀)您的技能。 选择您感兴趣的项目构想-您将更有可能完成并想将其付诸实践。 相关:完成那些项目。 一些真正好的完成项目比一堆半完成的项目更令人印象深刻!
There are a lot of people learning to code out there. Don’t compare your progress to someone else’s. Instead, compare yourself to previous you and focus on your own growth.
有很多人在那里学习编码。 不要将您的进度与他人的进度进行比较。 相反,将自己与以前的人进行比较,并专注于自己的成长。
Doing quick code challenges can really help solidify the fundamentals. They are great for problem-solving and practicing for interviews. I post one on Twitter every day with the hashtag #CodingPuzzle if you want someone else to solve them with!
快速编写代码挑战确实可以帮助巩固基础知识。 他们非常适合解决问题和进行面试。 如果您希望其他人使用它们解决问题,我每天都会在Twitter上 贴上#CodingPuzzle标签。
"""Find the element in an array that only occurs oncefrom https://www.hackerrank.com/challenges/ctci-lonely-integer""" from collections import Counter
def lonely_integer(a): a_counter = Counter(a) for l, count in a_counter.items(): if count == 1: return l
Learning to program can be a really difficult process, so when you accomplish something, even if its small, celebrate it! I keep track of my wins in Google Keep so, if I have a bad day, I can come back to those wins and remember them.
学习编程可能是一个非常困难的过程,因此,当您完成某件事时,即使它很小,也要庆祝! 我会在Google Keep中跟踪自己的获胜情况,因此,如果我有糟糕的一天,我可以回到那些获胜者并记住他们。
Programming is really cool because you get to build things. I always come back to this Sandi Metz quote:
编程真的很酷,因为您可以构建东西。 我总是回到Sandi Metz的话:
Those of us whose work is to write software are incredibly lucky. Building software is a guiltless pleasure because we get to use our creative energy to get things done. We have arranged our lives to have it both ways; we can enjoy the pure act of writing code in sure knowledge that the code we write has use. We produce things that matter. We are modern craftspeople, building structures that make up present-day reality, and no less than bricklayers or bridge builders, we take justifiable pride in our accomplishments.
我们中那些致力于编写软件的人非常幸运。 构建软件是一种无罪的乐趣,因为我们可以利用自己的创造力来完成任务。 我们已经安排了生活,使两者兼得。 确保我们所编写的代码已被使用,我们可以享受纯粹的编写代码的乐趣。 我们生产重要的东西。 我们是现代手Craft.io人,他们构成了当今现实的建筑,而不仅仅是瓦工或桥梁建造者,我们为自己的成就感到无比自豪。
This all programmers share, from the most enthusiastic newbie to the apparently jaded elder, whether working at the lightest weight Internet startup or the most staid, long-entrenched enterprise. We want to do our best work. We want our work to have meaning. We want to have fun along the way.
从最热情的新手到看上去疲惫不堪的长者,所有程序员都可以共享这些资源,无论是在重量最轻的Internet初创公司还是在最稳定,根深蒂固的企业中工作。 我们要尽力而为。 我们希望我们的工作具有意义。 我们希望在旅途中玩得开心。
Sandi Metz
桑迪·梅斯(Sandi Metz)
If you liked this article, there’s a lot more where it came from! I send out a newsletter every week with my favorite links and what I’ve written that week. You can also follow me on Twitter to see my posts as they come out!
如果您喜欢这篇文章,那么它的来源还有很多! 我每周都会发送时事通讯,其中包含我最喜欢的链接以及该周我写的内容。 您也可以在Twitter上关注我 ,以查看我发布的帖子!
Originally published at zen-of-programming.com.
最初发布于zen-of-programming.com 。
翻译自: https://www.freecodecamp.org/news/my-best-tips-for-new-developers-advice-from-a-mostly-self-taught-software-engineer-9cb2f6238177/
电子工程师自学成才pdf