假前一天下午被经理和PM叫上楼,首要一个问题是我去年干了啥,我大致支吾了几句描述了下,一时也说不出个大概。后面就是一片悠长的面谈,什么没达到期望,公司状况不好.......哦,这是KPI评价啊,剩下的你们懂的。

那就趁着有假期,自己也好好回想做了什么吧。顺便分享下自己毕业后第一个完整的系统设计。

-找我来做OA

12年11月左右,我接到了现在公司经理的电话,大致是问我有没有意向跳槽。半年前受邀在这里面试过,过了半年再翻出了我简历,来问我有没意向。正好当时帮TL背了个黑锅(我一干了仨月的Trainee能为项目能付个毛责任,反正TL自己也辞职走了,还劝我别多留),被调离开发岗位录资料录了仨月了,正好,对比了深圳另一份也是找上门待遇差不多的工作,要迅速解决刚毕业财政紧缺问题,还是选了广州的公司。

来到这里今年只有一任务——年后开始,做OA。年前就支援下现有收尾项目就过了(收尾的项目啊,OTOTOT啊,泪泪泪泪泪)。

公司是在6月份上市了,现在希望规范上轨道(呵呵),所以就希望有个OA。后来我觉得实际上出发点值得商榷,希望有个规范的系统来倒逼公司变规范。现有需求再有系统还是现有系统再有需求,这是个问题。不过跳出二论的问题,那么就可以创造需求,这也是我喜欢干的事情。

-我是谁

以分析程序员的Title入职,理论上我只是个基层,不过实际上到后来成了架构师的角色。干起活来较真的性格至今未变,也没少跟大家争论,不过主要的部分都争赢了,所以大致架构基本上按我的来了。

还是证明了一件事情——一般的技术人员更倾向于选择自己认识的方式,从而拒绝新知识,除非新的知识所在领域是空白。这是一个很有趣的挑战,特别是别人资历年龄都比你大,刚毕业半年(今年才补足学分拿到俩证件...呵呵...)的小屁孩会有心理落差,好歹某方面来说我“资历”不必任何人浅。

如果你要让他们接受一个他们潜意识拒绝的事物(比如从ADO.NET转向EF),就要比较容易做到能在一次沟通说服,快速将新事物的优势完全展示,做到“One Click”。

-资源

年初定得预算应该是除去人员工资外是几十万经费,到今年结算时大致用了三十万,除了买SQL Server,基本上给了外包。

总体来说,我们有1+2*0.5+2人力,分为一个全职(我),两个兼任其他工作的同事(PM+一个工程师),两个外包。好吧,没有美术人员。

-方案

一些事情做到了,比较顺畅,而大部分还算失败了,只能磨很久,讲很多很多,争论很多,直至全部讲清楚,赢得所谓的“胜利”。

看起来这里有个错误,就是“技术人员应该选择自己熟悉的技术,而不是所谓‘更好’的技术。”。实际上,自然这也考虑到了,所以在设计之初,也这么解决,加上其他想法,大致是这么实现的:

  • 许多个小系统,而不是一个大系统
  • 所有小系统每次开发到发布周期都应该能控制在三个月以内,最多半年
  • 统一信道进行消息中转,而不是P2P
  • 所有业务系统都是热插拔的
  • 使用Nuget,公用代码而不共同维护代码
  • 很多数据库,而不是一个大数据库
  • 先有对象,再有表
  • 使用ORM而非SQL
  • 使用扁平化风格,拒绝多余的样式

许多选择都是出于成本和风险等多方面考虑,方法都有争议性(不然也不会跟大家争论那么久了)。当然我是嫩了点,做决定源于不多的经验和更多的直觉,但也是我能做的全部了。

-产出

推广整个架构设计和相关技术浪费了一个月,终于“公关”完了大伙,才开始了比较正式的动工。

一开始做得是一个消息中转系统,就像主机的总线,好歹有才能通信,才有其他的小系统。初始的功能基于WCF只有中转的功能,不过一直稳定,提交版本是1.0.1,至今没有出现Bug。

能通信后,解决了单点登陆和权限系统,顺便搭载了Nuget服务器(搭载是托同事做的,我木有测试机的权限)。

差不多之间,引入了BootMetro样式(后来摒弃了),建立了工作中心系统,也就是整个系统的入口,类似于个人空间。

接着,为了实现即时通信,调研了微博和企鹅的API报价后,迅速决定并开发了自己的Web IM,顺便挂上了Azure小试了一下Azure

至此,整个系统的基础模块都基本完成了,然后便参与到了他们已经开始进行了一部分的考勤与财务系统,成了噩梦的开端。这两个系统基本由外包完成,从SVN同步了项目的开始,我就心情不好了。对于质量...我只能......总之就是被挖坑、填坑、被挖坑、填坑......

