【“计算机科学与技术”专业小白成长系列】计算机科学与技术主要学什么?

计算机科学与技术专业:主要学什么/h1>

  • 程序员职位要求
  • CS 专业课程列表
  • 怎样寻找资源学习/li>
  • 程序员高薪排行榜

程序员职位要求

看课程之前,我们先来看看 BAT 的招聘岗位 JD:

新零售技术事业群-java开发-淘系技术部 

https://job.alibaba.com/zhaopin/position_detail.htmositionId=71138

岗位要求:

1. JAVA基础扎实,理解IO、多线程、集合等基础框架,对JVM原理有充分的理解,有大型应用JVM参数调优经验优先。
2. 5年以上使用JAVA开发的经验,对于用过的开源框架,能了解到它的原理和机制, 有开源作品且或参与开源 区贡献者优先;具备三年以上大型分布式系统开发和架构经验; 在后台技术上有长期积累和专长, 熟悉分布式系统的设计和应用,熟悉分布式、缓存、消息和存储等机制;能对分布式常用技术进行合理应用和技术方案落地。
3. 有2B产品架构的经验,制造业IT架构经验, 熟悉微服务架构,Serverless等方面者优先。
4. 热爱技术研发,具有快速学习能力;注重代码质量,有良好的软件工程知识和编码规范意识。
5. 具有高度的抽象设计能力, 思路清晰, 善于思考, 能够独立分析和解决问题, 责任心强; 具备良好的团队合作精神和风险预判能力, 对系统的压力和瓶颈针对性的优化和解决方案落地。

 

高级Java开发工程师/技术专家-研发中台

https://job.alibaba.com/zhaopin/PositionDetail.htmositionId=69877

岗位要求:

1、具有三年以上互联 /软件行业工作经验;
2、对各种开源的框架如 Spring、Mybatis、tomcat、netty、dubbo 等有深入的了解,对框架本身有过开发或重构者可优先考虑;
3、具备系统调试、性能调优等技能,对疑难技术问题具备较强的排查能力。有强烈的责任心和使命感;
4、有大规模、高吞吐量的系统开发实践经验优先;有流程引擎开发经验或serverless化平台开发经验或业务平台建设经验的优先;
5、对技术富有热情,能关注Java或互联 行业技术发展趋势,勇于创新开拓;

 

Java开发技术专家

https://job.alibaba.com/zhaopin/PositionDetail.htmositionId=66575

岗位要求:

1. Java基础扎实,对集合、IO、反射、多线程、NIO等高级特性有深入的掌握,对JVM原理、GC机制有较好的理解。
2. 5年以上的JAVA系统开发经验,精通面向对象设计,对项目中接触过的开源框架、技术产品、算法等有针对性的进行过深入学习,了解其底层机制和原理。
3. 有实际中大型系统设计经验,能有效利用技术手段解决实际业务需求。
4. 对技术富有热情,能关注JAVA或互联 行业技术发展趋势,勇于尝试、敢于推动。
5. 良好的沟通能力,勇于担当,能和团队形成合力。
具备以下能力或经验者优先:
  分布式环境下高可用程序设计和实现(如银行、证券等高可用系统)。
  信息距离理论基础,智能问答系统、爬虫系统设计和实现。
  统一数据接口层或类似平台的架构经验(如开放接口平台、GraphQL等)。

25928-后台开发高级工程师(深圳)

IEG | 深圳 | 技术 | 2019年09月09日

工作职责

  • 负责游戏AI在线服务,包括但不限于在线预测模块,任务调度模块以及运营监控模块;
    负责相关系统模块的设计、开发与维护,确保相关系统稳定运行。

工作要求

  • 本科或以上学历,2年以上相关开发经验;
    精通至少一门服务器端编程语言(PHP/Python/NodeJS/C++)
    责任感强、有较强的逻辑思维能力、沟通能力和抗压能力;
    具备后台开发的能力及系统运维的能力者优先。

https://careers.tencent.com/jobdesc.htmlostId=1123176064093261824

 

30360-用户增长大数据后台高级工程师

PCG | 深圳 | 技术 | 2019年09月09日

