软件开发入门学习的个人看法(转贴自dearbook)

      : 软件开发入门学习的个人看法(转贴自dearbook

      : zhaotide (书童)

所属论坛: 软件工程

本帖分数: 0

回复次数: 35

发表时间: 2004-4-27 9:37:22

正文内容:

软件开发入门学习的个人看法

沙鸥 (wego@163.com)

 

踏实

   偶然在网上看到《由C#风潮想起的-给初学编程者的忠告》一文. 其中一个角度:避免浮躁,倡导踏实的学习方法,我是很认同的,但总觉该文作者标题“-给初学编程者的忠告太大,所以在其文列出的一些具体的操作方法上我认为可以探讨,如同自己在某次公司总结会上就《软件开发,我们积累的是什么?》为题跟同事聊了半个多小时后,其中一个同事提到希望我能继续把这个题目细化,就刚入行的他们具体该如何发展有更具操作性的指引,当时我是跟他们说这只是我在这一行呆了5年多的体会,谈指引还太远,只是可以提出来大家思考、讨论。

  

不要过度贬低编码

   不要真的认为"不少大师级的计算机技术研究者是不懂编程的",做软件开发编码是最最基础的东西,只有踏踏实实的掌握好这个基础你才有办法往上走,不管做分析做设计做项目管理你都需要能清楚东西是如何实现的?可不可以实现?否则肯定出现大量的:"设计是设计,编码是编码","产品都是代码人员从头到尾实现的","究竟需花多少时间,难度有多大,开发人员说了算","质量/成本/进度全是黑匣子"...现象,如果你是做编码那编码就更重要了:).所以对于有志从事这个行业(软件开发)的个人来说,必须先从"重视编码"开始.过了这一关才能去考虑做系统分析,做项目管理...

   软件开发的各个环节是相辅相承的,分析有分析的重要,设计有设计的重要,编码有编码的重要,测试实施也各有其地位,任何一个环节搞不好就如同我们熟悉的木桶理论,"最薄弱的一个环节制约着其总容量".

   既然编码重要,那该如何学编码?

  

专心学好一门语言

   算算自己用过的语言也不少(括弧里为使用该语言写的比较有代表性的东东),Cdos版的图像/图标编辑工具,96年的《电脑报》有介绍),C++(可自定义方块形状的方块游戏,被收录于99年《软件》杂志的附送光盘上),汇编(DOS汉字系统,97年底完成),PB(学校自动排课/排考模块,98),ASP(一套web版的企业信息系统,99),VB(企业信息系统的核心组件,99),delphi(工作流平台,组件式GIS系统等),JavaDelphi Client + J2EE Server协同实现),.Net(规则引擎),PHH...

   看起来好象也不少,回过头来想想自己真正认真学过的语言只有一个,就是“C”, Dos年代的TC2.0,用它写了大量的小程序,比较系统的了解了编程是怎么一回事,记得那个时候看到什么软件都要琢磨它是如何实现的?如果让我来实现该如何做?也模仿了不少东西,虽然多是很表面的模仿但对自己编程思维的锻炼很有好处.后来用其它语言基本上都只是翻翻帮助,然后找找其Demo代码来看看,很快就可进入状态.

   语言都是差不多的,重要的是编码的思想”,具备了该思想语言就只是工具了,用什么工具实现都差不多,该思想的形成是需要磨练,就是专心使用一门语言来磨练(甚至需要有咬文嚼字的孔已己作风”),然后可一理通百理通”,不然你只是浮于表面的去学再多的语言都没有.都不能拿来做真正的开发.都不能了解编码的内涵.

   如在今年招聘面试的时候看到太多写着什么语言都精通(或熟练)的毕业生,我惯用的方法是给他()一张纸一支笔,让他()用自己最了解的语言写一个算阶乘的函数,这个问题你一看肯定说很简单,,接着我会往下问,可以有多少种方法来实现:循环,递归还有吗?你能写出多少种来?(代码基本结构模式的考察).代码质量如何? 有没有考虑错误处理(太多人写的代码会进入死循环比如输入的是负数) ? int的上限是多少,long? 如果输入值比较大,算得出结果吗,该如何去实现可以计算很大数的该函数?...看着他()写出来的代码一个个问题的问就得了,不管你用什么语言,不管你精通多少种语言,我只问这些用什么语言来解决问题都需要的基础的东西, 就是编码的思想”.

  在学专一门语言的基础上新东西当然要跟,不然在这个行业你是很难混下去,但有这学专一门的前提后,你跟起来就轻松了,而不用总是得”~

  一门语言的过程中为解决问题你会发现算法很重要,这就是接下来要说的基础.

 

