Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java程序员必须掌握的核心技能有哪些?

Java程序员必须掌握的核心技能有哪些?

作者头像
马士兵的朋友圈
发布于 2020-09-18 02:29:01
发布于 2020-09-18 02:29:01
6380
举报

私下里,经常有一些读者问我:“二哥,作为一名软件开发者,我应该掌握哪些技能,才能被领导赏识呢?”说实话,我心目中很多选项,不少于 20 个,但我斟酌再三,只挑选了其中最能让你受益的 8 个,不仅能让领导赏识你,还能让领导给你升职加薪。

01、吃透一门编程语言

这个技能看起来似乎没有必要强调,毕竟程序员不懂一种编程语言也说不过去啊。我之所以再次强调是怕你“贪心”,以为技多不压身就拼了命的学很多种编程语言。

有个大二的学生就曾经问我:“你好呀,老哥,有个问题想咨询一下您,我专业学的是 C#,但听说以后不太好就业,所以就自学了一段时间 Python,但感觉越来越混乱了,您有什么好的建议吗?”

我只能说不混乱才怪。编程语言虽然有相似的语法,但毕竟是不同的编程语言啊,之间还是有很多差异的。对于初级程序员来说,切勿贪多,先把一门编程语言吃透再说,等你有了融会贯通的本领,再去学新的编程语言也不迟。

我刚刚查了一下(见下图),C# 还是挺热门的编程语言,没到不太好就业的地步,别随便听信别人的话,要学会自己去判断。Python 是门不错的编程语言,增长势头很猛,但远没到那种独霸天下的地步。

学校有不尽人意的地方,但不至于蠢到让学生学一门已经被市场淘汰的编程语言。在这一点上,我宁愿站在支持学校的立场上,否则就太糟糕了。

我承认,学霸学什么都快,不仅学的快,还比平常人学得好,学得多,因为他有一套自己的学习方法,但大部分学生并不具备这种条件。如果你对自己没有这种认知的话,很可能会陷入泥潭。

因此,我给出的建议是,深入并且专注于一种编程语言,当你对使用这种编程语言充满信心时,再去学其他的编程语言也不迟。

02、整洁的代码

当你学会一门编程语言之后,接下来要考虑的事情就是让你编写的代码变得更整洁,更易于理解,更富有艺术。关于艺术,我想到了一段话,王小波在他的杂文《用一生来学习艺术》说的:

我念过文科,也念过理科。在课堂上听老师提到艺术这个词,还是理科的老师次数更多:化学老师说,做实验有实验艺术;计算机老师说,编程序有编程艺术。老师们说,怎么做对是科学,怎么做好则是艺术;前者有判断真伪的法则,后者则没有;艺术的真谛就是要叫人感到好,甚至是完美无缺;传授科学知识就是告诉你这些法则,而艺术的修养是无法传授的,只能够潜移默化。

不得不说,偶像就偶像,把艺术的真谛阐述得很清楚。我见过不少臃肿的代码,它们让我想起“裹脚布”这三个字;我也见过不少整洁的代码,它们让我想起“艺术”这个词,我想创造出它们的程序员一定富有工匠精神。

Elliot Chance 曾表达过这样一个观点,他说:“要分辨两个程序员的优劣,就是给他们一样的时间,越好的程序员写出来的代码越少(当然是可以运行的)。”

我同意他的观点。越多的代码并不一定代表着认真,有可能代表的是懒惰,懒得去思考,才会写出臃肿的代码。如果我们程序员没有这种(写更少代码的)追求的话,那我们的编程技艺就只会原地踏步,长此以往的后果就是各种避免重复造轮子的第三方类库就不会出现。

03、算法与数据结构

说起来惭愧,在很长的一段时间里,我对算法和数据结构存在着很大的偏见,认为它们就好像悬挂在夜空中的月亮,虽然很美,但却很遥远。

因为这种偏见,在敲代码的过程中吃了不少的闷亏,经常遇到一些实际的问题,由于无法充分利用数据结构将数据之间的关系通过合适的算法策略进行有效地存储转换,就导致程序的性能很低。

作为一个吃过亏的男人,我必须要负责任地提醒你,趁有大把的时间和精力,多投入一点到数据结构和算法上面去。基础知识就像是一座大楼的地基,它决定了我们的技术高度。数据结构和算法就是最重要的基础知识,学习它们的过程就像是在打地基。

举个例子来说,假如你要在一个列表中对元素进行排序,那么可采用的算法就有下图中的这 10 种,每种算法所花费的时间,所占用的内存都不尽相同。换句话说,如果你不能够熟练地掌握算法和数据结构,就很难找出一个优雅的解决方案。

