编程思路整理---逻辑篇

前言

经过一段时间学习,发现自己编程水平太菜 ,看别人写得很轻松,自己经常想半天才能写上几句,干得很勉强。虽然感觉人的经验越丰富越容易把事情做好,但不太适用于编程方面,这件事还得靠悟性。同其他很多博客一样,内容非常基础,文笔也显拙陋而偏向于白话。笔者才疏学浅却心有高处---尝试把逻辑的逻辑描绘出来。

本篇有姊妹篇:“编程思路整理---代码篇”

持续更新

-------------------------------------------------------------------------------------------------------------------------------- 

目录

1.if判断语句   

2.程序写不下去怎么办?有没有一种硬写程序的方法?

3.什么是数据?数据从哪里来?

4.数据需要明确的是什么?

5.数据是如何传递的?

6.工作的开始

7.程序的组织

8.抽象的思考

9.结束语

-------------------------------------------------------------------------------------------------------------------------------- 

 1.if判断语句

 ---开胃菜,其余代码的分析到“编程思路整理---代码篇”,本篇余下部分不再涉及具体代码

      if的逻辑分析

       1) 如果两种情况可以完全包含发生的逻辑,

        

if(){

}else{

}

        2)如果三种以上情况可以完全包含发生的逻辑

if(){

}else if(){

}.........{

}elese{

}

        3)如果不确定能否将逻辑表达完整,就用if也可以

if(){

}if(){

}....{

}if(){

}

        4)if可以嵌套使用

                略

小结:

写判断语句的思路:先想着写判断结构3),全部用if平行排列-----是的,全部用if。如果排列后的结果能完整逻辑,改用else(多个情况加1个或者多个else if)

-------------------------------------------------------------------------------------------------------------------------------- 

2.程序写不下去怎么办?有没有一种硬写程序的方法? 

许多时候,写程序处于一种迷茫或者完全没有思路的情况,每每到了这个时候,告诉自己要勇敢一点,绝不能因此放弃,于是再思考再看讲座,争取把问题弄明白并且能有提升。

笔者之前写过一篇单片机C51之流水灯,里面谈到过一种万能方法。本身单片机程序就是驱动,用C语言模拟出硬件电路的工作过程,应该说有现成的资源在(硬件的工作图),抽象层次低,相对比较简单。

受到万能方法的启发,以及参考别人的话---编程只有三种结构,顺序,条件,循环,我想硬写程序也是有办法的。无论哪一种程序的哪一段代码,都想着取得或者改变数据。那么硬写程序的办法就出来了:下一步要干什么?是获取数据还是条件,或者循环?尽管这看来十分笨拙,但提供了一条可以走的路。

这条逻辑是根据结果反推出来的,以此为铺垫,下一步需要解决的问题是数据。

小结:

没有写不出来的程序。

-------------------------------------------------------------------------------------------------------------------------------- 

3.什么是数据?数据从哪里来?

如果我现在是才开始学编程,这个问题可能不会有什么兴趣。数据嘛,整形、浮点型、字符串啥的,很平常,去想什么是数据还不如多去看看语法和算法。但如果从整体的角度来看,数据无疑是最重要的概念。程序里包含了数据和方法(函数)。方法是什么?方法是用来改变或者获取数据的工具。那么数据到底是什么?数据是对客观世界的抽象

数据是程序的起点,也是程序的终点。编程的目的,就是通过输入数据给程序,交由计算机执行,然后再得到输出数据。此外数据是贯穿整个程序的,因为改变数据的函数,方法,其本身也是数据。所以说,程序无时无刻都是围绕数据进行的。

计算机中的数据是抽象的,对数据的抽象直接反映了编码能力的高低。熟练编码的人,通常是一边说着需求,一边敲出代码。数据的类型,各种语言中表示不一样。编译型语言以C和Java来看,基本类型差不多,复杂的数据类型里,C语言主要是指针和结构体;Java里是类和接口。