工作职责

  • 负责推荐平台架构,AI平台,增长/数据画像DMP后台建设,并优化实时/离线大数据处理流程;
    负责QQ海量用户数据模型开发管理,etl处理,画像建设;
    结合QQ平台业务,优化大数据融合流程架构,提升画像挖掘算法性能。

工作要求

  • 精通spark/flink/hadoop/hbase等分布式计算技术,熟悉其运行机制和体系结构
    精通python/scala/java任意一门编程语言,熟悉c++/golang;
    熟悉业界主流大数据解决方案整体架构,两年以上数据仓库架构/应用经验;
    具备一定的机器学习背景,有算法相关项目开发经验;
    善于发现问题解决问题,良好的编程习惯,优化意识;
    优秀的团队合作沟通能力,较强的学习能力和进取心;

    计算机相关专业,2年以上工作经验;
    熟悉 络编程.数据库等后台开发知识尤佳。

https://careers.tencent.com/jobdesc.htmlostId=1125300900185772032

 

CS 专业课程列表

Computer Science is the study of computers and computational systems. Unlike electrical and computer engineers, computer scientists deal mostly with software and software systems; this includes their theory, design, development, and application.

Principal areas of study within Computer Science include :

artificial intelligence, computer systems and networks, security, database systems, human computer interaction, vision and graphics, numerical analysis, programming languages, software engineering, bioinformatics and theory of computing.

Although knowing how to program is essential to the study of computer science, it is only one element of the field. Computer scientists design and analyze algorithms to solve programs and study the performance of computer hardware and software. The problems that computer scientists encounter range from the abstract– determining what problems can be solved with computers and the complexity of the algorithms that solve them – to the tangible – designing applications that perform well on handheld devices, that are easy to use, and that uphold security measures.

1.计算机导论:

计算机科学的基础课程之一,其教学目的是概要性地对专业课程作介绍,是典型的面向专业新生的课程(即CS0型课程)。认真学习该课程有助于今后的学习,然而这门课程往往容易被新生们忽略……

涵盖了计算机专业的主要内容:计算机硬件和软件的基本概念,包括数据存储、数据处理、数据输入和输出、操作系统、算法、高级程序设计语言、数据结构。计算机 络和Intemet。微机组成。
(推荐教材:可使用学校配发的教材,但建议使用外版翻译教材。)

2.高级语言程序设计:
计算机科学的基础课程之一,教学目的是让本专业同学实际掌握一门程序设计语言并且习得一些程序设计的基本技能,目前的教学语言是C语言。个人认为课程名称可改为“高级程序设计语言”,因为课程对语言的强调远胜于对程序设计本质的讲解。建议在学习这门课程时配以《程序设计实践》一书,效果甚佳。
(推荐教材:
①《从问题到程序——程序设计与C语言引论》 机械工业出版
②《程序设计实践》 机械工业出版
③《程序设计语言——实践之路》 电子工业出版 )

3.离散数学:
计算机科学基础课程之一,被誉为计算机科学的数学基础。其内容博大精深,从中派生出的图论(图算法)、数理逻辑、组合数学以及泛代数等多门专业课程是现代计算机科学和应用数学的主要研究领域。能否学好离散数学对进一步学习以后的专业课程有着非同一般的影响。
(推荐教材及参考书:
①《离散数学》(第四版) 清华大学出版
②《离散数学导学》机械工业出版
③《现代应用数学手册:离散数学卷》清华大学出版 )

4.电路与电子技术:
电子产业有“朝阳产业”的美誉,被认为是信息时代的工业。这门电子与电路技术可谓是对电子学领域学习的敲门砖。虽然课程本身对计算机科学专业今后的学习影响不大,但掌握这项技能对于学生本身专业素养地提高是大有裨益的。同时,学习这门课程也能为今后学习数字逻辑和微机原理等系统底层方面的课程打好基础。
(推荐教材:《电子学基础:电路和元器件》(第四版)清华大学出版 )

