在这里总结一下我在语言学习之路。我是一个信息与计算科学的学习,属于应用数学,走上了程序员之路,回想起觉得有些诧异。我并不是科班出生的合格程序员。我走上这条道理也是一种偶然,或许该说是兴趣所致吧。在大学之前,我一个僻远山区的孩子,计算机这个东西碰都没有碰过得,记得高中会考时候连复制、新建这些简单操作都不知道的我,大学在第一个语言课C学习中感到了乐趣所在,在编写出每一个code,都能让我有一种自豪感。慢慢的我爱上的Code,又等到了两个老师的帮助,进入了某大企业实习。大二开始就在外边做项目,给我了许多程序基础理论和设计思想等方面的积累。使我的程序之路走的比较顺利,毕业时,虽然某些企业对我的经验有所怀疑。

    在大学语言的学习之路我学了好几门语言,在这里和大家一一分享下我的这条学习之路。

    按时间来说我接触的首先是c这门古老的语言,也是他带着我走上了这条程序之路。在刚学完C的时候我一个非科班的师弟(当时大一下期)在校程序大赛中拿的大奖,树立的我软件的梦想,虽然在毕业后有些徘徊,但是在学生期间对我的程序学习之路是很大的鼓励,当时我还学习的C的一些高级编程Socket等(现在已忘的差不多了),还参加了学校的单片机创新课题用C Show了一下,哈哈。下面是我当时的最后综合实验程序-多种排序集合:

  1. 代码  
  2.  
  3. #include<stdio.h>   
  4. #define M  20  
  5.  
  6. void disp1(int *a,int n)   
  7. {    int i;   
  8. printf("\nsort before  :*****\n");   
  9.   for(i=1;i<=n;i++)   
  10.     printf(" %3d",a[i]);   
  11. }  
  12.  
  13. void disp2(int *a,int n)   
  14. int i;   
  15.   printf("\nsort after  :*****\n");   
  16. for(i=1;i<=n;i++)   
  17.      printf(" %3d",a[i]);   
  18.       a[0]=-1;   
  19. }  
  20.  
  21. void create(int *a,int *b,int  *n)   
  22. {int i;   
  23.   printf("input the toall\n");   
  24.      scanf("%d",n);   
  25.     for(i=1;i<=*n;i++)   
  26.     {  printf("input the %d\n",i);   
  27.         scanf("%d",&a[i]);   
  28.          b[i]=a[i];   
  29.       }   
  30.    a[0]=b[0]=0;   
  31. }  
  32.  
  33. void  insertsort(int *a,int n)   
  34. int i,j;  
  35.  
  36.   for(i=2;i<=n;i++)   
  37.    {  a[0]=a[i];   
  38.      for(j=i-1;a[0]<a[j];j--)   
  39.                 a[j+1]=a[j];   
  40.           a[j+1] =a[0];   
  41.     }  
  42.  
  43. }  
  44.  
  45.  
  46. void xiersort(int *a,int n)   
  47. int d[3]={5,3,1};   
  48.    int i,j,k=0;  
  49.  
  50.    while(k<3)   
  51. {  for(i=d[k]+1;i<=n;i++)   
  52.      {   a[0]=a[i];   
  53.          for(j=i-d[k];j>0&&a[j]>a[0];j=j-d[k])   
  54.                 a[j+d[k]]=a[j];   
  55.           a[j+d[k]]=a[0];   
  56.       }   
  57.     k++;   
  58. }  
  59.  
  60. }  
  61.  
  62.  
  63. void maopaosort(int *a,int n)   
  64. {  int i,j,change,t;  
  65.  
  66.   for(i=1;i<n;i++)   
  67.    { change=0;   
  68.        for(j=1;j<=n-i;j++)   
  69.           if(a[j]>a[j+1])   
  70.               { t=a[j];   
  71.                  a[j]=a[j+1];   
  72.                   a[j+1]=t;   
  73.                    change=1;   
  74.                }  
  75.  
  76.        if(change==0)   
  77.                    break;   
  78.       }   
  79. }  
  80.  
  81.  
  82. void quicksort(int *a,int t, int n)   
  83. {  int i=t,j=n;  
  84.  
  85.   while(i<j)   
  86. {   if(i<j)   
  87.     {   a[0]=a[i];   
  88.          while(i<j&&a[j]>a[0])   
  89.                      j--;   
  90.          if(i<j)   
  91.            {  a[i]=a[j];   
  92.                  i++;   
  93.              }  
  94.  
  95.        while(i<j&&a[i]<a[0])   
  96.                      i++;   
  97.          if(i<j)   
  98.            {  a[j]=a[i];   
  99.                  j--;   
  100.              }   
  101.     }   
  102.        a[i]=a[0];   
  103.      quicksort(a,1,i-1);   
  104.      quicksort(a,i+1,n);  
  105.  
  106. }   
  107. }  
  108.  
  109.  
  110. void jiandansort(int *a,int n)   
  111. int i,j,t;   
  112.   for(i=1;i<n;i++)   
  113.   { for(j=i+1;j<=n;j++)   
  114.        if(a[i]>a[j])   
  115.        {  t=a[i];   
  116.             a[i]=a[j];   
  117.            a[j]=t;   
  118.         }   
  119.    }   
  120. }  
  121.  
  122.    
  123.  
  124. void main( )   
  125. {int a[M+1],b[M+1],n=0,i;   
  126. char ch1='y',ch2;   
  127. create(a,b,&n);  
  128.  
  129. while(ch1=='y'||ch1=='Y')   
  130. { printf("\n input 1---------  insert sort");   
  131.    printf("\n input 2---------  xi er sort");   
  132.    printf("\n input 3---------mao pao sort");   
  133.    printf("\n input 4---------  quick sort");   
  134.     printf("\n input 5--------  jian dan sort");   
  135.     printf("\n inputc(C)---------  creat");   
  136.     printf("\n input n(N)---------  exit\n");  
  137.  
  138.     scanf("\n%c",&ch2);   
  139.      if(a[0]==-1)   
  140.        for(i=1;i<=n;i++)   
  141.          a[i]=b[i];  
  142.  
  143. switch(ch2)   
  144. case  '1': disp1(a,n);     insertsort(a,n) ;   
  145.                    disp2(a,n);      break;   
  146.    case  '2': disp1(a,n);     xiersort(a,n);   
  147.                     disp2(a,n);    break;   
  148.    case  '3': disp2(a,n);     maopaosort(a,n);   
  149.                    disp2(a,n);       break;   
  150.    case  '4': disp1(a,n);    quicksort(a,1,n);   
  151.                   disp2(a,n);      break;   
  152.     case  '5':disp1(a,n);       jiandansort(a,n);   
  153.                     disp2(a,n);     break;   
  154.     case  'c':   
  155.     case  'C':create(a,b,&n);   break;   
  156.     case  'n':   
  157.     case  'N' :ch1='n';   
  158. }   
  159. }   
  160. }  
  161. 复制代码  

  现在看起代码是比较糟糕!

