希望你能选一个你喜欢,且能给你带来好的就业保障的专业。$ M% n% Y6 d" c9 i P
% R' o5 X- G* N5 l( ~2 V; L
口腔是你真正喜欢的专业吗,你深入了解过这个专业没?别重新考进去之后,你发现和你想要的也不一样,避免变成西西弗斯的故事。
5 w1 {3 @8 n2 t4 {0 ? D+ S我来给楼主一个新的选择方向吧:
D/ T* P) A2 A& Y- D) H* s( p0 M选择可分流的专业里面和CS最接近的一个,最好就是要求有很多编程要求的那个方向。' {' C: K6 O( }! h
1 ~+ ^6 I! T% B) u: l5 z6 @
然后保持你的高GPA,本科毕业就申请出国读CS。0 Y( b6 G( T% r/ C! E) [' R
同时自学CS的核心内容,然后利用课余时间多写计算机相关的项目,当然也可以在接下来的专业里面,联系相关实验室,能参与他们编程相关的项目就更好了。 r9 ~& S9 s! p8 |' a- Y
君不见,很多CS编程牛B的,其实都是自学的,北美更是全民转码,我就不细说了。其实不少人,并没有系统上过课,但不妨碍他们通过刷题,刷CS相关的项目,找到一份温饱线以上的工作。& J% S/ \/ j3 m8 l( ^, N! `) P
我觉得复读不是好选择,因为你不能保证复读就一定能去你想学的口腔专业,高考一年一个样,你不知道明年又是个什么样的行情。3 n G! R, f; ^- N
4 W0 r5 a" Q! I$ o其他答主也说了,求学或是追求事业,往往都不是一步到位的。而且呀,你现在学一些非CS的专业,能培养你不少CS之外的思维。将来你要是通过自学进入CS行业,没准你会有更多的机会。因为你会跳出框子看问题。也可以算是塞翁失马呢。
8 m4 r y4 p' `/ ^, M自学CS的话,你就去问一下你学校的CS系的同学或是老师,搞一份他们的培养计划,他们的数学物理知识的课程,你也是一样要学的,这些不用刻意准备。就看他们学哪些计算机相关的课程。
9 X0 N+ b: C7 r/ [$ E据我所知,大学的计算机课程,最核心的就是这些课:数据结构和算法,操作系统,组成原理,网络系统,数据库系统。. K( c& F$ r) {6 w
; H, j* k! c+ }1 v现在的学生很幸福的。还记得之前一个问题问,如何看待大学生从B站毕业?问题是说很多人都是通过B站来学习,复习考试而毕业。
# @7 w: X4 ?9 ~( m6 y ?我想说的这,正是有了B站类似的这些平台,可是给我们带来了超级多的好处。以前想学好学校的资源,我们最多估计就是看看人家上课用的书。现在好了,书我们可以买到,课程也直接搬到了网络上了。只要你愿意学习,国内外顶尖大学的无价学习资源尽在你手指翻滚之间,别提有多方便。
# @; ?; \$ Y/ T. W; }; y更别说MOOC平台上茫茫多的优质网课,等待着大家的认真学习。" N6 E" Q. r! B9 \
这里我就强调一下,我们所在的这个时代,可以选择的东西太多了,诱惑了边得触手可及,一定要有一个详细可行的机会,学哪些课程,哪些学校比较好,每天学多久这样的事情,一定要有一个明确的目标。千万千万别听这个说那个课程好,就想跟着学一波。另外一个人说,哪里又来一个课程很不错,你又想学。
* \5 p* ]4 K; n/ Q+ Z% V一定要好好规划,并执行好自己的学习目标,有的放矢。
5 r$ `: \! Q+ K$ u+ r5 { H0 n总之,就是保证高GPA,同时别放松CS的学习,然后还有一点就是准备托福,GRE,如果你选择出国的话。8 T+ Q J: d. k- O ?) c8 q( {
其实自学CS也完全能在国内找到一份很不错的工作的,这就要看你个人的选择了。
$ u% k9 ^; @( m! \<hr/>自学CS的话,里面最最重要的课程就是算法和数据结构了,尤其是你打算来美国读CS的研究生的话,这两门课可以说是找工作的分水岭。' o. e- k8 ~3 a F! {* d; t
我在这里就分享一下我自己是如何自学这两门课的。其他的计算机科目,你可以借鉴类似的方法。
$ Z& a ^* Z) [' D) G) u8 |- k下面的内容来自回答:; v+ H7 T0 M) _; S
<hr/>既然想要系统地掌握算法和数据结构,那自然是要看书,上课,和练习相结合。- b7 p$ O% ~; r2 ^" J
三管齐下,缺一不可!
% w3 @- P J3 p% o: V( u所以我从三个方面来讲一下。先是书籍推荐,再是网课选择,最后是练习平台。* N/ [% Q% D- b! T% U0 d* _
只有转化成了你代码的算法和数据结构,才是掌握了的算法和数据结构!0 E$ P9 `& M% F- v! _. _3 ~' } y3 ]
<hr/>先来看有哪些书籍推荐4 [0 p/ Y2 z# x+ v. b* z& n ~7 d
, E; s& v. A- y书挺多,但经典的也就那么几本,而且我建议选定一本之后,看多遍。而不是看好几本书,每一本都走马观花过一下。) a* {% ^' R t% `- p
首先是算法方面,算法和数据结构是计算机学习的基石。无论你学习计算机的任何方向,没有扎实的算法和数据结构,肯定学习起来就捉襟见肘了。
7 q- y2 _. C$ b) T1 s3 e9 K9 Z6 k我自己非常喜欢的普林斯顿算法红宝书 第四版,这本书是普林斯顿超级大神教授Robert Sedgewick的神作,该书还有配套的MOOC课程,以后有时间再写网课了。该书是特别棒的算法和数据结构的教程,全书提供Java的实现,而且大部分内容也放在了本书的配套网站上:https://algs4.cs.princeton.edu/home/ 本书的优点是会把算法详细的过程掰开揉碎地讲明白了。书里面有大量的配图,更不说配套网站上的ppt,简直就是艺术。一句话,1万分推荐。就一个缺点,没有讲动态规划(DP),所以我在下面也推荐一些涉及到DP的书籍。你认真读此书的话,会发现很多大公司的面试题就来自它的习题里面。
2 E4 c3 q6 c& C" O3 b: V: Y( X. I w" W4 s
+ [8 K1 d, m7 k4 F) N7 B/ V8 `: c
( Z% i/ t* K( p J% u还有另外一本算法神作就是算法设计手册了。这一本则是把算法分类了,还提供了特别多适用的算法应用场景,让读者知其然,并知其所以然。这本书的数和图部分,还有递归回溯,是特别多人拍手称赞的地方,值得认真看三遍。这本书就讲了第一本里面遗憾缺失的DP。总之,这两本都是超级强推。5 x- c$ P* g6 `6 r
1 S4 R5 U0 X( V. @ X) C
5 Q4 V9 v! v# e8 _
6 q7 E# D9 F. l. `" ^
前Google大佬,Steve Yegge非常推荐的计算机书籍之一:
2 v+ y7 _& S$ O* k! f( s" i* r, J# I5 ~) n* R6 y% x1 E( s5 K" v/ M6 ^, S; e" C
# w6 ^8 |' C k6 `有时间的小伙伴,他的这篇博客很值得一读:http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html。 Google的Interview Guide,很多就出自这篇博客。. t# c+ l* t: l: d$ s
提到算法,肯定会提到算法圣经之算法导论,这本书是算法百科全书,优点是全,缺点是太全太厚,数学太多了。是很好的参考书,但不适合短期突击学习。感兴趣的读者可以挑战一下。
5 s' j; c: V- n8 D0 w. i$ U1 i9 j, D6 W- v& S
n( {* X" ]& f# C2 w+ m
' t4 v. k; S2 ]' M( S( {' u' K @
接下来的两本,可以当做是算法的课外读物,写得浅显易懂。刚开始学算法的小伙伴,可以先从他们着手,第一本其实是合集,叫Algorithms Illuminated。分三个部分:基础,图算法和数据结构,贪心算法和DP。该合集页数比较短,但是看完之后,对算法的理解肯定会加深不少。
; X9 X, U, c& W( Y$ K这个系列暂时还没有中文翻译,但Coursera上面有这个算法系列的课程:Learn Data Structures and Algorithms from UCSD/HSE on Coursera* }4 z1 D) E5 p2 F" a6 P) ~
提到Coursera的课程,就多说一句,现在最火的Machine Learning的课程在这里:Andrew Ng&#39; Machine Learning: Master the Fundamentals
3 f5 r+ @0 }! ~: K2 u接下来就是图解算法了,语言风趣,有比较多的插图。入门很合适。
* K% G! e$ a6 O i2 K( B* z最后一本算法书,名字就叫算法,作者还提供免费的教程,我个人觉得对面试帮助很大。因为里面讲解算法的思路,有点以题目为导向的感觉,其中递归和DP部分,让我有醍醐灌顶之感。
% Y8 m! i2 T0 I% a, f$ S# C( \
/ Z$ A+ n' _) d1 j9 w, Z+ L
( E( S4 H1 ?- I. ?可以通过下面的链接,直接官方下载PDF:
& t* U: [. q# s, J5 G/ r
, ?9 v4 A8 a6 X/ B0 `第二部分是数据结构,这里就推荐三本书,一本是Java,一本是Python。Java的就是鼎鼎大名的CS61B的课程推荐教程:Data Structures and Algorithms in Java。Python的也是一本畅销书:Problem Solving with Algorithms and Data Structures Using Python。
9 S, `6 m+ u9 @- l# z$ F w( @$ B: N
6 [: b9 ?: E% ^9 f- c" s
) H% W5 B3 ~* }4 I. N4 w, }( v: c7 k
i1 o9 I/ @0 O/ U0 R |6 }
4 ~! c2 {3 O* Z( M6 A) b" p
还有就是中文的《大话数据结构》,数据结构中文入门读物的不二选择。/ B5 j, _4 x* I$ w
) b( Y0 M e8 i8 O4 l% L8 _
, L6 `8 R+ X5 t
4 d/ O4 i/ x; A/ V<hr/>再来看网络课程。5 N! v" J6 H/ M4 {+ J% ?
1 s3 g' f0 F% a0 l
算法课程强推四门。3 s: a: |6 f+ j' B, x
Again,选一个好好多学两遍,别都想学,没那么多时间,贪多嚼不烂。
# V+ x6 E. F5 m5 {. d: B网络课程的话,则是十二分强推UCB的CS61B。他们家的计算机系的CS61A,B,C课,简直制霸各种课程推荐列表。
4 x, S8 W: g2 tCS61B的官网在这里:https://inst.eecs.berkeley.edu/~cs61b/fa19/ 这门课以Java为主。
9 K. G# J# G* g# T* x/ b. x z 2. MIT的算法课,教程用的算法导论,也是强推的网课:https://www.youtube.com/watch?v=HtSuA80QTyo&list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb 这门算法则基本不涉及到语言层面,主要是算法层面,讲得很好。: R" [2 [) n* X7 D$ K' y
3. 然后就是红宝书的网课以及配套官网:
- X; B8 g& }. thttps://algs4.cs.princeton.edu/lectures/! A4 J8 E$ I& n: o1 U$ j% f- f' d
https://www.youtube.com/watch?v=1QZDe28peZk&list=PLRdD1c6QbAqJn0606RlOR6T3yUqFWKwmX
8 A5 h- Y2 I9 R4. 斯坦福2018 Winter CS106B: Programming Abstractions,虽然从名字不太能看出来,但其实是用C++讲数据结构,想用C++的小伙伴不容错过,我看了一半了,特别有帮助,尤其是对递归和回溯的讲解,简直醍醐灌顶。
q3 b" n2 k9 A ^% q/ d现在因为不可知的原因,Youtube上面已经下架这门课程,但更方便的是,咱们可以在B站直接看:( O% @' V/ y" ^) m# ]* ~
https://www.bilibili.com/video/av21620553?p=1
2 v, a5 ?2 w8 w& N1 }& \% ?# C+ p<hr/>最后来说说练习平台
9 V& X' F6 p9 e- m% a7 F& D( x3 J) b" R$ J3 ]) U
光学(看书)不练,算法和数据结构是学不会的。" \- g0 a7 v9 {, B
所以推荐一些好的刷算法和数据结构平台,当然另一方面也是为了找工作面试做准备咯。; p% i2 |. y) Z; ^/ T: @. o
如果你在北美的话,初级程序员面试基本就是考察数据结构和算法,所以大家一定要勤加训练!0 P9 u8 y( @6 @) E
LeetCode。4 H" h# c- ?+ P) K
这是现在刷题找工作最热门的网站了。, i3 t. T# g: X9 D5 L
但LeetCode现在题目也太多了,一共1300+了,而且一直在增加!!!$ e9 _* m+ m- F2 f3 s1 m
全刷完没必要,也不高效,所以推荐看下面的回答:
: l9 G( h. \6 P% B w* G3 ^国外LeetCode大牛们是怎么刷LeetCode的:: T8 P9 {+ R7 F! W! x0 B; i. d
LeetCode 2019官方精华经验合集在这里:
# Y2 H' R, t7 ^( }8 [; @<hr/>2. Educative6 N% U" t! O& R+ |5 m
他们家还给Github的学生账户提供半年的免费课程,满足条件的小伙伴,可以照着下面的文章流程申请一下,有更详细的课程和相关步骤介绍:
- W) X: o6 B+ b: e# j3 N对算法最有帮助的课程是:
o) d! z, q8 R- |" n上面这门课的理论和题目结合则阅读这一篇:
! I5 d% |, C( q专门针对数据结构的课程有:
; D I1 X8 \7 `C++:9 K) r3 H% f7 O
JavaScript:! W8 n" ~& r6 |* W4 m4 ^: P" Q- Y2 Z
Java:% ~6 q$ o ~1 ~) Y/ m
Python:; [. @, q' B- Z
我上过其中的Java版本,课程是把数据结构里面的基础数据结构都用java实现了一遍,对于用java的同学特别有帮助,java的基础在刷题的过程中,还是要必须掌握的。
' ?1 Y* S$ H. B/ R+ l6 V& M课程从复杂度开始讲起,Arrays,LinkedLists, Stacks/Queues, Graphs, Trees, Trie, Heaps, Hash Tables等数据结构,全都实现了一遍。而且还有配套的基础LeetCode题。是一个入门的很棒的教程。选择其他语言的话,内容应该也是差不多的。* ]. E8 E' X9 ~- Q4 B
动态规划的题目,则单独成为一门课了:
( B: e6 `6 a8 ?3 a<hr/>以上只是给出一个完整的学习算法和数据结构的攻略,包括书籍选择,网课学习,平台练习。其他的科目,也自然是类似的流程。如果你真心想继续在CS耕耘,那你肯定也能找到别的科目的好的教程,网课,以及练习相关的资源。& z" I) F3 w3 I
希望你能选一个你喜欢,且能给你带来好的就业保障的专业。
5 G( K6 l+ `1 G; s- N' f毕竟读书(读大学)不仅仅是为了兴趣,毕业能恰饭也是值得认真考量的。" w6 G6 C1 [! b
共勉。 |