关于编程学习的七点思索

本文探讨了学习编程的不同途径,包括通过数据库管理系统、插件开发、实践问题解决、智能手机应用、电子表格、Unix管理和Web网页编程。强调实践和反馈在编程学习中的重要性,提倡通过实际操作和寻求专家建议来提升技能。

中国古代思想家孔子(Confucius)功劳中包括对许多事物发表的见解, 从平凡的幸运饼消息(fortune cookie messages)到明显荒谬的笑话,如“Man who stand on toilet is high on pot.(立于茅厕, 乐于尿壶)”。

  他曾说过一段对人们学习编程有帮助的话:

  • I hear and I forget.(耳听为虚)
  • I see and I remember.(眼见为实)
  • I do and I understand.(实践出真知)

  对大多数人来说, 坐在教室里听课远非学习编程的理想途径。 辅以阅读介绍编程概念的书籍可能会有所助益, 但无法与通过有效阅读并思考其他人的源代码直至理解所获得的实践技巧相比。

  但是,真的没有什么方法比喜欢自己动手写程序更能积累编程技巧。 阅读一点只能学到一点, 而动手编程则能收获很多。 找到你想简化的事情, 并编写一些程序代码来通过自动化使它们更容易处理。

  不幸的是,搞清楚什么能做有时会是编程学习中最困难的地方。 基于个人的经验,答案似乎是你可以一躇而就, 而不是七上八下的事情,并能通过顿悟来找到通过编写程序来解决问题的方法。

  在寻求这种顿悟时,由于刚开始编程的人知识通常都非常有限,绘制流程图有助于以你喜欢的方式来事先准备。 请这样来做, 至少在开始时, 包括搞清楚你每天使用电脑的流程,把其中使用最多的部分简化绘制出来。 一旦你整理出来,就把在那些情况下特别有用的编程技能作为早期学习的重点。 这样的机会在一定程度上是稀缺的,你可能要改变计算环境来提供这样的机会。

  需要做的最重要的事情是要找到一种方法来激励自己编写代码。

  下面是关于如何采取行动学习编程的建议。

  1、数据库管理系统(DBMSes)

  诸如PostgreSQL, Oracle, Microsoft SQL Server, 以及Informix这种专业、耐用的数据库管理系统通过存储过程或存储函数提供了脚本功能。 最受广泛认可的语言选项也许是Microsoft SQL Server和Sybase所使用的TransactSQL, 以及Oracle所使用的PL/SQL。 PostgreSQL提供了一个名为PL/pgSQL的类PL/SQL的程序扩展到SQL里,但它也提供了包括PL/Perl、PL/Python、PL /Ruby和 PL/Tcl在内的其他语言的选择范围。

  这种编程机会虽然限定于一组特定的问题领域,但如果你是一名DBA(数据库管理员)或你的工作涉及数据库开发报告,将会亲身体验到这是非常有用的。

  2、插件

  许多新的电脑游戏提供了编写和加载插件的功能。 例如, “魔兽世界 (World of Warcraft)”提供了一个使用Lua脚本语言的插件系统。 随着Firefox声名鹊起和广泛使用, 现代网页浏览器往往也提供灵活的插件系统; 在最简单的情况下,Firefox的插件都是用JavaScript编写的。 开放源码的浏览器在插件开发方面往往比封闭源代码的浏览器更具吸引力,并且Chromium浏览器的插件系统, 很可能成为插件开发者们的第二大目标, 这是因为谷歌Chrome浏览器高调的营销策略以及不设限的许可证 (permissive licensing)政策。

  「PurpleEndurer注:Lua程序设计语言 是一个简洁、轻量、可扩展的脚本语言。 Lua读作/’lua/(噜啊), 是葡萄牙语中”Luna”(月亮)的意思。 详见:http://zh.wikipedia.org/zh-cn/Lua 」

  其他许多应用程序具有插件和扩展系统,可以提供充分的机会来培养这些迅速发展的编码技能,甚至包括一些终端仿真器(terminal emulators)和基于控制台的文本编辑器, 如Vim。 (透露一点好消息:我贡献了一点代码到urlpicker项目)

  3、实践问题

  您可以尝试解决代码任务中的通用清单所提供的问题,代码任务是特别为了给程序员提供实习机会而专业设计的。 欧拉(Project Euler)是一个比较流行的、不论编程语言的项目,包括“一系列具有挑战性的数学/计算机编程问题”。 欧拉项目收集了上百个问题, 这些问题一般从易到难,足以让你忙碌很长一段时间。

  「PurpleEndurer注:关于欧拉项目, 可访问:http://projecteuler.net 」

  其他例子包括RubyQuiz, 它多年来一直在ruby-talk的邮件列表中广受欢迎。 另外还有CodeKata, 它是Dave Thomas的一个规模较小、寿命较短的项目。 Dave Thomas是《The Pragmatic Programmer(程序员修炼之道)》一书的合著者之一。

  「PurpleEndurer注:关于CodeKata可访问 http://codekata.pragprog.com/ 」

  这些选项不适合用作自我激励型探索性学习的任务, 因为它们会让人挠破头皮,但如果发现其中的乐趣,它们可以和其它方法一样用于编程实践教育。

  4、智能手机(Smartphones)

  应用程序开发行业中最大的新热潮是智能手机的应用程序。 这种装置通常需要开发人员使用一种可将装置的功能发挥到极至的特定语言作为应用平台,至少要以官方认可的方式进行。

  智能手机开发体系的一个新兴产业正在崛起,即允许开发人员用非智能手机平台原生的其它语言编写自己的代码,然后转化为原生语言的应用程序。 因为不需要学习任何特定的智能手机平台的官方应用程序开发语言,Web应用程序也沾了光,成为智能手机应用程序开发的一种方法。 选择语言甚于平台的另一个方案是使用像诺基亚的N900这样的设备,它运行Debian发行的Linux系统,可以运行的软件范围很宽——包括很多不是为 智能手机设计的软件。

  侧重于多种方法开发智能手机应用程序的书籍和在线教程纷纷出现,特别是Android和iPhone的设备。 一些第三方框架将可以从 HTML + JavaScript 到 Ruby 或 Python 编写的代码“编译”为多种平台的“本地”应用程序,有时不仅包括智能电话平台,而且包括桌面系统。 对这种情况也许最令人兴奋的是,这些框架和相关的IDE不倾向于试图解决所有的编程问题,这与同样出色的编程方式的主要框架,如Visual Studio和.NET框架有所不同。这使得人们有可能通过缩小选项至一个易于管理的问题领域来显著地简化开发过程。 其结果是软件开发风格令初学者感到非常易于接受。

  不足之处是,在学习如何编程时,你可能很难每天都编写新的智能手机应用程序。 但是,如果您的智能手机的操作系统是类Unix系统(如N900的),同样的小工具开发项目在工作站和服务器中都非常有用。

  5、电子表格

  如果使用了附带强大宏系统的电子表格程序,你将拥有一个快速的方法来阅读其他人(或物)代码,并编写自己的代码。 首先,将你执行次数多、通常需要采取数个繁琐步骤的任务记录成一个宏。 接下来,打开宏的源代码,阅读并进行编辑,使 之更适合于一般用途。 这是一个非常有限的方法,不会带来多大的长进,但可能会帮助你上路,自然地喜欢上简单的脚本代码。

  使用此类脚本的最常见的电子表格程序可能是微软Excel。 Excel所使用的VBA是一种贫乏的语言,但是如果你在日常工作中大量使用Excel,这可能是无论如何你都该掌握的一种技能。 OpenOffice.org使用了类似的宏系统,使用方法大致相同,LibreOffice也像微软Office一样,提供了学习代码的机会。

  在任何情况下,编写程序的门坎都比编写简单的命令行shell脚本代码稍高,因为菜单选项和按钮需要点击才能启用。 入门的成本类似于用市场上的一种主要IDE开始一个新项目,但是一个大幅缩水的“项目”。 这会是一个不错的主意,可以确保这不仅仅是在日常开发环境中编写脚本的机会,甚至是加以利用就会很有帮助的。

  6、Unix

  如果你定期使用一些类UNIX系统,在寻找锻炼初期编程技能的方式时就具有巨大的优势。 UNIX在简单脚本自动化方面提供了比任何其他家庭通用操作系统的更多的使用机会,这要感谢平台上管理脚本的极大灵活性。 在最不复杂的情况 下,一个管理脚本可能只不过是将一系列shell命令保存到一个文件中。 在此基础上,可以利用简单的循环和条件结构、输入输出处理、文件读写、计划任务来进行扩展。

  通过编写简单shell脚本爽过一把后,花一段时间来学习如何用Perl、 Python和Ruby编写管理脚本对任何一个Unix系统管理员都是值得的。 在Unix环境使用这些语言的关键技能包括通过UNIX管道和重定向访问文本流,处理命令行选项,读写文件,使用正则表达式搜索和操作文本。 管理员也想知道编程的公共基础知识,比如处理输出、循环(或在某些情况下递归),以明确界定的标准为基础,通过使用条件判断结构编程来作出决策。

  编写Unix命令行工具是一块沃土,有许多机会将脚本语言的巨大能力用于编程。 由于管理脚本开发的灵活性和简约性要求,编写工具的范围可以从一些有用工具的最简例子到强大的服务器进程,甚至大规模并行任务自动化,负载平衡,启发式过 滤,和一些其他有趣的问题解决作业,这些问题激起了世界上最好的程序员的兴趣。

  虽然几乎所有通用操作系统都具有一些使用管理脚本的能力,其中相当一部分用途比较窄,另一些操作系统则比较均衡。 Unix在管理脚本的适用条件方面高人一等,因为诸如主要Linux发行版和BSD Unix系统等Unix类系统共享相同的基本运行环境设计,他们都可以从管理脚本和脚本平台之间的可移植性中受益 —— 只要你按可移植性要求来写这些脚本 (如通过使用sh或Perl而不是bash, 选择系统标准sysctl值而不是数据源的proc文件系统)。

  这些工作也适用于非常高级、动态、解释型语言之外的其它语言。 C, C++, Haskell, Objective-C, Objective Caml, 以及大量其他选项正好合适各类简单Unix工具的编写任务。 对于其中的许多语言,即使要完成像小型管理工具的这样简单的工程项目,也必须学会更 广泛的技能,这一要求比Perl, Ruby和Bourne shell的这样的语言高。 但这些任务与GUI应用程序开发、系统编程、其它经常使用(特别是在其他平台上的)的任务比起来,其艰巨性对编程初学者来说要小得多。

  实际上,鉴于Unix哲学多年来提供了大量常用工具,这些工具严格分工(大部分)并工作良好,类UNIX环境对编程新手的价值中有一部分是充分利用Unix命令行环境力量,鼓励用户像程序员那样去思考,而非观众。

  7. Web网页

  这是一个危险的建议,通过玩JavaScript来学习编程。 这不是因为JavaScript是一种不好的语言,而是因为追求动态用户体验的缘故,网页已经被不加限制地滥用JavaSciprt弄得乱七八糟,因而在 网页上放纵程序员新手可能会被认为是不负责任的。 在网页中JavaScript也有一些积极用法,而且可以让新手们对编写在浏览器中运行的桌面应用程序的想法愈来愈感兴趣,这给了我们在程序员职业生涯中 尽早开始学习JavaScript的很多理由。

  事实上,JavaScript是一种最常见的、单独的客户端网页脚本,这也意味着JavaScript可能是最简单的语言,通过阅读别人的代码 就能学习。 找到具有客户端动态元素的任何网页,然后右键单击并选择查看页面源代码的选项,你就会发现它布满了JavaScript的散落片段。 对于更复杂的动态页面,(X)HTML的网页甚至可能引用一个纯代码的单独.js文件。

  在把代码上传到公共访问的Web服务器前要细心检查,确保它是好的。 如果你想让更多的有用脚本以本地方式来启动,浏览器扩展性可以让你将任意脚本应用到你查看的网页上——而且只适用于你个人的浏览体验。 Firefox的Greasemonkey是一个例子。

  征求有关代码的反馈

  提高编程技能的另一个伟大方法是,向自己身边的行家里手征求反馈,并掌握他们分享给你的的知识。 他们可能并不总是彼此认可,但如果你认为他们是值得尊敬的优秀程序员,他们所说的至少可以提示你思考新思想,并以新的方式回顾旧观念。

  征求反馈的方式很多, 这儿列出几种:

  • 在开始工作时,选择具有强大有益社区的程序语言, 如Ruby编程语言有ruby-talk邮件列表,Perl编程语言有PerlMonks网站。 加入这些社区中的一个(或类似其中之一的),并学习该语言的文化和最佳经验,以及得到最有效帮助的方法。

  • 与另一个程序员结对 。结对编程 (Pair programming)是一种时髦的做法, 已经通过敏捷开发方法的崛起而获得尊崇。 两个人走到一起做一个项目,但往往只有其中一个是在任何特定时间实际编写代码。 结对程序员轮流编写代码,其中一人输入代码时,另外一个则在后面阅读代码,确保他们都得到大量的编码时间。 就代码持续交谈可以帮助确保解决给定问题的最好办法逐渐显现并最终采用。 任何一个拥有顿悟的人在试图向另一个人解释一个问题时,应该认识到结对编程的潜在价值。

  • 寻求导师。找到导师的地方,可以是编程语言社区、朋友或同事之中、开放源码(Open Source)软件开发项目、重量级技术主题会议。 学校可能是另一个找到导师的好地方,所谓导师,就是对你、宿舍室友甚至研究小组有好感,,具有不那么传统而更互敬互让的辅导制关系的指导老师。 在学习编程过程的初期,与导师一对一的关系有时是获得反馈的最有价值的方式。 如果你幸运地寻得一位好的导师,你应该好好利用这一资源优势,并且永远不要认为这是理所当然的。

  • 在代码托管网站(如Bitbucket或GitHub)上创建一个项目。 告诉你的程序员朋友,把它张贴到自己的Weblog或Twitter中,并激励他人阅读你的代码,提供反馈意见。 确保问题跟踪系统是打开的,这样人们可以通过代码托管网站的交互功能提交bug或改进建议。

  在实践技能并获得达人提供的反馈中,你应该能够以自己的方式从中学习编程的基础知识,获得实际有益的经验。

  现在开动行动,编写代码吧!

