写给想要编程的你
Notes
2023-01-12 3267字

这篇博客是公众号——小白编程课堂创刊文章。文章简短精炼时值大三,我看完仍觉得非常有帮助,特此摘录。

程序——这个熟悉又陌生的东西,其实存在于我们生活的方方面面:我们手机上的即时通讯APP “微信”、移动支付APP “支付宝”、短视频APP “抖音” 背后都是一个程序,我们去银行柜台存钱时小姐姐电脑上操作的系统也是一个程序,我们爱玩的 “王者荣耀”、“原神”、“艾尔登法环”、Switch游戏是通过程序呈现出来的,甚至去自助快递柜取快递也是程序的功劳。

你是否也想过写一个自己的程序?但是当你面对下面这两个字时,却望而却步了…

编程

你的心情我是非常理解的,因为我也曾经历过这样的处境:当下定决心想要开始学习编程,却望着密密麻麻的代码一头雾水,苦于找不到合适的入门教程,跟不上老师课上的内容,编程生涯逐渐走向全剧终…

但是!很幸运你今天,不,此时此刻,看到了我的这篇文章,它正是写给你的,它将带领你一步一步,以简单易懂、形象的、有趣的、娓娓道来的方式揭开编程的世界!

你可能是
你将学会

我将从计算机基础知识讲起,等你差不多明白了,再开始Web前后端研发内容,到这时你可能还不会设计一个完整的系统和软件,这时我会继续补充软件工程方面的知识,最后我们一起进入实际项目的战场。过程中我会穿插一些常用的、有趣的算法来完善你对计算机的认知,也会分享我的比赛和求职经验。

计算机基础

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

我计划基于Java语言,因为它语法优雅、纯面向对象、生态圈完善,同时也是互联网公司使用最多的语言,比如后端研发、Android客户端研发都是使用Java语言,一举多得,为你将来就业提供了多种选择。

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

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

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

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

Web研发

前面提到过,计算机程序和应用有很多种形态,有桌面客户端版的,有手机APP版的,有Web网页版的,之所以将Web网页版放在靠前的位置来讲,是因为目前无论用户最常使用的,还是大学项目、公司项目、外包项目,都是Web版占绝大多数。功利地讲,学会了Web研发,对你的收益最大,既可以接外包做项目,找工作也不愁。Web研发主要分为前端和后端两侧的研发,两侧使用到的技术也不相同。

不得不说,这是一个看脸的时代,“颜值既正义” 在前端研发里依然受用。前端研发所涉及的技术较多,HTML/CSS/JavaScript/React/Vue等,但为了大家有容易接受&有成就感,我不打算像教科书一上来就讲HTML/CSS/JavaScript这三驾马车,而是打算先讲讲如何搭建一个现成的控制台——Ant Design Pro,并顺着它的结构来讲Ant Design组件库,再讲React前端开发框架,最后再揭开HTML/CSS/JavaScript的细节。

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

软件工程

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

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

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

实战演练

技能树点满了,施法要领也掌握了,接下来就让我们一起去打怪吧~本章会分享一些个人之前在Web应用、桌面游戏、移动应用三个不同终端上的实际案例,讲解他们各自的设计与实现方案。

一个服务于用户调用算法能力接口的人工智能平台,这个系统的使用者和场景都比较丰富,具有很好的示范性。

讲解大家经常玩的小游戏 五子棋、扫雷、贪吃蛇的设计细节,你是否好奇棋盘是怎么绘制而成的?扫雷的算法细节是怎样的?贪吃蛇是怎么从左边移动到右边的?

这是一个基于Android手机的绘图APP,用户可以使用手机来画画,也可以编辑画布上的图形元素,填色,添加文本/插图等。

算法

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

番外

会时不时地分享一些闲言碎语,例如求职经验、简历书写、大学生活、比赛技巧、PPT制作经验、学习计算机的感想等。也是会看大家对哪方面更感兴趣哈~