如何找需求练技术

 

 


如何找需求练技术


肖舸老师

被很多同学问,怎么才能知道用人单位的需求。
 


这个给个建议哈:去 CSDN 或者其他什么网站的项目外包栏目看看,里面的需求,就
是别人肯付钱的需求, 自己试着实现一下, 比较练技术。 如果能卖出去, 就表示技术练差不
多了, 可以凭这个项目经验找工作了。 个人感觉, 这个项目经验在找工作的时候, 有时候比
学历证书管用。

嗯,这里面有几点请注意:

1、不要做外挂!不要做木马!不要去破解!这短期内能帮你赚钱,但长期看,相当于
自己封杀自己这辈子到达程序设计巅峰的机会。 靠偷东西, 是没有办法受人尊重的。 就算以
后赚很多钱,脑门上还是写了个“贼”字。

2、不要去评价对方要求合理不合理,他肯花钱,就是客户,客户永远是正确的。

3、不要去嫌钱少,你觉得你已经很努力了,用了很多技巧,用了很多技术,但是,你
干的活,对客户产生的价值,就只有那么点。

4、有些太大的需求别怕,比如20000 做个带 V oIP的 IM 软件之类的,那明显不是给你
的,是某些人,希望做套IM 系统,但又舍不得花钱,希望用这点钱,诱惑某个正在做这个
IM 软件公司的员工,把公司的源代码偷出来卖给他的,这是一种诱惑,算是引人犯罪,别
理他,堂堂正正地做人,比什么都强。

5、别怕别人的回复,很多人回复,说是什么什么的成熟团队,其实可能就做过一两个
项目而已,你找几个朋友也可以,尝试给客户发发电子邮件,低调一点,慢慢谈,刚开始甚
至免费做, 就期待对方给你一个机会。 只要做过, 你已经赚到项目经验了, 已经获得很多了。

6、不要想着一个人做事,有人看见一条自己合适做的,激动万分,生怕别人知道了,
恨不得这条消息马上下线, 免得有竞争对手, 其实, 有竞争才有进步, 找几个同学, 一起做,
你会发现,你的同学比你聪明的。学着欣赏他们,以后你就是项目经理。

7、不要气馁,千辛万苦做出来,对方客户一句话,不要,很正常,市场竞争就是这样,
千万别跳楼,自己再来就是了。大不了重新来过,怕个P 啊!

8、用心做事,既然做了,目的就是卖钱,不是过家家,不是开玩笑,用尽全部心思,
让客户买单,不管最后结果如何,只要你做了,就问心无愧,而且,你会发现这个过程给你
带来的,比你卖的钱要多得多!


9、最后一条,如果你赚到钱了,有低年级的小弟,请教你如何赚钱,把我这篇文章推
荐给他, 这不是培养竞争对手, 是把软件外包这块市场越做越大, 钱是赚不完的。 帮别人就
是帮自己, 以后你做项目经理, 如果你手底下的技术骨干是你这么培养起来的, 你说轻松不?

学生评论:

河南成功学院 Gwolf 团队 赵鹏(C/C++爱好者):
比我的驱动学习还是任务学习更加深刻, 更加考虑周全。 再提炼就可以把一种学习方法抽象
成一种方法学了。呵呵~~期待您的下一篇……
在肖老师的指点下,这里我针对我们学生,提出几点小的建议:
1.找需求
不要找大的,就找小的,比如做一个程序自动开启器,一个课程表,一个游戏计时器,一个
博客计数器都可以。
关键点在于:能够通过自己的眼睛来发现需求,然后抽象成一个软件或者一段程序
2.团队学习
团队学习不是你让别人来, 别人就来了。 一般也不是约来的, 我更看中的是你也强了, 然后
带动一部分强了, 那么团队就有了。 一开始就想要个团队, 我觉得是会失望的, 因为很简单,
人家为什么要和你一起呢?
关键点:尽力用实力营造羊群效应,被动地带动一部分来做,而不是主动!
3.钱的问题
一般情况下,学生的作品是不能产生商业价值的(仅仅是一般) ,所以,目光要远点。能卖
钱的, 一般就是网站之类的, 管理系统什么的。 这些东西可以在学习体验软件工程的时候来
实践,但不是说别的项目就不能实践软件工程,只是如此实践,成本较低!大学时代,多去
探求真理, 知识根本原理。 比如web 开发的数据处理模型, 数据库的基本模型等等, 那么以
后的价值增长是不可估量的
关键点: 做事情要学会计算成本, 尤其学习, 因为时间成本是没办法回收的! 大学时代不为
钱,就为明天的增值,就为今天的成本而学习!
以上纯属个人意见,仅供参考!

 


