写给所有程序员的对象的一封信

因为本人有一枚可爱的老婆,她经常有很多奇怪的问题(我承认其实是我老想跟她分享),但是有些问题需要有一定的理论支撑,所以我就打算在这里一并告诉她。就是一些关于编程的前置知识的汇总,如果你也有这种对编程或者程序很感兴趣但是又离这个环境很远的朋友,可以分享给他。因为是想面对小白建立编程模型的文章,所以我必须尽量通俗易懂,如果大家看完还有什么想知道的也可以说出来。

主要围绕下面这些讲下

  • 程序是什么
  • 为啥要写程序
  • 程序的原理

程序是什么

程序本质上就是提前写好的固定逻辑,比如你喊’嘿siri’,手机就回你一句,这就是一段程序发挥的作用。

下面就是一个启动后就会在屏幕显示hello,world的入门程序,你仔细看下可能都能看懂,很多程序员写的第一段代码可能就是这个。

所以所有的程序都是一样的,小到空调里的程序收到了你按空调的开关就启动,大到火箭到了预定的高度就加速。程序就是一段固定的逻辑,这段逻辑一般是,你预设一个前提条件并预设满足条件后就去做的事情。

如果按照这个角度去看,在没有电脑程序之前就已经有很多程序了。水如果在高处就会往低处流,苹果在树上成熟了就会往下掉。。。这些可以理解为自然存在的程序,我们可以直接利用但是没办法改变。这也是人造电脑程序(下面默认讨论的都是这个)出现的意义,可以满足我们想要的需求,比如在游戏类程序里你就可以写好有人按了攻击键血条就会减少。

为啥要写程序

为啥要写这个程序,这个问题在程序员的角度就是,公司发现了一个需求,再通过一些人(一般是产品经理)的转换翻译成了程序员能听懂的工作,然后程序员就被通知说这个要做了。所以程序就是为了解决人的需求产生的,大家都想更方便的购物,所以一定会出现了淘宝,拼多多这样的程序。

当然也有人说程序解决的是重复性的工作,这个就属于从结果得到的好处的角度思考为啥要写程序了。那我们就来聊一下程序的好处。现在假设一下没有电脑程序,大家还是需要更方便的购物,那会发生什么呢?就是会有一家公司提供这样的服务,你可以打电话给他说你要买意见衣服,说下要求,他再紧急的打电话问提供衣服的这些卖家,有符合要求的衣服吗,多少钱。再转述给你,以上只是电商网站的搜索商品功能而已,单纯改成让人去做这些事情会非常麻烦,就像三体中秦始皇的人体计算机。机器取代的重复工作是没有数量限制的,就像如果人力去满足客户的购物需求,那每增加客户就需要多加一个人服务他,换成程序就刚好相反,一个淘宝开发完了,那一个人用和1亿个人用基本成本不变(增加的很少)。简而言之,程序可以替换所有能重复的工作而且不会因为重复次数的增加而增加成本。所以思考一下,有些重复的工作还没有换成程序可能只是因为他的次数不够多或者重复次数更多的还没被程序替换完。现在程序正在替换的工作都是有着很大的次数的这样的重复工作,但是不要以为程序只能替换简单的工作,其实理论上只要人类能够描述出来让别人理解的工作程序都可以完成,举个例子人知道怎么开飞机,他就可以描述给程序员,程序员就可以按照描述的内容开发程序出来自动开飞机了,那有人会问为什么现在没有这样的程序呢?大概就是首先这样的程序开发起来非常复杂(比如自动驾驶全行业搞了几十年还没搞出来),其次就算开发完了也就只是替换了全世界所有机长的工作而已,有点得不偿失。但是等程序把所有重复次数高的工作都替换完了(这要很久很久),程序员接下来又该干什么呢?

程序的原理

程序的原理主要分为两部分,第一如何让程序的载体(下面就用电脑代替,一般人只要理解为电脑就可以了)理解我们的意思,第二是如何让电脑进行逻辑处理

看上面我的截图就知道程序都是用英语写的,可能有人会问为啥程序基本都是用英语写的,这是因为第一批写程序的人用的是英语,后面我们为了学习和沟通就也这样做,再后面用英语做的事情有点多,如果要把在写程序中用英语做的事情用中文再做一遍那就太麻烦了,而且做出来也很难在人类中达到共识,就是大家再一起换成用中文写代码。所有其实非英语母语的人在写程序上确实难度更高一点。

言归正传,电脑要如何才能理解英语写的程序呢?这一块叫编码,简单讲就是把所有需要用到的字母用数字进行对应,下面是一个最基础的编码表,可以看到大写A在电脑中对应的就是65,小写a就是97,当然大家可能还知道电脑中是只有0和1的(为啥呢?马上要讲),所以还要转换成2进制的数字,所以在所有的电脑中大写A对应的表示方法都是1000001。

这里我只讲最基础的一些东西,也希望所有人都能理解。

