ITPub博客

首页 > 数据库 > 数据库开发技术 > 程序员需要掌握哪些隐形技能

程序员需要掌握哪些隐形技能

原创 数据库开发技术 作者:安瑞哥是码农 时间:2022-09-06 19:55:35 0 删除 编辑

想写这样一篇文章的灵感来自于最近私信我的一些小伙伴,从他们跟我交流的过程中发现一个问题,就是对于很多我认为理所应当要掌握的【基础知识】还没有掌握到位,甚至是不知道,这样就导致一个问题,就是当你去做一件具体事情的时候,你会被【束手束脚】,被各种基础性困难所左右而痛苦不堪。

举个栗子,如果你想学好大数据开发,那么我认为第一件你要会的事情就是:安装Hadoop集群,听着好像就一件事情对不对,但是你要知道,想把这件事情做好,你得具备哪些隐形技能吗?

其实不仅仅是安装Hadoop集群,作为程序员,工作中很多被安排的需要你从0到1的任务,比如让你设计监控某个系统或者模块的运行指标,探测出该系统或者模块运行过程中的峰值、瓶颈、异常情况等,并根据探测出的结果,科学的给出优化建议或者制订优化方案。

类似的这种需求其实在工作中有很多,大部分小伙伴会以“没干过”而直接拒绝,你这样虽然避免了一份烫手山芋,但同时也丧失了一次锻炼自己的绝佳机会,很多程序员之所以平庸,原因在于无法走出舒适区,眼光永远只停留在自己那一亩三分地上。

而不愿意去尝试自己没做过的事情,除开人性本身的懒惰这个因素外,其实还有一个重要原因在于:基础太弱,导致做事情寸步难行。

因为要求你去做的这些事情,并不是你动动手指,敲几下键盘就能轻松搞定的,它其实是一个【系统性】任务。因为是系统性工作,所以也就意味着它有很多的【隐形步骤】和很多的【背景知识】,而这些隐形步骤和大量的背景知识需要你私底下去思考、搜索、积累,沉淀、才能最终丰富的【底层技能】。


|底层技能的重要性
我们知道现在找工作,尤其当下的环境下,各大用人单位都更愿意找【有经验的】候选人,根本原因在于,这样的人已经经过众多实际项目的锤炼,动手能力是基本上可以得到保障的。

比如,当我交给你一项任务时,起码不用担心一些程序员必会的基础软件你不会用、不知道如何创建一个基础的软件工程、不知道如何使用代码管理工具、不知道如何构建项目SDK、不知道如何将开发完的代码上传到服务器运行,遇到一些简单问题不知道如何定位和寻求解决方法...

以上这些,反映的是一个程序员的【底层技能】,这些能力,面试不会专门问,上学时候老师也不太可能教,但是在实际工作中却一定会用到的,而如果一旦你在这方面露怯,就很容易被身边的同事嘲笑和鄙视。

那么,为了让自己在工作中表现的比较【体面】,想在程序员这条道路上走的比较久远,我认为以下这些隐形技能,是一个合格程序员必须要掌握的。


|对计算机基础硬件的了解
有同学会觉得奇怪说,我明明是一个软件开发,为什么需要对硬件要了解呢?

是的,需要,而且很有必要。这个其实对于很多学计算机的同学来说,在大学期间的【计算机组成原理】这门课中已经学了,只不过很多同学压根就没有认真学,或者没能认识到这门课的重要性。

对于一个从事大数据开发的同学来说,对计算机中的:内存、CPU、磁盘、带宽等这些基础硬件的理解非常重要,它能够让你在写程序时,清晰的知道当前的代码逻辑与计算机硬件的对应关系,以及在程序运行过程中出现性能瓶颈时,能够清楚的知道是哪个硬件资源导致的问题。

比如最近有很多同学在私底下安装虚拟机,准备部署Hadoop集群,想要部署出一个漂亮的集群,其实这里就需要你对内存、CPU、磁盘、带宽这些概念有比较清楚的认识,知道一个虚拟机要分配多大的内存,分多少个核的CPU,以及对应给多少磁盘空间。

各个指标如何分配,不是自己灵机一想,而是需要根据你当前电脑配置,再结合你的集群需要处理多大数据量来估算出来的,否则如果面试被多问几个为什么,你一定是懵逼的。

内存的大小,意味着你一次能吃进去到进程空间的数据量可以有多大,体现的是单次处理数据多少的指标;CPU核数的多少,意味着能够同时并行处理数据的并行度,体现的是效率指标;而磁盘是存储所有数据的地方,是内存的父集合,用来衡量这台服务器一共可存储多少数据量;带宽则是用来衡量数据在读取、写入、或者传输过程中能够【跑】的多快的指标。

所以,想要做一个硬核的程序员,写出性能卓越的代码,了解这些常用的硬件指标是很有必要的。


|Linux基础
要知道,现在几乎95%以上的后台应用都是跑在Linux服务器之上的,而你写的大数据应用代码,最终也是要运行到Linux之上的。

因此,会一些基础的Linux命令和简单使用也是一个程序员的必备技能。还是拿部署Hadoop集群来说,我看很多同学这个过程中充满了坎坷,根本原因在对Linux过于生疏,一会不是遇到这个问题,就是一会碰到那个不会的,而这些都是一个程序员从菜鸟进阶的必经之路,我当年也是安装部署了无数次之后才能做到现在的熟能生巧的。

