程序员的具体工作内容是什么?

感谢邀请。在下高中也是搞OI出身的,后来读了软院,现在出来实习过一阵子,有一点心得体会和个人见解,就在这里讲一讲吧,仅供参考。

首先我先回答下“程序员多在思索难题还是没日没夜码无脑代码”这个问题,再来回答其他问题,因为我觉得这里有一些东西需要先讲清楚。首先是何谓“难题”。我理解你这里说的难题就是各种OI题目,也就是算法题,但这只是各种程序员将会碰到的难题的一种,在各个程序员所涉及的领域还有很多其他种类的难题,试举几例:

一个从事图形学相关行业的程序员,他遇到的难题可能有使用怎样的数据结构可以使像碰撞检测、光线追踪等变得效率更高,或者使用什么模型可以让模拟出来的流体更真实,等等。以上这些比较接近算法题,但是还有很多问题是关于硬件的。比如相比CPU,GPU在并行计算上有些特殊优势,那么哪些东西该交给CPU来算,哪些东西该交给GPU来算,以及怎么用GPU来做,也会是一个难题。一个从事Web后端开发的程序员可能会碰到的问题有,如何建立数据库模型,使用怎样的数据库,以及哪种Web服务器和哪种Web开发框架更适合他们的程序;还有当访问量变大以后,如何让一个服务器承受更多访问,以及购买更多服务器以后如何让它们协同工作,负载均衡;还有就是某个服务器可能会突然挂掉了,那么如何给数据自动做备份保证其高可靠性,做备份的同时又如何保证各个服务器里的数据一致,又如何保证读写锁的问题,等等。其他还有许多程序员会遇到的难题,比如如何设计程序的架构,使它易于开发和维护,能够灵活应对需求变更等情况;比如如何设计程序的接口,并保证在将来的版本更新后保持接口不变,等等。还有一些程序员需要思考,该作出能满足什么需求的什么样的工具,它有什么功能以及用户将会怎样使用这些功能,还有如何保证用户使用这种工具,能够尽快地上手甚至熟练掌握,等等。

上面只是一些例子,实际上IT这个坑实在是够大的,程序员们根据其具体从事的行业不同,遇到的难题也会是多种多样的,绝不止单纯的算法题一种。

然后关于“没日没夜无脑代码”这种情况,我觉得一个技术比较正常的公司,不太会出现这种情况。首先绝对不是除了想算法题以外都是无脑代码,想必这一点我前面已经表达清楚了;然后我理解的无脑,就是不断做重复的事情,而这是大多数程序员都很厌恶的。因为实际上程序员的工作的本质就是把重复的事情交给机器来做。所以当你碰到要不断做重复的事情的情况,那么你应该意识到这时候你该开发一个帮助你完成这些事的工具了。一个比较经典的例子就是写编译器(Compiler),其中有个环节叫语法分析,这一块的代码写起来其实比较机械,所以写这块代码实在没什么意思,于是就出现了一种很神奇的东西叫编译器编译器(Compiler Compiler),它的作用是你给定一个语法规则,它自动帮助你生成分析这种语法的代码。简单来说,就是你写一个程序来帮你写程序。

不过还有种一些程序员不太喜欢干的事情,不能算是无脑但比较不技术,就是有的程序纯粹就是一些业务逻辑上的东西。何谓业务逻辑?大概就是比如,你买东西结帐的程序,然后要做的内容有,判断是什么东西,看可以应用什么折扣,然后打上折扣告诉你价钱,然后打印账单。有的业务逻辑会比较复杂,分支比较多。有的程序则基本上都是这种业务逻辑。

这样这个问题算是回答了吧。下面再分别回答剩下的一些问题:

程序员真的是没日没夜的码代码么? 有些程序员是,但原因可能很多。一些公司可能加班比较厉害,需要你没日没夜码代码;还有不少公司其实都是准时上下班的,但有些员工会自愿加班,还有些员工不加班,但可能还因为个人兴趣做一些别的码代码的项目,这种情况也是挺多的;创业的程序员可能会为理想奋斗、没日没夜码代码。

程序员一天要工作多少小时?写多少行代码? 正常工作都是一天8小时,但是有些公司可能加班比较厉害,正常上下班的公司也可能会在某些特殊时段加班,然后有些程序员可能会自愿加班。至于写多少行代码太不好说了,有时候你做一些东西先花上几天不写代码来设计下(避免未来代码因为设计问题返工),有时候你解决一个bug可能一天也就改一行代码,有时候你可能一天写上几百几千行,甚至更多(如果比较厉害)……

程序员是否在使用各种算法?是否还拥有5分钟手打百行splay的能力?平衡树网络流kd树可持久化数据结构等等知识还是否有用? 单纯业务逻辑的程序一般很少使用算法;和系统相关的程序用到的算法会多一些。 5分钟手打百行splay的能力大多数应该都没有,因为大多数语言都有现成的数据结构类库可供调用,一般程序员都会选择使用现成的平衡树来实现需要平衡树的功能,这样不但更快(几行代码总用不了5分钟吧),而且因为这些类库一般都被广泛测试过,它的正确性、效率等也往往比你自己写要更好一些,没有必要重复制造轮子。当然数据结构知识还是有用的,至少让你知道什么情况下该用什么好一些。不过你说的平衡树、网络流、kd树什么的是否还有用,我大学几年平衡树

是用过,网络流和kd树是没用过,但这是我的情况,每个人做的项目不同情况也不一样。

程序员是否常常在tc,cf,poj等网站做题? 我现在偶尔会去做一做。但我感觉可能多数不会吧。有些算是挺厉害的程序员压根不知道这些网站。

题目里遇到的情况是否在现实中有具体模型?如去年IOI,10万只大象在数轴上不停跑动,还有人想知道每时每刻最少用多少摄像机去拍,这样的问题在实际问题中是否有对应模型? 这个问题超出我能力范围了……

竞赛生是否拥有竞争力? 有。竞赛生有较好的算法和数据结构基础,代码功底也非常扎实,学起其他的程序设计相关知识也会比没有这些知识背景的更快一些,写起代码来也会更老到一些。而且竞赛生大多喜欢写代码,程序员这一行要想做得出色,兴趣很重要。另外,很多公司面试程序员的时候,还是喜欢用类似OI/ACM的算法题。

好了,码了这么多字,还是要声明下,以上都是来源于个人视野的一些个人见解。因为我也还没正式入行,有很多东西还可能只是根据自己在学校里看到的情况做的脑补,不能反映现在整个世界的真实情况。仅供参考。

原创文章,作者:afeng135,如若转载,请注明出处:https://www.wegosn.com/3308.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注