查看: 4187| 回复: 12
跳转到指定楼层
上一主题 下一主题
收起左侧

[找工就业] 回报地理,分享一下我转专业和就业的经历和经验

 
全局:

2016(7-9月)-CS硕士+fresh grad 无实习或全职 | 内推|BayArea湾区 码农类General全职@google

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
本人cs转专业渣渣一枚,和地理的很多大神没法比,当年美国master毕业没在美帝找到满意的工作,没能进大厂。因此接了国内某公司小40万的offer回国了。
作为一名转专业的当年的小白,深感转专业过程的艰辛,以及转专业道路上的迷茫,因此特写此文,只希望能给后来人尤其是开始转专业的同学带来一些道路上的指引,也为了回报地里这些年给我带来的宝贵信息。如果各位大神觉着此文很幼稚,请绕步,因为这篇文章就是写给没有一点CS的基础的小白看的。
从2016年之后,美帝CS的就业已经不想各位想像的那么容易,刷200道leetcode就能进FLAG的时代已经过去。如果各位在来美国之前没有一点点CS的经验,我奉劝各位别冒这个险,建议先在国内的软件公司工作2到3年,准备充足了再来美国,因为你没有CS经验,大概率找不到实习,没有实习你更大概率找不到工作。
. Waral dи,
大家作为转CS的学生,肯定听说过这些说法,比如,leetcode800道题刷3遍你FLAG随便进,算法导论学透了年薪100万不成问题,C++ primer学完你能完爆90%以上的C++工程师。说实话,我对这些说法非常的反感,因为CS这个学科的学习是有木桶效应的,CS是一个完整的知识体系,包括了操作系统,分布式,体系结构,软件架构等一系列知识,你缺了哪个知识点都不行,而不是你在哪一方面突出就能完爆其他人。
----------------------------------------------------------下面进入正文---------------------------------------------------------------------------------
作为一名合格的CS毕业生,我认为至少应该具备以下四点能力。
1.      对于整个计算机系统自底向上的理解能力:从 数字电路->CPU设计->计算机主板构造->操作系统->printf("helloworld")->应用程序。计算机系统是如何从电路层构造出来的。
2.      算法和设计模式:算法决定了你写的程序能跑多快,设计模式决定了你的开发效率能有多高。
3.      软件开发能力:如何用C语言写一个贪吃蛇程序出来,或者如何做一个购物网站并上线。
4.      架构设计能力:你写一个淘宝很容易,但是做一个高并发,高可用,安全性强的淘宝网相当难。你需要理解消息队列,负载均衡,服务器集群,主从数据库,分布式架构等一系列概念。
但现在无论国内外,计算机教育都存在着很大的问题。在大学,老师只教你1和2;而课外的培训班只教你3和4,甚至连4都不教。这就造成了能够达到企业要求的合格的毕业生少之又少。
国内外的面试是很不同的:
在美国,你的简历上是否体现了3和4所展现出来的能力是你能否过简历关的一个重要因素,而第2点你能否通过面试的最重要的一点。
而在国内,1到4都很重要,国内面试对于第2点的要求没有国外高,但国内的大企业尤其喜欢问1和4相关的问题,这也是很多留学生对于bat等国内公司的面试题很懵逼的一个原因。
无论国内还是国外,第1点都很重要,1决定你你在CS这条职业道路上能走多远。

就我个人感觉,很多学EE的学生大可不必转CS,
在国外,和第1点相关的课程都是在EE系之下的,2和3和4相关的课程在CS系之下。大家转到CS无非就是想上和234相关的课程,从而能有一些课堂项目写到简历上,有了课堂项目就可以过简历关去找工作。但是这些课堂项目完全可以通过一些更实惠的渠道去获取。

在这里我有一条更好的道路可供EE系的学生参考。EE系的学生可以在本系多修一些和计算机底层原理和算法相关课程(这些课程真的很重要,会对你整个职业发展起到潜移默化的作用)。3和4相关的课程项目大家可以在一些在线的网络培训班上去学习(很多业内人对于培训班嗤之以鼻,但我觉着培训班覆盖的知识点真的挺完整的)。比如国内有好多计算机培训机构,整培训费用下来一个1万多人民币多一点。比如J2EE培训班,里面包含了从JAVA基础到后期的大型网站架构和搜索引擎的搭建,内容涵盖真的非常完全,可以说是完爆一些美国大学的应用型课程,价格还便宜。比如USC的CS571一共4个学分,内容真的不及那些培训班整套内容的四分之一,但培训班的整套费用也就USC1个学分的钱。所以其中各种利弊请大家自行体会。

