想学硬件,系统,应该选择什么专业?

什么计算机科学……各种看不懂





计科和软工都是偏软件,数据库,编程这一类的


机械电子工程 计算机科学与技术


微电子,电子信息系统工程




除了电子商务,带电子的都是了吧,通信的应该也算


国内没有明确的计算机硬件专业
有这方面兴趣条件建议还是出国学习吧


看你说的是什么硬件了,如果说是DIY这种电脑配件,真还没有哪个专业是学这个的,如果说要进NV或者intel这样的,研究底层语言编驱动去吧


就是微电子,清华目前最强的学科。我同学这个假期就是在做CPU,基于MIPS架构的。。。使用的书籍是计算机组成于设计


微电子人才是社会最为稀缺的高级人才, 本科毕业后在微电子学领域及相关的交叉学科领域(如集成电路的设计与制造、计算机技术的开发应用)从事科学研究、教学和应用技术等工作。
教师——从事微电子或者相关专业教学的教师,起薪一般在1000~1500元/月。
硬件工程师——器件制作和工艺,集成电路设计开发,起薪一般在3000~5000元/月。
软件工程师——相关软件的设计和开发工作,起薪一般在1500~5000元/月。希望帮到你


扫二维码下载贴吧客户端

Github 有个「清华大学计算机系课程攻略」的仓库。

我看了下清华大学的计算机系课程表,我这里简单列一下跟计算机相关的课程,其实还有很多文化课、图形学、数字电路、高数等等。

  • 大一:C/C++语言;
  • 大二:Java语言、数据结构、汇编语言;
  • 大三:计算机组成、计算机网络、编译原理、操作系统、数据库系统;

然后,我觉得计算机专业最重要的5门课是:

之所以把这五个作为最重要的课,其实包含一点功利之心,因为校招面试大厂的时候,这五门基础课问的最多的,至于其他的编译原理、汇编语言、数学基础课程不是说不重要,只是相对于校招面试这些课程问题的比较少。

接下来,我就跟大家分享下,我看过数据结构与算法、计算机组成、操作系统、计算机网络、数据库这些课程的书和视频,都是从入门再到进阶的路线。

这里推荐下我当初自学的书籍和视频。

  • 数据结构与算法:《大话数据结构》->《算法图解》->《数据结构与算法之美》 -> 《剑指offer》 -> LeetCode刷题(至少刷到200多道)
  • 操作系统:《操作系统导论》->《现代操作系统》
  • 计算机网络:《图解HTTP》->《图解TCP/IP》->《网络是怎么连接的》 ->《计算机网络自顶向下》->《TCP/IP协议详解卷1》
  • 计算机组成:《程序是怎么跑来的》->《计算机组成原理:软件/接口与设计》->《深入理解计算机系统》

我也把计算机经典书籍(数据结构与算法、操作系统、计算机组成、计算机网络、Linux、数据库等)也整理好了,点击获取方式

B站也有很多学习的视频,我看过觉得不错的分享给你:

  • 操作系统视频:清华大学和哈工大的操作系统都不错
  • 计算机网络视频:计算机网络微课堂
  • 计算机组成原理:哈工大的

很多人同学在大一的时候,就学会了一门编程语言,大概率都是 C 语言,有了一定的编程能力,就可以开始学习数据结构与算法。

数据结构与算法这方面的话是非常非常非常重要的,想要冲大厂的同学们如果这方面不过关可能连笔试都过不去,更别谈面试的手撕算法了。

  • 算法:动态规划、回溯算法、查找算法、搜索算法、贪心算法、分治算法、位运算、双指针、排序、模拟、数学、……
  • 数据结构:数组、栈、队列、字符串、链表、树、图、堆、哈希表、……

强烈推荐浙江大学的算法与数据结构课程,该课程非常系统,也很经典,适合小白入门算法,代码是基于C语言来讲解的,B 站视频链接:

现在大多数高级语言都会有容器,就是把一些常见的数据结构封装成了容器,然后使用起来就比较方便,但是不利于我们理解底层的数据结构是怎么变换和操作的,所以这门课还是很有意义的。

书的话可以结合《大话数据结构》和《数据结构与算法之美》一起看。

这里也推荐 Leetcode官方出品的免费教程 ,网站很细心的按照各个知识点循序渐进地罗列了出来。讲解知识 + 实战演练,学习起来会比看书效率高。

在我看来,笔试能力在校招中要占据 60% 的重要程度。

首先笔试不过,你根本没有面试的展示机会。其次面试中也会反复让你手写代码,以字节为例,每一轮面试都是1-2道编程题,有时候不怎么聊简历;百度每一轮面试有一道编程题。现在公司的面试模式就是这样,如果代码没搞出来,大概率会被淘汰。并且最窒息的是这些代码题都不简单,一般都是 leetcode中等到hard难度。

刷题主要可从以下三个渠道:

《剑指 offer》 作为大经典,是一定要刷两遍以上的,很多题都是面试时的原题。里面包含了很多笔试常用的思想方法。反复看,反复研。我一开始每天10题,过两遍以后,要求自己每天快速过剑指一遍。

leetcode 由于题目十分之多,刷完是不可能的。我的意见是 leetcode作为你弱项的专项练习。 leetcode右侧有标签分类,如下图:

另外在巩固完弱项的情况下,建议将leetcode前300题刷熟练,国内大厂面试出的代码题 80% 都是这个范围内的。

