程序的本质在于逻辑_程序开发语言和程序逻辑哪个重要_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

智能推荐

怎样知道自己的电脑是否支持GPU?_怎么看电脑有没有gpu_麦地与诗人的博客-程序员秘密

GPUGPU加速的全称就是“GPU硬件加速”,主要是指利用显卡上的GPU来代替CPU进行图形运算上的加速功能。CUDACUDA(Compute Unified Device Architecture),是显卡厂商NVIDIA推出的运算平台。 CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。方法一:首先打开任务管理器然后点击性能然后点击左侧下拉框,往下拉,如果看到有GPU,则表示自己的电脑是有GPU的方法二:计算机右击–>管理–&gt

关于Linux中安装Hyperledger Fabric 2.0 说明_喝酸奶要舔盖儿的博客-程序员秘密

1. 环境准备1.1 安装CentOS7关于Vmware中安装CentOS7过程及常见问题解决1.2 安装docker环境关于Linux中安装Docker说明1.3 安装go环境关于Linux中安装go语言说明2.

ubuntu12.04.4安装MySQL-python_zhuxiongxian的博客-程序员秘密

1. 官网下载:http://sourceforge.net/projects/mysql-python/files/ 或http://ncu.dl.sourceforge.net/project/mysql-python/mysql-python-test/1.2.4b4/MySQL-python-1.2.4b4.tar.gz2. 解压:tar -xzvf MySQL-python-1.2.4b4.tar.gz3. 修改site.cfg:$ cd MySQL-python-1.2.4b4/vi

C++ 头文件系列(ostream)_weixin_30588729的博客-程序员秘密

1. 简介头文件ostream主要定义了一个输出流类模版basic_ostream,该模版继承自basic_ios模版。2. basic_ostream模版2.1 sentry类与basic_istream模版一样,basic_ostream也定义了一个sentry类,详见basic_istream::sentry。2.2 流定位函数seekp : 定位到指定位置。tellp : ...

【XSY2709】count DP_ez_yww的博客-程序员秘密

题目描述  有一个序列AA,你可以随意排列这个序列,设s=∑n−1i=1|ai−ai+1|s=\sum_{i=1}^{n-1}|a_i-a_{i+1}| 。  问你最终s≤ms\leq m的方案数有几种。  保证AA中的元素两两不同。  n≤100,ai,m≤1000n\leq 100,a_i,m\leq 1000题解  考虑从大到小把AA中的元素插回去。  插入

随便推点

leetcode 最大子序和_xutian_curry的博客-程序员秘密

状态:dp[i]表示以第i个元素结尾的连续子数组的最大和状态转移方程:dp[i] = max( 0, dp[i-1] ) + nums[i];#include <vector>using namespace std;class Solution{public: int maxSubArray(vector<int>& nums) { ...

Hibernate主键生成_qq_43176159的博客-程序员秘密

hibernate的主键生成器:generator元素:表示了一个主键生成器,它用来为持久化类实例生成唯一的标识 。1.1 程序员自己控制:assigned1.2 数据库控制: identity(标识列/自动增长) sequence1.3 hibernate控制:increment uuid/uuid.hex<?xml version="1.0" encoding="UTF-8...

我终于加上博士大佬的微信!攒了近百个技术问题,一口气解决!(文末有福利)..._Python中文社区的博客-程序员秘密

昨天,我终于加上了CMU计算机博士大佬 Johnson 的微信了!之前我研究机器学习的时候,遇到了很多小问题,希望这位大佬能帮忙指点一下。毕竟CMU是计算机学科全球排名前...

el-collapse-transition_elcollapsetransition_老李又来了的博客-程序员秘密

el-collapse-transition 里头如果有flex 会卡顿,套个div

MFC(五)运行时类信息机制 动态创建机制 序列化机制_mfc 运行时类信息机制 静态变量_Aousdu的博客-程序员秘密

世上的事,会则不难,难则不会~ WIN32学习起来也并不简单,而到了MFC,框架6大机制相当复杂,学习就更加困难。 迎着困难向上~其实也就没有那么难了~...

Android 中几种优雅的退出APP方式介绍_lt_sc的博客-程序员秘密

我们的态度是:每天进步一点点,理想终会被实现。前言最近由于项目的修改,项目由MainActivity按返回键一次退出修改为MainActivity中连续按两次返回键退出,顺便优化一下推出这里的代码。因此还是在网上搜索了一番,总结比较之后得出了有以下集中方式,优缺点都会提出来,有需要的老铁按需选择。目录常见的有5中方式:容器式 便捷式 广播式 Si...

推荐文章

热门文章

相关标签