基础很重要

   面试的时候我一般都会问,基础知识学得如何? 一般重点问的是:《数据结构》, 《编译原理》, 《数据库原理》的内容.至于《由》文提到的:《汇编语言》, Windows 程序设计》我是不会问的.这些是可以进一步学习的东西,但对现在的开发来说不是必须的.《软件工程》我向来不问,教材理论跟实际差得太远了~

  《数据结构》很重要,不懂数据结构很多编码就是蛮干”,而且往往把简单问题复杂化”,甚至复杂到不可能解决.认真学习《数据结构》并多做尝试用你熟悉的语言去实现里面的算法,你会发觉世界真奇妙”~不要认为你不会去开发编程语言不需要学习《编译原理》, 《编译原理》里面包含了太多开发软件的奇妙的思想案例,认真体会你肯定会被其解决问题的方法折服,从中你能体会到很多东西,对以后做软件(不管是设计还是编码等)大有帮助,里面有很多现存的方法可用在你的项目中,而这些跟《数据结构》是互为补充的.在这些基础上接下来《设计模式》一书你也一定得看看.

   很多应用都离不开数据库,最终总得找个地方来操纵,存储,分析数据”,关于范式,关于锁,关于SQL,关于笛卡儿那一套你总得了解了解,不然无法入手,这就需要好好学习《数据库原理》了.单纯知道几条SQL语句是远远不够的,如何保证数据的完整性,安全性?如何提高效率等等都需要这些基础的支持~

   当然英文也是基础,看英文资料确实重要,不单是书,还有网络上的大量资料,论坛看的时候别害怕就是了,毕竟都是受过高等教育的,英语也学了那么多年起码都有点底吧,配合这两个工具:《金山词霸》及Google.com,不懂的单词即指即译,但很多名词或基础知识不是靠单词解释能清楚的,配合搜索引擎查查相关资料看看,记住一点,看到不懂的东西多看几遍,默记一小会,日积月累你能看懂的东西就多了。

  

兴趣

   最后该说说的就是兴趣问题,如果你能对它真正感兴趣(如果要从事软件开发又没兴趣的话赶紧先培养兴趣去^_^),对看技术资料就想别人看武侠小说看球赛一样的话,再配合上面提到的几点(踏实, 先专后广, 基础扎实)相信在这一行多少是可以做点东西出来的~~

 

)))))))))))))))))))))

