第一次接触程序是大一上学期期末考试的时候,那个时候空闲时间比较多,就在图书馆门口的旧书店里买了一本谭浩强的《C语言程序设计》(ps:这才是程序届的神书)看了几天。那个时候以为程序就是语言,把语言学会了就好了,因此就一直各种学习语言。把C语言学会之后就学习C++(用的是C++primer plus)。当时把这两门语言学完之后就去咨询了一下计算机专业的一位老师,他说让我学习MFC,然后我就开始看《VC++深入详解》,第一次接触图形化界面又是自学,废了老大劲了,然后看了这两本书之后就开始看侯捷的《深入详解MFC》(ps:更要人命),硬着头皮看完了,然后用MFC做了一个小的象棋软件,这应该是大一下学期吧,想在看来当时学习MFC真是天大的错误,浪费了太多的时间,并且估计这一辈子都不会用到这些东西。后俩知道了MFC就是封装了一些windows32 API,然后就开始学习windowsAPI,用的是《windows程序设计》,然后看《windows核心编程》(ps:这本书没有看完,我最近要接着看)。后来我知道了现在好多windows客户端都是用C#快速开发的,当时我以为这东西又白学了,不过现在看来并没有。
大二的时候一个老师说想要做网站,我就想学习网站开发的技术,然后就把当时的windowsAPI放下了。因为当时一直感觉自己是windows阵营的就学习了C#,使用asp.net开发。先从HTML学起,然后javascript,css,当时想着要搞服务器就顺便吧inux学了一下,看的是《鸟哥的Linux私房菜》,然后学习用WebForm写网站,当我把这些东西都学完的时候已经大二暑假了,老师的网站早就让别人做好了,当时脑子一抽自己想创业(具体是什么就不说了,反正说出来估计你会笑),然后我就自己写了个网站,不过感觉自己写的太差劲,就感觉自己应该出去工作一段时间,看看别人是怎么做的,然后大三开学就找了一家公司(大三刚转到计算机专业),他们使用MVC做的项目,然后我又了解了一下MVC。工作了两个月,感觉老板太坑了,就辞职了,后来又面试了一家大公司,面试我的那个技术哥哥人挺好的,跟我讲了半天,说我现在不适合工作,然后要跟我讲解了我的问题所在。说白了就是好多基础课没有学习,比如数据结构,复变,操作系统,编译原理,计算机网络。当时我感触很深,然后就乖乖回到学校继续修炼。
其实到这里我非常失落,感到自己非常失败,费了那么大的劲学了那么多的高层技术,好多基础没有学习,然后我就开始自学这些课程(ps:天生不爱上课),从数据结构,操作系统开始看。我忽然发现我再学这些课程的时候都能够在我以前学过的东西中找到对应的内容,比如操作系统中的线程和进程,这些东西我在学习Windows程序设计的时候天天接触。计算机网络中中的知识,我工作的时候经常接触,然而并不太明白原理,现在看书的时候终于明白了。学到数据结构我才明白了算法和存储对程序的意义,感觉自己以前根本就不叫编程,而是纯粹意义上的码农。
我工作的那个公司是一个小公司,公司里的人好多事大专和技校毕业的。当时感觉他们很厉害(毕竟在一些一些方面的熟练度方向比我要好很多),现在感觉他们学的东西都是浅层的,并没有考虑到程序的性能之类的。我当时在工作的时候就一直在想,如果说技校毕业的就能干的计算机为什么还需要本科生甚至研究生呢,需要的仅仅是工作竟然不就好了嘛。计算机专业的基础课的意义在哪里?基本上计算机专业的学生在学习计算机专业的基础课的时候都是比较迷茫的,现在好多Android开发,Ios开发并没有牵扯到数据机构,操作系统啊,其实就我现在的感悟来说,如果想让自己写出高性能的程序,那就必须要学习数据结构和操作系统之列的课程和算法。
本科类学校在教授这些课程的时候,学生是迷茫的,但是这些课程对于优秀的程序设计者来说又是必学的。我感觉这个问题就是本科教育的一个很大的问题。大部分学生没有意识到学习这些课程的意义在哪里,所以说学习的动力就没有那么充足了。为了跟技校区分大学不学习具体的技术本来也没有错误,但是一直学习基础就真的好吗,基础不实践就肯定会忘掉的,最终的结果就是等到大学毕业了,没有学习到真正的技术,基础也忘掉了很多。有人说大学本来的目的就是让学生知道自己学过什么然后在用的时候去查就OK了,但是对于计算机这门对动手能力需求这么强的学科来说这样真的好吗,随手大学生在以后的工作中会慢慢的熟悉高层技术,然后发展潜力也比技校学生大很多,但是我感觉这是很浪费时间的。
其实我感觉对于计算机这样的学科,大学教育的最终目的应该是底层和高层的完美结合,这样学生在学习基础学科之余之后就可以实践一下,这样做也更能加深对底层的理解并且学习起来也更有动力。没有必要非要技校学习技术,而本科及一定要学习基础。但是一定不能为高层技术所累,高层技术只是手段,最重要的还是底层,一种高层技术就OK了,我就是为高层技术所累,学的太多了。感觉大学生还是应该从一些底层的客户端开发做起比较好,虽然win32这类东西已经过时了,但是它还是最能增强最操作系统和资源的理解的。Web的话需要的东西过多,本科生如果不是急着找工作的话,还是先不要接触了。