在08年的时候,我还没有大学毕业,当时在一家公司实习。那时候老板接了一个项目,是一个给中石油某下属公司做的一个web版本的管理系统,我和一个同学硬着头皮接下来做完了。这个系统后端用的是c#的web form,前端普通的html+css+javascript,数据库使用的是sql server2005,部署服务器使用的是Microsoft Server 2008。现在回顾这个系统,虽然代码写的烂,架构写的烂,但是能够正常运行,这是偶尔有一些莫名其妙难以解决的小bug。毕竟是自己5年前的代码嘛,那时候自己太嫩了,好多东西都不知道,没有多少经验。
那如果现在要我给这个系统做功能升级,甚至重做这个系统,我会进行哪些改进那?这是个有意思的话题,如果你能真的找出很多可供改进的店出来,那么说明这几年来你真的在进步。
现在还真有可能会对这个系统做功能升级。我想了一下,会在一下几个方面做出改进和调整。
-
使用最新的Visual Studio IDE,并且装上ReShaper插件。现在自己已经成了一个快捷键控、重构控。俗话说,工欲成其事,必先利其器。好的程序员当然要用最好的工具了。新的Visual Studio在效率方面、智能提示方面都有改善。ReShaper作为.net下的重构利器当然必不可少。
-
将代码托管到github的私有代码库中,使用git作为源代码管理工具。以前项目中使用的是svn,使用的公司服务器作代码托管,而公司服务器不是那么的稳定。git作为一款分布式源代码管理工具,脱离了中央服务器的束缚,并且拥有快速创建、切换分支,本地提交等特性,完爆svn。github作为全球最大的代码托管中心,方便实用,最便宜的会员7$每月,经济实惠。
-
给系统中的重要功能打好LOG。想当年我们想要记录一些程序log,还要自己写一个简易的log类库。现在有很多成熟的log框架可以被c#使用。试想当你的程序部署到服务器上以后,如果没有充足的log,那么排查bug是多么的困难。服务器上又不能让你还原现场,不能调试,唯一能帮上忙的就是那些log了。当然打log也有很多学问,比如log等级设置,输出设置等,这里就不细说了。
-
使用事务机制处理复杂逻辑。在这个系统中有很多并发操作,当时自己并不是很懂事务,使用了一些很蹩脚的方法来处理可能的数据异常。现在我会采用成熟的分布式事务机制来处理这些并发逻辑,使程序更加健壮。
-
使用TDD,提高单元测试覆盖率。以前的系统中没有任何单元测试,一段简单的代码都需要启动程序手工验证。这样的反馈太耗时,并且不具备重复性。测试驱动开发能够保证代码简洁、正确,并且能快速得到反馈,保证测试覆盖率。遇到遗留代码时,也可以先添加单元测试,建立保护网,使重构更有信心。
-
使用webdriver进行自动化功能性测试。曾经在给客户演示前,我改了一段代码,没想到这段代码恰好破坏了给客户演示的一个重要功能。如果有自动化的功能性测试那么就可以避免这一切。自动化功能测试能增强对产品的信心,每次改动都在可控范围之内。
-
编写构建脚本,实现持续集成。即使只有一个人工作在这个项目中,也应当编写构建脚本,应用持续集成。这样才能保证你的每一次提交都是安全的;并且将一些重复的工作自动化起来,可以解放你的大脑关注到更重要的地方去。
-
自动化部署。每次部署项目到服务器上是一个痛苦的经历,需要手动的替换项目中的某些文件,将文件复制到服务器上,终止当前服务器服务…..哪一个环节出错都是一个致命的打击。手动不仅效率低,而且极易出错。通过编写脚本实现自动化部署可以一劳永逸,和繁琐的手动操作说拜拜吧。
-
使用Nuget作为依赖项管理工具。如果你想要引用一个第三方依赖项,还需要手动从网上下载并添加到项目中的话,那你就out了。作为一个Java程序员,maven,gradle等构建工具已是标配,它们都提供了对依赖项的自动化管理。你只需要添加一行字符串来说明你想要使用那个类库,下载、引用就全交给管理工具来实现了。在c#世界中当然也有相应的产品,那就是Nuget,从此依赖项管理再也不是一件头痛的事情了。
-
多使用c#自身的特性,如LINQ,委托,函数式编程等。比起不思进取的java语言,c#不知道强多少倍。java在java 8版本才正式引入Lambda,而c#的LINQ早都出来多少年了。如果在进行列表操作时,你还只使用foreach,那么你太老土了。列表操作无非是filter,map,sort…而c#早为我们提供了一系列扩展方法,如Where,Select,Sort….可怜Java中只能使用Guava这种不伦不类的第三方类库来实现相应的效果,而且远没有c#的原生功能漂亮。c#既然每年都会引用那么多的特性,那么就要学习、掌握和使用。很多人一边使用着c#的老土语法,一边说自己精通c#,真让人无语。放着那么多好特性不用,让我们这些java程序员真是羡慕嫉妒恨。
-
使用一些前端框架和JavaScript框架。对于我这种前端小白,想让我设计出漂亮的页面还真是力不从心。不用怕,设计者已经考虑到了前端无能者的感受,譬如bootstrap之类的前端UI框架简直为我们而生。这些不但使用简单,效果明显,还自带响应式设计,实在是前端小白的利器,实现自己精美的web站点不再是梦。JavaScript就不多说了,什么jQuery,AngularJs,ExtJs…..各种框架类库层出不穷,涵盖了前端开发的方方面面。无论你是想画图,操作DOM元素,创建单页应用,使用MVC架构…..在JavaScript的世界里你总有多种选择。想当年我为了在web页面中展现一张统计图,采用了使用.net在后台实时绘制成图片加载到前台显示,都是泪啊。现在好了,只需要将数据模型绑定给图表控件,分分钟搞定。
好了,就写这么多了。如何判断一个程序员真的具有N年工作经验,而不是1年工作经验重复使用了N年?一个好的办法就是和拿出一个以前的项目出来,看他都会做哪些改进。
对于工作多年的程序员来说,知识面、视野一定要广,这样才有竞争力。这靠的是平时的学习和积累,还要善于思考,如何能把手头的事情做得更好。
相关推荐
在某知名企业担任项目经理期间,我负责了一个旨在提升企业内部信息系统效能的项目。该项目的主要目标是优化现有的客户关系管理系统(CRM),以提高销售团队的工作效率,并增强客户服务的质量。项目的背景是在市场...
项目管理是一个不断学习和调整的过程,每个项目都是一次新的尝试和挑战。我们团队在面对挑战时所展现的韧性和创新精神,正是推动我们在软件开发和项目管理领域不断进步的动力。未来,我们将继续努力,力争在软件项目...
我会尽我所能激发大家的潜力,创造一个更好的学习环境,让每个人都能在班级中找到归属感和成就感。 我也有着强烈的竞争精神。正如拿破仑所说:“在我的字典里没有不可能。”我相信只有勇敢面对挑战,我们才能不断...
站在2013年的尾巴上,我想对这一年的仓库管理工作做一次全面的回顾和总结,以便更好地规划未来,提升工作效率。 在年初,我作为一名办公室文员开始了我的职业生涯。在工作了几个月后,我有了新的机遇,那就是在9...
如果我有幸竞聘成功,我将从以下四个方面入手展开工作: 第一,我会致力于丰富人力资源库,加强人才的发掘和培养。人才是企业发展的根本,我会不断优化人才选拔和培养机制,确保企业拥有持续的人才供应。 第二,我...
本课程的目的是让各位对VS.NET 2005的IDE在C#开发方面的改进有一个全面的认识。 跟我一起学Visual Studio 2005(5):ASP.NET 2.0 编译模型 (Level 200) 课程简介:以往,我们利用ASP.NET 1.x版开发的的应用程序,...
本课程的目的是让各位对VS.NET 2005的IDE在C#开发方面的改进有一个全面的认识。 跟我一起学Visual Studio 2005(5):ASP.NET 2.0 编译模型 (Level 200) 课程简介:以往,我们利用ASP.NET 1.x版开发的的应用程序,...
展望未来,我计划从以下几个方面入手,推动物业公司的发展:首先,我会加强公司内部制度的建设,确保各项规定和流程的规范化、标准化。其次,我将拓展业务范围,探索新的物业管理市场,以满足不同业主的需求。同时,...
在2021年,我主导了几个重要的技术项目,其中包括系统升级、数据库优化和网络安全强化。在项目实施过程中,我学会了如何有效地进行需求分析、制定项目计划,并协调团队成员,确保项目按时按质完成。通过这些项目的...
Activity Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,是一个负责与用户交互的组件 SSH 为 Struts+Spring+Hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架。...
如果能够当选,我将努力将学生会建设成一个更加高效、透明、服务于学生的组织。我计划通过设立定期的部门会议,让每位成员都有机会发声,共同参与到决策过程中,以确保学生会的决策更加贴近同学们的实际需求。 对于...
做真正 Hacker的乐趣──自己动手去实践 2004年我听编辑说有个年轻人写了本《自己动手写操作系统》,第一反应是不可能,恐怕是翻译稿,写这种书籍是要考作者硬功夫的,不但需要深入掌握操作系统的原理,还需要实际...
做真正 Hacker的乐趣──自己动手去实践 2004年我听编辑说有个年轻人写了本《自己动手写操作系统》,第一反应是不可能,恐怕是翻译稿,写这种书籍是要考作者硬功夫的,不但需要深入掌握操作系统的原理,还需要实际...
在过去的一年中,作为学生会部长,我有幸参与并领导了众多活动和项目,不仅见证了同学们的成长,同时也深刻地感受到了自身的提升和变化。现在,我将从以下几个方面对这一年的工作进行详细的回顾与总结。 首先,工作...
同时,我也会更加关注员工的需求和成长,努力提升团队的凝聚力,从而营造一个更加和谐的工作环境。 最后,我期望在营造和谐工作环境方面能有所作为。我将持续保持谦逊和开放的心态,增进与团队成员之间的沟通与合作...
在这个过程中,我从一个初出茅庐的大学毕业生,逐渐成长为了能够独立承担项目任务的公司新员工。此刻,我站在年终的节点上,希望借此机会向公司汇报我的工作及成长情况,并展望未来的职业规划。 首先,在入职初期,...
在极端天气下,如大风,我会及时通知禁止高空作业和临边作业,以防意外发生。 5. **职工宿舍与生活区管理**: 针对宿舍管理的难题,我们加大了管理力度,要求劳务单位定期打扫公共区域,整顿宿舍卫生,对私拉乱接...
最近几年高频电路与数位电路共享相同电路板,构成所谓的混载电路系统似乎有增加的趋势,类似如此的设计经常会造成数位电路动作时,高频电路却发生动作不稳定等现象,其中原因之一是数位电路产生的噪讯,影响高频电路...
其次,我会优化设备维护工作,强化预防性维修,改进设备状态标示牌管理,提高设备利用率,减少事后维修所带来的高成本和风险。 第三,我将致力于资产盘点与管理,进行设备状况普查和固定资产盘查,强化设备全寿命...
我始终认为,一个良好的班级氛围对于学生的成长至关重要,因此我会继续在班级管理上下功夫,为学生的全面发展提供支持和帮助。 总结而言,作为一名高中语文教师,我深知教学工作的重要性和复杂性。在过去的一年里,...