程序员不应该就是专职敲代码的吗(转载)

程序员不仅有代码,还有和产品经理、测试人员之间的“爱恨情仇”

#有关程序员的一个段子
网上看到的,分享一下:

当你看到一个程序员的两只手在键盘上,上下翻飞,行云流水的时候,多半不是在敲击代码,

大概率是在跟产品经理sibi讨论需求,

另一种可能就是在跟测试打口水仗,

10%几率是在论坛码字摸鱼,

可以手速飞快而不需要停下思考的代码,多半也可以靠Ctrl + C/V 搞定。

而当你看到程序员双目呆滞,遥望天际的时候,多半编程开始了。

对于已经参加工作的人看到这个段子,可能会觉得调侃之中有几份贴切;但对于没有参加工作的人,可能会有一丝疑惑,“咦?程序员不应该就是专职敲代码的吗”

谈谈我的感想和经验

针对上述段子提到的观点挨个谈一下:

  1. 跟产品经理sibi讨论需求
    首先需要知道一个真相:当我们自主学习时,可以是以兴趣为导向的,想怎么学怎么code是自己的事情;但是当工作时,一定是以公司的产品最终功能需求为导向的。注意“最终”二字,产品具体需求可能来自市场的调研、产品经理或团队的创意idea,总之需求可能是随着市场、idea不断在变的,映射到开发人员身上,那就可能是不同的代码架构、不同的业务逻辑、不同的Code工作量。

关于sibi大概有以下几种情况:

需求变更频繁,导致程序员反复修改,工作量不断增加(程序员心想能不能不挤牙膏),理论理论;

前面提的需求,都要基本完成了,突然一个消息,这个需求不这样做了,彻底改头换面了,但是项目进度还是原来的进度(程序员心想又要加班重新实现了,能不能不这么善变,敢不敢提前两月确定需求),理论理论;

产品经理提的需求,站在程序员的角度看,需求本身可能对于产品(用户)实际意义不大,而且从技术上看实现成本又很高(开发周期长、涉及代码修改和沟通领域多,单元测试路径覆盖困难、后续维护成本也大),拉着软件经理,一起理论理论;

产品经理idea,天马行空,软件或者硬件层面根本无法支撑实现;

产品经理需求不明确,或程序员思考深度不够,必须要互相掰扯才能你清我楚;

. 产品MM太漂亮,pk pk认识一下(程序员的怪思维);

………

总结:会产生矛盾的点,可能是产品经理只关注卖点、一味的突出亮点而缺少可行性和实用性、而开发人员主要站在代码角度思考需求可行性,以及会轻量级从用户角度出发思考实用性;还有项目层面还思考整体工作量和开发周期的一个匹配情况。一款好的产品,可能需要天时地利人和,开发周期容许的情况下,必须是产品经理和开发深度参与讨论、掰扯、打磨以后才会有的,而这些需要公司层面合理的沟通流程和机制来保证才行,不然需求和开发之间可能混乱不堪,尤其针对需要快速迭代的互联网产品。

2.跟测试打口水仗
我们知道测试一般分为硬件测试 和 软件测试,硬件测试主要cover硬件参数、状态、平时交涉的主要是硬件开发和底层驱动软件开发人员;软件测试主要cover软件版本各功能点(含产品经理的需求),交涉的主要是所有软件开发人员。

所以关于争论,大概有以下几种情况:

测试人员提了问题,开发分析为手法问题,测试认为手法没问题;必须要理论出一个所以然,不能打了自己脸;

再复杂一点的情况,比如硬件指标测试,测试人员提了问题,软件分析是硬件问题,硬件分析是硬件层面ok没问题,怀疑要么软件驱动配置问题,要么测试手法问题;测试人员认为测试手法没问题;于是硬件、软件、测试一起参与到了一场理论当中;

开发认为测试提的问题,属于没问题找问题型,不合理,客户/用户手里几乎不可能出现的操作路径;但是测试认为存在就是问题;

测试认为开发很多情况下欠缺考虑测试人员的感受,很多功能连测都不测就扔给过来了,但开发认为,开发任务这么多,啥功能我都测了,那还要测试人员干什么;互相理论,有必要时,可能拉软件经理、测试经理加入;

最差的情况,互相对接的bug太多,很多交流,沟通不顺畅,产生了“敌对思想”,一交流bug,就感觉是互相找茬一样;

……

总结:开发人员这个角色其实既生产代码,也生产Bug,世界上可能就没有 没有bug的软件,作为开发人员应该更多的换位思考,结合自己开发的功能,代码流程,给出测试人员合理的测试意见;测试人员针对一个功能点的测试,可以更多的向开发人员发起评审,合理采纳意见。

测试的目的其实是为了验证软件缺陷,测试人员作为不懂代码的人,测试功能时,其实更贴切于实际用户角度,而开发人员分析问题时可能更倾向基于软件流程和代码解析问题,所以就会有信息差。建议开发人员一定要静下心来倾听测试人员的心声,一个专业的测试人员可能带给开发人员不同角度看问题的感受,那应该被视为一种“收获”。反过来,试想一下,如果整个项目软件一个bug都没有,那是不意味着,测试人员是不是就可以失业了?测试和开发之间,需要多一份换位思考,多一份理解。

  1. 论坛码字摸鱼
    公司内网、外网,论坛,必不可少,论坛不仅仅是放松、灌水的地方,也是讨论人生疑惑、探讨技术问题的地方,程序员必备。

  2. 靠Ctrl + C/V
    我觉得应该主要有以下几种情况:

很多时候,一个公司在完成一个项目A后,结合市场情况,很可能改改外观,个别器件,立马又是一个新的项目B成立了,在项目A时已经有了很多开发过的代码,那这个时候我们针对新项目B,要做的工作就是移植以前的项目A的可用代码,靠的就是Ctrl + C/V;

平时开发工作或者学习过程一定要注重个人代码的积累;比如你自己手头已经有以前写的一套完整的链表的插入,删除,排序代码,刚好有一个需求实现要用到这些,那就完全可以直接使用了,Ctrl + C/V,不需要重复造轮子;新使用的过程,也属于对自己积累代码库的不断验收和完善;

别人优秀的,已经实现的代码,直接Ctrl + C/V使用。这个前提是要自己一定先搞懂,学习和吸收了,不然后续一旦出了问题,挖了坑,都不知道怎么填。“拿来主义”并没有什么不好,站在前人的肩膀上我们才能看的更远;

……

总结:高效完成工作,Ctrl + C/V的同时,不忘自我积累。

  1. 双目呆滞,遥望天际
    编码前的深度思考时间,建议提前准备个牌子 “请勿打扰!”,拒绝产品经理[可选项:产品MM]、测试人员,等等,一切干扰。

PS.End:我自己从一个开发人员角度出发,要感谢认真细致、耐心负责的测试人员,正是这样,才让开发人员可以发现自己写的bug并有机会提升自己。emmmm,也要感谢产品经理让我们挑战了一个又一个不可能。

原文链接:https://blog.csdn.net/weixin_39366560/java/article/details/107289675

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值