博文

一位初中生的程序人生 转(2007-04-10 21:47:00)

摘要:我是一名软件人员,是一位初中毕业的软件开发人员。

   没有学历,国家承认的学历只有初中。也没有程序员证书之类的东西。工作主要是在网络通讯,流媒体,音视频编解码方面。在华为做过一年的外包工作。对C/C++的理解还不赖。
  
初中毕业,高中读了半年就出了校门。
   从91年开始,做过5年木工,95年到深圳打工,在一家五金厂做清洗工作做了一年。

   有过刻骨铭心的经历。

   曾在华为做过外包工作,是做C/C++,VC。也是第一次做VC,学到很多东西,除了专业水平也有所提高外,懂得怎么做人,怎么做软件,怎么和人交流,合作。

   在华为感触很深,和他们的员工在一起工作,生活过一年的时间。能感受到他们的热情,有内涵,有修养,有能力。在华为培训中心门口有一字碑,在马路边就能看到,刻有“小胜靠智,大胜于德”。对华为很是敬仰。以后看到“自强不息,德厚载物”,感觉他们温慈厚善的思想,足可以让我们追捧。为社会,为国家甚至人类带来光明。
  
技术篇

   作为一个软件人员,应是高素质,有修养。先做人,再做事。

   做软件,是以项目为单位,由多个人聚在一起,形成一个团队,共同完成任务。既然是多个人共同完成任务,你必须要融入到他们当中,要与他们多交流,才能做好事情。既然是一个团队,就要学会怎样去交流,怎样相处。

   这是我从事软件工作的一些心得,做项目所要注意的一些东西。希望对大家有所帮助。

   宽容,我们都是年轻人,难免犯错,我们这个年龄不犯错的人不多,几乎没有。要包容。犯错的人不要不好意思,下次注意一点不要再犯了就可以。对方也不要计较,包容他们。

   要多问多想,做软件是这样的,一个人解决问题,如果不问,可能2-3天也处理不了,问一问人家5分钟解决问题。这就是做软件交流的好处。不要碍于面子,要多问。不要认为问的问题太简单,而不愿意回答。也不要因为问题过于复杂,而随便应付,随便......

阅读全文(1920) | 评论:2

老程序员给年轻程序员的忠告!(2007-04-07 14:52:00)

摘要: 1、好好规划自己的路,不要跟着感觉走; 根据个人的理想来安排自己的生活,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,痛快一些,那么就需要慎重安排自己的的轨迹,从一个行业入手逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会以后,钱根本不是问题,频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手。 2、可以做技术的,切不可沉湎于技术; 千万不可一门心思钻营技术,给自己造成很多压力,如果你的心思全部放在上面那么注定你将成为孔乙己一类的人物,适可而止为之,因为技术只不过是你今后前途的支柱之一,而且还不是最大的支柱,除非你只愿意到老,还是个工程师。 3、不要去做技术高手,只去做综合素质高手; 在企业里工作,我们时常瞧不起某人,说他“什么都不懂,凭啥拿那么多钱,凭啥升官,”这是普遍的、典型的工程师的迂腐之言,你想想,老板搞经营那么多年难道见识不如你这个新兵?人家或许善于管理,善于领会老板意图,善于部门协调等等等,因此务必培养自己多方面的能力,包括,管理,亲和力,公关能力等要成为最综合素质的高手则前途无量,技术以外的技能才是更重要的本事,从古到今,一律如此。 4、多交“三教九流”的朋友; 不要只和工程师交往,认为有共同语言,其实更重要的是和其他类人物交往,如果你希望有朝一日当老板或高层管理者,那么你整日面对的就是这些人。了解他们的经历,思维习惯,爱好,学习他处理问题的模式,了解社会各个角落的现象和问题,这是以后发展的巨大本钱,没有这些以后就会笨手笨脚,跌跌撞撞,遇到重重困难,交不少学费的成功的概率大大降低。 5、知识涉猎不仅要专,还一定要广; 多看看其他方面的书,金融,财会,进出口,税务,法律等等为以后做一些积累的以后的用处会更大,会少交许多的学费。 6、抓住时机向技术管理或市场销售方面转变; 要想有前途就不能一直搞开发,适当时候要转变为管理和或销售的前途会更大,以前搞技术也没有白搞,以后还用得着,搞管理可以培养自己的领导能力,搞销售可以培养自己的市场概念和思维,同时为自己以后发展积累庞大的人脉,应该说这才是前途的真正支柱。 7、逐渐克服自己的心理弱点和性格缺陷; 多疑,敏感,犹豫不决,胆怯,多虑,这些工程师普遍存在的性格弱点必须改变,很难吗,只......

阅读全文(1258) | 评论:2

足不出户的热门兼职盘点 IT、设计创意最走俏(2007-04-07 11:26:00)

