目录

1 开发者的工作目的

2 开发者的工作流程

3 计算思维是很多人可以具备的能力

4 技可进乎道:坚持工匠精神避免实用主义


今天我尝试从计算教育的角度,解释为什么只会编程的程序员无法成为优秀的开发者。希望大家从问题出发,培养定义问题、分析问题、设计测试解决方案并优化解决方案的能力,从工程方法论的角度,打造自己的计算作品。

1 开发者的工作目的

计算机科学和技术已经极大地改变了我们的世界, 计算机科学的思维方式、问题解决方法和创造方式对于生活的各个方面都变得非常宝贵。当我们讨论计算机相关话题的时候,我希望大家能够开阔思路,用计算领域的相关知识,用计算领域的一些基本思维方法和自己创建的工件(或者叫程序),来做一些有意义有价值的事情。如果只是为了能做什么程序可以显摆,能参加什么竞赛可以帮助升学,这样一定在计算领域无法走远。谈到计算机科学基础教育,我非常建议大家去学习参考美国K-12计算机科学教育框架(以下简称框架),大家可以到 https://k12cs.org/wp-content/uploads/2016/09/K%E2%80%9312-Computer-Science-Framework.pdf下载这份框架。

我非常认同框架提到的计算机科学教育的愿景,我也希望更多的人能理解这段话背后的意义。

所有学生都批判性地从事计算机科学问题; 以创新的方式解决问题; 并创建具有实际 、个人或社会意义的计算工件。

英文内容如图所示。

具体内容如下,

框架描述了美国基础教育里学生经历的计算机科学历程。

框架包括核心概念和核心实践。

从这里我们可以看到,算法和编程是核心概念的一部分,用编程创建计算工件也只是实践中的一个环节。如果我们只看到或者只教孩子们学习编程,会有很大的局限性。因为一提到编程,大家马上想到语言和算法,缺乏对计算领域整个体系的系统理解。除了算法和编程,要想理解计算机科学,还要了解计算机系统、网络和互联网、数据和分析以及理解计算给我们带来的正面和负面的影响。坦率地说,在计算机领域,编程真的是很小的一个部分。当我们想用工件或者程序来解决一些问题来创造一些价值的时候,我们需要了解很多关于编程以外的内容,做除了编程以外的更多时间,比如把一个问题抽象成算法,然后变成可以顺利进行的代码程序,还要为这些代码搭建可以让其运行的系统环境,比如云服务器、网络、应用服务器、操作系统或者硬件。

2 开发者的工作流程

相比程序媛(Progarmmer)这个词,我更喜欢称自己为开发者(Developer),因为程序媛这个词实在不能说明我的工作内容以及我的全部价值,作为一个开发者,当我遇到自己想解决的问题时,我会按照下图的过程来做。

要把想解决的问题最终变成一个可以应用的计算工件,作为一个开发者,我会完成以下的过程:

  1. 分析问题,将问题转换成软件产品的功能点,这个过程中就需要我有把问题转换成功能的分解能力;

  2. 针对每个功能点设计计算工件,运用将具体转换成抽象的能力,寻找技术解决方案,建立数据对象、程序逻辑以及与使用者的外部连接等等,设计的过程中也会考虑用户体验、信息安全以及第三方接入等等的问题;

  3. 选择某种或者某几种语言编程实现工件;

  4. 当工件完成时,我找到用户做测试,获取用户的反馈。

在这个过程中,大家会发现,如果我只会编程是无法完成一个作品的。我需要分析问题的能力,需要与人沟通协作,将具体的问题转化到抽象的实现,还要将抽象的计算实现还原到具体问题或者情景,我还需要创新等等软技能。这些都要求我有较好的工程思维和科学思维,建议大家阅读【教育】科学思维和工程思维的学习和研究资料。作为一个开发者,我感受着计算领域工作对我自身的发展以及带来的乐趣,我喜欢计算领域工作者这个群体,因为他们大多数谦虚、诚实、肯于承认自己的错误、有耐心、有着好奇心和强烈的求知欲,懂得与他人合作,有创造力却也遵守一定的纪律,懂得坚持也懂得放弃,紧跟潮流,坚持学习,会用高明的手段偷懒,有些好习惯。大家可以阅读     【趣说】程序猿/媛特有的个性魅力_苹果二的博客-CSDN博客获得更多信息。