另外,我在刷题的时候看了《labuladong总结的算法小抄》,对算法的理解很有帮助。

  • 链表类(链表反转类题目)
  • 二叉树类(二叉树的遍历类型题,最大公祖先类题目)
  • 动态规划(这个考的基本都是leetcode上的或者是背包问题,对于动态规划问题其实有很多种类,比较见到的就是一维动态和二维动态),另外还有区间调度类型的题目(贪心算法,也属于动态规划的一种特殊情况。

其实也没有什么技巧,多刷题,多理解就好了。

先极力推荐 b 站的《计算机科学速成课》,这个课程是国外录制的,内容真的是好,视频的动画很精美,讲课的时候不会很死板,反正就是不看后悔、相见很晚系列。

对于入门计算机组成,可以先看前 10 个视频,看完这 10 个视频也就不到 2 个小时,看完前 10 个视频对计算机的工作方式就有一个基本的了解了。

看完前 10 个视频就可以开始看书了。

《计算机是怎么样跑起来》和《程序是怎么跑起来的》

讲真,不太建议小白一上来就看那些厚的不行的计算机组成原理的黑皮书,这些书是经典的没错,也正是由于它们是经典的,所以这些书的知识体系很全、很多、很厚。

但是这样很容易让初学者迷失在里头,可能刚兴致勃勃看几十页就放弃了,于是这些厚的不行的书就成为了你们的垫书神器知识没学多少,颈椎病倒是治好了。

对于初学者,我推荐两本书《计算机是怎么样跑起来》和《程序是怎么跑起来的》,这两本很薄而且图文并茂,作者都是用大白话的方式来阐述知识,这点对初学者非常友好。

这两本不用 1 个月就能看完,因为在看这两本书的时候,你会看的很顺畅,相比学习的心态,你更多的是会带着「好奇心」的心态去读。

其中《程序是怎么跑起来的》是一个「微缩版本」的计算机组成原理,你可以只选择看这一本。

从这本书的名字也可以知道,它是从计算机是怎么运行程序的视角来讲的,然后把涉及到的计算机硬件和它们之间是如何协作的一点一点的给大家带出来,让大家能瞬间明白这些计算机硬件的作用。

这本仅仅是入门级别,主要的作用是让初学者明白计算机组成原理这门课是学什么的,以及梳理主要的知识体系,用了这本书的概念后,在去深入计算机组成的时候,就不会雨里雾里的。

编码:隐匿在计算机软硬件背后的语言》这本书也很不错,是本科普类的书,非常适合非科班的同学。

主要讲是计算机工作的原理(二进制编码、加减法运算、计算机部件、浮点数定点数、处理器等),也就是跟计组息息相关的知识,它的内容很有趣味性,并不想教科书那样晦涩难懂,丝毫不会让你感到生硬,读起来很畅快。

《计算机组成与设计:硬件 / 软件接口》

想要深入学习计算机组成原理的同学,我首先推荐《计算机组成与设计:硬件 / 软件接口》这本书,

这本书确实很厚,差不多 500 多页,但是书从来没有人规定一定要从头读到尾,一页页的读的。重要的不是看完一本书,而是从书上学到多少,解决了什么问题。

大家可以挑这几个章节看,跟开发者关系比较大的章节:

  • 第一章:计算机抽象以及相关技术,这个章节主要是介绍了计算机组成的思想,可以简单快读看,不用重点读;
  • 第二章:指令,大体上讲的是计算机是如果识别和运行指令的,以及代码到指令的过程;
  • 第三章:计算机的算数运算,介绍的是计算机是如何进行加减乘除法的,以及浮点数的运算;
  • 第五章:层次化存储,讲的是计算机的存储层次结构,而且重点讲的是 CPU Cahe。

计算机组成原理视频课程

看书觉得很累,也可以结合视频一起看,这里推荐哈工大的《计算机组成原理》视频,在 b 站就可以直接看,大家自己去搜索就可以。

看书和看视频可以相互结合的,比如你看视频看了计算机指令的内容,然后你可以不用继续往下看,可以回到一本书上,看书上对应这个章节的内容,这是个很好的学习方法,视频和书籍相辅相成。

你要是觉得哈工大的计组课程太难,你可以看王道考研的计算机组成原理的视频课程,同样 b 站就可以看。

这个视频虽然是针对考研的,但是也是可以作为学习计组的资料,讲的内容不会太深,适合你快速建立计算机组成原理体系,和梳理计组知识的脉络。

另外,在推荐一本《深入理解计算系统》这本书,人称 CSAPP。

可能大家以为这本书是讲操作系统的,我最开始也以为是这样。后面当我开始啃这本书的时候,发现我大错特错,它远不止我想的那样。

这本书是从程序员的角度学习计算机系统是如何工作的,通过描述程序是如何映射到计算机系统上,程序是如何执行的,以及程序效率低下的原因,这样的方式可以让大家能更好的知道「程序与计算机系统」的关系。

CSAPP 涵盖的内容非常多,有计算机组成 + 操作系统 + 汇编 + C语言 + Linux系统编程,涉猎的领域比较多,是一本综合性的书,更是一本程序员修炼内功的指引书。

CSAPP 主要包括以下内容:

  • 信息表示(如何使用二进制表示整型、浮点数等);
  • C 和汇编语言的学习(通过汇编语言更深入地理解C语言是什么);
  • 计算机体系结构(存储层次结构、局部性原理、处理器体系结构);
  • 编译链接(C语言如何从文本变成可执行文件、静态链接、动态链接);
  • 操作系统的使用(异常控制流、虚拟内存、多个系统调用介绍);
  • 网络及并发编程(并发的基本概念、网络相关的系统调用的介绍)。

你会发现有部分内容和《计算机组成与设计:硬件 / 软件接口》这本书重合了,重合的部分就是重中之重的计算机组成原理知识了,而且内容都是差不多的,你可以看完一本书的内容,然后跳到另外一本看相同章节的内容,多本书的结合可以让我们更加容易理解。

  • 《计算机组成与设计:硬件 / 软件接口》讲的指令格式是 RISC 的;
  • 《深入理解计算系统》讲的指令格式是 x86 的;

其他重合的计组知识都大同小异。

CSAPP 的视频课程是国外老师录制的,但是在 b 站已经有好人帮我们做了中文字幕,看了这视频,相当于在国外上了一门计算机课的感觉。

如果你是在校生,有了一定 C 语言基础后,非常建议你就开始看这本书,有精力也可以做做 CSAPP 的 lab。越早开始看,你的收益就越大,因为当计算机体系搭建起来后,你后面再深入每一个课程的时候,你会发现学起来会比较轻松些。

对于已经工作了,但是计算机系统没有一个清晰认识的读者,也可以从这本书开始一点一点学起来,这本书是很厚,但是并不一定要把书完完看完,每个章节的知识点还是比较独立的,有关硬件的章节我们可以选择跳过。

计算机网络相比操作系统好学非常多,因为计算机网络不抽象,你要想知道网络中的细节,你都可以通过抓包来分析,而且不管是手机、个人电脑和服务器,它们所使用的计算网络协议是一致的。

也就是说,计算机网络不会因为设备的不同而不同,大家都遵循这一套「规则」来相互通信,这套规则就是 TCP/IP 网络模型。

TCP/IP 网络参考模型共有 4 层,其中需要我们熟练掌握的是应用层、传输层和网络层,至于网络接口层(数据链路层和物理层)我们只需要做简单的了解就可以了。

对于应用层,当然重点要熟悉最常见的 ,传输层 TCP 和 UDP 都要熟悉,网络层要熟悉 ,IPv6 可以做简单点了解。

我觉得学习一个东西,就从我们常见的事情开始着手。

比如, ping 命令可以说在我们判断网络环境的时候,最常使用的了,你可以先把你电脑 ping 你舍友或同事的电脑的过程中发生的事情都搞明白,这样就基本知道一个数据包是怎么转发的了,于是你就知道了网络层、数据链路层和物理层之间是如何工作,如何相互配合的了。

搞明白了 ,我相信你学起 HTTP 请求过程的时候,会很快就能掌握了,因为网络层以下的工作方式,你在学习 ping 的时候就已经明白了,这时就只需要认真掌握传输层中的 TCP 和应用层中的 HTTP 协议,就能搞明白了,这也是面试常见的题目了,毕竟它能考察你网络知识的全面性。

重中之重的知识就是 TCP 了,TCP 不管是的过程,还是数据传输的过程,都不能放过,针对数据可靠传输的特性,又可以拆解为等等知识点,学完这些只能算对 TCP 有个「感性」的认识,另外我们还得知道 Linux 提供的 的作用,这样才能从容地应对工作中遇到的问题。

接下来,推荐我看过并觉得不错的计算机网络相关的书籍和视频。

此系列针对没有任何计算机基础的朋友,如果已经对计算机轻车熟路的大佬,也不要忽略,不妨看看我推荐的正确吗。

如果你要入门 HTTP,首先最好书籍就是《图解 HTTP》了,作者真的做到完完全全的「图解」,小林的图解功夫还是从这里偷学到不少,书籍不厚,相信优秀的你,几天就可以看完了。

如果要入门 TCP/IP 网络模型,我推荐的是《图解 TCP/IP》,这本书也是以大量的图文来介绍了 TCP/IP 网络模式的每一层,但是这个书籍的顺序不是从「应用层 —> 物理层」,而是从「物理层 -> 应用层」顺序开始讲的,这一点我觉得不太好,这样一上来就把最枯燥的部分讲了,很容易就被劝退了,所以我建议先跳过前面几个章节,先看网络层和传输层的章节,然后再回头看前面的这几个章节。

另外,你想了解网络是怎么传输,那我推荐《网络是怎样连接的》,这本书相对比较全面的把访问一个网页的发生的过程讲解了一遍,其中关于电信等运营商是怎么传输的,这部分你可以跳过,当然你感兴趣也可以看,只是我觉得没必要看。

如果你觉得书籍过于枯燥,你可以结合 B 站《计算机网络微课堂》视频一起学习,这个视频是湖南科技大学老师制作的,PPT 的动图是我见过做的最用心的了,一看就懂的佳作。

看完入门系列,相信你对计算机网络已经有个大体的认识了,接下来我们也不能放慢脚步,快马加鞭,借此机会继续深入学习,因为隐藏在背后的细节还是很多的。

对于 TCP/IP 网络模型深入学习的话,推荐《计算机网络 - 自顶向下方法》,这本书是从我们最熟悉 HTTP 开始说起,一层一层的说到最后物理层的,有种挖地洞的感觉,这样的内容编排顺序相对是比较合理的。

但如果要深入 TCP,前面的这些书还远远不够,赋有计算机网络圣经的之说的《TCP/IP 详解 卷一:协议》这本书,是进一步深入学习的好资料,这本书的作者用各种实验的方式来细说各种协议,但不得不说,这本书真的很枯燥,当时我也啃的很难受,但是它质量是真的很高,这本书我只看了 TCP 部分,其他部分你可以选择性看,但是你一定要过几遍这本书的 TCP 部分,涵盖的内容非常全且细。

要说我看过最好的 TCP 资料,那必定是《The TCP/IP GUIDE》这本书了,目前只有英文版本的,而且有个专门的网址可以白嫖看这本书的内容,图片都是彩色,看起来很舒服很鲜明,小林之前写的 TCP 文章不少案例和图片都是参考这里的,这本书精华部分就是把 TCP 滑动窗口和流量控制说的超级明白,很可惜拥塞控制部分说的不多。

当然,计算机网络最牛逼的资料,那必定 RFC 文档,它可以称为计算机网络世界的「法规」,也是最新、最权威和最正确的地方了,困惑大家的 TCP 为什么三次握手和四次挥手,其实在 RFC 文档几句话就说明白了。

就这样学成计算机网络后,我在知乎共输出了 20 多篇图解网络系列的文章,总字数高达 15W 字,并且手绘的图共有 500 张,收获了很多读者的认可和支持,不少读者跑来感激我,说我的图解网络在面试中帮助到他们,不少人拿到了阿里、腾讯、字节等大厂的Offer。

为了帮忙阅读我把图解网络整理成了PDF,大家可以作为面基突击的手册,开源给大家下载:

操作系统真的可以说是 Super Man,它为了我们做了非常厉害的事情,以至于我们根本察觉不到,只有通过学习它,我们才能深刻体会到它的精妙之处,甚至会被计算机科学家设计思想所震撼,有些思想实际上也是可以应用于我们工作开发中。

操作系统比较重要的四大模块,分别是、、、。这是我学习操作系统的顺序,也是我推荐给大家的学习顺序,因为内存管理不仅是最重要、最难的模块,也是和其他模块关联性最大的模块,先把它搞定,后续的模块学起来我认为会相对轻松一些。

学习的过程中,你可能会遇到很多「虚拟」的概念,比如虚拟内存、虚拟文件系统,实际上它们的本质上都是一样的,都是向下屏蔽差异,向上提供统一的东西,以方便我们程序员使用。

还有,你也遇到各种各样的,在这里你可以看到数据结构与算法的魅力,重要的是我们要理解为什么要提出那么多调度算法,你当然可以说是为了更快更有效率,但是因什么问题而因此引入新算法的这个过程,更是我们重点学习的地方。

你也会开始明白进程与线程最大的区别在于上下文切换过程中,线程不用切换虚拟内存,因为同一个进程内的线程都是共享虚拟内存空间的,线程就单这一点不用切换,就相比进程上下文切换的性能开销减少了很多。由于虚拟内存与物理内存的映射关系需要查询页表,页表的查询是很慢的过程,因此会把常用的地址映射关系缓存在 TLB 里的,这样便可以提高页表的查询速度,如果发生了进程切换,那 TLB 缓存的地址映射关系就会失效,缓存失效就意味着命中率降低,于是虚拟地址转为物理地址这一过程就会很慢。

你也开始不会傻傻的认为 read 或 write 之后数据就直接写到硬盘了,更不会觉得多次操作 read 或 write 方法性能会很低,因为你发现操作系统会有个「磁盘高速缓冲区」,它已经帮我们做了缓存的工作,它会预读数据、缓存最近访问的数据,以及使用 I/O 调度算法来合并和排队磁盘调度 I/O,这些都是为了减少操作系统对磁盘的访问频率。

还有太多太多了,我在这里就不赘述了,剩下的就交给你们在学习操作系统的途中去探索和发现了。

还有一点需要注意,学操作系统的时候,不要误以为它是在说 Linux 操作系统,这也是我初学的时候犯的一个错误,操作系统是集合大多数操作系统实现的思想,跟实际具体实现的 Linux 操作系统多少都会有点差别,如果要想 Linux 操作系统的具体实现方式,可以选择看 Linux 内核相关的资料,但是在这之前你先掌握了操作系统的基本知识,这样学起来才能事半功倍。

我也把计算机经典书籍也整理好了,点击获取方式

对于没学过操作系统的小白,我建议学的时候,不要直接闷头看书。相信我,你不用几分钟就会打退堂鼓,然后就把厚厚的书拿去垫显示器了,从此再无后续,毕竟直接看书太特喵的枯燥了,当然不如用来垫显示器玩游戏来着香。

B 站关于操作系统课程资源很多,我在里面也看了不同老师讲的课程,觉得比较好的入门级课程是《操作系统 - 清华大学》,该课程由清华大学老师向勇和陈渝授课,虽然我们上不了清华大学,但是至少我们可以在网上选择听清华大学的课嘛。课程授课的顺序,就如我前面推荐的学习顺序:「内存管理 -> 进程管理 -> 文件系统管理 -> 输入输出设备管理」。

B 站清华大学操作系统视频地址:

该清华大学的视频教学搭配的书应该是《现代操作系统》,你可以视频和书籍两者结合一起学,比如看完视频的内存管理,然后就看书上对应的章节,这样相比直接啃书相对会比较好。

清华大学的操作系统视频课讲的比较精炼,涉及到的内容没有那么细,《操作系统 - 哈工大》李治军老师授课的视频课程相对就会比较细节,老师会用 Linux 内核代码的角度带你进一步理解操作系统,也会用生活小例子帮助你理解。

B 站哈工大操作系统视频地址:

《现代操作系统》这本书我感觉缺少比较多细节,说的还是比较笼统,而且书也好无聊。

推荐一个说的更细的操作系统书 —— 《操作系统导论》,这本书不仅告诉你 What,还会告诉你 How,书的内容都是循序渐进,层层递进的,阅读起来还是觉得挺有意思的,这本书的内存管理和并发这两个部分说的很棒,这本书的中文版本我也没找到资源,不过微信读书可以免费看这本书。

当然,少不了这本被称为神书的《深入理解计算机系统》,豆瓣评分高达 9.8 分,这本书严格来说不算操作系统书,它是以程序员视角理解计算机系统,不只是涉及到操作系统,还涉及到了计算机组成、C 语言、汇编语言等知识,是一本综合性比较强的书。

它告诉我们计算机是如何设计和工作的,操作系统有哪些重点,它们的作用又是什么,这本书的目标其实便是要讲清楚原理,但并不会把某个话题挖掘地过于深入,过于细节。看看这本书后,我们就可以对计算机系统各组件的工作方式有了理性的认识。在一定程度上,其实它是在锻炼一种思维方式 —— 计算思维。

我学成操作系统后,也写了图解操作系统系列文章,现在已整理成PDF。

数据库是后端程序员必须掌握的一个技术栈了,数据库分为关系型数据库和非关系型数据库,常见的就是MySQL和Redis,接下来分别说下他们的学习心得。

MySQL 入门的话是了解 SQL 语法,进阶的话是深入底层实现原理。

千万不要一上来就看《高性能 MySQL 》,我曾经先读《高性能 MySQL 》然后一路暴雷…,因为这本不是入门的书籍!

我先介绍下 MySQL 的重点知识,也是面试常面的知识点:

  • 索引:B+树,聚族索引,二级索引,组合索引,最左匹配原则,索引失效、慢查询
  • 事务:事务四大特性ACID,事务隔离级别,MVCC
  • 锁:全局锁、表级锁、行级锁、快照读、当前读、乐观锁、悲观锁、死锁
  • 架构:读写分离、主从架构、分库分表、数据库和缓存双写一致性

MySQL 入门推荐《SQL必知必会》,这一本很薄的书,主要是讲数据库增删查改的 SQL 语法。

学完 SQL 语法,我们不能止步,要深入去了解 MySQL 底层知识。

这里建议先看《MySQL 是怎么运行的》,这本书含有很多图,是小白学习 MySQL 底层知识的最佳书籍。

MySQL 用的最多的就是 InnoDB 引擎了,所以进一步学习 InnoDB 是很有必要的,这里推荐《MySQL技术内幕》,这本书可以结合《MySQL是怎么样运行的》一起看。

好了,看完上面的,你对 MySQL 已经有相当多的认识了,MySQL 还有一本高性能的书,非常的经典,这本书比较厚,索引章节大家可以去看看,看完后你对索引的认识又会刷新一遍。

要入门Redis,就要先知道这东西怎么用,说白了,最开始就是先学习操作Reids的相关命令,就像我们入门MySQL的时候,都是先学习SQL语言。

入门Redis命令这一块我当时没有去专门买书看,而是直接看视频,因为我觉得命令的使用实操性还是比较强的,跟着老师敲命令学习会比较快一些。

这里我推荐下B站上面的这个Redis课,讲的还是挺清晰的,也把Redis很多重点知识也讲了,比如Redis基本数据结构、持久化技术、主从复制、哨兵、集群等等,一套连招下来,就基本入门了。

官网也有一整套的命令详解,遇到需要或者不会的地方可以查一下:

视频是帮助我们快速入门,但是并不能至于视频,因为一些细节的知识点视频上并没有提及,这时候我们就要回归书本。

这里推荐学习Redis的圣经级别的书——《Redis设计与实现》,因为它太经典了!

这本书不是教你如何使用Redis,而是讲解跟你讲Redis是怎么实现,怎么设计的,也就说源码级别的学习,但是书上并没有大段贴代码,作者是用伪代码的方式来讲解,所以读起来不会太难的。

书本上主要围绕这几大知识点:数据结构、AOF和RDB持久化技术、网络输入输出系统、主从复制、哨兵模式、集群模式

到这里你已经是入门Redis了,不仅会了Redis基本命令,还懂Redis的实现。剩下的就是学习如何在实战中运用Redis。

《Redis实战》一书是 Redis Group 讨论组中的热门发言者 所作, 该书通过实际的例子, 展示了使用 Redis 构建多种不同的应用程序的方法。 处于进阶阶段的 Redis 学习者可以通过阅读该书来学习如何使用 Redis 去构建实际的应用, 然后举一反三, 把书中介绍的程序和方法应用到自己遇到的问题上。

除了《Redis实战》之外, 国内外的很多公司(比如twitter、新浪微博等)都在网上公布了他们使用 Redis 的方法、心得和经验, Redis 学习者可以通过这些分享中了解到更多使用 Redis 的例子, 以及这些公司在使用 Redis 过程中遇到的问题、困难和陷阱, 从而学会如何在实际中更好地使用和管理 Redis 。

实践使用 Redis 的另一个难点是如何在大规模的数据环境中使用 Redis , 要解决这个问题就需要对 Redis 进行扩展: 目前扩展 Redis 常见的技术包括 Redis 自带的、和 功能, 以及 和 等项目, Redis 用户可以通过这些技术的相关文档来学习如何使用这些技术。

接下来,分享我看书的心得。

没有人规定看书一定要一页一页的全部看完,我们要知道看书的目的是什么?

无非不就是收获知识,和解决问题嘛。所以最好的看书方式是带着问题去翻阅,比如:

  • 带着程序是如何在计算机里跑起来的问题,去学计算机组成原理和csapp;
  • 带着输入一条 url 期间发生了什么的问题,去学习计算机网络;
  • 带着有哪些高效的排序算法的问题,去学习算法

我曾经在知乎也分享过,我看书的心得,现在这个回答已经快3000+赞了,帮助到了很多同学。

自己的开发经历,正在逐步补充,有兴趣的可以看看

在推送的问题里总有很多IT行业选择、学习、读研方面的问题,这些问题对于初入IT世界的人的确很多重要,说一些自己的感受,算是给大家的一些建议吧。

我92年毕业,一直在做软件开发工作,这些东西只是直接的感受。算是个人经验。

说一句,你有什么问题,都可以在评论中提出来,我尽量回答

1、本科选择哪个专业比较好?

一般来说,主要是硬件、软件、计算机科学,这是三个主要学科,其他的什么大数据、人工智能等都是细分学科。说白了,是为抓眼球的,所以不会细说。

计算机科学,侧重基础理论研究,数学功力要强,本质上讲,这个学科和数学专业差别不大,但对计算机方面比其他两个专业弱,算是数学和计算机技术的一个结合行业。这个学科出来的人,开始会弱一点,但后劲大,因为IT本质上和数学关系很大。之所以弱,是因为他们对开发工具相对不熟悉,所以工作后,开始上手会比较慢,但数学功底好,对个人的快速提升,好处很大。这里说一下,数学、物理专业这些对数学要求很高的专业,转行做码农的一般比较好,就是因为软件开发的核心是算法。如果你选择这个专业,最好掌握一些开发工具的使用。这样后边会比较舒服。

软件,正规的名字是软件工程,他有一堆孩子(自专业)比如什么大数据、AI之类的。其实,就是软件工程+基本行业初级入门课。基础而已,实际能力提升有限。软件工程出来是比较的码农,这个方向是数学知识(弱一点)+软件工程知识+开发工具使用,这个行业出来的更多的应该是工程师,而不是研究人员,谁是研究人员,没错,是计算机科学的那帮家伙。但现在很多本科代码量只有2000行,这是很大的一个问题,开发量不够,工具使用必然不熟练,很多书本知识和现实对不起来。于是出现了本科毕业不如外边的培训班的情况。悲哀呀,多说一句,本科毕业应该代码量是2-4万行,而且最好有一个程序是1万行左右的,如果你可以做到,你面试的时候说出来,可以看效果,(你找工作的时候就知道了)。

硬件,有时候叫计算机应用,说简单点是就是玩板子的,牛的芯片,做板子,软件会学汇编、C开发语言,硬件是线路设计,对现在的什么云,大数据一概不懂,但他们其实很牛。为什么,第一硬件的限制会妨碍软件的开发,或者说,有一些问题软件无法解决,硬件可以,这也是雷军为什么由软件转到硬件的原因,第二,对计算机的机理了解很清楚,他们中的一些牛人做的东西,效率奇高。你看计算机发展史,牛人都是软硬通吃的。

2外边的培训学校的作用。

说一句不客气的话,如果你是计算机专业的学生,理论上不要接受培训,为什么?原因很简单,学习能力是搞IT必备的能力,在大学本科,学些开发语言,环境配置等,这些东西是最好的训练你学习能力的东西,而外边的培训机构主要是对工具软件的使用的培训,而不是对计算机核心竞争力---算法能力的培训,所有很多非专业的人接收培训,即使进入IT行业,但走远的不多。而IT界使用的工具更替虽然现在放缓了很多,但比其他行业不是快的,所以,通过自己学习、体会、尝试来提高学习能力,是需要在本科阶段完成的。最后说一句,持续学习,高效学习,如果这个能力有了,即使不做IT,你的发展也不会差,反之,你在IT界也混不好。

3、女生时候可以学习IT?

哈哈,第一个程序员叫ADa,一个女性,我们的祖师奶奶,女生学习IT没有特别的问题,其实主要是一些外在的原因,另外是女生的生理和社会责任承担的比较多产生的问题,说几个问题

A:数学能力或者逻辑能力,这个真看出来太多的差异,每个人都有自己的擅长的方面,和男女关系不大,男生逻辑差,学的不好的也很多。但很多女生认为自己天生有问题,这个属于个人认识问题,

B:女生的仔细、认真其实一个加分项,编程需要仔细和认真,一般男生在这一点明显不如女生。学习能力其实很多女生比男生好,如果再加上认真,很多女神真是男生痛恨,

C:女生做IT有两个明显的弱点,一个是结婚、生子会产生一段很长的职业中断期,如果是刚毕业,则影响更大,而工作前三年实际是工作习惯养成期,对个人未来发展影响很大。另外一个,就是犯懒,很多女生,一旦有机会就不做代码,你看学校里,如果女生有了男朋友,一般都是男生coding,这个其实对女生能力养成影响很大。所以,如果你是女生,一点要注意工作经验的积累。

4、本科的那些学科比较重要

第一个就是我最痛恶的英语,所以在本科阶段你最好过6级,最其他是4级,为什么,现在IT的发展,中国不是最先进的,很多资料、工具的使用手册英语居多,如果等翻译,最起码晚1-2年,而且有时候根本就没有,所以,你要掌握最新技术,预测未来发展方向,最好会英语。

第二个是数学相关的课程,高代、高数、线性代数、算法等,方正只要和数学沾边的都是重要课程,

第三是软件工程,这个是软件开发的核心课程,你看它的名字就知道了,

第四,专业课,比如计算机原理、数据库概论等,这些功课很难学,主要是没有参照系,所以一旦要做一些小系统,这些理论对你未来的发展很重要,说一个玩笑,数据库结构设计,很少有人按照理论进行设计,结果经常把自己玩死。

第五,多看一些课外书,软件工艺、代码大全1,2,日月神话等经典的IT书籍

5、学习软件工程,就一定要做coding吗?

不一定,第一软件行业现在有很多细分行业,比如售前支持、需求调研、售后服务、系统运营,还有比较高级的产品经理和项目经理,甚至自己独立创业。这是作为行业内部来说的。

另外,可以跨行业,比如做咨询、媒体的,甚至我还遇到过去做蛋糕店的。所以说,软件工程专业未必一定做Coding.

需要说明的一个事情,IT界相对人员智商比较高,学习能力和耐力比较强,持续学习能力比较强,而且因为IT可以和所有行业结合,所以,转行的比较多,而且成功案例不少,这个是事实,当然,我也遇到过50-60岁左右的程序员,也是牛人。

6、学习软件工程,需要一个好电脑吗?

哈哈,估计你玩游戏、看电影的时间比开发的时间长,一般来说,搞软件的不用太好的电脑,因为开发的工具所消耗的资源比看电影需要的资源少很多。说一个真实的事情,有事情用低性能的电脑能发现很多隐藏很深的不够,这个你相信吗?

7、学IT要考研究生吗?

如果家庭经济可以,最好考,一个是技术生涯的问题,博士是要发现问题,硕士是要解决问题(从算法层面),本科是实现解决代码。基本可以这样理解,所以,博士、硕士、本科接收的训练是不同的,当然,很多人是通过自己的努力可以达到博士的级别,但如果有机会接收正规的训练,则时间会少的多,当然,你不努力,不能算。

另外一个就是,硕士现在是很多单位实际入门门槛,这个是一个现实,即使你再有本事,很多时候连大门都进不去,机会自然丧失,所以,如果可以最好考研究生。

8、如何有效的过大学四年的生活(软件工程专业)

说一下自己的方法,毕竟大学毕业时间太久了,只是从未来的工作角度对大学学习内容做一个总结,具体的学习安排,需要你自己根据实际情况进行调整。

第一年要快速打基础,主要解决三个问题,第一个解决英语,如果你在1-2年级不能解决英语问题,对你后边主力很大,要说明的是现在最新科技还是以英文资料为主,所以在第一年要争取过4级,最起码解决英语资料阅读的问题,后边虽然要持续学习,但时间可以相对缩短。第二个问题是数学,包括高数、高代,算法等,方正和数学有关的需要打牢基础,大量做题,无论是考研还是工作,数学思维能力和很重要,工作的时候,虽然一般代码不用太复杂的数学知识,但除非你不想提升自己的能力,否则,数学思维能力是你快速提升的关键。最后一个是尽量掌握一门开发语言,最好是类似C或者C++之类的,这些语言学起来不是很快,但比较接地气,一旦掌握后,后边的其他语言学习起来比较快。代码量最好有几千行,最大的一个程序最好超过1500行。

第二年,主要学习计算机相关知识,计算机原理、操作系统等,这些东西是软件和硬件结合的东西,也是基础,除了基础课程以外,多读一些软件工程相关的书籍,比如代码大全,软件工艺,硅谷发展史之类的书,打开自己的眼界。同时要注意代码的积累,可以编写一些实用的程序了,可以是课程任务,也可以是自己想做的小工具,锻炼自己解决问题的能力,代码量要在左右。这个阶段编程你是很赚痛苦的,但可以为理解软件工程、数据库结构设计打下基础。

第三年,主要解决未来发展方向的问题,主要准备考研,要开始复习了,但主要是的选择自己的方向。课程方面要理解哪些枯燥的专业理论(这也是为什么大二的时候要编程,没有经验,不吃亏,很难理解工程性问题)。在方向性,要选择行业方向,大量寻找和阅读资料,最好在相关领域做一些实验性的程序。

第四年,是疯狂编程年,如果你不考研,全年都是疯狂编程,最起码后半年是疯狂年,要求最好掌握1-2门开发语言,做一个实际的,可用的系统,这个可以和毕业设计结合,但程序最好上万行,并且将学习的理论在这里实际使用,这个程序,需要你自己思考,设计,反复修改,这是对你自己的打磨,如果你真编写了万行代码(一个程序),而且是自己独立思考的,会归纳、总结问题(寻找真实需求),独立寻找解决问题方法(思维能力,解决问题能力),独立编程(工具使用能力、专业技能)都会有一个突破。读研,你会比较轻松,工作,你的能力一定超过同期的毕业生。

9、软件开发是青春饭吗?

真不是,那是因为客观因素,国外软件的发展也就几十年,国内第一批的软件工程硕士学位大约现在在58岁以上(当年很多人入大学时候已经20多岁了),我自己今年正好50岁,当年上学的时候,我们大学是很少的开软件工程这个专业的学校,所以,严格意义上说,现在的软件工程专业都应该在50以下。

那么为什么大龄程序员少,主要原因如下,这个行业刚开始的时候,我们本身是本科生,当时又是热门行业,所以机会很多,当时毕业的时候,如果去中关村买电脑,回扣可以给2、3千元(92年),如果你在公司,这无疑是一个快速发财的机会,很多人,直接转行了。另外,就是出国的多,当年,出国,可以拿几千美金,而在国内是几百元(我自己第一个月工资是162),当年,汇率是16:1.所以大量人员出国,(软件行业是最好出国的几个行业之一)。我们大学班是33个同学,毕业的时候,出国的是7个人,这还没有算后来出国的。如果是北大、清华、中国科大,比例更高。其次,转行机会高。当时,编写万把行程序,就能是一个不错的产品,很多人是在体系内完成初创,然后,出去成立公司。好的成为了公司老大,也有很多人转运营了,这样剩下的人就更少了。

那么,有没有一直在做开发的,有,我见过很多一直编码的,但更多的是,虽然不编码,但一直做开发工作的。拿我自己来说,工作前七年基本是编码,再七年是编码+项目管理,后来,跳出中科院,去了一个做交通的公司,但本质上还是开发,主要是研发管理,质量管理,但也总是和开发人员一起解决问题,这个时间大约有12、3年,很多实用算法都是我自己思考,然后让底下人去实现,至于讨论什么数据库设计、算法设计都是常事,帮手下找bug、优化代码也是我喜欢做的,最近3,4年,虽然不太做这些了,但主要是行业融合,和跨行业融合方面的事情,简单说,就是更高一个层面了,但掌握了软件开发后,这些事情做起来就比较优势,而且相对容易。

所以,做软件工程,如果你把它侠义地理解为编码,那么35-40岁是一个坎,主要是因为精力不能象年轻的时候那么去打熬,但如果你掌握了其核心方法,职业生涯的升级还是相对容易。而且,无论是作为项目经理、产品经理还是领域专家,其实对项目成功和企业的影响,其作用要远远大约程序员。

所以个人认为,主要持续学习,能力持续增加,你是很难被淘汰的。

10、软件工程未来的发展方向有哪些?

第一个是纯技术研发,这个就是造轮子的人。比如操作系统、编译器、AI算法研究。包括以后的量子计算机等技术。(个人感觉量子计算机编程与现在的编程改变很大,也许是一个弯道超车的机会)。原来国家在这个方面投入比较少,主要是生态圈的问题,当时是被国外压制的比较厉害的。现在国内企业(华为等)已经开始起步,以后这些地方改变是改变IT生态圈情况的一个地方。但这些工作,具有理论研究程度深、时间长,出成果难的问题,如果你进入这些领域需要有足够的情怀。

第二个是技术应用。这个方面就比较广了,因为计算机技术几乎可以和所有行业进行融合,也就是说所有行业都有计算机的影子,计算机技术原来最早是用一些科学家计算,后来进入了办公领域,开始仅仅仅是用于打字,后来逐渐形成了OA和一些专用的mis系统,再后来是各系统进行互联互通。随着无线通讯的发展,物联网设备发展。信息技术逐渐融入到所有的传统行业中。基本上形成了前端自动感应,网络自动传输,后台自动判断和处理。再后来是把所有收集到的数据进行处理,也就是现在所谓的大数据技术和人工智能技术。所以说信息技术的应用是一个非常广阔的领域,而需要的人才也是非常多的。这也是为什么?虽然有大量的人员涌入,而信息化技术人员却很难饱和的一个主要原因。

第三个是技术管理,随着信息化系统越来越庞大,将原来单靠个人奋斗所取得成功的例子越来越少,现在所有的项目都几乎要一个团队才能应付得了。孕育而生的就是项目经理和产品经理。产品经理是负责一个产品的设想、规划、研发、推广、运营、维护、退出市场的全面管理工作。而项目经理是负责一个项目的规划、实施、检查、调整、调整、结束。不要太纠结于项目经理和产品经理的职责。他们之间既有交叉也有各自的特点。这里就不再细说了,但好的产品经理和项目经理一定是技术和管理都比较优秀的人员。所以说一般开发人员5~7年后都需要学习项目管理的基本知识。而产品经理和项目经理是将市场管理技术相结合的人。综合能力要求非常高,也是一个不错的发展方向。

第4个是技术辅助工作,虽然是辅助性工作,但有时候也是非常需要和重要的。比如说市场支持需要懂技术、善交流,对行业的主流产品非常熟悉,可以快速的根据用户的需求系统的技术方案和实施方案。同时善于保护自己的公司,打击竞争对手。比如测试工作,虽然测试人员的存存在感并不高,但好的测试人员可以极大的减少系统的整体研发费用。而且让人吃惊的是,软件测试费用在整个项目费用中占有很大的比例,目前我国好的测试人员和测试管理人员相对稀少。另外一个是需求分析人员,软件项目失败有80%的原因是跟软件需求有关,而在前期,如果能减少这部分的错误,可以极大的提高热量产品开发的成功率。可惜的是软件需求人员这一职位并没有引起真正的重视,所以现在还是在使用拍脑袋决定需求的阶段。什么时候中国的需求分析人员成为一个重要的职位,也就意味着中国软件真正的成长起来了。当然其他的职位还有很多。比如UI设计、质量保证人员等等等等。如果你有幸做了这些工作,一定要记住,这些工作都是有很强的实践性,无法仅仅通过书本知识获得真正的工作经验,一定要将工作和书本相结合,一旦你成为了一个真正的行业专家,你的职业情景也是非常广阔的。

第5个就比较另类了,一般来说,It往往是跟某一个行业相结合。也就是在做某一个行行业特定产品的设计人员一定会对相关的行业10分了解,否则是不可能开发出好的产品的。这就出现了一个非常奇怪的现象,当开发人员开发出了一套真正NB的行业产品是,往往会给传统行业培养出几个专业人员,而且因为It人员精通数学和模型搭建,所以往往会被行业提出很多新的思路和方法。这些人员如果再去弥补一下行业的专业知识,往往会成为另外一个行业的技术专家。所以会出现一种从it公司跳到传统行业公司的人。这些人都是行业融合的结果。以后可以做咨询、做顾问,一般来说,可以两头通吃,舒服的不要不要的。哈哈哈哈哈哈

11、哪些神鸟是如何练成的

原来没有接触过编程的人员,在看到那些编程神鸟的时候,往往只剩下仰慕了。可是他们到底是怎么炼成的呢?说一点自己的总结经验,

第一下笨功夫,在很多电影中,那些神奇的黑客神鸟手指如飞,屏幕上唰唰唰的一行显示闪过,令人神往,要是做到这一点,你的指法要好吧?你的命令得记住吧?你的命令参数得记住吧。这些东西都是要下笨功夫的。所以你回去看看,你能否熟练使用所有的开发平台?你能否记住所有的类,类里边的函数和成员变量,类之间的关系图。等等等等。这些你如果能够随手敲出,你的工作效率会提高很多。

第二,多读别人的源代码,读代码是一个快速学习的过程,代码风格的形成,精致算法的理解,系统架构的设计,这些东西都可以通过读别人的源代码获得提升。当然你如果是读了那些糟糕的代码,就去给他们找问题吧。我见过最漂亮的代码是Unix的系统源代码,读那些代码真是一种享受。所以有时间去多读一些经典的源代码。

第三,算法,在软件行业中算法是最核心的,如果你没有数学思维的正确方式,那你很难成为一个大家,所以在数学和算法方面下多大的功夫都不为过。

第四,编码和调试,编码和调试是需要通过大量的时间来提高自己的能力,这的确是无法通过简单的书本来销售给其他人,有时候神鸟们经常有一种神奇的找错方法,其实说简单点儿,就是犯不了所有的问题,知道他会引起什么样的现象,这个时候看别人的Bug很快就可以原来的经验相匹配,从而快速的给你找出问题来,所以在敲代码遇到Bug的时候,不要急于去找别人帮助,而是要自己逐渐缩小范围,这个过程中会消耗大量的时间。但这也是从菜鸟到神鸟的养成的必然经历。所以如果你是在学生阶段,花两三天去找一个bug还是很值得的。

第五,读一些经典的计算机研发的图书,这些数据读起来很枯燥,但读懂任何一本都会使你有一个很大的提高。

12本科最重要的一件事情--确定未来职业方向

在大学阶段有个比较重要的事情就是确定自己的未来发展方向。如果在本科阶段能确定自己的发展行业,而且所选择的行业与自己的兴趣和能力比较匹配,那么后来的生活会容易很多,自己的一些观点,未必正确仅供参考吧

第一、对新鲜事物充满好奇的人,做事情喜欢自己上手的人,能够自己闷着头很长时间做一个事情的人,一般做开发不错,毕竟做软件是一个实践性比较强的行业,很多东西没有成规,需要自己去探索,而且,做软件需要大量的算法研究,需要一个人能够深入钻研,而过于活泼的人兴趣点不断转换,很难对问题进行深入的钻研。

第二、经过比较好的数学能力培养的人,做软件开发一般不会差,数学系统、高能物理等学科的学生如果转行的软件行业,一般不错,这个是很软件行业的特点相关,毕竟算法是软件开发的核心。数学能力最简单的检验方法是不见得是数学科目的成绩很高,而是在经过思考后,可以做所谓的难题,也就是说,个人的思考方式很重要,很多数学科目成绩好的,未必善于解决实际问题,而有一些所谓的差生,在实际工作却表现不错。道理很简单,考试主要考知识点,而思维方式却相对比较少,而实际工作中,你有时间去快速学习知识点,弥补自己的不足。

第三、喜欢偷懒的人比较适合做软件,软件实际主要将重复性的东西交给机器去做,好的开发人员总是有一个特点就是偷懒,思考事情的规律,不断总结,将那些可以重复的工作交付给计算机去做,也就是所谓造轮子的人,一个只能完成领导交付的任务,辛苦的996的人,未必是一个好的开发人员。(造一个轮子,可以成百倍降低工作量。而一个只会重复做一类事情的程序员,从本质来说才是真正的码农)。

第四、敢于放飞自己,不墨守成规的人比较适合做软件,初级程序员需要规范自己的工作方法,而高级程序员往往要敢于打破原有的体系,在系统架构设计、核心算法优化的时候,如果总是墨守成规,整个系统必然很难形成突破,大胆思考、小心求证是优秀程序员的特点。所以,没有自己的思维,总是因循守旧的开发人员,很难形成职业生涯的突破,而一个突破往往会提高系统的百倍效率,

说一下好的开发人员的一些特点,是否没有这些特点的人就不能做软件开发,其实不是,因为在软件开发过程中,核心的人员其实是少数,这些人是开发团队的精华,而很多工作需要一般的开发人员去做,比如:市场人员可以弥补开发人员的一些问题。而一些喜欢做重复劳动的人,做测试、质量保障、编码其实都是不错的。在这里,主要需要提醒你,如果你喜欢软件开发,可以在本科和研究生阶段,强化自己的技能,而如果你不是这方面的顶尖人才,可以适当加强自己其他的技能,做一个复合型人才。我自己其实也不能在纯软件技能上达到顶尖水平,在中科院的时候,不断被学霸和学神打压,对学霸还可以有翻身的机会,学神基本不可能。所以,我后来是向管理和技术结合的道路走,后来又结合了一个行业。这样,虽然在单一技能上无法打压学神,但可以有多种技能加成,这样也获得了学神们的认可。当然,这个道路是在工作以后逐步探索,浪费了很多时间,所以,提醒同学们,一定通过自己4年本科3年研究生了解自己的特长。规划自己的未来职业的发展。最后说一句,很多人,最后的工作和自己的原来专业方向没有任何关系,这没有什么。很正常的事情。

13IT本科需要学习几种计算机语言

说到这问题需要讲讲计算机语言的发展史。最早的计算机语言是二进制码,所有的指令都是0和1组成,有点是速度快,计算机容易处理,当时的计算机能力极弱,这个特点很适合计算机的使用,但无论是调试、编程都是极为繁琐的事情,后来随着机器性能的提高,于是人们想了一些偷懒的方法,有助记词来替代一些01指令代码。这就是汇编语言,在后来随着机器能力提高,人们将编写程序改成了近似于人类的语言和思维的语言,当然,这些语言计算机是无法读懂的,这个时候,人们编写了一些特殊的程序,将这些语言转变为计算机可以读懂的二进制语言,这个程序就是编译程序。所以我们现在一般都是在一个集成环境中,用高级语言编写程序,在进行编译连接,形成可执行文件,然后执行可执行程序。如果你看可执行程序,都是二进制代码,几乎无法读懂。

现在的高级语言有上万种,而且还会不断涌现,为什么会这样,主要是人们根据自己的需要不断开发符合特定需要的计算机语言以提高开发效率。比如在PC刚开始普及的时候,BASIC语言以易学易用得到飞速普及(盖茨的成名产品之一)。但这样语言实在不适合编写大型程序,我记得一个问题就是它的变量都是全局变量,哈哈,有编程经验的都知道这个是多大的一个麻烦。而PASCAL是在上世纪80、90年代比较好的一个语言,主要是因为编程环境和模块化管理做的比较好。作为教学用的工具深受教师和学生的喜欢。

还有一点要强调的是作为软件的专业人员,所有的计算机语言都是工具,而不是软件开发的核心,在以后的数据工作中,你会慢慢体会到算法是核心,而工程理论和方法是重点。计算机语言只是一个是否适用的工具,如果工具适用,则开发效果还好很多,否则会走弯路,但算法和工程管理出项目,项目失败的概率会很大。

此外,计算机语言很多东西是类似的,比如基础语法、数据类型等,而库函数、类库函数等很多东西概念也是相同的。精通一种语言后,在快速学习另外一种语言速度是很快的。我自己的项目经常是在项目开始后才确定开发语言和环境(没有办法,很多时候是客户要求的),而我自己在组织项目的时候,很多语言自己并不完全了解,但这并不妨碍我管理的项目的顺利进行。(开发语言,是初级和中级程序员必须熟练掌握的,而高级人员很多时候只要掌握掌握其核心和特点即可)。

最后说一下,熟练掌握一个面向过程的语言,一个面向对象的语言足够了,4年的时间大学学习时间,你如果能有C或者Java有4万行代码,最大程序超过万行代码,你对算法和工程理解会比同阶段的人员高很多,而你的价值一定远超所谓精通几十种开发语言的高级研发本科生的。

14大学学习的目的是什么

首先,本科毕业的大学生出路一般是两个,一个是读研,一个是工作。本科四年主要是为这两个事情做准备,这两个事情都需要什么条件才可以走的比较顺利。对于本科毕业的计算机类学生,企业其实不是寄予太多的希望,而是看你的发展潜力。

发展潜力主要包含:基础知识是否扎实和实战能力。是一个比较关键的事情。作为IT类的学生数学功底和英语功底是比较重要的。毕竟IT的核心是算法,其次是英语,这个不用多说,很多最新技术英文的资料还是比较新的。最后一个容易被忽视的是文字能力,说简单点就是语文。在工作后,文档是开发人员避不开的东西,而且随着职务的提高,文字能力就更加突出。不仅仅是技术文档,在用户交流用的技术和管理文档中,不说人话的文档比比皆是。这个问题是比较突出的。

在说实战能力,最基础的就是编码。现在的本科毕业生令人遗憾的就是代码量太少,很多只有行。这个水平就是小玩闹级别的,基本不能解决实际问题,随着编程环境越来越好,从某种角度上限制了现在开发人员的培养。举一个例子。我们当初编写课程设计的时候,需要比较编写一些复杂的程序,比如图文混编编辑器,当时的编程环境不是那么方便,需要先设置成图形方式,然后设计这个编辑器的总体结构,然后设计图形元素的数据结构,文字元素的数据结构。各种元素的编辑方法,解决各种设计缺陷和冲突。最后还需要设计保存的文件结构。说实在的,当时基本上要3-4个人,干半年,代码量接近万行。当时的开发比现在开发难多了,效率也不高,但这些训练,让我们熟练掌握了开发语言、编程环境、程序的调试方法。对团队协作等方面也有很多接触,这样,在进入工作后,进入角色比较快。IT行业的学习,很多时候,很难做到理论和实践结合,通过一个万行左右的大型程序的开发,让我们遇到了后来工作中遇到的技术70%的问题。这是很可贵的经验。具体说一下:

A快速掌握一种开发语言,计算机语言是工具,我们后来在需要使用新开发语言的时候,一般搞三本书,一个是入门,一个精通,一个资源库。入门用于快速了解,按照书上的程序可以快速编写实验程序。精通主要根据项目的实际需要,看一些特殊功能使用说明,这种书看法是需要什么,看什么,通过目录了解内容,根据项目选择看的章节,资源库是用于对详细函数、类等资源的详细介绍,在编码的时候、遇到问题时候,调试时作为手册进行。这里说一下,开发人员要精通一门或者两门开发语言,其他的语言都可以快速进行映射(学习起来比较快)。掌握1到2门语言的事情,最好在本科毕业的时候完成,不要给后边的工作增加不必要的压力。

B程序调试能力。程序出问题了,会自己调试,会读代码进行分析。现在很多毕业的人员连打断点、看变量都不会。我也是无言了,作为软件开发人员,如果不能想明白程序在不同状态下变量的数值,那一定不是好的程序员,毕竟计算机只是你的思维的实现器,你都说明白,计算机程序一定乱的一团糊涂。程序调试能力没有办法学习,只能通过大量的编码是养成,代码阅读(分析)能力、bug产生原因的分析,程序功能冲突的解决,性能的提升都和开发人员具有的调试能力有比较密切的关系。

15说一点找工作的事情。

这个事情,如果在刚进入大学或者读研很少有人考虑,但真到了毕业的时候,往往发现自己的资历不够,或者盲目入门,对自己的未来的发展影响很大。所以,在选择工作的时候,根据自己的需求,对企业类型有一定的了解,是需要的,而在刚入学的时候,做一些功课还是需要的,这样可以有效避免现上轿现扎耳朵眼的现象。

先说研究机构,国家或者省市的科研机构,一般来说是提升自己能力比较好的单位,很多项目目前只有在一些科研就够在可能接触到,比如中科院、各类大学、很多大型国企比如航天科技等也有比较好的科研机会(注意,是参与大型项目的机会,而不是挣钱,当然现在很多国企的科研人员的机会还是不错的)。这类企业好的是项目机会、学习机会,很多人一头扎进入,十几年后,很可能成为某个方面的专家,另外,职称什么的,这类单位会比较好评,但要注意一点,这些单位也同时会很“毁”人,对那些有比较高的追求(情怀)的人,同时也能在技术学习主动的人会比较好。说简单点,就你给你玩命提高、干活的地方。所以很多从这些地方出来的人,到外企和私企都获得不错,毕竟有一手技术和管理经验。这些地方对情商、智商、学习能力等潜在的能力要求比较高,在这些地方,就是一群聪明人抢(好)活干,对人的磨练是很大的,所以,在这种单位干几年,有很多无形的好处。过去,很多人说国营单位人浮于事的现象。简单做一个说明,目前,国营单位很多都在改革,很多考核,不见得比私企和外企少。很多国营单位对老职工需要将人情,说简单点,我就见过因为工作原因,造成孩子的智商有问题,这些孩子可以说刚出生就为国家做了贡献,所以单位会对这些孩子做一些安排,(这种现象越来越少)。还有一个原因,很多单位的工作内容单纯从市场上讲,是一定亏损的,但国家需要,这算是一种比较普遍的现象,另外对于大型国营单位,很多职位是冗余设计,因为 很多时候时候,你无法指望其他人帮你完成,很多时候,即使你有钱都不行,这次疫情的时候,你看看是那些厂家可以快速生产口罩等设备,你就明白了按部就班容易,但在短时间内,出生产线,那可不是简单的事情,国企的很多人,在平时的确是吊儿郎当,但在这个时候却很管用,这也是很多国企说的,关键的时候,你能冲的上去就是英雄,所以,进国企的时候,不要轻视任何人,顺便说一句,国企的确是国企能人比较多的地方。

外企,原来去外企是一个好的出路,但现在最起码在it行业,未必是最优解,原来去待遇好,机会多,当时,很多外企在中国具有技术领先,本地化要求等方面的原因,的确是一个不错的选择,但也有一些问题,首先,大型外企也有国营企业的问题,比如机构僵化、责任归属。这些问题其实和企业规模有关,另外就是天花板问题,现在,国内企业起来后,面临的竞争更加激烈,技术领先已经不是那么明显,但企业的灵活度不够,很多时候打不过国内的私企。在外企的最要命的问题是,你就是一个螺丝钉,往往一个东西可以吃10年,15年,开始,你觉得自己很牛。但这个东西一旦被淘汰,你就是一无所有(指技能)。温水煮青蛙,是外企最容易遇到的问题,另外,现在很多外企裁人的人,也是很凶猛的,虽然待遇不错,但人的心理落差是很大的。

16如果你是牛人,可以多学习那些知识。

这里说的一些对你未来可能需要的书籍。当然,在看这些书的时候,请先学好你的所有课程。

A首先来说,作为开发人员,设计能力要过关,这里是说的是设计,而不仅仅是编码,建议好好读读《代码大全》、《代码大全2》这两本书是对软件开发实战经验的最好总结,虽然时间很长了,但是经典。

B软件工程,软件开发毕竟是工程,而不仅仅是算法研究,算法很重要,但一个算法在实验室理论实现后,如何在工程中使用,一直是一个问题。很多时候,做项目不可能仅仅一个算法可以成功。

C看一下员原来的软件工程的经典图书,比如《人月神话》、《人件》这些书原来都是成套的,为什么开发人员喜欢完成工作,996为什么成为一个永恒的话题,这些书其实都有讲到。多这些书,主要是提高自己的认知能力。

以上三类书读明白了,基本可以对自己的外来的开发生涯都一个清晰的认识,可以提高你的工作效率(提高工作效率未来工作很重要的一个事情,这里说的是个人工作效率)

D项目开发是团队工作,PMP的pmbok是一个很好的东西,这个东西其实一个做项目的框架,说实在的对我的影响很大。在开发人员30-35岁的基本都会遇到中年危机。产生这个危机的主要原因其实是个人能力(技术水平、管理能力、个人精力等)和工作压力的失衡。pmp这个东西实际是让你如何进行判断和高效执行任务的方法论。单纯的使用,可以让你高效保证项目的成功,如果你理解深刻,其实可以渗透中生活的很多方面,而不是在危机到来的时候才后悔。

E:读读其他行业的书,比如《长尾理论》《免费》等,这也是系列图书,这些数揭示了互联网经济的核心实质。而我们的软件开发其实只是这些实质实现所使用的一个工具,这些书类似于如何种庄稼的教科书,而it本科学的东西相对于如何使用锄头的说明书,所以如果你如果希望进入互联网行业,对这些东西有适当了解,才能更充分发挥你手里锄头的作用,至于什么c还是Java那个更好的争论,其实是你用镰刀收割还是自动收割机收割麦子的问题。但前提是你要种出来麦子。

F:读读it历史,科学的发展史,人类的发展史。

说一下其他的吧,希望对新入坑的同学们有帮助,这些问题主要针对未来工作

1学会思维方法。方法比知识点重要,学习的方法、沟通的方法、初级程序人员、中级程序员、高级程序员、项目经理、产品经理、部门经理,公司副总不同职位的人,工作内容不同,方法不同,思维方式也不同,而很多人遇到职业瓶颈,其实不是知识点的缺失,而是思维方式没有更新,举一个例子,钱学森是我国一个著名的科学家,而其他科学家比较,他牛的主要是他的思维方式,如果你有时间读一下他的传记,看一下他的工作经历,工作方式,工作内容,和其他科学家做一个对比,就会发现区别了(没有拉踩其他人,只是说明一个问题)

2学会交流,学得屠龙术,卖与帝王家,在本科或者研究生的学习过程中,知识的学习和方法的学习,这个不多说了,说一点交流的问题,很多研发人员很轻视这个问题,总认为这是拍领导马屁,没有用,其实不是,交流让领导、同事、客户了解你的能力、做事方法、资源需求等。说简单点,做事情需要资源,你没有获得这些资源,很多事情就无法完成,通过适当的方法获得这些资源,才能保证事情的顺利进行。

3有经验的程序员未来可以做的岗位?

以下内容是从别人那里搬运过来的,我的建议放在括号里了

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

业务类的架构师。如果你业务不错,擅长方案设计、沟通、演讲和PPT,可以考虑。(这个其实不是架构师,是售前技术支持,一般IT人员在一个行业做久了,可以考虑这个行业,好处是经验丰富,行业和IT结合,可以分别打压纯技术人员或者行业人员。坏处。毕竟不是行业内科班出身,容易用自己的爱好PK人家的专业,闹笑话。另外一个是丧失自己专业的敏感性。最后成为万金油式人员。另外,会长期出差、开会,进行一些开发人员认为无聊的活动。这个职位最好的进入方式,在这个行业做了10年以上,而且自己刻苦学习过相关专业知识,这样容易和行业专业人士快速打入,并可以行业专家们进行深入讨论,利用跨界思维方式,提出自己的建议,这样客户比较认可,而且,反过来,可以和开发人员进行技术讨论,如果你能把业务流程说的很明白,而且是用开发人员理解的语言,估计没有开发人员不会视你为珍宝。这个职位最大的核心是行业融合,跨界思维)
中高级的技术管理者。不要做一线的技术管理人员,多数时候依然需要写代码的。中高级的技术管理者,写代码的必要性,几乎就没了。(中高级开发者不编码,恐怕是所有人对软件开发的误解,第一个需要说明的是现在很多)
软件项目经理。你项目管理能力、计划、沟通、组织、协调、谈判等,都还不错的话,可以考虑转做软件项目的管理管理。
测试经理。开发搞得不错,补一下测试理论和技术,去带测试团队,也可以的。
软件质量经理。这个也可以的,主要是做软件过程质量控制流程和规范,进行质量监督和控制等。
售前架构师。主要调研需求,出技术方案等。沟通、协调、方案规划等能力不错,可以考虑。
售后技术支持或支持经理。有不少大型软件或软件结合的方案,会有这个岗位。比如华为的核心网,就有很多了。做过开发的伙伴,在技术能力上,做这个完全没问题。如果你有服务意识,能出差,会沟通,擅长甩锅,可以考虑。
产品经理。做一个懂技术的产品经理,也蛮有竞争力的。
增长黑客。主要是通过各种数据和程序手段搞定增长,拉新、促活、转化、留存等等运营上的事儿可能都要做。
数据库工程师(DBA)。你懂的,可以考虑。
IT讲师。能开发课程,能讲课程,就可以试试。培训机构一大把,都需要老师。有些民办大学,也缺有实践经验的老师。
技术顾问。你技术很牛的话,这个也可以考虑,给行业内的公司做技术顾问。
敏捷教练。很多公司都在做敏捷转型,这是个不错的方向,收入也不错。
互联网运营。工作内容主要是围绕着拉新、促活、转化、留存等做运营,做活动。
需求分析师。传统软件开发领域会有这个角色,项目制的软件开发项目,也会有这个角色。从甲方给的需求,分析转化成自己这边的业务需求或功能性需求,甚至是软件需求规格说明书(SRS)。
数据分析师。这个岗位,专门从事行业数据搜集、整理、分析,并依据数据做出行业研究、评估和预测。在不同公司,可能又有细分,有牵涉到算法、模型和编程的数据挖掘工程师,有靠近业务和商务这边的,主要是分析数据,挖掘数据,给方案、结论或建议,需要对业务很熟悉。
网管。稍微有点规模的公司,都有这个角色吧,新员工入职时整整电脑,配置网络,各种设置,公司内部网络环境维护等等。
IT经理。公司比较大,会有专门的IT部分,负责整个IT设备的采购、管理等等,这个部门的头儿,就是IT经理。
运维工程师。负责系统的运维,不过现在很多岗位,也要求写代码,起码Python要玩儿得起来。
配置管理工程师。比较大的、比较规范的软件研发团队,主要负责产品开发过程中的软件配置管理,如版本库、构建系统、文档管理等等。
技术图书作者。我也出版过两本技术图书,也认识不少专门靠写技术图书吃饭的程序员。如果你喜欢琢磨新技术的话,也可以做这个,写入门类的就可以了。
网课老师。自己开发技术课程,图文、视频、直播等,都可以。现在有很多平台。这个根据情况,会写一些demo代码了。
技术自媒体。嗯嗯,这个我有很多朋友在做呀,知乎上、公众号、B站、头条等,都有,起步很艰难,收入没上限。如果你乐意写东西,做运营,可以考虑了。
企业内训师。嗯,很多了,你在某个技术方向很厉害或者有很厉害的实践经验,都可以尝试。

16不要歧视技术文档的编写

软件研发的核心是算法,重点是设计,编码其实在软件开发的工作中只占5%的工作量,怎么样是不是很意外,只占5%的工作量的代码编程工作确认码农们的工作需要996,讲一下原理吧。

A我们在本科阶段编写的大部分程序基本上是2000行内,主要是实现一些课内的题目,这类程序具有需求明确,算法简单,再加上一般能在大学学习IT类的同学智商尚可,基本将需求分析、设计和编码工作一勺烩了。100行代码需要写文档的哥们还是不要做开发了(真的,虽然和残酷)。所以,不是不应该写,而是因为问题太简单了,虽然我们已经思考过,但没有必要为了写文档而写文档。但你未来面对的代码是几万、十几万,甚至几十万,你就不能不写了。所以还是建议,大家在2000以上的程序,还是需要练习写一些文档(不要讲所有难点都都集中在一件事情上,会很麻烦的),开始学习编程,经历放在语法学习、环境熟悉、调试技能的提高上,编写几千行的代码,主要训练分析问题(需求),分解问题,降级难度(设计构架),这个阶段一个主要内容就是写文档。

B文档的出现其实是和IT的应用越来越广泛,系统越来越复杂相关的,现在的系统不说别的,几百个数据库表,几千个数据项是很简单的,之间的关系错综复杂,没有一个文件,很难通过程序看明白其复杂的关系,这还只是数据库设计,在架构、数据接口、算法设计上等很多方面,就更复杂了,这个时候,如果没有文档,团队开发几乎不可进行,在牛的开发人员也不可能记住所有的东西(有,原来红旗Linux的孙玉芳就可以,但那是人精,当年全国Linux前三位的主),我等凡人还是算了,与其大家吵得一塌糊涂,不如写下来,减少麻烦。

C文档设计本身也是分类型和层次的,类型主要是指文档由需求文档、设计文档、程序注解(可以替代详细设计文档)、测试文档、使用文档、维护文档,甚至还应该包括相关管理文档(这个就不多说了),而文档本身的编写也是分层次的,这样将一个复杂的问题不断进行分解、分层,让一个复杂问题编程了若干简单问题,这其实是一个通用的工作方法。

D文档的作用简单说一下,1理清思路,将复杂问题简单化,2供批判,用于进行技术讨论,防止讨论变成空对空的口嗨。3后续工作,比如编码和工作变更的依据。4一旦出现争议的证据。

第一套是计算机程序设计艺术,学习软件的哥们,建议在大一的时候就要买一套,原因很简单,软件的核心是算法,这套书真正读明白了,你的大学就算没有白读。

代码大全2建议大二、大三的哥们好好读一读,这不是讲某种语言的书,实际是开发的经验总结,特点就是实战性强,很多东西开始未必理解,如果有个万把行程序打底,对里边的总结就会深有感触了。我的项目组是人手一本。对了,代码大全2的例子是面向对象的,代码大全1的示例是C语言,如果你学习C语言,是一本不错的参考书。只不过代码大全1已经绝版了,我去找找电子版

软件行业充满了各种新概念、定义,无数人在里边忽悠,我自己是工作了7年后,读了半年这本书,别的不说,反正想忽悠我不是那么容易的。同时,这本书可以说是承上启下的一本书,如果你想从软件研发走向软件研发管理。这本是一个不错的过渡读物。

我要回帖

更多关于 文科就业前景好的专业 的文章

 

随机推荐