大声表白|本科计算机在读,可以解答一些疑问
大声表白|本科计算机在读,可以解答一些疑问
我是普通本科大三在读学生,由于学校专业设置,一进去大家都是读的计算机大类,之后在大二的时候通过绩点和学生意向进行专业分流,我最后选择的是计算机科学技术(cs)。但由于学校课程设置+个人爱好+以及参加了学校科研实验室接触到了很多其他专业的同学,对物联网,大数据,人工智能,软工,网安等专业也大概了解过一些(但真的比较浅,毕竟我不是专业的)。
由于我对考公没有太大的热忱,所以我一开始就是将这个专业分为两个大方向:研究生深造+直接本科毕业就业,当然我觉得读完研如果没有太大科研梦想,百 分之九十的人还是会选择工作的,无非是延缓几年罢了。本科期间也经常和身边同学以及学长学姐讨论过这方面问题,所以希望可以帮助同学少走一些弯路。
基于上述信息,如果有对于专业选择,或是长远一点的本专业就业读研问题,大家如果有问题的话我愿意提供一些拙见。(因为我觉得直接写成一大篇攻略的话,难免会疏漏很多信息,很多问题得不到有效解答,所以直接提问然后我回答这样会好一些。)
ps:本帖的主要目的是想介绍一下计算机专业情况以及就业发展读研问题。可能是由于刚高考完,好多朋友们向我咨询具体的学校选择情况,我本人其实无法给出很好的选择的,最好的方式就是:
1.去问从这个学校毕业的朋友或是翻阅学校官网看数据,了解毕业去向,深造比例。
2.去问意向学校的在读师兄师姐们,他们正在那所大学就读,绝对比我这个外人了解太多了。
而且我其实只对计算机相关领域有一些浅薄认识,我对于其他专业,比如通信工程这种是不太了解的,所以我是给不了建议的。

请问没有任何基础能学吗?大学是从零教学吗?另外,学业是否很繁重,需要熬夜复习那种?

回复 momo:
请问没有任何基础能学吗?大学是从零教学吗?另外,学业是否很繁重,需要熬夜复习那种?
第一个问题:我也是0基础的,绝对没问题,其实除了少部分高中打OI竞赛的竞赛生,基本上都是零基础的。 第二个问题:对,是从零开始教学,但其实可以在高三这个暑假的时候就开始自学C语言,这样子进学校可以让自己负担小一些,同时也可以自己主观感受一下自己到底喜不喜欢写代码。 第三个问题:在期末周的时候可能会累一些,我也有通宵复习过,但是复习的科目往往都是大学物理,毛概啥的非专业课,专业课的话其实平时认真学,多敲代码多钻研,其实不太需要熬夜复习这么严重。而且大学期末成绩是由大作业+实验+期末,类似这样的组成的,所以不需要给自己太大压力。


回复 我真的又困又饿:
第一个问题:我也是0基础的,绝对没问题,其实除了少部分高中 打OI竞赛的竞赛生,基本上都是零基础的。 第二个问题:对,是从零开始教学,但其实可以在高三这个暑假的时候就开始自学C语言,这样子进学校可以让自己负担小一些,同时也可以自己主观感受一下自己到底喜不喜欢写代码。 第三个问题:在期末周的时候可能会累一些,我也有通宵复习过,但是复习的科目往往都是大学物理,毛概啥的非专业课,专业课的话其实平时认真学,多敲代码多钻研,其实不太需要熬夜复习这么严重。而且大学期末成绩是由大作业+实验+期末,类似这样的组成的,所以不需要给自己太大压力。
入门最好不要学C语言,我是做PL的,所以入门最推荐的肯定是 Scheme/Haskell/F# 这类函数式语言。非要用命令式的话也选一个有靠谱REPL的语言吧,比如 Python

回复 豆友239977573:
进互联网公司的话,那就是自己做Web相关的东西。比如先搞个博客?我个人做的第一个项目是一个vscode 插件,对这个有兴趣也可以做这个。总之有个切入点是很重要的,最好是自己想做点什么,然后在做的过程中学习相关资料。

