如何成为嵌入式软件工程师
I sometimes tell folks that I learned to program because I wanted to become a tech entrepreneur and knew how difficult it was to find good developers. I discovered along the way that this is one of the worst reasons learning to program and not what was driving me.
有时我告诉人们我学习编程是因为我想成为一名技术企业家,并且知道找到优秀开发人员有多么困难。 一路上,我发现这是学习编程的最糟糕原因之一,而不是驱动我的原因。
My real motivation comes down to three fundamental characteristics of programming that make it so enjoyable.
我真正的动机归结于使程序如此令人愉快的三个基本特征。
Programming gives you the superpower to create. You can create a new program from scratch and all you need is a laptop. Most software for coding is open source and free. It’s a true superpower for creators.
编程使您拥有创造的超能力。 您可以从头开始创建新程序,只需要一台笔记本电脑。 大多数用于编码的软件是开源的,并且是免费的。 对于创作者而言,这是真正的超级大国。
Programming has a rapid feedback loop. Many skills in life are hard to measure. It can be tricky to know when you are doing something right or wrong. In coding, you can set up testing and get feedback on whether your code works or not in milliseconds.
编程具有快速的反馈循环。 生活中的许多技能很难衡量。 要知道什么时候做对或错是很难的。 在编码中,您可以设置测试并以毫秒为单位获得有关代码是否有效的反馈。
Programming knows no physical constraints. You can create software for a company that is thousands of kilometers away. Likewise, your customers can be living on the other end of the world and enjoy the program you have created. Programming can be a true equalizer.
编程没有物理约束。 您可以为相距数千公里的公司创建软件。 同样,您的客户可以住在世界的另一端,并享受您创建的程序。 编程可以是真正的均衡器。
No matter what your motivation is to get into programming, I wish someone had given me some direction on how to get started.
不管您从事编程的动机是什么,我都希望有人给我一些入门方面的指导。
首先学习原理 (Learn the principles first)
One mistake I made while becoming a software developer was to treat learning too superficial. It’s easy to conclude that you understand a topic or concept and jump to the next.
在成为软件开发人员时,我犯了一个错误,就是将学习视为过于肤浅。 很容易得出结论,您了解一个主题或概念并跳到下一个。
There are even some learning resources that emphasize practical learning so much that they encourage you to stay on the surface. There are some tips you can use to make sure you truly understand the content you are consuming:
甚至有一些学习资源过于强调实际学习,以至于鼓励您保持表面。 您可以使用一些技巧来确保您真正了解正在使用的内容:
从基础开始 (Start with the basics)
The pace in software development is rapid. Every day there are new frameworks being introduced that you are supposed to learn. Since it’s easy to measure, you might be convinced that a new library is faster and better than the one you are using.
软件开发的速度很快。 每天都会引入您应该学习的新框架。 由于它很容易衡量,因此您可能会相信一个新的库比正在使用的库更快,更好。
Resist the temptation to jump into these frameworks and learn the basics first. Pick one language (see tips which one to choose below) and truly understand it’s fundamentals.
抵制尝试跳入这些框架并首先学习基础知识的诱惑。 选择一种语言(请参阅下面的提示以选择一种),并真正理解它的基础。
Keep in mind that any framework or technology you use in the future is built on these fundamentals, so learning them will help you pick up and understand other technologies faster in the future.
请记住,您将来使用的任何框架或技术都基于这些基础知识,因此学习它们将帮助您将来更快地了解和理解其他技术。
复制你学到的东西 (Replicate what you learned)
Whichever content you consume, don’t try to copy it directly. When you want to use a snippet from a blog post, type it out yourself.
无论您使用哪种内容,都不要尝试直接复制。 如果要使用博客文章中的摘录,请自行输入。
Watch a video lesson to the end (they are usually only 10–15 min long) and then try to write the entire code you just saw without looking at it again. I even change variable names and other small details to make sure I can apply the concepts in my own projects later on.
观看视频课程直至结束(通常只有10到15分钟),然后尝试编写刚刚看到的整个代码,而无需再次查看。 我什至更改了变量名和其他小细节,以确保以后可以在自己的项目中应用这些概念。
不要害怕问你何时被困 (Don’t be afraid to ask when you are stuck)
The software engineering community is truly collaborative and welcoming. Don’t be afraid to post a question on forums like Stackoverflow where experienced software engineers can help you out.
软件工程界是真正的协作和热情。 不要害怕在Stackoverflow这样的论坛上发布问题,有经验的软件工程师可以为您提供帮助。
我应该学习哪种语言? (Which language should I learn?)
One of the first questions you probably have is what language to learn. The truth is that it doesn’t matter as much as you might think.
您可能会遇到的第一个问题是学习哪种语言。 事实是,这并不像您想的那么重要。
Programming languages have their differences, but especially as a beginner it’s more important to understand the fundamental principles in programming. You can then apply those principles to any other language.
编程语言各有不同,但特别是对于初学者来说,了解编程的基本原理更为重要。 然后,您可以将这些原则应用于任何其他语言。
One way to decide on which language to start with is to think of it like any other foreign language you might learn. You could learn Bavarian (yes it’s an actual language) and be able to communicate with about 14m beer-loving Germans. Or you might consider a more widely spoken language like English, Spanish, or Mandarin.
决定以哪种语言开头的一种方法是,将其与您可能会学习的任何其他外语一样思考。 您可以学习巴伐利亚语(是的,是一门实际的语言),并且可以与大约1400万喜欢啤酒的德国人进行交流。 或者您可能会考虑使用更广泛的语言,例如英语,西班牙语或普通话。
In programming it’s no difference. You have small, very specialized languages that nonetheless have a strong following. Jelly for example is a language designed to produce programs in the smallest possible number of bytes. It’s also an extremely weird language to read and can only be used for a small subset of specialized programs.
在编程中没有区别。 您有一些很小的,非常专业的语言,但是仍然有很强的追随者。 例如,果冻是一种旨在以尽可能少的字节数生成程序的语言。 它也是一种非常奇怪的语言,只能用于一小部分专门程序。
See the small code snippet below for printing out “Hello, World!” to the console with Jelly.
请参阅下面的小代码段,以打印出“ Hello,World!”。 Jelly转到控制台。
You are probably better off starting with a popular language. I would recommend you to start with either Python or Typescript.
从流行的语言开始,您可能会更好。 我建议您从Python或Typescript开始。
Python (Python)
Python is a very popular language and sort of a Swiss-army knife. It is used to write small scripts, web servers, and has become the standard for data science and machine learning programs. You will see that printing out a “Hello, World!” is much more readable:
Python是一种非常流行的语言,有点像瑞士军刀。 它用于编写小型脚本,Web服务器,并已成为数据科学和机器学习程序的标准。 您将看到打印出“ Hello,World!”。 更具可读性:
Python is known for being easy to learn and is often used in general introduction courses to programming as the go-to language. You will be able to find a job with many companies that use it in data science or as their backend language. Google, Spotify, Netflix, and many more use Python in many parts of their software products.
Python以易于学习而著称,通常在通用的入门课程中用作编程语言。 您将可以在许多将其用于数据科学或作为后端语言的公司中找到工作。 谷歌,Spotify的,Netflix和更多的使用Python在其软件产品很多地方。
打字稿 (Typescript)
Typescript is the language I use the most and it’s a controversial choice.
打字稿是我使用最多的语言,这是一个有争议的选择。
You might have heard of Javascript, the scripting language that powers the web. Javascript has since become the most popular programming language and conquered server development with NodeJS, desktop development like Electron and mobile development with projects like React Native. If you have used Slack on your laptop, the Facebook app on your phone, or visited AirBnB’s website, you have been using a product made with at least in parts Javascript.
您可能听说过Javascript(为网络提供动力的脚本语言)。 自此Javascript成为最受欢迎的编程语言,并通过NodeJS征服了服务器开发,通过Electron等桌面开发和通过React Native等项目进行了移动开发。 如果您已经在笔记本电脑上使用了Slack,在手机上使用了Facebook应用程序,或者访问了AirBnB的网站,则说明您所使用的产品至少包含部分Javascript。
So what’s Typescript then? As Typescript explains on their homepage:
那么Typescript是什么呢? 正如打字稿在他们的主页上解释的那样:
TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.
TypeScript是JavaScript的类型化超集,可编译为普通JavaScript。
It’s not its own language, but adds useful features to Javascript itself. It has been growing massively in popularity since Microsoft launched it in 2012:
它不是自己的语言,而是为Javascript本身添加了有用的功能。 自从Microsoft在2012年推出以来,它的知名度一直在Swift增长:
When you get started with languages like Javascript, you often miss out on some more advanced topics like types or object-oriented programming. By using Typescript from the very start you get a head start in writing clear and maintainable code.
当您开始使用Java语言之类的语言时,通常会错过一些更高级的主题,例如类型或面向对象的编程。 通过从一开始就使用Typescript,您就可以开始编写清晰且可维护的代码。
Having said this, there are many more courses and tutorials about Javascript out there. You will not have a hard time switching from Javascript once you are ready.
话虽如此,还有更多关于Javascript的课程和教程。 准备就绪后,您将不会很难从Java脚本中切换出来。
Speaking of which, where do you find courses to learn these languages?
说到哪个,您在哪里找到学习这些语言的课程?
在哪里学习成为软件工程师 (Where to learn to become a software engineer)
You probably searched the web already for resources, and there’s no shortage of them. From blog posts, YouTube tutorials to video courses and whole degrees, there is a plethora of content to get you started.
您可能已经在网络上搜索了资源,而且资源并不短缺。 从博客文章,YouTube教程到视频课程以及整个学位,都有许多内容可以帮助您入门。
So where should you start? It all comes back to your goals in learning to program. I will share some of the resources that I used along the way and when I would make use of them.
那你应该从哪里开始呢? 这一切都回到了您学习编程的目标上。 我将分享我在使用过程中以及何时使用这些资源。
The format that has worked the best for me is to take a structured video course in one topic, and then supplement with reading documentation and blog posts. Some other learners find the video format too slow and prefer to read everything.
最适合我的格式是在一个主题上参加结构化的视频课程,然后以阅读文档和博客文章作为补充。 其他一些学习者发现视频格式太慢,喜欢阅读所有内容。
学术课程 (Academic courses)
Both Coursera and edx publish academic courses from top universities that you can use to level up your knowledge. If you are serious about software engineering and you want to build up solid foundations, you can join one of their courses.
Coursera和edx都发布顶尖大学的学术课程,您可以用来提高自己的知识水平。 如果您认真对待软件工程,并且想建立坚实的基础,则可以参加其中的一门课程。
Many of them are self-paced, so you can take them on your own schedule. However, I found it a great motivation to take a course that has hand-ins at specific times and has a clear end in mind. Many of those courses will take you 4–6 months to complete.
其中许多都是自定进度的,因此您可以按照自己的时间表进行学习。 但是,我发现参加在特定时间进行插手操作并且心怀明确目标的课程是一个很大的动力。 其中许多课程将需要您4-6个月才能完成。
One great introduction to programming is the well-known CS50, Harvard’s introduction to computer science. It’s great for getting an understanding of computer science, although I found that it took a long time for me to get practical skills out of the course.
编程的一个很好的介绍是著名的CS50 ,这是哈佛对计算机科学的介绍。 尽管我发现花了很长时间才能学到实用技能,但对理解计算机科学还是很有帮助的。
Coursera has also a great selection of courses. I took several courses in data science from John Hopkins University and found them to be informative and challenging. However, if you are not using programming in your academic career there are better options to get you introduced into the field of data science.
Coursera也提供很多课程。 我从约翰·霍普金斯大学( John Hopkins University)修了几门数据科学课程,发现它们内容丰富且充满挑战。 但是,如果您在学术生涯中没有使用编程,那么就有更好的选择让您进入数据科学领域。
Udacity纳米度 (Udacity Nanodegree)
Udacity has specialized in providing technology education to get you job-ready. If you are aiming for a job in the tech industry they can get you there. I completed their Full Stack Web Developer Degree in about 5 months and was generally happy with the experience. The most valuable part of the program was the code feedback you get from their staff. It’s hard to find that in other courses.
Udacity专门提供技术教育,以帮助您做好工作准备。 如果您的目标是在科技行业中工作,那么他们可以助您一臂之力。 我在大约5个月的时间内完成了他们的Full Stack Web开发人员学位,并且总体上对这种体验感到满意。 该计划最有价值的部分是您从其员工那里获得的代码反馈。 在其他课程中很难找到。
One big downside with Udacity is its price. Taking part in a degree program will set you back several hundred dollars every month. If you have a clear plan to get hired at a large tech company and you can afford it, one of their programs might be right for you. There are however plenty of other great courses that will cost a lot less and provide comparable value.
Udacity的一大缺点是其价格。 参加学位课程会使您每个月损失数百美元。 如果您有明确的计划被大型科技公司聘用,并且您负担得起,那么他们的其中一项计划可能适合您。 但是,还有许多其他很棒的课程,它们的成本要低得多,并且具有可比的价值。
乌迪米 (Udemy)
Udemy is my personal favorite. It is unique in that it is a platform where any person can submit a course for almost any topic. The students then rate the experience with their courses, and the best ones bubble up to the top.
Udemy是我个人的最爱。 它的独特之处在于,它是任何人都可以提交几乎任何主题的课程的平台。 然后,学生对他们的课程体验进行评分,最好的课程会升至最高。
This leads to a large available selection of courses, from beginner boot camps to specialized topics. Surprisingly, the quality of the top courses on Udemy is very high.
从新手训练营到专门的主题,这导致了课程的广泛选择。 令人惊讶的是,乌迪米(Udemy)上最热门课程的质量非常高。
The best part is that (rather weirdly) Udemy courses are constantly on sale. You can get a course that has 40+ hours of high-quality content for $20 USD or less.
最好的部分是(相当奇怪的)Udemy课程一直在销售中。 您只需花费20美元或更少的费用,即可获得一门包含40多个小时的高质量内容的课程。
I got most of my knowledge from a few instructors on Udemy. Their courses are practical but also go beyond the basics. Here are the ones that I would recommend when starting out:
我从Udemy的几位老师那里获得了大部分知识。 他们的课程既实用,又超越了基础。 以下是我刚开始时建议的建议:
This one is by my two favorite instructors on Udemy, Colt Steel, and Stephen Grider. They have put together a comprehensive introduction to learning Javascript and web development. You will learn the basics of programming and the Javascript language all the way up to creating a complete web application from scratch. This is a great starting point if you are interested in web development.
这是我最喜欢的两个Udemy指导老师Colt Steel和Stephen Grider的指导。 他们对学习Javascript和Web开发进行了全面的介绍。 从头开始创建完整的Web应用程序之前,您将学习编程的基本知识和Java语言。 如果您对Web开发感兴趣,这是一个很好的起点。
The title of the course is actually misleading. It will not only teach you Typescript, but also a lot of the principles of object-oriented programming. If you want to learn Typescript, I would start with this course.
该课程的标题实际上是令人误解的。 它不仅会教您Typescript,还会教很多面向对象编程的原理。 如果您想学习打字稿,我将从本课程开始。
Andrei Neagoie has some strong courses in Python programming. This course will get you up to speed with the language and many applications quickly. It’s a great place to start your Python journey here. Note also that advanced topics like object-oriented and functional programming paradigms are included.
Andrei Neagoie在Python编程方面有一些很强的课程。 本课程将使您快速掌握语言和许多应用程序。 这是在这里开始Python旅程的好地方。 还要注意,还包括诸如面向对象和函数式编程范例的高级主题。
Machine learning is a popular topic and this course will teach you the basics with the Python programming language and frameworks like Tensorflow.
机器学习是一个受欢迎的主题,本课程将教您使用Python编程语言和Tensorflow等框架的基础知识。
I find data science and machine learning harder to get into than web or mobile app development. You benefit from having a solid background in mathematics and statistics, even though it is not required to take the course.
我发现,数据科学和机器学习比Web或移动应用程序开发更难涉足。 即使不需要参加该课程,您也会从数学和统计学的扎实背景中受益。
Two areas where self-taught or boot camp software engineers often trail behind computer science majors is that of algorithms and data structures. Unfortunately, those are often exactly the topics brought up at technical interviews in a job application process.
自学或新手软件工程师经常落后于计算机科学专业的两个领域是算法和数据结构。 不幸的是,这些通常正是工作申请过程中技术面试中提出的主题。
Even though you might not immediately see the practical value of those topics, they are well worth investing in. I am learning more about them not because of interview preparation, but because they take my programming skills to the next level.
即使您可能不会立即看到这些主题的实用价值,也值得投资。我之所以学习更多有关这些主题,不是因为准备面试,而是因为它们使我的编程技能更上一层楼。
Understanding how you write performant code is a key skill and this course will get you there.
了解如何编写高性能代码是一项关键技能,本课程将带您到达那里。
Wherever this journey takes you, enjoy the process, and share it with others. I am looking forward to what you are creating next.
无论此旅程带您到哪里,都可以享受其中的过程,并与他人分享。 我期待着您接下来的创造。
Originally published at https://johannes.co.
最初发布于https://johannes.co 。
翻译自: https://medium.com/swlh/how-to-become-a-software-engineer-991c0c688d5b
如何成为嵌入式软件工程师