修炼编程的内功


肖舸老师
 

IT 学生解惑真经
 

这也是一直想写的一个话题。 近期, 在坛子里也回复了一些帖子, 感觉同学们在这方面
认识也有一些偏差。干脆就写一篇吧。这里是两篇同学们的帖子,大家可以参考一下。

老师,给有点迷茫的学生一些指导吧,谢谢谢谢谢……杰杰 2009-06-02 04:12
http://student.csdn.net/space.php?uid=46110&do=thread&id=1840
也来出道题郭晓 2009-06-03 23:26
http://student.csdn.net/space.php?uid=54179&do=thread&id=1921
(特别注明啊,在郭晓同学的题目中,肖老师被狠狠地鄙视了,呵呵。 )

还是那句话,一家之言哈,欢迎拍砖。

很多年以前, 我还是一个学建筑的学生, 但是很喜欢学计算机。 不过呢, 由于专业限制,
我没有计算机用的。学校只开了一个学期的Fortran 语言,上机时间只有可怜的5 节课,那
会把我憋坏了,呵呵。

大家不要笑啊,90 年那会,生活不富裕,PC 机还是一个很贵的东东,一般家庭都还停
留在 18 吋电视机的时代,大学生又是最穷的,物质条件更为匮乏,我当时有个小收录机,
京华牌的, 呵呵, 在同学中已经很牛叉了。 因此, 像现在的同学们, 一考上大学,MP3、MP4、
笔记本电脑家里给配齐的, 在当时是根本不可能想象的事情。 我作为过来人, 还是要说大家
一句,大家真是生在好时代了,很幸福的。

不过呢,我很喜欢编程,就养成一个习惯,想象编程,找一个题目,自己在脑子里把程
序构思出来,写在纸上,然后自己模拟电脑的run,把程序过一遍,看能不能执行正确。这
个习惯现在都还有。 呵呵, 我老是劝大家写简单的程序, 其实和这个习惯有很大关系, 因为
我比较笨,稍微复杂的程序,脑子就想不过来了,就晕了。

也正因为有了这个经历, 我就开始思考一个问题, 编程究竟是什么?呵呵, 当时我在学
校,也是小有名气,大家都知道有这么个程序疯子,没事喜欢发呆,喜欢想程序。在一次舞
会上(别激动,我也是过来人,也会跳舞的,虽然很难看哈,呵呵) ,一个计算机专业的师
姐就考我,问我编程是什么?

我当时想了一下,很郑重地回答她,我的理解,编程就是拆解任务,把一个任务,拆解
成很细很细的步骤, 一步步教计算机去做。 计算机很笨的, 举个例子, 我们说早上起来去上
课,是个人都知道做什么,但是它不知道,因此,我们要告诉它:

起床--穿衣--拿饭盒--去食堂--买早饭--吃饭--洗饭盒--回宿舍--放饭盒--拿书--出门--如果
人都走完,要记得锁门--去教室--推门--找到自己的座位--走过去--坐下来--等待上课--上课。

 


说到这里, 我突然自己有点明悟了, 编程, 就是把复杂的问题简单化, 简化到每个动作
都是 1+1=2 那么简单,然后计算机照做就好了。这就是我理解编程的真谛。我师姐听到了,
也若有所悟,这个话题就没有再说了。

我们来分析一下计算机的特点,准确的讲,目前我们这个社会的计算技术,还很原始,
说它是计算机,正确,它确实只能计算,说它是电脑,太抬举它了,它不可能有思考能力。

在冯诺依曼体系架构中, 计算设备就是具有一定计算能力, 有能力和外界做出IO 互动,
并且能高速重复动作的这么一种设备, 这可能和大家在教科书里面学到的不太一样啊, 不过,
我是这么理解的。

