像Swing这种已经不太用的技术,大学还在教,到底要不要学?
一直以来,写日常问题、前沿技术和架构思考类的文章比较多,今天为什么突然来说说Swing这个陈年老技术呢?
因为在CSDN上看到了这样的一篇文章:
可以看到作者对于学Swing还是挺愤怒的,不过确实Swing现在很少用了。但我的观点还不是那么绝对,因为从个人成长来说,Swing的学习确实给到了不少收获。开始也没打算专门来写篇文章说说看法,然后上了一下掘金,居然就又看到了这篇文章(强大的推荐机制):
开始看标题格式还以为是同一篇,仔细看才知道原来是驳前面那篇的,对于后面那篇的不少观点,个人还是比较认同的。
同时也因为作者的观点,联想到经常有读者跟我聊遇到职业瓶颈的问题,与我给出的建议有很多不谋而合的认识,所以还是想写一篇文章来说说。
首先,我尊重每个人对技术学习的观点,这里不评论到底谁对谁错,我就结合自己的学习和成长路径,谈谈这个问题的看法吧。如果屏幕前的你是正在读书的学生或是遇到瓶颈的在职者,强烈推荐看完本文!
Swing对我的最大收获
Swing,这个算是Java领域里非常古老的一个技术点了,主要用来做客户端程序的界面。
记得上大学那会儿,Java课的大作业、暑期实践和后来研究生时期的实践项目都有所涉及。还清晰的记得,当时跟宿舍小伙伴,一起做的是模仿当时MSN的扫雷对战游戏实现的一个支持联网的客户端小游戏,界面部分就是用Swing来实现的。
在这个时期,我觉得最大的收获就是在学完了Java之后,通过Swing可以实现一个看得见的,让自己很有成就感的作品了,这样的学习反馈其实对学习者来说,是非常棒的,也是感受编程乐趣的重要开始。这个时候其实是会有一些骄傲的,因为在实现的过程中,碰到了很多问题,也不断的尝试着去解决了很多问题。对于编程的思维模式是一次很棒的锻炼。
在骄傲之后,随着后续课程的跟进,马上就会迎来一次打脸和进步的课,就是设计模式!这个时候就会发现之前的实现有多糟糕,记得开始最多碰到的问题就是各个Panel之间的操作联动,由于开始没有学过设计模式,不知道观察者模式等高级设计,一股脑的搞了很多静态变量,以实现各种联动,最后导致的就是程序耦合性非常高。
再之后,也是用Swing做了不过不少东西,比如:矢量图的画板,无服务的聊天室。进一步学到了状态模式的应用,网络相关的编程等。
也许有读者会说,那你不会直接学Spring Boot + Vue来搞不是很多也都能实现么?我觉得这两者之间就学习上来说最大的冲突并不是将来会不会用,而是Swing应用的技术是非常纯粹的,只要你学了Java,你就能马上上手。而对于Spring Boot这样已经封装上几层的框架,加上Vue这样的前端框架,已经建立在了太多基础内容之上,可能跟着教程去做,可以完成一些固定的东西,但要去深入理解这些技术的本质和更为重要的编程思维,帮助就没那么大了,而且从编程启蒙、进阶、深入的认知过程来说,初期我并不太建议把技术栈搞的太杂,反而容易觉得乱,不利于学习和培养兴趣。
大学时期我们学的Swing,虽然最后在工作中并没有给到我任何直接的帮助。但在学习的过程中,对于锻炼基础的编程思维作用是非常大的,尤其对于设计模式的应用,作为来学习Spring MVC也好,Vue也好,很多设计思想上都是共同的。通过一个足够单纯的技术内容,对思维模式的理解更容易上手,掌握之后再去类比着学习其他的就会非常快。
大学专业课程对我的最大收获
其实不光Swing,很多大学里的专业课程,在我们未来的职业生涯中往往都不会直接用到。
比如:
- 我们学了操作系统原理,就要去做操作系统吗?
- 我们学了计算机网络,就要去做网络设备吗?
- 我们学了数据库系统原理,就要去做数据库产品吗?
既然我们未来都没有去做这些基础设施的工作,那我们还学了干嘛?干脆别学了?书扔了算了?大学期间,我虽然顺利的完成了这些课程的学习,但以前我也有过这些极端的想法,我们将来都去做业务应用了,这些东西有个鬼用!
然而,在不断的实践和挑战中,我发现对于框架知识的掌握程度能帮到我们的范围非常有限,而真正让我能够突破上升瓶颈的恰恰是这些当初觉得不那么重要的课程所带来的认识。因为这些内容里所蕴含的设计思想和思维模式是未来指导我思考问题寻找解决方案的重要源泉!比如:很多就操作系统这一门课来说,其中设计到的各种并发场景解决方案、缓存加速设计等重要思想,都能对应到如今我们经常遇到的高并发、分布式场景下的各种问题。因为有这些基础认识的加持(方法论),你在思考难题和设计解决方案的时候,会更有想法,更容易找到好的办法!
在实际的工作过程中,对于开发童鞋在解决难题时候的一个特点。一些在大学里对这些基础课程掌握扎实的,往往只需要给他们直接讲一遍设计思路,基本上马上就能get到要点,因为他有了这些设计思想的基础,通过类比的方式去理解就会非常容易。而对于这些经典内容或者基础知识掌握欠缺的童鞋,往往你就得讲的更加细致一些,给他一步步介绍为什么要这样,他才能理解这么做的原因。
所以,如果你是专业科班的学生,那我强烈建议你这些基础课程一定要好好上,不要觉得将来用不到,就不用心学,甚至不学!如果你是培训班出生,一样强烈建议把我上面说的三个基础课程好好自己补一下,因为培训班基本不会教你这些,他们只管教会你一些企业在用的东西,让你能快速的上手成为一个CRUD开发者。
后记
我认为在一定程度上,对于基础知识的掌握决定了你在技术生涯这条路上的上限。
“知其然,更要知其所以然”。只有了解了本质原理,这样不论问题如何变,我们都能灵活的去解决它。就像我对很多想做架构的读者建议的,架构的本质一定要理解,一些基本原则要烂熟于胸,这些基础方法论是未来指导你实践最核心的内功心法。
切勿沉迷你过去的某一个成功经验来指导你未来的所有工作。架构工作最怕生搬硬套,学了微服务,到哪里都推微服务,学了中台,管他多大团队就干中台。最后,不但自己失败,还给团队和企业带来巨大的损失!这样的例子,这几年太多了,相信大家也都碰到过,之前我也写过一些不好的案例。究其原因,就是设计者对基础、对本质的理解不到位,一味求表面,赶新潮框架,追热点架构所导致的。
那么最后,你觉得大学里的这些过时的、未来不会用的基础知识重要吗?有必要花大力气学吗?留言说说你的看法吧!
一直寻思着交一些在校的学生朋友(了解一下新时代人群的思想潮流,或许可以一起挖掘些有趣的C端产品出来),但苦于长期接触的都是在职的小伙伴,平时写的内容可能学生看的也不多。也许这篇文章学生读者会多一些,顺手建个在校Java初学者群,大家对于Java方向的技术学习或者未来职业认知和规划上有什么疑问都可以在这里提,工作快10年的我可以给大家一些或许有用的建议,少走弯路从加群(点击加入冲冲冲)开始吧!
欢迎关注我的公众号:程序猿DD,分享外面看不到的干货与思考!
像Swing这种已经不太用的技术,大学还在教,到底要不要学?的更多相关文章
- Summarize Series For Burying My College
Summarize Series For Burying My College For Grade ...
- 2019 HL SC day10
10天都过去了 4天都在全程懵逼.. 怎么可以这么难啊 我服了 现在想起依稀只记得一些结论 什么 反演? 什么后缀自动机?什么组合数的应用?什么神仙东西 ,不过讲课人的确都是神仙.(实名羡慕. mzx ...
- Java客户端工具选择:HTML?Swing?XML?
整理下面的文章是因为个人觉得写的很好,关于java的客户端了解也并不是太多.看了下面的文章觉得很有必要贴出来,方便自己以后了解java客户端编程. Java软件设计师和管理人员经常会面临这样的难题:在 ...
- swing jTable排序问题(点击表头排序)
1.JDK6自带排序实现: tableName.setAutoCreateRowSorter(true); 2.其实界面设计中勾选一个属性就搞定了: .
- Java中AWT、Swing与SWT三大GUI技术的原理与效率差异
Java中AWT.Swing与SWT三大GUI技术的原理与效率差异 转 https://blog.csdn.net/weixin_37703598/article/details/81843810 ...
- 不是广告--如何学Java,我说点不太一样的学习方式
首先声明,这篇文章不是卖课程.介绍培训班的广告. 最近有不少读者通过微信问我:小白应该怎么学好 Java? 提问的人里有在校大学生.有刚参加工作的.有想转行做程序员的,还有一部分是最近找工作不顺的. ...
- JAVA学习Swing章节标签JLabel中图标的使用
package com.swing; import java.awt.Color; import java.awt.Component; import java.awt.Container; impo ...
- 我是怎样自学日语的(太TM励志了!)
学日语并不难,难是难在你有没有信心学好日语,有没有恒心学好日语.如果三天打鱼两天晒网的话,我劝你还是趁早死心,在语言世界里没有任何的捷径,有的只是艰辛和不懈的努力. 我自认为自己在学语言方面很有天赋, ...
- Java进阶篇(六)——Swing程序设计(上)
Swing是GUI(图形用户界面)开发工具包,内容有很多,这里会分块编写,但在进阶篇中只编写Swing中的基本要素,包括容器.组件和布局等,更深入的内容会在高级篇中出现.想深入学习的朋友们可查阅有关资 ...
随机推荐
- Winrar漏洞复现(CVE-2018-20250)
本文讲的是Winrar漏洞利用脚本的使用方法,至于Winrar漏洞的原理,请移步--> Winrar目录穿越漏洞复现 本次利用脚本出处--> https://github.com/back ...
- 1.简单认识PHP和环境搭建
1.关于PHP PHP(Hypertext Perprocessor,超文本预处理器),是一种服务器端.跨平台.HTML嵌入式的脚本语言,其独特的语法混合了C.Java.和Perl语言的特点,是一种被 ...
- Nacos使用 MySQL 8.0 提示Public Key Retrieval is not allowed
原因如下(参考官网给出的连接选项): 如果用户使用了 sha256_password 认证,密码在传输过程中必须使用 TLS 协议保护,但是如果 RSA 公钥不可用,可以使用服务器提供的公钥:可以在连 ...
- 偷梁换柱:使用mock.patch辅助python单元测试
最近在搞软工项目的后端测试,重新复习了一下python的mock.patch,并用它简化了对一些复杂逻辑的测试,在此记录 问题描述 本组的项目比较特殊,设计对教务网站的模拟登陆与信息爬取,同时不少接口 ...
- Nacos C++客户端开发文章
前段时间关注了下阿里巴巴发起的开源项目Nacos,这是一个注册.配置中心(Naming And Config),支持各种语言的客户端,但是唯独没有C++的,考虑到以前做过一段时间的C++程序员,不禁一 ...
- TypeScript 中 Optional Chaining 和 Nullish Coalescing
Optional Chaining 解决的问题是重复且无意义的判空,之所以说无意义,是对业务来说它不是必需的,但不判空,程序直接就挂了,比如: let x = foo.bar.baz(); 这里的 ...
- [刷题] PTA 02-线性结构4 Pop Sequence
模拟栈进出 方法一: 1 #include<stdio.h> 2 #define MAXSIZE 1000 3 4 typedef struct{ 5 int data[MAXSIZE]; ...
- 用JIRA管理你的项目——(一)JIRA环境搭建
JIRA,大家应该都已经不陌生了! 最初接触这个工具的时候,我还在一味地单纯依靠SVN管理代码,幻想着SVN可以有个邮件通知,至少在项目成员进行代码修改的时候,我可以第一时间通过邮件获得这个消息! 当 ...
- 查看报错原因 sshd -t
b for ssh.service failed because the control process exited with error code. See "systemctl sta ...
- CentOS Linux搭建独立SVN Server全套流程(修改svn仓库地址、服务启动等)
CentOS Linux搭建独立SVN Server全套流程(修改svn仓库地址.服务启动等) 原 一事能狂便少年 发布于 2016/12/27 11:16 字数 1113 阅读 1.3K 收藏 0 ...