新加坡国立大学计算机系有两门课:CS 1101 / 1102。

几乎所有的大学计算机系课程都有两门类似的课程;但几乎所有的学生都误解了这两门课;以为前者是教C,后者是教java;但实际上前者是 Programming Methodology 后者是 Data Structure and Algorithm。

所以这两门课可以有选择,1101c 或者 1101s,使用不同的语言作为媒介。语言并不重要。

只要掌握了编程的思想、数据结构、算法,使用不同的语言去表达是很容易的。

会了很多种电脑语言后,学一门新的编程语言,几乎只要花一个晚上看看官方的语法文档就可以立刻开始使用做东西了。最多就一个星期。

基本上,那些说长时间说自己在学C#,学java的程序员,都是2B程序员,他们完全不懂得程序开发中“思想”、“数据结构”、“算法”的本质,而将大量的时间耗费在语言实现的细枝末梢中,纯粹浪费自己时间。

不同的语言会有不同的特性,有一些特性是比较重要的,普遍存在于多种语言当中的,“学习”一种新语言,实际上仅需要查看文档,看这种语言是以怎样的语法支持这些特性而已。

=========

OO是影响很广的编程概念,基本上,是Enterprise Developer(注:企业级开发者)的圣经、法则。

ED认为,越OO越好。

基本上,计算机业界有两批人,一批是真正的程序员,或者说hacker,一批就是ED。

ED实际上是企业的工具,他们很少有自己创新的想法;企业说啥米,就做啥米。所以,会有大量的vender,提供工具、支持、新技术,去train这些ED。

典型的vender有微软、IBM、Oracle等等;这些vender为了向企业推销产品,他们就经常会鼓吹一些新的“技术”,然后打包成为解决方案,推销给企业。

为了鼓吹、宣传这些技术,还有一批企业是专门在“布道”的,他们是所谓的“咨询公司”。

这样的咨询公司,他们会专门聘用一些所谓“Evangelist”,屁事不做,整天四处布道,名头都很牛逼,如XX金牌讲师。

他们实质上,就是推销员,只是,他们推销的产品,是所谓的“新技术”而已。

微软在新加坡好像就招了不少Evangelist 。每隔几年,微软所推广的技术就会“革新”一次,Evangelist们就不断的四处去宣传新技术改变了一切,能够提高效率无数倍。

Evangelist本身的技术,很多是很差的;就好像推销员本身,是不会做产品开发、不懂技术的。他们仅仅是会宣传、鼓吹新技术而已;满口各种新技术名词,但他们本身,可能仅仅只是会使用这些技术写一个Hello World。

因为他们本身素质很差,所以,他们是无法分辨他们所推广的技术本身是否好,他们只是复读机。有时候,vender本身在推的技术也其实不错,但复读机们也会把它夸张到荒谬的地步。

OO就是一个典型。

OO仅仅是无数编程模型中的一种而已,但它被过度的夸张,诠释。

Hacker们写程序,基本不会去追求程序本身是否符合OO规范。Hack这个词的意义本身就在于打破规范。

但是,大多数的ED是很笨的,他们缺乏独立思考的能力,他们需要被Train,而无法自学。Hacker的那套,他们接受不来。

所以,才会有vender / consultant / 培训学校一系列的产业,去鼓吹:

OO、XML、SOAP、Web Service、Silverlight等等一系列伪技术。

有的ED,一辈子都无法意识到他们实际上是中了vender的圈套;无法掌握真正的编程技术,而沉迷于vender们所鼓吹的“新技术”,一代接一代。

然后,只要有其中的一代技术ED没能掌握,ED就立刻被淘汰了;因为这种ED,穷其一生都没有学会真正的编程;他们仅仅是学会了一代又一代的被封装的伪技术使用技巧而已。

伪技术的典型特征是封装。

它本身没有任何新的东西,只是把旧的技术封装一下,换汤不换药而已。

OO是最好的封装技术;所以它被无底线的推崇。

封装很重要;但是,对于程序员来说,掌握封装技术本身,跟学习使用别人封装好的技术工具;是两回事。

“程序员从此不再需要关心XXX”,这是evangelist最常用的宣传语句;2B ED,看了就很高兴,然后拼命去学习新的“技术”,把他们曾经掌握的XXX底层技术给忘掉。