5.面向对象程序设计:
如果说上世纪软件开发领域最伟大的突破是什么,面向对象程序设计(OOP)必为其中之一。目前主流的程序设计语言,如C++、Java、Python和Delphi等,几乎清一色支持面向对象。可以说,掌握的面向对象的精髓,便是掌握了我们这个行业的入门钥匙。我校此课程的教学语言采用的是C++,而就国内C++教学的糟糕现状来看,若想完整掌握面向对象思想,学生自己不努力是不行的。
(推荐教材及参考书:
①《C++ Primer中文版》(第四版) 人民邮电出版
②《Essential C++ 中文版》华中科技大学出版
③《Effective C++ 中文版》(第三版)电子工业出版
④《Accelerated C++(影印版)》机械工业出版
⑤《C++语言的设计与演化》机械工业出版 )

6.数字逻辑:
计算机科学核心课程之一。计算机科学中有一个研究领域即系统设计领域,而本门课程即为这一领域研究的基础。正确认识与掌握数字逻辑及其设计,可以使那些有志于系统底层开发的学生获益匪浅。
(推荐教材:
①《数字基础(第八版)》清华大学出版
②《逻辑与计算机设计基础》 中国电力出版 )

7.数据结构与算法:
计算机科学核心课程之一。对数据地有效组织是程序的主要任务之一,算法的主要操作对象亦为数据结构。从简单的数组和链表,到各色高级的抽象数据类型(ADT),数据结构在程序设计中的地位不言而喻。学好数据结构,是进一步学习专业课的基本前提。可以这么说,一个不懂得如何组织和操控数据的学生,根本就不配当我们计算机科学专业的学生,更不配当一名程序员!!!
(推荐教材:
①《C算法 第一卷(第三版)》人民邮电出版
②《程序设计抽象思想——C语言描述》清华大学出版
③《数据抽象与问题求解——C++语言描述(第四版)》清华大学出版
④《数据结构与算法——Java语言描述》机械工业出版 )

8.计算方法:线性代数、微积分、微分方程等的计算机算法

9.计算机原理与汇编:
系统底层课程之一,亦为计算机科学核心课程。重点讲述计算机(微机)构造以及低级语言——汇编语言的基础知识。学习这门课程,对进一步学习编译原理等专业高级课程有很大帮助。
(推荐教材:
①《深入理解计算机系统》中国电力出版
②《Intel汇编语言程序设计(影印版)》清华大学出版
③《Windows环境下32位汇编语言程序设计(第二版)》电子工业出版
④《汇编语言编程艺术》清华大学出版 )

10.操作系统:
计算机科学的核心课程之一。课程全面讲述了操作系统的原理与构造,各类上机实验更能让学生对操作系统有深刻地理解。
(推荐教材:
①《操作系统(第三版)》机械工业出版
②《现代操作系统(第二版)》机械工业出版
③《Linux内核设计与实现(影印版)》机械工业出版
④《UNIX系统编程》机械工业出版
⑤《UNIX环境高级编程(第二版)》人民邮电出版 )

11.软件工程:
计算机科学的核心课程之一。近年来,随着软件开发革命地进一步深化,批判软件工程及过程方法改进的著作日益丰富,我们也得以从不良的软件开放中解放。建议在学习本课程时,联系自己的实战,并阅读批判软件工程和改良软件工程的著作。
(推荐教材及参考书:
①《软件工程:实践者的研究方法(第五版)》机械工业出版
②《程序设计心理学(银年纪念版)》清华大学出版
③《人月神话(银年纪念版)》清华大学出版
④《人件》清华大学出版 )

12.数据库原理及应用:
计算机科学与信息学科的好像课程之一。课程讲述了数据库原理以及设计等方面的内容。对于那些注重实效的学生而言,学好这门课程,可以使今后的工作更为轻松。
(推荐教材:《数据库系统概念(第四版)》机械工业出版 )

13.运筹学及其算法:线性规划、动态规划、排队论、决策分析等
此课程课作为计算机科学的辅助课程,向学生介绍了运筹学方面的算法,此类算法属于现代算法范畴,本人暂时还未涉猎,故恕难对此课程解析之…… (推荐教材:待定)

14.计算机 络:
计算机科学的核心课程之一。课程详细地介绍了计算机 络的发展、组成和协议方面的内容。对于自我要求较高的同学而言,学好这门课程义不容辞!
(推荐教材:
①《计算机 络(第四版)》清华大学出版
②《TCP/IP协议族》清华大学出版 )
15.软件开发管理:
应该是软件工程课的附属课程吧,不详。 (推荐教材:待定)
对于工程,管理重于技术

16.数学建模:
 

17.J2EE体系结构:
J2EE是目前我们产业的两大工业平台之一,学习这门课程,可以为今后涉足企业级开发领域打下基础。但请注意,J2EE和Java语言本身都是在不断演进的,因而如果不能在课程结束后持续学习相关技术,恐怕还不等你出大学校门,这门课的内容就已经过时了…… (推荐教材:最新的国外相关教材。)

18.计算机图形学:
计算机科学的核心课程之一。有关计算机图形学在各个领域的应用不必在下一一说明了吧。无论是游戏开发,还是航空航天等前沿领域,到处都有计算机图形学的技术被应用。目前该课程主要用C语言和OpenGL图形库进行教学,效果应该还算不错。
(推荐教材及参考书:
①《计算机图形学原理与实践-C语言描述(第二版)》机械工业出版
②《交互式计算机图形学——基于OpenGL的自顶向下的方法(第四版)》清华大学出版
③《OpenGL超级宝典(第三版)》 人民邮电出版 )

19.微型计算机技术:
计算机专业的核心课程之一。课程详细地分析了微型计算机(主要是单片机)技术,由于这方面资料奇缺,这门课程可不太受在下欢迎…… (推荐教材:待定)

20.编译原理:
计算机科学核心课程之一。如果想要写出好的程序,编译原理的相关知识必不可少,因而这门课程是十分重点的一门课程。课程教材“龙书”、“虎书”和“鲸书”更是我们专业的经典著作。
(推荐教材:
①《编译原理》机械工业出版
②《现代编译原理——C语言描述》人民邮电出版
③《高级编译器设计与实现》机械工业出版 )

21.Web系统开发:
目前主流的web开发主要集中在ASP.NET和JSP开发领域 ,当然,还有近来火爆异常的Ajax,以前的CGI和ASP已经不那么流行了。与J2EE一样,这是一门必须持续学习的课程,否则,你必将被其所抛弃! (推荐教材:最新国外相关书籍。)

22.嵌入式软件开发:
这个领域可谓是软件开发的前沿领域,也是未来软件业霸主的孕育地之一(另两个领域为Web开发和企业级开发)。目前的软件开发领域正蕴含着“泛嵌入式”的潜规则(《程序员》2006年7月刊)。认真并持续学习这门课程,对将来的工作会有莫大的帮助。 (推荐教材:《嵌入式系统开放大全》人民邮电出版 )

23.算法设计与分析:
计算机科学的核心课程之一。“程序是衣,算法为魂”(《程序员》2006年3月刊),这门课程是本专业学生所亟需掌握的,如果学不好这门课,那么,你就不是一名优秀的程序员!
(推荐教材:
①《数据结构与算法分析-C语言描述》机械工业出版
②《C算法 第一卷 (第三版)》人民邮电出版 )

24.情 检索与利用

 

怎样去寻找资源学习/h1>

 

我搜集了一些资源,放到这个组下面了:

https://github.com/ComputerSchool2019

 

全球最大的程序员 区:Github

https://github.com/search=%E8%AE%A1%E7%AE%97%E6%9C%BA

 

 

Stack Overflow:2019全球编程语言高薪排行榜

 

近日,Stack Overflow 发布了 2019 年的最新调查结果,总结了不同编程语言在行业中可能获得的薪水。当然,在这个过程中也需要关注一些其他因素,比如:语言对使用者是否友好,这有助于更快地学习语言;是否与现在的科技趋势相关。(注:该数据根据 Stack Oveflow2019 年关于编程语言薪酬排行开发者调查 告得出。)

全球十大收入最高的编程语言

如上图是全球前十大收入最高的编程语言排名,但根据调查,收入与地域之间也是有区别的,比如在美国,Scala 的收入最高,可以达到 143k 美元,其次是 Clojure(139k 美元)、Go(136k 美元)、Erlang(135k 美元)、Objective-C(132k 美元);在印度,Clojure 和 Rust 收入最高。

工作经验与薪水

工作经验与薪酬肯定是相关的,但根据调查,有些编程语言无论工作经验多少,薪资都比较高好,而有些编程语言无论多少年工作经验都很一般。

