专栏首页程序员互动联盟【编程指导】如何成为一名真正的程序员?

【编程指导】如何成为一名真正的程序员?

本人十几岁开始写程序,近十几年来都在教人写程序,还经营着一个可能随时倒闭的软件公司,主要的开发语言是C#。

首先,我不认为《算法导论》是所有程序员必须一开始就掌握和精通的内容。

我无意否认某些核心课程的重要性,但是我们必须看到——很多程序员并不懂程序员的三大浪漫——编译原理,图形学,操作系统,但这并不妨碍他们在日常工作中创造出各种有价值的软件。之所以这么讲,原因是:行业的门槛因技术的不断进步而降低 不是所有的程序员都需要系统而全面地学习才能胜任工作。

这些年来,编程语言、开发工具的迅速发展,我们可以用C#、Java、Objective C这样的语言完成大多数开发任务(而不是在纸上打孔或者用汇编),用着Visual Studio这样爽的开发工具, 这并不是因为厂商大发慈悲要拯救程序员于水火之中,而是微软这样的厂商在取悦我们的老板和客户——技术发展的目的是降低软件开发的用人标准,进而降低软件行业的人力资源成本,更快、更好、更便宜地满足用户的需求。

从公司的角度来看,如果要求所有开发人员都是基础扎实、技能全面的,那么用人成本一定很高,我完全相信经过一定训练和挑选的***鸟毕业生在经理的正确管理下可以很好的开展工作,尽管他可能不懂算法和数据结构,C和C++基本不会,这并不妨碍他为公司创造价值,随着他开发经验的增长,在时间允许的情况下再去补充一些基础知识也是完全可以的。

几年以前有个“学生”,打引号是因为我并没有真正教过他,中专毕业,专业是钳工,曾经给我展示过胳膊上的长长的疤痕,说是被车床伤到的。

他要求跟我学的时候属于入门阶段,最开始学习的并不是什么三大浪漫,而是C#. 在掌握了一门编程语言后,很快自学了其他语言(甚至Delphi), 在一年后找到了一个小公司做些基本的开发工作,然后涉足安全领域,开发了各种工具,现在在一家安全公司上班,提升很快,收入不菲。前不久跟我聊他配合网监做一些取证和提审的工作经历。

2006年,我在武汉某个夜市的大排档上,凌晨2点多,看到一个服务员在忙里偷闲看一本计算机书籍(扫一眼就知道),仔细一看是一本Java入门书,聊起来才知道这妹子是护校毕业,但是对计算机有兴趣,就想在大排档当服务员攒学费去***鸟。她还拿出一沓油迹斑斑的信签纸,上面全是她写的程序,她说每次去网吧都要装开发环境,太麻烦了,所以干脆在纸上写。哥看不下去了,给一开软件公司的朋友打电话强烈推荐这妹子去实习,朋友一听情况表示拒绝,我说你只要给他管工作餐就好,不用发工资。1个月后这妹子进入试用期,2个月后转正,后来在朋友公司做了近两年,据朋友说开发能力很强,再后来,我就不知道了。

作为教师,感动我的总是这这样的“学生”,而不是那些坐在教室里花着父母的钱虚度光阴的学生。

可能有人会觉得这样的程序员是“野路子”,不登大雅之堂,但这一点都不妨碍他们兢兢业业的工作,为公司创造价值并且改变了自己的生活。

如果这些人要系统而全面的学习计算机专业的基础课程,得需要多少时间和金钱成本?他们所处的环境是否允许他们这样做? 他们不这样做,是不是就成不了“真正的程序员”?

在我的意识里——能够根据客户的需求(或者上级的要求),选择恰当的技术方案(或者按照上级的指示)开展开发工作,在合理的时间内完成开发任务并达到质量要求的人,就是真正的程序员。

要成为这样的程序员,其实没那么难,在这个答案里,我想把程序员分为两个层次:

  • L1-能根据上级的指示,按照公司的要求和规范开展开发工作的,称为程序员。
  • L2-能根据客户的需求,选择恰当的技术方案,制定合理的工作计划,独自或带领团队完成开发工作并达到质量要求,称为软件工程师。

我想题主可能想成为的是后者,而不是普通的编码人员,在我接触到的程序员中,其实很少有单纯从事简单编码工作的,他们大多数都是干的软件工程师的活。

软件工程师应该具备哪些能力呢?我们以前归纳过:

1. 分析问题的能力

2. 设计解决方案的能力

3. 编码实施的能力

4. 排除故障的能力

这四种能力如果要展开来讲,要写好长的,暂时就不写了。开始回答——”如何成为“的问题。

科学家追求的是知识,工程师追求的是能力。而能力是很难从书本上的来的,只能从实践当中来。

我注意到题主的问题中,提到看书静不下心,看视频又觉得太慢,可能从一个具体的项目开始更能激发学习兴趣并且获得成就感。

先给第一种路径建议吧——从C语言开始。之所以建议C语言,是因为C语言里没有那么多现成的、强大的类库,在不熟悉基本的语法、面向对象这些概念时C#其实比C语言难以理解,很难深入。学习C语言不仅限于对C语言语法的掌握,而是通过C语言的学习,建立程序设计的思维,比较深入地了解一些计算机系统的工作原理。

