因为你学错了。
我最初是学QBasic入的门,自己琢磨着写游戏、搞动画玩。但basic是解释型语言,性能太差,当时奔腾上市没几年,学校机房还是286、386,486都少见。
为了写真正的游戏、为了充分发挥硬件能力,这才中途切换到C;之后面向对象兴起,又自学了C++。
其实多学一门语言很简单:所有编程语言都不过是一套风格略有差异的、执行序列及数理逻辑的描述系统而已。
就好像你学数学,既可以写“加减乘除天元地元人元”也可以写“+-x÷xyz”一样——符号系统的确略有差异,甚至个别东西并不存在严格的对应关系;但一切归根结底都还是那么几个简单符号罢了。
所以,我从QBasic转到C、又从C转C++、转PowerBuilder、转TCL、再转C转C++、然后工作需要就用python、bash、VBA、Delphi、Java、C#……框架从谁用谁死的ACE到libevent,UI从MFC到C模拟面向对象的GTK再到Qt、WPF再复古到ncurses,从脚本封装glusterfs到深入TCP协议栈玩链路聚合……拿起来就玩,玩过了就忘掉,就这么简单。
你学错了方向。
学C、学C++、学Java,学习目标应该是“自己写libevent”“自己写玩具版unreal”“自己写模板程序”“自己搞类似spring的中间件”“自己写设备驱动/操作系统”“自己实现TCP协议栈”“自己写DSL解释器”……
这些其实很容易。本科专业课内容而已。
一旦你往这个方向训练自己,那么换语言就是换一换符号风格,没什么大不了的。思路就是那么几条,模仿、遍历、分治、动态规划……;手法就是那么几种,缓存、索引、信号/事件、回调/消息循环/dispatcher……;注意事项就那么几点,边界值、等价类、数据完整性原子性、死锁、空转……
这寥寥十几、几十个知识点,玩好了,玩精了,万变不离其宗——几十年了,哪有什么软件/算法能跳出窠臼的?
学什么调优啊。这软件我都会写。知道内部算法,看一眼参数就知道是调整什么的、调整后会造成哪些影响——真不知道稍微一查也立刻明白了。
学什么框架啊。这思路我看了就懂,就知道怎么写。我觉得这个框架我应该这么写、这么给人用,一看果然是,哪有什么“学习负担”——猜错了?猜错了说明基础知识掌握不过关,赶紧补课去。唰唰补足短板,以后就再也难不倒我了。
如此反复训练,自然学什么越学越快、猜什么越猜越准——随便什么技术,内行一看,都是新瓶装旧酒!
那能不轻松吗?
这就是我说的“学什么一定要学根”,“学了根,枝枝梢梢会自己长出来”——千年古树规模很大?就一根树干。
反之,你去学什么spring什么j2ee什么tomcat,甚至具体到apache的配置、Windows10的某个配置改注册表的哪里——不去学根,专去学这些枝叶,那的确是见效快、学了就能用就能人前显圣……
结果呢,Windows7你会了,Windows10来了;Windows10好不容易跟上了,Windows11又来了……
累死你,你都跟不上变化。
换句话说,正确学习编程的方式是:随便学习一门编程语言,然后用这门语言尝试实现数据库、操作系统、网络协议栈、编译器等等等等。
如果你是这么学的,那么你才真正掌控了计算机——将来的任何技术,你都不费劲。
比如,这是Android的系统框图:
假如现在我所在公司造了台Android手机,做出来后不知为何,字体显示总是有问题。怎么处理呢?
如果你从梢上学,看到的是一屏一屏类似这样的东西:
几百个屏幕通下来、乱七八糟一通乱试之后,连“总是有些糊”的初始版本你都回不去了。
但换一个从根上学的,很简单——所有字体都糊,那么这个问题就只能往中底层找;Android啊,下层不用管,Linux内核,很熟悉了;字体是freetype这块负责的、然后给display driver渲染……
freetype工作一直很正常,我们也没碰过;唯一的差别是我们的手机和别人相比,用的这块屏幕比较高级,不是简单的条状RGB点阵,而是RRGB四方点阵,并且多了个亮度通道,允许控制单个区域的背光亮度、从而完美支持HDR;所以问题根源可能是这玩意儿的驱动可能没有优化好,机械的把字体转换成屏幕点阵显示出来,这就造成了字体边缘看起来不光滑、不锐利……让我验证一下,看看这块屏在Linux和Windows下 是否也有同样的表现。
一旦确定了问题所在,那就可以找厂家要求升级驱动、或者干脆要来驱动源码、优化它的渲染过程……
类似的,各种框架,你从梢上学,海量的问题配海量的配置参数,慢慢背吧。
但你从根上学,就那么一个框图——我们现在的业务会有若干访问极其频繁的热数据,这些数据最好缓存在内存里。嗯,框图上说它有个“内存数据库”,找出来用用看:问题解决。
我甚至干过这种事:当时用的一个框架,文档极少;我们急需一个功能,我说这功能不难我来。于是花了一个月,自己写程序搞定了。上线后工作良好。
然而忙完这个后,某天我顺着某个关键字追下去,突然发现这个功能是框架本身就提供支持的——这个支持当然比我花一个月匆匆写出来的解决方案完善得多。于是我找经理,打算改用框架支持。
谁知一测试,我那个方案虽然仓促、简单,却恰恰因为它的简洁而有很好的性能;框架那个呢,我得关掉它的很多功能、关的和我的方案差不多才会有同样的性能——当然,哪怕关的差不多了,它仍然是比我那个一个月的东西功能更完善。
经理说算了,别折腾了,就用你那个。我们并不需要那些额外的功能。
你看,我随手就能撸出来,自然找到就会用、就能把它的一切摸透——相比于你这样直接学习框架本身的,我也就迟了一个月而已;而且只要你敢提相关关键字,明天我就能超过你。
而你想学会用它,一个月未必够用。费尽心力学会了,你也只是学会了玩弄一个黑盒子上面的几十个不同旋钮而已——而它在我面前是白盒。
于是,你学Android,需要一寸厚的书看上十几本,这才知道它的网络该怎么配置;遇到实事一番手忙脚乱,还是不知道哪里出了问题、写出的程序老是不正常。
而我呢,就看看它的框图、需要做什么再看一下相关的那个框框的接口风格,够用了——功能不正常?那是。人家说好了是异步调用,完了用消息通知,所以我直接搞了段代码接住消息、然后分发给相关模块——这些模块自然也从一开始就设计了相关机制、考虑了刷新时机。
你呢?当普通函数调用,调了就不管了,那怎么能成。什么?哎呀别死记硬背我的代码,你得明白机制……不是,这个机制不光是框架的机制,还有配合框架机制的我们自己的机制……
对我们这些习惯自己实现的,一看接口入参回参,马上就知道这是什么机制、我们得怎么设计程序来配合这个机制;而你呢,就得死记硬背我们随机应变出来的套路。这就使得你的学习负担加倍又加倍。
你很勤快,一个个库一个个API学的刻苦又细致;而我很懒惰,比如Android我就只看一个框图看一个intent机制一个activity,看完写个程序试试手,扔下,忘掉。没用。
那些具体的东西,什么spring、j2ee、lamp……不好意思,这玩意儿我从来都不看。
它们的根底我清清楚楚,需要时看看框图、直接拿来用就行了。没事看它们干嘛?浪费时间。
但我掌握了编写这些东西的基本思路,所以哪怕只看了这么一点点,但只要工作需要,哪块出问题我就能对付哪块——报一个关键字,当天就是专家。
相应的,PageRank算法出来了?有了个不同于关系数据库的、新的数据存储思路叫big table?看看看。新思路太难得了,不看就要落伍!
不光要看,还要分析它的灵感来源、检讨自己为何就没有想出类似好主意、还有哪些领域也可以应用类似的思想优化解决方案。
你勤快的学习了一个个API、一个个惯用法,却全都知其然不知其所以然。所以你疲于奔命、却总是跟不上变化。
海洋里有无数条鱼,每天也有亿万条鱼出生、差不多同样多的鱼死去。所以我不需要认识它们,那纯粹是浪费时间。
我只要知道渔网有多少种、有没有人又发明新的捕鱼方法了,这就足够了。
遗憾的是,计算机发展太慢了。这么多年,也就PageRank、bigtable以及深度神经网络有点新意,其他的,不都是新瓶装旧酒吗。
你多花点时间在渔网上,少花点时间在鱼身上,自然就不至于“耗尽所有”还是什么都没学到了。
因为你学的不是java,而是spring那些东西的api
下面这些东西,都是java做的
live 2d,一个日本人编写的二次元动画制作软件
graalvm,一个java编写的,多语言的编译器,开发者是德语系,你想一下,这种东西是不是总是看到德国人在搞
minecraft,哦,这个太有名,我们换一个,spiral knight,螺旋骑士,steam上普遍好评的3d动作游戏
cassandra,一个java编写的nosql数据库
fxgl,一个英国布莱顿大学教游戏制作的发考题做的开源游戏引擎
现在他在做什么呢?他在探索3d的渲染,然后做一个重返德军总部的fps的demo,至于什么超级玛丽之类的,那个demo早就有了,然后结合graal的native image技术,将这些编写的游戏做成移动端app并发布到google play或者app store上去
nasa,是java的老用户了,以前java2d,3d,可能就是nasa什么在用了,当然现在技术也在升级,升级成javafx那些,这个软件叫做NASA missions,纳撒任务
多贴几张图吧
当然还有很多人都经常用的java写的ide系列,喷气脑的全家福
写各种软件的,对喷气脑的ide并不陌生吧?无论是php还是安卓
当然还有maven等build工具,这个也是java写的
那如果说的是框架的话,那就更多了,还有其他名气小一点的就不说了
那就问你了,这些东西你会吗?就按你在问题里面写的那样,你就算把java学到能把dubbo写出来的地步,这些东西你能写吗?这些东西都是java写的哦
那我替你回答吧,你写不出来,你就算能把dubbo写出来,这些东西你也写不出来
为什么?因为你学的那些框架,其实应用场景是有限的,简单说就是做一个网站,高延时,但是高吞吐(high latency,high throughput)的这么一个场景,比如电商
但是你换一个场景,你的那些所谓的框架的经验,基本上都没用了
因为很多场景要求低延时,比如live2d的渲染就不能太慢,否则用户骂娘了
那如果你写的是live2d的话,用java写,那你的那些dubbo的经验有用吗?
所以我们跟豹哥聊天,就经常拿豹哥开玩笑,因为豹哥之前的那家游戏公司,做了一个非常神奇的操作,就是做游戏的后台,用了dubbo,结果老板被坑死了,豹哥说,老板喝醉了,问为什么,老板心里苦啊,为啥苦啊?被搞互联网的坑了,怎么坑的?就是钱投了很多,搞了什么dubbo之类的上线,效果却不怎样,这个钱越砸越觉得血亏,我们就笑豹哥,你一搞游戏的,用dubbo?如果你用的是netty,还有点道理,或者vert.x,但是dubbo?哈哈哈哈哈,被坑不是意料之中的事吗?
所以你说你会java吗?不,我觉得你可能不太会java,你会的是基于java开发的那些框架,java的基础语法你可能都忘了,因为日常你不会用,你的jdk可能都卡在1.6之类的低版本上,java新增的那些功能,你可能都用不了
那为什么会这样呢?
因为中国在高速发展的过程中,很多系统都是大干快上,也不管合理不合理,能用就行,先用着,本来说,随着时间的推移,后续是要继续重构代码,比如单元测试没有的要补上,但是你觉得,大干快上之后,有多少公司会去补这些东西?
没有啦,管理层也没有这个意识,那原来的系统还能跑,那不就先用着么?
那时间一久,你这里面不都是些古老的渣渣么?
那豹哥之前那个老板,不懂技术,也去盲目投入,这不就是东施效颦么?
适得其反,画虎不成,是吧,反类犬,一个游戏公司,去学习什么电商经验,被坑不是天经地义么?
但是福州的朴朴,这种去学习电商经验,这种就有道理,所以福州的朴朴直接把盒马干出去了
所以很不幸地告诉你,你学的这些,其实都是为你进阿里等电商公司做准备
如果你的目的不是去做电商,那你的这些经验,其实没啥用
那阿里等电商公司怎么说也有几十万人呢,那几十万人随便每个人都弄一点知识出来,可不要你拼命学么?
但是那些东西,真的对其他业务有用么?
或者,真的有用么?
没用,基本上都是屎山雕花,跟java没什么关系,反而跟它们的业务有很大关系
所以你如果去东施效颦,你学到的,并不是java,而是业务,或者说服务于它们业务的技术,再通俗点说,如果我们把一个企业现有的业务代码比喻成屎山的话
那你学到的,其实并不是java等实际技术,而是如何去维护这个屎山
就像很多人喜欢去看什么阿里的java规范,这个就是屎山规范
为什么呢?因为阿里的业务可能需要这些规范,但是java自身的规范已经足够多了,为什么还要再加规范,这些规范难道放之四海而皆准?
我看不对吧,你去看看我上面列举的这些java项目,有谁吃饱了去遵守阿里规范吗?
没有嘛
但那是不是java?
当然是啊,怎么不是
那如果你学了一大堆阿里的业务技术,比如它们的java规范,比如dubbo什么的,对于你要做出我上面列举出来的东西来,有用吗?
没用嘛
所以你真的会java嘛?
我觉得很多人是不会java的,他们只是会一点java的基础语法,然后就是框架给他们强加的各种规范,约束,他们就天天学习这些东西,然后疲于奔命
因为框架,类库,java在这个领域,是极大丰富,你可以在maven central上找到2400多万indexed jars[1],差不多一个jar就是一个类库,每一个jar都有api,你学的是这些东西
如果你不去学java,而是学api的话,2400多万个工具的api,你要学到什么时候去?
而且maven central上的数量还在极速扩张,一年增加几百万轻轻松松,这几百万的jars的api,你就是看一遍,估计都困难吧?那你还要去“学”这些东西,能学完吗?
所以你的学习方法不对,真正这些工具的api啊,应该就是用的时候,随便看看就用了就是了,因为都是英语,你应该加强一下你的英语能力,要看懂老外在表达什么,英语不好的人,就容易陷入api学习的困境,表面上背了很多api,但是有什么用?没用
英语好的同学,其实第一眼看到api,就看api里面的英语在说什么,基本上对于这个api的使用就可以做到心中有数了,然后再看看相关的注释,再自己动手写点代码验证一下,这样百分之八九十都可以搞定了,剩下的,一些可能作者自身表达不清,可能会有歧义什么的,那你Google一下,也基本上都能搞定,所以叫:面向Google编程,就这个道理
所以你的英语不好,看不懂老外的表达,导致你陷入了api学习的错误怪圈,所以你学java学得比较慢,倾尽所有都还是学不好
而如果你的英语ok的话,看得懂老外的表达,那么大部分api是不需要花时间去学的,用的时候再查都来得及,然后你就可以腾出时间来,去看其他的语言,其实大部分编程语言的语法,不都是英语单词和符号的拼凑么?语法特性就那么点,写法上可能会有些差异,但都大同小异,你花点时间记一下不就行了,到用的时候用就是了,这就是为什么有些人能够快速掌握多种语言
举个例子,java至,跟swift,dart,kotlin都有class,enum,都用"""
但是有些地方会有差异,比如->,swift用in,dart用=>,不过大部分closure/lambda用的不是->就是=>,所以用->没问题
遇到这种差异,你记一下就行了,写不同语言时候切换一下
没什么难的,所以java是一个很好的多语言学习的入门,你只要掌握了正确的学习方法,学会多种语言是很轻松的一件事,甚至你可以自己动手改它的语法,jvm上那么多语言,kotlin,scala,groovy,clojure,不都是改了java编译器前端后定义出来的东西么?llvm上也有,rust和d都有llvm的后端,llvm前端也不仅仅是swift,obj c那些
说到底就是你没有正确掌握学习方法,导致学习java变成了api的记忆和背诵,英语不好,所以看不懂老外通过函数或者类名想表达什么,每个api都需要通过百度去查询,然后记忆,用这种方式学习,自然慢,而且学到的都是表面,没什么用的东西,因为api自己也变来变去,就像那个dubbo一样,我前面说的那些项目作者没有一个会dubbo,你说他们的java学得好不好呢?那你就算会dubbo,能写出我前面列举的那些项目中的哪一个?c也是同样道理,你就算把redis源码全部看懂了,又如何?redis如果你不用的话,看懂源码有什么意义?
没用,都不过是个工具而已,别把工具的使用经验太当回事
破千赞更新
谢谢各位厚爱,有人问说,要给一个方向
那这个其实是另外一个问题,跟这个问题本身没什么关系
我们不妨聊聊,下面的内容全部是歪题探讨人生的,如果你想看原文题的答案,下面的可以不用看了
java能干什么?java能写出软件来
至于你写什么软件,以及这个软件有没有市场价值,这个并不是java这个工具需要考虑的问题
是你自己需要去规划你的人生,就你要成为什么样的人,没有给出上下文,我怎么可能知道?
每个人的人生和职业都是不一样的,我只能告诉你说,java这个工具,能做什么,以及你该如何掌握该工具,那至于你掌握了这个工具,你用它来做什么,那是你自己需要思考的问题
这一点上说,java等编程技术跟炒菜,驾驶,游泳等实用技术,并没有什么本质上的不同
你说,你在考驾照时候,问师傅,一个什么方向,你说师傅能给你建议吗?
不行嘛,因为现在驾驶技术已经不值钱了,很多人都会开车,不像我们小时候,会开车,那是一门技术活,司机是一个收入相当不错的职业,现在,是吧,大家都会开,干嘛还需要花钱让你来开呢?
一个道理
以后软件就是随便找个人就能写了,我们并不需要985或者硕士博士或者计算机系毕业才能写代码,随便找个人就能写了,java尤其如此
所以如果你要思考方向,你应该想的是,我掌握了这门工具,我能用这个工具来做什么,然后再来看,你想做的这件事,有没有市场,有没有前途
但是我不能对此做任何的保证,因为我不是培训机构,而且我觉得对你做:学了某个工具,就能怎么人生巅峰了,这种承诺,是极其不负责任,而且是错误的,因为确实有可能你学了某个工具,你也还是找不到工作,完全有可能,就像你考了驾照,就能找到一份司机的工作吗?
驾校的师傅不会这么保证,我也同样不能做这样的保证,当然某些培训机构的老师,为了赚你的钱,他会跟你说,学了什么什么技术,就能去什么大厂之类的,那这个我觉得都是智商税,我唯一能告诉你的就是,这是一个工具,你掌握了这个工具,能写出什么样的软件来,以及目前还有哪些问题,以及面对这些问题,我们有什么办法绕开,或者有谁在处理,或者干脆就无解
举个例子,比如你说java,能不能编译成exe?这个问题就有解,你做不做aot/native image啊?不做,那就好办,jlink加上一个手写的bat脚本,然后你还可以把bat脚本做成exe,这样你就有一个能够直接启动的绿色软件了,然后你再根据操作系统做安装包
如果要做,那就要掌握graal编译器,要配置graal,maven这些,前一段群里来了个魔都学金融的硕士,英语不错,我们引导了一下,大概2天左右,就把配置什么都搞好了,把他写的程序给native image/aot编译掉了,就出exe了,当然同样遇到了问题,cutting edge的问题,然后gluon有人在处理这个问题,插件的问题,估计1.0.9会解决,那可以等插件作者解决
再比如,我想做async/await,那你有两个选择,一个是等java的project loom做好,毕业,那时候自然就有了,但如果你不想等,那么你可以换一个编译器前端,比如你可以改成kotlin,kotlin就有提供跟java共用编译器后端的前端,也就是kotlinc,那kotlin就有async/await,你就可以用了,vert.x就是用这个逻辑,实现了future.await
再比如,我想要让java的gc停顿,控制在1ns以内,那抱歉,我只能告诉你,做不到,但是你说,控制在10ms以内,那我可以告诉你,zgc和shenandoah都可以实现,zgc有代价,比如内存使用不要用得太满,最好要有15%的富余,否则zgc性能会突然大幅下降,shenandoah则没有这个要求,但是shenandoah同样不会给你gc控制在10ms以内结束的承诺,你有了具体的数值,那你就能去衡量,你想要写的软件,能不能接受这个停顿了
所以如果你要问一些关于人生规划,理想的问题,那这个肯定是因人而异的,我这里说的,只是告诉你,java就是一门技术,一个工具,你掌握了这个工具,能做什么,至于你最后用没用这个工具,以及用了这个工具做出了什么,那取决于你自己,而不是java,有些人用java,只会在spring上糊屎,有些人用java就写出了graal,这就好比,同样是开车,有些人可以成为赛车手,有些人却开出车祸,一个道理
如果你要问我在用java做什么,我什么都用java做,对我而言,java最大的好处就是在我毕业时候,让我混进了国企,在我出国时候,国外因为我会这门技能,所以给了我额外的加分,让我可以更早走出国门,当我回国的时候,java这个技术的发展,使得我可以用更加便宜的劳动,创作出让我自己满意的软件,可以用此创业,当我在国外的时候,java让我找到工作,并赚到了买房子的钱,为我解决了后顾之忧,所以我蛮喜欢java这个技术,并且确实我没有在java上投入多少,我生活中还有很多事要处理,比如在国外时候,一边工作还要一边读书,在国内,创业的同时还要照顾家人,如果我用其他语言,估计就做不到,比如出国加成,恐怕就没有了,创业估计成本就高了,我可能就失败了,工作可能就更困难了,我就没有办法边工边读了,但是你问我说,那我也学java,是不是就能出国和创业了,抱歉,不单纯是这样,这两者并不是简单的因果关系,因为我出国除了java以外,在大型国企悠闲的工作环境,以及法语英语等外语的学习,都给了一定的加成,这些综合起来,才让我更早走出国门,还有在国外时候,当地政府的资助,以及mcgill低廉的学费,还有英联邦给的钱,还有当时所在企业的福利,才让我可以边工作边读书,而且企业会提前放我下班,因为我有些课在晚上上,不算我的考勤出问题,加上家里的一些支持,让我可以在回国之前,边工作边读书,读了两个学位下来,赚钱和文凭都没耽误。但是你说这些东西,换个人,是不是能复制,嗯,多半不行,因为人跟人是不一样的,我有的条件可能你没有,我没有的条件,可能你有,就像很多同学,家里都是几千万资产,那么他们自费出国读个书,很容易的,但我就需要自己解决学费问题,否则我读不了,虽然说老爸老妈咬咬牙也能解决,但是我不希望他们这样干,也因为不需要他们花这个钱,所以我回国时候,创业时候,就有一定的底气,不是很着急去融资什么的,慢慢也就周转过来了
这些东西都跟java没什么关系,但确实java又扮演了很重要的角色,因为没有java,我就少了一技之长,确实有些机会可能我就无法把握住了,但是java又确实不是生活的全部,甚至都不是技术的全部,就像我创业时候,java在最开始确实有一些问题无法解决,比如无法编写ios的app,那这时候就要准备换一个编程语言,我们当时就做好了用swift编写app的准备,到后来flutter横空出世,然后graal,一下子,开发移动端的app又多了两种选择,那韩信将兵,多多益善,为什么不呢?
技术只是解决问题的工具,工具远不是生活的全部,不要太痴迷于这些东西,做多了无非那么一回事,没什么高级的,你觉得很神奇因为没有人告诉你怎么做,你百度百度不出来,就会觉得,这个技术好牛逼啊,因为你不会
但是我在国外混过,所以我经常跑去直接问作者,这个东西做什么用的,我遇到了这个问题,是不是bugs,但是多数问题我直接Google就能找到答案了,所以也就没太把这些东西当回事,无非工具,需要时候用就是了,又不是不会用,我会用就不觉得这些东西有什么了不起的
会者不难,难者不会嘛
如果你觉得某个技术很牛逼,那多半说明你不会,我就觉得技术很容易,因为我会
所以对于java学习正确的定位应该是,花点时间,将其掌握,然后其他的时间,你该干嘛就干嘛去,需要的时候用就是了,你觉得难是因为你学习方法不对,所以事倍功半,疲于奔命,我不觉得难是因为我会,我掌握了正确的学习方法和信息渠道,学起来自然就快
最后说一下,如果你有条件,还是去国外读大学,尤其是技术这种,因为国内的,你看谭浩强的c就知道什么德性了,国内这些老头子技术真的是不行,土法炼钢,估计要等现在这一批,从国外回来的青椒上位之后,才能真正改变,但是那个至少也是10年,20年以后的事了,现在这个阶段,国内职业技术的教育确实远不如国外,当然前提是你家里的经济能力能够承受,否则动不动近百万的学费,恐怕一般人拿不出来,如果你实在拿不出来,你也多看看我写的回答,其实也能照猫画个虎,是吧,反正看我的回答又不用花你的钱
工具而已
我的入门语言是 C++,当时学的时候也是用尽全力,觉得没法再学别的语言。
可是一旦学会了,再学新的,就发现好简单。初写 Java 的时候,还有点失落,十八般武艺都练过了,却在这儿做广播体操,指针也没有,内存也不用管,collection 比 stl 好用,基本上最难的就是设置 class path。之后接触各种语言,大部分看看文档,即可上手,麻烦的反而是环境设置。
编程实际上是让电脑做事。不同的语言,就是不同的交流方式,但要做的事还是一样。电脑还是 CPU,内存,硬盘,不会因为换了种语言,就换了一套超能力。所以不同的语言中,表达方式,思想可能不同,但逻辑和数据结构还是类似。掌握了一种,学其他的也不难。
当然,有一个例外,不管 C++ 学的多好,CSS 都是一样的困难。
正常
第一点,你要知道,许多上了年纪的大人和老人,尤其是五六十岁,六七十岁的人,他们是不会普通话的,即便是普通话,音调啥的也特别怪,听起来有点怪里怪气的。比如我堂妹,今年17岁,从深圳回山东老家,她从小就在深圳长大,所以她的话是普通话,但是我妈就只会用山东话跟她聊天,所幸山东话跟普通话差距算是比较小的,所以我妹妹可以听懂。
第二点,大多数人都是容易忽视自己存在的问题的,包括我自己,很多时候都容易只顾及自己的感受,并且忽视自己存在的问题,用一个不太恰当的例子,就是从人的视角来看,老鼠是在偷东西,但是从老鼠的视角来看,它是为了自己生存而获取食物。所以说,你男朋友家里的亲戚并不一定是排斥你,只是他们可能没有意识到你不懂潮汕话,外加他们也有可能不懂普通话,所以造成了这种情况。
第三个,有很多问题都是缺乏沟通交流引起的,当你觉得尴尬的时候,你一定要向你男朋友表达你的感受,因为你是客人,尤其是你的这种情况,讲究主随客便。你是因为你男朋友才跟他们一家人产生联系的,所以说你男朋友是沟通的桥梁和纽带,有不舒服的地方,一定要跟你男朋友说,如果跟他说了,他依旧不在乎你的感受,或者说他们家人依旧不改变,那就说明他或者他们家人没有把你放眼里,反之,如果他们主动跟你聊天,或者你男朋友帮你翻译,说明他们家里人可能只是一时疏忽,对你还是挺在意的
在我们这里有个说法,家庭和不和睦,主要看男人,一个好男人是可以有效沟通婆媳矛盾的,帮助婆媳之间化解矛盾,让婆媳更加和睦,所以,结合上面几点来看,你需要做的是跟你男朋友说,看你男朋友的态度和行动,还有你男朋友行动之后他的家人的做法,记住,好的关系,一定要少想多说多做。
自从有了快进, 倍速, 就静不下来从头到尾不跳, 不倍速的看一部完整的连续剧了.
自从有了电影, 剧透, 解说, 豆瓣, 就没有一部电影反复看N遍, 自己傻呵呵的品味自己猜出的那些梗了.
别人的思考代替了自己的品读, 那种味道中多少有一些别人的口水味.