----------------------------------------------------------------------------------------------------------------------------------
下面我再谈谈编程语言和软件。
学CS主要学什么?其实无非就是学软件和学编程语言(当然还有算法数学之类)
. From 1point 3acres bbs
先讲软件:
有的软件是为用户应用设计的,比如word,excel,ps;有的软件是为开发设计的,比如MySQ,Linux,Windows,MongoDB etc。
学软件无非学3点:(1)这个软件提供的编程语言接口怎么用。(2)如何操作使用这个软件。(3)这个软件的源码是怎么实现的。
就拿Linux举例,学(1)主要看的就是《UNIX高级程序设计》,学(2)看的是《鸟哥的Linux私房菜》,学(3)看的是《Linux内核详解》

再讲编程语言:
而编程语言,就是提供给用户的一系列批量操作软件和计算机的语法规则。
首先,我很不喜欢一些说法,很多人认为一个编程语言就是为了某个功能而诞生的,比如C就是用来写操作系统和服务器的,JAVA就是写后端和安卓的,Python就是做数据处理的。我和我同学讲我想用C语言写Android应用,很多人的第一反应竟然是C怎么能写Android应用?Android开发不应该是java干的活吗?
其实当你对于整个计算机体系有了比较深的了解,编程语言在你的眼里只是一种形式化的东西罢了,所有的语言都大同小异,Python和JAVA能做的C也能做,只是开发效率的问题罢了。千万不只学编程语言的语法,一定要去了解隐藏在编程语言背后的计算机运行原理。
一个完整的编程语言总是具备以下6种特性的
1.      基本语法:数据和类的定义,循环控制,判断语句,等等
2.      基本函数库:字符串处理,数学运算,数据结构 etc.
3.      系统接口:用来实现进程线程操作,文件操作,内存管理等功能。
4.      网络编程接口:Socket接口等,用来实现进程间通信。
5.      GUI接口:用来创建图形用户界面的函数库。
6.      第三方软件提供的接口:比如MySQL等数据库管理系统提供的接口。
当然不同语言特性也有所不同,比如有的语言支持动态网页,有的就不支持。有的第三方软件只给部分或者一两种语言提供接口。
例如对于C/C++来说,1和2的内容在K&R的《C programming language》上有讲,3的内容在《unix高级程序设计》这本书上,4在《unix网络编程》上面,5就是MFC和Gnome。
在这里我继续吐槽一下国内的教育,比如国内上C语言的课程,老师只会告诉你1和2是怎么回事,3偶尔有一点点涉及,结果你学完C语言能干啥?服务器写不了,GUI应用程序写不了,只会在那个黑框里弄个文字输出。要想用C语言开发一套完整的桌面软件,1235是少不了的,并且还得学一些具体的操作层面上的东西。
---------------------------------------------------------------------------------------------------------------------------
最终给各位推荐几篇写的特别好的文章,各位可以用作参考

这篇文章能让你初步对前后台各个模块的功能有个基本的了解

