对程序员来说最难的是写代码吗?

Manny李文辉


写代码是程序员的主要工作,但是却不是最难的工作,最难的是踢皮球和吵架。


踢皮球

说起踢球你是不是脑海中想象着在办公室铺一个绿地毯,两边再架上一个门儿,组织十几个程序员开踢?你想多了,程序员天天加班哪有时间踢球。我说的踢皮球是程序员之间、程序员与测试人员之间互相推诿的意思。

踢皮球是程序员工作中很常见的一个现象,而且某些人学的炉火纯青,走火入魔。自己写的代码出问题了?不可能,在我的电脑上是好的啊?什么,发现一个bug?不能够,肯定是你的环境有问题!运行不了?更不可能了,肯定是你的编译器版本不对,或者是你没安装什么插件。

吵架

程序员之间一般不会有什么矛盾,大家都是写代码的都是加班的难兄难友,不要太团结哦。

不过程序员测试之间就不好说了。测试抛来一个问题,程序员心底本能的反应就是:“哇哇,到底有没有看我写的运行教条件”。测试也不是省油的灯:“我就是按照你给的条件测试的啊,你想抵赖?就是你写的bug”,这么一来二去双方吵起来了。



这个时候产品经理来了:“那个谁谁谁,这有个新的需求,你下班前给做了吧,客户急着要!”程序员一听本来就气在头上,再经产品经理这么一折腾,程序员内心的小愤怒彻底爆发,一言不合就干起来了。这真是一个郁闷的故事。


程序员其实就想好好写代码,为啥就不让人好好写代码,程序员要哭了!


C语言编程答疑


看到这个问题,从08年参加工作以来,已经做了10年的程序员了。从初期的java开发,到后来的php、python等语言的开发,经历过不同的语言的学习过程。从早期的工程师,到后期的高级工程师、资深工程师、架构师,还担任过项目经理的角色。从我的经历来说,对程序员来说最难的往往不是写代码。

首先,程序员学习一门新的语言或者新的算法,只要理解了语言的规则和算法的本质,只需要使用某种编程语言实现算法的实现即可,这也是大部分程序员都擅长的。程序员是一个很特殊的人群,让一个程序员去研究一门新的技术,往往能超过你的意料,对于他们痴迷的技术,甚至能够废寝忘食,我就遇到过我的同事为了解决问题,竟然到晚上才想起来自己没吃午饭。

其次,程序员擅长跟计算机打交道,不知道是不是跟计算机打交道时间长了,大部分程序员跟别人沟通都不会很流畅。你会发现,程序员跟程序员之间,有说不完的话,而程序员跟陌生人,往往没什么沟通的语言。程序员是一个不擅长沟通的人群,这也能明白程序员为什么经常会跟产品经理干起来。还记得平安的产品经理提出“实现手机主题根据手机壳颜色进行调整”的需求,最后跟程序员干架的例子吧。从程序员的角度来说,这明显是产品经理在刁难程序员,而产品经理的思维是:不关心能否实现,只关心大众的需求。

最后,我认为程序员最难的不是写代码,对程序员比较难得是:做项目的程序员比较难的是理解客户的需求;对产品的程序员来说,比较难的是理解产品经理的需求。归根结底,对程序员最难的还是“沟通问题”。


开心的溺水的鱼


对于不同阶段的程序员有不同阶段的任务,所面临的难点也并不相同,但是对于程序员来说,代码本身的难度只在学习的初期有所体现,随着编程经验的增加,代码本身的难度会逐渐下降,因为编程语言本身就是工具,只要多使用必然会越来越熟练。

通常情况下,编写代码的难度体现在以下几个方面:

第一:算法设计和实现。编程的核心问题是算法问题,编程问题说到底就是个数学问题,这就是为什么很多人认为编程难的原因,难在算法上而不是在编程语言本身上。算法实现还涉及到数据结构的应用,所以编程也被认为是算法设计加数据结构。算法设计和数据结构涉及到程序的执行效率,这对于大型系统来说尤为重要。对于研发级程序员来说,通常需要具备扎实的数学基础。

