草庐IT

关于.Net和Java的看法-一个小实习生经历

小方同学在学习 2023-03-28 原文

目录

  1. 背景
  2. 带着疑惑
  3. 生活中的迷茫
  4. 开始实训
  5. 实习
  6. 再看java
  7. 总结
  8. 补充

背景

笔者是一个专科院校的一名普通学生,目前就职于某三线城市的WEB方面.Net开发实习生,在找实习期间和就业期间的一些看法,发表此文,纯个人想法,欢迎讨论,指正!哈哈轻点喷~

在校学习技术方面也是.Net方面,所以实习就是.Net开发实习生。我也很喜欢这门优雅的语言!

在还未上专科院校的时候,我就开始了解编程,从启蒙的VB,到简单的排序算法。我曾经感叹:简单的几行代码,就可以完成这么多好玩的东西!跟风在网络上看到程序员的高薪,身为一个农村的孩子,也想通过编程赚取高一些的薪资和在办公室办公。

但当我开始在B站(VB也是通过视频学习)等渠道,搜索编程语言,教程的时候,十之八九的视频教程都是建议学习Java,无论是就业还是薪资方面,仿佛都告诉我:选择java就可以走上人生巅峰!迎娶白富美!

当进入学校,大一的课程是Html Css Java的时侯,我觉得这样子的路线,和网上说的是一样的!参加了社团之后,有学长和我说,我们的主要学习技术栈是.Net方面,我当时也是一脸问号?没听过这个,好像也不出名。会不会是个坑?

带着疑惑

之前在网上看的什么介绍视频都是java这种的,给了我一种,java是最好的语言的感觉,大环境都使用他。以至于我一开始是不太喜欢.Net的,现在回头想想,还是太天真了~ 从大一下学期开始,我们的课程变成了C#,WinForm 方面,我一看,这不是和VB有点相识吗,都是托拉拽,写事件的。在内心更不喜欢C#了,觉得有点低级 哈哈哈(WinForm 开发大佬别喷我),那也是再次加深了偏见,我和我们专业课老师也曾对话:

  • 我:老师,我们为什么要学习这个语言,就业不会很困难吗?他好像不是这么流行?
  • 老胡:不要纠结于语言,主要是编程思想和学习方法。
  • 我:???,我觉得有点迷茫,不知道能做什么,我会了什么?
  • 老胡:以前的学生也有过你这样的迷茫,大部分人都会有,我的建议是跟着一步一步走下来,还是想的太多做的太少,人才会迷茫。

在那时,我还是不理解为什么要选择这门语言,但我还是跟着老师一步学下来了,后来的的课程是Sql,.NetCoreMVC ,JavaScript,NodeJs,Vue,WebApi

生活中迷茫

在专科院校,我们学院算是管理比较严格的。辅导员和亲妈一样,一周查寝两三次,经常和你聊天,在课堂学习的时候,还会来抓人是否有玩手机,偷偷睡觉的。也是这种环境,让我没机会偷懒,很感谢我的两位辅导员(孙姐,琦姐)! 咳咳,跑题了
其实在宿舍我们也曾一起聊天这方面:

  • 舍友:我觉得我们学的太杂了,一会学这个一会学那个,啥都是浅尝辄止,就怕到时候出去都没人要
  • 我:我也是觉得啊,我自己找了java的学习路线,你要不要看看?
  • 舍友:我瞅瞅
  • 舍友:这也太长了吧,技术要点这么多吗?
  • 我:对啊,我看到招聘软件上,就是写这么多技术要点?真的有大佬这么牛吗?

在这期间,我也自己在看javaSE的基础教程,发现和C#有点像啊这个语法?吃惊!

开始实训

