面向计算机科学的数理逻辑
As we approach late august, the time is coming for college classes to kick off again. Whether your school is online or in-person, I believe there’s a handful of things you can do to make this year a success. This article is a collection of tips for computer science majors to help them have a successful year. This information has been curated from my four years of learning at university, along with various pieces of advice from other students, graduates, and professors.
随着八月下旬的到来,是时候重新开始上大学了。 无论您的学校是在线的还是面授的,我相信您都可以做很多事情来使今年取得成功。 本文是为计算机科学专业的学生提供的一些技巧,以帮助他们度过成功的一年。 这些信息来自我在大学四年的学习,以及来自其他学生,毕业生和教授的各种建议。
1.您不需要知道如何编程 (1. You Don’t Need to Know How to Program Yet)
And here’s proof!
这就是证明!
Trust me, you don’t need to know how to program going into a CS degree. Hell, the degree wouldn’t exist if everyone was expected to come in knowing what they are doing already. Want proof of that? Here’s Exhibit A:
相信我,您不需要知道如何进行CS学位编程。 地狱,如果希望每个人都知道自己已经在做什么,那么学位就不会存在。 想要证明吗? 这是展览A:
This is my first personal project, that I made halfway through my freshman year. It’s a super simple sorting program — like 100 lines of code simple. But at the time I was super proud of it and thought I’d discovered some amazing new algorithm. The reason I’m sharing this is that the fact that I was proud enough of this tiny project to put it on Github should show how little I knew going into my CS degree!
这是我大一的一半,这是我的第一个个人项目。 这是一个超级简单的排序程序,就像100行简单的代码一样。 但是当时我为此感到非常自豪,并以为自己发现了一些令人惊奇的新算法。 我之所以这样分享,是因为我对这个小小的项目感到骄傲,可以把它放到Github上,这一事实表明我对进入CS学位的了解很少!
Now, just over three years later, I have a mobile app launched on the app store and have done various other medium-sized projects over the past two years. The path from bubble sort to app store can be a hard one, but trust me it’s attainable. School will do a good job of teaching you the basics, so don’t worry about how much you know going into the major. After you learn the fundamentals, it’s up to you to gain more knowledge before you graduate. The rest of these tips aim to help you do that.
现在,仅仅三年多了,我在应用商店上发布了一个移动应用,并在过去两年中完成了其他各种中型项目。 从冒泡排序到应用商店的路径可能很难,但请相信我是可以实现的。 学校会很好地教您基础知识,所以不必担心您对专业的了解程度。 在学习了基础知识之后,您才有可能在毕业之前获得更多的知识。 这些技巧的其余部分旨在帮助您做到这一点。
2.乘风破浪精通 (2. Ride the Wave to Mastery)
![Image for post](https://miro.medium.com/max/9999/1*9ZbCv6O3Sr7x6d3lt3uNRA.png)
If you’re like me, you constantly feel like you’re in one of these two camps as you embark on your journey. Although it’s pretty awesome to feel like a god all the time, it’s not practical and you’re bound to get stuck over and over again.
如果您像我一样,那么在踏上旅途时,您会不断感觉自己正处于这两个营地之一。 尽管一直感觉像上帝是很了不起的,但它不切实际,而且您肯定会一遍又一遍地陷入困境。
I like to think of this paradigm as just riding the wave to mastery. You have to ride the ups and downs, but what you’ll find is the general long-term trend will be an upward slope to mastery as you learn more things.
我喜欢将这种范式视为驾驭精通。 您必须驾驭跌宕起伏,但是随着学习更多的东西,您会发现总体的长期趋势将是精通掌握。
My advice here would be to not get discouraged during the hard parts of the learning process. It takes a long time to learn these skills, so just relax and ride the wave.
我的建议是不要在学习过程中遇到困难。 学习这些技能需要很长时间,因此只需放松并乘风破浪即可。
3.公开学习 (3. Learn in Public)
This is a concept I’m trying to do more and more. It’s the idea that whenever you’re learning something new you should do it in a public context. So, if you’re developing an app, build it in a way where others can follow your journey. You can do this by posting a weekly blog on medium or dev.to, posting a daily update on Twitter, or even making a YouTube channel and sharing your learnings there.
这是我正在尝试做的越来越多的概念。 它的想法是,每当您学习新知识时,都应该在公共环境中进行。 因此,如果您正在开发应用程序,请以其他人可以跟随您的旅程的方式来构建它。 您可以通过以下方式来做到这一点:在medium或dev.to上发布每周博客,在Twitter上发布每日更新,甚至制作YouTube频道并在此分享您的经验。
This has two benefits:
这有两个好处:
Employers love this. Companies know that no intern is going to be a master of their craft and that’s not what they’re looking for. Companies are looking for someone who’s good at learning, good at communicating, and passionate about what they do. There’s no better way to demonstrate these qualities than having a repository of your thoughts and saying “Look — this is everything I’ve learned this past year.”
雇主喜欢这个。 公司知道没有实习生会精通手艺,这不是他们想要的。 公司正在寻找一个善于学习,善于沟通并且对自己的工作充满热情的人。 拥有这些想法并说“看,这是我去年学到的一切”,没有比这更好的方法来证明这些品质。
- This will make you a better learner. Having a set time each week where you sit down and reflect on what you learned, and then sharing that with the world, helps you solidify that knowledge. It’s also very motivating to see other people engaged in the problems you’re working — it can give you the drive to keep going. 这将使您成为一个更好的学习者。 每周有固定的时间坐下来回顾自己学到的知识,然后与世界分享,可以帮助您巩固所学的知识。 看到其他人参与您正在解决的问题也非常有激励作用-它可以带给您不断前进的动力。
4.您需要一个个人网站 (4. You Need a Personal Website)
This is key. If you’re going to learn in public it’s a good idea to make a personal website that can give people one central place to view all the cool things you’re up to. This is also a great programming project, because it’s something that you can make as simple or as complicated as you want and once you finish it you can easily share it with the world.
这是关键。 如果您要在公共场所学习,最好创建一个个人网站,使人们可以在一个中央位置查看您想做的所有有趣的事情。 这也是一个很棒的编程项目,因为您可以根据自己的意愿使它变得简单或复杂,一旦完成,您就可以轻松地与世界分享。
Bonus Tip: Don’t be a perfectionist when building your website. I’ve redone my website three times in three years and plan to redo it again in the near future. It’s more important to have a website than to have a perfect one.
温馨提示:建立网站时不要成为完美主义者。 我已经在三年内重做了三次网站,并计划在不久的将来再次进行重做。 有一个网站比拥有一个完美的网站更为重要。
I have some classmates who built theirs with plain HTML and it works great! I have professors whose websites are made in plain HTML. If you don’t have an interest in design, making it minimal and purely functional is a great path to take.
我有一些同学使用纯HTML构建他们的同学,效果很好! 我有教授的网站使用纯HTML制作的教授。 如果您对设计不感兴趣,则使其最小化和纯功能化是一条不错的选择。
5.利用学生的津贴! (5. Make Use of Student Perks!)
Take advantage of all your student discounts! You can ride these discounts far and probably never have to pay for any cloud-hosting before you graduate. You can find these deals everywhere, but my favorite place to view student perks is Github Student Developer Pack. Some of my favorite deals from this:
利用您所有的学生折扣! 您可以享受这些折扣,而且毕业之前可能永远不必支付任何云托管费用。 您可以在任何地方找到这些优惠,但是我最喜欢查看学生津贴的地方是Github Student Developer Pack 。 我最喜欢的一些交易:
6.了解三种计算机科学课程之间的区别 (6. Learn the Difference Between the Three Types of Computer Science Classes)
The computer science major has three different types of classes. It’s important to know the difference between these because some of these areas may not be as interesting to you and that’s OK.
计算机科学专业有三种不同类型的课程。 重要的是要知道它们之间的区别,因为其中一些领域可能对您而言并不那么有趣,这没关系。
算法课程 (例如:离散数学,有限自动机,数据结构) (Algorithm courses (for example: discrete math, finite automata, data structures))
These classes are what people are talking about when they say computer science has a lot of math in it. These classes are similar to math classes and teach you more about the theoretical side of computer science. They’ll teach you how to develop algorithms, how to write proofs, data structures, and more. If you love these classes they can be a path towards grad school, a PHD, teaching, or research fields.
人们说计算机科学中包含很多数学时,它们就是在谈论这些课程。 这些课程与数学课程相似,可以教给您更多有关计算机科学的理论方面的知识。 他们将教您如何开发算法,如何编写证明,数据结构等。 如果您喜欢这些课程,它们可能是通往研究生院,攻读博士学位,教学或研究领域的途径。
硬件/低级课程(例如:操作系统,计算机网络,计算机体系结构) (Hardware/low-level courses (for example: operating systems, computer networks, computer architecture))
These classes teach you what’s going on internally in a computer. You’ll learn things like CPU scheduling, networking, assembly programming, operating systems, and permissions. If you like these classes, this can lead you into a career doing computer engineering, robotics, or OS design.
这些课程教您计算机内部发生的事情。 您将学习诸如CPU调度,联网,汇编编程,操作系统和权限之类的知识。 如果您喜欢这些课程,则可以将您带入从事计算机工程,机器人技术或OS设计的职业。
编程课程 (例如:软件分析和设计,软件工程) (Programming courses (for example: software analysis and design, software engineering))
These courses will teach you how to write software. In these classes, you’ll learn object-oriented design, design patterns, databases, front end design, Git, project management, and more. If you like these classes, they can lead to a career in web design, game development, back end engineering, software engineering, and more. There are too many options to list.
这些课程将教您如何编写软件。 在这些课程中,您将学习面向对象的设计,设计模式,数据库,前端设计,Git,项目管理等。 如果您喜欢这些课程,他们可能会导致您从事网页设计,游戏开发,后端工程,软件工程等工作。 列出的选项太多。
All of these classes are important. You’ll find that the concepts of one will tie into another, so pay attention to everything. You might first be introduced to a hypothetical concept in your algorithms class (like big-O notation), then later see it cropping up in a programming class (For determining the best way to structure your SQL query). That’s typical and it’s the reason all these classes exist.
所有这些类都很重要。 您会发现一个概念将彼此联系在一起,因此请注意所有事项。 您可能首先在算法类中引入了一个假想的概念(例如big-O表示法),然后在编程类中看到了它(用于确定构造SQL查询的最佳方法)。 这很典型,这就是所有这些类都存在的原因。
Bonus Tip: Don’t load up your schedule with too many of onetype of class in the same semester or you might get overwhelmed with too much of the same type of workload. This depends on the specific class, but it’s generally a good rule to follow.
温馨提示:不要在同一学期中用太多的一种类型的课程来加载您的日程安排,否则您可能会因为太多的相同类型的工作量而感到不知所措。 这取决于特定的类别,但是通常遵循一个好规则。
7.尽早完成项目和实验室 (7. Complete Projects and Labs Early)
Some courses can be very project-based. Each of my programming-focused courses had about eight labs and five or six projects of varying difficulty. This can be super stressful if you leave them to the last couple of days, especially considering you probably don’t know what you’re doing.
有些课程可以非常项目为主。 我每门以编程为重点的课程都有大约八个实验室和五个或六个难度不同的项目。 如果您将其留给最后几天,这可能会带来极大压力,尤其是考虑到您可能不知道自己在做什么。
It helps to develop a pattern. I eventually got a pattern down of trying to complete projects the weekend before they were due — this helped a lot. This gives you the ability to step away and refresh your brain, then come back and tackle a problem later. I still do this today!
它有助于发展模式。 我最终在尝试在到期之前完成项目的过程中陷入困境–这很有帮助。 这使您能够离开并刷新大脑,然后再回来解决问题。 我今天仍然这样做!
8.学习命令行 (8. Learn the Command-Line)
![Image for post](https://miro.medium.com/max/9999/1*ETG7ERNQg7pYz2aM1BAzqA.png)
Mastering the Unix command-line is one of the most practical skills you can learn in college. You should learn how to create, edit and delete files, navigate directories, move files around, edit documents with vim, and shell into other computers. This might not seem like the most important thing to learn at the time, especially if you’re thinking “No but I don’t need a command-line for X”, but the fact is that everyone will need the command line to use Git repositories, ssh into your production environment, etc. It’s unavoidable.
掌握Unix命令行是您可以在大学中学到的最实用的技能之一。 您应该学习如何创建,编辑和删除文件,浏览目录,移动文件,使用vim编辑文档以及将shell移植到其他计算机中。 这在当时似乎并不是最重要的事情,特别是如果您在考虑“不,但我不需要X的命令行”,但是事实是每个人都需要使用命令行Git储存库,ssh到您的生产环境等。这是不可避免的。
9.每学期建立一个“顶点项目” (9. Build a “Capstone Project” Each Semester)
This has been my favorite way to work on my programming skills. After each semester when I’m on Christmas or summer break I’ll build a “Capstone Project” that solidifies everything I learned. This is a great way to stay in the habit of programming, build your resume, and build something that you actually want to use!
这是我最喜欢的编程技能工作方式。 在每个学期结束后的圣诞节或暑假,我将建立一个“顶峰项目”,巩固我所学到的一切。 这是保持编程习惯,构建简历以及构建实际想要使用的东西的好方法!
One of my favorites of these projects is my Spotify web app that lets me view my most listened-to tracks and artists:
这些项目是我最喜欢的项目之一,是我的Spotify网络应用程序,可让我查看我听得最多的曲目和艺术家:
![Image for post](https://miro.medium.com/max/9999/1*nHYTqQQhqdKcKS4IaK-25Q.png)
Doing projects you’re interested in will mean you want to finish it. So my recommendation is to build something that you want to use. Even if it already exists, that doesn’t matter — just build what you would use.
做您感兴趣的项目意味着您要完成它。 因此,我的建议是构建您要使用的东西。 即使已经存在,也没关系-只需构建您要使用的内容即可。
10.实习是可以实现的 (10. Internships are Attainable)
The job environment might be changing due to COVID, but trust me there will still be internships available. The key is to know where to find them and how to have the skills they’re looking for in candidates. If you do the other items on this list, such as learning in public, having a personal website, and building capstone projects, you’ll be an attractive intern no matter what year you are.
由于COVID,工作环境可能正在改变,但是请相信我,仍然会有实习机会。 关键是要知道在哪里找到他们,以及如何在求职者中拥有他们所寻找的技能。 如果您执行此列表中的其他项,例如在公共场所学习,拥有个人网站和建立顶峰项目,那么无论您在哪一年,您都将是一个有吸引力的实习生。
Here are some other tips I have for getting internships:
这是我获得实习生的其他一些技巧:
- Get out of the mindset that you’re not prepared for an internship. Everyone is still learning through college so let the companies be the judge of if you’re prepared or not — don’t make that decision for them. 摆脱不准备实习的想法。 每个人都还在上大学,所以请让公司来判断您是否准备就绪-不要为他们做出决定。
- There are always internship opportunities popping up. I started applications around October last year and got an internship in November. Some students started even earlier. The summer before that I got my internship during finals week right before summer. New opportunities are popping up all the time, so constantly be on the lookout throughout the school year. 总会出现实习机会。 我于去年10月左右开始申请,并于11月获得了实习机会。 一些学生甚至更早开始。 在那之前的那个夏天,我在夏天之前的决赛周获得了实习。 新的机会一直在涌现,因此在整个学年要经常注意。
Use state-funded internship boards if available. If you live in Minnesota, https://scitechmn.org/ is a great resource that I recommend. Local internship boards have a smaller competition pool and give you a more personal application process than something like Indeed.
如果有的话,请使用国家资助的实习委员会。 如果您住在明尼苏达州,我建议您访问https://scitechmn.org/ 。 与Indeed相比,本地实习委员会的竞争池更小,并且为您提供了更为个性化的申请流程。
谢谢阅读! (Thanks for Reading!)
I hope you found this valuable. If you have any more tips please share them in the comments!
希望您觉得这很有价值。 如果您还有其他提示,请在评论中分享!
面向计算机科学的数理逻辑