说起外包,一开始我是抗拒的。因为你不可以说请,我就让你请。不然你做出来,咣~,能用,但没有用,别人会说这根本没要过这种东西。我说首先要有明确的设计,我设计的时候是这样的,然后外包做出来也是这样的。......不过,我的也没这权限,所以无法干涉什么。

这段时候,已经第一次绩效评估了,今年调整了结算周期,所以这两次间距离比较接近。大致的内容似乎跟这次差不多,技术超群,但产出不高。因为自己当时家庭问题状态确实不佳,所以没有纠结太多,确实状态也不好。

后面两个系统的开发是我觉得很痛苦的,我的感觉就是干脆推倒重做。不过既然进来了,就尽量做吧......

当你看到Controller里有SQL,而且是用EF的DbContext执行的;当你看到js上拼接SQL;当你发现有人把Bll全部写成了Repository;当你发现LinQ串中大量全表实例化再filter;当你发现后端返回HTML+JS结果;当你发现无数的不知所云的变量简写;当你发现......

然后你发现我崩溃了,每天工作都是一种折磨。要么被人催进度,要么像补漏水的船一样去“做”一艘船出来。

最终,在2013完成了考勤并导入了数据发布了生产机。而财务,PM终于下定决心重来。我全年被骂也才在Redmine收了几十张单而且清干净了,而单财务留给他们的,仍然有三百多张。

在结束了考勤之后,我把原财务中我的那一半工作给搞定了。接着就写了一套样式框架,还不是很完善,年后应该会把Table也做了。利用这一框架,重做了Work Station,并且把Chat也做了插件化。

然后在过年前,重构了Workflow系统(未完成)和重新规划了架构和下一年的。在放假前,Workflow的业务逻辑已经写完了,差API在年后完成;财务的架子也搭好了,第一次试用了DDD。

-自我评价呢

要回忆这一年的工作,确实是在用自己喜欢的方式做自己想做的事情,不过确实全年心情不太好,状态也不好。经过上一家公司,我已经对背黑锅坦然,虽然受着压力依然不爽,但反而能看见机会。要不是有些事情不合理,自己也不会成长得强大到把不合理变成合理。

后来会想,有些事情虽然一开始错的不是我,只是山芋传到了我手上最后烫到了我而已。我个一没后台二没钱三不拉关系,只能想办法能做到下次把问题遏止在源头。

-结果是什么样的

因为放假了不在公司,也没有证书,访问不到,所以就从聊天记录中找几张图出来吧,跟现在的应该是有区别的了,意思意思。

因为木有美术人员,样式什么的都是自己解决的,所以不要见外。

-后续

趁着开年有空,想正式地写些Blog,顺便分享下许多事情。

这里没有年终奖,所以过年只给家人买了些衣服鞋子,还得供弟弟上大学,毕业一半了相对许多同学还是挺拮据的,也不知道年后有没有多少加薪。不过公司搬到个比较郊的地方,空气十分好。近一年身体状况下滑了些,体重涨了些,所以打算用半年时间稳一下节奏,利用附近的大学和自然环境锻炼下身体,把身体调整回最佳状态。

全年都大部分时间过得很压抑,许多地方是变得成熟了,自然会再尝试面对,而且不一定结果就是不好的,可能只是该到的还没到。比如我提倡使用多个数据库而不用一个大数据库,经过一年的实践,PM也终于决定把重构的系统的表给拆出来了,因为确实大库开发维护难度太大,虽然要牺牲数据挖掘的方便性。

去年做了两份兼职,一个是师姐拉上我,帮人家做了四个网页,觉得做得不爽所以还顺道帮人家把网页加了移动优化(就是增加了响应式、调整了样式、重写了所有实践兼容touch);另一份是年底帮一律师做了个个人网站,就是发发视频、文章的CMS,从域名到开发全包,没有用开源的什么项目改就这么空写出来,另注册域名、空间、设计都包了。两份都收了2k,没办法,愁钱用。

年底本以为做一朋友的外包,结果发现是创业项目,结果被拉进去一起做项目,结果现在连公司都注册了,不过全年都会很忙,不知道能抽多少时间参与呢。

最后想问问,园子这编辑器黏贴图片即上传是咋实现的?

