开始

PHP
说来人生际遇无常,因为从小会几手 PS,直到大学,我的人生规划都是做一个平面设计师。大四时由于毕业和女朋友的压力,最终才入了编程的坑。幸好专业是计算机,应付考试的同时,学习专业课也为编程打下了一些基础。现在看来,以我的直男审美,第一批被阿里的鲁班这样的人工智能替代的人中就有我。

学习过程中的鸡汤不再泼洒,这里必须夸赞一下 PHP 非常平缓的学习曲线。语法简单能让人快速入手,解释性语言的特性也让人更易于理解,而且做出些什么产生的成就感会让人更愿意去学习。不过 PHP 是一个易懂难精的语言,前期使用它进行简单的开发很容易,中期需要学习 MySQL、Redis、Nginx 等知识,后期更是要了解架构、性能优化、C扩展等技术,所以 Web 靠 PHP 叩门真不是一句玩笑话。

每种编程语言都是完备的,PHP 在各个领域都能有所发挥。我用 PHP 做过支付,也用 PHP 做过后台多进程开发,还有用 PHP 做游戏服务端的,PHP 快速开发快速部署的特性完全契合敏捷开发的思想,节约了开发人员大量时间,对一些公司来说,快速开发意味着市场,意味着生存。

转变

当然各个语言都有自己擅长的领域,PHP 适合敏捷开发、Web 快速迭代,可是面对纯后端的高效率需求却有点捉襟见肘,效率真的是硬伤。出于对后端网络编程、并发编程的兴趣,我开始考虑换一种编译型语言。虽然说到了架构师、技术专家的层次,各个语言意义不大了,但其中的过程还是必须要考虑的。

由于 PHP 是纯粹的 C 系语言,我原准备继续学一门 C 系语言,跟 PHP 互补,我在 PHP 调用 Go 服务的正确方式 一文里也提过,我的选择是 Go。后来,我也写了一个小项目(Gotorch)来练手,也有 Go 为主题的几篇文章。Go 确实是一门非常适合 PHPer 转的语言,天生适合并发,高效率,语言也很简洁。

但是世事难料嘛,刚好公司有比较好的工作机会,面试通过后就这么来了,这边的主要开发语言是 Java,我也只好紧跟大家的步伐,上了 Java 的车。不过组内也有 Go 语言的项目,希望能有机会继续了解 Go。

过渡

从 PHP 换到 Java,确实有很多地方不适应,虽然大学时也学过 Java,可是已经忘得差不多了,况且写小 Demo 和工业级开发是完全不同的,说说几个转变的点:

强类型:从弱类型到强类型语言,意外地过渡得非常自然,可能因为之前写了些 Go 和 C,使用强类型语言并没什么不适应,反而因为强大的 IDE 的代码提示功能,代码更不容易出错,编码更顺畅了。
注解(反射):Java 里注解非常繁杂,类、方法、变量上都是,不光基础类库、Spring 框架里有很多,还可以自己定义新的注解。一开始见到满屏的 @ 符号,很多功能莫名其妙地实现了,有些头大,后来慢慢发现常用的也就那么几个,学习了用法,又了解了下反射,也就清晰了。
类库:Java 的类库非常全,我们需要的功能基本都有人提供,真是 琳琅满目、亮瞎狗眼。比如仅 Json 相关,在 maven 仓库里就可以搜到 2000 多个结果。

类库多了,一开始使用时更容易一脸懵,连接数据库进行一次查询有 N 多种类搭配方式,创建一个线程有好多种写法, 而且各个 Java 版本都会添加一些语法糖。用哪个方法都行,又没有一个权威指示的话,反而很难让人很难决定。

**部署:**项目的部署是让我最难适应的,小小的改动就需要把所有代码打成 jar/war 包,动辄几十M 再上传到远程服务器上测试,如果有一点错误,又需要重来,非常蛋疼。而且部署框架有 maven/gradle,使用什么包,每个包需要注意什么,也要学习适应。

**生态:**我认为 Java 很大的一个优势就是生态,当然适应成本也高。有各种框架和组件需要学习,如 web 框架 spring系列、数据库框架 mybatis、日志框架 log4j2,测试框架 spock,JVM语言 groovy 等等,每一种学习都需要花费很多时间。

幸运的是,部门对代码的要求很高,累积下来,让我有很多优秀的源码可以看,可以模仿;同事们也非常乐于助人,我有问题时甚至都追着解释;利益于 Java 生态,网上也有很多工具和经验能帮我简化繁杂的操作。所以入门虽然累,但也还算平稳。

