前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >需要学习的是编程,而不是编程语言

需要学习的是编程,而不是编程语言

作者头像
Jimmy_is_jimmy
发布于 2023-05-24 01:09:49
发布于 2023-05-24 01:09:49
52700
代码可运行
举报
文章被收录于专栏:call_me_Rcall_me_R
运行总次数:0
代码可运行

我们不仅是程序员,而且是个(与时俱进的)学习者。鲜见的是有多少人认为他们是在学习编程的呢。原翻译传送门is here

你可能在学习编程语言而不是编程本身

别对学习计算机科学(CS)不是研究计算机这种言论感到惊讶。相反的,学习CS是对自动解决问题的研究。解决问题的是计算机科学,而不是编程。这就是为什么许多CS的学生似乎不明白自己为什么要学习算法和数学。

如果之前你有去上过CS的课程,你就不会对我这里说的话感到惊讶。因为你会注意到编程和编程语言没有多大的关系。

但是,大多数自我思考的程序员会掉入这么一个陷阱:在我们意识到自己正真要做的是编程事情的时候,我们已经花了很长的时间来学习编程语言了。我自己就是一个受害者。

我花了十几年的时间学习各种编程语言。我学的越多,发现建立简单的东西就越难。我总有那么种感觉是我没找到合适的工具。但是,问题出在当我还没有意识到我要做的工作时,忘了寻找适合的工作而不是寻找适合的工具。

而且奇怪的一点是:编程语言总是在不断发展的。编程语言几乎每天都有所变化,我们很难跟上其步伐。可是,大多数优秀的程序只是使用了编程语言的一小部分。

学习编程语言的问题就好比在学习木工之前去学习如何使用木工锯,锤子和各种切割机器。木工需要注意:想法、可行性分析、测量、测试和用户行为。老木工对上面提到的注意点更感兴趣,而不是锤子和钉子。在对工作科学研究的期间,他还会花时间去检查钉子、着色板和木材等的质量。

学习编程和学习编程语言有什么区别呢

程序设置系统只需指令它一次就可以自由运行。我们每天都在做这件事情。我们告诉我们的孩子、士兵和顾客。我们给予他们或者我们自己接受到给定的指令去自由/独立地生活。比如,您的父母不需要每天都关注你并且对你人生要走的下一步做指导。他们本来可以在你生活的方方面面为你设定好。

很多学校和教育网站都会教你编程语言的语法。他们会添加些设计模式(当你忽略设计的时候),一些数学计算,如何声明变量并使用它们,数据类型以及如何声明/创建它们等的内容。

这些并不能教会你推理。通过上面的途径,你会学到些推理的方法,但是过不了多久,你会意识到自己浪费了或者花了很长时间去学习编程。

我们是通过编程解决问题,而编程语言只是协助我们的工具。编程语言就像一个个的工具盒,我们称它们为框架。它们帮助我们组织自己的想法。

如果你正在学习编程,但是你还不能够设计并且编码出一个实实在在的应用,那么说明你更多的是在学习编程语言而非编程。