Re:软件开发入门学习的个人看法(转贴自dearbook

首先声明,我不是高手!呵呵!甚至连中手都不是,从出生到现在写过的code充其量也就一万来行,所以论经验,呵呵!少至又少,本人只是有一点想法,想与大家分享。

me从大二开始涉足编程,起初是因为寂寞,找不到激情,学编程是为了让自己不至于在这个沉沦的大学校园里更加沉论,当初不知学什么语言合适,看过c#,c,VB.但后来看了几本关于c++的书后。彻底就被c++所迷恋,c++的那种抽象封装的思想太棒了,因为有c的基础,所以很快就上手了。(by the way!并不是学习c++之前不宜学c,其实c也是一门很强的语言,只是很难应用于大的项目,me就觉着谭浩强先生的《c程序设计》就是一本很好的入门教程,很多东西讲得很清楚,比如内存是如何分配的等等,值得多翻几遍。)

后来回头看看,其实学什么语言并不重要,关键是一种思想:如何将现实世界的问题抽象成数据。仅此而已,而选择语言的标准及自己最熟悉最顺手即可。

我学c++用了两个星期的时候,(大体理解),面向对象的思想并不好理解,再多看了几本书后才有种豁然开朗的感觉,对象就好比一台CD机,你对CD机的操作无非PLAY,STOP,REPLAY, 之类,但CD的内部个个部件是怎样的顺序工作的,你没有知道的必要,这就是封装,PLAY STOP 按钮就是CD制造商提供给我么接口(INTERFACE)。

重在理解,C++的面向对象的思想并不难理解,多看几个例子就搞定了,重要的是选择一本合适的书,个人以为 钱能 先生的书不错。比较通俗易懂。

如果你身边有一个作程序的前辈,那将是最宝贵的资源,ME当时就不知该学什么东东,

由于在用VC++,所以借了一本讲MFC的书,以为这就是编程的全部,结果就盲目的学起了MFC可看了半天愣是没看懂,因为MFC是很庞大的体系,个人以为初学的人不要立马就学这东西,因为你无法从整体上理解它,之间树木,不见森林不迷失方向才怪呢!加上MFC内部千丝万缕的联系,我就迷实在了里面,一个月后,我放弃了。

现在回头看来,MFC不就是那么一个框架吗!只不过对SDK作了封装,打个比方,你想给张三大电话,号码为54321,你先拨‘5’,然后拨‘4’-----最后拨‘1’

而我现在给你一部电话,你只需要按张三这个按钮就可以了代替以上所有的步骤,

用带有‘123456789’的电话就好比用SDK方式编程,而用带有张三的电话就好比用MFC写程序。从一定程度上MFC简化了SDK,但也失去了很多灵活性。个人观点,呵呵!

还有MFCmain()函数是隐藏的,被封装了,初学者不知该从何处入手。并且WINDOWS的数据类型很另类,像WORD DWORD,HANDLE等等,这些都在WINDOWS.H中定义了,而初学的人很难理解,(我当时就傻了几天)。

如果你实在很想学WINDOWS编程,建议你去学SDK编程,从最基本的东西做起,做

CONSOLE程序,老老实实的写每一步,包括WINMAIN(),WINPROC(),等等。

其实SDK也不是很难理解,MICROSOFT创造了WINDOWS,同时提供给了我们基于WINDOWS的编程接口(API,其实就是若干个函数,就像CD上的PLAY,STOP一样,你通过调用这些函数于操作系统对话,让操作系统完成你的要求。

你可能要问,我不知道该调用哪一个函数啊?很简单,查手册呗!或是MSDN(最完整的),有一点要说的:API函数通常使用匈牙利命名法,所以你一定要了解这种命名法,API函数的名字都不短,参数更是一堆堆的,所以一定要有耐心啊!

ME认为掌握了语言后就要看《数据结构》,一定要静下心来看,你看他之前和之后对问题的分析思路是坚决不同的,(我是学自动控制的,所以已开始不知道其重要性,再用MFC作了一个仿WINDOWS的计算器(成功了,但算法很烂,我自己都觉得差)后,才看的数据结构,结果发现很多很乱的思路完全可以用数据结构的知识解决

说到数据结构,就不得不说说STL(标准模板库),他为我们提供了几乎所有的数据类型,以模板的形式,很通用。

据说离散数学也是一门必看的课程,但我没看,所以也没有发言权。

ME以为最好能多看点关于操作系统的书,了解他是如何工作的,进程(PROCESS)线程(THREAD)等等,(新概念不少啊),因为我是学硬件的,所以很多东西一看就能联想到硬件是如何工作的,理解起来就不是很难。

汇编语言一定要学,不过可以等到你上升到更高的层次时,说实话,不好学,我现在正在努力,能不能学好还是另一回事,因为你必须对硬件比较了解,比如说8086的工作方式,寄存器的使用,内存的分配等等,呵呵,自己找本书肯把!

提一点,选择自己的教材很重要,也是一个难题,很多教材简直就是垃圾,对读者很不负责,不仅错误很多,还有抄袭的嫌疑。最好是找大家公认的比较经典的看,最近机械工业出版社出的一套书就不错,只是价钱不低,(有做广告的嫌疑啊,呵呵!),译者比较负责。

关于学习方法的问题,书一定要多看,但动手更重要,如果你一味得向脑子里灌,就会失去热情,这是挑战一下自己,做一个小项目,比如:字符串处理程序,银行客户管理,等等,只有这时你才能调动你的全部大脑细胞,使身体充满激情,还有比充满激情的时刻更幸福的呢?还有什么比调试出结果更令人兴奋的呢?

很多东西只有在动手时才会学会,实践是了解到理解的必经之路!(谁说的?不记得了,AO I SAID,^-^

由于ME现在自认为自己还是一个菜鸟,所以在见识与理解上不够HIGH,一点感悟,想与他人分享,以免他人少走弯路,毕竟人生的时间是有限的,(ME着实走了很多弯路啊,555)。

不求被认可,路人一言,信否自便!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值