微软所宣传的理念被Hacker理解为“Even monkeys can code”。ED被evangelist鼓吹的新技术洗脑,最终就是成为monkey而已;所做的工作,毫无技术含量;很容易被淘汰。

所谓的程序员30岁必须转行这种说法,便是源于ED被洗脑。

这种ED,从未掌握真正的编程技术,是必然被淘汰的。

=========

而这种ED,在大学时,就是把cs 1101 / 1102理解成为教 c / 教 java的那群人。

他们,从一开始就走错了。

=========

作业(编辑说明:在技术宅和他老婆的故事中,只有女主人公完成作业之后,男主人公才会发出新课程。当然,身为看客的您可以无需完成这些作业,但如果您仍是学生,或者您正在带学生或小弟的话,倒是可以做个参考):

1. 用500字讲述什么是Programming Methodology?

2. 列举10种Data Structure.

3. 列举10种Algorithm.

【作者声明】Katze实际上是正宗计算机系科班出身,而且大学成绩甩开Wuvist九条街,这其中还包括算法、计算机架构等传统上被技术宅男垄断的科目。Katze毕业后长期于投行从事Unix服务器运维工作,故研发编码水平会被Wuvist嘲笑;但Wuvist不会写shell脚本时,绝对是第一时间向Katze求助。

Wuvist写的这系列教程以及作业安排,是为Katze量身定做的,像第1课的作业便因此会出现Perl这门研发中不常用,但在运维中却非常普遍的语言。这系列Wuvist是写给老婆的私人课程,其中充满了各种主观偏见,有缘发布到CSDN来,各位看官若看得不爽,请尽管抛砖头狠踩,但是请尽量喷得准确、到位、凶狠一些~

程序开发中,有一个著名的 80 / 20 原则。

我想,这个原则也可以适用于ED。

程序员只要花20%的努力就可以成为一个混日子的ED;80%的程序员均是如此。

但如果要成为一个优秀的程序员甚至hacker,那么,需要花多至少4倍的努力。

有什么积木可以用?积木本身是怎么做的?积木A比积木B好在哪里?

这些,是需要花大量的时间去了解。

全部都是实在的经验积累,没有捷径。

都是.NET语言,C# 跟 VB.Net的差别在哪里?对于ED,他们偶尔也会对这样的问题感兴趣,然后,他们会去看介绍,看比较文章。。。。但其实,这事完全是木有用的。

他们看了别人的介绍,以为自己懂的,但实际上,他们只是在复读而已,完全木有懂。

作为一个ED,要了解C#跟VB.Net的差别在哪里,最好的方式,就是花时间去把两种语言都学了。用这两种语言分别去写个几万行程序,然后就懂了。

当某天ED成为Hacker的时候,那就反倒可以去看各种介绍,看一眼,然后瞬间就可以悟了。

这也就是为什么很牛程序员学习新语言可以那么快,因为有太多的知识可以复用;而这些知识的积累,必然是需要通过在实际中,无数行的实际编码,无数篇的资料阅读中得来的。

没有捷径。

很多初学者,或者说,编程的伪爱好者,他们,会热衷于去四处请教大师,下载各种经典书籍,企图读一本编程圣经,然后一夜脱胎换骨。

这是,不可能的。

这种伪爱好者,永远不可能成事;在学习的过程中,抱着去“走捷径”的心态,本身就已经是入了歧途;最终会花更多的时间。

原来Ruby / 现在 Python的一个光头大牛Zed A. Shaw,为了表达“没有捷径”这样的观点,特意写了本《Learn Python The Hard Way》:
http://learnpythonthehardway.org/

甚至有一个系列:http://learncodethehardway.org/

从长远来看:The Hard Way Is Easier。

我完全同意。

作业:

1. 列举10个Python Web框架

2. Python有多少种不同的解释器?

3. Perl 跟 Python 有什么不同?

怎样成为一名优秀的程序员?相关推荐

  1. 如何成为一个优秀的程序员_如何成为一名优秀的程序员

    如何成为一个优秀的程序员 by Amy M Haddad 通过艾米·M·哈达德(Amy M Haddad) 如何成为一名优秀的程序员 (How to be a great programmer) Wh ...

  2. 我要成为一名优秀的程序员!

    2019独角兽企业重金招聘Python工程师标准>>> 2013年的3月14号,所谓的白色情人节,这天我很不幸.在班级篮球比赛中,我上篮落地时不小心搞到小腿骨折,然后在恐慌中被送进了 ...

  3. 想要成为一名优秀的程序员,这十八招必看

    文章目录 第一招:速学能力 第二招:理解能力 第三招:编程能力 第四招:使用能力 第五招:编码能力 第六招:注释能力 第七招:思维能力 第八招:英语能力 第九招:学习能力 第十招:思考能力 第十一招: ...

  4. 成为一名优秀的程序员基本要素

    职业要求 一般的程序员都有四年的在专业领域的学习,需要一个在程序领域的学士学位获得者,不论是数学方面的还是工程方面的都是可以的. 程序员 大约有20%的人在这一领域的计算机科学和工程学拥有更高的学位. ...

  5. 讲点码德!避免这些代码坏味道,努力做一名优秀的程序员

    Martin Fowler:任何一个傻瓜都能写出计算机可以理解的代码.唯有写出人类容易理解的代码,才是优秀的程序员. 大家闭着眼睛想一下什么是好代码?也许你的脑海中漂浮着一堆词:干净.整洁.命名规范. ...

  6. 怎样成为一名优秀的程序员

    工作了有这么一段时间了,在小编的眼里看来,不管你在哪里工作,或者是做各种不同的工作,成为一个优秀的员工与成为优秀的软件开发工程师的过程是一样的,下面便是大神们总结的一些伟大的程序员所具有的经验和品质. ...

  7. 讲点武德!避免这些代码坏味道,努力做一名优秀的程序员

    Martin Fowler:任何一个傻瓜都能写出计算机可以理解的代码.唯有写出人类容易理解的代码,才是优秀的程序员. 大家闭着眼睛想一下什么是好代码?也许你的脑海中漂浮着一堆词:干净.整洁.命名规范. ...

  8. 如何成为一名优秀的程序员(三)

    ...程序员不妨多学学解密.杀毒.肯定在中国有大的用场. 首先一定要理解c++中的面向对象理论,最好理解MFC的编程,这样一步步下去 行呀,不过你准备接受VC的时候同时认识MSDN,这可真是个大宝库, ...

  9. 如何成为一名优秀的程序员(五)

    ....关于VC,MSDN是必备的,D版MSDN也到处有卖的,英文水平也不见得要多高,看的多了就好办了,另外,没有VC的MSDN中文版,要养成看英文的习惯.基础方面,要了解C++的特性,继承.重载什么 ...

最新文章

  1. 树状数组的理解(前缀和 and 差分)
  2. 无人驾驶矿山赛道单笔最大融资:踏歌智行完成2亿元B轮融资
  3. 经典mysql 语句收录
  4. Delphi FastReport动态加载图片
  5. Java Spring Data Redis实战与配置参数详解 application.properties...
  6. 小米出招黑科技,5S或成全球首款”Under glass“指纹识别手机
  7. MySQL——binlog,redo log
  8. [SoapUI] 通过SoapUI发送POST请求,请求的body是JSON格式的数据
  9. python自带的shell、其性能优于ipython_python3.4 shell
  10. 【入门2】分支结构 (今天刷洛谷了嘛)
  11. 微信小程序 全局共享数据
  12. C语言程序设计(第三版)何钦铭著 习题3-3
  13. 使用JS访问本地数据库
  14. 【内存】ECC内存简介
  15. 各种字体.效果和名字对应图. --- by 王朋
  16. JPress安装体验
  17. 淘宝滑块 tb滑块 x82y x5sec
  18. mysql eav_mysql – 如何使此eav查询生成水平结果
  19. Java-JDK下载过慢的问题解决方案
  20. Java程序员:快来像我这样做,3天辞退不是梦

热门文章

  1. PHP redis 全部命令
  2. 浅析Windows2000/XP服务与后门技术(经典后门T-cmd的源码)
  3. 变量被重复定义的问题的讨论
  4. linux USB触屏无响应驱动出现EPIPE错误
  5. jdk 下有jre 还需要下载jre吗
  6. 格式: echo -e \033[字背景颜色 字体颜色m字符串\033[0m
  7. 【转】8家公司笔面试经历-百度-联发科-瑞晟--
  8. 十大城市男人魅力新榜 [转帖]
  9. 广为流传的一个关于项目管理的通俗讲解
  10. go项目部署服务器保姆级教程(带图)