顺带在说数据结构。数据结构是单独一门课程,以本人学个语法都觉得困难,学算法当然需要更多付出。但是从概念上来看,不用想得太复杂。单个数据用数据类型表示,数据结构就是多个数据的集合,以某种约定的方法组织起来,方便操作(增删改查),好的数据结构效率高,占据空间小。

数据从哪里来?自己新建,函数或者方法计算得来,语言本身提供的函数和方法也可以看作数据。熟练操作数据是一个好的程序员基本要求,就是看到别人啪啪啪敲出来的感觉。反复练习,慢慢地建立起一种对数据的嗅觉,是提高数据操作能力的途径。

---------------------------------------------------------------------------------------------------------------------------------

 4.数据需要明确的是什么?

 对于C和Java这类强类型语言,数据明确了在内存中所占空间。所以任意的数据类型是要慎重使用的,比如C语言中的void *。如果在内存中开辟的空间大小无法被掌握,那么是不是很容易出错呢?Java中使用了Object类型来表示任意数据。弱类型语言暂且不提。

---------------------------------------------------------------------------------------------------------------------------------

5.数据是如何传递的?

单列这个话题是有必要的,而且这算是和程序架构相关的内容,目前的水平暂时达不到架构师那种程度,只是远远窥视。本人心中要做到架构师,必须思路非常清晰,分析出需求后做出好的框架,数据衔接优雅,编码更是不在话下,写得又快又好。

函数中是如何传递数据的:在C语言中数据是以值传递的,指针开始时觉得难用,但习惯以后不用指针反而不习惯。Java用对象来传递数据,对象也可以看作是指针。

程序大了,代码多了就需要不同模块之间传递数据。在C语言中似乎比较麻烦,全局变量的使用被视为危险行为,所以尽量使用静态全局变量不跨越翻译单元。Java在数据引用方面就舒服多了,没有全局变量这个概念,对象成员可以满足要求。顺带说明Java的另一大优势:不用考虑变量命名问题,对象的命名基本上是类名首字母小写来完成,很方便。

C是面向过程编程的,对大型程序不是那么方便。Java在项目模块之间传递数据,要考虑的东西有哪些,暂时没想到。比如开发一个服务器程序,模块A的对象要到模块B中去使用,而不需要做导入类的操作,要在表示数据框架层去考虑。

小结:和数据紧密相关的问题:

                数据的含义,如何生成,如何传递和获取

          此时才是建立编程思维的开始。

---------------------------------------------------------------------------------------------------------------------------------

6.工作的开始

闲言几句:我们做的每件事都有自己的目的。到目前为止,前面做的一切,并不全是纸上谈兵,而终究会指导工作的开展。工作如何开始呢?看看视频培训的资料就可以。有人会说培训班如何浅,科班好很多如何如何。我不是打广告,我自己也是看视频买书自学(开始有人指点),也不是说我厉害可以指点别人(本人菜),我们遇到问题要有客观分析。凭心而论,科班当然强,面广内容精深,但是上过大学的人都知道,学校又能教给你多少?培训班至少是有实际经验的老师在带,能跟着做出一些项目。当然培训班有被人诟病的地方,它的思路也很简单:你跟着我做,带你走完一个项目。仅仅是能做出来,没有更多的思考;以及深层逻辑老师不会讲,要靠自己去想去悟。

该进入正题了。从认识数据开始,就可以在语言层面,借助框架,完成工作了---从数据输入到数据输出。框架不能算是语言的更高抽象,它是一种语言上为了方便编码,而实现某项逻辑的封装。完成编码工作,需要熟悉语言的语法,和使用框架的类。

在框架层面上完成程序的编写,有没有一种逻辑呢?我觉得也是有的。比如找到框架里如何用类传递数据,就是一个典型的例子。写到这里我问自己为什么执着于一些看似不怎么起眼的东西,这些东西配被称为逻辑吗?我自己回答说是因为怕自己写不上效率低;还有自己懒想精力好时候记下来,到时候直接用;还有一个理由万物的变化都是需要逻辑的,而计算机学科就是直接与逻辑打交道的学科。