长期来看,大脑思考能力是一个人最重要的核心竞争力,而算法是为数不多的能够有效训练大脑思考能力的途径之一。有了这项能力,很多别的程序员解决起来很困难的编程问题在你这里就会迎刃而解。

04、基本的数据库知识

虽然软件开发人员更应该专注于程序设计而非编写和优化 SQL(应该交给专业的数据库管理员负责),但在我们国内,只有顶尖的企业才会有数据库专家。扎心了。如果你想要在软件开发这条道路上走得更高更远,懂一些基本的数据库知识是必须的,比如说:

如何将业务中的对象属性转化为数据库字段;

如何从数据库中检索数据,并将数据集拼接在一起;

如何往数据库中插入、修改、删除数据;

索引的数据结构及原理;

SQL 语句的优化;

等等。

如果再懂一些数据库分库分表的中间价,那你可能就会成为团队的宝贝了,毕竟所有的应用程序都要与数据库交互,另外,数据库是系统最先出现性能瓶颈的地方——总有你大展身手的时候。

05、技术框架

除了要吃透一门编程语言,我强烈建议你再学习一个技术框架。如果你像我一样是个 Java 后端开发人员的话,Spring 的系列框架(Spring MVC、Spring Boot、Spring Cloud)就不得不学了;如果你是一个 C# 开发人员,.NET Framework 就不得不学了。

技术框架是一组通用类库的集合,它帮助我们让编程任务变得更简单,毕竟轮子替我们造好了。假如说没有技术框架的话,我们就好像坐着马车前行,而不是飞机、高铁和汽车,开发效率就要大大降低了。

06、源代码管理工具

记得我刚参加工作那会,用的源代码管理工具叫做 CVS(Concurrent Versions System),估计有不少读者没听说过,非常非常难用。后来迁移到 SVN(Subversion)后,情况总算是有了很大的改善,它不仅支持 Eclipse,还有专属的客户端,除了管理源代码,还可以管理许许多多的文档。

每天上班的时候先从服务器获取最新的代码,然后开始一天的工作,下班走之前切记要提交一次代码,否则就很容易耽搁团队其他成员的开发进度。

现在呢,有了 Git,它是一套开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。它与 SVN 最大的不同之处,在于每个开发者的电脑上都会有一个本地仓库(Local Repository),即便是没有网络也一样可以提交版本,查看版本,以及比较版本;等到网络连接上之后,再提交到服务器端。

源代码管理工具最大的好处就在于它可以帮助我们保留不同文件更改的历史记录,并且允许多个开发人员对同一文件的代码进行合并。举个例子来讲,小王完成了一项任务,然后提交了代码;但他觉得有待改进,于是他重新修改了代码并提交到了版本库,谁知道,程序上线后出了 bug,这时候源代码管理工具可以帮助他快速回滚到之前正常的版本。否则的话,小王只能被祭天了。

07、测试

测试真的是太重要了!但并不是所有的开发者都这样认为,这种感觉在我回到洛阳后尤其强烈。竟然有团队成员不经测试就把代码提交到代码库,并且是会报错的那种,我天呐,遇到这种队友我也是醉了。

在我回来之前,是在一家日企工作,测试是一项非常重要的工作,占用的时间比代码编写的时间多多了。从单元测试集成测试,所有的测试结果都要整理成册,所有的边界条件都要测试到,哪怕你觉得完全没有必要。但正是这种一丝不苟的态度,成就了日企软件高质量的美誉。

一个优秀的开发人员绝不允许他的代码在交给别人之前不经测试,我想这是不容置疑的。

08、调试

说句实在话,在我做程序员的这 10 年里,调试代码的时间比编写代码的时间要多得多。因为解决 bug 的难度要比创造 bug 难得多,首先你要先复现问题的场景(真的是难啊),要复现问题就需要你拥有出神入化的调试技巧,否则只能锤爆鼠标,然后大喊“为什么,为什么,为什么我的代码无法正常运行呢?”

入门级的调试很简单,你只需要在发生问题的代码处打个断点,然后再跑一跑,就能从堆栈信息和代码的上下文中发现问题。难度再上升点的话,就需要你创造代码执行的条件;再难的话,你甚至需要内网穿透,比如说微信公众号开发;再再难的话,就不是一句半句能说得清楚了。

总之呢,调试就是为了让你弄清楚代码不能正常运行的真正原因,如果你的调试技巧不过关的话,甚至有可能会被表象蒙骗,从错误的角度去修改 bug,从而引发更多、更大的问题。

最近,有不少读者问我是怎么学习的,那我干脆就把我看过的一些优质书籍贡献出来:

计算机基础入门推荐:《程序是怎样跑起来的》、《网络是怎样连接的》、《计算机是怎样跑起来的的》