因此, 我从一开始, 就没有把计算机作为一个伙伴, 一个可以帮助我出主意, 或者代替
我思考的伙伴, 仅仅是看做一种工具, 这种工具有什么用呢?我认为它最重要的, 有两个作
用:

1、 无限可重复性, 一个动作序列, 一旦编订程序, 计算机就可以无数次重复这个序列,
不会感到累。 这特别适合于那些乏味的, 不断重复的劳动, 比如, 我们一个学校每天要敲钟,
打上课铃,如果让人来做,这个人会很乏味,做久了,就可能出错,但是让计算机来做,它
可没有什么思想,不会觉得累,而且做的很好。计算机特别适合做重复性工作。

2、服务品质的稳定性。计算机适合做重复工作,还有个有点,就是每次执行结果都是
一样的。这体现了工业化时代最重要的一个思想:量产思维,大家可以看到,现在的社会,
不可重复的艺术固然很好, 但公众需要的是量产的产品, 因为质量稳定, 产量稳定, 能满足
大众需求。劳斯莱斯虽然很美,但绝大多数人在开大众、丰田等低端车。就是这个道理。还
是打铃那个例子,如果是人,可能会生病,可能会请假,或者干脆搞忘了,但计算机不会,
只要有电在正确工作,打铃就不会出错。

这样, 我就慢慢理解到了, 计算机其实就是能以恒定品质不断重复输出服务的机器而已。

ok 了,这我们是不是可以理解到,计算机编程,其实首先是人的工作,当我们遇到一
个服务需求, 我们人来做一次, 嗯, 获得一个比较满意的结果, 然后我们觉得这个动作可以
重复,下次遇到类似的问题,照做就好了。于是,我们就安排计算机来做这件事了。是不是
这样?

这是不是说明, 程序, 其实是在讲一件事应该怎么做, 这个做的过程, 以及这个过程的
含义,其实是人定义出来的,然后通过编程,教给计算机来做而已。

我以前经常有种感觉,计算机编程,是两层意思,一层,是程序本身的含义,就是怎么
做事,另一层,是隐含在程序下面的逻辑含义,就是做事的意义,程序只是字面上的意思,
而逻辑,是程序段落组合起来,共同表述的一层意思。现在想想,其实就是这个道理。

嗯,既然我们知道,编程,就是把做一件事情的步骤,分拆开来,教计算机去做,但,
分拆到什么粒度呢?这个很重要。 如果分拆的粒度太细, 白白浪费程序员的时间和精力,这
些都是成本。而分拆得太粗,计算机还是弄不明白,做事不对,就是bug 了。

 

这说明,编程有个很重要的概念,就是粒度,也就是我们对问题描述的精细程度。

最开始的计算机是最笨的, 学过计算机组成原理的同学大概知道, 只要有个累加器,其
实已经可以算一台计算机了,只会做加法计算。因为从数学上,我们可以知道,任何计算,
最终都可以演化成加法计算,事实上,现在的CPU,在最底层核心的部分,也还是这个加
法逻辑。

这样做当然没什么不好,不过,有个小小的问题,就是粒度太细了。如果每件事情,都
要程序员去拆解成很细的加法计算, 这个工作就几乎不是人干的事情了。 难道就无解了吗?

呵呵,前面我们说过,计算机的特点是什么?无限重复,大家就发现,一个事情,比如
7*24,这是乘法计算,但是,我们最终要拆解为加法计算去实现,但是,不是说我们每次都
要这么拆解,乘法计算也是一个工作,有规律的,因此,当我们拆解一次之后,我们当然可
以把这次拆解过程本身, 编订为程序, 下次遇到类似问题, 让计算机把这个程序再跑一遍就
ok 了。呵呵,大家以为Intel 的 CPU 里面的乘法计算指令是怎么实现的?大家又以为AMD
的 CPU 内部的微代码体系是怎么实现的?

就是这么一个思维, 解决了所有的问题, 遇到需求, 首先拆分, 然后不断检索我们以前
是不是以前拆分过了, 遇到能套用的程序段落, 就直接用, 不用每次都拆分那么细, 减少工
作量,当然,遇到新问题,还是需要自己拆解的,不过,拆解后,最好把拆解本身,也写成
程序,下次重用。