去年做了什么?OA。的更多相关文章

  1. $NOIp$做题记录

    虽然去年做了挺多了也写了篇一句话题解了但一年过去也忘得差不多了$kk$ 所以重新来整理下$kk$ $2018(4/6$ [X]积木大赛 大概讲下$O(n)$的数学方法. 我是从分治类比来的$QwQ$. ...

  2. OA系统从选型到实施完整攻略

    本文结合一线IT人士分享OA实施经验,单纯地讲述OA的选型与实施,为相关经验较少的IT人士提供真正的帮助. 一.如何选择OA系统 说起OA选型,稳定性.易用性.灵活性.成本和服务少不了.但是,只了解这 ...

  3. OA办公软件篇(一)—组织架构

    OA办公软件篇(一)-组织架构 背景 作用 迭代历程 具体实现 写在最后   背景 在说组织架构之前,我们先来说说OA本身. 百度百科解释OA为:办公自动化(Office Automation,简称O ...

  4. Asp.net页面跳转Session丢失问题

    原本去年在做项目时,写好的一记篇博客分享给大家. Asp.net页面跳转Session丢失问题   编写人:CC阿爸 2014-4-2 l  近来在做泛微OA与公司自行开发的系统集成登录的问题.在使用 ...

  5. C# 在腾讯的发展

    本文首发我的微信公众号"dotnet跨平台", 内容得到大家热烈的欢迎,全文重新发布在博客,欢迎转载,请注明出处. .NET 主要的开发语言是 C# , .NET 平台泛指遵循EC ...

  6. 从零开始编写自己的C#框架(18)——Web层后端权限模块——菜单管理

    从本章开始,主要讲解的是页面中对框架相关功能的调用方法,比如列表页面(又分为有层次感列表和普通列表).编辑页面.多标签页面等,只要熟悉了这些函数的使用方法,那么开发起来就会很便捷了. 1.如图先创建菜 ...

  7. .NET MVC实现多图片上传并附带参数(ajaxfileupload)

    做网站呢,都免不了要做图片上传. 还记得去年做微信的时候用WebAPI+ajaxfileupload.js做了一个能够附带参数上传的功能,博文地址:.NET WebAPI 实现图片上传(包括附带参数上 ...

  8. JS 模板引擎 BaiduTemplate 和 ArtTemplate 对比及应用

    最近做项目用了JS模板引擎渲染HTML,JS模板引擎是在去年做项目是了解到的,但一直没有用,只停留在了解层面,直到这次做项目才用到,JS模板引擎用了两个 BaiduTemplate 和 ArtTemp ...

  9. matlab GUI界面编程总结

    去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录. 从简单的例子说起吧. 创建Matlab ...

随机推荐

  1. 基于DevExpress实现对PDF、Word、Excel文档的预览及操作处理

    http://www.cnblogs.com/wuhuacong/p/4175266.html 在一般的管理系统模块里面,越来越多的设计到一些常用文档的上传保存操作,其中如PDF.Word.Excel ...

  2. 一个年轻的码农的一个C#项目

    话不多少,今天要写一个小项目.我们写项目要做好准备.我们要做项目分析.要知道用户需求,然后在根据需求来规划自己的项目.我们要用自己所学,做最好的程序.尽自己所能完成项目需求.精简代码! 我们今天要写的 ...

  3. Qt经典出错信息之undefined reference to `vtable for classname

    原文链接:Qt经典出错信息之undefined reference to `vtable for classname 这个出错信息太常见了,用过Qt两个月以上的朋友基本上都能自己解决了,因为太经典了, ...

  4. SQL常见优化Sql查询性能的方法有哪些?

    常见优化Sql查询性能的方法有哪些? 1.查询条件减少使用函数,避免全表扫描 2.减少不必要的表连接 3.有些数据操作的业务逻辑可以放到应用层进行实现 4.可以使用with as 5.使用“临时表”暂 ...

  5. AJAX 同步异步笔记

    就在刚才,做一个很简单的Demo, 预览MP4视频文件 这就是一个video标签嘛,然后再动态的给src赋值嘛.这还不是so easy? 好,说做就做.先简单的测试一下.先给src赋值一下. 嗯,可以 ...

  6. Anaular指令详解

    目录:directive()   restrict   replace   template   templateUrl  scope  transclude   ng-transclude   co ...

  7. [bzoj4726]Sabota

    做的题太少,什么都要看题解.. 题意只给出一个叛徒,则他一定是叶子结点(最坏情况下),那么"带头反叛"的点一定构成了一条链. 令f[u]表示u不带头反叛的最小值,则考虑它的每一支儿 ...

  8. Java: some learning note for Java calssloader and Servlet

    1. Java Classloader 链接: https://en.wikipedia.org/wiki/Java_Classloader 摘要: The Java Classloader is a ...

  9. Leetcode Palindrome Linked List

    Given a singly linked list, determine if it is a palindrome. Follow up:Could you do it in O(n) time ...

  10. spark shuffle 相关细节整理

    1.Shuffle Write 和Shuffle Read具体发生在哪里 2.哪里用到了Partitioner 3.何为mapSideCombine 4.何时进行排序 之前已经看过spark shuf ...