程序员会被淘汰吗?

前言

  在软件行业快二十年了,对于程序员,外行人总有着数不完的讽刺和误解,但是我都懒得去解释,代码搬运工人也好,民工也罢,随他们去说吧。但是网上最近流传的程序员泡沫,导致很多我们的年轻的同行产生了疑惑,很多人会说你看,这个行业快饱和了吧,但是就目前为止,软件开发行业离饱和还差着十万八千里呢。

  1.大环境

  首先我们说说大环境,现在是互联网时代,你别跟我说什么资本寒冬,在2008年经济危机时,也没见哪个程序员饿死了。资本寒冬只是暂时的,从2010年到现在死的互联网公司多了去了,又会有无数的互联网公司站起来。人们已经离不开计算机了,做为必需品你觉得会破灭吗?就如同北上广的房子一样,08年说泡沫,现在这么多年过去了,谁还会相信这是泡沫呢?

  2.Java灭亡?

  经常看到有人说Java不行了,已经走下坡路了,现在是移动app的时代。一看就是外行人说的,就目前来看,全世界起码有几千万的软件是用Java写的,至少几十年内,Java不过被淘汰,现在写C,C++的人赚的也不少,他们可是比Java历史还悠久。另外机会总是给那些有准备的人的。在软件开发行业里面,你精通一门开发语言之后再去学其他的语言会很快上手,就好像会Java再去学Android一样,正所谓万变不离其宗,你把原理搞明白了,一切都OK。假设,某天有一种新的语言取代了Java的位置,那相信你会在很短的时间内掌握这门语言。

  这里可能有人会想,那不得总去学习?将来随着年龄的增长,肯定比不过年轻人啊。如果你有这样的想法,那你可能在3,5年之后失去核心竞争力,甚至是失业。现在任何一个行业都是需要去不断的学习,就那清洁工来说,你不会开清洁车,那就很有可能失业了

  3.互联网职位稀缺性

  一个优秀的程序员是十分难求,他不是去熬年头就能得到的,他需要付出很多,阅读很多书籍,看过很多技术文章,敲过很多高质量的代码,无数个Bug折磨过的,一步步才培养起来的,反观其他的互联网职业我就不便多说什么了,优秀的是有,但更多的是熬年头拼学历,他们所付出的努力远远没有优秀程序员付出的多,他们所创造的价值也未必有他们想象的大。现在有产品思维能言善辩的开发人员越来越多,他们可以去抢产品经理的饭碗,但产品经理很难抢程序员的饭碗,这也说明了优秀程序员的稀缺性。现在在招聘网上找一个3年以上经验的并且合格的开发都很难,就算找到了也很容易被别的公司抢走。现在市场上最多的是1到2年的开发,还有一些从别的行业转过来的开发,靠谱的很少。

  4.提升自己让别人去喷吧

  我们中国人的一大劣根性就是见不得人好,这是正常现象,那么怎么提高自己使得自己更强,让别人更眼红呢?

  看清自己

  早看清自己的人早确定方向,看到自己的优点避开缺点,如果你热爱开发你就继续干开发成为软件架构师。如果你能言善辩,组织能力强又敲的一手好代码,那就去做技术经理。如果你只是为了钱而不喜欢代码,那你得想办法尽快脱离这个行业。

  做有产品思维的程序员

  平常多看看其他的产品是怎样的,和自己的对比下,每做一个需求要考虑它是否是必须的,能为用户带来什么,而不是产品经理让做什么就做什么想都不想。

  业余多看书,多写代码,写技术博客,找到适合自己的学习方法

  想要脱颖而出你不付出努力又怎么能行,平常可以写一些自己想写的代码,把他写到博客上或者建立自己的git代码库,写博客可以提高自己的写作能力同时也检验你的技术的掌握程度,你会发现你为了写一篇技术文章会查很多资料看很多书,遇到很多的坑,这是你去看别人的技术文章所得不到的。技术首先要做到先精,再做到广,比如安卓开发多看看底层的源码,Java的基础,设计模式和算法。更重要的是在学习的过程中找到适合自己的学习方法,比如我就是多看书,然后敲一敲自己喜欢的代码,写博客总结归纳。

  提高自身形象,培养软实力

  程序员同时也需要跟别人打交道,至少要穿的得体干净,别自己舒服却让别人不舒服。多培养自己沟通的能力,多想想其他人是怎么想的,培养自己的同理心,管理好自己的情绪,学会什么时候该发火,什么时候该淡然一笑,虽然网上讨论什么牛逼的人应该脾气好,但我不这么认为,该霸气时就应该霸气。如果我们程序员能言善辩,精通业务,人际关系好,人脉广,并且还能敲的一手好代码,这绝对非常恐怖。

  去做去行动

  大道理很多人都懂,为何脱颖而出的就那么几个人,因为他们不只懂而且也去做了。

转载于:https://www.cnblogs.com/zhanghaiyang/p/7213195.html

<think>嗯,用户的问题很有意思,ta注意到了黑马程序员说Servlet项目过时,但同时又知道Spring底层其实还是基于Servlet的,这看起来有点矛盾。用户应该是个有经验的Java开发者,至少对Web开发有基本了解,不然不会注意到这种框架底层实现的问题。 从用户引用的内容来看,ta可能正在学习Java Web开发,遇到了使用传统Servlet/JDBC/JSP技术的课程项目,但发现业界已经转向Spring框架。ta的困惑点在于:既然Spring底层还是Servlet,为什么说Servlet项目过时了? 需要区分清楚“技术过时”和“设计模式过时”的区别。Servlet作为规范当然没有过时,但直接裸写Servlet的开发方式确实已经不符合现代工程实践了。这就像虽然所有程序最终都转化成机器码执行,但我们不会因此就说汇编语言没过时。 用户引用的资料[1]提到老师教的购物系统课设使用“特别老的”Servlet+JDBC方式,这个“老”主要体现在三个方面:一是缺乏分层设计,业务逻辑和数据库操作混在一起;二是没有利用现代框架的声明式编程;三是前端还在用JSP这种服务端渲染技术。这些都是工程实践层面的落后。 特别要注意引用[3]强调的Servlet规范本质——它只是定义了处理网络请求的基本生命周期方法(init/service/destroy)。Spring的DispatcherServlet虽然也叫Servlet,但它通过精妙的设计把这个基础能力扩展成了完整的MVC框架,比如用HandlerMapping解耦请求路由,用@Controller注解代替硬编码的service()方法。 用户可能没意识到的是,现代框架的价值不在于取代底层,而在于提供更高抽象。就像开车不需要了解内燃机原理,用Spring的开发者也无需关心Servlet线程模型。但高手还是需要懂底层,所以引用[2]详细说明的Servlet生命周期知识依然重要。 最后要提醒的是,在微服务场景下(引用[4]),Servlet的应用方式也进化了。比如Spring Boot把Servlet容器嵌入应用,而Servlet本身更多作为传输层实现,业务逻辑完全由框架接管。这种架构下确实不需要开发者直接操作Servlet API了。</think>### 为什么黑马程序员称Servlet项目“过时”,而Spring Web层仍基于Servlet? #### 1. **“过时”的本质是开发模式,而非技术本身** - **原始Servlet开发的痛点** 如引用[1]所述,传统Servlet项目常存在以下问题: - **重复性代码**:每个Servlet需手动实现`service()`方法处理请求(引用[3]),导致大量模板代码(如请求参数解析、响应格式设置)。 - **低效的数据库操作**:直接使用`JDBC`而未封装(如引用[1]),需手动管理连接池、事务,易出错且维护难。 - **视图耦合**:JSP前端与后端逻辑强耦合(如引用[1]),难以实现前后端分离。 ```java // 传统Servlet示例:需手动处理请求参数和响应 protected void doGet(HttpServletRequest req, HttpServletResponse resp) { String param = req.getParameter("id"); // 手动解析参数 // 业务逻辑与JDBC操作混杂... resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); // 手动设置响应 out.print("<html><body>Result</body></html>"); } ``` *这种开发模式效率低、扩展性差,被业界视为“过时”实践[^1]。* - **Spring的优化本质** Spring并未淘汰Servlet,而是通过**抽象层**解决上述问题: - `DispatcherServlet`作为唯一入口(引用[4]),统一处理请求分发。 - 注解(如`@GetMapping`)自动绑定参数,无需手动解析。 - 依赖注入解耦业务逻辑与数据库操作(如Spring Data JPA封装JDBC)。 #### 2. **Spring如何基于Servlet实现现代化开发** | **传统Servlet痛点** | **Spring的解决方案** | **技术实现** | |---------------------------|-----------------------------------|---------------------------------------| | 手动处理请求/响应 | 声明式参数绑定 | `@RequestParam`, `@RequestBody`注解 | | 业务逻辑与Servlet耦合 | 控制器分层(Controller层) | `@Controller`分离业务与HTTP处理[^4] | | JDBC操作繁琐 | 数据库抽象层(如JPA) | Spring Data JPA自动管理事务和连接 | | JSP前后端耦合 | 前后端分离(RESTful API +前端框架)| `@RestController`返回JSON数据[^4] | - **关键设计**:`DispatcherServlet`通过**策略接口**(如`HandlerMapping`、`ViewResolver`)扩展Servlet功能,开发者只需关注业务逻辑[^4]。 #### 3. **为何Servlet技术未过时,但项目模式已过时** - **Servlet仍是基石**: Spring Boot内嵌Tomcat/Jetty(Servlet容器),所有请求仍通过Servlet API处理(引用[2][3])。 - **过时的是开发范式**: 直接使用Servlet API开发大型项目,如同用汇编语言写应用——底层可行,但效率低下。现代开发需借助框架提升生产力。 #### 4. **现代架构中的Servlet定位** - **微服务场景**: 即使使用Spring Cloud,服务仍运行在Servlet容器中。但开发者通过`WebFlux`(非阻塞模型)进一步优化性能,Servlet作为**可选项**存在。 - **核心价值保留**: Servlet的生命周期(`init()`→`service()`→`destroy()`)仍是Web应用的基础(引用[2][3]),只是框架隐藏了细节。 ### 总结 黑马程序员批评的“过时Servlet项目”,特指**未使用现代工程实践**(分层架构、声明式编程)的传统开发模式。Spring通过封装Servlet API,解决了原始开发的痛点,但底层仍依赖Servlet规范。**技术栈的演进本质是抽象层次的提升,而非底层技术的替代**。掌握Servlet原理(如生命周期[^2][^3])仍是深入理解Spring的关键。 --- ### 相关问题 1. **Servlet的生命周期方法(如`init()`, `service()`)在Spring MVC中如何被调用?** 2. **Spring Boot如何实现对Servlet容器的自动配置?** 3. **除了Spring,还有哪些框架基于Servlet构建?它们的设计差异是什么?**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值