大家玩各种语言,一般都提供基本库,这个基本库,其实就是前人已经拆解过的结果,
软件公司觉得有代表性, 可以满足大多数应用场合, 就编订到基本库里面, 以后程序员直接
用,不用自己重复了,大家说是不是这样?

现在,大家知道怎么看待 C 的 stdio.h,stdlib.h 这些基本库了吧?C++的 iostream 是什
么含义,知道了不?MFC 知道了不?Java 的运行时库是什么意思,也知道了吧?

不过呢, 这个世界的需求总是很多的, 并且, 计算机的能力也是不断在进步, 以前不适
合计算机做的事情, 现在也慢慢变得适合了。 因此, 大家总能遇到一些新问题, 需要自己重
新拆解, 基本库中没有提供, 这就是程序员这个职业存在的真实含义。 帮助用户不断拆解新
需求,解决新问题。当然,库本身也在进步,不断把已经被证明拆解成功的问题,修补到库
中,避免以后的程序员做重复工作。就这么简单。

呵呵,啰嗦了这么多,可能很多同学看的一头雾水,肖舸老师你到底想说啥?

我想说的,其实很简单,编程序,就是拆解问题,但讲究个拆解的技巧和方法,以前人
做过的,别做,尽量用,没有的,做过一次,尽量保留下来,供下次使用,就这么简单。

那,这和本文的题目“修炼编程的内功”有啥关系呢?

当然有关系了, 什么叫编程的内功?我的理解, 就是对这个世界的抽象化理解能力以及


描述能力。 一个工作, 能迅速从中提炼出下次可以重复的套路, 并且能以一定的规则, 就是
计算机语言规范, 描述出来, 拥有这两个能力, 就能保证遇到任何问题, 都有办法写出程序
来。

所以,大家学校中学了很多数学,语言,算法,数据结构,甚至编译原理,操作系统,
其实这些统统是工具,不是写程序的目的。

写程序,就是遇到需求,能迅速抽象,理解其共性,并能以清晰的语言描述出来。上述
学科, 不是帮助提升你的抽象能力, 就是帮助提升你的描述能力, 大家看是不是这个道理?

所以, 我在带徒弟的时候, 有时候喜欢说一句话, 其实作为程序员, 学习一点语文有好
处,因为最能培养描述能力的,其实还是语文。英语不算啊,英语虽然也是一门语言,但中
国的教育, 一般是能看懂, 很少从一个英文文学家的角度培养学生用英文的描述能力。 只有
我们的语文课, 这不但是教语言, 而且通过无数次造句和作文, 在教大家描述问题的组织能
力,这个能力在写程序的时候,很有用。

这个时候,话题就出来了。中国的语文,先是甲骨文,然后古文,然后白话文,大家发
现没有, 总体是越来越简单, 这是发展的趋势。 为什么呢?因为大家觉得, 语文就是让人懂
的,太深奥的东东,不太适合普及,就没有生命力,反而越简单的东东,普及越快。

因此, 请大家注意, 写程序时拆解, 是把问题简单化, 不是说把一个问题描述得晦涩难
懂,才叫本事。真正的程序高手,都是简化问题的大师。

当然, 从这个话题, 我们是不是可以得出一个结论, 其实写程序的方法本身, 编程的内
功本身,其实是没有什么语言特性的,C、C++、Java、PHP、Python。 。 。是不是都用的同一
种方法在做事情?

因此,我这里提出,修炼编程的内功,是学习抽象能力和描述能力,与语言无关,换而
言之,从任何一门语言入门,都可以修炼到内功的极致,关键看你用不用心。

因此,学习期间,我的建议,不要好高骛远,不要去评价语言的好坏,平台的好坏,没
有多大意义的, 你并不能确定这辈子最终能在哪个平台下用哪种语言开发。 捡着手边有的书,
老师教的课程,埋进去学扎实,出来后,换语言比吃盘菜也难不倒哪去,呵呵。这算是正式
回答杰杰同学的问题。

再说一下郭晓同学的问题。他列了一个很偏的题目,就是有两个变量a 和 b,不用if、?:、
switch 或其他判断语句,找出两个数中比较大的那个。

