
原标题:一个五年.net程序员转Java学习之路
大学毕业后笔者进入一家外企,做企业CRM体系开发,那时候开发功率最高的高档程序言语,毫无疑问是C#。恰逢公司也在扩张,招聘了不少.net程序员,笔者作为应届生,也乐滋滋的加入到.net程序员队伍中。
C#.net十分简单上手,之前在大学里,做过winform和webform开发,也曾经在教师那里承受过小项目,赚点外快。所以在工作岗位上轻车熟路,很简单就上手了企业开发结构,仅一年多,笔者就成为公司的开(jia)发(ban)骨(feng)干(xian)。
C#.net的网评比Java要差,笔者曾经在知乎上看到一个国外华裔程序员的文章,内容主要是国外的清闲不加班的日子,文末一句:“忘了说 我是做.net的”引发了谈论的高潮。知乎程序员中,写Java、python、go、Javascript简直成了政治正确,作为.net程序员的笔者很少在相关谈论中活泼,但对java的形象现已有了改动。那时笔者地点的外企仍在大规划运用C#.net,笔者也就回绝去承受网上的喧哗的声响,专注写好代码,学习规划形式和前端技能等等。
恰逢互联网职业发展势头正劲,笔者天然顺势而为,加入了一家规划稍大的互联网公司,当然仍是写C#。因为之前在外企勤勤恳恳,什么活都乐意揽过来干,堆集到不少很有用的研制常识和阅历,所以在换岗过程中顺风顺水,根本人家问什么,我都能答出来,所以相对轻松地加入了新公司,敞开了互联网研制之路。正是亲眼鉴证了互联网研制形式,才让笔者确认了转型Java的决议。
新公司的结构很老旧,那时还在用.net framework2.0,事务代码十分杂乱巨大,某个十年事务的项目里的一个办法,竟然有一千多行,单是阅览代码,就让笔者心累,更心累的是,这一千行代码的办法名,竟然被叫作“外观形式”(facade)……很难幻想公司最中心的事务,跑在这么臃肿烦复的代码里。功能和功率都被垂青的互联网研制形式,总算开端和C#.net发生了对立:.net framework和iis不开源。体系在运转过程中遇到了如下几个问题:
1、接口服务项目的拜访功率遇到瓶颈,根本只能上负载均衡加机器。
2、某些大项目要数十台机器去承载日常拜访,运维难度加大(后续上了持续集成和滑润发布,运维方便了许多)。
3、较少量状况,体系会呈现一些疑难杂症,当发生问题的代码在闭源东西包里,调试人员简直束手无策。(反编译的代码真丑陋囧……)
4、持续不断的添加机器,本钱添加,这可不仅仅机器本钱,人家不开源,收费也不廉价……
5、可定制化较差。某些极点场景下,咱们我们都期望程序能够更大程度的耗费服务器硬件资源,而服务器程序都是他人的,人家为了安全都设定好“最佳阈值”了,很难更进一步压榨服务器资源。
6、缺少开源社区支撑、大数据相关研制乏力……
7、国内部分互联网公司供给的敞开渠道东西,竟然不供给C#的SDK……(依据http恳求自己写SDK)
诸如此类,不乏其人。
转Java吧。
技能转型的阵痛在所难免。公司内的接口研制和后台办理体系研制是分隔由不同人员担任,能够一起开发接口和后台体系的人并不多。笔者技能体系相对完善,在团队中取得不少尊重。也曾亲身带团队做研制,写完接口又带兄弟研讨ckeditor源码并做定制化修正,忙的不亦乐乎。但是转Java成了笔者其时的心病:本职工作做得很好,团队不会答应轻率改用Java技能栈这种冒险行为。笔者现已暗里学习了良久,却不能直接上项目实践练习,十分惋惜。
精诚所至金石为开,笔者总算等来了一个时机:成为公司新项目的主程序员,担任整个项目的后端架构、规划和研制。新项目人员不多,但都是各类技能中的优秀人才,包括ios、Android和H5研制人员,笔者为他们供给接口,并开发后台办理体系供给给产品和运营搭档。
独立担任规划和研制,工作量虽大,自由度却大了不少,所以笔者决议用Java来完结整个开发使命。项目leader对笔者的技能功底很是信赖,不过仍期望团队用C#.net寻求稳健,但看在笔者执着坚持,也就赞同了。为了下降技能转型对新项目带来的危险和进展影响,笔者仍是做了必定退让:用Java研制接口服务,后台办理体系仍用C#.net。
接口研制期间笔者着实吃了不少苦头,项目结构建立问题层出不穷,spring的运用不纯熟,导致经常在结构层面报错。新项目的座位与公司Java开发团队座位不在同一楼层,笔者简直每天都要爬几回楼梯去Java研制团队取经。好几回遇到问题解决不了,都想扔掉然后用回C#.net。项目leader屡次看到此情形曾屡次施压,笔者跟项目经理坦(zhuang)言(bi):“假如Java搞不定,我会在两天内用C#.net把活干完,不拖项目进展。”靠着这份坚持和干劲,还有屡次对Java研制团队的叨扰,项目结构总算建立完结,笔者也借着屡次的取经,弄清楚结构的原理,完结了对spring的实践。具有依靠倒置、操控回转的编程思想和规划形式的运用阅历,了解Java结构的规划思路是很简单的,在结构建立完毕后,事务代码的输出简直是行云流水,在项目完结之际,笔者都忘掉自己曾是个.net程序员。项目终究顺畅上线,而且仅用两台机器就抗住了较高的并发,笔者对Java有了更多的信赖和喜欢。
有.net的编程根底,学习Java会相对简单,但有必要逃离几个陷进:
1、对根底常识务必要注重:C#是一门十分超卓的言语,它供给的语法糖让杂乱的事务表达起来也十分高雅,调配机灵的lambda表达式和linq,数据结构的根本原理在大部分场景下都被弱化,而数据结构和算法正是编程的精华。
2、对原理的巴望和求知欲:用C#编程,无法检查大部分程序集内的办法,只能自己上论坛找或反编译,求知欲可能会逐步弱化。而写Java后,经常会自己ctrl+鼠标进入办法检查源码。这一点Java真是十分性感。
3、懒人思想不可取:C#.net关于链表数组等数据结构的排序和查询都做了高度封装,几个表达式就能得到想要的成果,而Java的表达式则没这么机灵。在Java国际里,自己弄理解原理,自己写是更高效、更对得起自己的计划。
运用Java完结商用项目的开发,仅仅技能转型的开端,只能算踏进门,算不得转型成功。笔者仍花了许多时刻学习Java的数据结构;学习Apache的公共东西包,偶然点进去看看完结源码;持续学习规划形式及其使用。在一些评价用C#研制更简单的项目,笔者依然坚持用Java去完结。为了能有更多Java项目练手,笔者请求进入了搜索引擎研制部分,通过了Java团队架构师的技能面试,加入了巴望已久的团队,终究能专职写Java做搜索引擎服务。当然,脱离了最初的部分,也就扔掉了在老团队中的位置和荣誉,但笔者觉得很值。
在多年开发阅历中,笔者的确感悟 言语是互通的,万变不离其宗。学习新言语只需下决心并支付尽力,根本都能办到。但是后续的应战则是更大规划的项目的规划思路,规划形式的运用,架构规划战略,代码堆叠计划,乃至是不同功能模块的技能选型。这些都需求仰仗厚重的阅历、厚实的功底和铢积寸累的技能实力。
未来大数据和机器学习的热潮现已如火如荼的打开,手握Java这一门利器,运用storm、elasticsearch、Hadoop、lucene等绝技的Java程序员,必定能更好的习惯潮流。
最终,开发这么多年我也总结了一套学习Java的材料,假如你在技能上面想提高自己的话,能够重视我,私信发送收取材料或许在谈论区留下自己的联系方式,有时刻记住帮我点下转发让跟多的人看到哦。
责任编辑:

小儿支气管肺炎睡不好介绍支气管肺炎的治疗方法
婴儿眼睛血管瘤的原因是什么婴儿眼睛血管瘤有哪些症状
新生儿晒黄疸晒出汗好吗新生儿黄疸高的表现
六个月血红蛋白含量多少如何增加新生儿的血红蛋白
宝宝睡觉老是鼻塞怎么办宝宝睡觉老是鼻塞的治疗
妈妈脾气暴躁打骂孩子如何改善自己的暴脾气
睡觉少的宝宝聪明吗让我们一起了解睡眠对宝宝的重要性
新生儿黄疸值250正常吗新生儿黄疸指数标准