`
cyj1988jyc
  • 浏览: 20002 次
  • 性别: Icon_minigender_1
  • 来自: 荆州
最近访客 更多访客>>
社区版块
存档分类
最新评论

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

 
阅读更多
都说程序员基础掌握得好学新东西就快,那比如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倍差距!很多时候,遇见复杂系统问题,派多少个初中级工程师都于事无补,而一个资深架构师就可以轻松搞定。

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

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

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

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

分享到:
评论

相关推荐

    程序员必须掌握的600个单词

    程序员必须掌握的600个单词程序员必须掌握的600个单词程序员必须掌握的600个单词程序员必须掌握的600个单词程序员必须掌握的600个单词程序员必须掌握的600个单词

    一个Java程序员应该掌握的10项技能

    ### 一个Java程序员应该掌握的10项技能详解 #### 1. 语法 作为Java程序员,必须熟悉Java语言的基本语法。在实际编程过程中,能够根据集成开发环境(IDE)提供的错误提示信息迅速识别出语法错误,并且知道如何进行...

    程序员用到的一些基础知识

    在IT行业中,程序员是软件开发的核心力量,他们需要掌握一系列基础知识来确保代码的质量、效率以及项目的成功。"程序员用到的一些基础知识"这个标题暗示了这是一个关于程序员通用技能和知识的集合,可能是为了帮助...

    程序员如何掌握计算机英语(PDF格式)

    干程序员是一项很辛苦的工作要成为一个高水平的程序员尤为艰难这是因为计算机软件技术更新的速度越来越快而这些技术大多来源于英语国家我们在引进这些技术时往往受到语言障碍的制约严重影响到对新技术的理解和消化...

    程序员应该掌握和了解的

    一个程序员应该具备的基础知识和概念 1、计算机是有什么组成的,CPU是什么东西,其工作原理是什么。(对于这些以及下面将要提到的概念我不会告诉你什么答案,你可以看相应的教材,关于教材我会在下一部分详述,记住...

    程序员,你能真正掌握多少编程技术?共2页.pdf.zip

    随着科技的快速发展,编程语言和技术栈的更新迭代速度日益加快,程序员需要不断学习和掌握新的知识,以适应这个瞬息万变的领域。"程序员,你能真正掌握多少编程技术"这一主题直指程序员的能力与技能水平,下面我们将...

    程序员如何真正的成长

    作为一个程序员,真正的成长不仅仅是掌握更多的编程语言或框架,而是涵盖了技术、思维、沟通、学习能力等多方面的提升。本文将围绕这些关键点展开,探讨程序员如何实现自我进化,成为更优秀的开发者。 首先,扎实的...

    程序员的数据1逻辑基础.pdf

    《程序员的数据逻辑基础》是专为程序员设计的一本数学教材,它将数学基础知识与编程实践紧密结合,旨在帮助初级程序员巩固和提升逻辑思维能力。在编程领域,数学的重要性不言而喻,良好的数学功底能够使程序员更好地...

    JAVA程序员必读:基础篇.chm

    我整理生成的CHM格式文件 JAVA程序员必读:基础篇.chm 因为最近在搞这个所以整理了一些资料和大家分享 并非本人原创,郑重感谢原作者!

    程序员必须掌握的600个英语单词

    程序员必须掌握的英语单词 在编程和计算机领域中,有很多专业术语和英文单词。下面我们将对这些单词进行解释和说明,以便程序员更好地掌握和理解。 1. 应用程式(application):指的是计算机程序或软件,用于执行...

    j2ee程序员应该掌握.doc

    j2ee程序员应该掌握.doc

    程序员如何掌握IT英语

    程序员如何掌握IT英语,学习程序设计的你,可曾想过自己的英语水平非常重要?可曾想过,要从我们这一代开始,将自己我们国家的IT发展到一个先进水平!

    程序员教程(pdf)

    《程序员教程》是一本针对初学者和有一定经验的程序员精心编写的教材,旨在全面介绍编程基础知识和实践技能。这本书以PDF格式提供,便于电子阅读和随时查阅。它涵盖了程序员需要掌握的各种关键知识点,无论你是刚踏...

    程序员谈如何掌握计算机专业英语程序员谈如何掌握计算机专业英语

    程序员谈如何掌握计算机专业英语程序员谈如何掌握计算机专业英语程序员谈如何掌握计算机专业英语程序员谈如何掌握计算机专业英语程序员谈如何掌握计算机专业英语程序员谈如何掌握计算机专业英语程序员谈如何掌握...

    java程序员需要掌握的系统底层

    java程序员需要掌握的系统底层

    程序员考试 程序员考试

    根据给定的文件信息,我们可以总结出一系列与“程序员考试”相关的知识点,这些知识点涵盖了从...对于准备参加程序员考试的人来说,全面掌握这些知识将大大提高通过考试的可能性,并为未来的职业发展打下坚实的基础。

    未来五年程序员需要掌握的10项技能

    "未来五年程序员需要掌握的10项技能" 在未来五年内,程序员需要掌握多种技能以适应不断变化的技术潮流和市场...程序员需要不断学习和掌握新的技能,以适应不断变化的技术潮流和市场需求,提高自己的竞争力和就业价值。

Global site tag (gtag.js) - Google Analytics