抱歉,软件开发不是你想的那样

2023-12-07 03:40
文章标签 不是 软件开发 抱歉

本文主要是介绍抱歉,软件开发不是你想的那样,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

640?wx_fmt=jpeg

这篇文章写给初入职场的同学。 

毕业刚参加工作,正式进入项目组,会对软件开发行业有很多不切实际的憧憬和期待,但现实和期待大为不同,下面列出了Top 5。

1. 到处都是遗留代码

在大学的时候,我做过几个项目,每次都是从头开发,验收完就结束,开始下一个。 

但实际的工作从来都不是这样,我十多年的工作经历,从第一行代码开始开发的项目,记忆中只有三个,没错,只有三个!

剩下的全是在现有的代码上修修补补,添加新的功能, Fix Bug。 

这就意味着必须要理解这些遗留代码,这是一件极为痛苦的事情,因为这些可以工作的代码通常发展了几年,甚至十几年,经历了血与火的考验,无数程序员在上面或好或坏地在上面添砖加瓦,最后变成了一座让人畏惧的大山。

在处理它们的时候得战战兢兢,只有经验非常丰富的老家伙才能游刃有余地在其中来回游走。但是作为新人,你必须得迈过这一关。建议你看看这篇文章《没有文档,没有老员工讲解,悲催的新人如何快速熟悉一个新项目?》

2. 我学的那些算法怎么用不上呢?

大学里学了很多基本的数据结构和算法, 队列,栈,树,图,排序,搜索,最短路径, 做了不少习题,到了工作中就想看看他们的实际用途。 

可让人失望的是大部分数据结构和算法都用不上,用的最多的是Array, List,Map, 队列和栈都用得不多,更不用说那些树,图,还有那些排序,搜索算法了。

工作中最常见的就是实现业务,很少有业务能复杂到你发明一个新的算法来解决的,大部分都是对数据库的操作。 

但是不要沮丧,数据结构和算法的训练还是很重要的,因为它能教会你用计算机的方式来思考和解决一个问题。

3.  软件怎么这么复杂呢?

大学里做的项目都是小儿科,实际项目是非常复杂的,上面说到工作中用的都是简单的数据结构,那开发一个系统应该不会有多少挑战吧? 

错!虽然每个小功能很简单,但是当很多很多的小功能聚集在一起,互相发生交互的时候,整个系统的复杂度就骤然上升,这些小功能之间的“微妙”交互常常是产生Bug的温床。 

所以在设计中得想尽一切办法去封装,分层,或者把他们做成正交的,可以独立变化的。 你需要不断地学习,实践才能掌握这种能力,一旦掌握就会无往而不利!

4. 沟通很重要

在大学中编程似乎是一个“单打独斗”的工作,只需要做到电脑前编码即可,最多和几个同学和老师定期通通气就行, 但到了实际的项目,都需要深度的有效的沟通。

和产品经理讨论/争论功能。

让其他程序员理解你的设计。

向项目经理据理力争工作量。

和别人一起Review代码。

同测试一起讨论Bug。

......

在这些沟通中如果你不采取一些“机智的手腕”,可能就会碰得“头破血流”,最后被别人贴上一个标签:此人不擅长沟通,难以合作。

5.  写作很重要

对于正规的项目,文档是非常重要的一环,日常工作中需要写很多邮件,写需求文档,设计文档,用清晰的语言来描述Bug,总结Bug的原因。在大学中普遍对写作不重视,工作中就会词不达意,力不从心了。

在大学没有开博客的,工作以后应该开一个了,写作能逼着你梳理你的想法,锻炼逻辑思维能力,真正地理解一个技术点。就是写的时候比较痛苦,也可能没有人去看,没有立竿见影的成就感, 但还是要坚持写,相信我,你的付出会获得回报的!

后记:本文列出的五个想法来自于

https://henrikwarne.com/2012/08/22/top-5-surprises-when-starting-out-as-a-software-developer/ , 我觉得很好,用自己的经历和经验重新写了一遍。

640?wx_fmt=gif

码农翻身公众号开放投稿,可能是全网最高片酬:

用故事讲技术 ,稿费1000

技术/职场/感悟/面试等,稿费700

翻译类文章,每千字200

联系方式:onlyliuxin97(微信)

详情猛戳: 可能是全网最高片酬,速来!

往期精彩回顾

我是一个线程

我是一个Java Class

面向对象圣经

函数式编程圣经

TCP/IP之大明邮差

CPU阿甘

我是一个网卡

我是一个路由器

一个故事讲完HTTPs

编程语言的巅峰

Java:一个帝国的诞生

JavaScript:一个屌丝的逆袭

负载均衡的原理

阅读源码的三种境界

640?wx_fmt=jpeg

这篇关于抱歉,软件开发不是你想的那样的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/464377

