“码农” 与 “软件工程师” 的区别

前言

在当今社会中,“码农” 似乎已经成为了会写代码的这一群体的统称。但是会写代码,和能写好代码有着完全不同的含义。

汉娜·阿伦特在《人的境况》中将人类的活动分为劳动(Labour)、工作(Work)和行动(Action)。阿伦特认为,“劳动” 的目的是维持生命,其成果是消耗品,因为劳动必须是周而复始的;而 “工作” 的目的是建立世界,其成果是可持续的,因此,“工作” 是一劳永逸的。从事 “工作” 的人,阿伦特称为 “技艺人”。

而 “码农” 与 “软件工程师” 之间的区别,正是阿伦特在《人的境况》中,对 “劳动” 与 “工作” 的最好的诠释。

02、“码农” 与 “软件工程师”的定义与职责

所谓 “码农”,一般指代那些能够编写代码和擅长编写代码的人,他们可以运用各种编程语言,实现特定的功能、修复错误,并进行基本的单元测试。这样的一群人,在项目中扮演着重要的角色,但他们的职责受限于具体的编码工作。

然而,与 “码农” 相比,“软件工程师” 这个称谓需要具备更高级的技巧与责任。软件工程师的基本素质就是,必须具备良好的代码编写规范、风格、正确性、安全性、稳定性、可复用性和可读性。更重要的是,要具备需求分析、系统设计、编写文档、项目管理、代码评审,以及研究的能力。

03、“软件工程师”的特征

在这一节,我们将会看到 “软件工程师” 所具备的一些具体的特征,以及对这些特征的论述。

1.积极主动性与综合能力

“软件工程师”
不仅仅是被动执行任务的人,需要具备积极主动的精神和能力,能够主导和推动软件开发项目的进展。能够独立思考,并提供解决方案,具备良好的问题解决能力和决策能力。此外,“软件工程师”
还具备广泛的知识和技能,不仅了解编程语言和开发工具,还要了解软件开发的各个阶段的相关技术。

​ 在《如何阅读一本书》当中,也给出了被动和主动的论述。一个被动阅读的人,很容易在遇到阅读困难时打瞌睡,而积极主动的人,很少会出现这种情况,并且,这些人是带着问题阅读的,在阅读的过程中,会记录遇到的问题,并在整个阅读过程中,进行自我求证,从而提升理解力。

2.需求分析

​ 在《代码的艺术》中,章淼老师这样描述道:

​ 需求分析:定义系统/软件的黑盒行为,它是从外部看到的,在说明 “是什么(What)”。

​ 下面给出一个简单的需求描述的示例:“匹配服务的设计目的是,基于玩家的排位赛的积分、胜率(当前赛季、过往)、失败率(当前赛季、过往)、常用英雄等因素,尽可能地将竞技水平相近的玩家撮合在一场比赛当中。”

从上面的需求描述中,我们大致可以分析出策划的几个需求要点:

​ 1.玩家匹配的数值参考维度,涉及当前赛季的排位赛积分;当前赛季和历史赛季的胜率及失败率;玩家在当前赛季经常使用的英雄(代表玩家想玩上路、下路、中路,或者打野,游走或辅助)

​ 2.公平性,策划希望尽可能的将竞技水平相近的玩家匹配到同一场比赛当中。

​ 3.长时间匹配不成功时,需要扩大玩家的匹配分数范围么?又或者,需要用机器人来代替玩家来开启一场比赛吗?

从技术的角度,我们也应该得出几个需求要点:

​ 1. 匹配服务的部署方式:

​ 需要分布式部署吗?

​ 需要按照不同的玩法部署吗?(匹配赛、排位赛、火焰山等等)。
​ 需要让不同的匹配服务,负责不同分数的玩家之间的匹配吗?

​ 2. 匹配服务的承载量:

​ 硬件的配置是什么样的?(CPU 型号、内存等等)

​ 同时需要处理的玩家请求并发量是多少

​ 完成一场战斗匹配,消耗的时间单位是什么,以及具体时间

​ 3. 匹配服务宕机

​ 当服务宕机时,受影响的玩家范围,我们的容忍度是什么样的?

​ 如何快速地拉起挂掉的服务,为玩家提供正常的服务和游戏体验。

3.对外接口

​ 我们可以提供哪些接口,以及这些接口为谁提供?比如为游戏服务提供的匹配接口;为运维提供的指标接口。

