V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
davidway
V2EX  ›  Java

潜水了很久,水一个帖子:一个刚毕业的 Java 程序员的迷茫

  •  
  •   davidway · 2017-01-31 21:32:02 +08:00 · 6781 次点击
    这是一个创建于 2860 天前的主题,其中的信息可能已经有所发展或是发生改变。
    为什么迷茫?之前写 C 的时候,觉的 C 的所有代码都是自己写的,能够知道自己做了什么事情,能够控制;
    到后来为了就业,然后选择了 JAVA 。发现 JAVA 很多代码都是已经封装好给你了,开发的过程中,所以我的学习方法是必须得在官方文档那里去看。可惜例子没有啊,很抽象,然后一个片段得去百度找个例子,然后自己总结一下写篇博客,以防后面忘记,可是,这一学习就得 1 , 2 天啊。

    而迷茫的原因,是觉的知识实在是太多了,觉的学都学不完。你说找重点的来学,扔给你一个项目,你可能复制粘贴会用,但是要自己重头开始,真的是一脸懵逼,而这种一脸懵逼督促着我不断地去百度补充知识,一百度可能就一天才学 1 , 2 个知识点啊。

    Q:
    我的目标是很想自己写一个开发框架,类似 struts ,最好是 spring 。每天都感觉很累,但是觉的自己的学习方法没问题啊,坚持是需要时间来验证吗?
    61 条回复    2017-02-12 19:42:11 +08:00
    sorra
        1
    sorra  
       2017-01-31 22:14:25 +08:00
    Servlet 也是封装好给你的,也要自己写一个?能写当然鼓励。
    你已经毕业了,就怕你没时间没动力哈。
    善于学习新东西也是一种能力哈。
    zhuangzhuang1988
        2
    zhuangzhuang1988  
       2017-01-31 22:27:10 +08:00
    学会调试。。
    a87150
        3
    a87150  
       2017-01-31 22:32:41 +08:00 via Android
    居然用百度,等着被喷吧
    Kilerd
        4
    Kilerd  
       2017-01-31 22:37:37 +08:00 via iPhone
    一个开发框架,类似 structs ,最好 spring

    我,一个非 java 开发者,印象中不是同一个东西吧。 spring 是 web 框架。 structs 是 orm 吧。

    你确定你学不是假 java ??


    PS 。非专业人士,说错就该被喷←_←
    Perry
        5
    Perry  
       2017-01-31 22:38:19 +08:00
    Javadoc 能看懂的话例子基本不需要
    suixn
        6
    suixn  
       2017-01-31 22:42:44 +08:00
    接 3 楼,用谷歌吧,可能少一半时间。
    ----
    正经说,我也是今年毕业。 8 月份才开始正式写 java ,感觉要学的东西还是很多的,慢慢积累吧。 8 月到现在用到了 maven 、 SSM 框架、 kafka 、 zookeeper 。
    两个系统其中一个还是 GO 写的。
    然后前端学了 vue 、 bootstrap ,配合部门封装的库凑合写了前端。
    感觉真的是又多又杂,但是还都是在慢慢学。
    慢慢积累吧,共勉。
    likuku
        7
    likuku  
       2017-01-31 22:42:59 +08:00   ❤️ 1
    Java 善用先进智能的 IDE.

    前天看到个笑话:{ Rails 真好啊 “我还没写代码呢怎么就跑起来了”}
    springmarker
        8
    springmarker  
       2017-01-31 22:53:28 +08:00 via Android
    初中学化学, c 和 o2 燃烧产生 co2 ,你知道了,直接拿去用,然后解决了一个又一个化学方程式,到大学学化学,你会更深入理解为什么 c 和 o2 燃烧会产生 co2 。
    底层的东西多了去了,学不完,所以我习惯自上而下,用多了自然就知道了。
    Infernalzero
        9
    Infernalzero  
       2017-01-31 22:54:57 +08:00
    @Kilerd spring 并不只是 web 框架, web 框架是 spring mvc ,对应 struts 并没错
    Suddoo
        10
    Suddoo  
       2017-01-31 23:05:11 +08:00
    @likuku 我也在 twitter 上看到那条推文了
    ihuotui
        11
    ihuotui  
       2017-01-31 23:32:46 +08:00
    你看完 spring 再说吧。
    shayuvpn0001
        12
    shayuvpn0001  
       2017-01-31 23:36:57 +08:00
    @likuku 笑死我了, Rails ,哈哈
    kingcos
        13
    kingcos  
       2017-01-31 23:43:10 +08:00
    @Kilerd 我也不太懂。。。
    但是 ORM 不是 Hibernate 和 MyBatis 么(不过好像 MyBatis 不算是完全的 ORM 。。
    weiweiwitch
        14
    weiweiwitch  
       2017-02-01 00:00:52 +08:00   ❤️ 6
    @davidway 你设定的目标太高了!这是你现在面临的最大问题,也是你觉得迷茫的根源。不管是获得掌控感还是写出一个框架。这都不是一个刚毕业或者有 1~2 年经验的程序员可能做到的事情,因为这个领域所需要的知识太庞大了,很少有人能吃下来,并发挥出来。你如果坚持这么做,那么你实际上在走一条地狱模式的路。逼自己在一种长期的没有成就感的路上摸黑一般的走,并且这种走法,自己都不会觉得有多大可能走出来。就像在沙漠中走一样。

    之前你用 C 写程序,可以说这些程序的体量应该都不大,才会让你觉得有掌控感。而你以后工作中做的 Java 相关的项目,即使不算上框架的代码,也可能比你的 C 程序大上至少一个数量级。这是不可能获得掌控感的。

    你需要调整下目标,拆分下对自己的要求,做一个自己觉得可行的计划表,一个由一个个小目标累计出来的计划表,然后逐步的实现,从而慢慢的让自己成长起来。

    如果你不知道怎么做出一个可行的计划表,你也可以在这里或者知乎上发帖。看看别人一步步学了什么,做出了什么后,才慢慢的能做项目的。
    RangerWolf
        15
    RangerWolf  
       2017-02-01 00:00:53 +08:00   ❤️ 2
    个人的一些想法:
    1 :你需要熟悉这门语言, 做到主要 feature 都能熟练使用。 比如要用到数据、列表等等
    2 :你需要找一本比较深入的书好好看看, 比如 《 Effective Java 第二版》《 Java 编程思想》,其他还有很多好书,看你口味
    3 :如果你的目标是 XXX 框架, 那么就去阅读源码学习学习人家是如何做的。 Web 框架目前我觉得 jfinal 真心好用

    2 、 3 可能是循环之中稳步提升你的水平
    formulahendry
        16
    formulahendry  
       2017-02-01 00:02:31 +08:00 via Android
    作为一个程序员竟然用百度,不迷茫才怪
    SoloCompany
        17
    SoloCompany  
       2017-02-01 00:08:53 +08:00
    @Kilerd struct 不是 orm, H 才是
    Reficul
        18
    Reficul  
       2017-02-01 00:59:37 +08:00 via Android
    非科班码农路过,对于 LZ 说的也有点过往的感觉。
    第一门语言是 C ,第一个稍大的代码经验是对着书写操作系统, C 语言。真正入门码代码是 Go ,刚刚接触 Go 的时候和 LZ 一个感觉。以前内存怎么分配,操作了什么都很清楚。但是到了调用标准库,三方框架的时候发现完全是个黑箱,很茫然。那些函数到底干了什么,又抽象又茫然。

    其实一段时间之后,比如 web 开发。了解 HTTP 协议那些套路之后,会发现其实那些函数就是协议的一些封装,就不抽象了,自然也就不慌了,就算换别的语言也会对这些套路感觉很亲切。另外习惯调用库之后,不把目光局限在内存,中断,系统调用上之后,思考的更多的是封装和实现了。侧重点转移之后,习惯了就不纠结了。
    davidway
        19
    davidway  
    OP
       2017-02-01 02:01:48 +08:00
    看到了那么多人回复,受宠若惊, V 站果然是程序员的天堂啊。
    @sorra 嗯,有理,我觉的举一反三是需要从系统再到细节。问题是现在我捉不到这个系统

    @zhuangzhuang1988 调试是会的,但是总会碰到框架融合框架的问题,举个例子吧: 1.我在 spring 下要融入
    一个 shiro ,发现植入了 shiro 后注解不起作用,蛋疼,这不关我业务逻辑的事情,和 spring
    框架的整合有关,后来修 BUG 的时候认真想想,这个项目究竟怎么从 0 到 现在的系统,我真的从没了解过,然后就想认真去理解每个最基础的例子和概念

    @a87150 百度和谷歌任由个人喜好,我当然懂 stackoverfolow ,但不要绝对化每一个搜索引擎的好坏,我通常
    都是因为官方文档看不懂,然后去必应搜,然后去百度搜。也不能太绝对
    @Kilerd Spring 是什么都做了, ORM 他也行, MVC 他也行,容器他也行, struts2 应该是 MVC 框架吧

    @Perry 这个有点绝对, javadoc 是最基础的,确实不需要,但是 spring 呢?为什么需要控制反转?
    spring 的 doc 适合一定程度的开发人员,感觉不太适合初学者
    控制反转究竟是为什么要产生, spring 没说,只能从别的引擎找到
    @likuku 用最先进的 IDE 是为了解决什么问题?
    @springmarker 这种学习方法感觉是很有用的,但是有一个问题,那就是不系统,就好像你做会了这道题
    ,你可能这道题的类似你知道了,但是这道题考察你的知识点其实很多的,什么守恒啊,
    什么还原性啊,所以我觉的最好是学一个系统,然后再学应用细节。
    @weiweiwitch 嗯,非常感谢你的回答,我深受启发。
    @RangerWolf 感谢你的指引
    @Reficul 没看懂大神的回答
    davidway
        20
    davidway  
    OP
       2017-02-01 02:07:48 +08:00
    顺便吐槽一下 V 站为什么没有编辑更新功能。。我很多错别字都不能改。。
    davidway
        21
    davidway  
    OP
       2017-02-01 02:12:14 +08:00
    顺便推荐一个网站: http://www.tutorialspoint.com/codingground.htm ,很多初学者教程在里面,而且全部代码能跑
    wjidea
        22
    wjidea  
       2017-02-01 02:14:31 +08:00
    ilumer
        23
    ilumer  
       2017-02-01 02:52:25 +08:00 via Android
    看完这个帖子………我表示你们也不能这么水 Java EE 吧。。。。。。楼上上来就直接瞎说
    woojuno
        24
    woojuno  
       2017-02-01 06:44:48 +08:00 via Android
    我就想说,你觉得 spring 是一个人写的?
    q397064399
        25
    q397064399  
       2017-02-01 06:52:44 +08:00
    记住 Key 就行了,一个框架那么多最佳实践,现代软件工程本来就是大规模协作,
    很多东西都变成黑箱了,你要打开黑箱去学,一辈子都学不完

    举个栗子
    Tomcat 在关闭的时候,如果需要将 Session Cookies 持久化 如何做?
    不查文档根本就写不出来,但是我记住那个接口的名称就行了,用的时候再去查
    全背下来,还不如杀了我

    r#23
    @ilumer
    另外楼主说的可不是 JavaEE web servlet 等规范是 Javaee 的一部分不是全部
    Cbdy
        26
    Cbdy  
       2017-02-01 07:09:44 +08:00 via Android
    抛弃所谓初学者的心态 /不要用百度(不听拉倒)/看软件、技术名著 /去看源码 /调教你的 ide ,或用 idea
    cs419
        27
    cs419  
       2017-02-01 07:39:39 +08:00 via Android   ❤️ 1
    楼主 你不是应该先写一个 jvm 么
    多数的老司机都是先会开车。 车子遇到小问题了, 自己捣鼓捣鼓 一点点的成长。 你很有勇气 刚拿到驾照 就想着造发动机啊!
    目前来说 没开几年车的你 想要去造车 对于就业不大现实
    limbo0
        28
    limbo0  
       2017-02-01 08:03:59 +08:00
    lz 还是 c 语言的思想
    misaka19000
        29
    misaka19000  
       2017-02-01 08:41:44 +08:00 via Android
    @cs419 不是应该先提炼硅吗(滑稽)
    Kilerd
        30
    Kilerd  
       2017-02-01 08:56:15 +08:00 via iPhone
    嗯,我也长见识了。😷😷😷
    ihuotui
        31
    ihuotui  
       2017-02-01 10:44:43 +08:00
    @cs419 应该先写编译器,生成标准 class 文件。
    wohenyingyu02
        32
    wohenyingyu02  
       2017-02-01 10:50:04 +08:00 via iPhone
    小企业不需要程序员,只需要调参狗
    CRVV
        33
    CRVV  
       2017-02-01 11:00:00 +08:00 via Android
    推荐楼主再去学学其它语言,比如 Python, Haskell, SQL ,用这些语言写写最开始学 C 的时候写的最简单的程序,我估计会有些好处
    aabbccli
        34
    aabbccli  
       2017-02-01 11:36:10 +08:00
    把 HTTP 协议学好了,什么框架都好上手。
    wyntergreg
        35
    wyntergreg  
       2017-02-01 12:27:50 +08:00
    主语言 JAVA ,进厂先做三年沉淀再讲别的。

    对,就是 leader 让你干什么你就干什么,萌萌哒就可以了。
    sobigfish
        36
    sobigfish  
       2017-02-01 13:12:28 +08:00
    开发框架还不如开发应用,歪楼问下:有什么 java 的比较好的开源电子商城么?
    jfinalshop 是 gpl 的 而且貌似不适合手机浏览(不是说 html/css 是说适合手机的支付)
    NvSylvanas
        37
    NvSylvanas  
       2017-02-01 14:07:00 +08:00
    厚积而薄发
    Totoria
        38
    Totoria  
       2017-02-01 14:34:45 +08:00
    百度和 Google 真的仅仅是喜好问题吗?
    davidway
        39
    davidway  
    OP
       2017-02-01 16:32:02 +08:00
    我发现我的方向
    @woojuno Spring 确实不是一个人写的。我只是想理解他的概念,然后自己试着写一个 spring

    @q397064399 就是查了文档后,想自己写一个出来,就这样的想法
    @Cbdy 嗯,对,我其实开这篇帖子是想请教学习方法
    @limbo0
    那不是 C 语言的思想的话那是什么?

    @CRVV 这些语言封装得更彻底,更追求业务逻辑。更扑朔迷离。其实我问这个问题的愿意是看着
    别人的面试题,也是一脸懵逼,不知道他考我的是什么。
    bombless
        40
    bombless  
       2017-02-01 16:39:40 +08:00 via Android
    一般的项目你要干起来就是比较抽象的,没有文档的时候经常是看着名字猜用途 哈哈哈
    davidway
        41
    davidway  
    OP
       2017-02-01 16:41:33 +08:00
    @bombless JAVA 还比较好,业务的东西基本上能看到源码
    sheep3
        42
    sheep3  
       2017-02-01 18:49:57 +08:00
    不要把框架想的那么可怕,重要的是善于在发现问题的时候去找到出现问题的真正原因。

    说白了就是会从源码上追溯就好。慢慢来,先做好功能的实现,代码量积累起来了就好。
    davidway
        43
    davidway  
    OP
       2017-02-01 19:37:31 +08:00
    @sheep3 嗯,我后来也想明白确实是这样的,谢谢你
    Weixk
        44
    Weixk  
       2017-02-01 20:00:46 +08:00
    C 的完整的项目也是要用很多第三方库文件,对比一下就知道反而是 Java 的项目比较容易理解。
    neoblackcap
        45
    neoblackcap  
       2017-02-01 20:20:12 +08:00
    编程只是解决问题的方法,不要将编程看成脱离实际的工作,我们绝大多数不是在搞研究,因此我建议是,底层细节等你需要用到的时候再去学,有空才学也可以。努力成为一个领域的专家,比如你是你在开发后台的审计系统,那么你就去研究好审计的业务逻辑,这个才是真正的厉害的的本领。
    库跟框架都是平常大家在写业务逻辑抽象整理出来的,急不来。你对业务逻辑不熟的话,很有可能就搞出不符合大家使用的为了框架而作的框架
    davidway
        46
    davidway  
    OP
       2017-02-01 20:34:23 +08:00
    @neoblackcap 对头,我就是不理解 struts2 帮我做了什么,用了什么做到拦截请求并把请求放到生成类的方法里, spring 我也不知道加了个注解,他为什么就能帮我 new 了出来,而且 new 的都很对头。
    sunsetwan967
        47
    sunsetwan967  
       2017-02-01 20:55:57 +08:00
    @weiweiwitch 说得好,学习一下。
    yidinghe
        48
    yidinghe  
       2017-02-01 21:27:25 +08:00   ❤️ 1
    我从毕业算起,做了 11 年的 Java 开发,但毕业之前自己学了两年 .net 。自学编程是有套路的,我个人总结主要是两点,一是找事做,给自己写应用,或者论坛上有人提出来的问题,尝试解决下;二是拓展视野,有的问题牵涉到其他领域的,就系统的了解下,这绝不是浪费时间,比如学习 Servlet 免不了要接触 HTTP 协议,那就系统的了解下 HTTP 。
    davidway
        49
    davidway  
    OP
       2017-02-01 22:21:05 +08:00
    @yidinghe 我也试着这样做过,发现论坛别人提出来的问题,涉及的很多我不会的知识,然后我发觉确实是自己的知识的系统性不够完善,很多东西在我的头脑很碎片,然后想找到这个系统。这时候我通常会找书,我通常都找下那些经典书,然后至少理解一下书中的每一个小节它是什么。这个算不算一个比较好的了解系统的方法?但总觉的如果没有写成代码不实在,感觉没不确定自己是否有理解到作者想表达的是什么。。。不过书中通常没代码,或者例子。这也是我比较蛋疼的地方
    yang2yang
        50
    yang2yang  
       2017-02-01 22:30:10 +08:00
    感觉看 lz 就想在看自己一样。。
    davidway
        51
    davidway  
    OP
       2017-02-01 22:53:38 +08:00
    @yang2yang 哈哈哈,现在也是一样的迷茫吗
    likuku
        52
    likuku  
       2017-02-02 02:26:52 +08:00
    @davidway JAVA 因为其复杂性 /各种现成包 /代码风格严谨 /便于产业化,实用对 JAVA 优化的 IDE 可以大幅度提高编码效率。

    常言道“ JAVA 很多时候编辑个配置文件就可以直接用了“
    ilumer
        53
    ilumer  
       2017-02-02 04:17:46 +08:00 via Android
    EE 这些我也是不是很懂,只是应付学校的学了一个月,但是楼上真的是瞎鸡巴说 @q397064399,抱歉说的准确
    popu111
        54
    popu111  
       2017-02-02 06:20:32 +08:00
    @Reficul 现在 Golang 用 LiteIDE 简直不能更舒服,不止查文档很方便(毕竟 go 自带 doc ),而且资辞直接 Ctrl 追进标准库代码里面去看实现,麻麻再也不怕我看不懂文档啦~\(≧▽≦)/~
    tajpure
        55
    tajpure  
       2017-02-02 08:06:21 +08:00
    @cs419 JVM 的实现也没有那么复杂,你看别人用 18K 行代码,加几个轮子不就造了个能跑 Tomcat 的 JVM , http://llvm.org/pubs/2008-09-LadyVM.pdf
    ayanamist
        56
    ayanamist  
       2017-02-02 09:26:50 +08:00   ❤️ 1
    蛮奇怪,难道楼主写 C 的时候是直接连 libc 都不用的,哪怕全部直接用 syscall ,都一样会有楼主描述的问题呀,各个 syscall 之间的坑都很多,文档也就只有 man 而已,例子更是稀少。
    claysec
        57
    claysec  
       2017-02-03 10:53:49 +08:00
    我和楼主也一样。。一脸懵逼。只会粘贴复制
    sampeng
        58
    sampeng  
       2017-02-03 11:12:54 +08:00
    不要给自己定目标。。。相信我,程序员给自己定目标的意义就和项目会上估时间一个道理。
    换句话说很容易把事情想的特别容易。然后在碰到挫折或者所谓的坑会有挫败感,时间长久成了迷茫。
    我的想法是,换个做法。把事情捏碎了去做。 do and done 是最好的解决方案。想做框架。先搞明白这个框架需要解决什么问题,每个问题分别对应哪些 feature 。每个 feature 需要如何去实现,每个实现需要什么样的数据结构和算法。
    用设计语言的话来说就是思考要从上而下,做事是从下而上。一个很小的数据结构和算法可能半天就完事了。然后无数个数据结构和算法就可以对应一个 feature 。。堆积多了就成你想要的东西了。

    别整天脑子里想着我要实现一个牛逼的框架。没意义,捏碎了去做。
    sampeng
        59
    sampeng  
       2017-02-03 11:13:43 +08:00
    ps 。。。别用百度。。。请用 google +1.。不会翻墙的程序员,并且不想着如何去翻墙的程序员。会被其他程序员尤其是有能力的 leader 内心鄙视 100 遍
    davidway
        60
    davidway  
    OP
       2017-02-05 00:52:01 +08:00
    @sampeng 对,确实应该要一个知识点一个知识点踏步踏步上去。这些知识点是最好从官方文档那里整成一个系统,然后去慢慢细分去掌握吗?
    crui923779628
        61
    crui923779628  
       2017-02-12 19:42:11 +08:00
    楼主可以加个好友交流交流吗?Wechat 923779628
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2661 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:13 · PVG 19:13 · LAX 03:13 · JFK 06:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.