时光飞快,我来到了大二的下学期,那时候刚学完WebApi和Vue,终于有点前后端的感觉了(第一次体验到前后端分离),在我们学院,大二的暑假是不放假的,在学校用两个月做实训,模拟企业开发,分组分工,大家一起做一个项目。
在分完组的时候,我就想:多分几个技术比较厉害的同学给我哈哈,我们做酷一点! 老师还是按平均水平给我们分好了,不好不坏。第一个项目是blog,一开始老师说是简单的完成功能就可以了,我心想:那不是很简单吗?
后来发现两周的时间,还是赶得半死才做出来!
从数据库建模,确认表关系、到前端页面的原型、页面的效果配色、后台的框架的搭建(.Net6 WebApi + EfCore + JWT +非常简单的借鉴DDD的分层概念)第一次感觉到团队的沟通协作和项目是如何从一堆报错到另外一堆报错的哈哈

两周的时间还是太短了,至少对于我这种第一次上路的新手司机,最后也是匆匆忙忙,直到验收会的前十分钟,还是修改部署到云服务器上。也是第一次感觉这么紧张且激动!

然后就是开始了第二个练手项目:教务系统,比第一个项目难度高了一个等级,就单纯表的确定,就讨论了两天,还是初步模型,后来改了N次 以及确定使用无显示外键这种关系。由于涉及到排课,我们还想着如果并发了,应该要加上锁的情况。还有如何更好的借鉴一下DDD这个思想。后端要用上什么新的技术,可以更好的性能。前端要小程序和网页版,区分教师和学生....
在第二个项目写的时候,就有一种感觉,都是CRUD,怎么有这么多花样,这么多玩法呢?

实习

很快到了八月底,我开始了投简历的时候,一共投了几十家,由于学历的问题也被拒绝了几次,给我整的有点灰心,也拿到了三个面试的机会

  • 某苏州软件公司,人员在200人左右,主要使用WinForm -失败
  • 目标城市软件开发公司,人员在50人左右,.Net6等比较新的技术 -通过
  • 目标城市软件开发公司 人员在300人左右,主要使用WinForm -通过

在九月我就来到了目标城市准备入职啦,我记忆非常深刻的是:在和我同时入职的两个人,一个是软件测试主管,一个是八年的前端工程师。

  • 我:大哥,你们都是入职什么岗位呀?
  • 前端工程师:我做前端的。
  • 前端工程师: 你是实习生吗?看起来挺小的。
  • 我:对,我是.Net实习生。
  • 前端工程师:现在还有在做.Net的实习呀,我都没听过几个了哈哈
  • 我:.....

在入职之后,我才发现了,就我一个独苗.Net实习生,其他实习生都是做Java方向的。主要的维护以前的老项目。用的是WinForm 等技术。

再看Java

萌生了离职的想法,因为刚入职嘛,第三天就跑路了,主要是个人原因不是很能接受WinForm ,可能是我觉得他比较老旧了吧,和我想要的不一样哈哈(再次求轻点喷),后来入职了那家50人左右的公司,不卷不加班,大家人都很友好,技术方面也是比较前沿的,完美符合了我的要求!!

然后在工作的时候,就发现了,.Net太优雅了,对比Java,拥有太多语法糖,写起来很舒服。但也是因为微软帮我们做了太多的事情,反而让我们不知道底层原理,设计模式等。

我深知一门优秀的语言应该是易用易学,好上手的,这点上C#完胜!宇宙最强的IDE,一站式帮你配置好了!

反观Java,在环境变量配置,IDE的选择等等,就会劝退一些小白(我一开始也不知道怎么配置环境变量)。

但在我的想法中,也许底层原理,设计模式这些,作为一个程序员应该懂,然后再去使用这些语法糖,知其然又知其所以然!

我开始在博客园中大量的搜索关键词 .Net转java 发现了很多这样子的文章。也看到对立,引战的发生!这点让我写一篇文章十分害怕哈哈,再次声明,我只是分享我的一些经历!

我看到了自由飞大佬的文章,其实也发现了学校选技术的用意,java的竞争太过于激烈,而C#和Java相近,市场也有需求。先就业再择业,先入行再选择!