4.匹配服务的适用范围

​ 我们是为具体的某一款游戏提供匹配服务,还是可以为任何游戏提供匹配服务。

​ 匹配机制的算法,是可以由具体的游戏业务自定义的吗?还是由匹配服务提供内置的匹配算法,或者两者兼具。

​ 软件工程师,必须要掌握需求分析,并且在评审环节提出质疑,比如设计的合理性。而需求的合理性,不应该仅考虑实现的难易程度、时间成本等因素,更应该考虑的是 “回报率”。而就我接触到的很多团队,还停留在难度较大、时间成本较高等问题上,很多需求因为这些原因被认为是不合理的。

3.系统设计

​ 在《代码的艺术》中,章淼老师这样描述道:

​ 系统设计:设计系统/软件的白盒的机制,它是从内部看到的,要说明 “怎么做(How)” 和 “为什么(Why)”。

​ 在维基百科中,系统设计的定义是:系统设计是定义系统的架构、模块、接口和数据以满足特定需求的过程。

​ 因此,我们可以得出这样的一个结论,系统设计的要点包括:架构、模块、接口和数据。

​ 而系统设计,在很大程度上依赖于需求分析。另外,章淼老师也表示,关键算法和系统设计思路也应该包括在其中。因为,他觉得过程要比最终的结果更重要,目的是为了后来者。我对此也非常地赞同。

4.项目管理

​ 在《软件开发的 201 个原则》一书中,第127条原则指出,好的管理比技术更重要。

​ 项目管理,并不是团队领导者,和产品管理者的职责,也是 “软件工程师” 应该具备的能力。

​ 在传统的概念中会明确的区分:“管理者” 和 “执行者”,然而,这种理念已经无法满足现代社会的需求。在《卓有成效的管理者》一书中,明确指出 “每一位知识工作者其实都是管理者”。主要表达的思想就是,我们必须像管理者一样去工作和思考。而这种能力是需要长期培养的,不能是在 “软件工程师” 变成领导之后,立刻就获得的。这也是为什么如今的软件开发团队中的领导能力被认为普遍不足的一个原因。

​ 项目管理需要考虑的维度包括:成本、时间、范围、质量。

​ 在《软件开发的 201 个原则》一书中,同时也指出,人和时间是不可互换的。

​ 在中途通过增加人员来提升开发进度的想法,在很大程度上会导致项目的进一步延期。因为,这些新进来的人与之前项目中的人,他们对项目的理解和熟悉程度是不一致的。这就需要以 “老” 带 “新”,这样的成本会被无限地放大。所以,随着中途加入的人员的数量,时间成本可能会是 “指数” 级别的增长。

​ 最后,关于项目总结,我们要做到如下几点:责任明确、周密策划、实事求是、质量第一、沟通协作、严密跟踪、控制风险、把握节奏、做好总结、不断提高。

5.沟通能力

​ 在沟通的过程当中,我们发现不同部门之间对同一个 “事务” 给出的定义是不同的,甚至在同一个部门内部也经常发生这种情况。基于大家的理解程度和能力的不同,对同一事物的看法和结论自然也不相同。

​ 在项目启动前,我们必须要对相同的 “事务” 给出相同的定义,在需求分析方面也要达成一致。在得不到这样的结果前,一定不要忙于开工,这会给日后的工作带来非常大的困难和挑战。

​ 沟通能力,可以通过编写文档、阅读优秀的文档、文献或读物来提升。经常性地在有条理的条件下,与其他人交流。

6.代码评审

​ 代码评审也是 “软件工程师” 应该具备的一个非常重要的能力。但在很多团队中,代码评审的环节经常是被忽略的,并且没有包括在开发计划当中。即使,个别团队有这样的机制,很多评审人也仅仅是粗略的扫一遍语法、编码风格问题,对架构、设计、模块、数据、质量、逻辑等方面几乎从未考虑,这种评审就是无效评审,毫无意义,评审人也不对最终的评审结果负责。

​ 另外一种情况,更为可怕。评审人因为所谓 “人际关系” 的考虑,不敢正面指出代码存在的问题,最终导致产品质量的下降。代码评审的重中之重就是,在公平、公正的前提下,保证代码的质量第一,不要参杂任何其它因素。

7.系统架构

​ 系统架构,是对系统包含哪些子系统,每个子系统的职责(具体功能),各子系统之间如何相互协作完成具体的需求的描述。

