粗浅谈一下对CS, SE, CE的理解吧....我是Comp Eng的,身边不少CS的SE的同学,也有很多大一大二从CE转去SE的大神们,我就简单谈谈CE和CS的区别,因为SE确实不是很了解,不敢瞎说。
首先CE的定位和CS是不一样的,CE的定位是做硬件开发的同学们(虽然现在的technical electives越来越往CS方向靠拢...唉没办法,谁叫CS的工作多工资又高,再加上我loo又是一贯跪舔employer爸爸。。。)
------------------------------------------------------------------------ 我是分割线 ------------------------------------------------------------------------
展开聊其他东西之前,先说说我理解的硬件是什么,硬件也分编程和设计两个方向。硬件编程比如FPGA,Assembly,C语言等等对芯片或者一个hardware component的程序编写; 硬件设计由于我自己没做过,不敢瞎说,只是知道同学Coop是去给某个大楼的内部做电路设计,还有大佬在Intel给芯片里面的电路做设计(很多logical gates啥的)
------------------------------------------------------------------------ 我是分割线 ------------------------------------------------------------------------
CS 和 CE的定位不同可以从CE的大一大二的课程上可以看出来,比如ECE 124, ECE 222, ECE224等等都是做硬件的core course,如果以后想走硬件开发的同学们一定要学好这些课,面试经常会从这里出知识点,比如deadlock;
当然CE也会有一些CS课,比如ECE 150 - Fundamental Programming,这课主要是C++教你编程入门和一些debugging常用技巧(如果你的prof是Paul Ward,那恭喜你,这门课基本可以自学了;Alfred Yu和Scott Chen 教的都很不错,吹爆两位);ECE 155是个教你用Java写Android的课,整个课就是一个大Lab,一个学期下来倒也可以学到不少Java的东西,蛮实用的。再来就是ECE 250,Data Structures and Algorithms,跟CS 240差不多,不过250教的更多是data structure的implementation,240有不少数学论证的部分(这里就看出来了工程和数学的差距 工程人:“已知 1+1 = 2,那我能算出1 + 2 = 1 + (1+1)=3”;数学家:“我要证明1+1 = 2”);CE大二和大三还有两门软件core course,ECE 254- Operating System和ECE 351 - Compiler,这俩也是非常重要的CS相关的课。相比于CE,CS可以选喜欢的选修课,machine learning啥的,real time 啥的,比CE的课程难度要大一些,也会更深入讲CS的内容。
PS:CS可以选一门OOD的课, CS 246;然而CE并没有OOD的课程....实名羡慕
总而言之一句话....如果你非常确定要走Software Engineering这个方向,招软件相关的工作,建议你刷高GPA,大一争取往CS或者SE转;如果留在CE也是没问题的,多刷刷 Leetcode,夯实编程基础,吃透ECE 250,也没啥大问题。
加油工程人,祝你们不要遇到Paul Ward和Peter Levine