Java门派的风险

简介: Java门派的风险正在看周思博(www.joelonsoftware.com)的新文章。这次是疯狂攻击Java。主要论点是:Java不够难,作为工业语言不错,但作为学校的教学语言,就忒差了。学校应该用指针和递归这类东西把真正的程序员筛选出来。

Java门派的风险

正在看周思博(www.joelonsoftware.com)的新文章。这次是疯狂攻击Java。主要论点是:Java不够难,作为工业语言不错,但作为学校的教学语言,就忒差了。学校应该用指针和递归这类东西把真正的程序员筛选出来。对指针(代表系统底层)和函数编程(代表高层抽象)的学习是脱胎成优秀程序员的必经之路。看这种滔滔雄辩的文章最爽了。摘取一段哈:

不了解泛函编程,你不可能发明MapReduce -- 让Google获得超大规模扩展能力的算法。Map和Reduce这两个术语就是来自Lisp和函数编程。现在看来,MapReduce对每个记得6.001等同课程的人都是显而易见的选择:纯函数编程没有副作用,所以才能让并行处理出奇地容易。恰恰是Google而不是微软发明了MapRequest在某种程度上说明了为什么微软还在努力追上Google的基本搜索功能的时候,Google已经开始需求解决另一个问题:开发天网^H^H^H^H^H^H这个世界上最大规模的并行超级计算机。我觉得微软还不清楚他们到底落后了多少。

还有这一段:除开指针和递归本身的重要性以外,他们的真正价值在于开发大型系统需要某种思维上的灵活性。而这种灵活性得从学习指针和递归得来。开发大型系统也需要一种思维上的天赋,这种天赋可以通过教授指针和递归被筛选出来。指针和递归要求一定的推理能力,抽象思维的能力,和更重要的在不同抽象层次上看待问题的能力。因此,理解指针和递归的能力和当优秀程序员的能力直接相关。

还有这一段:计算机科学是证明(递归),算法(递归),语言(lambda 算子), 操作系统(指针),编译器(lambda 算子) -- 所以底线是不教C和scheme的Java派也没有真正地教你计算机科学。

注解一下哈:6.001是MIT CS入门第一课,用著名经典SICP(早就有中文版了),用scheme(LISP的一种)讲各种编程思想。网上也有授课录像。这个课第一堂就基本讲完Scheme所有语法(当然,lisp本来就是非常简单但深刻的语言),并开始谈论定点理论。第二节课就用短短数行写出了找平方根算法,干净漂亮,让人叹为观止。

天网是终结者里发动核攻击消灭人类的超级计算机,第三集里说天网其实不是一台机器,而是通过互联网变得拥有智能的程序。

^H^H^H^H是在Unix的基本配置下,命令行输入按Backspace出现的效果。也就是说,作者暗示自己本来想说的是天网,但改成后面的说法了。一种技术文章里常用的强调/幽默写法。

目录
相关文章
【Java每日一题,简单题】csp202203-3 风险人群筛查
【Java每日一题,简单题】csp202203-3 风险人群筛查
|
4月前
|
存储 Java 编译器
|
7月前
|
存储 安全 Java
Java多线程安全风险-Java多线程(2)
Java多线程安全风险-Java多线程(2)
38 1
|
缓存 Java p3c
【Java用法】线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
【Java用法】线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
205 0
|
机器学习/深度学习 人工智能 搜索推荐
泛型带你规避风险 | 带你学《Java面向对象编程》之六十四
本节由转型风险引出了一个新的概念-泛型,并为读者简单介绍了泛型的定义方法与泛型类实例化方法。
|
Java 程序员 编译器
Java并发编程(二)优势和风险
一、优势 并发编程之所以让人迷惑是因为有不止一种问题的解决需要使用并发,也有不止一种方法去实现并发,而且他们之间也没有清晰的映射。 使用并发编程来解决的问题可以划分为两类,即“speed”和“designmanageability”。
1239 0
|
3天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
5天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。
|
5天前
|
消息中间件 缓存 安全
Java多线程是什么
Java多线程简介:本文介绍了Java中常见的线程池类型,包括`newCachedThreadPool`(适用于短期异步任务)、`newFixedThreadPool`(适用于固定数量的长期任务)、`newScheduledThreadPool`(支持定时和周期性任务)以及`newSingleThreadExecutor`(保证任务顺序执行)。同时,文章还讲解了Java中的锁机制,如`synchronized`关键字、CAS操作及其实现方式,并详细描述了可重入锁`ReentrantLock`和读写锁`ReadWriteLock`的工作原理与应用场景。