摘要:在家里就能完成的兼职中,IT、设计创意、文案策划可以说是比较热门的三类行业,但因为性质和要求的不同,大家在完成任务的过程中也需要关注不同的重点。前几次的小试牛刀虽然都以失败告终,但也找到了自己最适合的文社会分工越来越精细化的今天,兼职也可谓五花八门。在家里就能完成的兼职中,IT、设计创意、文案策划可以说是比较热门的三类行业,但因为性质和要求的不同,大家在完成任务的过程中也需要关注不同的重点。   IT类:   苦学技术是上策   在某公司电脑技术部门工作的郭先生,利用空余时间做编 程的兼职已经有2年之久了。“这类兼职不太需要什么创意,关键看你技术是否过硬。很多任务只要你懂得这个程序,很短时间就可以搞定。”   “新手们可以从小编程入手,虽然它们的酬劳偏低,但是完成的速度相应也比较快的,所以多完成几项收入也是不菲的。”郭先生提醒到,新手们此时还有一个重要的任务就是多看别人上传的作品,遇到不懂的地方可以向别人请教。   设计创意:   走出去寻找灵感   “能否做好设计创意类的兼职讲究的是灵感,完成这类任务有点可遇不可求的感觉。”美术类专业毕业的刘先生聊到这份兼职的经历时说道,曾经有一段时间自己状态不好,闷在房间里好久也没有出来自己满意的效果。后来决定放弃了就去郊外玩了一天,没想到旅途中的景色正好和作品的立意相似,突然之间就有了想法,最后也得到了客户的认可。   “从事一份创意型的工作,就需要打破原有的生活圈子,多走走看看接触新鲜事物,也许某一天接到的任务就会和经历碰撞出火花。”刘先生分析说,所以呆在电脑前工作应该是有了灵感之后才做的事,而之前尽可以大胆走出去享受生活。   而对于如何选择自己能胜任的工作,刘先生表示,刚入行可以选择小任务或者内容熟悉的任务。当然作品的收入是和作品的难度直接相关的,从几十元到上千元不等。只贪图数量而不求质量的人,很难真正学到本领而去接一些大任务,是得不偿失的事情。   文案策划:   条理清晰最重要   “文案创作有一定的条理性,通常做久了就能按照类别摸出一套规律出来,比如活动文案一般包括活动内容、活动对象、资金预算、预期目标等几大部分。”一直在智客网从事媒体文案工作的钱小姐说起这份兼职来头头是道。   “这类工作比较特殊的地方是兼具了创意性和技术性。”钱小姐分析......

阅读全文(1389) | 评论:0

我的一次技术讨教,感触很深(2007-04-05 20:53:00)

摘要:请问我的程序关于网络的在同一种情况下,有时运行正常,有时运行不正常。这里面是不是有网络方面的原因?
☆~豺狼~☆ 19:03:37
不一定
旺 19:04:07
我的表现为消息收到了一部分
旺 19:04:14
在不正常的时候
☆~豺狼~☆ 19:05:31
怎么个不正常法?
旺 19:05:44
等消息传过来的时候,我让对话框做出一些反应,可是只是做了一部分反应
旺 19:06:14
 这个是不正常的
旺 19:06:28
 这个是正常的
旺 19:07:11
就是想让它们结束的时候从上面的画面变成下面的画面
旺 19:07:36
双方都能够知道谁赢谁输
旺 19:07:50
可是画面有时转不过来  
☆~豺狼~☆ 19:07:55
接收到消息就结束?
 
旺 19:08:03
异步选择的
旺 19:08:36
有时能转换过来
☆~豺狼~☆ 19:08:56
检查一下是不是消息还没到就处理了
因为你是异步操作
旺 19:09:35
应该是到了,屏幕上显示出了谁赢谁输,这里也是消息的一部分
旺 19:09:49
是不是我发的消息过多了?
☆~豺狼~☆ 19:10:17
跟消息多少应该没关系
你的问题应该是在消息相应上
旺 19:11:09
哦,我设了断点,它执行到那里的语句了,而且在单步调试的时候是正常的
旺 19:11:31
可是我在直接运行的时候又不正常了
旺 19:12:13
这个是不是消息响应设的不合理造成的?
旺 19:13:02
我只传了个消息的类型,等对方接到这种类型就会作出某些操作
☆~豺狼~☆ 19:13:09
你的响应是对消息进行分析还是接收到消息就马上响应?
旺 19:13:50
对消息里面设了编号,等到编号3的时候去执行
旺 19:13:57
用的case 
旺 19:14:10
只传了个编号
旺 19:15:06
应......

阅读全文(1784) | 评论:0

五子棋的核心算法(2007-04-04 22:34:00)

摘要:五子棋的核心算法

