您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
怎么做一个程序员?
程序员,自己的,代码怎么做一个程序员?
发布时间:2016-12-08加入收藏来源:互联网点击:
如果这些人要系统而全面的学习计算机专业的基础课程,得需要多少时间和金钱成本?他们所处的环境是否允许他们这样做? 他们不这样做,是不是就成不了“真正的程序员”?
好了,我们来谈谈什么是真正的程序员。
在我的意识里——能够根据客户的需求(或者上级的要求),选择恰当的技术方案(或者按照上级的指示)开展开发工作,在合理的时间内完成开发任务并达到质量要求的人,就是真正的程序员。
要成为这样的程序员,其实没那么难。
在这个答案里,我想把程序员分为两个层次:
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发憷了,更重要的是——他们具备了真正的程序员所必须具备的核心能力——自学能力、独立解决问题。
“作为计算机专业出身的,混迹过几家大点公司的表示很不赞同。这样出来的仅仅只会是最低端的会写代码的员工。和真正的程序员或者软件工程师还有很大差距。整个学习过程都没有一点工程的思想和合作的思想,这在软件开发中是很致命的。这也是本科教育和培训机构的差距。可能这样学出来的很多外包公司都不愿意要,别说大的互联网公司和软件公司。
我的看法是:
1.不是公司里的所有程序员都需要是大牛 2.不是所有程序员在一开始都需要是大牛 2.不是所有人都要进BAT或者MS,IBM这样的大公司
第一,就像盖房子,有人设计结构,有人设计外观,有人砌墙,有人装修,软件行业分工必然是越来越细(全栈工程师则是另一个极端),越是在大的软件公司里越应该这样,最低端的会写代码的员工存在的价值还是很大的。
第二,人是会成长的。从学习路径的选择上,我一贯提倡”先博大、再精深”,在初学阶段用较快的速度(尽管看上去不扎实)涵盖较大的知识面,然后再根据需要或兴趣选择在某一个领域深入学习,没有什么不可以的。我反对的是一开始就投入过于理论、过于抽象的学科里去,这很难取得成就感(相比较于做实际的项目),会降低学生的学习积极性甚至打击学生的自信心,产生“我不是干这行的料”的想法,只有少数较有天赋的学生能取得较好的学习效果;作为教师,我们必须对大多数学生负责。在知乎的另一个回答里,我曾经表达过“脱离生源质量和培养目标谈学习方案是不切实际的理想主义”的看法,我们不可能要求软件行业的从业者都是211、985院校的毕业生,IT行业不可能是精英才能进入的行业。
从另一个角度,在学生获得了较宽广的知识面后,完全可以在第二、三学年深入地学习其他课程,而且学的较为轻松,进步速度也很快。
第三,并不是人人都需要进入大公司。作为名校毕业生,进入大公司当然是理想的选择。但是对于高职(专科学历)的学生,或者对于那些本来就不是计算机专业的人群来说,毕业时能在一个软件公司拿到3-6K(武汉薪资水准)就已经很高兴了,这能使他们脱离父母的供养,从经济上获得独立。在工作中再进一步提升专业知识和技能,还是可以成长为大牛的,到时候再通过漂亮的工作经历进入较大的公司或取得较高的职位是完全可以的,十几年来我已看到过不少这样的例子。
想起一件事来,有一年我公司做了一个CAD项目,验收的时候甲方通知我说从某大公司请了个“技术很强的技术总监”的人来参与验收,到现场的时候那小子客客气气地站起来说“*老师好”,接下来就哈哈哈了。
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |