登录
  • #码农类general
  • #google
  • #工作信息
  • #求职
  • #找工就业

回报‌‌‍‍‌‍‍‌‍‍‌‌‌‌‌‍‌‌‌‍‍‍‌‌‍‌‌‍‍‌‌‍地理,分享一下我转专业和就业的经历和经验

wherewherewhere
3094
12
本人cs转专业渣渣一枚,和地理的很多大神没法比,当年美国master毕业没在美帝找到满意的工作,没能进大厂。因此接了国内某公司小40万的offer回国了。 作为一名转专业的当年的小白,深感转专业过程的艰辛,以及转专业道路上的迷茫,因此特写此文,只希望能给后来人尤其是开始转专业的同学带来一些道路上的指引,也为了回报地里这些年给我带来的宝贵信息。如果各位大神觉着此文很幼稚,请绕步,因为这篇文章就是写给没有一点CS的基础的小白看的。 2016年之后,美帝CS的就业已经不想各位想像的那么容易,刷200leetcode就能进FLAG的时代已经过去。如果各位在来美国之前没有一点点CS的经验,我奉劝各位别冒这个险,建议先在国内的软件公司工作23年,准备充足了再来美国,因为你没有CS经验,大概率找不到实习,没有实习你更大概率找不到工作。

大家作为转CS的学生,肯定听说过这些说法,比如,leetcode800道题刷3遍你FLAG随便进,算法导论学透了年薪100万不成问题,C++ primer学完你能完爆90%以上的C++工程师。说实话,我对这些说法非常的反感,因为CS这个学科的学习是有木桶效应的,CS是一个完整的知识体系,包括了操作系统,分布式,体系结构,软件架构等一系列知识,你缺了哪个知识点都不行,而不是你在哪一方面突出就能完爆其他人。 ----------------------------------------------------------下面进入正文---------------------------------------------------------------------------------作为一名合格的CS毕业生,我认为至少应该具备以下四点能力。1. 对于整个计算机系统自底向上的理解能力:从 数字电路->CPU设计->计算机主板构造->操作系统->printf("helloworld")->应用程序。计算机系统是如何从电路层构造出来的。2. 算法和设计模式:算法决定了你写的程序能跑多快,设计模式决定了你的开发效率能有多高。3. 软件开发能力:如何用C语言写一个贪吃蛇程序出来,或者如何做一个购物网站并上线。4. 架构设计能力:你写一个淘宝很容易,但是做一个高并发,高可用,安全性强的淘宝网相当难。你需要理解消息队列,负载均衡,服务器集群,主从数据库,分布式架构等一系列概念。 但现在无论国内外,计算机教育都存在着很大的问题。在大学,老师只教你12;而课外的培训班只教你34,甚至连4都不教。这就造成了能够达到企业要求的合格的毕业生少之又少。 国内外的面试是很不同的:美国,你的简历上是否体现了34所展现出来的能力是你能否过简历关的一个重要因素,而2点你能否通过面试的最重要的一点。而在国内14都很重要,国内面试对于第2点的要求没有国外高,但国内的大企业尤其喜欢问14相关的问题,这也是很多留学生对于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主要学什么?其实无非就是学软件和学编程语言(当然还有算法数学之类)

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

1. Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么这篇文章能让你初步对前后台各个模块的功能有个基本的了解

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

3. 如何用形象的比喻描述大数据的技术生态?Hadoop、Hive、Spark 之间是什么关系能让各位初步了解hadoop的应用场景

4.浅析分布式系统分布式系统入门

5.大型网站技术架构













12条回复
热度排序

发表回复