经验

一个月多来,感觉自己勉强入门了,虽然还有很多东西不熟悉,甚至都没有接触过,但不再是之前的一头雾水,面对小问题也一脸茫然了。所以我觉得也有必要做一个小小的总结,不仅有利于自己进步,最好也能帮其他 Java 新人少走一些弯路。

IDE

首先要说 IDE,一个好用的 IDE 可以帮你提示代码、解决依赖、代码追踪、文件搜索、部署运行,毫不夸张的说,一个好的 IDE,能让你省一半的时间。

这里我推荐 jetBean 公司的 IDEA,首先 jetBean 针对各种编程语言,有一系列的 IDE,如果你之前使用过他们的产品 ,现在换成 IDEA 没有任何不适,当然,以后再使用别的产品也很轻松。

当然 jetBean 的产品都是收费的(虽然也有经过功能阉割的社区版),如果你认识在读的同学或教师,可以借用一下他的 .edu 邮箱申请学生或教师账号,详情可以看链接: 学生授权申请方式,如果资金无压力的话,还是支持一下正版,买一个比较省心。这里还有个IDEA使用教程:IntelliJ IDEA日常操作, 能帮你尽快熟悉 IDEA。

部署运行

接下来是部署运行的问题了,只要代码能快速运行得起来,我们就可以对代码进行调试,慢慢掌握其他的开发技术。

部署运行要解决类库依赖问题,首先我们要知道我们需要哪些依赖,这个我们可以在 mvnrepository.com 查询自己需要的类库,点进版本号可以直接复制 maven/gradle 等依赖工具需要的语句。

部署框架推荐 gradle,易学易配置,对新手很友好,自己花半小时使用它配置一个 demo 后就能用起来了。使用时,查到依赖后只需要在配置文件中添加一句 compile domain:lib:version 就能使用 IDEA 的 Auto-Import 功能自动把 jar 包导入进来了。

运行代码一般有以下方式:

自己写 psvm 方法,自己写小 demo 时可以使用;
使用 gradle/maven 打包部署在 tomcat 中运行,使用 spring boot 等框架时可以使用;
使用 spock 等测试框架来运行,比较灵活,像测试一样提供多个 case 运行程序;
推荐学习使用 spock,语法简洁,还可以省去不必要的打包时间,快速调试,可以在 IDE 里一键运行。

Java 语法

至于 Java 语法的学习,我认为是最不需要着急的,它需要代码经验的积累,不是几天就搞得定的。

学习一门语言最好的方式就是阅读源码了,可以是开源项目,也可以是业务代码。阅读源码时,可以总结一下在什么时候使用哪种数据结构,面对什么样的数据结构时使用哪种语法最有效率、代码可读性最高。

然后是多写,自己经常写一些小 demo,想到什么有意思的东西就动手去实践,遇到有疑问的地方也要自己写代码试运行来验证一下。

总结就是多读,多写,多问,多查。

小结

既然入了 Java 的坑,那么后续会多研究一下 Java 的技术,实现一些工具时也尽量使用 Java,欢迎大家继续关注。

新的一年,新的一轮折腾,这下算是彻底走出了舒适区了,新的语言、新的业务、新的部门,总之生命不息,折腾不止。顺便写下今年的计划吧:满足工作需求之外,10+ 本技术书籍,25+ 篇技术博客,1+ 个开源小项目。

技术行业要不断地学习,学习肯定不要孤军奋战,最好是能抱团取暖,相互成就一起成长,群众效应的效果是非常强大的,大家一起学习,一起打卡,会更有学习动力,也更能坚持下去,欢迎大家关注我专注分享SSM、Spring全家桶、 微服务、MySQL、MyCat、 集群、分布式、中间件、LinUX、网络、多线程,偶尔讲点运维Jenkins、NexuS、Docker、ELK。

