【梵夏文学网,感情文学网,好词好句大全,美文摘抄,短篇美文,情感日志,睡前小故事,www.fanxia.cn】
当前位置: 编程的时候我都在干什么 > 正文

编程的时候我都在干什么

专题: 想法 简友广场 散文
作者:悬崖勒小马 来源:原文地址 时间:2022-03-13 17:44:17  阅读:135   网上投稿

【核心观点】

  1. 编程应当带有明确的目的,就是解决一个问题或满足一个需求
  2. 如果要让计算机程序解决问题,那就先了解没有计算机程序的时候是怎么解决问题的
  3. 如果遇到了技术问题,先想想自己最终要实现什么,然后再考虑如何解决眼前的问题
  4. 编程不是有勇无谋的冲锋,神挡杀神,佛挡杀佛不可取;换个思路,眼前的问题可能就不是问题了
  5. 和非技术人员的沟通应当屏蔽技术细节
  6. 程序员不了解业务会严重影响其生产力

【故事】

在部队的很长一段时间内我的主要工作内容被规定为如下几个方面:

  1. 确保通信机房的网络设备和网络安全。
  2. 维护若干个新闻网站服务器和上面的代码。
  3. 根据领导的工作意图配合相关业务部门编写相关软件以完成工作任务。
  4. 物色人员组建和领导编程团队。

在一段时间内,我拥有一个比较稳定的研发团队并带领他们对日常的业务工作提供一些信息化支持。我的几位领导非常重视我们的工作也很认可我们的工作成果,因此我们这个团队在一段时间内产出了很多实用的软硬件工作。

当我带领着我们的小团队在进行编码的时候,我们的电脑屏幕上充斥着花花绿绿的代码,我敢保证问我们在写什么的人没有100个也至少有99个。我会不厌其烦的回答他们。

一开始我试图解释清楚我正在编写的代码是如何工作的(是的,我在向对编程技术一无所知的人解释一段代码)。

“嗨!027!你们在干什么?”

“这位同志你好!我们在写代码,你现在看到的就是数据库查询语言,首先我得从数据表里面对数据按周统计数量,我们用的mysql数据库,它有几个内置函数就支持我们这样去干,所以我需要写这样一个SQL语句,先在数据库里面进行测试,确定没问题的时候,我把他插入到程序逻辑里面去,用一种比较安全的方式进行参数注入。我有一种巧妙的方式去规避SQL注入的风险,你知道吗SQL注入是一种很危险的漏洞,它会导致 ……”

“额… 027同志,你们辛苦了! 我还有别的事情,我就先走了,你们忙啊!”

很长一段时间,我都是这样在向别人介绍我们的工作,大家总是对我们敬而远之。很明显,我的眼里只有我眼前正在干的事情,我的目的就是炫耀自己的技术。但事实上,别人并不会关心你使用了什么样的技术路线,也许问我问题的同志就真的只是单纯的想知道,我写的这些代码是解决什么问题的。

对呀!当我在编程的时候,我是在解决现实问题!也许一开始,我还很清楚我要解决什么问题,我有一个大概的规划,先干什么,后干什么。可随着工作的深入,我会逐渐忘记最初的目的,陷入技术细节无法自拔。尤其是当我遇到某一个无法解决的变成细节问题的时候,我会想方设法的去互联网上搜索错误代码和错误提示,向搜索引擎的输入框描述自己所遇到的问题,花费大量的时间去尝试和验证别人的解决办法 ,最终我总是会解决当下的问题,但往往也会因为用了别人的代码或者思路而引出来新的问题。刚入行的那会儿我总是处于上面描述的状态中。一个比较典型的例子就是在我开发新闻网站稿件采集和上报程序的时候所走的弯路。

当时我们刚刚完成自己单位新闻网站的重新设计,在内部我们有一套完整的解决方案,我们使用了基于Python语言的Diango框架进行新闻网站的开发,编写了很多HTML模板,这样我们只需要重写Django默认的TextAre组件,将其改造成为一个富文本编辑器即可完成新闻稿件的在线编辑和发布。这个富文本编辑器产出的HTML代码会被我们存储在数据库中,然后在我们的网站中把这段HTML插入到文章详情页中。这样我们的新闻页面就有了固定的Header和Footer模板,这套技术也是新闻网站新闻详情页的一般解决方案,他在我们单位的新闻网站上运行一切正常。

在新闻上报的时候,我们需要将需要上报的新闻的HTML代码打包成zip文件,然后人工登录上级网站给定的新闻上报界面并上传给上级。为了简化这个工作,我研究了上级网站的接口协议,通过爬虫的方式进行了自动zip压缩和上报。随之而来的问题是,当我们把稿件上报给上级单位的时候,上级单位的新闻详情页不会显示网站的header和footer信息,而且总是或因为缺失css样式出现排版错乱的情况。为了解决这个问题,我开始重构新闻上报模块,并煞有介事列出了如下TODO清单:

解决上报新闻没有header和footer并且缺失css的问题的待办清单:

  1. 查看上级网站,用chrome开发者工具进行调试,找到缺失的css代码。
  2. 重写新闻导出模块:把我方网站的文章详情模板和文章内容进行拼接,产出新的index.html文件一同打包的zip包内再上报。

很快,我解决了css缺失和网站没有header与footer的问题,可是紧接着又发现上报的网页图片挂掉了,原来在打包的时候没有将图片一同打包,然后我又开始了进一步调整。最终,这些问题都得到了解决,差不多用了整整两天时间。我很确信,我当时很努力地在解决问题,而且我解决问题的办法也很有效,发现问题,解决问题,我的编程工作也很有成效。只是在问题排查的时候确实很让人头疼。但随后我就发现,我错了……

经过我修改的程序的确能够很好的工作,但是我不该花那么多时间去解决这个问题。在遇到问题的时候,我忘记了要解决的问题的本质,把精力放在了眼前的css缺失和模板缺失的问题上,并且很快就下决定去解决两个问题,由此还引出了很多新的技术问题(后台渲染和页面静态化)。可是,上报新闻的本质就是把我们网站上的一个页面存储成html文件并压缩成zip包然后上报就好,那么我为什么不用一种更简单的方式呢?比如下面这种办法:

实现新闻上报的编程步骤:

  1. 在本地网站发布新闻
  2. 使用curl仿问本地网站的新闻页面
  3. 保存curl的返回结果并压缩成zip包
  4. 自动上传zip包到上级网站

是呀,我只是要上报本级网站的某一个页面到上级就好,为什么要调整我本级网站的代码呢?只需要把这个页面下载下来打包上传即可啊!

由此可见清楚编程的时候自己在干什么?这是编程的第一要务!他可以避免你在没有摸清问题本质的时候盲目的干下去,从而浪费大量时间和精力。经过这次事之后,我在编程的时候,就总会问一问自己到底要干什么?要实现什么目标?解决什么问题?尽量确保自己不要因为陷入某一个技术细节而忘记最初的目的。

在此之后,再有人来到我的办公室问我在写什么的时候,我就能很明确的告诉他们我在干什么。也许编程本身就是一个很朴素的概念,那就是让计算机自动替我们完成一些事情。

“嗨! 027同志! 你在写些什么?”

“嗯!你好同志! 我在编写一个程序的功能模块!假设你是一个新闻编辑,你应该很想知道自己这个星期到底发了多少稿子,并且也很想了解到其他编辑的发稿数量吧,我想有了这个功能,你就可以避免自己总是落后别人了!我就是为了帮你解决这个问题!”

“好吧!确实很有用!但是这卷的也太厉害了!再见!”

    相关美文阅读: