[科普]如何问问题,才能得到有效回答,而且不被训斥
本来想写的标题是"我为什么讨厌你们这些新人"但是又怕有些心理承受能力低的人进来哭哭啼啼的骂人...
我这篇教程,只写给真正想学好C++的人,如果确认自己不是请自行离开...
底下的回复如果不出现过激回复,我尽量摒弃我一贯的语言风格,尽量循循善诱一点...
1,提问的智慧
阅读本文的同学,请先去看这篇文章
http://www.
再次我特此提醒
1,提问前,请先确认一些事情...代码是否能编译通过...如果编译不过,编译器提示胜过任何大牛
如果编译器能编译过,调试过没?代码逻辑是否如你预先设想的那样???
2,是否已使用搜索引擎???
推荐使用谷歌,不会翻墙就找翻墙教程去...百度的相关性匹配太烂了...
2,我和你们的关系
在这个世界上,除了你的家人,没人跟你有半毛钱关系...
我们来到这个论坛,聚集在一起,大家的预想是相互扶持,相互帮助...
这里不是培训机构,没有人拿你半毛钱的报酬...
曾经在论坛里,有一个人发短信质问我..."你每天训斥那些新人,打击新人...那么这个论坛有什么存在的意义?难道只是为了高手找快感?"
我回答他:
找快感没错,要是我技术再高一点,我就去CSDN找快感了,呵呵
但是,论坛对于新手存在的意义,不是说为你不劳而获开一扇门...
假如你手脚健全,有自我谋生能力,那么你去公益组织领救济金,有人会理你吗?
公益组织存在的目的,是帮助那些真正有困难的人,尽人事,行人道...不是为你不劳而获开一扇门...
论坛里,我看大部分也就是新注册的新人,看到这么多的新人我很开心,说明编程世界每天都在增加新的血液...
但是,你们问问题的思维和逻辑真的是不敢恭维...
作业贴撇开不谈,我不知道谁会去写,反正我不会...即使有酬劳...
我自我定位,是一个比你们多吃几年饭的普通人而已...
我可以简介一下我自己...毕业四年...入国企荒废了两年...
去年毅然决然的辞职,回归编程行业...
现在C++烂的一塌糊涂,MFC一窍不通...懂一点设计模式,有一点面向对象思想...说不清面向对象和面向过程有什么区别...
在公司写的代码BUG频出,凑合能用...目前在公司的底层架构中打拼,远离界面...
在这个坛子里,只想尽一点绵薄之力...帮助一些新人成长,最好超过我,然后我向你学习...
三人行必有我师嘛...
3.什么叫作业贴?
我的定义是,只有题目,没有思考过程,没有自我思考的帖子...
举例:"XXX管理系统"...大家司空见惯的吧...每年八九月会充斥大量这样的帖子...
技术上无非就是链表加结构体...增删改查基本功能...
如果你贴了题目,说求大牛给代码,我绝对不会给的...
如果你上网随便找一段代码,你就祈祷我看不出来吧?
曾经有一个人,做类似的题目...洋洋洒洒贴了一大段代码...最后说编译不过,求修改...
我差点以为这人水平还可以了...因为他的C++代码用到了对新人而言极其复杂的函数指针,模板...
结果编译错误无非就是少个分号,字符集不对...
于是我把编译错误贴出来问他,这个编译错误是什么意思?(错误提示记不清了,但肯定是常见的编译错误)
结果他反问我:"不帮就算了,拽什么拽?"
我无话可说...
4.好了,说回正题...如何问问题...
首先,我再次确认一下...你看过那篇<提问的智慧>了...
那么问问题分为几个步骤...
第一步,自己找错误,这是提高最快的方法...
而且可以确保你第二次不要问过于白痴和弱智的问题...
第二步,如果确认使用过搜索引擎了...
如果你是新手,那么你碰到的大部分问题,一定有别人遇到过...
大家都是新手过来的...谁没犯二的时候?有时候你想了半天想不出答案,搜索引擎搜一下,看到相似的问题,突然就茅舍顿开了...
但是犯二得有个限度...
给你们讲个笑话,小学里,老师出题,已知一个胡萝卜5毛钱,求三根胡萝卜多少钱...
过了一会儿,有一个学生举手...老师说,你有什么事啊...
学生说,是一个胡萝卜五毛吗?
老师说是呀...
学生说哦,之前算错了,我以为是卷心菜呢...
我说这个笑话是为了告诉你,要学会灵活变通...
说回作业"XXX管理系统"和"XXX商城购物车"有什么区别?
没区别,同样是链表存储结构体,包含增删改查等常规操作...
所以,请学会透过现象看本质...
我上班第一年...我的技术总监问了我一句话:"你觉得程序员是什么?"
我答不上来,因为书本上没有参考答案...
他说,他觉得,程序员就是一个外语翻译...将用户的需求,翻译成计算机语言,然后用某种语言实现出来...
写程序和翻译是一样的...翻译而言,两种不同语言不可能一字一句都丝丝紧扣,两种语言肯定会有出入...所以翻译需要把握源语言的段落大意,然后使用目标语言将他阐述出来...
写程序,也就是把握你的客户需求里面的操作流程(这里我不知道怎么表述好)...然后使用编程语言实现他...
而把握需求的数据流程,操作流程这个过程,更深入一点说,这个思想过程,就是OOA...面向对象的分析...(好吧,你也可以面向过程,面向XXX)...
大牛们说得很玄乎,很绚烂夺目...说白了,00A就是你的思考过程...
好吧,我已经不知道扯到哪去了,说回来
第三步.好吧,请确认你实在找不到找不到为什么了,那么大胆提问吧...
如何提问...
首先,你要阐述清楚,你的用户需求...就是你要做一个什么样的软件...
这里给你们普及一下知识...
没有任何一款软件可以包罗万象...世上存在的软件一定是在一定的框架上搭建出来的...
比如PS,美化图片的旗舰级软件...但是他处理不了GIF,处理不了SVG...因为他的设计之初的定位就是处理像素图片,例如PNG,JPG...
有没有可能支持GIF呢...不可能...因为底层的框架限定了他的处理范围...
除非他抛弃自己的已有技术,重新做一套新的软件...
说小一点的东西吧...大家课程设计都做过计算器之类的东西吧...支持加减乘除运算...
其实这也有限定范围,比如,上百位的数加减乘除,你能支持吗?
大部分的人的实现无非就是int和int运算一下吧...
所以软件的需求决定了软件的框架...
所以你提问题的第一步是需要正确的阐述你的软件需要解决什么问题...
其次,如果需求比较复杂,啰嗦...最好带上测试用例...
也就是说,假如你的需求很麻烦,最好你还要带上期待的输入输出是什么...
这里再给你们普及一个知识...在用户的眼中,软件是什么?
软件是一个黑盒...
就像绞肉机,进去的是大块的肉,出来的是肉丝...
软件可以设想成一个机器...进去的是用户待处理的数据...出来的是用户需要的数据...
如果任意一个待处理数据都能出来正确数据,就是正确的软件...
如果进去一个数据,出来的错了,那就是软件BUG了...
所以,在第一个提示里面,我们解决了,我需要什么样的机器...
第二个问题,你需要告诉我们,你需要进行如何操作的机器...
第三,你的分析...
你们贴的代码,少的几十行,多的上百行...
作为想帮助你的人...我要做什么,你换位思考一下...
我需要吧你的代码全部拷贝到我的工程中...也许你的代码还include了一些不知道什么东西的玩意...
也许我把你的代码拷进来还编译不过...
即使能编译过,可能你的代码还需要我调试一下...
如果你能告诉我你的分析,那么将大大缩短我找出问题的时间...通过比较自己的分析和最终的答案,自己也可以更快的提高...
time is money friend...
第四,学会找出自己的核心代码...
曾经有个人写了一个XXX管理系统出错了...
贴了完整代码...我当时很想帮他...
但是我把他的代码考下来...发现又是密码验证,又是保存文件,读取文件(问题不在文件操作上)
然后我考下来,编译还可以过...但是运行时,密码验证有问题,我大致瞟了一眼代码没看出什么问题就放弃了...
其实他的代码问题出在增删改查操作上...后来那天晚上项目组开会,实在闲得无聊了,就盲看了一次,发现是操作逻辑有问题
为什么他得不到帮助...因为你给了太多的庞杂因素...
所以当时我不想去浪费时间...
好吧,这里有一个逻辑悖论...我又希望你给的代码够核心,又希望你能贴出完整的代码...
所以,请你分析,自己的代码核心在哪里?这也是自己提高的一个途径...
当然,新手可能分辨不出...
以后有空,我可以再写新的教程...
[ 本帖最后由 peach5460 于 2013-8-1 08:08 编辑 ]