上面说到了为什么电脑中只有0和1,其实是因为电脑芯片所采用的材料刚好只有两种状态,就跟0和1对应上了。那如何计算呢?举个简单的例子,如果你想计算0和1相乘的情况,用到的就是与门,简单说假如有一个电路是由两个开关和一个灯泡组成,这三个组件简单的串联在一起,就组成了一个情况,只有两个开关都闭合灯泡才能亮起。现在假设开关闭合和灯泡亮起代表1,反之就是0,现在就能计算00 = 0,01 = 0,10 = 0,11 = 1这四种0和1的乘法计算了,这就是电脑芯片中最基础的一组与门,当然除了与门还有其他两种或门和非门,有了这三种门在进行相互组合就能进行所有的计算了,当然实际情况复杂的多,现在主流的芯片的门结构的个数都在百万级到千万级。这就是电脑进行逻辑处理的原理了,关于电脑逻辑处理原理详细点的可以参考【小白科普】为什么计算机只认识0和1?_集成电路

Original: https://www.cnblogs.com/hjsh/p/16629464.html
Author: 时有限学无涯
Title: 写给所有程序员的对象的一封信

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/613043/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 在Linux中使用crontab

    查看已存在的任务 查看crontab 输入命令: cat /etc/crontab 在设定编辑之前都建议列出服务查看一下: crontab -l 语法: **** user_nam…

    数据库 2023年6月14日
    084
  • 分布式锁的实现

    什么是分布式锁? 为了保证一个方法或属性在高并发情况下的同一时间只能被同一个线程执行,在传统单体应用单机部署的情况下,可以使用Java并发处理相关的API(如ReentrantLo…

    数据库 2023年6月6日
    0107
  • leetcode 104. Maximum Depth of Binary Tree 二叉树的最大深度(简单)

    给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例:给定二叉树 [3,9,20,null,nu…

    数据库 2023年6月16日
    099
  • Centos安装mysql57

    1.1 MySQL安装 1.1.1 下载 wget 命令 yum -y install wget 1.1.2 在线下载mysql安装包 wget https://dev.mysql…

    数据库 2023年5月24日
    0116
  • Python第二十四天 binascii模块

    Python第二十四天 binascii模块 binascii用来进行进制和字符串之间的转换 hex(512) # 10进制转16进制 ‘0x200’int…

    数据库 2023年6月9日
    097
  • Java基础七—Java并发基础

    一个类在可以被多个线程安全调用时就是线程安全的。 线程安全不是一个非真即假的命题,可以将共享数据按照安全程度的强弱顺序分成以下五类: 不可变、绝对线程安全、相对线程安全、线程兼容和…

    数据库 2023年6月6日
    0251
  • gh-ost使用问题记录

    因为 pt-osc 对数据库性能影响较大,且容易造成死锁问题,目前我们在线更改表结构都使用 gh-ost 工具进行修改,这里记录一下使用 gh-ost 过程中的问题,以作记录;首先…

    数据库 2023年6月9日
    081
  • Python学习笔记(十一)– Django API RESTful

    (1)路由;(2)视图类(提供给用户访问相当于原来的视图函数);(3)序列化类(提供给视图类使用,把对象序列化成Json) 注意:使用rest_framework,需先 setti…

    数据库 2023年6月16日
    081
  • 分布式锁的几种实现方式

    转自于:https://www.cnblogs.com/austinspark-jessylu/p/8043726.html分布式锁的几种实现方式 目前几乎很多大型网站及应用都是分…

    数据库 2023年6月16日
    0115
  • JWT+SpringSecurity登录和权限管理

    一、什么是JWT 说起JWT,我们应该来谈一谈基于token的认证和传统的session认证的区别。说起JWT,我们应该来谈一谈基于token的认证和传统的session认证的区别…

    数据库 2023年6月6日
    095
  • 用户后台管理

    User Management 这是通过SpringBoot完成的用户后台管理系统 一些解释说明也在代码里面, 源码及资源 会放在文末哦!!! – 这是效果图 大概就这…

    数据库 2023年6月16日
    0114
  • 2022-6-2-mysql常用的命令

    mysql -uroot -proot -h192.168.56.10表示使用mysql的客户端进行连接数据库管理系统 -u后面是连接数据库的用户名,一般默认的情况下用户名都是ro…

    数据库 2023年5月24日
    085
  • git开发常用命令

    1.基本命令git branch 查看本地分支git branch -r 查看远程分支git checkout xxx 切换分支git pull origin master //从…

    数据库 2023年6月9日
    090
  • SQL Server什么时候启用“锁定内存页”选项 (Windows)

    在SQL Server的配置中,尤其是那些应用服务器和数据库服务器共用/混用的情况下,最好启用”锁定内存页”选项。反而对于单独的SQL Server数据库服…

    数据库 2023年6月11日
    0101
  • 数字图像处理—检测交通视频中运动目标的程序设计

    初始条件: (1)数字图像处理的基本理论学习; (2)Matlab或Visual C++软件工具。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)…

    数据库 2023年6月16日
    0123
  • JDK1.7-HashMap原理

    JDK1.7 HashMap JAVA技术交流群:737698533 如何在源码上添加自己的注释 打开jdk下载位置 解压src文件夹,打开idea, ctrl+shift+alt…

    数据库 2023年6月16日
    077
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球