潜水了很久,水一个帖子:一个刚毕业的 Java 程序员的迷茫 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
davidway
V2EX    Java

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

  •  
  •   davidway 2017-01-31 21:32:02 +08:00 7391 次点击
    这是一个创建于 3203 天前的主题,其中的信息可能已经有所发展或是发生改变。
    为什么迷茫?之前写 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 让你干什么你就干什么,萌萌哒就可以了。
    run2
        36
    run2  
       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 而已,例子更是稀少。
        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     Solana     2470 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 04:27 PVG 12:27 LAX 20:27 JFK 23:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86