程序的本质在于逻辑_程序开发语言和程序逻辑哪个重要_dog250的博客-程序员秘密

技术标签: 语言  脚本  产品  ui  bash  网络协议  

有时候,特定的场合下,你会发现写一个bash脚本都会带来这样那样的问题,有些地方没有考虑到,而有些则过于冗余。即使你熟悉N中高级语言,同时精通底层汇编语言,又精通网络协议,配置各类网络设备已经到了炉火纯青的地步,即使如此,如果你是一个毫无逻辑的人,或者一时半会儿没有彻底理解需求导致逻辑不清晰,你都无法正确的编写出代码,哪怕是一段很短的bash脚本-如果不是冗长的C代码的话。
        因此程序的本质在于逻辑。语言只是一种实现逻辑的工具而已,不管什么语言,其基本特征都一样,无非就是那些if-then-else,while,for-each,AND/OR/XOR之类的,区别只是在于某些针对某类程序写起来以及理解起来较其它的更方便些。然而如今大多数的人痴迷于语言本身,学了且精通那么多种语言,却写不好一个程序,这也难免,正如如今很多人学了英语,又学日语,法语,德语,阿拉伯语...然而很少有人哪怕能用其母语创造出一段-如果不是一篇的话-美妙的文字,这也是为何外语学习中听说读写远远比精通语法来的重要的原因,毕竟自然语言是诉诸耳口笔的。计算机语言是诉诸逻辑的,因此要想写出美妙的代码,理清逻辑要比精通语言重要的多。
        我一直以来都不把程序界面-UI-看得很重要,然而事实证明我错了。实际上一个可用的程序,其逻辑往往体现在界面上,因此如何去设计界面是一个很考验人逻辑思维的事情,要点在于你如何能设计一个界面,让用户无论怎么操作都能保证底层逻辑执行的正确性,该设计应该是封闭的,假设用户毫无逻辑概念,然而你的程序不能因为用户的过错而出现错误结果或者不可预知的结果,在这一点上,Apple的设计尤其好。
        在界面设计中,尤其复杂的是一个操作会带来什么连锁反应,其下面是一个复杂的状态机,如果能事先把该状态机画出来,事情就会好办的多,然而画状态机要比画流程图复杂的多,状态机涉及到复杂的基于状态转换的联动效应,而流程图仅仅是一个if-then-else-then的序列。我从不设计界面,这种事实应该改变了,我自认为写出的程序无误,然而仅仅是自己用或者试验罢了,毕竟我当然知道自己程序的雷区在哪里,一旦把我的程序和其它程序结合,上面铺盖一层便于傻瓜式操作的UI,我的麻烦就来了,没完没了地查漏补缺...实际上,我真的很精通底层语言以及网络协议栈,包括原理和实现我都很精通,然而却不能利用它堆建一座高楼大厦。
        一个例子如下:我在设计一个网关产品,有30个节点之间要互相两两通信,其中某些节点之间的通信需要受控,而某些节点之间的通信不需要受控,我该如何设计它的UI?实际上这是一个典型的例子,其UI下面是一个二维矩阵,类似公交车上贴的那种里程-票价表,整个节点间互访规则如下图所示:

底层逻辑就是上图所示,然而界面要如何设计,我不得而知,不是说没有一点办法,大不了就把这个矩阵放到界面上也OK,然而用户能方便的操作吗?因此集逻辑合理性,纠错,操作方便于一体的UI其实真的很难设计的。上例中体现的是一个多对多的复杂关系,如果仅仅是初始配置也还简单,但是如果加上增删改查操作,那真的可够老子喝一壶的了。碰到过这种问题的应该都知道,如果你在某个地方增加了一个信息,那么你必然要想到在哪个地方删除这个信息,而这是最容易引发bug的地方。
        实际上,如果想实现完成某个操作之后的动作,对于一个有半年工作经验的程序员来讲不是什么难事,关键的难点不在这里,而是你的设计如何应对用户操作的连续性,比如如果用户增加或者删除或者修改了一个节点,其它节点的配置如何与之联动,如果设计不好,就会牵一发而动全身,当然这是最丑陋的做法,修改一个配置,所有其它配置就都要更新。如何实现一个对用户而言最少影响程序的设计是至关重要的。UI设计追求的是完美,而底层的程序设计追求的是健壮,二者原则是不同的。
        如果是做一个产品,那么首先要考虑的就是底层程序的健壮以及UI的完美。当然如果只是为了试验一下可行性或者仅仅为了玩一玩,怎么搞都可以,哪怕手工写死一段代码都无所谓,可是这种程序是千万不要用于产品代码中的,否则日后的维护将会陷入泥潭。总而言之,逻辑最重要,而UI设计中逻辑及其重要,你不光要考虑你自己的程序,还要考虑用户操作的方便性以及你的程序如何应对用户的胡乱操作,还要考虑可维护性...画一个状态图吧,虽然很麻烦但是却省去了日后的bug排查将要耗费的时间。如果仅仅是想证明一下自己的能力,那么可以胡乱搞,怎么都行...然而事实是,对于软件工程,实验室的成果不算什么成绩,也不能体现你的能力,因此除非你是大学或者研究机构专业搞研究的,否则不要总是用实验室的结论来为自己抹金。
        程序的本质在于逻辑,其它的有的是浮云,有的是浮云下面的东西...


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dog250/article/details/7484127

智能推荐

java八大基本数据类型及其封装类_基本类型语句long类型的封装类是_Run楠的博客-程序员秘密

1. Java的简单类型及其封装器类Java基本类型共有八种,基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。JAVA中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统...

