主要写给大学生看的。
基本上认为你是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,创建一个目录,和github的project关联。
学习如何submit/push你的代码。
可以用github pages功能建立博客。
或者去博客圈建立一个账户: 博客园 - 开发者的网上家园
博客园的好处是,博客园是一个开发者的社区,多多少少可以了解一些开发的消息。
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的类库。
然后,这个类库肯定有官方文档。
现在是分解问题的时候了。
首先学习怎么画一个正方形。
然后是怎么画出一个立方体。
然后是如何让它旋转,等等等等。
还有一个暴力方法:直接搜索别人写成的源代码,拿过来研究。
举一些例子:
使用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无关。
数据访问层:读写数据相关的代码。
层次的作用:
方向性:只能从前层调用后层的功能。
隔离性:不能调用不相邻层次的功能。
代码阅读能力
能够快速地从代码阅读中,明白代码的用意。
业务理解能力
能够很好理解业务,并且能够构想出业务在项目中是如何实现的。
到这儿,就差不多可以算是入门了。
什么是高手
愿意写详细准确的注释
愿意花时间给变量、方法命名
愿意花时间提高代码的可读性
学习代码规范\优化代码风格
注重代码的性能
注重安全性