精《记叙“tom”4年的软件开发之旅》
1、引言
本篇文章是记叙tom四年的软件开发从业经历,虽然他资历不长,况且本身也是个菜鸟,但他也曾有过荣誉、迷茫、困惑与选择,在这里他希望通过自己所经历过的事情分享给大家,给那些真正热爱软件开发的同学们在自身发展道路上给出一些方向,当然你们也可以当做一篇水文,在coding累的时候看看,一笑而过也好。
2、正文
在最好的年华中青春总是悄然而去....
Tom是一名90后后辈小生,毕业于一所河南不知名大专学院,本来被父母安排报考是该所学院的道路桥梁专业,却阴差阳错被调剂到软件技术专业,本想着先入学在重新转业到道路桥梁专业的思想也就正式踏入了该所大学,在初学时,大学往往会开设计算机基础课程,而tom本身年少时特别喜爱电脑(CS1.5、War3),所以对电脑的基本操作了如指掌,很多老师教的课基本不看就会,而班里的同学有的连电脑开机竟然都不会,所以很多同学都来问他电脑一些基本操作的问题,基于这种自豪感满满他也就忘了转专业的事,但对于编程tom还是几乎没有任何的概念。
而软件开发真正启蒙他的是在一门C#基础编程课程上,当老师使用winform编写几句简单的代码时就实现弹出框,图片轮播的功能时,tom的眼睛充满了色彩,突然发觉原来编程是如此简单有趣之事。从此之后便一发不可收拾的爱上了编程,爱上了C#这门语言,以至于在期末考试JAVA这门课时老师让他用JAVA去编写一个冒泡排序算法时,他却用C#去编写,虽然不符合语言要求,但是还好老师算了他及格。
后来tom就开始接触更多形形色色的编程基础,比如:数据库基础、Asp.net、C++、J2EE等但是他最爱的还是ASP.NET这门课程,尤其是使用gridview实现简单的表格增删改功能后,他就会很开心,而在得到老师的夸赞,同学们的认可时,他觉得的他的付出得到了大家的肯定,由此深深爱上了这种感觉,这也许是这样打下来他可能注定就是一名coder的地桩吧。
大学匆匆几年很快要到实习的日子,tom没有雄厚的学历背景,没有去所谓的阿里,腾讯面试,当然那时他也不懂,人家可能根本不需要C#程序员,即使如此,他还是自信满满投了几家公司的简历,凭着能使用gridview做数据表,写几句简单的select语句他相信总有企业愿意用他,但是结果大家不想而知,根本没有公司愿意招实习生,加上学历问题,他处处碰壁,而好不容易有一家公司愿意要他却没想到竟然是培训机构,当时借助于一个同学电话他才得以脱身。
在屡屡失败之后tom必须要很正视一个问题,到底是坚持自己的coding道路,还是去一个亲戚的公司重新学习造价知识,他很迷茫,又不愿意如此简单放弃自己所学与正真热爱的东西,但是生活就是这么现实,找不到工作就只能选择转行。而在最后还好在他的一位导师把我他介绍到了一家单位,“河南xxxx集团有限责任公司”,入职实习生岗位,每月500元薪水,实习期半年,表现的好转正,表现不好就给予辞退,他心想薪水不是问题,先就业再说,就这样他就正式入职了他人生第一家企业,而这一次就是快3年的职业生涯。
曾又有多少人能够坚守当初的的执念呢...
tom清楚记得第一家公司用的框架与工具,mvc3、简单工厂、ioc、mysoft(orm),dwzui,jquery,初入公司这些东西他一样也不会,更别提所谓的设计模式了。众所周知,企业招人就是为了快速迭代,能够产生足够的生产力,而我们这些实习生只能快速适应这种环境,否则只能被淘汰,在压力如此之大的情况下他只能去选择每日每夜的学习,这个时候每天的工作时间+学习时间他都固定在13个小时左右,每天下班回来不仅仅是身体,尤其是精神的疲惫使他感倍感劳累,不过还好年轻,年轻就是资本,休息一晚后什么疲惫感都一扫而空。
压力大成长也快,很快他就熟悉了固定的开发模式,建类,编写页面逻辑,后台处理逻辑等,但是新的问题也却不用而至,由于在校没有好好学习基础,自身基础很差甚至连枚举也不知道是什么,更别说一些设计模式了,tom记得只是一个简单工厂的设计模式,他的一个同事就足足给tom讲了6遍,每天下班tom都故意等他,骑车一起下班,让他讲解一些框架的使用方法,自身基础差tom知道只有不断学习才能弥补自身不足,在这里他托我也很感谢他这位同事thinkwang的耐心讲解,而现在他已经出任架构师职位了,这也都是后话。软件开发其实真是一件枯燥无聊的事情,如果没有足够的兴趣去坚持真的很累,在经历痛苦的实习期之后,在2013年初tom顺利转正了,正式成为初级程序员,月薪1300元。
在转正时公司的架构师会为每位程序员定一个自身发展目标,比如DBA,或者前端攻城狮等职位,当时他问tom的发展是什么,tom心里其实早已经确定了自己以后的发展,信誓旦旦的要说5年内要成为系统架构师,他听后笑了笑说,成为系统架构师至少也要有5年以上开发经历,3年以上架构设计经历,5年你这个时间短了点,tom不懂这么多,他只知道成为架构师是他为自己定的目标,这是方向,5年达不到,就10年,10年达不到就15年,只要坚持,只要保持一份热爱coding的热情,相信自己目标早晚能够实现。
在tom继续他的.net之旅下,突然和他一起实习转正的同学要辞职了,他说现在IOS很火要打算去学些IOS了,问他要不要一起去,tom心想诺基亚都死了,说不定哪天IOS也会挂掉呢?还是学一门后台语言靠谱点,跟着微软混稳妥,果断也就拒绝了。事实证明tom的这个同学确实很有眼光,现在在深圳已经是20K的月薪了,tom傻乎乎的自认为的坚持可能让他错失了人生的一个机遇,但是至今他却也没有后悔。慢慢的tom逐渐熟练了业务,技能也慢慢熟练,解决了多个技术难题,也逐渐发展成为中级程序员,技术骨干,可以说只要提出的业务需求,技术上就没有解决不了问题,这时候月薪在3500元,每年领导还会给予tom优秀个人,各种鲜花,奖杯让tom沉醉在这荣誉中,这样的小日子过得也很舒适。
但是一场网络大战却敲响了tom,记得在2014年cnblogs上一场net 与 java 的文章大战一触即发,博友针对net 和 java这两种语言 是你来我往,议论不决,tom心里很疑惑,心想难道net真的不如java么,难道说他也要转行才能无后顾之忧才对,恰巧tom这时候一位很好的同事,简称zg吧,zg打算转u3d开发了,zg一直对游戏开发很感兴趣,他在公司已经待了4年有余,这次他却果断去转U3D开发了,tom心想难道asp.net真的大势已去了么,回想初心。tom定位自己5年内成为系统架构师,距今已经过去了2年了,但是自己进步的只是业务能力,面向过程的技术实现能力,其余没有一丝涨进。
突然tom就感到如此的惶恐,再三思量后tom确定了是自己的眼界太窄了,始终只是在公司内部而已,tom既然确定了问题,他不甘愿做井底之娃,于是就想领导提出了辞职,虽然领导百般挽留,tom心中也有不舍,但是为了他心中的目标他还是选择了离去,近三年的感情,确实不容易舍弃,tom在调整心态后继续在他下家单位的IT之旅。
曾经的我们互相都只是过客...
“xxxx(北京)科技责任有限公司”,这是一个北京在郑州驻研发中心的企业,单位福利优厚,双休,公司同事都很和蔼可亲,刚入公司,就浓浓感到了互联网公司文化,首先就是加班,记得tom刚入公司那会,正赶上新上项目,每天就是910+5的日子,记得最多时候一个月加班了170个小时,还好公司可以调休,tom也托我告诉大家,公司加班可以,最低标准但是一定要可以调休,要不然这家公司是纯粹在剥削员工。
回到正题,那段日子是很累,tom也出色完成了领导给予的任务,很快就融入新公司这个团队。新公司tom的大部分同事都是java程序员,有几个关系还很不错,记得有次他们一起去吃饭,笑着对tom说,tom使他们第一个见到活着的.net程序员,tom心想难道.net人就那么少么,虽然大家都是IT圈子但是真的是微软与oracle是完全两个不同的生态圈了。
在接触java成员的日子里,给tom的第一印象就是,做事慢,前端技术薄弱,在tom看来一个很简单的功能他们却要我们在.net端实现,框架:ui层(.net)+java(数据层),系统之间通过udp协议进行数据通信,简单来讲就是.net吧java当做数据接口使用,在和java coder的接触过程中,根据项目需要tom也要编写一些java代码,配置java环境,过程确实很繁琐,并且各种报错也很莫名其妙,都是要自己throw出大部分的异常,但是恰巧是某些配置过程的繁琐,让tom学到了很多东西。
也了解很多java常使用一些东西,比如nginx,memcached,redis,F5负载均衡等,tom做小企业软件多了,这些东西都是第一次听说,完全不知道是干什么的,后来才知道原来一个简单baidu页面可能就要经过各项复杂的配置,各种解析,包括缓存技术应用等等才能展现到用户层面,这真让tom眼界大开,知道原来除了小型的crm,oa系统之外大型应用系统初步的设计与相关技术的实现,还有如此复杂的东西。tom知道自己的知识面又需要扩宽了。在基本了解了这些东西之后与简单应用,tom又继续开始过着每天完成领导交办的工作外研究一点小东西的日子,开始学习ng,react,nodejs,vue等前端方面知识,并且成功使用ng建造了一套简单的pc建站的功能。
在这样的日子一天天过去,但tom的对日常工作越来越感到厌烦,因为在每天解决领导给出的需求外,他发现又快沦陷到面向过程解决业务的死循环中,提升的只是业务能力,技术与设计能力没有一丝涨进,tom也越来越讨厌写三层模式结构的东西,恰巧这个时候tom的一个朋友向tom推荐了ABP.NET框架,这是一个DDD架构模式搭建的项目框架,作者封装好各项功能,都是基于OO对象,这时候让tom重新又回归了好奇,DDD也是tom第一次听说,网上简单搜索了下发现早在2011年就有了DDD的概念,tom秉着先会用在了解的原则,开始用ABP.NET项目给别人做了一套私活,发现效果不错,但是tom这时候发现他还是在用三层的方式去编写代码,只不过是换了一个框架而已,他在网上搜索了下,发现ABP不是完全基于DDD模式,作者是封装好很多DDD的概念,但是tom在使用过程基本没有用到。
tom这时候就开始大量去学习DDD的概念,这中间一下子了解了很多内容saga,event store ,event sourceing,充血模型,六边形架构模式等等,突然出现的很多名词把tom搞得迷糊,既然如此就只能继续沉下心了仔细学习,如果想学习DDD的概念,tom也推荐了园内很多写的不错的文章。
新手可以去读读:
蟋蟀小菜学习编程系列
进阶可以读读:
汤神DDD系列
dax.net的领域驱动设计系列
通过阅读文章让tom学到了很多东西,很感谢有园子这么一个平台,因为第一次tom领悟到OO原来是这样的,不是我们总是面向过程的编码方式,tom觉得学习DDD能够为自己目标能够更加前进一步,所以决定坚持DDD的道路继续往下走。这时候已经是tom工作的第四个年头零2个月,tom在一次合适的机会,遇到了一位朋友,朋友把他推到了一个公司,公司是新成立,tom和领导不拍而和,tom果断跳到了这家公司,任职高级.NET程序员一步,走到今天tom心里也清楚明白了,语言没有好坏之分,思想才是最重要,在纠结谁对谁错的时候,不如沉下心多学习一些知识,不断沉淀自己,技术行业粗浅的人只会看到表面,精细的人才能发现其中的博大精深。最后tom想说的是,获得荣誉时请三省吾身,迷茫时请博览群书,困惑时请不耻下问,选择时请坚守如一,他向大家推荐一篇很好的博文:编程菜鸟的七宗罪,新手总是犯一些错误。
好了,说到这里tom4年的经历基本叙述完毕,各位看官可以喝口茶,松口气了,coding的请继续coding, 希望没有打乱您的思路。最后tom托我发布一幕招聘广告,tom的公司是做跨境电商的,详情如下:
工作地点:郑州
职位:.NET开发工程师
要求:热爱学习,对代码忠贞不二
联系QQ:419187544
职位诱惑:大牛,美女多
链接:https://www.lagou.com/jobs/2232943.html
精《记叙“tom”4年的软件开发之旅》的更多相关文章
- 软件开发学习笔记 <一> UML
UML http://www.uml-diagrams.org http://www.umlchina.com/index.htm 统一建模语言(UML)始于1997年的一个OMG(对象管理组织)标准 ...
- 敏捷软件开发:原则、模式与实践——第9章 OCP:开放-封闭原则
第9章 OCP:开放-封闭原则 软件实体(类.模块.函数等)应该是可以扩展的,但是不可修改. 9.1 OCP概述 遵循开放-封闭原则设计出的模块具有两个主要特征: (1)对于扩展是开放的(open f ...
- nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞
第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...
- 敏捷软件开发VS传统软件工程
敏捷软件开发:又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新兴软件开发方法,是一种应对快速变化的需求的一种软件开发能力. 与传统软件工程相比,它们的具体名称.理念.过程.术语都不尽相同 ...
- Atitit.软件开发的三层结构isv金字塔模型
Atitit.软件开发的三层结构isv金字塔模型 第一层,Implements 层,着重与功能的实现.. 第二次,spec层,理论层,设计规范,接口,等.流程.方法论 顶层,val层,价值观层,原则, ...
- BZOJ 1221: [HNOI2001] 软件开发
1221: [HNOI2001] 软件开发 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1428 Solved: 791[Submit][Stat ...
- Code Complete 笔记—— 第二章 用隐喻来更充分理解软件开发
在这章里面,提到的隐喻,类同于比喻(建模)的方法的去理解软件开发. 隐喻的优点在于其可预期的效果能被所有人所理解.不必要的沟通和误解也因此大为减低,学习与教授更为快速,实际上,隐喻是对概念进行内在化和 ...
- [转] Agile Software Development 敏捷软件开发
原文作者:kkun 原文地址:http://www.cnblogs.com/kkun/archive/2011/07/06/agile_software_development.html 敏捷是什么 ...
- 高质量,高效率的多国语言软件开发(Web/PC/Mobile),使用接口约束/调用不同语言资源
偶然间翻出了几年前写的一个小程序,把当时的资料整理整理分享一下. 当时为了给自己的软件实现多国语言功能,而开发的辅助工具:SE String Resource. 这是当时基于自己另一款 IDE 软件抽 ...
随机推荐
- phpStorm 使用技巧大集合
之前整理了一部分使用技巧了,但是在实际操作中发现phpstorm的技巧实在是太多了,所以大部分都统一整理到这篇文字中 ,备用 插件1 1:phpstrom的插件Provides live edit H ...
- SET NOCOUNT用法
当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数). 当 SET NOCOUNT 为 OFF 时,返回计数. 如果存储过程中包含的一些语句并不返回 ...
- Python自然语言处理学习笔记(69)
http://www.cnblogs.com/yuxc/archive/2012/02/09/2344474.html Chapter8 Analyzing Sentence Structure ...
- 【CF】223 Div.1 C Sereja and Brackets
水线段树. /* 380C */ #include <iostream> #include <string> #include <map> #include < ...
- git rebase实战
在develop分支上rebase另外一个分支master,是将master作为本地,develop作为远端来处理的. 最后的效果是,develop分支看起来像是在master分支的最新的节点之后才进 ...
- Eclipse中添加android sdk javadoc和source
在 javadoc location path中添加file:/D:/Android_SDK/sdk/docs/reference/ 在 source attachment中添加为 Externa ...
- bzoj1558
好题,初看以为只要差分然后维护相同的段数目但是请注意下面的情况2 3 5 8 9 1 2 3 4 这显然答案是3而不是4因此我们还要再维护ld,rd表示左右单独的段长度和s表示不包括左右单独的段,中间 ...
- 【转】ButterKnife的使用--不错
原文网址:http://www.cnblogs.com/exmyth/p/4779763.html ButterKnife是一个Android View注入的库. 1.开始使用 1.1 配置Eclip ...
- OGRE插件设计-Texture与GLTexture
背景: 学习OGRE,在OGRE中 Core是最小的精简逻辑集合,而真正的功能则需要插件来实现,但是作为插件应该与Core保持最小的连接,同时Core不会调用插件的接口,而动态链接库又不能直接把类连接 ...
- ManagerDay-2
新工作开始了两个星期 基本没有什么产出,主要还是适应新岗位和学东西.作为一个由高级开发转初级PM的人,要学要接触的还有太多. 公司给我安排了一个刚刚起步的项目,可能也是我从业三年接触到的最大的一个项目 ...