近期看到一个知乎里非常热闹的讨论,当中讨论到科研能力与project能力,我有非常多感想。想说说大学CS方向的一些东西。
我不是计算机专业的,如今大二本科工科在读。
我接触编程起先是由于必修课有一门C语言要学,课结束之后还是一直写些零零散散的代码,逐渐触及非常多软件领域的知识,诸如linux使用,android开发……折腾了许久,逐渐发现这个行当里有非常多让刚開始学习的人,尤其是在校生,非常迷惑的地方。
作为业余编程爱好者,没人要求我学习那一大堆计算机或者软件专业的枯燥理论,我自然有很多其它时间和精力去做我感兴趣的事情。我感兴趣的事情正是花一段时间去读API以及范例,然后去动手实现一个小应用。实话讲,这样的小东西对算法的要求非常低,很多其它的是关注函数的调用和相关功能的实现。
动手实践,的确是不错的。但这里有个问题。你看API敲代码,读范例然后模仿,老实话说这是一种低级智力活动。简而言之,仅仅是一种熟能生巧,是典型的技工(码农)。
假设一个人不太笨,肯下功夫,那全然是能够做一个非常好的技工的。这意味着,成为技工的成本非常低。假设仅仅想做一个熟练的技工(码农),何必上大学里那么多枯燥的理论课?那些理论课的目的是什么?我想是为了教你具备成为一个project师而非码农的素养。
project师须要的不仅仅是API,很多其它的是对系统的架构,对性能的评估,因而须要更加扎实的计算机相关理论。我想CS专业的培养目标就是输出一流project师甚至计算机科学家吧!
对于非专业的爱好者而言,他们很多其它关注产品实现,而头疼于晦涩的理论,就像我如今一样。假设想要把编程的爱好做成自己的职业,爱好者往往不占领优势。由于他们多数没有科班学习的经历,全凭兴趣,缺乏系统的认识和理论,小打小闹足够了,但做真格的大型项目就处于明显劣势了。
我觉得,像我这样处在大学阶段的非专业同学能够扩展视野,通过这样建立对这个行业的认识,然后选择感兴趣的方向钻研下去,并一定要辅以对理论知识的学习,那样能够加深对理论之于实践的理解,终于让自己的爱好变得专业起来。
大学?做码农?做project师?我想应该有个答案了。