3 计算思维是很多人可以具备的能力

作为现代社会的一员,不管是不是计算领域的从业者,都可以在遇到问题的时候问自己,我可以用计算领域的知识、思考和解决问题的方法以及具体的工件来解决问题吗,如果可以解决,我需要做哪些事情?因为计算思维这个能力,其实很多人是具备的,大家可以看看【哲思与实战】计算思维 Computational Thinking以及【计算机教育】看《计算机科学导论》,发展计算思维能力。

我曾在

非常建议大家去读计算机教育学家 Mark Guzdial的文章:计算机教育的意义:计算机教育是21世纪文化的基础Computing Education as a Foundation for 21st Century Literacy,大家可以到 Computing Education as a Foundation for 21st Century Literacy | Proceedings of the 50th ACM Technical Symposium on Computer Science Education下载论文,

访问https://www.slideshare.net/markguzdial/computing-education-as-a-foundation-for-21st-century-literacy  https://www.slideshare.net/markguzdial/computing-education-as-a-foundation-for-21st-century-literacy 可以下载演讲的幻灯片。

4 技可进乎道:坚持工匠精神避免实用主义

拉拉杂杂写这些内容,是希望当谈到计算机教育时,教育者应该让学习者体会到计算领域的一些思维方式、解决问题的方法和创造方式,感受到这些方式和方法背后的核心理念对提出、发现以及解决问题的作用,然后在这些基础上,真正地可以做出自己的计算作品。希望大家能离开一些误区,比如以为计算机学习就是要学那些能去参加比赛的内容,学那些能马上看得见可以显摆的技能。魏源曾说过”技可进乎道“,希望我们的教育能多传些道,同时又区分工匠精神和实用主义显摆主义,因为这两者本来就不是一回事。工匠精神事实上是建立在对理念和方法深深的理解后,然后利用知识创造出自己的作品。这一点,我们最近而又最远的邻居日本早就给我们做了示范。学计算机科学,请不要只强调编程,因为要能在计算领域做实实在在的事情,编程只是很小的一部分。所以建议做机构的大家以后起名字,也不要只会用编程两个字,用计算(Computing)相对更全面些。可以用核心理念和核心实践来代替局限的编程这个词。

最后,希望在这个计算机科学的黄金时代,通过我们优质的计算机教育,培养更多的人才,创造出有价值的作品,改善或者改变我们的工作和生活。也希望读了这篇文章的开发者朋友,积极培养自己的功力,愿大家技艺精湛,做出优秀的计算作品!

