一直以来,写日常问题、前沿技术和架构思考类的文章比较多,今天为什么突然来说说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这种已经不太用的技术,大学还在教,到底要不要学?的更多相关文章

  1. Summarize Series For Burying My College

    Summarize  Series  For  Burying  My  College                                             For  Grade ...

  2. 2019 HL SC day10

    10天都过去了 4天都在全程懵逼.. 怎么可以这么难啊 我服了 现在想起依稀只记得一些结论 什么 反演? 什么后缀自动机?什么组合数的应用?什么神仙东西 ,不过讲课人的确都是神仙.(实名羡慕. mzx ...

  3. Java客户端工具选择:HTML?Swing?XML?

    整理下面的文章是因为个人觉得写的很好,关于java的客户端了解也并不是太多.看了下面的文章觉得很有必要贴出来,方便自己以后了解java客户端编程. Java软件设计师和管理人员经常会面临这样的难题:在 ...

  4. swing jTable排序问题(点击表头排序)

    1.JDK6自带排序实现: tableName.setAutoCreateRowSorter(true); 2.其实界面设计中勾选一个属性就搞定了: .

  5. Java中AWT、Swing与SWT三大GUI技术的原理与效率差异

    Java中AWT.Swing与SWT三大GUI技术的原理与效率差异 转 https://blog.csdn.net/weixin_37703598/article/details/81843810   ...

  6. 不是广告--如何学Java,我说点不太一样的学习方式

    首先声明,这篇文章不是卖课程.介绍培训班的广告. 最近有不少读者通过微信问我:小白应该怎么学好 Java? 提问的人里有在校大学生.有刚参加工作的.有想转行做程序员的,还有一部分是最近找工作不顺的. ...

  7. JAVA学习Swing章节标签JLabel中图标的使用

    package com.swing; import java.awt.Color; import java.awt.Component; import java.awt.Container; impo ...

  8. 我是怎样自学日语的(太TM励志了!)

    学日语并不难,难是难在你有没有信心学好日语,有没有恒心学好日语.如果三天打鱼两天晒网的话,我劝你还是趁早死心,在语言世界里没有任何的捷径,有的只是艰辛和不懈的努力. 我自认为自己在学语言方面很有天赋, ...

  9. Java进阶篇(六)——Swing程序设计(上)

    Swing是GUI(图形用户界面)开发工具包,内容有很多,这里会分块编写,但在进阶篇中只编写Swing中的基本要素,包括容器.组件和布局等,更深入的内容会在高级篇中出现.想深入学习的朋友们可查阅有关资 ...

  10. 《FilthyRichClients》读书笔记(一)-SwingのEDT

    <FilthyRichClients>读完了前几个章节,现将我的体会结合工作以来从事Swing桌面开发的经验,对本书的一些重要概念进行一次 分析,对书中的一些遗漏与模糊的地方及时补充,同时 ...

随机推荐

  1. MemCache 启动

    这个MemCache在园子里面的文章也很多,这里只是我自己记录作下笔记 MemCache的官方网站为http://memcached.org/ 启动与关闭memCache # /usr/local/m ...

  2. Java 虚拟机

    Java 虚拟机工作原理详解 一.类加载器 首先来看一下 java 程序的执行过程. 从这个框图很容易大体上了解 java 程序工作原理.首先,你写好 java 代码,保存到硬盘当中.然后你在命令行中 ...

  3. ios-UserDefaults

    //单例设计模式 /* 1.单例是一种设计模式 是开发人员在开发过程中总结出来的简单方法 2. 如果某个对象在整个工程中有且只有一个(唯一的)就必须使用单例设计模式创建该对象 3.单例设计模式创建的对 ...

  4. github打不开

    所用方法:修改host文件 一.键入网址:http://github.global.ssl.fastly.net.ipaddress.com/#ipinfo 拿到github.global.ssl.f ...

  5. ios 音乐播放,音乐信息显示方法

    下面的博客写的很清楚了 http://msching.github.io/blog/page/2/ 主要涉及AVAudioPlayer和下面这几个函数 MPNowPlayingInfoCenter.d ...

  6. 纯css径向渐变(CSS3--Gradient)

    渐变 一.CSS3的径向渐变 效果图网址:http://www.spritecow.com 图像拼接技术 CSS3 Gradient分为linear-gradient(线性渐变)和radial-gra ...

  7. FB面经 Prepare: Task Schedule

    tasks has cooldown time, give an input task id array, output finish time input: AABCA A--ABCA output ...

  8. python之装饰器(decorator)

    python的装饰器如果用得好,那是大神,用的不好最好别用... 装饰器(decorator)主要包含俩大属性: 1.不能改变原有函数的调用方式 2.不能改变原有函数的代码 第一个表示,我不需要改变原 ...

  9. eclipse launching workspace太慢的解决方法

    这几天eclipse调试Android项目的时候反应超慢,右下显示launching workspace就不怎么动了,今天终于卡的受不了了,在网上搜了写方法,设置了下总算好点了,现在把方法贴出来,跟大 ...

  10. ios开发之-- tableview/collectionview获取当前点击的cell

    方法如下: 一般collectionView 或者 tableview都有自带的点击函数,如下: , collectionView -(void)collectionView:(UICollectio ...