2. [url=https://www.zhihu.com/question/25654738/answer/31302541]Spring,Django,Rails,Express这些框架技术的出现都是为了解决什么问题,现在这些框架都应用在哪些方面[/url]
这篇文章主要讲设计模式和框架的意义,框架和函数库的差别主要在于控制权的转移。
. 1point3acres
能让各位初步了解hadoop的应用场景

分布式系统入门






. Χ


评分

参与人数 10大米 +74 收起 理由
王石乐 + 3 很有用的信息!
zgpeace + 3 给你点个赞!
greenmania + 5 给你点个赞!
破风 + 3 给你点个赞!
sirius27 + 5 给你点个赞!

查看全部评分


上一篇:高盛的engineering职位是还没放出来吗?还是我打开的姿势不对
下一篇:18 fall uiuc stat 找实习 ms
推荐
donnice 2018-7-14 16:10:08 | 只看该作者
全局:
wherewherewhere 发表于 2018-7-14 15:34
从CPU到OS Kernel到html/css/javascript程序在页面上的显示,这一路是怎么来的?经过了多少中间层?我觉 ...

不不,我并不是说反对去学习那些底层的知识,只是觉得有更好的方式去学习它。比如学OS的时候用C去实现一些IPC call,学Network的时候使用socket API写一个简单的服务器等等,而不是说硬去拿一个适合写底层的语言去写一个application。就算写出来了,更多人只是对着source code抄而已。

我倒觉得学习计算机应该从上学到下,就拿你的所说的Python举例子,先学语法,用来做比如数据分析,Machine Learning啥的,然后再慢慢了解这门语言的特性,最后从底层去看它的实现方式,这是一条比较有趣而且有效的学习途径,因为你用过Python了,知道它的表现,再层层剖析去了解内在。如果一上来就太过于强调底层的学习,那这种学习往往会沦为枯燥的背诵,而且很难让人将这些底层特性和其应用场景联系起来

补充内容 (2018-7-14 16:12):
就好比学数学,是一开始先学1+1=2,再慢慢到证明哥德巴赫猜想,而不是反过来。绝大部分人类学习知识的途径向来是从应用 => 原理
回复

使用道具 举报

推荐
donnice 2018-7-14 14:57:54 | 只看该作者
全局:
基本认同,就是这点不敢苟同
首先,我很不喜欢一些说法,很多人认为一个编程语言就是为了某个功能而诞生的,比如C就是用来写操作系统和服务器的,JAVA就是写后端和安卓的,Python就是做数据处理的。我和我同学讲我想用C语言写Android应用,很多人的第一反应竟然是C怎么能写Android应用?Android开发不应该是java干的活吗?


理论上任何一门图灵完备的每个语言都可以做这些事情,我想这是任何一个学过EECS的人所具备的常识。但每个语言设计的初衷确实是用来干不同的、它们所擅长的事情的。如果你在应聘一个Android职位的时候硬要和面试官表示自己想用C写Android应用,我想绝大部分面试官第一反应不是你水平高,而是觉得你是只杠精。. 1point 3 acres

当然我理解LZ的初衷是希望大家不要把编程语言学死了,但我不希望你的发言被初学编程的新人误解为“只有用C写Android才能显示出我水平高”的感觉,特此指出. check 1point3acres for more.

补充内容 (2018-7-14 15:19):
同样,我不认为用C写GUI写贪吃蛇是学C的好办法。写贪吃蛇请用HTML/CSS/Javascript;想好好学C请用C学《数据结构与算法》并刷题,以及实现几个多线程模型甚至简单的OS Kernel
回复

使用道具 举报

推荐
 楼主| wherewherewhere 2018-7-14 15:34:14 | 只看该作者
全局:
donnice 发表于 2018-7-14 14:57
基本认同,就是这点不敢苟同

从CPU到OS Kernel到html/css/javascript程序在页面上的显示,这一路是怎么来的?经过了多少中间层?我觉着这是一个CSer应该去了解的。而深入了解C语言是了解这些最好的途径。用C写贪吃蛇不是真的为了去写一个贪吃蛇程序,是为了更好的了解计算机系统的构造。

补充内容 (2018-7-14 15:38):. check 1point3acres for more.
现在很多编程语言几乎屏蔽了所有的底层细节。 ..
只懂语言而不懂计算机的构造,这和培训班出来的码农有什么区别?
只学python的语法,和只学了个word,excel有啥区别?
回复

使用道具 举报

🔗
laopeng1000 2018-7-14 14:19:56 | 只看该作者
全局:
说实话,我对这些说法非常的反感,因为CS这个学科的学习是有木桶效应的,CS是一个完整的知识体系,包括了操作系统,分布式,体系结构,软件架构等一系列知识,你缺了哪个知识点都不行,而不是你在哪一方面突出就能完爆其他人。
非常认同!
回复

使用道具 举报

🔗
FML 2018-7-14 22:29:34 | 只看该作者
全局:
很多人转CS就是买张OPT而已
回复

使用道具 举报

🔗
Susuz 2018-7-15 06:55:49 | 只看该作者
本楼:
全局:
受教了。
回复

使用道具 举报

🔗
keystdio 2018-7-15 07:29:26 | 只看该作者
全局:
wherewherewhere 发表于 2018-7-14 15:34
从CPU到OS Kernel到html/css/javascript程序在页面上的显示,这一路是怎么来的?经过了多少中间层?我觉 ...

也十分认同这点,如今在一个云和高级编程语言泛滥的世界(当然也是有好处的)里我们非常容易忽视底层的实现原理。

曾经在工作里遇到过java GC在一个非常奇怪的情况一下会溢出native内存,虽说会发现的概率非常少了,但毕竟在需要救急的时候还是得知道这个问题的本质

而且据说opearting system里面解决过的问题几乎都是cs界里几乎无处不在的问题,cache coherence,并发互斥,scheduling,虚拟抽象。
回复

使用道具 举报

🔗
christina233 2018-7-15 09:01:38 | 只看该作者
全局:
LZ不要这么黑571好么,我一个EE的当年强行选上了571。上571之前只在本科学过C语言和数据结构,上完了571好歹最后找到了一个洛杉矶Local公司的实习写写PHP。

虽然PAPA上课比较扯淡,但是他整门课程的教学设计我觉得还是相当不错的
回复

使用道具 举报

🔗
 楼主| wherewherewhere 2018-7-15 09:53:53 | 只看该作者
全局:
mrhhsmr 发表于 2018-7-15 09:01
LZ不要这么黑571好么,我一个EE的当年强行选上了571。上571之前只在本科学过C语言和数据结构,上完了571好 ...

我只是说性价比而已。国内的PHP培训班讲的全套东西是571的好几倍,Node.js, ThinkPHP, ReactJS, Memcached分布式缓存,Docker,爬虫这些东西571全没讲,但培训班都讲了。而571一共4个学分接近8000美金,国内培训班多少钱?才1万人民币出头。所以转37学分多花那10学分的钱干啥不好?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表