有多少次我们碰到想知道怎么创建程序的人(程序员)。对于他们这些程序员来说,创建程序就是解决一个问题。他们在使用编程语言的时候就通过批判的分析解决了这个问题。但是当你解决了这个问题,你是可以使用多种编程语言去实现的。我们以平方数为例。某数的平方就是这个数字乘以本身。我们可以用各种语言来实现它,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# c
function square(int * x) {
    return x * x;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# php
function square ($x){
    return $x * $x;
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# javascript
function square(x){
    return x * x
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# In Scheme (a Lisp dialect)
(define (square x) (* x x))

以上,你可以看到在实现的上面只有语法的不同,结果是一样的。这也是你可以使用任何语言,这种语言使你轻松构建任何类型软件的一个重要原因。

通过编程发现语言更容易

问题通常是人类语言。人类语言充满了限制和错误,是不能用来指导机器工作的,因为机器接收不到。

学习编程的时候,你将学习一种新的术语和工具来帮助你编写逻辑方式,这种逻辑方式是被计算机和其他程序员理解并且认同的。

通常,你将从简单且类似人类语言的符号开始,称之为伪代码。它是从人类语言到计算机编程语言的良好过渡工具。这通常为了防止你浪费时间在语言上面。这样你可以关注在推理上面。如此,你会发现组成一个良好的编程工具(语言)的核心部分。你了解什么才是正需要的,了解编程语言的核心目标。通过了解,你会不知不觉下意识去学习这种语言了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
synchronized关键字简介 多线程中篇(十一)
synchronized可以修饰方法,静态方法和实例方法都可以,也可以修饰一段代码({} 包裹)
noteless
2019/03/14
4370
synchronized关键字详解
synchronized 这个关键字,我相信对于并发编程有一定了解的人,一定会特别熟悉,对于一些可能在多线程环境下可能会有并发问题的代码,或者方法,直接加上synchronized,问题就搞定了。
IT可乐
2020/06/12
5340
synchronized关键字详解
volatile与synchronized
volatile和synchronized是Java语言中两个重要的关键字,它们都涉及到并发编程的概念,对于保证多线程程序的正确性非常重要。在这篇博客中,我们将从基础开始讲解这两个关键字,包括它们的含义、使用场景、实现原理等方面,帮助大家更好地理解和应用它们。
人不走空
2024/02/20
1640
如何理解 JAVA 中的 volatile 关键字
近在重新梳理多线程,同步相关的知识点。关于 volatile 关键字阅读了好多博客文章,发现质量高适合小白的不多,最终找到一篇英文的非常通俗易懂。所以学习过程中顺手翻译下来,一方面巩固知识,一方面希望能帮到有需要的伙伴。该文章并非完全逐字翻译,英文不错的可以选择阅读原文:Java Volatile Keyword
conanma
2021/10/28
2.8K0
【Java】Synchronized 关键字
His flower had told him that she was only one of her kind in all universe. And here were five thousand of them, all alike, in one single garden!
JuneBao
2022/10/26
3250
【Java】Synchronized 关键字
synchronized的简单理解
synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。它能够保证在同一时刻,被修饰的代码块或方法只会有一个线程执行,以达到保证并发安全的效果。
默 语
2024/11/20
1820
synchronized的简单理解
关于Java里面多线程同步的一些知识
对于任何Java开发者来说多线程和同步是一个非常重要的话题。比较好的掌握同步和线程安全相关的知识将使得我们则更加有优势,同时这些知识并不是非常容易就能熟练掌握的,实际上写出正确的并发代码是一件比较困难的事情。在Java的自带的库里面,已经包含了非常多实用的并发工具类,今天这篇文章,我们主要来学习Java里面synchronized关键字的相关知识。
我是攻城师
2018/07/23
4580
关于Java里面多线程同步的一些知识
【JAVA-Day78】深入理解Java中的线程同步机制
哎呀呀,作为一名Java博主,我今天要和大家深入探讨一下Java中的线程同步机制啦!线程同步可不是闹着玩的,它是用来控制多个线程之间的访问顺序和共享资源的安全性的哦!在这篇博客中,我会带领大家从什么是线程同步开始,一直到线程同步的应用场景和面试题,最后进行总结,希望大家能够有所收获哟~
默 语
2024/11/20
900
【JAVA-Day78】深入理解Java中的线程同步机制
Java多线程编程-(3)-从一个错误的双重校验锁代码谈一下volatile关键字
在Java多线程编程-(2)中提及到了一段使用Synchronized关键字实现的单利模式--双重校验锁,代码如下:
Java后端技术
2018/08/09
6410
Java多线程编程-(3)-从一个错误的双重校验锁代码谈一下volatile关键字
Java 关键字:synchronized详解
在Java虚拟机中,每个对象头中都包含一部分用于实现synchronized的相关信息。这些信息包括:
小尘要自信
2023/10/23
1940
Java 关键字:synchronized详解
java关键字
当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
知识浅谈
2021/10/13
4170
java多线程编程核心技术——第二章总结
用户1134788
2018/01/05
6170
java多线程编程核心技术——第二章总结
java多线程关键字volatile、lock、synchronized
总结:volatile关键字的作用是:使变量在多个线程间可见(具有可见性),但是仅靠volatile是不能保证线程的安全性,volatile关键字不具备synchronized关键字的原子性。
程序大视界
2020/07/21
7840
JAVA中volatile、synchronized和lock解析
在研究并发程序时,我们需要了解java中关键字volatile和synchronized关键字的使用以及lock类的用法。
哲洛不闹
2018/12/06
7150
笔记-2021-01-19
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之 一不满足,就不会发生死锁。
Li_XiaoJin
2022/06/10
1520
面试:再见多线程!
3、定期执行一些特殊任务:如定期更新配置文件,任务调度(如quartz),一些监控用于定期信息采集等
南风
2022/05/21
3070
volatile和synchronized的区别,如何选择合适的同步方式?
在Java多线程编程中,volatile和synchronized是两个常用的关键字,用于保证共享变量的可见性和线程安全。虽然它们都可以用于实现线程安全,但是它们的运行机制和使用方式有很大不同。本文将详细介绍volatile和synchronized的区别以及如何选择合适的同步方式。
网络技术联盟站
2023/06/08
4810
volatile和synchronized的区别,如何选择合适的同步方式?
如何彻底理解volatile关键字?
最近面试,你又被volatile关键字虐了吗?这个问题,是不是问得有点扎心了!的确,有很多朋友反馈面试中在涉及考察Java并发编程知识的时候,经常会被问到volatile关键字。对于有些公司如果你能回答出volatile关键字的基本作用及原理,如:"volatile关键字可以实现线程间的可见性,之所以可以实现这一点,原因在于JVM会保证被volatile修饰的变量,在线程栈中被线程使用时都会主动从共享内存(堆内存/主内存)中以实时的方式同步一次;另一方面,如果线程在工作内存中修改了volatile修饰的变量,也会被JVM要求立马刷新到共享内存中去。因此,即便某个线程修改了该变量,其他线程也可以立马感知到变化从而实现可见性"也基本上能够pass这个问题。
JAVA葵花宝典
2019/05/24
5240
Java多线程学习(三)volatile关键字
Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):https://github.com/Snailclimb/Java_Guide
用户2164320
2018/06/18
8431
Java内存模型中的volatile和synchronized关键字
这个例子中,counter是一个共享资源,初始值为0。线程t1负责递增counter的值,线程t2负责递减counter的值。通过synchronized关键字对increment()和decrement()方法进行同步,保证在任意时间点只有一个线程可以访问这两个方法,避免了并发问题。最终输出结果为0。
一凡sir
2023/08/22
2200
Java内存模型中的volatile和synchronized关键字
相关推荐
synchronized关键字简介 多线程中篇(十一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档