以一个服务器框架为例,列一些逻辑

1》有一个一次请求产生的数据类容器,可以在客户端和服务器内使用。

2》     客户端有一个缓冲区,存储少量数据

3》      服务器有一个数据区,存储大量而安全的数据

小结:

        一个码农在某个框架下完成工作,熟练使用语言,以及加深对框架的认识。

----------------------------------------2022.11.12update----------------------------------------------------------------

 7.程序的组织

看到这条的人是幸运的,又或者仅是俺菜会这样觉得。因为俺曾经学了很久也不知道一个程序应该怎么写,分几步,怎样组织。

架构师其中主要工作之一,属于基本内容。

程序该如何组织?我觉得各类语言的基本思路都差不多,也或者这就叫做编程逻辑。这种能力的运用才是程序员是否优秀的标志之一吧。目的也很明确,高内聚低耦合,方便分工

1》原始数据都放在主函数里,或者主方法,main(){} 里。

        为什么这么干?数据的进出放主函数,主方法,或者主类的全局变量(Java)里,再不用去考虑数据作用域问题,此外的数据统统作局部变量看待。 

2》除了数据域,一个控制数据域,就是主域。

        这句话读起来拗口,但是放在不同语言领域里用的。Java最好理解,因为是目前俺的主攻方向。一个数据类,或者许多数据类,提供基本数据;一个操作数据类,或者操作数据类包;一个主类调用操作数据类,就可以把程序组织起来了。此外操作数据类有的是已经封装好的,以Utils结尾的,称为工具类。

        C语言里思路基本一致。数据类型可以用结构体去组织,组织起来以后不就是数据结构吗?到此学习数据结构的枯燥难懂再不会有了,因为实实在在摆眼前要用了。操作数据用单独函数来写就行了,然后一个main。话说回来,思路上用Java反哺C,现在再看C语言,反而生出更大的敬意,因为他简洁,优雅,高效。为什么一位前辈告诉我高性能的服务器都是用C或者C++来写的,Java追求的是开发效率,Java的缺点在封装后必然造成效率降低。而当了解程序结构编程思路明晰之后,开发效率大大提高,必然会追求工作效率啊。

3》程序的需求分解。

这是高一层的抽象,也可以说是架构师的主要工作所在。这部分俺也不懂,没有发言权。

但是可以试想一下:有一百个需求,这些需求用怎样的结构,进行怎样的组合。可以让客户用起来满意,程序员编写方便,界面美观等等。这时我想起了web模型树,根节点document的那个。架构师分解需求的工作是不是可以简单理解成把这颗抽象树建立起来呢

4》前面说的太复杂了,最近在看spring,其实每一个完整的程序都有这样的结构,通常称为数据层dao,服务层service,还有表现层app,是一种比较科学的总结。

       每个程序的基本架构是由这几层组成的,称为三层架构。

        数据层和表现层没有多大变化,如果复杂的程序多是在service服务层,分成几种架构

小结:

        提升自己,完善综合能力的关键---程序结构

-------------------------------------------------------------------------------------------------------------------------------- 

8.抽象的思考

编程难在什么地方?编程表达的是逻辑。逻辑本身是抽象的东西,逻辑难也是难在抽象。抽象的东西用文字表达出来难以理解,后来人们多用图,表的形式去表达,会容易一点

而我们编程,也就是设计逻辑的时候,都是用英文单词,和一些逻辑符号。需要在脑子里多转几个圈才能反应过来。这也是编程难点之一。这些英文单词,有的是代号,不是关键字,可以换;有的表示属性,是不能换的。

--------------------------------------------------2023.4.5update--------------------------------------------------------- 

9.结束语

过一阵回头来看,觉得啰啰嗦嗦的。

编程到底是在干什么?有人总结说是在表达逻辑。用Java的封装思想来看,编程就是一种封装。一个api能表达一个逻辑,把很多api组合起来,传入数据,得到想要的结果,这就是编程。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jllws1

你的鼓励是我创作的动力,谢谢

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值