相关文章

【软件工程】软件开发模型

三、瀑布模型  四、几种软件开发模型的主要特点 题目 判断题 选择题 小结

Marsview这么好用?快速搭建后台不是梦

Marsview竟然这么好用?快速搭建后台不是梦! 还在为项目开发而焦头烂额吗?别再纠结了,Marsview来了!这个面向后台管理系统的低代码平台,不仅让你轻松搭建项目,还能让你成为团队中的“流量担当”。本文将带你了解 Marsview 的核心功能、技术架构,以及如何快速上手。 软件简介 Marsview 是一款专为中后台管理系统设计的低代码可视化平台,能够帮助开发者快速完成项目搭建和

20190315 把整理和培养自己当作一生的事业,而不是局限在找工作拿offer。

把整理和培养自己当作一生的事业,而不是局限在找工作拿offer,做有本事的人。 来东南读研半年了,明显感觉自己掌握的不过是书本知识级别的中上水平,垃圾收集器这些的只知道背面经,靠脑子硬记,缺乏整理和系统,一头浆糊。 现在一边做实训这个烂项目,一边刷面经,一边刷剑指offer,想投些大公司的实习,又觉得还没准备好,看着各 种面经,都能说个大概,但明显感觉到自己知识的不体系和不深入,**做的项目

OpenAI澄清:“GPT Next”不是新模型。

不,”GPT Next” 并不是OpenAI的下一个重要项目。 本周早些时候,OpenAI 日本业务的负责人长崎忠男在日本 KDDI 峰会上分享了一场演讲,似乎在暗示一个名为 “GPT Next” 的新模型即将出现。 但OpenAI的一位发言人已向Mashable证实,幻灯片中用引号括起来的”GPT Next”一词只是一个假设性占位符,旨在表明OpenAI的模型如何随着时间呈指数级进化。发言人

去 IOE 的本质不是 PR 砸场,而是云端再造

「青云一直有一个目标,就是要建立一朵更好的云,全模云的推出也标志着我们在实现这个目标上往前走了一大步。」 本文由青云QingCloud CTO 甘泉的演讲内容整理而来,共 2628 字,8 图,阅读大概需要 7 分钟。 青云QingCloud 如何解决「敏态」问题 先谈谈传统业务的 IT 部署模式,基本上都是刀片机+存储柜的模式,它们都是真实的物理机,上图密密麻麻的是刀片机,右边是存

集成电路学习:什么是SDK软件开发工具包

SDK:软件开发工具包         SDK,即Software Development Kit(软件开发工具包),是一套由软件提供商或其他组织提供的开发工具集合。这些工具旨在帮助开发者更快速、更便捷地创建、测试和部署软件应用程序。以下是对SDK的详细解释: 一、SDK的定义与组成         定义:SDK是一套包含编程工具、代码示例、技术说明文档、调试和测试工具等内容的软件包,有

从知识视角理解软件开发

软件构造中的核心知识:业务知识与架构知识 在软件构造过程中,最关键的两类知识是业务知识和架构知识。业务知识回答“什么是正确的软件”,而架构知识解决“如何正确地构造软件”。从这两个方面深入理解软件构造,可以帮助我们在设计和开发过程中做出更明智的决策。 1. 业务知识:定义正确的软件 业务知识是关于如何解决现实问题的知识,包括业务的目标、规则、限制、和已有的解决方案。它定义了“正确的软件”是什么

cmd命令无法使用的情况(显示该命令不是内部或外部命令)

CMD 命令无法使用显示不是内部或外部命令,也不是可运行的程序或批处理文件。 问题所在:就是环境变量导致无法使用 重新配置环境变量    (注意是“用户变量”!而不是“系统变量”) 需添加环境变量如下 %SystemRoot%\system32%SystemRoot%%SystemRoot%\System32\Wbem%SYSTEMROOT%\System32\WindowsPo

大数据只是听起来唬人?其实啥也不是。

点击上方蓝色字体,选择“设为星标” 回复”面试“获取更多惊喜 各位读者大佬们晚上好。 前两天一个读者找到我,问了一些问题。想来大家都是同龄人,虽然素不相识,但是我想起来我前几年刚毕业的时候,大概也是怀揣这样的问题,进入到了这么一个行业。 这个同学的问题大概也是很多新手同学的疑问罢。 这位同学在学校一直学习的是Java后端的工作,「然后现在做实时流平台,岗位是Java大数据,工作一年半了快,但

函数能否返回对象,而不是指针

现有一通用 获取记录集合函数 function GetRec(StrSql:string):Tadodataset; var rec1:Tadodataset; begin rec1:=TADODataSet.Create(nil); rec1.Connection:=ADOConnection1; rec1.CommandText:=strsql; rec1.Open; result:=rec1