进一步认识计算机网络:《计算机网络:自顶向下》、《图解http》

数据结构+算法入门:《大话数据结构》、《阿哈算法》

算法进阶:《算法第四版》、《编程珠玑》

由于我是 Java 技术栈的,顺便推荐几本 Java 的书籍,从左到由的顺序看到

Java:《Java核心技术卷1》、《编程思想》、《深入理解Java虚拟机》、《effective Java》、《Java并发编程的艺术》

数据库:《mysql必知必会》、《MySQL技术内幕:InnoDB存储引擎》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
软件开发者升职加薪的 8 项技能
私下里,经常有一些读者问我:“作为一名软件开发者,我应该掌握哪些技能,才能被领导赏识给我呢?”说实话,我心目中很多选项,不少于 20 个,但我斟酌再三,只挑选了其中最能让你受益的 8 个,不仅能让领导赏识你,还能让领导给你升职加薪。
沉默王二
2020/03/25
3700
@程序员,请掌握这些核心生存技能
以上是一个读者流年似水的提问。我把他的问题置顶了,但一直没想好怎么回答,因为问题太过笼统了。后来,他也可能意识到了这一点,就又给我发了一条微信:
沉默王二
2019/11/12
3800
@程序员,请掌握这些核心生存技能
新手程序员必备10大技能
如果你已经有一段时间的编程经验,或者正准备学习编程,那么可能会考虑的是:怎样才能成为一名优秀的程序员?计算机专业的毕业生如何为软件开发和编程职业生涯做准备?职场对于初级开发人员有哪些期望?这是临近毕业或初入职场的新手程序员们密切关注的问题。
陈哥聊测试
2021/07/14
1.9K0
新手程序员必备10大技能
Java程序员必备技能《上》
最近,有不少朋友来找我聊,作为java开发者,到底需要掌握哪些技能才能在这行业混下去,不至于找不到工作。
田维常
2024/04/17
3880
Java程序员必备技能《上》
每个优秀程序员必须具备的技术技能
我特别支持软件开发者在他们掌握技术技能的同时去学习“软技能”——事实上,我写了一本关于这方面的书——但是不可否认的是:技术技能很重要。 我的意思是,如果你不能编写代码和开发软件,那么你学习众多软技能有
李海彬
2018/03/23
8180
每个优秀程序员必须具备的技术技能
Java程序员必看书籍推荐
不管你是转行来学习Java编程,还是你本来就是计算机专业并且继续在这一领域深耕的。除了,大学专业课程的学习以及工作中的实践之外;业余时间的充电,成了技术人员提升自己的必选之路。有的人选择利用金钱换来时间去报学习班培训,有的人利用自学。那么,自学的方法很多种:阅读书籍资料、网上各种技术论坛博客、视频教程等。
程序大视界
2020/07/21
1.8K0
Java程序员必看书籍推荐
「编程羽录」上线,程序员必备的这些技能你能get到嘛?
好久不见,给大家带来个好消息,小羽的全新专题「编程羽录」系列正式上新,主要是介绍一些关于面试题和经验总结的文章。
浅羽技术
2021/05/13
4950
「编程羽录」上线,程序员必备的这些技能你能get到嘛?
很认真的聊一聊程序员的自我修养
程序员提高自我修养是为了什么? 程序写的好有人崇拜,有妹子喜欢?还是到博客、论坛、社区发表文章进行分享获得就?我想这是少数人的追求,也是更高的追求,在这之前 我认为 在中国,程序员提高自我修养目的 是为了 1、更好的融入工作,减少困难,增加成就 2、稳步的提升能力,提高收入,达成财务自由 2、站在更高的层面看待自己的学习和工作,树立更加适合的人生观价值观,家庭幸福,生活愉快 说的更通俗一点,就是用更加合理的方式和方法,赚取到更多的收入 何为程序员的自我修养? 正面论述很难说清楚,反向描述可能更通俗易懂
用户1667431
2018/04/18
7560
1024的程序员是蒙娜丽莎
朱光潜先生说:美是客观和主观的统一。哲学角度不难理解,美也必须拥有形象性,感染性,超功利性,在此前提下,美可以是自然,人类。宇宙万物把真、善的本质形象化,让人对其爱慕,观赏有喜悦。
程序大视界
2022/12/19
2710
1024的程序员是蒙娜丽莎
程序员必知的10个工具!
每个程序员或软件开发人员都必须对源代码管理存储库有很好的了解,因为你需要每天签入、签出代码。而且,要成为一个更好的开发人员,还应该了解诸如分支和合并之类的高级概念。
liuxuewen
2018/10/08
2.3K0
程序员必知的10个工具!
Java程序员修炼之路
大多数人选择Java可能只是因为听说Java前景好、Java比较好找工作、Java语言在TIOBE排行榜上一直位于前三等等之类的原因,但是Java具体好在哪里,心里却是没有什么概念的。其实我选择Java也是出于以上的原因,但是现在确实真正地爱上了Java。
Java团长
2018/08/06
7210
同学,你也可以成为一名程序员
2009年大一,开始学习C语言,应该和大多数人一样,不知道C语言到底能干什么,上机实验也就是照着代码敲敲,没得感情,当年的C语言考试考了一个冒泡排序。
酒馆丁老师
2020/11/30
4350
同学,你也可以成为一名程序员
我给所有新手程序员的建议
欢迎来到编程的世界! 1. 编程真的很难 无论你多擅长编程,唯一能降低开发速度的,就是学习和解决问题的能力。而当你越是擅长编程的时候,这种情况就可能越明显。这是一个非常吸引人的特质—你永远不会厌倦编程。如果你厌倦了,那么你的做法肯定是错的,你应该去总结思考你在重写的代码。 2. 编程也会是最令人沮丧的事情之一 编程的一般步骤是:尝试解决问题 受挫 更努力地尝试 回顾 顿悟之后最终把程序运行起来。感到沮丧太正常了,而且这种感觉永远不会完全离去。(当你能力更强的时候,你将会面对更加困难的问题,因此也会存
企鹅号小编
2018/02/01
6260
我给所有新手程序员的建议
Java程序员如何提高自己的编程能力
编程对于一部分人来说是一项工作,但对于真正喜欢编程的人来说,不仅仅是一种知识,更重要的是一门手艺。其实大部分人学习编程都希望自己的工作生活变得更好。既然明白了编程的意义,那么,千万别把编程看作知识,计算机科学是知识,但是编程是手艺。既然是手艺就要用学手艺的思路去学习。 学习不要搞单独,不论是代码新人或者有经验的程序员,都可以从一个好的网站都受益。 如果你是编程新人: 你一定会有这种错觉,编程给你的感觉就像前一秒天堂后一秒地狱。学习编程是个非常有趣的、有挑战性的事儿,但是也常常伴随着沮丧、疲惫、压力重重。
企鹅号小编
2018/03/01
1.2K0
Java程序员如何提高自己的编程能力
Java程序员的成长之路
本篇介绍的是大体思路,以及每个节点所需要学习的书籍内容,如果大家对详细的技术点有需要,欢迎留言,后续我在写一篇每个阶段需要学习掌握的技术点。
良月柒
2019/03/20
4920
Java程序员的成长之路
java程序员从小工到专家成神之路(2020版)
java作为第一大编程语言,可谓源远流长,一代又一代的java程序员前仆后继走在java学习的路上。java程序员的学习之路在2020年又有什么变化呢?
程序那些事
2020/07/08
4100
撩课-Python-每天5道面试题-第1
一. 尽可能详细的描述出一个应用软件, 比如QQ, 在计算机中运行时涉及的软硬件, 以及说明我们编程的侧重点? 电脑开机, 从硬盘中(外部存储设备)加载操作系统(系统软件)到内存(内部存储设备), 并
py3study
2020/01/20
4060
【编程指导】新程序员必须具备的十个基本技能
没有几个学生能100%为自己的第一份真正的工作做好准备。如果你不想成为其中之一,请学学以下这10项无需手把手指导就能学会的基本技能吧! 1、版本控制系统(VCS) VCS 也许是计算机课程最大的疏漏。这些课程光记得教如何写代码,但却往往忘记教学生如何去管理代码。 每一个程序员都应该懂得利用Git或 Subversion 有效地创建 repository(仓库),编辑与提交代码,进行分支与合并,了解项目工作流。 2、学会写作 身为程序员要写的不只有代码。你还要写项目的发布说明,给版本控制写提交消息,在系统里面
程序员互动联盟
2018/03/13
1.2K0
一个优秀的程序员应该养成哪些好的习惯?
多次担任技术面试官,遇到很多优秀的名校毕业生。凡此种种,从自己和别人身上总结出如下一些好的习惯。
范蠡
2023/01/04
1.4K2
一个优秀的程序员应该养成哪些好的习惯?
成为优秀工程师,有什么必修的“基本功”?
有些人觉得这门课很虚,似乎都是一些条条框框的知识点。比如说书中提到的软件过程、敏捷方法、需求分析等等内容,读起来有些道理,但细想又觉得是正确的废话。
java思维导图
2019/03/07
8800
成为优秀工程师,有什么必修的“基本功”?
相关推荐
软件开发者升职加薪的 8 项技能
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档