如上图,红圈的大小不同代表着受访者人数的范围不同,横轴代表着工作经验(年数),纵轴代表着薪资中位数。

不难看出,使用 Clojure、F#、Scala、Go、Rust 和 R 语言的开发人员,虽然工作经验并不见得非常多,尤其是 Rust、R、Ruby 和 Go,也会获得不少的薪水。然而,PHP、Java、C、C++,即使有多年开发经验,薪水也很难有比较高的提升。

职位与薪水

当然,薪酬高低也与所从事的职业有非常大的关系。根据对全球四大 IT 市场的调查,DevOps 专家全部高居榜首,可见市场对这一技术的需求量有多大。除此之外,数据科学家、全栈工程师、嵌入式开发工程师、桌面开发人员的市场受欢迎度均较高。

如果按照职位来划分,薪水又会出现一些不同。管理岗位的薪水肯定会略高一些,其余基本与市场需求相对应,DevOps 专家的薪水可以达到 71k 美元,数据或者机器学习专家的薪水可以达到 61k 美元,全栈开发者的薪资为 57k 美元,后端开发者略低一些为 56k 美元。

中国热门编程语言收入情况

国内整体的薪资水平要略低于全球,需求量较大的依旧是 Java、Python 这类语言。如果与全球薪资较高的编程语言比的话,如果对国内主流招聘 站进行统计,以“Go 语言”为关键字在全国范围搜索,热门地区(北上广深等需求量较大的城市)月薪基本集中在 15-30k 人民币之间,一线互联 大厂的薪酬确实更具竞争力,比如 BAT、高德、奇虎 360、滴滴等,不仅给出的月薪更高(25-60k 之间浮动),不少还明确标出可以给 14 至 16 个月的薪水,而所要求的工作经验基本都在 3 到 5 年。

至于 Scala 语言,整体薪水确实比 Go 语言略高一些,在没有筛选的情况下,首页出现的大部分薪资集中在 20-50k 之间,这一结果倒是与全球的调查 告相匹配。

此外,在国内几个招聘 站进行搜索,都没有找到太多有关 Clojure 的招聘需求,样本数量太少,很难判断这一岗位的薪资情况,但可以看出国内对此的需求极低,而 Clojure 在全球市场却可以占到薪资排行榜的第一名,这一结果倒还蛮出乎意料。

国内对于 Rust 的招聘需求并不旺盛,可搜寻到的岗位不到 Go 语言的十分之一,只比 Clojure 好一些,基本是规模较大的企业对此才有招聘需求,比如今日头条、滴滴等,给出的薪资倒是还算优厚,月薪基本集中在 25k 人民币以上。

至于 DevOps,虽然国内可搜寻到的岗位不少,但薪资并没有太高,基本与 Go 语言的区间水平相当,要求具备 3 到 5 年工作经验的依旧是最普遍的。

如果回看 2018 年某招聘 站发布的统计数据,算法研究员和机器学习工程师在过去一年的平均月薪偏高,分别为 28435 元和 26798 元,架构师薪资最高为 29600 元。编程语言中,Go 语言的平均月薪最高为 22961 元,其次是 C++、Python、Java。

编程语言适用场景

虽然薪水高低会成为影响开发人员是否选择的重要因素,但并不是唯一因素,不同编程语言的适用场景也是需要开发人员认真考虑的。

Go

Go 语言由谷歌开发,并于 2009 年 11 月发布。它是开源的,由于这个原因使得它在公司内部的不同项目中得到了积极应用,一些很有名的服务也使用 Go 语言开发,如 SoundCloud、Netflix 和 Dropbox。

近年来 Go 语言受欢迎程度大大提高,还得益于 Go 语言下面的优势:

  • 支持多线程任务
  • 支持并行处理
  • 快速的启动时间
  • 高效的内存管理

很多人都认为它将成为未来的服务器语言,Go 有一些很不错的特性:

  • 它非常简洁、简单和安全
  • 编译非常快
  • 它支持带有嵌入式类型的接口
  • 它不需要任何外部依赖关系来生成静态链接的本机二进制文件

Kotlin

Kotlin 编程语言是由 JetBrains IT 公司开发的,它已经成为 Android 的官方开发语言。这是在 2017 年谷歌开发者大会上宣布的。