接着我学习的汇编这门更古老的语言的,个人感觉汇编若只是说语法和学习,并不难。在这里也贴出我学习时候的一个打字游戏的小Code.

  1. 代码   
  2.  
  3. ;;;;任意掉落字符,按空格和ESC暂停并再ESC结束,空格继续;;   
  4. .model small   
  5. clear_screen macro op1,op2,op3,op4 ;清屏宏定义     
  6. push ax   
  7. push bx   
  8. push cx   
  9. push dx   
  10.     mov ah,06h            
  11.     mov al,00h   
  12.     mov bh,06h   
  13.     mov ch,op1   
  14.     mov cl,op2   
  15.     mov dh,op3   
  16.     mov dl,op4   
  17.     int 10h   
  18.     mov ah,02h   
  19.     mov bh,0h   
  20.     mov dh,00h   
  21.     mov dl,00h   
  22.     int 10h   
  23. pop dx   
  24. pop cx   
  25. pop bx   
  26. pop ax   
  27. endm  
  28.  
  29. set  macro p1,p2,p3 ;;;设置光标并显示p1   
  30. push cx   
  31. mov ah,02h   
  32. mov bh,0h  
  33.  
  34. mov dx,p3   
  35. mov dh,p2   
  36. int 10h   
  37. mov ah,0ah   
  38. mov al,p1   
  39. mov cx,1   
  40. mov bl,12   
  41. int 10h   
  42. pop cx   
  43. endm  
  44.  
  45. delay macro;;;拖延时间   
  46. local sg1,sg2,nextdelay,nextdelay1   
  47. push cx   
  48. push dx   
  49. push  ax   
  50. mov dx,speed   
  51. mov cx,1000   
  52. sg1 :   
  53. sg2 :   
  54.    loop sg2   
  55. dec dx   
  56. jnz sg2   
  57. mov ah,0bh   
  58. int 21h   
  59. cmp al,0h;;无字符可以读取   
  60. je nextdelay   
  61. mov ah,7   
  62. int 21h   
  63. cmp al,' '   
  64. je calll   
  65. cmp al,1bh   
  66. jne nextdelay1   
  67. calll :   
  68. call justment   
  69.   jmp  nextdelay   
  70. nextdelay1:   
  71. cmp al,letters[si]   
  72.   jne  nextdelay   
  73.   call disp   
  74. nextdelay:   
  75. pop ax   
  76. pop dx   
  77. pop  cx   
  78. endm  
  79.  
  80. menu  macro op1,op2,op3 ;菜单显示宏定义        
  81.    mov ah,02h   
  82.    mov bh,00h   
  83.    mov dh,op1   
  84.    mov dl,op2   
  85.    int 10h   
  86.    mov ah,09h   
  87.    lea dx,op3   
  88.    int 21h   
  89. endm  
  90.  
  91.  
  92. .model   
  93. .stack 256   
  94. .data   
  95. letters db "jwmilzoeucgpravskntxhdyqfb"   
  96.         db 'iytpkwnxlsvxrmofzhgaebudjq'   
  97.         db 'nwimzoexrphysfqtvdcgljukdas'   
  98. count equ $-letters ;;79   
  99. menu0 db "Welcome to play !$"     
  100. menu1 db 'input enter to game!',0dh,0ah,'$'   
  101. menu2 db 'input space to halt!',0dh,0ah,'$'   
  102. menu3 db 'input esc to exit!',0dh,0ah,'$'   
  103. menu40 db 'this is agame which pritise keyin,',0dh,0ah,'$'   
  104. menu41    db ' when you are exit from the '   
  105.                  db 'game ,you will',0dh,0ah,'$'   
  106. menu42 db ' kown how much you can hit ',0dh,0ah,'$'   
  107. msg db 'choise speed:f--fast;s--slow;other character--orditional ! '   
  108. msg0 db 'you hit:$'   
  109. msg1 db 'Help : space--- halt   Esc---home$'   
  110. speed dw  800   
  111. h dw ?   
  112. l  db ?   
  113. gs db 0   
  114. .code   
  115. mov ax,@data   
  116. mov ds,ax   
  117. menulist :   
  118. clear_screen 0d,00d,25d,79d  ;;24*80(0开始)   
  119. menu 07,20,menu0       ;菜单信息的宏调用   
  120.          menu 09,20,menu1   
  121.          menu 11,20,menu2   
  122.          menu 13,20,menu3   
  123.          menu 15,20,menu40   
  124.          menu 17,22,menu41   
  125.          menu 19,22,menu42   
  126. again:   
  127. mov ah,0   
  128. int 16h   
  129. cmp al,1bh   
  130.   jne nextmain1   
  131. jmp overmain   
  132. nextmain1 :   
  133. cmp al,0dh   
  134. jne  again   
  135. clear_screen 0d,00d,25d,79d  ;;24*80(0开始)   
  136. call setspeed   
  137. clear_screen 0d,00d,25d,79d  ;;24*80(0开始)   
  138. menu 0,5,msg1;;help menu   
  139. mov dx,0   
  140. ag0:   
  141. call outdb   
  142. call rand   
  143. mov di,si   
  144. call rand   
  145.   add di,si   
  146. shr di,1;;;列坐标   
  147. mov cx,1   
  148. call rand   
  149. push ax   
  150. mov ax,si   
  151.   call rand   
  152.   add si,ax   
  153.   shr si,1;;;产生字符去两次的平均值   
  154. pop ax   
  155. ag :   
  156. mov h,di   
  157. mov l,cl   
  158. mov al,letters[si]   
  159. set al,cl,di   
  160.   delay   
  161. dispag :   
  162. set ' ',cl,di   
  163.   inc cx   
  164. cmp cx,23   
  165. je next   
  166. jmp ag   
  167. next :   
  168. inc dx   
  169. cmp dx,5   
  170. je  overmain   
  171. jmp ag0   
  172. overmain:  
  173.  
  174.  
  175. call outdb   
  176. mov ah,4ch   
  177. int 21h  
  178.  
  179. ;;;;;;   
  180. rand proc   
  181. push ax   
  182. push bx   
  183. push cx   
  184. push dx   
  185.     
  186. sti;允许中断1ah:0   
  187. mov ah,0   
  188. int 1ah   
  189. mov ax,dx   
  190. and  ah,0;;清除高6位   
  191. mov bl,count   
  192. div  bl   
  193. mov al,ah   
  194. mov ah,0   
  195. mov si,ax   
  196. pop dx   
  197. pop  cx   
  198. pop bx   
  199. pop ax   
  200. ret   
  201. rand endp   
  202. ;;;;;;;;   
  203. justment proc  
  204.  
  205. cmp al,' '   
  206. call stop;;暂停  
  207.  
  208. ret   
  209. justment endp   
  210. ;;;;;;;;;;;;;;;   
  211. stop proc   
  212. ;;;;;;;;;;;;;;local agstop   
  213. agstop :   
  214. mov ah,0bh   
  215. int 21h   
  216. cmp al,0   
  217. je  agstop   
  218. mov ah,7   
  219. int 21h   
  220. cmp al,' '   
  221. je overstop   
  222. cmp al,1bh   
  223. jne nextagstop1   
  224. jmp menulist   
  225. nextagstop1:   
  226. jmp agstop   
  227. overstop:   
  228. ret   
  229. stop endp  
  230.  
  231. ;;;;   
  232. disp proc   
  233. set ' ',l,h   
  234. inc gs   
  235. call ring  
  236.  
  237. call outdb   
  238. jmp ag0   
  239. ret   
  240. disp endp   
  241. ;;;;;;;;;;   
  242. outdb proc   
  243. push ax   
  244. push bx   
  245.   push cx   
  246. push dx  
  247.  
  248. mov ah,02h   
  249.    mov bh,0h   
  250.    mov dh,0   
  251.    mov dl,60   
  252.    int 10h  
  253.  
  254. mov ah,9   
  255. mov dx,offset msg0   
  256. int 21h   
  257. mov al,gs  
  258.  
  259.   mov ch,10   
  260. mov cl,0;记数   
  261. mov bh,0;;bh=0   
  262. agodb :   
  263.   mov ah,0   
  264.   div ch   
  265.   mov bl,ah;;存余数入栈   
  266.    add bl,'0'   
  267. push bx   
  268.    inc cl   
  269.    cmp al,0   
  270.     jg agodb   
  271.   mov ch,0  
  272.  
  273. agodb1 :   
  274. pop bx   
  275. mov dx,bx   
  276. mov ah,2   
  277. int 21h   
  278. loop agodb1  
  279.  
  280. ;;mov dl,0dh   
  281. ;; mov ah,2   
  282. ;;int 21h   
  283. ;; mov dl,0ah   
  284. ;; mov ah,2   
  285. ;;int 21h  
  286.  
  287. pop dx   
  288. pop cx   
  289. pop bx   
  290. pop ax   
  291. ret   
  292. outdb endp   
  293. ;;;;;;;;;;;;;;   
  294. setspeed proc   
  295. push ax   
  296. menu 15,5,msg   
  297. mov  ah,1h   
  298. int 21h   
  299. cmp al,'f'   
  300. je nextspeed1   
  301. cmp al,'s'   
  302.   jne nextspeed2   
  303. mov speed,1000   
  304. jmp  nextspeed2   
  305. nextspeed1 :   
  306. mov speed,500   
  307. nextspeed2:   
  308. pop ax   
  309.   ret   
  310. setspeed endp  
  311.  
  312. ;;;;;;;;;;;;;   
  313. ring proc   
  314. push ax   
  315. push cx   
  316. push dx  
  317.  
  318. mov cx,3   
  319. ringed :   
  320. mov ah,02h   
  321. mov dl,07h   
  322. int 21h   
  323. clear_screen 1d,00d,25d,79d  ;;24*80(0开始)   
  324. loop ringed   
  325. pop dx   
  326. pop cx   
  327. pop ax   
  328. ret   
  329. ring endp  
  330.  
  331. end 
  332.  
  333.  
  334. 复制代码 