对于现在主流的Linux系统,用得最多的是CentOS和Ubuntu两款,作为学习,二者选其一就可以。对于一个入门级程序员,需要掌握的Linux基础我认为有如下几点:
1,会安装:Windows都安装过吧,那就既然你能装windows,那么Linux你也一定可以很快学会;

2,SSH连接:Linux的玩法跟windows最大的不同点在于,Windows是直接对着本机进行操作,而Linux因为是作为服务器,通常不会放你跟前,而是通过ssh对其进行远程连接后再操作。前者面对的是花花绿绿的图形界面,后者则看到的是一个黑乎乎的命令行;

3,会一些基础命令:会查看系统运行指标、查看系统当前负载、内存使用率、CPU占用、网络带宽、会进入目录、会退出、会重命名、会删除、会查看文件内容、会vim命令修改内容,知道什么是环境变量、知道如何启停服务、如何安装软件、如何卸载、如何配置下载软件的源、修改内核参数等等;

这些说起来其实很空泛,至于如何检验你的Linux使用水平,如果你能在Linux上比较顺利部署完一套大数据集群,并能够顺利在上面运行你开发的代码,那么我认为你的Linux基础技能就算差不多了。


|处理问题的能力
这里其实包括2个方面的子能力,一个是识别问题的能力,或者叫定位问题的能力,另一个则是解决问题的能力。

发现一个现象就是,对于很多初级程序员来说,当遇到某个软件问题时,并不能正确识别到问题在哪,很多时候把问题的结果当成了问题的原因。

典型的一个场景就是,比如程序在运行过程中出现:connection timeout或者connection closed,这个错在代码调试过程中会经常遇到。

但是很多同学遇到这个问题,第一反应就是把这个报错进行复制,然后粘贴在百度搜索框中去找答案,然后在搜索出来的帖子中挨个去找解决办法,如果你运气足够好,也许能被你不小心【碰对】,但是通常情况下你很难直接找到答案。

因为像这种报错,它压根就不是问题产生的原因,而是问题导致的结果!

很多同学在遇到类似问题时,压根就不愿意去思考,不管什么问题,一股脑都甩给搜索引擎,至于能不能解决问题,全凭运气。

像这种程序出现连接的报错,先思考为什么?为什么要连接,那肯定是要进行通信嘛,而且一定是TCP通信,因为只有TCP通信才会产生连接对不对?那谁连接谁?肯定是客户端程序去连接服务端的程序,然后连接一定是通过端口进行连接对不对,那么既然连接出问题,那么第一反应应该想到的是,服务端这个端口是否能正常通信,那么如何判断?telnet ${服务端IP} ${端口号}。

先看服务端口通不通,如果不通,看是不是服务挂了,或者有防火墙导致网络访问受限;如果是通的,那么再看下程序的详细日志,看是什么原因导致的连接失败,连接数过多?还是其他什么连接参数设置错误?还是其他程序逻辑导致?

遇到问题先思考,是一个成熟程序员的基本素养,盲目的跑去网上寻找答案,只会增加你筛选信息的成本,因为没有对问题进一步聚焦,你会收到过多干扰的无用信息,而这些无用信息会严重阻碍你做事情的效率。


|表达能力
我知道,很多程序员对此是不屑的,或者说是压根就没有重视。

要知道,作为一枚打工人,你的工作成果要想被人看见,具备一定的表达能力显得特别重要,千万不要觉得我只要把代码写好,把技术练好就可以了,在职场,酒香也怕巷子深,你可能私底下做了很多工作,解决了很多棘手的问题,但是你不会表达,你不说,别人还真不一定知道。

尤其是对于上级领导汇报工作的时候,你想哈,如果一个团队有很多个人的话,领导的注意力是分散的,他不可能看到每一个人工作的全貌,只能通过你的工作汇报来了解你,这个时候,如果你不具备一定的表达能力,那可就太吃亏了。

这个表达能力在形式上有分为文字表达能力,以及口头表达能力,前者体现在比如代码注释、代码文档、方案文档、PPT撰写等。后者体现在开会时,或者面对面汇报工作时,如何既能清楚表达自己做过的工作内容,又可以做到言简意赅地抓住重点。

表达能力的好坏,是取决你升职晋升之路的关键。


|最后

当然了,想要成为一名出色的程序员,以上能力肯定是不够的,还需要太多的岗位专业技能,比如编程语言、算法等。这个我相信很多小伙伴都很清楚,因为这些要求基本上用人单位在职位描述上都写得很明确。


写这篇文章的目的,在于提醒准备入行,或者入行不久的程序员小伙伴,那些可能被你忽略的隐藏技能,是决定你职业生涯高度的重要助推器。


以上,是基于我入行程序员这么多年来的一点经验与思考,不足之处,欢迎找我交流探讨。


我这有一个高质量的大数据学习讨论群,不怎么扯淡、偶尔活跃气氛、大部分时间都在讨论技术,你在群里的几乎任何大数据相关的问题,都可以得到解答,要不要进来试试呢?拉你进群啊...


原文作者:安瑞哥是码农;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2022-02-16

  • 博文量
    228
  • 访问量
    115429