从 PHP 到 Java我的青春没有浪费。相关推荐

  1. java技术总结_Java技术归纳总结

    原标题:Java技术归纳总结 这篇文章总结了使用java的一些心得体会,主要是和一些java基础知识点相关的,也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行业的准新手们,希望可以给大 ...

  2. java技术介绍_Java技术汇总

    这篇文章总结了多年来使用Java的一些心得体会,主要是和一些Java基础知识点相关的,也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行业的准新手们,希望可以给大家一些经验,能让大家更好 ...

  3. 【大数据面试题】(八)Spark 相关面试题

    1.spark中的RDD是什么,有哪些特性? 答:RDD(Resilient Distributed Dataset)叫做分布式数据集,是spark中最基本的数据抽象,它代表一个不可变,可分区,里面的 ...

  4. [转] 绝对实用!60款免费软件逐个点评下载

    .最佳网络浏览器 IE是一个不错的浏览器,但是它现在已经成为许多人恶意攻击的目标而存在着一个严重的安全危机.详细说,由于大部分的替代品提供"Tabbed Browsing"和技术不 ...

  5. spark相关面试题总结

    (根据博客总结并不断增加自己的内容) 1.spark中的RDD是什么,有哪些特性? 答:RDD(Resilient Distributed Dataset)叫做分布式数据集,是spark中最基本的数据 ...

  6. 史上最全的spark面试题——持续更新中

    1.spark中的RDD是什么,有哪些特性? 答:RDD(Resilient Distributed Dataset)叫做分布式数据集,是spark中最基本的数据抽象,它代表一个不可变,可分区,里面的 ...

  7. Java 之父:找Bug最浪费时间,现在不是开源的黄金时代!

    [CSDN 编者按]在编程工作或是学习中,你最头疼的是什么?你知道吗,Java之父也很讨厌Bug,最让他头疼的事情是数值分析.然而,学生时期的他即便用最差的语言完成作业,成绩照样是A.这样一位看似普通 ...

  8. Java 之父:找Bug最浪费时间,现在不是开源的黄金时代

    前言 90年代初,James Gosling和一群技术人员合作"绿色计划",创建了一个名为Oak的项目,旨在开发出能够运行于虚拟机的编程语言,开创计算机在家电产品上的嵌入式应用.后 ...

  9. Java 之父:找Bug最浪费时间,现在不是开源的黄金时代,程序员如何自我学习和成长

    1996年1月,Sun公司发布了Java的第一个开发工具包: 1997年2月,JDK 1.1面世: 1998年12月8日,第二代Java平台的企业版J2EE发布: 2000年5月,JDK1.3.JDK ...

  10. Java内存使用量测试 看看我们天天在用的JVM到底浪费了多少内存资源

    JVM内存使用量测试 测试各种不同的数据结构在JVM中的内存使用量 1 import it.unimi.dsi.fastutil.ints.IntOpenHashSet; 2 3 import jav ...

最新文章

  1. IntelliJ IDEA内存优化最佳实践(转)
  2. Attachment assignment block里选择的文件是如何传到application server
  3. c#中消息机制阻塞实例与结论
  4. java自动生成合同_Java 7和Java 8之间的细微自动关闭合同更改
  5. DataReceivedEventHandler 委托 接收调用执行进程返回数据
  6. 哈佛大学单细胞课程|笔记汇总 (八)
  7. r语言实现sem_统计基础:【18】使用Excel和R语言来实现抽样
  8. 使用批处理文件来操作注册表
  9. 机器学习----监督学习算法之决策树(Decision Tree)
  10. Python机器学习算法基础概述
  11. java ee图书管理系统_基于jsp的图书馆管理系统-JavaEE实现图书馆管理系统 - java项目源码...
  12. TextToSpeech文本转语音,从开始说话到结束的监听
  13. Linux查看电脑启动时间,几种常用的「查看Linux开机时间」的命令
  14. 三国演义python分析系统_Python之三国演义(上)
  15. redis进行对比时有对应的key却还是返回false
  16. 1183: 【入门】判断能否构成三角形
  17. 在unity中编写程序实现打开Word文件
  18. html文档中的元素分为两部分,云开HTML5开发基础与应用(20秋)形考作业2【标准答案】...
  19. Unity---------Particle Effect详情
  20. 魔兽怀旧服务器维护副本是否重置,魔兽世界怀旧服副本重置时间 魔兽世界怀旧服副本重置时间详解...

热门文章

  1. 头歌21根火柴游戏(常胜将军)
  2. 2023年全球网络安全行业市场现状及发展趋势分析
  3. 业务创新效率提升逾50%,以智慧显示带动全品类业务增长
  4. AES解密失败,fail api scope is not declared in the privacy agreement
  5. python鼠标移动事件是真的吗_JS mousemove事件:鼠标移动事件
  6. GIS 算法原理记录总结一:距离、方位角、沿线上的点
  7. MySQL基础笔记(基于Navicat操作)
  8. ERP财务顾问,你还要让我等多久
  9. 汽车汽配行业SRM供应商管理系统数字化管理供应商,改进采购管理流程
  10. 鱼骨时间轴案例(转自CSDN,原文链接附于文中)