当前位置: 首页 > news >正文

当一个java程序员到底有多难

当你下定决心要当一名程序员,特别是java程序员,你可能并不知道你将要面对的是什么。也许仅仅是因为兴趣,或许是歪打正着的入了这一行,又或者以为这个一个高收入的行业(毫无疑问,你悲催了)。

那,一个标准的java程序员到底要了解什么?擅长什么?精通什么?

首当其冲,你需要学习java语言(废话),于是你开始买个各种书籍,例如,Thinking in JavaCore Javajava 数据结构设计模式(java版);上各种培训班,各种网站以及论坛。当然,你会发现你根本不知道书里所说的什么面向对象编程,工厂模式这些狗屁不通的东西,你也不知道论坛上各种大神在争论不休的HashMap的实现方法,SSH的框架原理。但,没关系。无论如何你已经入行了,让我们看看,接下来你需要做什么……

半年之后,你终于对java有一些基本了解了,也写了一些自己的类,或者接口,虽然,它们只实现的了一个功能:Hello World. 你也了解了javac命令,classpath的加载规则,于是你不甘于只是在后台写写Hello World这样的代码,你希望能全方位的使自己的才华得到体现,于是你的噩梦开始了……

你听人说,现在流行的是B/S三层架构,无论是大神还是无名小卒,都在张开双臂,拥抱B/S三层架构,那,就它了,于是你开始了解三层架构,当你在度娘上搜索这个词汇的时候,你发现了SSH这个词出现的频率很高,于是,你要以SSH作为突破口,开始研究三层架构,不出意外的话,3个月后,你就分别学习了Struts,SrpingHibernate

你又发现了Struts是负责前端的展现,进而你又发现了JSP,JSF,Servlet,Spring MVC这些东西都是类似的功能,于是你又分别学习上述的几个名词,在分别使用了上述的前端以后,你发现,它们虽然设计理念很好,有的还是MVC的设计理念,但它们有一个共同的特点,丑。所以,为了让你的前端界面能漂亮一点,你又开始了解前端UI,于是你又开始了JQuery,Ext,Dojo的学习,你把它们和你的Struts或者Spring MVC集成起来,你长吁一口,终于看起来像那么回事了,为了尽快实现功能,你迫不亟待的要开始研究数据持久化了……

Hibernate是你的切入点,随即你又发现了它的替代品,包括iBatisJPA,它们功能重合而又各有优缺,有官方的,有民间的,但它们的作用对你来讲只有一个就是GRUD(增删改查),你对它们的了解也就到此为止了……

于是,你又继续往下一层走,你发现了你还需要掌握数据库知识,因为它们才是真正的数据载体,于是,你开始学习,Oracle,Sql Server,My Sql甚至是DB2,你还学会了SQL的基本语法,可以自己写查询脚本,甚至是存储过程;你发现它们和你当年学的的Access是何等的相似,但体积却打了无数倍,因为增加了太多你这辈子都不会用到的功能,当你庆幸自己终于是关系型数据库一知半解的时候,突然发现自己处在了数据库革命前夜,随着facebook,twitter这个社交网站的风靡,越来越多的程序员开始使用NO-SQLNEW-SQL,它们像海啸一样扑面而来,你还是由于是否要加入它们的时候,发现自己早已经被它们包围,于是,你不得不再一次的学习,Redis,MongoDB,Cassandra,Neo4j ……这些虽然都是非关系型数据库,但却是完全不同的设计理念和操作方法,这也就意味着,你要分别学习它们,What's the f@#k.但,终于,在历经了另外3个月的磨难后,你终于了解它们了……

现在,你终于进入了SSH框架最核心的那个S了,Spring。多么喜人的名字,充满了生机。你了解到当年它的出现就是为了推翻EJB专政,所以,为了更好的了解它的对手,你一边学习Spring,一边学习EJB,你发现了它们是多么的类似,如今的Spring越来越臃肿,而当年的EJB如今却焕发着青春,于是,你迷茫了,在你学完了Spring的核心框架Spring-Core,安全框架Spring-Security,Web框架Spring-MVCWebFlow,快速开发框架Spring-Roo。