这个问题, 我不认为是个好问题, 因此提出异议。 主要的原因就是基于上述的讨论,我
认为评价一个程序员好坏的标准, 应该是考察其简化描述问题的能力, 而不是把问题复杂化
的本事。

这在学院派里面很多, 这里大家可不要生气啊, 我知道大家现在基本上都是大学学计算
机专业的,算是学院派,但肖老师我的实战出来的,看法很多都和大家不一样。


学校里面, 老师的任务是把尽可能多的东东教给大家, 因为他不知道以后你做什么工作,
哪些知识没用, 因此, 学校老师会尽量培养大家描述复杂问题的能力, 这就造成了, 学校里
面的考试, 是尽量把问题复杂化, 多考察大家几个项目。 学校里面的风气, 也认为能解决复
杂问题算高手,甚至问题本身不复杂,大家把它造复杂,来考核自己的能力。

但实际工作中不是这样的, 实际工作中, 大家最看重的是能用最简单的办法解决问题的
能力,因为这样成本最低,无形中,大家赚钱最多。所以,对问题的抽象拆解和清晰描述非
常看重。

很多同学刚刚上班,会很不适应,其实就是这个思路的转换。学院里,以复杂为美,而
商业公司中,以简单为美。这应该是一个很大的思想转变,甚至是世界观的改变,很难的。
一般转的比较快的同学, 在公司里面进步就比较快, 但我也见过工作几十年了, 还是没有转
过来的程序员,一般在公司里面活的就比较累一点。

建议大家好好思考一下我今天的提法, 看问题抓本质, 只要能及时理解商业公司的开发
思路,理解简单这个要素,我不敢说大家一定能找到工作,但只要找到了,在公司里面,基
本都能快速融入公司。

呵呵,先说到这里,好累。大家有问题,欢迎探讨啊。

学生评论:

江西师大 朱斌(Java 学生) :
很喜欢老师讲话风格! ! ! 一口气读完了, 一开始看这么长文章, 是想复制下来以后看的……

讲的非常在理。 。我也曾经试图将电脑想的非常简单。可实际写程序的时候就是没法将其看
的简单。不知道问题在哪

郑州大学 胡章思(Net 学生) :
读了你这篇文章我感触颇深, 因为我一直以来也是这么认为的, 我感觉编程就像造出来一台
又一台可以听从你工作的机器,而这些机器连到一块运行就能产生你所需要的东西。
所以程序员最重要的是编程的思想, 而不是什么语言, 架构, 那些东西用到的时候去学习一
下就行了,但是如果没有编程的思想,所有的东西都是空谈。
其实对于企业的面试, 我以为他们出这种题目本意就是刷人, 找出思维比较灵活, 反应比较
快的人,这种人比较适合研究产品,而不一定适合开发产品。
个人的一点见解,呵呵!

北京建筑工程学院 陈丽君(C/C++学生) :
说的很有道理哦, 很适用于实际工作中, 给我们这些还在学校的学生一些启示! 从您这篇文
章中,提炼出以下五点,我认为概括得比较精辟的地方:
1、计算机其实就是能以恒定品质不断重复输出服务的机器而已;
2、编程的内功,就是对这个世界的抽象化理解能力以及描述能力;
3、编程序,就是拆解问题,但讲究个拆解的技巧和方法,以前人做过的,别做,尽量用,

 


没有的,做过一次,尽量保留下来,供下次使用;
 

 
4、写程序,就是遇到需求,能迅速抽象,理解其共性,并能以清晰的语言描述出来;
5、写程序时拆解,是把问题简单化,不是说把一个问题描述得晦涩难懂。
感谢您分享您对编程的理解!

河南理工大学 韩记伟(C/C++学生) :
这几天, 学习一直处于低谷状态, 直到看到这篇文章, 才茫然清醒了许多。 也顿时找到了以
前那种自信和兴趣。说的太贴近实际了。
编程是有它的趣味之所在的,到一定的时候,真的是会顺水顺舟,水到渠成。
一直一来寻找的编程之精髓:程序融于生活,编程提炼人生。
1:我们不要急躁,修炼内功。
2:编程趣味生活中无处不在,编程能带领我们触摸到社会的各个角落,跻身编程不枉人生
3:玩转编程后,让人生变的轻松愉快

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值