OpenCV计算机视觉基础速查(1)——OpenCV在Visual Studio下的安装_studyCarlos的博客-程序员秘密

一、提纲1.设置Windows操作系统环境变量2.设置Visual Studio集成开发环境项目属性表,包括包含目录、库目录和附加依赖项(在Win10系统下VS版本2010、OpenCV版本2.4.9及VS版本2017、OpenCV版本2.4.11设置均成功)二、具体步骤1.下载OpenCV从https://opencv.org/releases.html下载OpenCV,注意应选择“Win Pa...

高德地图web绘制省、市、区 边界线和面积图_h5地图边界绘制_红叶岭谷的博客-程序员秘密

高德地图web绘制省、市、区 边界线和面积图高德地图官方API图例 总结要点申请高德地图的key 用于后边web调用 高德地图key申请引用 <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=您申请的key值&plugin=AMap.DistrictSearc...

STM32F4单定时器独立输出四路PWM脉冲_Chenxr32的博客-程序员秘密

本文以STM32F405单片机为例,介绍如何用一个定时器的四个通道独立地输出四路PWM脉冲。主要使用定时器输出比较的翻转功能和捕获比较中断。

Python面对对象编程——结合面试谈谈封装、继承、多态,相关习题详解[email protected]的博客-程序员秘密

1.面向对象的三大特征封装:属性和方法放到类内部,通过对象访问属性或者方法,隐藏功能的实现细节.当然还可以设置访问权限;继承:子类需要复用父类里面的属性或者方法,当然子类还可以提供自己的属性和方法;多态:同一个方法不同对象调用同一个方法功能的表现形式不一样,例如:1.不同的两个对象,字符串的加法和整数的加法,同样是加法,实现的功能是不一样的;2.这两个对象之间没有任何直接继承关系,但是所有...

ERROR_PROXY_CONNECTION_FAILED(-130)问题_error proxy_小王同学_gradel的博客-程序员秘密

** emm~~昨晚想要和舍友开黑突然发现wegame出现网页加载错误,检查了一下发现不是网络的问题,打开浏览器发现也没有问题,然后打开腾讯课堂之类的软件发现也出现了相同的问题。上网查询之后发现和代理有关,于是便略微操作了一下问题解决。上图????**按照步骤关闭代理即可...

随便推点

定位bug的方法总结_weixin_30485291的博客-程序员秘密

把问题聚焦到某一个点上,而不是焦躁的瞎搞,这样效率极低1,看改动的地方2,看文档;官方文档或者接口文档。3,google不到的话,也试试百度中文搜索。4,看格式反常的地方5,反思 反常的地方6,从前端上F12找7,从环境上找问题,工程跟环境上的命名冲突8,二分法 ,比如 一个页面,注释前半部分,看看还会不会报错。9,替换/增减法,比如不知道错误出在哪,替换文件或者去掉某些模块试试...

Certificates下面的 App Store and Ad Hoc是灰的??_wsjshx的博客-程序员秘密

我developer.apple.com里的Certificates下面的 App Store and Ad Hoc是灰的??这怎么弄的?不明白啊因为一个用户名下只能同时有一个发布证书,你之前建立了某个证书并且没有使用的话就无法再创建了,先把它撤销或者使用后才可以继续创建新的

山东大学软件学院项目实训-创新实训-山大软院网络攻防靶场实验平台(二)-docker安装与学习_山大 docker_陌兮_的博客-程序员秘密

目录前言:一、docker安装1、centos7使用yum安装2、命令行创建 docker 容器测试前言:项目实训立项通过后的几天均在学习 docker 的相关知识,上一篇文章也简单记述了学习过程中的比较重要的知识点。本篇文章记录一下在腾讯云服务器上安装 docker ,并进行基础操作实验。一、docker安装环境:腾讯云服务器 - 2 核 4G - centos7 系统1、centos7使用yum安装#下载docker-ce的yum源wget -O /etc/yum.repos.d/doc

linux下使用ffmpeg将amr转成mp3_linux ffmpeg amr mp3_yeoyi_yeoyi的博客-程序员秘密

说明:AMR格式是智能手机上的常用音频文件格式,比MP3格式的压缩比大。同样时长的AMR文件大概是MP3的十分之一,所以在移动互联项目中应用比较广泛。但目前AMR格式在个人电脑上应用较少,所以目前大部门播放器都不支持AMR,为了解决这个问题我们打算在服务器端将AMR转成MP3,以便在个人电脑上通过浏览器的方式进行播放。最近公司一款基于移动互联网的产品有个短暂的录音(留言)功能,因为录音需要传输到服

git 删除 提交错误的 commit, 本地与远程_weixin_34377919的博客-程序员秘密

## 前景在使用 git 工作时, 难免会出现 commit 了一些不想提交的内容, 或者 commit 的时候 commit 的日志不太满意想要进行修改。 分两种情况一种是针对 commit 之后没有进行 push. 另一种则是 commit 之后 push 到了 remote, 下面分别讲一下分别对应...

mangos(一)概述与消息处理机制_mangos原理_ysu108的博客-程序员秘密

一、概述想看下开源的服务器框架,本以为挺复杂,但mangos代码写的很清楚。mangos不是一个魔兽私服模拟器,它是一个开源的自由软件项目,是用c++和C#编程语言,实现的一个支持大型多人在线角色扮演游戏服务器的程序框架。svn的路径:http://svn.code.sf.net/p/mangos/code/trunk 下载下来貌似有100多兆,我用的vs2005编译vc8工程release版本一次

推荐文章

热门文章

相关标签