紧接着遇见的上面说的两位老师他们用的是c#语言,和他们一起做些小开发,所以我也走上了,NET之路,刚开始做了几个Web的开发。其中一个老师是某企业的架构师,所以在他的帮助和介绍下,我和他一同学习并进入企业实习,做了一些Winform的开发,平时空闲的时候就在老师的指导下位他的快速开发平台,添加一些新东西,改进等工作。那时虽然辛苦一些,但是过的挺充实的,读书的时候还有比较好的外快,挺兴奋的。同时,我也没有拉下一门课程学习,虽然经常不去上课,老师们都挺支持和理解我的,期末时考试也考得很好。在这里我感谢每一位关心和支持我的老师们,你们辛苦了。

     在.NET平台上C#肯定和必备的,在这里也挑不出来典型的code展示,同时在,NET平台的唯一函数式编程语言出来后,我带着多函数式思想的理解的心情,学习了这门语言,第一次感觉到函数式编程的魅力所在,并不是写一些code(博客里贴出了两篇F#初试(2)F#初试--打印目录文件树)。   

    后来我也学习了我们的面向对象的语言C++,Java,MathLab(对于数学专业的尅定是必须的,呵呵)。在c++学习时候学的感觉挺好的,但是到了准备学习MFC,看着他的函数名称等一大堆的字母,比起C#是难,这是我的c#也学得有一定基础,所以我放弃了。对于Java我还是很指着的学习了一段时间,会Java Bean,model1的开发,但只能说是基础的,当时让我苦恼的是Java一大堆的东西需要自己手工配置,还有就是那个IDE的智能提示速度让人还郁闷.绕了一圈还是继续我的.NET之路,因为在外边我所做的都是基于c# WinForm的开发,它有一个优秀的类库和IDE支持。虽然我没有继续Java,c++的学习,但是我觉得他们也是很优秀的,并不比c#差。对于一个程序不管你是c#,Java编写的能满足客户需求就是一个好的code,程序只是各种语言抒写的艺术,不该存在语言之争。毕业之时我希望走的c的编程,但是没有这样的基于,还有就是.NET已经具有了一定基础,更好找工作些,如果有机会我觉得我还想走c的编程,前提是工资与我.NET持平,呵呵。

     本想写的好些,但是我的文字功底太差了,构思的时候挺多的,一到写的时候感觉痛困难的,需要多多练习。请大家多多指教。

     随笔收尾了,虽然现实与梦想存在差距,但是我的程序之路然在继续…