那些年,我开发过的软件

林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

       摘要:本文从自己入门开发的软件说起,主要阐述了自己入门程序界的过程以及一些经历,文末也提出了自己学习的一些心得和方法。

话说进入程序界这一行业,也是很偶然的一个因素,三年半之前笔者都还只会写点Matlab程序,当时最大的愿望就是学好Matlab,参加数学建模大赛,冲刺国奖,从此走上人生赢家的道路。无奈,那时算法能力实在一窍不通,更准确说就是完全没有算法的基础,被人虐得死得活来,只能眼巴巴看别人拿大奖,自己黯然神伤。比赛之后自己就在想,如果自己有更好的编程能力肯定能做得更好,毕竟当时确实有些问题已想出来,但是就是无法实现。

在笔者真正开发软件之前,第一个接触的是算法,这是一个关于粒子群算法的研究。这也是第一个深入研究的算法,自己也学了很多的知识。 这也是最基本的粒子群了,只记得写了一个月的程序和文档,花了一个礼拜,效果其实还是可以的。当然,纯理论的研究确实很没意思,下面是一个很有意思的应用:采用遗传-粒子群来解决旅行商的问题;

其实这个效果当时笔者自认还是可以的,可惜老师反应一般,他认为这个应用没什么好处,说得和本专业相关的,然后就没有然后了,只是觉得理论研究得很爽,但是真正要拿来应用,却突然发现,不知道要用在什么地方了。

写Matlab程序的人,注定要被鄙视,除了进高校做研究。当时有个同学用C++来做粒子群的,那也是第一次听说过这个语言,只是没想到,就过了一年之后,自己也开始接触它了。情况是这样的:那时自己用Matlab做了一个无镜头成像软件,老师说太难看了,而且不能单独运行(必须得在Matalb程序下运行),要求改改其它法子。好,你说改,那我就改,然后就开始狂看C++,去图书馆借了很多书,每天都不断的看书,感觉那段时间还是挺充足的,平时上上课,闲时码码代码,听几首小曲。日子一天天就这么过去了,软件也一天天的在成型,其实当时还是很有成就感的,只不过做出来的东西老是被老师说,这才是最大的悲哀吧。感觉老师就和现在的产品经理差不多了,天天都在抓着你干活,不断给你活做。虽说辛苦,但自己确实是学到了东西,所以年轻人还是要多码代码,多学技术才是王道。

这个软件做出来就是这样的。

这是一个摄像头采集的软件,使用VC6.0+MFC+VFW来完成的,代码也就几千行。做出来之后,老师还是不满意,其实我已经很满意了(现在再来看确实太烂了)。可是,菜鸟的水平就是这样,谁不是都从菜鸟走上来的?编程这东西,就是一个不断练习的过程,不是说你写得多就是高手,但是你如果不写,你肯定成不了高手。

这个软件被批评之后,郁闷了有段时间,然后有个计算机的同学就说,这都什么年代了啊!你还在用VC6.0?他给我推荐了VS,然后开始上手VS2008,用了一些时间,又开始上手VS2010,慢慢地,我开始接触一些比较深层次的东西,也是在这个时间段,自学了linux,数据结构。然后又专门研究了图像处理的相关算法,以及OpenCV的使用,我是一个不服输的人,既然你觉得我做得不行,那好,我就搞一个高大上来让你看看。然后就有了下面这个软件的出生了:

集合了图像采集、图像处理、图像测量、全息重建、视频处理。最利害的是融合了电机的控制功能。这个软件也是用MFC做的,图像采集方面使用了DirectShow,图像处理方面使用了OpenCV,图像重建方面使用了。FFTW,图像测量则是GDI。

       也就是在这个软件开发完成后,自己开始真正喜爱了编程,以前会写代码,那完全是因为课题上的需要。编程刚开始人都是三分钟的热度,不一会儿又会被其它事物分神。所以坚持是很重要的一件事件,对于学习,自己也有一定的心得,下面我来介绍一下我自己的学习方式,希望可以帮助大家。

  • 光看不练假把戏