​ 系统架构可以从数据和业务两个方面进行考虑。抽象数据存储,将数据存储从业务逻辑、操作中抽象出来,由独立的数据结构负责。

04、总结

本文通过对 “码农” 和 “软件工程师” 两个角色的定义、职责和特征进行了描述和比较,展示了软件工程师应该具备的能力。相较于单纯的编写代码,软件工程师在综合能力和素质方面都远远超出 “码农”。

综合所述,希望大家能够准确的认出 “码农” 和 “软件工程师” 这两个角色的重要性和差异。并不是所有的 “码农” 都是 “软件工程师”,但 “软件工程师” 一定是一个合格的 “码农”。

一、Python入门

下面这些内容是Python各个应用方向都必备的基础知识,想做爬虫、数据分析或者人工智能,都得先学会他们。任何高大上的东西,都是建立在原始的基础之上。打好基础,未来的路会走得更稳重。所有资料文末免费领取!!!

包含:

计算机基础

在这里插入图片描述

python基础

在这里插入图片描述

Python入门视频600集:

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

二、Python爬虫

爬虫作为一个热门的方向,不管是在自己兼职还是当成辅助技能提高工作效率,都是很不错的选择。

通过爬虫技术可以将相关的内容收集起来,分析删选后得到我们真正需要的信息。

这个信息收集分析整合的工作,可应用的范畴非常的广泛,无论是生活服务、出行旅行、金融投资、各类制造业的产品市场需求等等,都能够借助爬虫技术获取更精准有效的信息加以利用。

在这里插入图片描述

Python爬虫视频资料

在这里插入图片描述

三、数据分析

清华大学经管学院发布的《中国经济的数字化转型:人才与就业》报告显示,2025年,数据分析人才缺口预计将达230万。

这么大的人才缺口,数据分析俨然是一片广阔的蓝海!起薪10K真的是家常便饭。

在这里插入图片描述

四、数据库与ETL数仓

企业需要定期将冷数据从业务数据库中转移出来存储到一个专门存放历史数据的仓库里面,各部门可以根据自身业务特性对外提供统一的数据服务,这个仓库就是数据仓库。

传统的数据仓库集成处理架构是ETL,利用ETL平台的能力,E=从源数据库抽取数据,L=将数据清洗(不符合规则的数据)、转化(对表按照业务需求进行不同维度、不同颗粒度、不同业务规则计算进行统计),T=将加工好的表以增量、全量、不同时间加载到数据仓库。

在这里插入图片描述

五、机器学习

机器学习就是对计算机一部分数据进行学习,然后对另外一些数据进行预测与判断。

机器学习的核心是“使用算法解析数据,从中学习,然后对新数据做出决定或预测”。也就是说计算机利用以获取的数据得出某一模型,然后利用此模型进行预测的一种方法,这个过程跟人的学习过程有些类似,比如人获取一定的经验,可以对新问题进行预测。

在这里插入图片描述

机器学习资料:

在这里插入图片描述

六、Python高级进阶

从基础的语法内容,到非常多深入的进阶知识点,了解编程语言设计,学完这里基本就了解了python入门到进阶的所有的知识点。

在这里插入图片描述

到这就基本就可以达到企业的用人要求了,如果大家还不知道去去哪找面试资料和简历模板,我这里也为大家整理了一份,真的可以说是保姆及的系统学习路线了。

在这里插入图片描述
但学习编程并不是一蹴而就,而是需要长期的坚持和训练。整理这份学习路线,是希望和大家共同进步,我自己也能去回顾一些技术点。不管是编程新手,还是需要进阶的有一定经验的程序员,我相信都可以从中有所收获。

一蹴而就,而是需要长期的坚持和训练。整理这份学习路线,是希望和大家共同进步,我自己也能去回顾一些技术点。不管是编程新手,还是需要进阶的有一定经验的程序员,我相信都可以从中有所收获。

资料领取

这份完整版的Python全套学习资料已经上传CSDN官方,朋友们如果需要可以点击下方CSDN官方认证微信卡片免费领取 ↓↓↓【保证100%免费】

在这里插入图片描述

好文推荐

了解python的前景:https://blog.csdn.net/SpringJavaMyBatis/article/details/127194835

了解python的兼职副业:https://blog.csdn.net/SpringJavaMyBatis/article/details/127196603

猜你喜欢

转载自blog.csdn.net/weixin_49892805/article/details/132651940