我在教别人编程的时候,会按照下面的提纲内容来教。细节以C#为准。
结构化程序设计----从变量和函数说起
1.变量,函数,修饰符。
变量和函数是类的基本成员。
变量的类型是其存储的值的类型,函数的类型是返回值的类型。
变量不带小括号,函数带小括号----这是变量和函数区分的标志。
函数有函数名,参数,返回值,函数体。
函数可以用Func<>或Action<>的形式来抽象。
运算符是一种特殊的函数,运算符都有返回值。
访问修饰符有public,private等等。其他修饰符讲到面向对象的时候再讲。
变量,函数,修饰符分别是编程语言中的名词,动词,形容词。
2.程序=数据结构+算法的实践。
变量的声明和赋值,常用数据类型。
常用的运算符。
函数的定义和调用。
控制流的语法。
常用系统自带函数。
传统的编程练习题。
3.整体代码组织和其他补充内容。
sln,csproj,cs。
C#中:小括号区分变量和函数。花括号是代码块划分的明显标志。方括号取索引。尖括号写类型名称。
4.结构化与代码块
要讲的是结构化的含义和代码块的意识.
结构化的实质就是-----代码分块+流程化控制.
控制流程图中的矩形----代码块;菱形----流程控制的条件;箭头----控制流程的顺序.
写程序要有代码块意识.
控制流有顺序,分支,循环三种。
--------------------------------------------------------------------------------
控制流把程序分了块。要看到顺序执行也是分块的。
结构化程序设计的实质就是对控制流程的设计。
从变量来看,程序实质是一篇描述变量变化规则的文章。
从控制流来看,程序就是一棵从Main()函数开始的函数调用树。
而写程序的实质就是用编程语言表达控制流程。
-----------------------------------------------------------------------------------
下面是我对为什么我们需要分支和循环的一种解释。
人做微积分,会先根据【牛顿-莱布尼兹】公式,求出原函数,然后代入上下限求解。
计算机,会真的先微分,再积分。先做除乘法,再做加法。
思考人做微积分和计算机进行微积分的过程,可以看出计算机进行计算的两个特点。
1.对离散的数据进行数值计算。大量的反复的数值操作,需要人来写循环。
2.只会数值计算,不会逻辑推理。自己不会说“若。。。。则。。。。”这种话。所以需要人写分支。
面向对象----现在以后都要方便编码
1.主学内容
类和对象,new方法。
字段,属性,方法,事件。
继承机制,接口的契约作用,接口跳转,静态多态。
控件的常用属性和常用事件。可以说是面向对象的最佳实践。
2.讨论
面向对象本身是一种工程实践的产物。它符合我们归纳总结式的思维方式,也就是你是个什么东西,所以你应该是怎么样的。
但是本身这种思想是不严谨的,天下乌鸦一般黑吗?所有鸟都会飞吗?所有鱼都会游泳吗?并不是。
而且,它不纯粹,它把数据结构和函数绑定到了一起,做一件事最简单的方式是直接去关心你需要的部分,有时候对象附带的部分不仅是多余的,而且是一种麻烦。
而且,过分的使用面向对象的继承是一种灾难,如果你有一个太大管的太多的基类,那么你写子类的时候就会瞻前顾后,摸不着头脑。
因为更容易写出更烂的代码了,所以写的时候要考虑好,有自己的规范。
数据库和网络
1.使用数据库。增删改查,数据定义,内置函数,其他语法。
2.使用网络。地址,b/s,webAPI.
总体
1.会基本语法,能写代码片段。
2.会使用一种集成开发环境。
3.了解特定框架,然后用的时候自己完善它。
4.在做具体软件功能的时候,遇到不会的再去学。
给牛哥的提纲
我的好友牛哥,现在在读化学博士。
前几日说是有个python项目看不懂,让我看看。
虽然我不经常用python,但是看了一下,我可以给他讲讲基本语法。项目的核心算法是神经网络,是调用现成的包写的。涉及到神经网络模型的说法,什么维度什么的,我不知道含义。
给牛哥看了项目,跟他说明了一些他不理解的语法。
最后我告诉他,其实这些c系语言的语法都是差不多的,最基本的就是3大块。我给你一个提纲,你看着用来查缺补漏吧。
下面就是这个提纲。