五子棋是一种受大众广泛喜爱的游戏,其规则简单,变化多端,非常富有趣味性和消遣
性。这里设计和实现了一个人机对下的五子棋程序,采用了博弈树的方法,应用了剪枝
和最大最小树原理进行搜索发现最好的下子位置。介绍五子棋程序的数据结构、评分规
则、胜负判断方法和搜索算法过程。

一、相关的数据结构
    关于盘面情况的表示,以链表形式表示当前盘面的情况,目的是可以允许用户进行
悔棋、回退等操作。
    CList StepList;
    其中Step结构的表示为:

    struct Step
    {
      int  m; //m,n表示两个坐标值
      int  n;
      char side; //side表示下子方
    };
以数组形式保存当前盘面的情况,
目的是为了在显示当前盘面情况时使用:
  char FiveArea[FIVE_MAX_LINE][FIVE_MAX_LINE];

    其中FIVE_MAX_LINE表示盘面最大的行数。

    同时由于需要在递归搜索的过程中考虑时间和空间有效性,只找出就当前情况来说
相对比较好的几个盘面,而不是对所有的可下子的位置都进行搜索,这里用变量
CountList来表示当前搜索中可以选择的所有新的盘面情况对象的集合:

  CList CountList;
    其中类CBoardSituiton为:
  class CBoardSituation
  {
  CList ......

阅读全文(1735) | 评论:0

PlaySound函数详解(2007-04-01 18:16:00)

摘要:PlaySound函数的声明为:

BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);

使用这个函数时要加入“WINMM.lib”库,还要加入“MMSYSTEM.h”头文件。

参数pszSound是指定了要播放声音的字符串,该参数可以是WAVE文件的名字,或是WAV资源的名字,或是内存中声音数据的指针,或是在系统注册表WIN.INI中定义的系统事件声音。如果该参数为NULL则停止正在播放的声音。参数hmod是应用程序的实例句柄,当播放WAV资源时要用到该参数,否则它必须为NULL。参数fdwSound是标志的组合,如下表所示。若成功则函数返回TRUE,否则返回FALSE。

播放标志以及含义:

SND_APPLICATION
用应用程序指定的关联来播放声音。

SND_ALIAS
pszSound参数指定了注册表或WIN.INI中的系统事件的别名。

SND_ALIAS_ID
pszSound参数指定了预定义的声音标识符。

SND_ASYNC
用异步方式播放声音,PlaySound函数在开始播放后立即返回。

SND_FILENAME
pszSound参数指定了WAVE文件名。

SND_LOOP
重复播放声音,必须与SND_ASYNC标志一块使用。

SND_MEMORY
播放载入到内存中的声音,此时pszSound是指向声音数据的指针。

SND_NODEFAULT
不播放缺省声音,若无此标志,则PlaySound在没找到声音时会播放缺省声音。

SND_NOSTOP
PlaySound不打断原来的声音播出并立即返回FALSE。

SND_NOWAIT
如果驱动程序正忙则函数就不播放声音并立即返回。

SND_PURGE
停止所有与调用任务有关的声音。若参数pszSound为NULL,就停止所有的声音,否则,停止pszSound指定的声音。

SND_RESOURCE
p......

阅读全文(1780) | 评论:0

大学生面试三诀:自信 细节 执着(2007-04-01 14:50:00)

摘要:   怎样进入微软这样的组织?几年以来,我曾面试过上千名毕业生。总结起来,对大学生的忠告无非三点:自信、细节、执着。用口头语言来诙谐地表达,那就是胆大、心细、脸皮厚!"     胆大  “同学们在进入面试室的时候,能否把头抬起来?眼神和声音在面试时是很重要的!我接触到的毕业生85―90%的人都是眼神朝下的,而一位成功者的眼神要么是平视的,要么是向上倾斜15度。还有声音要足够大。”     心细 “有位同学穿着新衣服来面试,西装上带着商标,衬衫上还有褶痕,这都不合适。有个真实的案例,有名同学进入唐骏的房间,刚开始面试时手机响了,他接起电话:‘我现在正在面试,今晚咱们的聚会还在陆家嘴某某地啊,菜不要多点啊……’他刚收起电话,准备重新投入面试时,唐骏开口了:‘谢谢,今天的面试到此结束’。事后,唐骏说起这则面试案例时的评论是:‘不专业!’”    脸皮厚  “曾有位原来学生物的同学来面试,初次面试失败后,他缠上了,主管没办法,就丢给他一大本四五百页的《WINDOW2000 NT SERVER》,让他一礼拜后再来。说实话,哪怕对计算机专业毕业生来说,一周内消化这本书都是不太容易的事。一周后,这孩子来了,可他的确还是有点生疏。又过了一周,这孩子带着他妈来了,家长的述说把微软人感动了,原来这位同学几周来每天在家苦读手册20小时!最后,唐总亲自拍板要人。  “在微软,‘技术功底’不是最主要的,而‘执着精神’是最关键的。正如唐骏所说的那样:‘我们要的就是这样的人’”。
  ......