好多人刚入门时都比较懒,觉得都很简单,都只是读读背背,如果是这样,应付考试的需求还是可以。但如果想要把基础打好,还是一步一步把书上的代码都自己敲敲吧!多看书,首先要把一些知识点理解透,然后就是多写,多写书中的代码例子,先抄,然后慢慢理解。理解之后自己把他写下来。在往后就是多敲了。敲当然是敲代码了。在熟练掌握了编程的技巧之后,下一步要做的就是多练了。

  • 学会利用网络资源

有事没事就来CSDN或者其它IT技术网站看看,里面都有一些大牛可以去学习。也可以去下载一些网上的教学视频虽说看视频的效果其实比不上看书,但也不是一定的。而且现在网络上的资源很丰富,基本上想做什么项目,网上都可以找到相关的,自己可以研究别人的代码,学习别人的技术。

  • 编程习惯&&学会模仿

模仿牛人的代码风格、编程思路。刚开始大部分人的代码都是写得很烂的,也没有去做什么优化,甚至有可能自己写写着写着都看不懂了,所以要养成编程的好习惯。同时至少要掌握一个版本控制软件,如SVN或GIT,这可以为你节省很多时间专注到代码的编程实现上。

  • 独立思考&&钻研精神 

遇到一个问题时,首先应该自己要想想问题的具体来源。不要看都不看,就去问老师、问同学。程序员要有钻研的精神,越是难题,自己解决之后,越是能学到更多的东西。因为在这过程,你经历了分析问题,思考问题,解决问题的一个过程。这中间最好能写写博客,可以记录自己的学习历程,遇到的一些问题,解决方案等等。写博客能让你的逻辑思维更加有条理,语言组织能力也能得到提升。而且找工作时,有技术博客还可以给你加分!

  • 自主学习&&新技术

人闲了之后最怕的敌人就是懒,多观注一些新技术。比如最近大火的云计算,大数据等。以前听一个大牛说,不会三种语言的程序不是一个好程序员,虽说有点言过其实,但是还是有一道的道理。再说了,技不压身。多一道技能,多一个工作的机会。但是这里一定要至少熟悉一门的语言的基础上再过学习其它的,要不换来换去的,最终受伤的肯定是你自己,什么都会,但什么都不精,这样的人竞争力是不会有多大的。

     最后,说一句:习惯是条狗,你把它养大了,它就会一直跟着你,甩都甩不掉。所以,少打游戏多学习,少看电视多看书。你付出了时间与汗水,最终肯定会收获知识与金钱!代码是不会辜负你的辛苦的!

版权声明:本文为博主林炳文Evankaka原创文章,转载请注明出处http://blog.csdn.net/evankaka

时间: 2025-01-03 02:03:56

那些年,我开发过的软件的相关文章

atitit.提升开发效率---MDA 软件开发方式的革命(4)----编辑表单建模