单向双向V2G 环境下分布式电源与电动汽车充电站联合配置方法(Matlab代码实现)内容概要:本文介绍了在单向和双向V2G(Vehicle-to-Grid)环境下,分布式电源与电动汽车充电站的联合配置方法,并提供了基于Matlab的代码实现。研究涵盖电力系统优化、可再生能源接入、电动汽车充放电调度、储能配置及微电网经济调度等多个关键技术领域,重点探讨了在不同电价机制和需求响应策略下,如何通过智能优化算法实现充电站与分布式电源的协同规划与运行优化。文中还展示了多种应用场景,如有序充电调度、鲁棒优化模型、多目标优化算法(如NSGA-II、粒子群算法)在电力系统中的实际应用,体现了较强的工程实践价值和技术综合性。; 适合人群:具备电力系统、新能源、智能优化算法等相关背景的科研人员、研究生及从事能源系统规划与优化的工程技术人员;熟悉Matlab/Simulink仿真工具者更佳。; 使用场景及目标:①用于科研项目中关于电动汽车与分布式电源协同配置的模型构建与仿真验证;②支持毕业论文、期刊投稿中的案例分析与算法对比;③指导实际电力系统中充电站布局与能源调度的优化设计。; 阅读建议:建议结合文中提供的Matlab代码与具体案例进行同步实践,重点关注优化模型的数学建模过程与算法实现细节,同时可参考文末网盘资源获取完整代码与数据集以提升学习效率。
【电动车】【超级棒】基于蒙特卡洛模拟法的电动汽车充电负荷研究(Matlab代码实现)内容概要:本文围绕基于蒙特卡洛模拟法的电动汽车充电负荷研究展开,利用Matlab代码实现对不同类型电动汽车(如常规充电、快速充电、换电模式)在不同场景下的充电负荷进行建模与仿真。通过蒙特卡洛方法模拟大量电动汽车的充电行为,结合用户出行规律、充电时间、电量需求等随机因素,分析电动汽车规模化接入电网后对电力系统负荷的影响,并探讨分时电价策略对充电负荷的引导作用,进而优化电网运行。研究涵盖充电负荷的空间分布特性、时间分布特征及对电网峰谷差的影响,旨在为电力系统规划和电动汽车有序充电管理提供理论支持和技术工具。; 适合人群:具备一定电力系统、交通工程或新能源汽车背景的研究生、科研人员及从事智能电网、电动汽车相关领域的工程技术人员。; 使用场景及目标:①用于研究大规模电动汽车接入对配电网负荷曲线的影响;②支撑分时电价、需求响应等政策制定与优化;③为充电站规划、电网调度、储能配置等提供数据支持和仿真平台;④适用于学术研究、课题复现及工程项目前期分析。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注蒙特卡洛模拟的参数设置、充电行为的概率建模过程,并尝试调整输入变量以观察负荷变化趋势,加深对电动汽车充电负荷不确定性和聚合效应的理解。
先展示下效果 https://pan.quark.cn/s/43dfb91c1388 在Android开发领域中,`SurfaceView`被视为一种关键性的视图组件,它特别适用于处理需要高性能且低延迟的图形操作,例如游戏运行和视频播放等。 本篇内容将详细研究如何运用`SurfaceView`来制作动画效果,并涵盖相关的技术要点。 我们必须明确`SurfaceView`的基本属性。 与常规的`View`不同,`SurfaceView`拥有专属的绘图表面,该表面独立于应用程序窗口的堆叠结构,而是在窗口管理器中直接创建一个独立的层级。 这种构造方式使得`SurfaceView`能够提供更迅捷的渲染速度,因为它不受窗口重绘过程的影响。 这对于需要持续更新的动画来说具有显著的优势。 构建`SurfaceView`动画的核心在于`SurfaceHolder`接口,该接口作为`SurfaceView`的持有者,提供了对底层`Surface`的访问权限以及回调机制。 开发者可以通过监听`SurfaceCreated`、`SurfaceChanged`和`SurfaceDestroyed这三个事件来管理和控制动画的生命周期。 1. **SurfaceCreated**:当`Surface`准备妥当时触发,这是开始进行绘制的理想时机。 在此阶段初始化动画逻辑,例如设定帧率、载入图像资源等。 2. **SurfaceChanged**:当`Surface`的尺寸或格式发生变动时触发,比如设备屏幕发生旋转。 你需要在此处调整动画的尺寸以适应新的屏幕布局。 3. **SurfaceDestroyed**:当`Surface`变得不可用时触发,可能是`SurfaceView`被移除或系统资源得到回收。 此时,应该...
内容概要:本文档系统梳理了项目管理中的核心知识点,涵盖项目生命周期、组织结构、项目管理过程组、可行性研究、项目整体管理及范围管理等内容。重点解析了项目特点、组织类型(职能型、矩阵型、项目型)、项目干系人、项目经理与PMO的职责、生命周期模型(如瀑布、迭代、螺旋模型)以及项目五大过程组(启动、计划、执行、监控、收尾)。同时详细阐述了可行性研究的阶段与内容、项目章程、范围说明书、WBS的创建原则与方法、范围确认与控制流程,并结合历年真题进行考点分析与解答,强化对变更管理、配置管理、范围蔓延等关键概念的理解。; 适合人群:备考信息系统项目管理师的考生,具备一定项目管理基础的中高级项目管理人员。; 使用场景及目标:①系统掌握项目管理基础知识与核心考点,提升应试能力;②深入理解项目整体管理与范围管理的关键流程与工具,应用于实际项目管理工作中;③通过真题解析掌握常见题型与解题思路,强化对变更控制、WBS分解、项目章程等高频考点的应用能力。; 阅读建议:建议结合PMBOK指南和实际项目案例进行对照学习,重点关注表格归纳与真题解析部分,理解各知识点的内在逻辑与应用场景,尤其注重输入、工具、输出的关联记忆,提升理论与实践结合的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值