当你终于从前端到数据库走了一遍,开始写代码的时候,Spring告诉你,你一定要面向接口编程,这样我就可以更好的使用我的依赖注入了,于是你有意识的按照规范约定来写代码,定义配置文件,声明和使用注解。当然,这还不后,你还需要管理好你的代码,于是你又开始学习版本管理工具,VSS,CVS,以及SVN,最后让你发现SVN是最适合你的工具,你把自己的代码和文档转入SVN之后,你突然发现,当下最流行的是GitHub,你又一次落在了潮流之后;随后,为了更高效的管理和编译你的代码,你开始学习Ant,这个Apache基金会的开源项目,当你发现它给你带来的益处并决定好好研究一番的时候,Apache已经开始全力推Maven了,甚至还建立了专门的jar的资料库,来方便他的用户维护自己的jar文件,在巨大的诱惑之下,你转入了Maven阵营,在学完了Maven之后,你继续发掘其他的自动化工具,于是你找到了JUnit,它大大简化了你的测试流程,在你写好了合理的测试用例之后,而且Maven在编译打包你的应用的时候,甚至可以自动找你的测试类,并自动测试,简直就是火力全开,你跟高兴……

终于,在Maven的帮助下,你打好了自己第一个应用的war包,现在将它部署到应用服务器上的时候了,这时候,选择题又来了,到底是选用哪个应用服务器,有着选择综合症的你,果断的把WebLogic,Tomcat,GlassFish,WebSphere……都学习了一遍,当你发现Tomcat这个小巧玲珑的容器更适合你的时候,你终于开始了自己的发布流程,在输入了http://localhost:8080/yourapp之后,你终于看到了自己的应用…… 没有出来,因为,报错了,跟随着Tomcat的日志,你发现了问题所在,是JNDI的配置问题,你通过查资料,学会了JNDI的配置,纠正了错误。这件事让你也意识到了日志是个有用的东西,于是你开始学习Log4j,并把自己的应用中都加入了日志。

当你看着自己的应用终于发布成功,你意识到,你可以接活了……

随后你就发现,你的客户远比你的电脑要复杂的多

它们要求,与其他系统集成,于是你开始学习Web Service;

它们要求,系统的冗余性,于是你开始学习Tomcat集群和Apache负载均衡;

它们要求,调用本地应用,于是你开始学习JNI和JNA;

它们要求,文档打印,于是你开始学习iText和POI;

它们要求,Linux做服务器,于是你研究Linux下的配置和部署;

它们要求,任务派发,于是你学习工作流;

……

于是,你才发现,当一个程序员不难,难的是一个有勇气面对客户需求的程序员。


原文发布时间为:2018-10-8

本文来自云栖社区合作伙伴“Java程序员联盟”,了解相关信息可以关注“Java程序员联盟”。

相关文章:

  • [纯干货] MySQL索引背后的数据结构及算法原理
  • traffic and backfill
  • 简单的转义字符
  • Eclipse自动补全设置
  • ${factoryList }后面有空格不影响
  • 再看BP神经网络
  • JavaScript深浅拷贝
  • 节约内存:Instagram的Redis实践
  • 智云大咖秀:怎样的稳定器才是摄影师的“灵魂辅助”?
  • Bootstrap vs Foundation如何选择靠谱前端框架
  • 双管齐下,VMware的容器新战略
  • 退役前的记录(2018.10.14-NOIP2018)
  • CENTOS 6.6 nfs 服务器搭建
  • JQuery Mobile难点备忘
  • C++语法小技巧
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 03Go 类型总结
  • Angular6错误 Service: No provider for Renderer2
  • Codepen 每日精选(2018-3-25)
  • Docker下部署自己的LNMP工作环境
  • IDEA常用插件整理
  • Javascript弹出层-初探
  • MQ框架的比较
  • Python学习之路16-使用API
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • TypeScript迭代器
  • vue学习系列(二)vue-cli
  • windows下mongoDB的环境配置
  • 规范化安全开发 KOA 手脚架
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 解决iview多表头动态更改列元素发生的错误
  • 前端之React实战:创建跨平台的项目架构
  • 数据科学 第 3 章 11 字符串处理
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 白色的风信子
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​2021半年盘点,不想你错过的重磅新书
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • !$boo在php中什么意思,php前戏
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (南京观海微电子)——COF介绍
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (五)关系数据库标准语言SQL
  • .NET Core 成都线下面基会拉开序幕
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .net6使用Sejil可视化日志
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)