atitit.提升开发效率---MDA 软件开发方式的革命(4)----编辑表单建模 1. 建模语言的选型anno+html...不是uml 1 2. 指定显示模板 @BeanEditForm(tmplt="c:/edit.html") 1 3. 配置属性的@Property(lable="xxx")显示 2 4. 配置属性的显示控件方式@DataType(value=DataTypeConstants.select,datasource="c:/cate

浅谈敏捷软件开发与传统软件开发

本文将介绍传统软件开发与敏捷软件开发,并简单分析二者的优缺. 首先我查阅相关资料大致了解了下为什么会爆发"软件危机"和什么是"软件危机".由于在早期的软件开发活动中有明显的个体化特征,开发流程不规范,人们没有将软件与程序加以详细的区别,对程序之外的数据和相关文档资料没有给予重视,对编写程序之外的软件活动也没有给予重视,因此出现了"软件危机"."软件危机"的特点有:开发成本急剧上升.不能按时交付软件.软件难以维护.无法保证软件质

敏捷软件开发VS传统软件开发

敏捷软件开发VS传统软件开发 软件开发方法是软件工程理论的重要内容,在软件开发方法中,对于开发软件时的"做什么"和"如何做",给出了明确的.详细的回答.那软件开发方法的"做什么"和"如何做"之间究竟有什么异同? 下面本文就传统软件开发和敏捷软件开发的来探讨一下. 关于传统软件开发 在软件开发方法出现之前,人们普遍错误的认为开发软件只是编写程序.当时,软件开发活动个体化非常严重,编写程序随心所欲,过分追求编程技巧,造成程序很难阅

敏捷软件开发与传统软件开发的对比

敏捷软件开发与传统软件开发的对比 最早了解敏捷开发是通过大二的一次博雅课堂,一位在百度工作的北航学长跟我们分享了他近年来从事敏捷开发的经历.印象最深的一句话是一个延迟3个月交付100%功能的软件和一个按时交付75%核心功能的软件,敏捷软件开发者更愿意选择后者.本学期的软件工程基础课又向我们讲授了传统软件开发,经过课上和课后的学习,对于敏捷软件开发和传统软件开发有了浅显的认识和理解.由于课上学习的重点是传统软件开发,所以课下对敏捷软件开发进行了更多的涉猎,本文以敏捷软件开发为主体,来分析其与传统软

Python开发双工聊天软件

需求: 1.用Socket开发双工聊天软件,服务端与客户端交互 2.聊天记录要记录到MySQL数据库 3.客户端可以查看聊天记录 4.用三层架构开发 程序架构 各文件作用解析 - model              model层 - dialogue.py        dialoue表 - users.py          users表 - utility             公共层 - sql_helper.py       公共配置文件 - client.py         客户

让你提前认识软件开发---学长的软件开发经验总结(19)

第1部分 重新认识C语言 C语言中的协议及单元测试示例 [文章摘要] 在实际的软件开发项目中,经常要实现多个模块之间的通信,这就需要大家约定好相互之间的通信协议,各自按照协议来收发和解析消息. 本文以实际的程序代码为例,详细介绍了如何用C语言来实现通信协议,并基于对协议字段的判断,说明了程序单元测试的过程,为相关的开发工作提供了有益的参考. [关键词] 软件开发  协议  单元测试  C语言  字段 一.软件模块之间的协议 什么是软件模块之间的协议?不同的软件模块之间要实现相互通信,就必须遵循共

让你提前认识软件开发---学长的软件开发经验总结(18)

第1部分 重新认识C语言 C语言中常用的文件操作函数总结及使用方法演示代码 在C语言中,有关文件操作的函数多达数十种,但并非每个函数都经常会被用到.        本文对实际软件开发项目中常用的C文件操作函数的用法进行了总结,并用实际的C代码来演示了它们的用法. 1. C语言中常用的文件操作函数总结 (1) fopen 作用:打开文件. 表头文件:#include <stdio.h> 定义函数:FILE *fopen(const char *path, const char *mode); 函

传统软件开发与敏捷软件开发的比较

本篇博客分别基于软件开发生命周期和范围管理这两个不同的方面对传统软件开发方法和敏捷软件开发方法进行分析比较,希望与读者分享交流. 传统方法: 从本质来讲,传统软件开发方法是一个软件开发架构,其开发过程是通过一系列阶段顺序展开的.通常,这一方法不能很好地表达和描述用户的需求,而且在项目整个开发周期的所有阶段都有需要不断完善的文档. 敏捷方法: 软件行业飞快发展,软件技术不断创新,客户期望迅速变化,考虑到需要克服传统开发方法的缺点,敏捷开发在近十年来兴起,以其灵活性,易操作性得到软件行业的广泛关注.

atitit.提升开发效率---MDA 软件开发方式的革命(5)----列表查询建模

atitit.提升开发效率---MDA 软件开发方式的革命(5)----列表查询建模 1. 配置条件字段@Conditional 1 2. 配置条件字段显示类型为[email protected](displayType = displayType.rang, rangStart = rang.start, rangEnd = rang.end,op=op.range) 1 3. 自定义@Adapter (UI2whereExpress) 2 4. 条件字段排序@ConditionFieldCf

前端开发---前端相关软件分享

**接触前端开发半年多以来,用了不少的前端开发工具与一些前端开发有关的软件. 在这里我介绍下自己的前端开发相关的软件,这些都是我现在用的,用的比较方便顺手的.** HTML+CSS+Javascript编辑器 Adobe Brackets 这是一款开源的对HTML5,CSS3支持很好的,Javascript代码提示友好的,具有很多贴心功能的(颜色选择器,路径提示) 简介的编辑器.她还可以配合Chrome实现实时更新界面的效果,就是代码发生修改保存,页面内容立刻刷新. 简单实用,开源免费是我非常喜