欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

程序员基础掌握得好学新东西真的就快么?

程序员文章站 2022-03-29 17:05:04
...
都说程序员基础掌握得好学新东西就快,那比如Elasticsearch这种新技术,拥有了什么基础才会觉得这并不是一个新东西?之前想,出了这么一个技术,肯定同时又出了一个砖头书,去京东一看,果不其然。由此引发我思考:我们这行的新技术如雨后春笋,更新如此之快,就像小时候玩的乐高,不同的排列组合就成了不同的成品,程序不同的排列组合也就成了不同的新技术,要学,永远也学不完,学习成本太大了。如何减少这种无力感? 或者说降低学习成本?


先说结论,是的!

程序猿基础我认为可以分两部分来看

    1.编程语言的基础
    2.计算机基础

编程语言的基础

这个主要指对编程语言的理解,编程语言包括不限于:C/C++ Java Python C# .net Ruby Rust Golang…

任何一门编程语言,都有自己的规则,关键字,语法,循环,基本数据类型,异常处理等通用部分!所以如果你有Java的基础,再去学习Python上手会比较快,因为很多概念都是类似的!

计算机基础

这个基础指的是对于计算机体系

整体的理解,是个比较宏大的概念,可以参考大学计算机专业的几本书籍:

计算机网络,计算机操作系统,数据结构,计算机组成原理

作为程序猿,更重要的基础是第二点,计算机基础掌握的好,学起编程语言入门会快,遇见新的技术和框架入门也会轻松,基础足够扎实,深入进去也不会阻力太大!

下面我以我自己的例子(一个Java程序员)来分享下,作为搞Java的,面相对象编程,类和对象的概念比较好懂,基本的代码编写不需要涉及到计算机基础,但是深入,就会碰到【计算机基础】相关的东西!

譬如Java里发送/接收http请求,不管是用Spring封装好的RestTemplate还是用HttpClient,其本质是建立在应用层之上的,实现了http协议
的客户端,而在Java中http请求的实际发送/接收是通过实现了tcp/ip协议的socket客户端实现的, http协议,tcp/ip协议,这些都是属于计算机网络里的内容!计算机网络的本质说简单也简单,无非是两台计算机之间如何通信如何相互联系,多台计算机之间如何组成网络!所以,如果你了解http协议,你就可以在socket的基础上实现一个自己的http客户端



如果你研究Java的源码和一些框架,会碰到各种数据结构。LinkedList中的链表,Hashmap中的红黑树,这些如果你有数据结构的基础,学起来比较会轻松!在学习各种mq消息队列

,和nginx的几种请求分配策略时就能比较容易理解!

如果你研究Java中的虚拟机
(JVM),你就会发现Java虚拟机,有点像虚拟的计算机,有自己的指令集

,有字节码,这部分内容属于计算机组成原理

最后,如果一个程序猿不知道大名鼎鼎的Linux系统,不会几个基本的Linux命令,真的不能算是合格的码农!而操作系统,不论是windows也好,linux系也好,macos也好,都属于计算机操作系统的范围!如果你有操作系统的概念,那么在学习redis时就会理解为何单线程的redis如此高效,可以承载数十万的并发,在学习Java多线程时能理解线程和操作系统的关系!
 
作者:findyi

不会坐立能学会爬行吗?

不会爬行能学走路吗?

不会走路能学跑步吗?

别说计算机领域,在任何领域,基础知识都是更快更好的学习更上层知识的必要条件。

尤其是程序员行业,基础知识更为重要。

程序员行业优秀程序员的产出是普通程序员的好多倍,甚至是10倍!这是因为编程不是一门「线性科学」,而是一门「非线性科学」。

「线性科学」,比如跑步的速度就是,世界冠军的速度也不可能是普通人的10倍。「非线性科学」是指很多种因素交汇在一起,极大增加了系统的复杂度。

程序设计和实现不是一种线性能力,像经验、编码能力、工程能力、知识、学习新知识的能力、对无用部分的识别等这些就不仅仅是线性优势,汇聚到一起会对编程产生倍增级效应。

优秀的程序员能达到百万年薪,而入门级或者初中级程序员可能只能拿10万年薪。输出的10倍差距带来的是收入上的10倍差距!很多时候,遇见复杂系统问题,派多少个初中级工程师都于事无补,而一个资深架构师就可以轻松搞定。

这其中,要具备整合各项能力的粘合剂就是计算机体系基础知识!

掌握这些基础知识之后就能做到举一反三快速学习新知识,获得新的能力。

这些知识包括:算法、数据结构、计算机组成原理、计算机网络等等。

而计算机的发展速度也决定了,我们必须不断学习新的技术和知识,但那些不变的,或者变的满的基础知识,才是我们能力的底色!