Java开发一年半的一些闲话(一)

算算正式转岗为Java开发的时间是2016年的6月份,开始写这篇博客时还是2017年的10月中旬,但是等写完大约就到了11月了,那时候差不多就一年半吧。

你问我为什么又从前端转成了后端?我只好告诉你,人呐就都不知道,自己不可以预料……

咳咳,说正经事。很久没有写博客了,自己的后花园已经荒废了许久。自从转了后端开发,几乎没有什么时间和精力可以用来写Blog了……


入门

其实现在回过头去再看自己入门时候,总是会有一些控制不住的尴尬症的症状。毕竟一年半以前懵懵懂懂的我,不论是从技术的水平还是人生的经验啊不对社会阅历上来说,都还是实打实的小菜鸟一个,人生经验社会阅历且不论,单说技术水平,时隔半年回头看自己写的代码都觉得那是一坨[不可描述]更何况现在已经时隔一年半了呢。现在回头再看,一年半以前的博客中的很对js的demo,有很多错误的思路和处理,简直就是贻笑大方,而我当时竟然将它们写出来挂在了这里……咳,博客就是干这个用的。

回到入门的经历这个话题上。不得不说能够有这样的一个机会,还是非常幸运的,虽然我本身而言一直对编程相当有兴趣,认为编码有意思,但是若没有合适的机会去进一步的学习,仅凭我当时对编程的理解,和各方面基础知识的水平,也是不可能这么早就能够从事这份工作的。毕竟一个人的命运呐,当然要靠自我的奋斗,但是也要考虑历史的行程。机会总是留给有准备的人,而我在这方面的准备,大约就是凭着对编码的一份喜爱,日常注重了解相关的知识吧。

最初的目标其实是C#,一心想搞.NET开发,毕竟单从C#的语言特性上来说,还是更能够吸引我一点。但是既然有学习和从事Java开发工作的机会,当然也不能够放过。

入门书籍

入门的书籍是《Thinking in Java》。凭心而论,虽然这本书是我的Java启蒙书,这本书也是一本非常棒的编程书(不论你熟悉的主要语言是否Java),但是这并不是一本适合初学者入门的编程书——至少不适合绝大多数的初学者,尤其不适合零基础入门的初学者。Bruce Eckel在这本书中谈论Java时既涉及到C/C++(对C/C++不熟悉的我并不能确定到底是哪一个)的语法,又掺杂了很多设计模式相关的内容,更有一些乍看之下前后矛盾,但在学习和工作的不同的阶段又各有道理的内容,总体来说初学者读这本书就像听一位技术大神在侃侃而谈,很容易陷入“不明觉厉”的懵懂状态。

