CS Requirements and Resources

有感于国内令人发指的CS教育,决定自学为主。
主要资源是四大的比较完整的课程:video+reading+lab
video比较费时间,而且我看视频总是来不及反应,好像不太适合我,所以一般只在看不懂材料时去针对性地看看视频。(当然一些讲得非常好的视频除外)


Basics

Awesome CS Courses provides a list of courses.

  • Programming Languages: 精通C,熟悉1~2门(Java/Python/C++/...),了解一门(Haskell/Rust/...),掌握debug技巧
  • Tools/Frameworks: 熟悉Linux系统的各项操作,最好看下源码,掌握Git等工具和框架
  • Math: Linear Algebra/Probability/Statistics/Combinatorial Mathematics/Discrete Mathematics/Calculuss...现用现学吧。。
  • Core Courses: DS/Algorithms/OS/Networking/DB/Computer System/Compilers...

Coding Interview

  • 数据结构
    哈希表、堆、AVL、链表动手实现一遍;
    vector加倍扩容机制,B树啥的都能扯扯~
  • 常规算法
    这方面很弱很弱,要勤奋练习,经常性在blog分析总结吃透(穿透)做过的题目
    复杂度最优,Google Doc/白纸练习,Bug-Free
    easy 5min medium 10~15min hard 15~20min
    G实习:中文2轮:45min, 自我介绍+warm-up+hard, 1~2道medium题,白板
    G校招:4轮(3中+1英),同上
    不要抱着可能撞到原题的心态去准备,反复练习提升自己的能力,需要有较多的训练量。
    Python快速过,Java也行,千万不要用C++浪费生命!!!
    《剑指offer》 67/67
    Cracking the Coding Interview 40+/109
    Leetcode 290+/700+
    牛客笔试题
  • 设计题

Projects/Paper

  • 实习项目
  • 学校大作业
  • 兴趣项目:AutoML for imbalanced data, CMU 15-319, CS231n的3个小项目
  • 开源项目
  • AutoML:学完公开课

Specific Areas

选一个前沿的、不太讨厌的方向AutoML,研究研究,做点小项目

  • Systems:Architecture/Networks/Security/Databases/Design Automation/Embedded & Real-Time Systems/High-Performance Computing/Mobile Computing/Measurement & Perf. Analysis/OS/PL/Software Engineering。coding要求高,项目周期长、辛苦、风险大
  • AI:CV/NLP/ML&Data Mining/Web&Information Retrieval
  • Theory:Algorithms & Complexity/Cryptography/Logic & Verification
  • Interdisciplinary Areas:Comp. Bio & Bioinformatics/Computer Graphics/Economics & Computation/Human-Computer Interaction/Robotics/Visualization

Others

  • GPA/数学/英语
  • 比赛
  • 沟通交流
  • 面试:如何学习设计模式?
    面经技巧只是锦上添花,最重要的还是及格的实力。nothing replaces hard work.
    面经是告诉你这家公司面试的时候喜欢问哪些知识,而不是告诉你他们喜欢问哪些特定的问题。
    更是一次需要充满着沟通与交流的谈话,让面试官认为他/她愿意成为你的同事
  1. 问清题目:数据范围是多少?这个数组的大小范围是多少?能不能给个样例?如果输入是这个,那输出应该是什么
  2. 确认函数签名
  3. 确认思路:修改输入数据
  4. 确认corner case处理方式
  5. 编码过程中不断交流
  6. 主动测试:写完后不要急于告诉面试官写完了,手动跑一个样例:在屏幕上写出中间变量的当前取值,然后用鼠标光标告诉面试官现在程序跑到了哪一行代码,当前各个变量的取值是多少等等
  7. 主动分析复杂度
  8. 讨论算法的trade-off

说出自己的insight:cache不友好

项目
背景主要包括场景、问题定义、需求、自己负责的部分扮演的角色等等。
指出项目中的困难点和解决方案

论文
research的背景
先拿一些自己不target的公司练练手

虽然我不太懂,但是可以试着说一下
获得监督信息与正反馈
模拟面试

MOOC TODO LIST

It is very important to take classes around my future work. It doesn't matter you learn it slowly, the most important part is that you take it seriously and build a solid foundation. 根据大佬们的经验,一门课大概要花150-300小时,每天2小时至少也要2个半月,所以千万千万不要着急,不要急于求成,总想着完成任务,多多反思自己到底学到了什么。

  1. Deep Learning Stanford

DONE LIST

Count the courses I've taken so far:

  1. Introduction to Computer Science. Harvard University
    "This is CS 50". It should be the first class of CS rather than Haoqiang Tan's C Programming Language.
  2. Linear Algebra. Massachusetts Institute of Technology
    If you want to learn Linear Algebra, just follow this one and you'll be fine.
  3. Mathematics for Computer Science. Massachusetts Institute of Technology
    Very interesting course but I only took several lectures. SAD~
  4. Data Structures. University of California, Berkeley
    Strong recommend for Data Structure. You'll pick up Java from the interesting projects.
  5. Introduction to Computer Systems. Carnegie Mellon University
    If you only want to take one system course, then select this one. But I haven't finished the whole lectures and labs. SAD again~
  6. Introduction to Database Systems. Carnegie Mellon University
    Hard for me. Just finished lab1. I'll come back one day~
  7. Machine Learning. Stanford University
    It's almost the first course I took after I found the true CS courses. But I forgot a lot. Sorry Andrew~
  8. Positive Psychology. Harvard University
    When I start to be anxious or depressed I'll go and find the lecture. Tal is an amazing teacher and I'm sure you'll become happier.

How to learn

Recently I've changed my way to learn new things. Previously I just wanted to understand the new things and tried to memorize all the details of a specific problem, or just translated others' materials into my words, which melted my brain and showed a very low efficiency. The reason why I learn things this way (passively) is mostly due to the Chinese's cramming education. But for me, heuristic teaching (actively) is more appropriate. The specific problem/model/algorithm is important, but the motivation is much more important. Everything has its motivation. So I decide to write my blogs with the following components:

  1. Motivation: What problems do we meet? Why propose this one?
  2. Details: Mathematical derivation or tricky things.
  3. Example: Use a handy example to illustrate.
  4. Implementation: Code it out or use it to solve the problem.
  5. Properties: When should/can we use the method? When shouldn't/can't? Why? What's the benefits and drawbacks if we use it?
  6. Can we make some improvements on the off-the-shelf method for a specific problem?
原文地址:https://www.cnblogs.com/EIMadrigal/p/11681517.html