为什么只会编程的程序员无法成为优秀的开发者?相关推荐

  1. 学会使用函数式编程的程序员(第2部分)

    本系列的第一篇: 学会使用函数式编程的程序员(第1部分) 组合函数 (Function Composition) 作为程序员,我们是懒惰的.我们不想构建.测试和部署我们编写的一遍又一遍的代码.我们总是 ...

  2. 【看动漫学编程】程序员在异世界生个娃 第2篇:外挂已准备就绪

    前言 作者文笔比较水,还请见谅. 以下内容还将使用视频动态漫画表现,剪辑完将会贴出链接. 小说剧情为剧情需要,过渡到知识点,部分篇幅可能没有技术知识点还望谅解. 由于没有经费支持,所以画出来的东西是我 ...

  3. 【看动漫学编程】程序员在异世界生个娃 第1篇:太极村

    前言 作者文笔比较水,还请见谅. 以下内容还将使用视频动态漫画表现,剪辑完将会贴出链接. 小说剧情为剧情需要,过渡到知识点,部分篇幅可能没有技术知识点还望谅解. 由于没有经费支持,所以画出来的东西是我 ...

  4. java弱签名_14条经典的编程签名(程序员个性签名)

    之前收集过<22条经典的编程签名(程序员个性签名)>,发现还有一些未收录的,下面这些引言也很有意思的,希望你喜欢. "The first 90% of the code acco ...

  5. “我这个白痴,招到了一堆只会“谷歌”的程序员!”

    整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 大家好,我是校长.在 CSDN 程序人生公众号看到一篇有意思的文章,转载一下,分享给大家.如下: 不同于几十年前曾经尚在起步的互联网时代 ...

  6. 程序员的杂想-不要只做一名程序员

    从一次进食堂吃饭感想:食堂运营模式一般有两种: 多个窗口,每个窗口有一位负责打菜 结账: 流水线: 到底哪种方式更好呢?作为程序员,首先想到的是吞吐量:怎么算呢?是以单位出队人次 还是以 工作人员单位 ...

  7. java开发 职业技能_java编程开发程序员需要具备哪些职业技能

    随着互联网的不断发展,java编程开发可以说是目前学习人数和应用范围非常多的一种编程语言了,而今天我们就一起来了解一下,java编程开发程序员需要具备哪些职业技能. 1.数据结构和算法分析 数据结构和 ...

  8. java程序员入门先学什么开发者工具

    学习java编程语言,那么开发工具是肯定少不了的,程序员入门基础中开发工具是一定要学会的,可以帮助开发者们提高开发效率.更优雅的写代码.由于开发者涉及的技术领域众多,以后端开发者的视角盘点平时可能用得 ...

  9. java excel 插件开发工具_程序员常用的15 种开发者工具推荐

    程序员常用的15 种开发者工具推荐:Java 线上诊断工具 Arthas.IDE 插件 Cloud Toolkit.混沌实验注入工具 ChaosBlade.Java 代码规约扫描插件.应用实时监控工具 ...

最新文章

  1. java获取真实ip
  2. pywinauto 连接已经打开的程序 如:微信
  3. java23中设计模式——结构模式——Composite(组合)
  4. 《Storm实时数据处理》一2.6 统计与持久化日志统计信息
  5. 解决 Unable to get provider
  6. secureCrt个人操作手册
  7. java并发编程之美-阅读记录6
  8. spanning-tree extend system-id
  9. Javascript let和const
  10. Log4j2 杀不死 Java
  11. util:properties/加载的配置文件中有中文导致乱码,如何通过分析源码解决问题?...
  12. 第二阶段--个人冲刺--第七天
  13. matplotlib-plt.style.use
  14. 瑞友虚拟化系统搭建服务器,瑞友云电脑虚拟化系统 | 瑞友天翼-应用虚拟化|远程接入|桌面虚拟化|国内虚拟化整体解决方案领导者...
  15. 微软采纳我的建议在WES7增加媒体中心组件
  16. UI设计师求职中常被问到的13个面试题及答案总结
  17. 小学-综合素质【4】
  18. linux “<“ 会引发血案
  19. Error response from daemon: Container 2c6d35b44a9862c63a6caf11a5622a33fe27979e12e51f9bd96f8dad98521c
  20. linux 'stack'未声明(在此函数内第一次使用,未定义的引用`__stack_chk_fail'

热门文章

  1. pwm 正弦波_正弦波滤波器的原理及应用,LC滤波器与LCL滤波器的区别?
  2. 雪亮工程视频监控相关标准规范
  3. 如何提高本地文件上传至百度云的速度_不再依赖网盘,易上手的家用备份好物,联想个人云A1评测...
  4. 智能电视只有数字音频输出,传统音响只有模拟音频输入,巧用数字音频转模拟音频转换器,完美解决!
  5. [数据结构笔记] 最优二叉树
  6. Flappy Bird总结
  7. 我们真的需要把训练集的损失降到零吗?
  8. C# Windows 任务管理器
  9. Python练手小项目——随机加减法生成器
  10. 华硕fx53vd 键盘_【华硕FX53VD7300评测】神似高贵的ROG 华硕飞行堡垒FX53V评测_华硕 FX53VD7300_笔记本评测-中关村在线...