注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
一个月的时间上完了Udacity Data Structure and Algorithms Nanodegree 这个纳米项目,目前在等提交完最后一个LinkedIn修改项目等毕业证书,于是决定来写一下介绍、总结和心得,给想上这个纳米学位的同学们参考一下。
先说一下自己的背景:有编程基础但是从没学过数据结构和算法,于是乎初心是想找一个可以系统性地过一遍DS和算法的课程跟学。之前上过一半Berkeley的CS 61B,后来因为身体原因没有继续,也听过几节Coursera上普林斯顿的算法,后来还是决定先打好基础,先去学好数据结构再学算法来得稳一些,也更有动力跟下去。看到这个纳米学位有提供一个月免费的promo,所以就决定试试。事实证明一个月白嫖学完没问题,我自己学校还有别的课,所以大概每天早晚学4-5个小时,周末不定,也在一个月内学完了。
整体来说,对于已经有一定基础只想尽快上岸的朋友,不是很推荐。如果是想用免费一个月时间拿个纳米学位放领英简历的,可以考虑考虑。或者是像我一样完全没学过数据结构想找个课完全跟下来的,在你找不到其他合适自己背景的其他课程的情况下,也可以考虑。具体原因我一点一点捋在下面,感兴趣的话可以继续读。
先说整体课程结构
框架大概是 听一部分视频讲解基础概念、中间穿插一些小quiz,然后提供一些python practice problem题。讲课的视频挺短得,而且分得很细,有利于stay focus,我个人比较喜欢这种把复杂问题日常化的讲法,但有些人会觉得她讲得过于白话。
所有practice problem都有自带的test function可以帮助你检测自己写的对不对,也有答案可以参考。有些题目附带了video walk through the answer,但大多数时候只有简单的annotation.
个人感觉practice部分,对于初学者练习不是很友好,首先很多题他给的答案只有简单的几句注解,看不明白的话还得另去搜youtube找讲解,而且很多题就干脆就是LeetCode原题,把他放在这里完全就只是提醒你用什么解题思路而已。但这也同时强迫你在不借助其他工具的情况下去思考,而且印象会极其深刻。比如我最开始学heapify的时候就钻研了很久才自己写出来,但到后面heapsort的时候就会顺利很多。
所有纳米学位都提供student hub讨论和向advisor提问解惑的平台,我认为这也是最有用的部分之一,线上导师回答都挺快的,而且也有很多正在学习的学生会来回答你的问题。一起在student hub打卡问问题也是可以坚持下去的动力之一。我经常没事的时候点开他们po在community里的LinkedIn profile看看,然后发现这些人及优秀又努力,立刻就来动力了。
再说课程内容
前1/4在讲Python基础语法,相当于refresher,基本可以跳过。后面也有稍难的topic,像是scripting,但都是选修。
第二部分开始讲数据结构,几个常见的linkedlist, stack, queue, tree, map and hasing都有讲到。配合每部分都有相应的practice, 基本上都是用不同python内置结构搭建某种结构和他们的功能等等, like build a queue using a stack/python array。有时候也会给一些用某种特定的数据结构解决一道题的practice
第三部分开始讲basic algorithm,包括binary search, heap相关, sorting, faster divide and conquer. 有些算法对于我这种没有基础的人来说还是有些难的,比如红黑树的rotation。而且课程给的explaination我觉得过于简单了,聪明的人可能看一眼就明白了吧……像我这种看了很多别人讲解的视频才搞明白。从这里开始,我觉得没有讲解的题目变得非常鸡肋,因为概念讲得过于简单但题目非常challenging, 很容易陷入不思考直接看答案的情况。
第四部分是advanced algorithm,大概topic是greedy, graph, DP,最后project是implement A* algorithm(这个还有点意思)。每一个algorithm都是浅尝辄止,讲完基础定义后由浅到深implement几个题目,这些题目大多数都是之前解法的优化,或者是跟之前题目息息相关的,所以整体感觉没有练到特别多方面。想要自己练习的话还是得借助其他资源。
课程重点在于每个部分后的大project上。
数据结构部分的project主要考察灵活应用appropriate data structures to solve a problem。比如LRU Cache, Huffman Coding,用哪种数据结构store最节省空间,哪种在search的时候最快等等。
basic algorithm部分的project跟课程里面的练习题差不多,也是一些经典算法的衍生或变种,有规定time complexity
advanced algorithm的A* algorithm我觉得最有意思,整体也不是很难,跟着algorithm的解法步骤一步步跟下来就能很顺利完成。
最后讲讲自己的心得
整体学下来虽然有很多不满,但坚持总归是能学到很多东西的,我还是比较庆幸自己没有因为不满意practice的设置而放弃,因为越学越觉得有意思。对于我而言最大的收获就是在学习过程中一步步发现了自己的兴趣和弱项。比如我在做题过程中发现自己对route planning这类题目兴趣很高,就算写不出来也有很高的兴致攻克它,同时我也发现自己recursion学得不扎实,想不起来应用,也会花费很多时间去纠结如何写recursion的码。在这之后我会对自己学习编程有更清晰的规划和路径,知道自己该往哪个方向走,该强化练习哪部分,该拓展学习哪部分等等。总体而言,这个纳米项目虽然不是一门很深的课,但涉猎较广,对于基础薄弱的同学能学到不少东西。然后具体知识点能拓展到多深还是要看自己。
如果对大家有帮助的话希望可以加点米,谢谢Thanks♪(・ω・)ノ
|