回复 Fisherchenxi:
入门最好不要学C语言,我是做PL的,所以入门最推荐的肯定是 Scheme/Haskell/F# 这类函数式语言。非要用命令式的话也选一个有靠谱REPL的语言吧,比如 Python
就像你说的,你是做pl的,所以入门选择了这些。但并不是所有人一开始就知道自己会对哪方面感兴趣。我学习了c之后学了java,觉得c太冗余复杂了,反思了很久当时学c到底有没有必要,但接触了go之后我才感激c语言的夯实基础。所以我觉得一开始入门学c是没什么问题的。

回复 Fisherchenxi:
进互联网公司的话,那就是自己做Web相关的东西。比如先搞个博客?我个人做的第一个项目是一个vscode 插件,对这个有兴趣也可以做这个。总之有个切入点是很重要的,最好是自己想做点什么,然后在做的过程中学习相关资料。
这方面我也很认同,最好就是自己造一些轮子,多折腾,不必一开始就完全弄懂,在做项目的途中学习。

回复 我真的又困又饿:
就像你说的,你是做pl的,所以入门选择了这些。但并不是所有人一开始就知道自己会对哪方面感兴趣。我学习了c之后学了java,觉得c太冗余复杂了,反思了很久当时学c到底有没有必要,但接触了go之后我才感激c语言的夯实基础。所以我觉得一开始入门学c是没什么问题的。
呃我上大学之前也没学过写程序,所以也是从C开始学的。其实欧美大学编程入门基本上是用Python 或者Java,少数函数式重镇会用函数式语言。C语言主要的问题是太不严谨了,即使开了-Wall,照样可以写出很离谱的代码而不报错。。。CMU的Introduction to Imperative Programming用了一个C语言的严格子集---C0语言,禁止了C语言的很多不安全写法,这种我觉得也是可以的。

回复 Fisherchenxi:
呃我上大学之前也没学过写程序,所以也是从C开始学的。其实欧美大学编程入门基本上是用Python 或者Java,少数函数式重镇会用函数式语言。C语言主要的问题是太不严谨了,即使开了-Wall,照样可以写出很离谱的代码而不报错。。。CMU的Introduction to Imperative Programming用了一个C语言的严格子集---C0语言,禁止了C语言的很多不安全 写法,这种我觉得也是可以的。
是的,我在psu读书的朋友他们第一门语言教的就是java,布置的第一个任务就是写一个数独软件。尽管c语言问题很多,但我觉得大学科班还是要与培训班区分开,c打基础绝对没问题。无论是后续感兴趣学习mit6.828中依靠c和risc-v去自己写一个os内核,还是cmu15-418的c++完成并行架构的设计都需要c坚实的基础。而且,假如想考研,如果要上机或是考数据结构都还是离不开C。这是我的一些想法。

