程序员如何提升学习,想转行成为一名程序员,如何高效率地学习编程
本文目录
一、程序员如何提高自己的编程水平
我是直接模仿书后面的个例,连续敲了好几遍,不明白就往前翻,或者百度,那些代码我简直都背下来了,然后就自己在原来代码的基础上改题目,逐渐往我需要的方向改,最后就直接把我要做的项目套进去了,总之就是在完全熟悉一组代码的基础上不断的延伸和衍生,用到什么就学什么其他不管,我这是个笨蛋办法,仅供参考
二、怎样学习Java如何逐步提升
我自己也是一名软件开发工程师,目前在杭州某电子商务公司进行中间件软件的开发。职业生涯中用过C++,C#,Java,Python,Go等语言,使用最多的也是Java语言。接下来我就谈谈我对Java开发的一些理解,谈一下我是怎么学习Java的吧,希望能对想学习Java的有些帮助,能够抛砖引玉就很开心了。
学习Java语言之前,先来认识一下Java语言吧,这样对我们学习会有好处。
Java是一门面向对象编程语言,即经常说的OOP(ObjectOrientedProgramming)。说起面向对象编程,大部分人在大学时应该都学过了C++语言,C++是很经典的面向对象语言。Java吸收了C++的OOP思想,同时也摒弃了C++中一些难以理解的元素,比如指针,多继承等。所以,Java语言同时具有了功能强大和简单易用的优点。
说起Java,就不得不说Java的一个很重要的特性了,那就是JVM(JavaVirtualMachine)。Java语言一经发布就收到了巨大的关注和欢迎,一门新的语言,能够迅速流行,肯定是在某些方面有着巨大的进步。尤其是在老前辈C,C++面前。
JVM是Java语言和同时代语言相比的一个重大突破。Java的口号是“WriteOnce,Runeverywhere”。用Java语言编写的应用,只需编写一次,可以在各个平台运行,包括Window,Linux,Mac等。简言之,Java应用可以跨平台。目前有很多的跨平台语言,但是在当时,这可谓是一个巨大的突破。使用Java语言可以极大的减少跨平台应用的开发成本,收广大开发者和企业的欢迎。
JVM是如何做到跨平台呢?软件是运行在操作系统之上的,而不同的操作系统的内核,系统API都是不同的。这也导致了不同操作系统的软件不能在其他系统上直接运行。比如Windows的exe文件在Mac上无法运行。Mac的app软件在Windows上也无法运行。
计算机系统软件体系结构采用一种层的结构,有人说过一句名言:
JVM也是采用了这种方法。即Java代码不是编译成可在各平台直接运行的二进制文件,而是编译为一种Class文件。Class文件运行在JVM中,JVM负责将Class文件翻译成各平台的二进制文件。通过引入JVM中间层,Java应用实现了跨平台功能。
在学习Java的时候,要记住Java的JVM特性。这样对后续的Java学习很有好处,比如后面我将要提到的动态代理,AOP等特性。
知道了Java的JVM原理之后,搭建Java开发环境就很简单了。不同的操作系统上需要安装平台相关的Java开发工具,即常说的JDK,或JRE。
安装文件安装:手动去Oracle官网下载安装文件,进行安装。
包管理工具安装:在Mac平台推荐使用Homebrew安装;Linux上使用apt-get或yum来安装。
一个好的开发工具,能为我们提升效率。
JavaIDE有很多,比较主流的有Eclipse和IntelliJIDEA。强烈推荐IntelliJIDEA,比Eclipse要强大很多,唯一的缺点是IntelliJIDEA完整功能是收费的。不过,作为日常开发,社区办已经足够强大,满足我们的需求了。如果想使用IntelliJIDEA商业版,可以购买,获得更好的体验。
我是从C#转Java的。C#是微软闭环的一个开发语言,刚开始接触Java时,还没开始写代码,就已经被Java各种概念弄的晕头转向。接下来我就理清一下那些容易混淆的概念。
Java1.6和Java6:关于Java的版本,经常看到Java1.6和Java6的说法。其实Java1.6和Java6是同样的版本,只是叫法不一样。目前在使用的版本一般都是Java6或以上了。
JavaSE,JavaEE,JavaME:是很早的时候提出来的一些概念,现在基本已废弃了,其实可以不用关注了。但我还是简单说明一下吧,JavaSE:JavaStandardEdition,可以认为是Java的核心。JavaEE:JavaEnterpriseEdittion:Java企业版,基于JavaSE,添加了一些企业开发的特性,用于开发企业级的大项目。JavaME:JavaMobileEdition:移动端开发版本。现在基本没有这样的区分了,在Oracle下载Java时,也只有JavaSE。JavaSE就是Java。
J2EE:J2EE就是JavaEE。这个概念也基本被废弃了。不用太关心。
Apache:Apache是一个开源软件基金会,也是一款Web服务器,同时还是一种武装直升机。。。。
这是我自己感触最深的一点,学习Java最重要的就是要学习Java的生态。这也是刚学习Java时,大部分人比较迷茫的。学习其他语言时,主要的精力可能在学习语言本身。而学习Java,将会需要花费大量的精力来学习Java生态中的各个组件,类库,框架,产品等。当然Java语言本身也是很重要的,需要花很多时间来学习。下面我就列一下Java常用的组件吧:
Tomcat:Web容器。用于运行Java的Web应用。
Maven:项目构建工具。大多数的项目都是使用maven构建的。
Gradle:角色同Maven,是Maven的下一代,升级版。但市场普及度不如Maven。
Spring:Java中最常用的框架。几乎所有的项目都会使用。我会在后面单独介绍。
Mysql:数据库。Java应用一般选择Mysql作为数据库。
Mybatis:数据库访问框架,简化数据库访问。
Netty:网络通信组件。简化网络编程。
log4j:LogforJava的缩写,一款日志框架。
junit:JavaUnit的缩写,Java的单元测试框架。
ApacheCommons:Apache提供的通用功能的类库。比如字符串处理,集合处理等。
上面列出的是现在使用比较多的框架,一些过时了的比如Structs,Hibernate就不列举了。框架太多了,一些过时的就不要去学习了,不要迷失在眼花缭乱的框架中。有时间可以慢慢了解。
Spring框架,是目前Java生态中最重要,也是使用最广的一个框架了。Spring框架由最初提供的一些核心功能,发展到今天,已经是一个非常完整的生态了。
为什么Spring如此重要,Spring提供了什么功能呢?
Spring最重要,最核心,最有价值的地方其实就两点:
IoC:InverseofControl,控制反转。
AOP:AspectOrentiedProgramming,面向切面编程。
我第一次接触IoC时,我是一脸蒙圈的,我问了隔壁搞了一年多Java的哥们,什么是IoC,他噼里啪啦和我说了一通,什么解耦,依赖注入,Bean。完了我说,这个IoC有什么关系。
IoC是什么?如果要好理解,先从IoC这三个字母说起,InverseofControl,控制反转。
那就要解释什么是控制反转了。我们来看下面这两段代码:
MysqlDB是Mysql数据库操作实现类
IDB是一个接口,可能有Mysql,Oracle,Mondo等实现。
这两段代码的唯一区别就是一个使用了MysqlDB,一个使用了IDB。他们都是UserRepository的依赖。UserRepository依赖他们来实现数据库操作。
使用MysqlDB的代码中,UserRepository自己控制它依赖的组件是什么,是很明确的MysqlDB。注意这里出现了控制的字眼哦。
使用IDB的代码中,UserRepository自己不能控制它依赖的组件是什么,可能是MysqlDB,可能是OracleDB,也可能是MondoDB。
本来UserRepository依赖谁是它自己控制的,这也是绝大部分其他语言和Java代码使用的方式。但是使用IDB的代码中,控制权不在UserRepository自己这里,而是有外部来控制的。这个外部可能是其他类,可能是其他框架,总之,不是UserRepository自己。这就是控制反转。
所以,控制反转说的主要是类之间的依赖关系。当一个类将它依赖的一个具体类,变成一个抽象的接口时,这是控制反转的表现形式。那控制反转有什么好处呢?
还是以上面的例子举例:UserRepository真实想要的功能其实是“保存数据”,而不是“保存数据到Mysql”。可能今天使用Mysql,但某天发现数据量大了,需要迁移到Oracle获取更大的吞吐量,也可能使用Nosql的Mongo实现更灵活的弱Schema存储。如果使用具体的MysqlDB,代码就和MysqlDB耦合了,一旦更换了数据库,所有依赖MysqlDB的地方的代码都需要改。而采用IDB的方式,代码是不用修改的。是解耦的。而且使用接口还有个好处是,我们可以基于抽象的接口生成动态代理,来实现更高级的功能。也就是动态给Java类添加功能。
关于IoC下面的图解释的比较清楚:
图一中四个齿轮是互相啮合在一起,在软件的角度上,就是类互相耦合。
图二中四个齿轮不是啮合在一起的,而是通过IoC容器连接在一起,是解耦的。
IoC也是通过引入了额外的IoC容器来解决类之间的耦合问题。
AOP:面向切面编程。我们可以看上面的图。向下的三个箭头是3个业务逻辑处理工程。他们处理了各自不同的逻辑。同时这3个业务处理都有打印日志和安全的问题。那么我们可以把这些通用的逻辑提取到一个公共的地方。就是AOP中的切面。日志和安全是两个切面,这两个切面是可以横切多个业务处理逻辑的。
使用AOP可以将一些公共的代码从各个业务类中剥离到切面中,提高系统的可维护性和扩展性。
有了上面这些基础之后,基本算是Java入门了,开发基本的功能是可以了。接下来是一些进阶的推荐:
RPC框架使用:Dubbo,SpringCloud,gRPC。
消息中间件的使用。可以看看RocketMQ源码来学习。
容器:Docker,k8s等。(这个不是Java特有的,但是未来的趋势,值得学习)
以上就是我关于学习Java的一些思路吧,更多是从我自己的真实经历出发,希望能给大家一些参考吧。能力有限,有错误之处,还请大家帮着指正。
三、如何提高学习编程的速度
1首先你要问自己,学编程是为了干什么?如果是想高薪,兴趣是开发应用类的软件,建议选择python、C#类的,如果是想玩玩底层硬件类的,那建议选择C++、C等,决定好,那你要做好准备吃苦的准备,高回报的前提是高付出。如果只是为了解决一些单位或公司日常的流程化的问题,在办公领域很火的钉钉,里面有大量的第三方应用可供选择,快的两三天就可以搭建一个应用,当然第三方也会收取一定的费用。如果是想解决某几个方面的应用问题,并不想成为专业的程序员,我不建议学习太专业的编程软件,因为学习专业的编程软件会消耗大量的精力,上手相对慢,而且如果不是在IT公司的话,很难找到相互交流的人。比如:如果你是单位的管理员,只想解决目前管理方面的问题,国产里面有大量的类似软件,如:foxtable、帆软。2想清楚上述问题后,才是决定如何学?从我个人的经验来说,选择好一门编程语言后,我喜欢先看一遍视频,有个大概印象,再看几遍书,最重要的是需要多练习。如果有条件,找一些高手指点甚至收费指导也在所不惜,因为节约的时间以后可以给你创造更多更大的价值,虽然探索和研究精神很可贵,但如果把这结精力金钱耗费在前人已经探索过无数遍的事情上,就显得没有必要了,进入社会了,要有时间就是金钱的意识。其次,要找到项目去练手,说实话,人都有惰性,在没有压力的情况下,很难保证学习的劲头,一旦你接到了限期需要完成的任务,则你学习的动力和迫切性比任何老师都要管用。
四、想转行成为一名程序员,如何高效率地学习编程
对于初学者,建议去培训机构培训。因为要搞开发,需要的知识面太多,比如开发语言、数据库,服务器、脚本等,如果没有一点基础,最好别自学。
相关阅读
-
常州各学校升学率排行?2024年常州初中升学率排名
2024年常州初中升学率排名常州公办初中排名20强常州飞龙中学历年升学率常州武进小学排名前十常州市兰陵中学升学率一、2024年常州初中升学率排名1.正衡中学,升学率大约是95%以上2.常州外国语,升学率大约在9
-
东莞的高考本科升学率?东莞公办高中录取率有多少
2024东莞高考重本率东莞公办高中录取率有多少东莞中学松山湖学校 2024年高考喜东莞济川中学2024高考升学率东莞一中升学率排名一、2024东莞高考重本率重本录取率平均达86%。!今年重本率更是高达91.87
-
北京航空航天大学2+2留学毕业生在就业方面有哪些优势?
近几年,留学生就业形势也非常严峻,因此,很多就业问题是准备申请北京航空航天大学2+2留学的学生家长非常关心的问题之一。留学小编介绍,北京航空航天大学2+2留学毕业生在就业方面具有以下几方面的优势:北京航空航天大学2+2留学毕业生在就业方面有
-
福建闽北卫生学校2025年学费多少?贵吗?
我们大部分时候是追求完美的结局,但每件事情都是有缺陷的,在工作上的无奈,在生活上的纠结,都是我们要接受的。一个人的精力是有限的,只有平衡好他们之间的关系,才能够让你获得更多的收获,所以你要扮演好自己的角色。那么,下面一起来了解下福建闽北卫生
-
基础教育指的是哪个阶段 基础教育指什么?包括高中教育吗?
有人也把高中阶段的教育归入基础教育范畴,但是目前中国还没有普及这种类型的教育,所以,在事实上高中阶段的教育还不是基础教育。随着中国发展水平的提高,预计到2020年,会基本普及高中阶段教育。确立关于基础教育的这样一种价值观,是促进基础教育由“
-
云南2025年哪个幼师学校好
我国目前的高等教育已经历史性地进入了国际公认的大众化的教育阶段,然而在高等教育大众化的同时,大学生就业难已经成为一个不争的事实,但值得注意的是:在大学生就业市场风云变幻的今天,高职学前教育专业的毕业生似乎成”抢手货”