在我的教学班级中,我的教学内容是这样组织的,题主似乎也可以按照这种方式来学习:

  • 第一阶段高级程序语言的基本概念(编译、库、链接等),开发工具的使用(Visual Studio 2010), C语言的基本结构以及在VC中的一些差异,动手能力上达到能按照书本输入一个程序,能编译,能运行的结果即可。
  • 第二阶段变量、指针、表达式、函数、分支、循环、简单的输入与输出。

第一阶段和第二阶段的时间往往很短。

  • 第三阶段开始做第一个小程序(比如最简单的超市收银系统),这个时候学生开始头大,因为很多要用到的东西根本就没给他们讲过,即使网上查得到资料也未必都能用在项目里。学生被我带进一个接一个的坑里,我从不在第一时间告诉他们答案,总要他们冥思苦想抓耳挠腮一个星期了,下周上课的时候才开始讲解决的思路和方法。

经过1个月左右的折磨,他们基本可以完成一个单机版的的超市收银系统,完成比如输入(从键盘,扫描枪就免了)信息、修改输入、价格查询、汇总结账这样的功能。从知识层面上,结构体、指针、文件访问这些基本都解决了,顺带着把简单的查找、排序算法也学了。可以说这是学生最痛苦的阶段,但是正是这个阶段开始培养他们的自学能力,这个太重要了。但是效果也很明显,到后期的时候,少数学生开始先于我提出解决方案了。然后接着折腾,先带学生回顾做过的这个程序,看如何能做的更好,运行的更快,Review和重构。由于是纯C完成的,程序总是看上去很混乱,修改、扩充也不是很方便,于是我们开始探索另一种编程思想——面向对象,C++上场,又是1-2个月,用C++重新写这个程序,在这个过程中,要求他们自己实现String类,封装数据结构和业务逻辑、数据访问......

到这里,一个学期结束了,第二学期要求学生把这个控制台的黑窗口改成图形用户界面。MFC不准用,只准用一个叫做Easy-x的图形库,而且只准用其中的putpixel函数来绘制点,一轮新的折磨开始,从画点、划线、逐点写汉字开始,绘制按钮、绘制文本框、响应鼠标和键盘,并且要求他们开始设计和实现TextBox, Button,Image这些类.....,,顺便把消息循环之类的机制也做了初步的了解和简单的实现。到这时候,有的同学已经开始做出”高仿Windows"了,要不要太惊喜!

到这里,我基本可以相信我的学生不会为C#和Java发憷了,更重要的是——他们具备了真正的程序员所必须具备的核心能力——自学能力、独立解决问题的能力。

整理自知乎(Tony He)

本文分享自微信公众号 - 程序员互动联盟(coder_online)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-05-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 程序员在35岁后应该转行吗?为什么?

    作为已经马上迈向40的老程序员,现在大部分时间还是在一线写代码,还是依然喜欢呆在电脑旁边静静写代码的感觉,作为一个技术工种经验的积累显得特别重要。曾经在一家美企...

    程序员互动联盟
  • 为什么一些大公司的程序员,宁愿自己去创业也不愿意去小公司做项目总监?

    从事程序员行业已经多年,现在还在一线写代码,程序员在这个行业正常情况下有几种选择,第一种将技术进行到底,直至成为行业内的专家;第二种选择做技术管理,既没有完全脱...

    程序员互动联盟
  • 程序员最喜欢做的四件事

    程序员一般都是比较安静的,把大部分时间花在程序开发上了。那程序员除了上班,一般都有哪些业余的生活呢? 一,宅家里。程序员一般喜欢宅在家里,不太喜欢出去活动。在家...

    程序员互动联盟
  • 原来这才是都去学 Python 的真正原因.........

    从事互联网行业的都知道,程序员一直是以高薪著称(可惜民工哥没拿到.....),这也致使越来越多的互联网从行得投身到程序员的行列中,其实,一般我们所讲的程序员都是...

    民工哥
  • 程序员在35岁后应该转行吗?为什么?

    作为已经马上迈向40的老程序员,现在大部分时间还是在一线写代码,还是依然喜欢呆在电脑旁边静静写代码的感觉,作为一个技术工种经验的积累显得特别重要。曾经在一家美企...

    程序员互动联盟
  • 让程序员彻底疯狂的压力

    格子衬衫、粗框眼镜、浓重黑眼圈构成了程序员的群体印象。“IT男”单一标签的背后,是一个数量接近200万的从业者群体的工作日常和生活梦想,他们的生存状况如何?高压...

    java架构师
  • 程序员励志名言

    程序员励志名言    1、作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。   2、程序员可以让步,却不可以退缩,可以羞...

    汤高
  • 做程序员压力山大,很多人都快疯了

    软件程序员在如今看来是一个既能挣钱又有工作保障的职业,但是,这种职业对你的精神健康却会造成巨大的伤害。 有两种事情几乎能让程序员疯掉。 一个是被人们称作“骗子综...

    企鹅号小编
  • 程序员最讨厌的事

    Java小咖秀
  • 2017年中国程序员调查分析:大数据就业前景广阔

    导语 daoyu 在互联网行业,程序员一直是很受关注的人群。特别对准备步入社会的大学生们来说,从事哪方面的职业是一个很重要的问题,而程序员就是一个比较热门的选择...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券