高级农民
- 积分
- 1255
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2020-8-27
- 最后登录
- 1970-1-1
|
本帖最后由 温酒斩潘凤 于 2024-2-4 13:25 编辑 .--
同一个因为兴趣的转码人前来报到。在论坛看到这种帖子好感动。
转专业学习也快两年了,也对计算机有了一个比较整体的认识,希望可以帮助到楼主。
总的来说,CS可以说是入门门槛最低的专业之一了,不要被吓到,网上优质的资料浩如烟海,而且绝大部分内容都不涉及到数学基础。而作为一个和实践紧密结合的专业,学习的时候也是反馈非常强,每学习一点你都飞快地利用这些知识,然后制作出一些小工具并且提高生产力。不会像其它一些理工科一样可能需要学完10门前置课才堪堪入门。并且在学习的过程中会不断了解计算机这个蕴含了无数科学家和工程师巧思的设备,学习的过程中会经常被人类的智慧所惊叹。是很激动人心的旅程
下面从我的个人经验来回答一下你的问题
1. cs涉及的方向很广,是不是意味着我必须仅选择一个方向去深钻?
答案是Yes and No.
如果将来想成为一名资深工程师,那么人的经历有限,选定一个方向去深钻是必然的事情。但是作为一个学习者,一开始更重要的是建立起整个知识体系。在没有了解到CS全貌之前怎么能决定未来的方向呢。. check 1point3acres for more.
而且从找工作的角度来看,校园招聘大家看的基本都是你的计算机的基础。绝大部分CS的科班生也远远达不到在某个方向资深的程度。所以刚刚开始学习的时候完全不用担心,跟着准备好的课程和学习计划。一步一步的前进就好了。你会很快发现从一无所有变到具有能够胜任入门级软件工程师的能力,其实也只需要四五门课而已。
另外,方向之间其实都是相通的,你必然需要掌握足够的广度。比如你做服务端开发,怎么做用户的权限鉴定,这需要security的知识去帮助你。怎么高性能的实现数据的读写,减轻代码中的额外开销。这需要足够的操作系统和数据库的知识。对于工程师来说,这些都是你的工具,合理的利用这些知识去解决问题才是一个工程师的素养。
我也有一段时间想着我要专精系统架构,然后学习了很多系统相关的内容。然后实习的时候mentor让我设计系统时要考虑安全问题。我就一整个抓瞎了,甚至不知道在哪里学。
在前期培养出对整个计算机领域的大框架,起码要知道哪里不会的时候我该在哪个方向学,我认为是比专精方向更重要的事情。
2. cs向深入钻研会涉及很多数学概念,数学不够顶尖或缺乏悟性是否会掣肘?.1point3acres
这个题目的答案是No。
CS的某些分支确实需要大量的数学,但这些分支主要集中在理论方向。比如算法设计和证明,计算机图形学模拟各种光的反射衍射等等。对于99.9%的工程师甚至researcher,其实和数学都离得很遥远。
比如计算机系统的很大一部分研究就是去发现现有系统里的问题,比如性能瓶颈,然后实现一套新的系统解决这个问题。整篇文章一个数学公式都没有。
而对于工程师来说就更是如此了,大家日常接触的数学不会超过初中的代数运算。更多的是发现系统中的问题然后解决/把产品的需求转换为代码。完全不用担心数学拖你的后腿。. 1point 3acres
3. 偏文科类的学生学cs会显得知识结构杂乱不专业,然后在两个领域都杂而不精,没有竞争力?. Waral dи,
这个就是个人职业规划的选择了。顶着汉语言文学的简历去寻找程序开发类的岗位肯定是一个弱势。如果不转专业的话你可能需要在技术上比同样的科班学生强许多才能得到相同的机会。当然,文科转码还找到工程师工作的也大有人在。
我虽然不是文科专业毕业,但身边有很多同学去了一些需要同时具备文理背景的岗位。比如去科技厂商作为产品经理/运营。他们其实很需要兼具理工科和文科背景的候选人。我也有同学去了阿里云做解决方案工程师,可以理解为需要技术背景的销售,待遇也很高。.--
4. 关于你列出来的课程。 ..
这些都是非常好的自学材料。只是千万不要被这个超长的材料清单吓到了,我今年转码项目硕士毕业,我身边的同学也大部分拿到了很不错的程序开发offer。我可以负责任的说,真正学完罗列的这些课程的人是0。甚至学完30%的都是少数。. .и
以我目前的经验来看,能够掌握一门编程语言,对计算机系统(操作系统,网络,数据库)有基本的认识,就可以胜任绝大部分软件开发的工作了(当然从找工作的角度讲,你肯定要有一些其它的闪光点来从众多简历中脱颖而出,但知识层面掌握这些就足够了)。那些fancy的程序开发框架,一长串英文单词都是别人为你搭好的脚手架,学习起来是非常轻松的。
既然英语没有问题,我个人的建议是可以从一门编程课程学起。比如CS61A或者CS50
按照
Berkeley CS61A -> Berkeley CS61B -> CMU 15213 的顺序你就可以对整个计算机有一个全面的认识了,这些课里对于常用工具也有一定的介绍了(别被csdiy里那一串git Cmake什么吓退呀)。学习的过程中作业一定要做,这些课程都有提供的auto-grader,可以自己评判。coding大概占了整门课学习效果的70%。
到这里其实你已经是同学眼中的大佬了(而且从技术方面肯定是足够去找那种需要技术背景的运营/产品/销售岗位了
————
如果想做程序开发的话。
之后再补充OS (我是直接通读了Operating Systems Three Easy Pieces这本教科书,很适合初学者 or MIT 6.828), Network(我读的Computer Network: A top down Approach, 当然你也可以选择Stanford CS144 )。关于database,这个时候其实不必一定学习CMU 15445, 有点过于艰深了。这个时候可以去网络上找一些开发的项目来学习一下(当然实际上在你学习完CS61A和CS61B就已经可以了),前端后端或者全栈,比如黑马程序员就有很多非常好的免费课程。熟悉一下一个完整的互联网应用包含了哪些组件,如何和前后端如何交互/数据库的基本使用。然后再简单的学习一下数据库的原理就好了。别看只学了五六门课,到这个时候其实你在计算机方向的积累已经在科班中超过平均水平了。大胆去找程序开发的工作吧!
————
列了一堆看上去很恐怖,但是真的真的不要担心。进一步有一步的欢喜,你会有无数激动人心的时刻,第一行Hello World输出到屏幕上的时候,第一次让数据通过网络通信的时候,第一次操作每一个bit来随心所欲的修改浮点数的时候,你的第一个小应用部署到云上开始提供服务的时候,太多太多。学CS的路上有太多不可言说的风景,祝你也享受这段旅途!!
有问题欢迎继续提问! |
|