长沙思途学校吧 关注:57贴子:1,866

思途知道——一个合格的程序员,需要哪些必备技能?

只看楼主收藏回复

对于一个Java开发来说,编程技能毋庸置疑是很重要的。
但是,除了基本的编程开发能力,其他方面的能力也是体现一个程序员的能力的很重要因素。
比如,问题排查能力、线上运维能力、项目管理能力、协调沟通能力等。
本文,主要来简单介绍一下,作为一个合格的Java开发,除了自身技术成长之外,还有哪些方面可以提升。


1楼2018-05-25 10:18回复
    类开发技能
    第一类,并不是纯coding技能,但是也和开发相关,我称之为类开发技能。


    2楼2018-05-25 10:18
    回复
      2026-07-02 05:48:38
      广告
      不感兴趣
      开通SVIP免广告
      Linux系统
      很多人的开发机器是windows,所以平时也基本都是图形化开发界面。但是,这并不意味着你就不需要基本的Linux技巧。
      因为,你开发出来的应用可能部署在一台Linux机器上,很多时候你要和这台线上的Linux服务器打交道,所以,Linux系统的安装、开发环境的搭建、Linux常用命令以及Linux环境下项目的部署启动和调试等都是必备技能。
      否则,一旦线上出点什么问题,你就会束手无策了。


      3楼2018-05-25 10:18
      回复
        单元测试
        我在《单元测试的重要性》中说过,单元测试是很重要的,而且,好的单元测试可以帮助我们节省很多开发时间。单元测试是保证软件可以更好的持续集成和持续交付的一个基本前提。
        单元测试也涉及到很多技巧等,比如使用Mock进行单测、使用内存数据库进行单测等。
        一个开发人员,要有写单测的习惯,也要掌握基本的单测写法技巧。这样可以尽早的发现问题。


        4楼2018-05-25 10:18
        回复
          版本管理
          我相信基本上所有的公司的代码都会通过版本管理工具进行托管的,不管是Git还是SVN。
          而且,现在很多技术都通过GitHub进行开源和共建的,版本管理工具的使用也是一个Java开发必备的基本技能。
          版本管理也有很多学问在的,比如到底什么时候应该提交、提交的时候 Commit message 应该如何书写,如何解决代码冲突等都需要熟练掌握的。


          5楼2018-05-25 10:18
          回复
            构建工具
            和版本管理一样,企业级开发的依赖管理也不再是那种原始的进行Jar包的导入导出。而是借助于像maven或者gradle等工具。
            构建工具的使用同样重要,而且一个合格的开发人员,要掌握如何进行依赖冲突的检查、如何进行依赖仲裁等。


            6楼2018-05-25 10:19
            回复
              代码调试
              有人调侃程序员,一半的时间在写bug,另外一半的时间在debug。这句话听起来挺扎心的,但是也恰恰说明了debug的重要性。
              虽然说程序员花费一半的时间在写bug是有点过分的,但是,任何程序员的代码也不可能一气呵成,越大型的项目bug可能就会越多,在线下开发的时候,debug是最有效的问题发现和解决的手段。
              代码调试其实比较简单,只要设置好端点,跟着程序一步一步的执行看效果就好了。只要学会运用IDE提供的工具就可以了。


              7楼2018-05-25 10:19
              回复
                问题排查与解决
                关于问题排查,这个能力真的是非常非常重要的。
                发生问题的时候,就是检验程序员能力的时候。这是最能区分程序员的水平的技能了。一个问题往往可能会涉及到很多个方面的知识。
                阿里有一个神级人物,花名多隆。在淘宝初期,不管遇到什么问题,他基本都能解决。他之所以被称之为神,就是因为他的问题排查和解决能力。如果你能在两天内解决一个组两周都没解决的问题,那么你也会被称之为神。
                很多时候,解决问题并不难,难的是定位问题。这会涉及到很多知识,知识储备很重要,但是,在知识储备还不够的情况下,至少可以从以下几个方面来提升自己的能力。
                1、日志的查看
                2、分析Java的堆栈信息
                3、集群监控指标的查看


                8楼2018-05-25 10:19
                回复
                  2026-07-02 05:42:38
                  广告
                  不感兴趣
                  开通SVIP免广告
                  非开发技能
                  还有一类技能,可能就和开发完全没有关系的,我称之为非开发技能。这些技能往往决定着一个开发人员到底能够走多高。


                  9楼2018-05-25 10:19
                  回复
                    目标导向
                    我把目标导向称之为一种能力,是一种一个人应该具备的基本能力。而且,也是可以锻炼和培养出来的。
                    目标导向型的人,就是做事之前先明确目标,再寻找实现目标的方法,最后动用一切可以利用的资源通过各种方法来实现目标。
                    目标导向型的人,目标是明确的。
                    目标明确的人,做事的时候,不会轻易动摇或者放弃,为了目标能克服困难坚持到最后。
                    目标明确的人,做事的时候,会去思考、尝试实现目标的各种方法。
                    目标明确的人,做事的时候,会去发现、创造、借用一切能够实现目标的资源。
                    不断给自己设定目标,做一个目标导向的程序员吧。如果,你非要把目标导向理解为KPI导向我也不拦着。主要是有目标,为之而努力,我觉得就是OK的。


                    10楼2018-05-25 10:19
                    回复
                      时间管理
                      对于任何人来说,时间管理都是很重要的,对于程序员来说,尤其重要,因为我们可支配的时间并不多。
                      如何正确的管理自己的时间,是一门很深的学问。有些人加班加点,甚至996的工作方式。但是最终还是得不到一个好的结果,这很大程度上是由于时间管理的不够好,大部分时间都在“瞎忙”。
                      很多时候,苦劳在功劳面前会略显沧桑。
                      一个程序员的一天会有很多事情要忙,在工作上,一天可能排了几个需求评审、设计评审、交互评审、TC评审等,还要排查问题,还要写代码,有的时候还要充当产品、运营、甚至客服的角色。在生活中,还要陪伴家人、充实自己,锻炼身体等。如何安排好自己的时间是十分重要的。
                      关于时间管理,我有个建议,那就是把自己的手上的事情排列好,一段时间只做一件事。


                      11楼2018-05-25 10:20
                      回复
                        快速学习
                        在这个技术高速发展的时代,每天都有新技术在推出。一个好的开发人员要保证自己永远不会被淘汰,就需要不断的去学习。
                        而学习无疑是要花费很多的时间的。那么,快速的学习能力对于一个时间本就不多的程序员来说也是至关重要的。


                        12楼2018-05-25 10:20
                        回复
                          英语能力
                          首先,我们的日常开发的代码都是基于英文的,目前很多技术也都是外国人发明的。也就是说很多技术刚出来的文档都是英文的。
                          拿最近最火的区块链举例,不管中本聪是不是日本人,他发布的区块链白皮书也是英文的,英语能力好的人可以马上学习到新的知识,英语能力不好的,可能看到的都是二手翻译资料了。
                          英语好的技术人员,靠翻译书籍也能赚很多钱。而英语不好的程序员,给变量命名都费劲。


                          13楼2018-05-25 10:20
                          回复
                            项目管理
                            每一个程序员,都有做PM的那一天,不管负责的是大项目还是小项目。都需要很好的项目管理能力才行。
                            要知道如何预估风险、如何预估成本、如何保证项目按时上线、如何管理项目团队,这都是有很多学问在的。
                            任何一点掌握不好,都有可能导致项目风险甚至项目失败。
                            项目管理这种事情,项目如期发布可能并没有功劳,但是一旦项目delay,那就有罪过了。
                            不会项目管理的程序员,最多也就是一个高级程序员,无法晋升为专家及以上级别。


                            15楼2018-05-25 10:20
                            回复
                              2026-07-02 05:36:38
                              广告
                              不感兴趣
                              开通SVIP免广告
                              理解能力
                              理解能力不好,就不能很好的理解需求。不能很好的理解需求,就可能浪费很多时间。很多时候,PD给的需求文档并不都是合理的,这种情况下,如果开发的理解能力再差一些,无法在需求评审阶段正确的理解需求,那么这个项目的结果可想而知。
                              理解能力不好,就没办法快速的学习新的知识,同样也要比别人多花费一些时间。同样是学习Java 9的Jigsaw,有些人就能很快的理解模块化的原理,有些人就怎么都想不通。这就是因为理解能力的不同。


                              17楼2018-05-25 10:21
                              回复