至此,我明白了当时老胡说的意思:不要纠结于语言,主要是编程思想和学习方法。

总结

现在我也仍然在学习.Net 和java。在工作上使用的是.Net ,回来看的视频教程是Java,我想通过java来更深入的了解一些底层一点的机制,学习更新的技术。也是因为java的教程确实比.Net更加丰富,生态会更好一点,不可否认!
但我依然喜爱这C#这门十分优雅的语言,喜欢它无处不在的语法糖!在工作上也仍然会继续深入研究它!
最后,也告诉自己:不要纠结于语言,主要是编程思想和学习方法。

补充

这是在文章发出之后的第三天,评论区各位大佬前辈给了我非常多的建议和思路,在此表示十分感谢!
此处特别感谢 @蛀牙 前辈,对我的启发非常大!在此分享给后来和我有同样困惑的同学!

  • 蛀牙前辈:
    不要纠结于语言,主要是编程思想和学习方法。

    这句话是有阶段性的适用的,不是说从学习编程开始一辈子都是适合使用这句话来做指导。
    第一阶段:小白入门,这个时候啥都不懂,语法都看的有点懵逼的阶段,你说不纠结语言要纠结什么?
    第二阶段:对语言的部分基础语法有一定的熟悉,能相对熟练的写一写算法,打印一些字符图案在控制台上等。这个时候就有一些编程思想的涉及,例如循环分支这些逻辑性的东西。它与语言关系不大,但是你不熟悉某个语言,让你直接上手,也不一定行,毕竟语法还是有一些差距的,这个时候也还没有到不要纠结于语言,主要是编程思想和学习方法。
    第三个阶段:系统项目开发,这个阶段大部分人是根据某个模板,然后里面填一些简单的逻辑代码,并且大部分都是数据库查询的地方相对复杂。如果这个时候换个不熟悉的语言来做,因为存在差异性,大部分也没有办法快速上手,所以这个阶段也谈不上什么编程思想,主要也还是在纠结编程语言。
    第四个阶段:已经熟练掌握各种设计方法论,例如面向对象设计与分析,设计模式等。可以非常好的分析各种需求,并把这些需求转换成各种模型,能写出漂亮的代码来实现这些模型。看别人好的代码的情况下,看到一些命名和写法就能知道别人的意图。也能非常快的掌握一门新语言。这个时候就真的是 语言无关。

    所以从学习和提升自己能力方面来讲
    多学点语言,借鉴他们之间的相同处来理解一些编程思想,分析他们之间的不同处,来理解提升自己的设计能力。
    多学点不同领域的技术,例如后端,前端,客户端的开发,同样要去学习相同和不同处。
    人的精力虽然是有限的,但是把这个时间拉长的话,完全是有时间的。

    如果是要从赚钱的角度来讲的话
    成为一个程序员去给别人打工,绝对不是赚钱最好的手段。一定要打工赚钱这个路的话,那么相近水平的岗位,工资差距也不会非常大。岗位多少也不是问题,问题是那个这个阶段,哪个阶段的工资岗位你能面试的上。看工资的同时也要看自己的时间成本。时间永远的最珍贵的。

    从找工作的角度来看
    要找到高工资,必须精准定位行业和公司,它是需要运气+部分实力+会做人会表现。
    如果是承认自己非常平庸只能海投简历让别人来选你的话,那想都不用想啊,肯定是选择岗位多的呀,并失业了也能快速找到工作。看众多评论的结论,大概Java非常合适吧

  • 我:
    首先,非常感谢大佬在百忙之中抽空回答我这个问题,且非常的详细!在此表示十分感谢!
    我仔细的阅读了多遍,目前个人应该还只是处于第三个阶段:系统项目开发,所以确实因为语言而纠结!从而有部分的精神内耗。
    从学习的角度来说,我认同您说的,多了解多学习的学习思想,并且我目前也是这样子做的,反之则需要时间线拉长,同时也会害怕,浅尝辄止导致自己过分自大。目前也是正在寻找一个平衡点。
    从赚钱的角度:个人认为工作就是使用你的时间,技能,换取报酬以及社会成就感,至于其他的方面,无非是舒服和不舒服的感受。当然这是我目前的想法。
    从找工作的角度:我十分认同需要运气+部分实力+会做人会表现。从我为数不多的同学和自己的求职经历来看,运气实力临场表现缺一不可。不甘承认自己平庸,但也不会自大,只是还在纠结选择,自认不是一个有天赋的人,所以想走一条较为稳妥的路,也在不断的摸索!如果您可以给我一点建议,我将十分感激!我极其希望站在巨人的肩膀上,少碰壁!

  • 蛀牙前辈:
    如果要我建议的话,你不要去纠结选择编程语言,因为这不是目标,所以没有什么好的依据去指定你做决策。从职场上来看,你需要选择的是行业。你要确定这个行业是你未来5到10年想要深耕的。
    例如你想做游戏、想做金融、想做物联网、想做汽车相关、或者就是只想做外包帮别人做项目等等
    确定了行业后,你去看相关行业有哪些比较好的公司或者团队你想要进去,并且有一定的机会,然后去了解他们用的技术大概都是什么,用什么编程语言。
    然后你再定个目标,你是想要1年或者2年时间来努力达到进去这种公司团队。这样目的就很明确不会有纠结了。
    这个建议看着很像废话,但是实际上能做到的没有多少人的。

    关于赚钱这个事情,其实它也分很多层次的,出卖劳动力赚取报酬只是最低层的。具体不这里展开讨论,你可以自己去了解了解。

    关于会不会过分自大,这个是有特征来识别的,
    例如你同学或者同事啥的,会不会有一些地方不懂,你刚好懂了,你就容易起鄙视他们的心理。
    例如你学一个东西,会不会懂个表面就感觉自己好像已经完全懂了、
    例如你做一个软件,会不会只做了某个例子功能,就觉得自己已经完全做完了。
    例如你会不会觉得自己好像挺厉害,但是运气特别差,怀才不遇。但是实际上你只是一个专科生。
    例如你会不会整体想着我要学xxxx提升自己之类的,然后一周下来,发现娱乐消遣时间占用你一半以上,今天玩游戏,明天刷短视频之类的。然后该怎么学习却完全没有搞明白。

    最后,人生没有稳妥的路,想要稳妥只有不断的提升自己,让自己有能力去看到未来。人的成长是一个复利的过程,你每天让自己进步一点点就够了,但是不要间断。

    建议就这样。

  • 我:
    感谢大佬非常棒的建议!
    对于目标,确实我还没有想好,或者说之前没有这种思路,因自己确实也不明白不了解有多少行业,自己感兴趣哪个?可能是需要我深思。
    对于赚钱,在您说之后,我查找了赚钱的五个层次,上一条评论确实是自己目光太过于短浅,知识不足。感谢提醒!
    对于是否会过分自大,感谢提供自查方式,我认为我自我潜意识和做法已经有符合前面部分条件。
    最后,人的成长是一个复利的过程,使我明白,只要与上一天的自己相比,我有所进步,就已经是胜利!
    我将做出以下改变:

    1. 夯实基础,先将数据结构、计算机网络、操作系统三门主要基础重点,沉下心,了解并尝试深入。
    2. 在工作方面,上班不划水,做对自己有提升的事。
    3. 对于语言方面,尽量不去纠结,而是努力的先学,无论是Java或.Net,都是需要继续学习下去的!

有关关于.Net和Java的看法-一个小实习生经历的更多相关文章

  1. ruby-on-rails - Ruby net/ldap 模块中的内存泄漏 - 2

    作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代

  2. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  3. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  4. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  5. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  6. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  7. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  8. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  9. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

  10. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

随机推荐