先说观点:在没学计算机专业之前,大家都是零基础。
计算机专业科班出身学编程确实有优势,但是这并不意味着非计算机专业就一定比科班出身的差,技术都是不断更新迭代的,能坚持学到最后的才是真正具有专业精神的人。
一、计算机专业学编程的优势在哪里?
1.1 计算机基础
计算机基础,传说中的四门专业课,相信这几门课程也是横亘在科班与非科班之间的一道巨大鸿沟,计算机专业出身基本上在大学期间都有机会接触到这些基础课程,而非计算机专业几乎是无法接触到这些课程的。
举个例子:不管你用的是Python,还是Java,你都要对操作系统有一定程度的了解,操作系统是你理解各种高级编程语言的基础,特别是后端编程,我们需要考虑内存管理,考虑并发编程,考虑网络编程等等,这些东西都必须跟操作系统打交道。
1.2 数据结构与算法
编程语言虽然该学,但是学习计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论。
同样的功能,看实现的具体代码,新手写出来的可能与牛人高手写出来的差距是很大的,这就是算法思想在具体语言上的体现。
作为计算机专业来说,大学里就能接触到算法内容,还有专业老师指导算法成长;。而非科班出身大部分算法学习都只能靠自己。
二、如何提高编程能力,缩小差距?
2.1 计算机基础
纵观各个大厂面试的前两轮,基本上都会重点观察面试人的基础知识,如果前期基础不扎实,那么就很难进入后面的面试
(1)计算机网络
计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
重点学习物理层、数据链路层、网络层、传输层、应用层这些层次结构。要明白各个层次结构之间的关系,明白每个层都具有什么功能,拥有什么协议,重要的一些协议的内容以及作用。要能灵活的将各个层次联系起来。
(2)操作系统
操作系统(Operating System,OS):是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。
(3)数据库
数据库(DataBase ,简称DB ):是长期储存在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。
2.2 算法基础
广义:
- 数据结构:一组数据的存储结构
- 算法:操作数据的一组方法
狭义:
- 指的是某些著名的数据结构和算法,如:队列、栈、堆、二分查找、动态规划等
数据结构和算法你能在任何计算机领域里看到,比如在编译原理中寄存器的分配会用到贪心,死代码检测与消除会用到图论里不可达的知识;操作系统进程、线程调度会用到多级队列和调度算法;组成原理中 Cache 的替换会用到 LRU、FIFO 等算法;开发必备的数据库也离不开 B+ 树、LSM 等数据结构和查找算法。
如果不学习算法,连什么时候用 Map(红黑树实现)、什么时候用 HashMap 都分不清。所以学习算法有助于我们根据应用场景选择最合适的数据结构。
2.3 常用数据结构与算法
工程师工作中必备的核心数据结构,包括链表、数组、栈、队列、堆、树、图、布隆过滤器、LRU Cache、散列表和并查集等。
最基础、最核心的算法,包括递归、排序算法、二分查找、哈希算法、搜索算法、字符串常见算法、贪心算法、分治算法、位运算、回溯算法和动态规划等。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
一、快速排序(Quick Sort) 快速排序采用分治法。首先从数列中挑出一个元素作为中间值。依次遍历数据,所有比中间值小的元素放在左边,所有比中间值大的元素放在右边。然后按此方法对左右两个子序列分别进行递归操作,直到所有数据有序。最理想的情况是,每次划分所选…