大学如何学习编程

主要写给大学生看的。

基本上认为你是0基础。

最基本的能力

学会网上搜索。你的问题网上都有答案。

逐渐学点儿英文(或者使用翻译技术。) - 这个要求也许有点高。就当是学英文了。

学会在正确的地方提问题,(别在知乎上提!)

在这儿提问题:

Stack Overflow - Where Developers Learn, Share, & Build Careers

软件行业的简单介绍

计算机语言

主流计算机语言:C\C++, Java, JavaScript\HTML\CSS, Python。

注:我把.NET的技术去掉了,主要原因是Java技术应用范围比.NET广的多。

不建议学C\C++,枯燥无味。

应用范围

应用软件
计算机上的大部分软件都是应用软件,可以分为命令行/桌面软件/网站应用。

大数据
大数据技术,顾名思义是处理大量数据的问题。大型网站的服务器上一般都会使用相应的技术。

人工智能
人工智能技术涉及的面比较广。现在不建议大家学习。

手机软件
单片机
运维
测试
安全

学习的步骤

利其器
* 学习使用github

github不仅仅可以托管你的代码,也可以管理你的软件项目。

建立一个github账号。

建立一个项目(公开的,因为免费)

  • 学习使用vs code

vs code是一个轻量级的代码编辑器,带有各种各样的扩展,可以支持不同的编程语言。

下载vs code,创建一个目录,和github的project关联。

学习如何submit/push你的代码。

  • 建立自己的博客

可以用github pages功能建立博客。

或者去博客圈建立一个账户: 博客园 - 开发者的网上家园

博客园的好处是,博客园是一个开发者的社区,多多少少可以了解一些开发的消息。

  • 学习markdown

markdown是一个文本内容编辑语法。可以用来写博客。

许多网站和工具都支持。

学习的一个关键问题
任何系统的学习一定要有输出。笔记+代码。

如果你看了一本C语言的书,不写笔记,不写程序,那你只是浪费时间。

这就是为什么需要建博客的原因 - 放你的学习笔记。

为什么要使用github - 放你的代码。

如何学习计算机语言
写一个总结:语法\语言特性和示例

下载和阅读语言对应的代码规范。

学习语言要了解一个叫做”framework”的概念,每种语言在设计的时候都有特定的目的,也可以理解为语言的需求。

语言的需求是帮助开发者实现某个方面的功能。

为了这个需求,每种计算机语言会提供一套API。

开发者对语言的使用,更主要的是对语言提供的API的使用。

所以,学习语言 = 语法 + framework。

关于framework,学习的时候,不用太详细,先总结一个分类就可以了。

还有一个概念是:生态环境。

可以理解为:许多第三方的开发者,为这个语言提供了更多的API。

这个也很重要,在你的开发中,多多使用高质量的第三方包,既方便,而且质量也高。

这些东西,和别人多交流,网上多看看,慢慢就了解了。

必备知识
* 如何学习数据结构

写一个总结:

数据结构的类型,每个类型的元素和特点,每个类型对应的算法有哪些,算法的作用是什么。

使用Java实现一些数据结构和算法。

这时候,可以同时学习Java。

  • 如何学习数据库原理

可以装一个MySQL和对应的开发平台。

学会以下内容就可以了:

如何创建表(数据类型至少含有varchar2, int, double, datetime),有外键的表,和一个Tree表。

如何删除表

学习如何写SQL:

Select/Update/Insert/Delete

Count/Max/Min/Avg/Group By

Join/Left Join/Right Join/Outer Join

Where/Union/Order By

学习编程的几个发展方向

算法方向
主要是学习数据结构、算法和C\C++,刷ACM竞赛试题。

好处:技术上比较专注,适合学生。

如果你没有极大的兴趣,也可以放弃。

实际上大多数开发根本用不上这些东西。

小软件导向
通过写一些小而有趣的程序,慢慢锻炼自己。

有人问,如果,不知道如何写怎么办?

方法:确定技术\分解问题\网上搜索

拿魔方游戏举个例子,(我也没有做过。)

首先我会在网上搜索Web的3D技术有哪些?

其结果可能是选择一个js 3d的类库。

然后,这个类库肯定有官方文档。

现在是分解问题的时候了。

首先学习怎么画一个正方形。

然后是怎么画出一个立方体。

然后是如何让它旋转,等等等等。

还有一个暴力方法:直接搜索别人写成的源代码,拿过来研究。

举一些例子:

  • 写一个2048游戏

使用Html\CSS\Java Script写一个2048游戏。

  • 写一个爬虫

使用python爬一个网站,找到拥有某些关健字的文章。

可以学习用sqlite,保存一些信息,比如,文章的URL和内容等等。

用Java再实现一遍。

  • 写一个魔方游戏

学习如何解魔方

使用Html\CSS\Java Script完成一个3D魔方游戏。

网站方向和大数据方向
这两个方向和现在软件行业的就业比较match。

但是,需要人指导,所以,现在不讲。

什么是编程

编程是一个分解和组装的过程。

分解:就是把需求分解成小功能的能力,我们称之为设计。

组装:把代码合理的拼凑起来,我们称之为框架(architecture)。

基本编程能力的进阶

编程是使用编程语言实现一个业务问题的解决方案。

Level 1:学会使用赋值语句/分支语句/循环语句完成一个小功能。
Level 2:分拆代码的能力,使用多个子方法来解决问题。
面条式代码(Spaghetti code):就是将一大堆代码写在一个方法里。这是需要避免的。

可以理解为写作文中的分段一样,将不同功能的代码封装到不同的子方法中。

Level 3: 结构化编程
认识到在一个功能中的数据有哪些,学习合理的封装数据,形成一个或者多个数据结构。

可以理解为数据抽象。

Level 4: 功能封装。
这个术语上称为“内聚性”。

比如,把操作字符串的方法,写到一个StringHelper的类中。

把操作文件的方法,写到一个FileHelper的文件中。

Level 5: 面向对象编程
面向对象编程 = 数据抽象 + 功能聚合。

面向对象的封装性,继承性需要以后慢慢理解。

层次框架能力
层次是框架的一种简单形式,是对框架的初步理解。

将代码形成多个层次,比如:常见为3层,表示层/业务层/数据访问层

表示层: 把和用户交互相关的代码。

业务层: 业务逻辑代码,和UI无关。

数据访问层:读写数据相关的代码。

层次的作用:

方向性:只能从前层调用后层的功能。

隔离性:不能调用不相邻层次的功能。

代码阅读能力
能够快速地从代码阅读中,明白代码的用意。

业务理解能力
能够很好理解业务,并且能够构想出业务在项目中是如何实现的。

到这儿,就差不多可以算是入门了。

什么是高手

愿意写详细准确的注释

愿意花时间给变量、方法命名

愿意花时间提高代码的可读性

学习代码规范\优化代码风格

注重代码的性能

注重安全性

你可能感兴趣的:(编程)