第二:架构的选择。架构设计、模块化、数据交换、资源规划、分布式处理、并发处理等问题是程序员面临的又一个难点,相对于算法来说,这部分难点需要大量的经验积累和对技术本身的深刻认知,所以往往架构师都需要有丰富的实践经验。如果说算法解决的是核心问题,那么架构解决的就是整体协调性问题。如果把算法设计看成是优秀的球员,那么架构设计就相当于教练员,只有有效的配合才能取得好的成绩。

第三:技术验证和调试。研发人员重要的任务是验证,验证技术是一个漫长且复杂的过程,要模拟出实际的应用场景,然后通过不同的方案设计来验证执行效率,这通常也是一个比较难的工作。技术验证和调试需要一个团队的配合,一个技术的验证过程往往有众多经验丰富的技术专家来进行,所以这是技术含量比较高的工作之一。

程序设计工作是一个门槛相对较高的职业,通常情况下,程序员在整个职业生涯的过程中也需要不断的学习。

作者简介:中国科学院大学计算机专业研究生导师,从事IT行业多年,研究方向包括动态软件体系结构、大数据、人工智能相关领域,有多年的一线研发经验。欢迎关注作者,欢迎咨询计算机相关问题。


IT人刘俊明


初级程序猿大部分都是写增删改查的业务代码,增删改查最需要技术含量的是查,归根结底都是写SQL语句,有的业务逻辑复杂一点就SQL语句复杂一点,或者数据库里不好处理就在Java代码里处理。只要数据库学的还行,MySQL比较会用,Java功底有一定基础,基本上都能胜任敲代码的工作。



文|热心哥哥宇文笑

业务复杂,有的系统尤其是一些toB的系统,比如一个上市公司的超市人力管理系统,这是非常复杂的,人事组织,薪资社保,还要针对不同地区分公司不同类别的员工进行不同的代码处理。

需求变动频繁,有些项目的顾问或者产品经理没把控好,导致需求被客户拖着走,搞产品的可能觉得也就变化一点点东西,实际上有的功能代码需要后端重写,数据库的表结构一变,那改动也是得跟着变。咱们敲代码的朋友最不喜欢的就是返工,我们宁愿去接受更多的开发新任务也不想再去重写自己以前写的代码。(不用说什么重构,这些业务代码重构其实并没有什么技术上的突破)

代码优化,其实比较难得住人得,尤其是难住我们这些刚入行的程序员。有的业务数据量庞大,就得先考虑数据库优化,代码多线程优化,总之优化代码倒是一件比较进阶的拆事,比敲代码难。

来说说,作为程序员的你,最难的什么呢?


极客宇文氏


工作十余年,见过很多代码,也写过很多代码,当面对这些情况的时候,我也会束手无策:

不确定的需求

你见过这样的业务人员/客户么?对方说:

  • “我给你提个需求,但是这个需求我还没有想好。”

  • “ 你们可以先开始开发,等我想好了再随时调整。”

  • “ 你们先画页面吧,页面上有哪些东西我不太确定,等你们做完一版后,一起看看吧。”

  • 想法可能随时在变,好不容易沟通确认下来,刚动手写了几行代码,就接到一通电话:“这个需求,我跟我们领导汇报了,我们领导又有点儿新的想法。”

重构别人的代码

很多时候,程序员都是在做二次开发,可能进入新公司的时候,项目已经运行好多年了,接手的代码一没文档,二没注释,并且没有任何工作交接。

这种时候,每当有新的需求需要做,大部分时候程序员都会选择重新写一套逻辑。万不得已必须要改老代码的时候,一定会战战兢兢的。

程序员最烦两件事:

  • 第一件事是给自己的代码写文档;

  • 第二件呢?是别人的程序没有留下文档。

没有思路的代码

写代码之前,不管是画流程图,还是写设计文档,又或者随手写一些伪代码,这些都是代码的思路。如果面对一个需求,你欠缺业务知识和逻辑思维,那么可能连一点儿思路都没有,写代码更是没影儿的事儿了。

所以我老说,写代码也是需要一些“悟性”的,也是需要业务知识积累的。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。


会点代码的大叔


绝大多数外行人可能会认为对于程序员来说,最难搞定的工作就是写代码,而实际上并非如此。要知道写代码可是程序员的基础工作,也是程序员的看家本领,当然好的代码还要具备高内聚,低耦合,高效率,易维护,易扩展等诸多标准,但是就写代码本身而言,对程序员来说并不是难事,因为还有很多事情远比写代码要头疼的多。不信?那我就一一跟大家吐槽一下:

