编程学习之道

引言

程序——这个熟悉又陌生的东西,其实存在于我们生活的方方面面:我们手机上的即时通讯 APP “微信”、移动支付 APP “支付宝”、短视频 APP “抖音” 背后都是一个程序,我们去银行柜台存钱时小姐姐电脑上操作的系统也是一个程序,我们爱玩的 “王者荣耀”、“原神”、“艾尔登法环”、Switch 游戏是通过程序呈现出来的,甚至去自助快递柜取快递也是程序的功劳。你是否也想过写一个自己的程序?但是当你面对 “程序” 这两个字时,却望而却步了…这种心情我是非常理解的,因为我也曾经历过这样的处境:当下定决心想要开始学习编程,却望着密密麻麻的代码一头雾水,苦于找不到合适的入门教程,跟不上老师课上的内容,编程生涯逐渐走向全剧终。正因如此,我才想将自己过去11年学习计算机编程的相关经验总结出来,好让大家乘凉。

适合谁

  • 初学计算机与软件工程相关专业的大学生
  • 未来希望从事互联网前端/后端研发工作的朋友
  • 计算机编程感兴趣的朋友

计算机基础

要想学会编程和系统研发,基础知识是必不可少的,我根据未来实际工作的需要,筛选了最常用、最必要的知识点(以我在一线互联网大厂工作四年的经验),最大程度的减轻你不必要的记忆负担,又能让你收获满满。

1 编程语言

对初学者而言,建议学习Java语言,因为它语法优雅、纯面向对象、生态圈完善,同时也是互联网公司使用最多的语言,比如后端研发、Android研发均使用Java,一举多得,为你将来就业提供了多种选择。

 

2 面向对象

代码也有三六九等之分,我们只是会写 1 + 1 = 2 这种 “面向过程” 的代码远远不能应付现实世界的开发任务,或者说应付起来会很累。这时,“面向对象” 的思想和语言(上面的 Java,当然还有其他语言)出现了,它是目前仍然被广泛使用的软件开发方法,在一切工程里都会用到,可以说不会面向对象,就写不出简洁易懂、扩展性高、可读性好的程序!

3 数据结构

程序里的主角其实是数据,成千上万个数据不是孤立存在的,他们之间需要建立联系,那要设计一个怎样的结构,才能使得程序运行效率高,存储快速又节约呢?那就是数据结构啦。

4 操作系统

如果把我们编写的程序比喻成一道菜的话,那操作系统就是我们做菜的灶台,这道菜依赖灶台提供平面切菜、给气、打火。一个个程序需要由操作系统分配内存、CPU核心、硬盘资源才能有条不紊地运行起来。平日我们耳熟能详的有Windows、Android、iOS操作系统。其实在工作中我们很少直接跟操作系统打交道,但它的影子偶尔也会出现一下,对它更了解有助于加深对计算机的认识。

5 计算机网络

我们每天都会连接WIFI和4G来上网,而之所以我们可以用电脑浏览新闻,可以用手机跟远在他乡的朋友组团打游戏,是因为我们的设备、他们的设备、服务器三者建立了网络链路,数据基于这条链路所规定的协议来传输数据。计算机网络是很底层、固定、复杂的,我们没有必要锱铢必较,一般在工作中只需要了解几个常用的网络协议、发送与接受数据的方法就足矣了。

应用研发

前面提到过,计算机程序和应用有很多种形态,有桌面客户端版的,有手机 APP 版的,有 Web 网页版的,但目前无论是大学项目、公司项目、外包项目,还是 Web 版占绝大多数。功利地讲,学会了 Web 研发,收益最大,既可以接外包做项目,找工作也不愁。Web 研发主要分为前端和后端两侧的研发,两侧使用到的技术也不相同。另外还有客户端研发,比如 Android 和 iOS 研发,他们也是前端的一种展现。

1 前端研发

