`

十八年开发经验分享(一)学习篇

 
阅读更多

转载自点击这里,看了觉得对自己挺不错的。

很偶然的写了一篇博文“十八年开发经历小结”,本来打算只是简单回顾一下自己经历。结果没想到被CSDN放到了首页,反映也还可以,感兴趣的可以访问我在CSDN上的博客,点击这里或者访问我在博客园上的博客,点击这里。既然我写的东西还有人愿意看,于是我就萌发了再写一个系列的文字的想法。从第一次在CSDN上获得帮助,第一次在CSDN上帮助别人,一直到现在,期间帮助和被帮助已经很多很多次了。我认为专利和知识产权是独占并被保护的,但是经验和知识是应该分享的。为了这十八年来的帮助与被帮助,为了我写的文字还有人愿意看,我想写出这个系列来,与各位同行分享自己的经验,共同进步。这个系列的内容主要来自个人的实际经历,我不想谈一些什么经典或者范例的东西。我觉得自己体会到的东西和同行分享才更有意义,也更具有实用价值。同时我相信写出这个系列的文字,也是我对自己经验的一个认真的回顾和归纳,这一定是很有裨益的。

作为本系列的第一篇,想谈谈程序员的学习问题。之所以第一个要谈的问题就是学习,是因为我觉得这个问题最重要,也是最让相当一部分程序员比较犯愁发憷的问题。本文如果能给这部分程序员带来一点帮助或者启发,那么目的就达到了。学习问题在那篇小结中写了一小段,这次可以相对较为详细的谈谈这个问题了。

既然要谈学习,那么首先需要明确一个问题,我们打算学什么?这里先对这个纷繁世界中的知识做一个分类:

A.教材上的知识

这部分内容来自计算机专业的课程教材。也有可能会涉及一部分来自其他相关专业或者相关课程的内容。

B.编程语言

每一个程序员只有在会使用一门语言的情况下才有可能从事开发工作,所以学习并掌握一门语言是最低要求了。

C.SDK

光有一门语言是不够的,从事任何实际的软件开发都需要一个类库或者开发包才可以完成。比如C语言中的库函数,C#中的.NetFramework类库,Windows的API等等就属于这个范畴。

D.开发工具

以如今的情况来说,没有开发工具理论上也是可以开发软件的,但效率就是一个问题,所以掌握并使用一个开发工具完成开发任务应该也是一个最低要求。

E.领域知识

软件总有用户,于是开发这些用户使用的软件,那么程序员就需要了解用户所在行业的知识,至少需要知道一些基本的必须的知识。还有一部分的内容也划分为领域知识,比如从事Photoshop这类软件的开发那么图形相关的知识就必须了解一些,从事工控软件的开发,那么对控制方面的知识也要有所了解。

以上的分类是在本文中我对知识的理解,一个程序员知道这些知识后从事一个软件的开发应该是没有问题了。下面分别来讨论一下这些知识的学习问题。

一.教材知识的学习

做为一个已经从业的程序员来说,我不认为计算机专业的所有专业课程(包括专业基础课,我在读大学的时候还有这个说法)都是有用的。实际上对于大部分程序员来说,只需要很少的一部分知识就足够了。这些知识主要由三门课程组成:数据结构,编译原理,操作系统。对于大部分的程序员来说,其他课程的内容不是没用,而是在实际工作中用不上。

数据结构这门课程的重要性,可以理解为是程序员的圣经,怎么如何形容其重要性都是不过过分的。这门课程中需要掌握的内容,我个人观点如下:

1. 掌握所有线性数据结构的知识,比如表,栈,队列等(广义表可以不作要求)

2. 二叉树的基本操作和基本使用

3. 图中需要知道遍历和了解最短路径算法,以及相关的一些概念

当然对于某些程序员来说,这是不够的,因为从事的具体的软件开发工作会有不同的要求。但是对于大部分从事MIS软件开发的程序员来说,这些知识够了。掌握这些知识可以有两个层面的要求。第一个是完成足够的习题,从而可以熟练的答题,第二个是能够在实际工作中使用数据结构描述实际的事物。做到这两点要求应该说不算太高,注意多加练习就可以了。目前来说这门课程的经典教材也不少,相信只要按部就班的学习完就是合格的了。

编译原理这门课程主要是学习方法和思想而不是课程中的知识本身。因为毕业出来能从事编译器开发的人实在是太少太少了。这门课程需要掌握了解的东西不多,我个人的观点主要是以下几个:

1. 确定有限自动机和非确定有限自动机的使用

2. 词法分析程序的实现

3. 语法分析的方法

自动机在实际应用中的体现就相当于是状态转换图,这个工具非常的重要,希望能够务必掌握。我们在开发EntityModelStudio时,设计界面交互部分的内容就是先设计出状态转换图然后再写代码的,否则直接开发的话就会面临开发失去控制的风险,同时重构和维护也会相当麻烦。所以这个工具极其强大,非常实用。另外提一下,非确定有限自动机,这个工具的能力和确定的有限自动机是等价的。但是由于它的不确定性,更符合人的自然思维习惯,从而在某些设计场合相对会方便很多。这一点是很实用的,也是很吸引人的。

掌握词法分析程序的实现,可以大幅度拓展开发能力和思考能力。这部分东西理论上描述可能比较麻烦,但是实际使用时还是很容易上手的,所以非常值得学习一下。语法分析程序不需要掌握了,毕竟开发编译器的机会是微乎其微的。但是相关的方法和思想希望能够了解,这可以帮助程序员用电脑的思维来思考问题。

操作系统需要掌握的东西只有两个:

1. 五大管理的基本方法,尤其是涉及内存管理的策略

2. 线程或者进程的同步技术

操作系统是复杂的,但是教材中介绍的这些管理方法相对来说是简单易懂很多了。这一难一简之间体现了基本知识的重要性,基本知识在实际开发中的应用的广泛性。好好的体会,就可以明白用简单方法解决复杂问题的技巧。线程进程的同步,这个就不用多说了,大家都知道它的作用,如果实在不想掌握的话那我也非常愿意相信你的理由一定是充分的,否则你绝对不会那么做。

最后我想强调的是,无论你如何看待这些知识:可能觉的没用,可能觉的太难,可能是不感兴趣,但是如果你想做程序员的话,那么请你务必最大可能牢固,最大可能熟练的掌握它。

二.编程语言

对于一个程序员来说,一般需要掌握2,3门语言是基本的,并且学习一门新的编程语言也是基本功级别的能力,所以这部分主要谈谈快速学习一门新的编程语言的方法。我学过的语言有这些(这里编译器和语言的概念等同了并且不按先后次序):Foxbase,C,C++,汇编,Visual C++,Delphi,FoxPro,VB,C#。就我个人的体会来说,这些语言可以分为三种类别:非面向对象的,面向对象以及支持可视化设计的。

这三种类别的语言有一些共同的内容,而这些内容也是我们在学习一门新的编程语言时首先需要知道的,可以说是关键的知识点。这些内容大致如下:

1.常量,变量,数组,不同的数据类型

这部分需要掌握常量,变量,数组的定义,初始化,不同数据类型的使用。数组中元素的读写,作为参数如何定义,作为返回值如何定义。有些语言还支持数组大小的重新定义。

2.函数(或者叫子程序)

函数如何定义(比如参数和返回值),如何调用(这里存在异步调用和同步调用的问题),全局的还是非全局的。

3.流程控制

分支结构:if语句,if else语句,switch语句;循环结构:for语句,while语句,do…while语句,有些语言可能是Loop。

4.最基本的输入输出和文件操作

最基本的输入输出语句可以帮助你在学习语言的过程中完成简单程序的练习任务,比如:输出到控制台,dos操作系统中输出到屏幕等等。文件操作也要知道,至少以后写个程序生成日志文件就会了。

以上内容在学习一门新的编程语言时,希望能首先掌握,这能让你很快的入门,并尽快使用新语言写出代码。另外还可以关注一下其他方面的内容,比如:

1.了解语言的新特性

这个阶段只需要了解,不需要掌握,记住有这些新特性,在需要用的时候想起它们就可以了。

2.了解一下帮助文档中,该语言的所有关键字

这部分内容有可能让你发现一些很有用的东西。

好了,知道这些内容差不多一门新的语言就算入门了。当然还有其他很多东西,但是这些内容可以在具体开发中遇到时再去找例子就可以了。下面谈谈这些语言的差异。对于面向对象的语言来说,需要知道面向对象三大特征:封装,继承,多态在具体的一门编程语言中是如何表达的或者等价表达的。对于支持可视化设计的语言来说,还需要知道如何设计窗体,以及常用控件的使用。按照这个方法,从一门已经会的编程语言到学习另一门新的编程语言应该是比较快的。对于还在大学中学习的人来说,我的建议是C++或者Pascal中的一个,VB或者C#中的一个或者其它可视化开发语言中的一个学习一下。如果可能学习一下汇编是最好的。

分享到:
评论

相关推荐

    十八年开发经验

    十八年的开发经验,为你指导一条清晰的编程一路,可以让你更好的了解软件这方面的发展与积累,值得一看。

    十八个超级酷HTML5响应式网站前端源码,6年以上开发经验前端开发人员整理

    这个"十八个超级酷HTML5响应式网站前端源码"的集合,显然是由一位拥有6年以上开发经验的前端专家精心整理的,旨在为开发者提供一系列高质量的示例和模板。 首先,让我们深入了解一下HTML5响应式设计的核心概念。...

    NSE4 7.0 八月十八Pass,分享192Q学习文档手册.pdf

    NSE4 7.0 八月十八Pass,分享192Q学习文档手册.pdf

    信誉十八年平台任务助手v1.0

    "信誉十八年平台任务助手v1.0"正是这样一款专为优化任务流程而设计的软件,旨在帮助用户在实物大厅和虚拟大厅中轻松、快速地进行任务发布和抢领,极大地提高了工作效率。 首先,让我们深入了解一下这款软件的核心...

    设计模式十八篇

    在《设计模式十八篇》中,作者通过“打球篇”这一具体场景深入浅出地介绍了享元模式的应用场景和实现方法。 #### 二、享元模式结构 享元模式主要包含以下几个组成部分: 1. **抽象享元接口(Abstract Flyweight)...

    android 混合开发学习

    该思维导图详细描述了学习android混合开发的路径,以及详细代码

    燕十八jquery手记

    ### 知识点提炼 ...通过以上知识点的学习,可以更好地理解和掌握JavaScript的基本用法及其与DOM之间的交互机制。这对于前端开发人员来说至关重要,能够帮助开发者创建出更加动态和响应式的Web应用。

    从零开始学习音视频编程技术(十八) 录屏软件开发之编码AAC

    从零开始学习音视频编程技术(十八) 录屏软件开发之编码AAC 这是Qt的工程,建议使用Qt Creator 打开 Qt的版本是4.8.4,当然是用Qt5也是没有影响的,不过编译器记得使用Mingw。 FFMPEG的版本是2.5.2 记得将...

    Mysql燕十八学习笔记.doc

    Mysql学习燕十八学习笔记文本文件,Mysql三大列类型 1. 数值型2. 字符串型3. 日期时间类型

    MyEclipse开发中文教程

    本教程共分为十八章,每一章都深入浅出地阐述了MyEclipse的各项功能和使用技巧,旨在帮助开发者提升工作效率,更好地进行项目开发。 第一章至第十章主要介绍了MyEclipse的基础知识和基本操作,包括安装配置、工作...

    客户开发十八式.pptx

    客户开发十八式.pptx

    设计模式十八篇.doc

    在这个文档中,我们将关注“设计模式十八篇”中的两个模式:享元模式(Flyweight)和桥接模式(Bridge)。 享元模式(Flyweight): 享元模式的主要目的是通过共享对象来减少内存中的对象数量,从而降低内存占用和...

    干部现实表现材料2021年范文十八篇.pdf

    干部现实表现材料2021年范文十八篇.pdf

    浙江专版2020中考英语复习方案第一篇教材考点梳理课时训练十八Modules10_12九上试题

    关于“浙江专版2020中考英语复习方案第一篇教材考点梳理课时训练十八Modules10_12九上试题”,我们可以从中提取出一系列与英语学习、考试复习及零浪费生活理念相关的重要知识点。 首先,这个复习方案是针对浙江省...

    最新送给儿子十八岁生日寄语(通用3篇).doc

    十八岁是一个特殊的时间节点,它意味着你将从一个无忧无虑的少年成长为一名需要承担更多责任和义务的成年人。从此刻起,你将享有宪法赋予你的全部权利,同时也必须承担起相应的社会义务,比如参与社会事务、遵守法律...

    备战PMP心得和经验分享.doc

    【PMP备考心得与经验分享】 备考PMP(项目管理专业人士认证)的过程是一场身心的历练,需要坚韧的心态和有效的学习策略。首先,心态的调整至关重要。在初期,面对未知的知识体系,可能会感到迷茫,这时要保持平和,...

    建武十八年改革后刺史职权变化研究.docx

    《建武十八年改革后刺史职权变化研究》探讨了汉光武帝刘秀在建武十八年对州牧制度进行改革的历史背景及其深远影响。文章指出,刘秀在完成全国统一后,为了加强中央集权,巩固皇权,对原有的州牧制进行了重大调整,由...

    燕十八mysql入门.zip

    【燕十八mysql入门.zip】这个压缩包文件是一个针对MySQL数据库管理系统的基础学习资源,由知名教育者燕十八提供。燕十八以其通俗易懂的教学风格在IT教育领域颇受欢迎,他的资料通常深入浅出,适合初学者入门。这个...

    USB学习板开发说明书

    ### USB学习板开发知识点概述 #### 一、项目简介 - **项目背景**: EasyUSB51Programer是由百合电子工作室推出的首个USB开源项目,旨在帮助开发者深入理解USB HID设备类的开发过程及其应用。 - **核心功能**: 该学习...

    燕十八PHP培训笔记

    这份笔记旨在帮助初学者以及有经验的开发者深入理解和掌握这两种在Web开发领域中至关重要的技术。 首先,关于MySQL,它是世界上最受欢迎的关系型数据库管理系统(RDBMS)之一,广泛应用于网站和应用程序的数据存储...

Global site tag (gtag.js) - Google Analytics