对于大部分零基础的初学者而言,达到能够面向过程编程,即“摞代码能够实现自己想要的效果”都是非常艰难的,我虽然不太能理解原因,但我确实从他人身上观察到这一现象(我的编程活动起源于大学时老师教的一点ASP(VB Script)的知识,后来在做毕业设计时自学了JavaScript,全程并没有经历过这个阶段,加之之前想要学习C#时自行购买阅读了《C#入门经典》,在那时一方面了解了强类型、静态类型语言中关于类的概念,另一方面《C#入门经典》这本书显然对零基础入门的编程学习者更为友好,一些基础知识都是当时在读这本书时学习到的。或许正是因此,《Thinking in Java》这本书并没有在一开始就令我感到强烈的迷惑),对于大部分这样的初学者,一上来就向他们灌输“一切都是对象”的思想,只会令他们大惑不解。

但是,但是来了。如果能够克服第一个阶段,建立起对编程的基本概念,对变量的定义和赋值、类和对象的关系和区别、值类型(在Java中等价于8种基本类型)和引用类型的区别有了基本概念之后,在后续的学习和工作中反复温习和咀嚼这本书,那将会是大有助益的;书中那些看似自相矛盾的内容,实际上都有各自的应用场景,在不断工作、不断学习的过程中,总会遇到不同的case,在这个过程中就解开了最初的迷惑:不同的实现、不同的技术,没有最好的,只有最合适的。

初学时的一些回忆

在发掘了我的leader的指引下先对Java语言有了基本印象之后(这个过程很快,因为对于刚接触不久初学者而言,Java和C#实在是非常相似的),初学上手的第一件事,……不是Hello World,是乘法表。这是我的第一个Java程序,由此开启了我的Java开发之路。

然后是打印各种形状,初学者实现这些,一般是为了熟悉循环/控制语句的使用。我则有一点跑偏,在控制台输出形状不能满足我(毕竟我是一个从前端转到后端的强迫症),在这个阶段我不知不觉地接触到了一些IO和AWT的使用:我将循环在控制台用不同字符生成图案的代码简单改造了一下,改为生成jpg图片。过去无论在写简单的ASP小网站,或者在页面上用JS实现各种效果,都不会接触到IO和图像的处理,这对当时的我来说是全新未知的领域(当然,这和后来用SWT去做项目的桌面程序没有什么关系,用SWT是因为我转向Java的时候C#的进度还没学到可以编写WinForm程序的程度),就是在这里,我第一次真正接触了“流”的概念。

然后就是一些基础的算法,冒泡排序,快速排序等。而在此之前,“算法”也是一个离我比较遥远的东西——只听名字我会认为这个东西只有在进行一些高深而复杂的数学运算时才会用到,事实上的确算法(或者说计算机本身)与数学脱不开关系,但很快我就发现这关系并非我想象中的那样。

反射。Java提供的运行时获取类型信息的API。这一部分当然非常重要,非常多的Java开发人员有三年、五年的从业经验,但对反射仍然是一知半解。而我作为一个一年半都不到的小菜鸟,当然更是如此。只不过我已经意识到了它的重要性。

静态代理-动态代理-(JDK实现)动态编译-动态生成并编译为Java类文件-基于此实现的动态代理。重中之重。回顾我的学习经历,这一阶段的学习是非常重要的一部分,在教会我这些的同时,我的leader也把一个问题抛到了我的面前:“为什么JDK提供了动态代理的接口,还要麻烦又费事地去用动态编译这样的方式实现动态代理呢?”当然,这是个设问句。但是凡遇看起来似乎不合理的技术方案,多想一句“为什么”,正是作为一个开发者想要不断进步,所必须要去做的一件事。如果它确实并不合理,那也并没有什么损失;如果它有其合理之处,那么在思考的过程中,将会受益颇多。

上手开发

我清楚地记得,我参与开发工作的第一个任务,是我司开发的政府采购招投标交易系统项目的“委托合同”部分的增删改查。我之所以记得这么清楚,是因为我在梳理任务的时候,将一个基本增删改查的任务,理解成了完整的功能开发,从而在那年端午节的前夕,从半夜一点钟开始加班到天亮最后也没有写完。

血淋林的教训啊。接任务的时候一定要拎清楚,考虑到给定的期限,较短的期限内安排的任务,一般不会太过夸张。如果不清楚自己负责的内容具体有多少,一定要及时沟通、沟通、沟通。后期我仍然因为沟通不及时栽了很多跟头踩了很多坑,不过这是后话了。

而这,也是我一年半的开发工作中,唯一的纯粹的CRUD的任务。从这以后,我所有的任务,都不再是纯粹的增删改查,而是有各种各样不同的、相对复杂的业务逻辑的任务。很多人从培训机构毕业,进入软件公司,大部分时候在写增删改查,甚至是增删改查的一部分,直到最后转行;我认同那些工作是极其枯燥乏味的,换成是我,也会觉得无聊、无趣,机械重复,感觉不到工作的乐趣和意义。作为一个新手开发者(将将经过了一两个月的学习),我深知这些机会的得来不易。

就这样,我把一个基础CRUD任务当成了一个完整功能开发的任务,半夜加班到天明也没能在给定的时间内完全写完(按照我对任务的错误估计,这几乎是必然的结果,即使我在公司算是手速飞快的典型代表,也根本完不成),就这样开始了自己的JAVA开发职业生涯。

–TBC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值