当前位置: 首页 > news >正文

我讲个事情哈,编程其实是文科

简述:大家普遍的观点就是编程序是理科,因为就拿学校里来说吧,计算机和软件专业招录的都是理科生,并且获取的要么是理学学位要么是工学位,而且什么算法、数据结构、逻辑还有离散,这些都是数学哇,但是本文的观点就与众不同,作者认为编程其实是文科,这样想想也有道理,毕竟编程思想都可以上升到哲学的高度...你说对不?


编程究竟是文科还是理科?

7a5ce7aec9e118b1f4ec5c0a08f3d90d26f5c161

还用问?编程当然是理科喽!或许很多人会不屑地回答。
然而,情况真的如此吗?
让我们先来看看一个程序员故事,或许里面有着你我的影子。


学习编程的小灰

多年以前,工科出身的小灰打算学习编程

5f0a2746a483252368366dbd2072531842910292

学习编程的头一个月,小灰如鱼得水

52171e962b834687a4aae6c459aed1577935a826

学习编程三个月,小灰略有疑惑

76d84cec9cbf3ee8c0eb9ac8351393bf67212048

求职和初入职场,海量的知识扑面而来

9052202fa476c39387537823d386cef3578ab580

工作若干年,小灰又将面临新的挑战

39828f1ed97107e96989ad1b5b1a5719c5311512

工作之余,小灰回想起自己编程道路上的得与失,不禁感慨道:

fe14f94fcc0f6bf986bb00614192e833e45c914b

文科还是理科?
若要评判编程是文科还是理科,我们需要首先明确一下文科与理科的各自特征。

文科:以知识和经验总结为主,例如历史学、法学

707b50763d87043d4425af922b83bdcbec581b23

理科:以计算和逻辑推理为主,例如数学

77e3b05f76917be788a5121fb96d59fd227aa87d

当然,绝大多数学科都不是纯粹的文科和理科,而是两者均有涉及。其中有些学科更偏重文科,但也具有少量理科成分,例如地理学。

269465715c3637d54ea4d2325270b870937d59d7


也有部分学科更偏重理科,但具有少量文科成分,例如化学、生物学。

0905cb7548aec10168b30bfaa5fa61fcfd87411c

对于这些“混合型”学科,我们往往依照其侧重点,来划分文理科。因而毫无疑问,地理学属于文科,生物学属于理科。
那么,对于“编程”这样一门学科,究竟是文科成分占主导,还是理科成分占主导呢?让我们来做一些具体分析。

编程中的理科部分:
1.基本逻辑

d30bca4580f2f4915c2e972b45e8dd697e909758

这里的基本逻辑,指的是编程中所涉及的各种基本逻辑元素,比如程序中的循环控制、条件控制逻辑,比如数据库中的SQL查询逻辑,比如多线程的同步异步逻辑。
诚然,逻辑是学习编程的基石,但逻辑绝不会成为一个程序员从初级走向高级的门槛。因为这些逻辑的学习成本真的不高,只要方法得当,一个十二三岁的普通孩子也可以轻松掌握。

2.算法

bd1f49090a5168d2012df79e903af7867b089308

如果说基本逻辑仅仅是入门的基础,那么算法就是理科编程的真正难点。可是,对于绝大多数人程序员来说,如果不是专门从事算法研究,不是ACM竞赛的参赛者,那么算法对他来说仅仅是一个大致原理的理解,仅仅是一个API的调用。算法很重要,但是相对于其他能力,算法又显得不那么关键。

编程中的文科部分:
1.知识

9dff4000e748e58fab962bd3725eb19089bc2cb6

知识是一个广义的概念。在编程这个领域,知识可以是某种语言规则,比如Java中final类不能被继承;知识也可以是某个底层原理,比如Mysql中Myisam引擎的索引数据文件分离;知识也可以是某种设计原则,比如面向对象的开放封闭原则,比如系统设计的CAP原则。
或许有人会说,编程当中的知识不需要像文科那样死记硬背,最重要的是“理解”。可是,理解与记忆原本就是密不可分的,不去记忆,谈何理解?历史事件需要理解,法律法规也需要理解,但历史学与法学,并未因此而脱离“文科”这一属性。

2.经验总结

78bc32d21832ad3adff0af226ddf6a222c539d7a

如果说编程知识是一条一条清晰的文字,那么编程经验则显得抽象而模糊,很难直接用语言表达。

深厚的编程经验可以让你写出可扩展性更强的代码,可以让你快速定位出线上的bug,也可以让你设计出高可用的系统。知识由书本得来,经验则是在一次次的采坑中逐渐总结和积累获得。可以说,经验的作用还在知识之上。


总结起来,在逻辑、算法、知识、经验四个方面,绝大多数程序员花费几个月的时间掌握了编程的基本逻辑,却需要花费五年甚至更长的时间来学习大量编程知识,总结编程经验。算法虽然学习成本很高,但因为过于“专业化”,而居于次要地位。

9344e3c88a408b915d3709229bef566ccdebc3ac


由此可见,编程虽然有着一定的理科元素,但更多的特征仍旧偏向文科,足以把整体定位成文科。

如何学好这门文科?

无论编程的真面目是文是理,作为一个程序员,我们都需要热爱自己的职业。算法和设计思想是天马行空的艺术,项目研发则是脚下泥泞坎坷的道路。做好程序员,最重要的是踏实和耐心,希望各位亲们都能一步一个脚印,走出属于自己的路。


本文转载自 伯乐在线专栏作者 - 玻璃猫

相关文章:

  • 基于Docker和Debian打造个人专属操作系统
  • thinkphp在前端页面的js代码中可以使用 U方法吗? 可以使用模板变量如__URL__等吗?...
  • 编写符合Python风格的对象
  • 二叉树基础之序列化和反序列化二叉树
  • 数组作业
  • Linux进程管理
  • Spring系列之-Aware系列接口
  • 如何正确配置 Ubuntu 14.04 服务器?
  • JDK 6和JDK 7中的substring()方法
  • 使用事件和消息队列实现分布式事务(转+补充)
  • JFinal极速开发框架使用笔记(三) 分析Model和ActiveRecord
  • 3138 栈练习2
  • innerHTML、html('')与empty在IE上不同的区别
  • 配置tomcat监听80端口、配置tomcat虚拟机、tomcat日志
  • 关于Docker的一些常识
  • 【comparator, comparable】小总结
  • 07.Android之多媒体问题
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Codepen 每日精选(2018-3-25)
  • CSS居中完全指南——构建CSS居中决策树
  • ES6简单总结(搭配简单的讲解和小案例)
  • java8-模拟hadoop
  • JavaScript 基础知识 - 入门篇(一)
  • Java多态
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Python实现BT种子转化为磁力链接【实战】
  • swift基础之_对象 实例方法 对象方法。
  • 闭包,sync使用细节
  • 彻底搞懂浏览器Event-loop
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 浮动相关
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 开源地图数据可视化库——mapnik
  • 时间复杂度与空间复杂度分析
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 小程序开发中的那些坑
  • 一起参Ember.js讨论、问答社区。
  • 中文输入法与React文本输入框的问题与解决方案
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #LLM入门|Prompt#3.3_存储_Memory
  • $(selector).each()和$.each()的区别
  • (+4)2.2UML建模图
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (2020)Java后端开发----(面试题和笔试题)
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (MATLAB)第五章-矩阵运算
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (一)WLAN定义和基本架构转
  • (转)创业的注意事项