不得不说,这是一个看脸的时代,“颜值既正义” 在前端研发里依然受用。前端研发所涉及的技术较多,HTML/CSS/JavaScript/React/Vue等,大家不必像教科书一上来就学HTML/CSS/JavaScript这三个基础技术,可以换个思路,直接先搭建一个现成的前端页面——Ant Design Pro,这样更容易获得成就感,然后再顺着它的页面看下来,逐步去摸索 Ant Design 组件库,再摸索过程中就不得不学习 React 前端开发框架,最后再学习 HTML/CSS/JavaScript 的细节。

2 客户端研发

客户端研发看希望往哪个方向发展,有 Android 和 iOS 两个主流方向可以选择:如果是 Android 使用的是 Java 或 Kotlin,我们需要安装虚拟机或者直接用一个测试手机来调试 APP,Android 开发上主要是要熟悉 SDK 对应的开发模式,如何使用它的组件来布局(有点类似于前端)、图层与图层之间的关系控制、给组件注册事件、管理页面等等;如果是 iOS 则需要学习 Objective C,整体编程体感跟上面 Android 类似。

 

3 后端研发

前端研发只教会了我们做页面,但不配备一个对应的后端程序存储和处理用户的数据,那它也只是一个空壳,因为前端只是在用户电脑上打开的一个单薄的页面,它没有强大的计算和存储能力。因此需要我们进行后端研发(又称:服务器端研发),将研发好的程序打包,放在服务器上,执行一个命令让其运行起来,再与前端页面建立网络连接,大功告成~ 后端建议先学习 SpringBoot 应用框架,它开箱即用,可以很快速地对接前端,并给我们生成了一个面面俱到的模板,我们只用在里面编写处理请求的代码即可,然后学习 MySQL 数据库,用于结构化地存储我们的数据,也方便我们更快地读取。

软件工程

上面的计算机基础和Web研发其实都在点技能树、学习技能的过程。有了技能,我们依然打不好怪,那是因为我们不懂得如何精确而有效地施法。软件工程正是指导我们做这件事的,它教会我们在遇到特定的问题、特定的业务场景,应该怎样分析问题,怎样拆解问题,怎样设计方案,怎样编写代码,怎样合理地把程序放到服务器上。这里面最有用也最应该优先学习的是:UML 建模和设计模式。

1 UML 建模

要开发一个功能稍微多一点的系统或软件,光靠我们在脑子里想,很难,于是有了UML建模,它围绕软件开发的每个过程,从需求分析,到设计,再具体实现,定义了一系列标准的图形和元素,让我们结合自身系统的情况,画出来,形成产品经理、程序员之间可以互相交流的图。UML里面的图有很多种,最常用到的是用例图、状态图、时序图、协作图和类图。

 

2 设计模式

设计模式其实跟前面说的面向对象很类似,都是为了让我们写的代码更容易被别人理解、可以被重复利用、将来有新功能出现时只用改少量或不用改代码,只是设计模式是一些经验丰富的程序员总结出来的常用的、具体的方案,也可以说是模板,我们下次在开发过程中遇到同样的问题,只用套一套模板就能瞬间把代码提升一个档次!比较常用的设计模式有:工厂模式、策略模式、单例模式、命令模式、模版模式和观察者模式。

算法

教科书上的算法其实在工作中都很少用到,一方面是前后端研发多以业务研发为主,更多是解决工程方面的问题,另一方面是就算我们有需要,90%概率也已经有现成的依赖库、组件库都为我们做好了,我们只需要调用即可。虽然程序员面试会考察算法,但等学会了前面的编程语言和数据结构,直接去 LeetCode 网站刷题会更奏效。不过为了寻求更完善的知识体系,学习一些比较实用的算法还是很有意义的,比如:排序算法、链表算法、二叉树算法、图算法,以及一些有趣的算法:填色算法、遗传算法、蚁群算法、自动寻路算法。

结语

以上就是我总结的计算机研发的一个学习与实践路线,大家可以参考。

Leave a Comment.