它有很多优点,如:

  • 易于理解的语法
  • 与 Java 兼容
  • 谷歌的支持
  • 快速增长的 区

很有可能不久之后的 Android 应用程序完全使用 Kotlin 编写,所以如果想面向移动应用程序编程,应该考虑将 Kotlin 作为一个选择。

Ruby(特别是 Rails)

作为开发 web 应用程序的工具,Ruby 获得了广泛欢迎,并被用于开发全球很多流行产品的服务端部分。Ruby 语言的主要目的是创建强大的、易于理解的程序,其中最重要的不是程序运行的速度,而是开发时间。此外,代码的清晰性和简单性使 Ruby 非常受欢迎。

Ruby 一些不错的特性有:

  • 一切都是对象
  • 模块——这些模块允许在运行时动态添加类层次结构的新元素
  • 代码开发
  • 动态类型
  • 鸭子类型
  • 代码质量

Objective – C

Objective-C 语言用于开发苹果生态系统中的应用程序,纯粹用于开发 Mac OS X 和 iOS。尽管出现了一种新的编程语言 Swift,,但 Objective-C 仍然是开发人员 区中非常流行的选择。此外,因为它与苹果的关系使其拥有一个非常高的需求市场。只要苹果“依赖”Objective-C,开发人员就会一直有市场,并可以获得丰厚的 酬。

Objective-C 一些很好的特性有:

  • 类即对象——每个类都是一个元类的实例
  • 动态类型
  • 可选的静态类型
  • 动态运行时
  • 内省 introspection

C #

C# 是由一群微软工程师开发的,目的是在.NET 平台上开发应用程序。假如希望在微软平台开发本地应用程序并获得相关经验,那么 C# 是理想的语言。

从本质上讲,C# 是一种简单、现代和通用的面向对象的编程语言。C# 的一大优点是相对简单,并且能够更多地关注算法而不是实现细节。目前,C# 被用于开发许多应用程序,从小型桌面程序到大型门户 站和人们日常使用的 web 服务。

C# 主要用于:

  • Windows services——没有 UI 的长时间运行的程序
  • Web 应用程序——客户端 / 服务端应用程序
  • 窗口应用程序——运行在桌面上的应用程序
  • Web 服务——通过 HTTP 提供服务的应用程序
  • 游戏——用 Unity 完成
  • 控制台应用程序——没有 UI 的应用程序

Python

大量的框架工具、培训材料、友好的 区支持、编码的简单性使其在 2019 年的高薪编程语言榜单上占有一席之地。Python 是目前使用最强大的编程语言之一。它用于:

  • 数学计算
  • 数据分析
  • Web 开发
  • 机器学习
  • 任务自动化

事实上 Youtube、Dropbox、Reddit 和 Google 等应用程序都是用 Python 开发的。

Java

很长一段时间以来,Java 编程语言一直是开发人员 区中需求最旺盛的语言之一。Java 主要用于开发银行和自动化测试中的产品。它的跨平台特性非常受欢迎,这是因为 JVM 的缘故。

Java 是一种很有前途的编程语言。它被广泛地用于创建服务器和移动应用程序,还被用作开发 Android 本地应用程序。

Java 可用于开发:

  • 移动应用程序
  • 络应用程序
  • 桌面应用程序
  • 游戏
  • 数据库连接

Swift

Swift 是用于开发苹果平台应用程序的主要语言,主要应用于: 

  • MacOS
  • iOS
  • watchOS
  • tvOS

这是一种非常通用的编程语言,主要用于开发苹果产品。值得一提的是,它是在 5 年前(2014 年)刚发布。其主要和最突出的优点是速度:无论是运行还是启动应用程序。正是这种优势赋予了它这个名字,它的创造者说其吸收了其他语言的所有优势。

总  结

市场上总是缺少有才华的程序员,未来几年,这仍然将是市场上的一个紧迫问题。对上述语言的了解和足够的相关工作经验可以为开发人员打开许多大门。此外,开发者没必要限制自己只使用一种语言。无论是理论还是实践,都可以尝试用另一种编程语言学习新的知识,所需要的只是激情和努力!

 

 


Kotlin 开发者 区

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年8月7日
下一篇 2019年8月7日

相关推荐