寻找最佳解决方案

比如在工作中给你一系列的需求,你被要求设计和构造技术上的解决方案。这包括了设计数据结构,算法,逻辑上的封装等等,还要考虑到用户安全方面的因素。最大的挑战在于既要确保你的设计可以满足客户需求,让客户认为合理,同时还要在项目时间允许范围内完成。

编写文档

如果你觉得编写文档so easy,那么我想你是对撰写文档有什么误解。撰写文档需要说明代码的含义并解释应用的工作原理。这就包括了独立的文档文件和代码注释,让更多的人理解你的代码。要知道这是一件非常耗时的工作,如果没有人去读它们的话就是纯属浪费时间了。毕竟相比于写文档,很多程序员还是更爱写程序。

维护他人的代码

这是绝对是一项送命任务。有时候因为离职或者工作调整等原因,你需要维护和调试其他程序员的程序,或一部分代码。在这个过程中你需要用尽一切办法理解前任开发者的意图,特别是当这些代码写得很差,也没有注释和文档可以帮助到你时,简直可以用一场灾难来形容。

解释自己的工作

向周围的非程序员朋友,家人,同学解释自己的工作是在做什么,不做什么。你爱的那些人可能不理解你在做什么,而且你还不断的被问及计算机相关的一切问题。这种感觉比加班通宵还要绝望啊……


作为程序员,大家认为比写代码难搞定的事情还有哪些?欢迎在评论区畅所欲言,分享自己的经历。


从不加班的程序猿


最难写的不是代码,代码只是逻辑控制的描述,当然好的代码更能提现好的逻辑。

那么最难的是什么呢?

1、是对软件平台底层原理的理解,这样才能清楚很多代码为什么有各种优化以及高效的写法,如果您使用的是C、C++、Delphi等直接与操作系统进行交互的语言平台,那么请了解操作系统原理、编译原理、需要特性等,如果是.Net、JAVA平台,请了解运行时环境及虚拟机原理,以及语言平台特点,另外,不管什么语言或平台,了解更多的第三方库最好

2、算法与结构,这是最难的,所有程序的实现都是算法与结构的实现,平时已经用到的很多,比如各种排序算法,集合类库,为得到某种结果的逻辑计算,所以说,数学好的人,在软件上走的更远(如果只是应用层面,有些数学基础就差不多),图像识别、语音识别、机器学习、神经网络等等,都是算法和结构的实现,所以,niubility的东西,都需要数学好。


TheWindOfFreedom


绝对不是!

没工作之前,我是这样觉得的,但是工作之后,我才发现,有更难受的!

工作中,最难的是什么?

毫无疑问,是源源不断、千奇百怪的需求!

如果在工作中,遇到好一点的产品经理,他和你商量着,让你开发功能,什么能做什么不能做,都会讨论的清清楚楚!

但是如果遇到比较轴或者没有立场的产品,这才是真的难受!

比较轴,那么你和他就聊不下去,明明一个功能不合理,可是他会和你杠到底!

没立场,这一般都是新手产品,他们面对甲方的需求,只会同意,到头来苦的就是开发人员!

最奇葩的是,没有产品,临时做一个东西,直接给开发发一份需求文档,照着需求文档做界面!

真的是把前端开发当成产品、美工、开发一体的了!

所以,我觉得最难的不是代码,难的是工作中的奇葩事,你觉得呢?

abigbread2018


有时候代码还是其次的,真正难的是弄懂开发的相关领域的业务。

比如你做证券,你要懂金融相关的基础知识。

你做仓储,你要去了解物流的基本概念,流程等等

你做财务,财务的基本知识你也要懂。

不懂这些,你连如何跟客户沟通,如何获取需求的第一手资料都不知道,就更不会有后来的设计和代码实现了。


HELLO开源


程序员最难的是找女朋友,

每天没日没夜的加班,

每天蓬头垢面的,

每天一堆的bug焦头烂额,

每天需求推倒重来,

每天和产品经理扯淡,

哪里有时间交女朋友?

哪怕有,也都跟别人跑了!

对吧?





分享到:


相關文章: