我觉得这个问题有点像,身高不高能不能打篮球相同。尽管关于职业篮球运动员来说,身高是非常关键的因素,但关于一般篮球爱好者,乃至一个篮球相关从业人员来说,这并不是非要不行的条件。放到编程上,数学和英语都很重要,但:
在入门阶段,你彻底不用介意这些,照着一本教程好好跟着仿照就行
关于大部分的日常开发来说,中学程度的数学和英语水平现已能够敷衍了
和身高这种先天条件不同,英语和数学是能够经过学习提高的,哪里不足补哪里呗。网上盛行一句话:“以大多数人的努力程度之低,底子轮不到拼天赋。”你能长时间坚持背背单词,看看书,就足以提高自己。总是把XX不好挂在嘴上恐怕更多是在给自己找托言。
不过,有一项才能,确实是在学习编程初期就需求足够重视的。然而这一点,许多教程不会专门强调,相关书本也往往假定你现已把握,以至于许多学习者并没有意识到自己在此方面的薄弱,为之后的学习留下危险。我要说的便是:
逻辑
某种角度来说,逻辑可部分算作是数学,在高中数学课本中就有相关内容。这部分内容也恰好是咱们学编程时最需求了解的根底。
一、布尔代数
由真(1)、假(0)两种状况,以及与(and)、或(or)、非(not)三种根本运算组成。布尔代数看似简略,却与数字电路中开和关两种状况相对应,是计算机的逻辑根底。你或许听说过,电脑上的一切在内部都是由0和1所表示,那换句话说,计算机的一切行为,本质都是由布尔逻辑所完成的。
在编程言语中,布尔类型(bool)也是极为重要的存在。没有它,咱们就做不了条件判断,也就无从控制程序的履行。Python的if、while句子都有必要依靠布尔类型作为判断条件。
因此,即便你不想深化学习逻辑,布尔代数的根本规矩也是无论怎么有必要了解的。简略来说,便是下面这张“真值表”:
pqnotppandqporq
11011
01101
10001
00100
这些根本规矩又会组合出更杂乱的逻辑,比方:not(porq)等价于(notp)and(notq)(示例:“不是管理员或许会员”相当于“不是管理员且不是会员”)
实际开发中面临的逻辑判断杂乱多样,但归根到底仍是会转化到最根本的这几个规矩上。
考虑题1:怎么用逻辑言语表示“通过活动注册的新用户或许充值超越100元的老用户,内部人员在外”
二、出题逻辑
真值仅有的陈述句叫做出题,不能分解成更简略的出题叫做原子出题。比方,“1+1=2”是原子出题,“一切猫都是白的”是原子出题(假出题),“存在外星人”也是原子出题(虽不能判断真假,但成果必定仅有)。出题和逻辑运算相结合,又会产生更杂乱的逻辑。
比方充沛必要条件。
假如出题p必定推出出题q,那么p便是q的充沛条件,q便是p的必要条件,记作p→q。
比方汉乐府的诗句“山无棱,六合合,乃敢与君绝”,用逻辑言语表达是怎样?
(山无棱and六合合)→与君绝?
想一想是不是不大对劲?依据语义来看,“山无棱”、“六合合”是“与君绝”的必要条件,假如“与君绝”为真,那必定存在“山无棱”和“六合合”,反过来却未必。所以正确的逻辑是:
与君绝→(山无棱and六合合)
再比方三段论。
①不把握根本的逻辑常识就无法学好编程②Python是一种编程言语所以,学好Python需求把握根本的逻辑常识
一个大前提加上一个小前提,能够推导出一个定论。这是日常运用最多的论证方式,看似简略,但也总有人在这上面犯糊涂。举个过错的比方:
①有钱人都用iPhoneXSMax②我用iPhoneXSMax所以,我是有钱人
这些逻辑关系、推导进程与程序中的逻辑结构休戚相关。假如你对此不能坚持思路清晰,写出的代码很或许与预期有出入,或是在一些特殊情况下存在缝隙。
考虑题2:一个每天签到领奖的小功用,在每天的11~13点和18~20点敞开,一般用户每天能够收取一次,会员用户能够在每个时段别离收取一次。怎么完成这段程序的逻辑结构?(我常常拿这个作为面试题,许多人都不能在短时间内给出正确的答案)
三、概括
有时分,咱们并不能经过逻辑推导出必定的定论,但仍然能够经过一系列的经历和已有定论,找出其中根本遵从的规律。
比方:①X团队历来给一切成员都配备Dell笔记本作为工作电脑②C教师最近刚加入X团队经过这两点,咱们能够推导出,C教师很或许也运用Dell笔记本。
但你要清楚概括的定论并不必定为真,假如遇到逻辑推理出的必定反例,即便再不契合常理,概括的定论也会被推翻。
比方除了上述两点,咱们还知道:③C教师签约了苹果公司代言④苹果公司的代言人不得运用其他品牌的手机和笔记本那么,上述“C教师运用Dell笔记本”的定论便不成立。
尽管概括不是必定,但在解决问题时仍然重要。尤其在开发中遇到过错需求debug(调试)的时分,并不是一切过错都能够直接从报错信息看出问题(比方Python开发时常常呈现的乱码问题),这时假如有丰富的经历和较强的概括才能,功率会大大提高。这也是资深程序员和初级程序员之间差距的重要表现。
现在网上的编程教程铺天盖地,不过呢,咱们都喜欢写写怎么编个爬虫抓图片、抓数据之类,却很罕见文章乐意讲讲背面的思维进程。写了读者也不乐意看,由于看不出什么效果,哪有调几个函数就出成果来得爽快。以至于你发现,照着比方也能写个相同的代码出来,可是一旦报错或许没有预期的成果,就彻底抓瞎了,只能把参数东改改西改改,重复运转,期待某一次奇迹呈现。今后换个新的问题,仍然不知道从何下手。
这便是由于并未理解程序背面的逻辑。我常在答疑群里说:遇到程序出错了不要去猜!要去做假设,再经过输出验证假设,终究定位问题所在。
文本仅仅一个引子,不或许让你对逻辑融会贯通。但前面讲的那些逻辑根底,任何一本《离散数学》或许《逻辑学》的书上都有,并且仅仅是最开端的一小部分就很受用了。找一本来看一看。真想好好学编程,不要只局限于读网上的教程,这些都是他人嚼烂喂到你嘴里的。假如你只能接受这样二次加工过的常识,而没有自己咀嚼的进程,那么你学习上的乳牙永远都掉不了。
了解逻辑学和思维具有逻辑性并不彻底等价。有人没学过逻辑,说话干事相同很有逻辑性,而有的人尽管学过逻辑,也不过是作为数学公式在背,整天“逻辑思维”挂嘴边不代表干事就讲逻辑。
在网络上,你常常能够看到一些逻辑错误,举几个常见的比方:
以偏概全:你说用X产品遇到了Y问题。有人就辩驳说,我也用X产品,我身边人也用X产品,都没有问题,所以你一定是故意黑。
相关当因果:某区域的人喜欢喝生牛乳,同时该区域人平均寿命高于周边区域,所以喝生牛乳能够延年益寿。
非黑即白:网上都在抨击某个产品偷听用户聊天,并且之前也有发废物广告的前科。你说偷听从技术上来说不现实,目前也缺少清晰依据。然后就有人认为你纷歧起喷,你便是水军、洗地、舔狗。
……
类似的不讲逻辑充满着网络。
咱们的周围有许多偏见、轻视的观念,还有许多喜欢争辩的“杠精”,归根到底,你会发现这些人都有一个一起的特征:逻辑混乱。比方,之一切有人会有性别轻视、地域轻视,便是由于以偏概全地由一些特例而对整体作出推论。而偷换概念、倒置因果、动机推测,更是杠精们喜欢滥用的逻辑错误。
不仅仅是在编程上,假如咱们更考究逻辑,这个世界的矛盾就会少许多。即便没经过专门的学习和训练,只要坚持谦逊,学会倾听,以包容的心态对待不同的声响,多去考虑一下对方的观点,从不同的角度看问题,你的逻辑就会更齐备。
而反过来,当你发现网络上全是不讲逻辑的言论时,就不想再发表任何观点了。
评论前必须登录!
注册