回复 我真的又困又饿:
是的,我在psu读书的朋友他们第一门语言教的就是java,布置的第一个任务就是写一个数独软件。尽管c语言问题很多,但我觉得大学科班还是要与培训班区分开,c打基础绝对没问题。无论是后续感兴趣学习mit6.828中依靠c和risc-v去自己写一个os内核,还是cmu15-418的c++完成并行架构的设计都需要c坚实的基础。而且,假如想考研,如果要上机或是考数据结构都还是离不开C。这是我的一些想法。
C 的主要问题我已经说过了,允许程序员进行太多操作而本身对代码的保护和检查过少;缺乏现代编程语言的实用功能(尤其是缺乏 module 支持和统一流行的 package manager),这些都决定了 C 不是适合初学者学习的。初学者首先应该建立"大概是如何写程序、程序是做什么的"的概念,而在这一 过程中递归是极为重要的。(循环只不过是tail recursion)但像C这样没有垃圾回收的语言,递归的结果要用副作用来传递(比如说,打印什么或者修改什么变量),这种对数据流和控制流的强行拆解是很不形象的。从我个人的体验来看,上课讲的二叉树遍历对我来说是很难理解的,而我做 Haskell 公选课助教的时候,同一所大学、非计算机专业同学们却都能在有提示的情况下毫无压力地轻松写出一个符号求导程序(可以理解为一种树遍历)。借用 Matthias Felleisen(美国西北大学的一个老师,https://felleisen.org/matthias/)主页上的一句话,A bad day writing code in Scheme is better than a good day writing code in C. 至于你说的要写内核或者并行,首先并行也不一定要用 C++,随手搜一下就能找到很多课程资料,比如https://www.cse.chalmers.se/edu/year/2015/course/DAT280_Parallel_Functional_Programming/index.html。其次入门不学 C,不代表在四年里都不学 C 了。我觉得如果有基本的命令式编程经验,再加上对于 hardware 的基本理解,学 C 是很简单的事情。 不过平心静气的想一想,C作为入门语言真的有那么坏吗?我觉得倒也不是,我对"入门学 C"的强烈抵制还是来源于我大一上的"程序设计(I)"。在这门课上,我时常感受到无所适从。老师没有真正地把自己放到初学者的位 置上,循循善诱地通过语言的学习把计算机科学的关键内容教给我们。这门课的理论课考试也是糟糕透顶,明明上课没有讲左值右值和 C 语言的 evaluation model,考试的理论选择题却找了一个充斥着 i = i++ 这种题目的题库。如果有足够好的材料和老师,我觉得初学者学C也不失为一种选择吧。

回复 Fisherchenxi:
C 的主要问题我已经说过了,允许程序员进行太多操作而本身对代码的保护和检查过少;缺乏现代编程语言的实用功能(尤其是缺乏 module 支持和统一流行的 package manager),这些都决定了 C 不是适合初学者学习的。初学者首先应该建立"大概是如何写程序、程序是做什么的"的概念,而在这一过程中递归是极为重要的。(循环只不过是tail recursion)但像C这样没有垃圾回收的语言,递归的结果要用副作用来传递(比如说,打印什么或者修改什么变量),这种对数据流和控制流的强行拆解是很不形象的。从我个人的体验来看,上课讲的二叉树遍历对我来说是很难理解的,而我做 Haskell 公选课助教的时候,同一所大学、非计算机专业同学们却都能在有提示的情况下毫无压力地轻松写出一个符号求导程序(可以理解为一种树遍历)。借用 Matthias Felleisen(美国西北大学的一个老师,https://felleisen.org/matthias/)主页上的一句话,A bad day writing code in Scheme is better than a good day writing code in C. 至于你说的要写内核或者并行,首先并行也不一定要用 C++,随手搜一下就能找到很多课程资料,比如https://www.cse.chalmers.se/edu/year/2015/course/DAT280_Parallel_Functional_Programming/index.html。其次入门不学 C,不代表在四年里都不学 C 了。我觉得如果有基本的命令式编程经验,再加上对于 hardware 的基本理解,学 C 是很简单的事情。 不过平心静气的想一想,C作为入门语言真的有那么坏吗?我觉得倒也不是,我对"入门学 C"的强烈抵制还是来源于我大一上的"程序设计(I)"。在这门课上,我时常感受到无所适从。老师没有真正地把自己放到初学者的位置上,循循善诱地通过语言的学习把计算机科学的关键内容教给我们。这门课的理论课考试也是糟糕透顶,明明上课没有讲左值右值和 C 语言的 evaluation model,考试的理论选择题却找了一个充斥着 i = i++ 这种题目的题库。如果有足够好的材料和老师,我觉得初学者学C也不失为一种选择吧。
感谢你打了这么多字耐心回复我,也许是我比较幸运在一开始就遇到了好的引路人让我通过学习c语言入门,从而在后续学习中打下了基础,所以我也希望身边的人也可以以此为入门语言。只不过我觉得我们讨论的内容更适合私聊讨论,与主楼的内容没太大关系。