阅读全文(1605) | 评论:0

WSAAsyncSelect()函数详解(2007-03-28 23:55:00)

摘要:WSAAsyncSelect() 简述:
        通知套接口有请求事件发生.
       
        #include <winsock.h>

        int PASCAL FAR WSAAsyncSelect ( SOCKET s, HWND hWnd,
                        unsigned int wMsg,  long lEvent );
       
        s   标识一个需要事件通知的套接口的描述符.
        hWnd    标识一个在网络事件发生时需要接收消息的窗口句柄.
        wMsg    在网络事件发生时要接收的消息.
        lEvent  位屏蔽码,用于指明应用程序感兴趣的网络事件集合.
       
注释:
        本函数用来请求Windows Sockets DLL为窗口句柄发一条消息-无论它何时检测到由lEvent参数指明的网络事件.要发送的消息由wMsg参数标明.被通知的套接口由s标识.
        本函数自动将套接口设置为非阻塞模式.
        lEvent参数由下表中列出的值组成.
        值  &n......

阅读全文(3107) | 评论:0

Windows Sockets:操作顺序(2007-03-25 11:21:00)

摘要:本文以对照方式阐释了服务器套接字和客户端套接字的操作顺序。因为这些套接字使用 CArchive 对象,所以它们必然是流式套接字。流式套接字通信的操作顺序 在构造 CSocketFile 对象之前,下面的顺序对 CAsyncSocket 和 CSocket 都是准确的(只有少数几个参数不同)。从构造 CSocketFile 对象开始,顺序只适用于 CSocket 。下表阐释了在客户端和服务器之间设置通信的操作顺序。 设置服务器和客户端之间的通信 服务器 客户端 // construct a socket CSocket sockSrvr; // construct a socket CSocket sockClient; // create the SOCKET sockSrvr.Create(nPort); 1,2 // create the SOCKET sockClient.Create( ); 2 // start listening sockSrvr.Listen( ); // seek a connection sockClient.Connect(strAddr, nPort); 3,4 // construct a new, empty socket CSocket sockRecv; // accept connection sockSrvr.Accept( sockRecv ); 5 // construct file object CSocketFile file(&sockRecv); // construct file object CSocketFile file(&sockClient); // construct an archive CArchive arIn(&file,
CArchive::load); - 或 - CArchive arOut(&file,
CArchive::store); - 或两者 - // construct an archive CArchive arIn(&file, ......

阅读全文(1453) | 评论:0

 Socket CAsyncSocket CSocket CSocketFile(2007-03-24 18:55:00)

摘要:Socket有同步阻塞方式和异步非阻塞方式两种使用,事实上同步和异步在我们编程的生涯中可能遇到了很多,而Socket也没什么特别。虽然同步好用,不费劲,但不能满足一些应用场合,其效率也很低。
    也许初涉编程的人不能理解“同步(或阻塞)”和“异步(或非阻塞)”,其实简单两句话就能讲清楚,同步和异步往往都是针对一个函数来说的,“同步”就是函数直到其要执行的功能全部完成时才返回,而“异步”则是,函数仅仅做一些简单的工作,然后马上返回,而它所要实现的功能留给别的线程或者函数去完成。例如,SendMessage就是“同步”函数,它不但发送消息到消息队列,还需要等待消息被执行完才返回;相反PostMessage就是个异步函数,它只管发送一个消息,而不管这个消息是否被处理,就马上返回。

一、Socket API
    首先应该知道,有Socket1.1提供的原始API函数,和Socket2.0提供的一组扩展函数,两套函数。这两套函数有重复,但是2.0提供的函数功能更强大,函数数量也更多。这两套函数可以灵活混用,分别包含在头文件Winsock.h,Winsock2.h,分别需要引入库wsock32.lib、Ws2_32.lib。

1、默认用作同步阻塞方式,那就是当你从不调用WSAIoctl()和ioctlsocket()来改变Socket IO模式,也从不调用WSAAsyncSelect()和WSAEventSelect()来选择需要处理的Socket事件。正是由于函数accept(),WSAAccept(),connect(),WSAConnect(),send(),WSASend(),recv(),WSARecv()等函数被用作阻塞方式,所以可能你需要放在专门的线程里,这样以不影响主程序的运行和主窗口的刷新。
2、如果作为异步用,那么程序主要就是要处理事件。它有两种处理事件的办法:
    第一种,它常关联一个窗口,也就是异步Socket的事件将作为消息发往该窗口,这是由WinSock扩展规范里的一个函数WSAAsyncSelect()来实现和窗口关联。最终你只需要处理窗口消息,来......

阅读全文(4332) | 评论:0