从实践中要编程的体验和感觉

【来信】

  老师您好。

  有幸在这里见到您和您的学生。关于学习编程,麻烦您给点建议。
  基本情况,理科(力学)在读研究生,不小了,呵呵。本科阶段计算机编程没有系统学习,读研期间陆续读了一些计算机系统,数据结构,c/c++语言的推荐教材,公开课。只是这些层次的内容都停留在语法一些基本问题上,跟研究工作很难直接联系起来。而且这一两年对基本语法问题也算清楚的很,但就是有个“坎”没迈过去。
  举个例子,我工作中需要实现一个CFD(计算流体动力学)算法,算法思路已经ok,好了,到此,后面如何用c/c++ 实现,我就完全不知道从何下手了。
  对于我们这些不是计算机专业的学生,估计隐约都有点感觉,从基本的编程语法到写本专业的应用程序,缺少点什么过渡环节,或者前面说的, 感觉有个坎。基本语法都了解,自己专业的算法思路也清楚,就是端起电脑不知道怎么开始。
  另外,市面上编程书好像都是给计算机专业学生写的。所以也没有好借鉴的。
  非常感谢您能抽出一点时间,帮我解答下困惑。再次感谢。
  祝好

【回信】
  我初工作时的一个好朋友是学力学的,看见力学就亲切。注意到你没有说自己编过哪些,对于你所言的过渡环节,我首先想到的就是学习过程中的实践。程序设计要靠脑力,但其实践性很强,一定是有过实践以后,才能够真正实施的。
  实际上,不管用什么语言,应该是学程序设计,而不是学语言,语言只是个介质。这里有个误区,很多人一说要学计算机,学着用计算机解决问题,总得会一门语言吧,于是,将自己就投进学语言中去了。语法再熟,都是假的(这也适用于外语学习)。将程序设计整个过程中的各个环节都掌握了,而在语法上出现障碍,查一查手册,或百度一下,就过了。
  掌握了几门语言的计算机类专业人士,其实新学一门语言时,对程序结构、语法风格有一定了解之时,往往就开始工作了。在工作中,逐渐熟悉,逐渐能够将语言中特色的成份用好。相对而言,初学者学习第一门语言,语法相对熟悉一些还是必要的,这也涉及到“纯粹人的思维”向“靠近机器的思维”转换的问题。
  如果你真是是局限于看书、看视频,而不是自己写程序的话,现在可以通过写一些不是太大的程序,体会程序设计的过程,找到感觉。既然你做的是科学计算,可以从做一些简单的计算程序开始。不妨先放下你现在的CFD,用弦截法、牛顿法解解方程,用迭代法解解线性方程组,或者干脆就去实现一些求均值,求方差之类的统计。如果语法真熟悉的话,这个坎也快过。
  想过建议你读一些科学计算的源码。不过,可能你读书而不实践由来已久了,不必这样。
  也想过建议你找来用C/C++实现科学计算的书。我在亚马逊查到了本《常用算法程序集(C/C++描述)(第5版)》好像在图书馆也见过,你可以借来,但不要只看,自己把例程输进去调试调试。
  要用C++科学计算,还有不少现成的算法库可以使用,不过这是后话了,你现在起步了,什么都好说。
  还有个念头,科学计算用C++并不是最好的选择,MATLAB该是首选。长期做下去,可以择机学一学MATLAB。

  不知有没有说到点子上,仅供参考。

china-pub(正在发售)
卓越网(接受预订) 
图灵社区  官方试读本下载
豆瓣
==================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章分类目录(不定期更新)  ==|
|== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====

  
    

时间: 2025-01-30 02:59:27

从实践中要编程的体验和感觉的相关文章

浅谈从敏捷工程实践中获益的五种途径

创造有用的软件是门工艺.这是没有非黑即白的成功公式的.但是,却有一些敏捷工程实践,实践证明它已经屡次为企业增加了价值,但前提是要考虑周全之后再使用.在本文中,我将与大家分享5条具体的途径,你的企业能够通过这些途径从敏捷工程实践中获益. (假设我们使用Scrum + 极限编程(XP)= 敏捷这条基本公式,那么在我讲敏捷工程实践时就会谈到公式中与XP相关的那一部分,比如测试驱动开发.结对编程和持续集成.) James Shore在一篇精辟的博客中说: "与XP(极限编程)相比,Scrum更加简单,对

jQuery中的编程范式详解_jquery

本文详细分析了jQuery中的编程范式.分享给大家供大家参考.具体如下: 浏览器前端编程的面貌自2005年以来已经发生了深刻的变化,这并不简单的意味着出现了大量功能丰富的基础库,使得我们可以更加方便的编写业务代码,更重要的是我们看待前端技术的观念发生了重大转变,明确意识到了如何以前端特有的方式释放程序员的生产力.这里将结合jQuery源码的实现原理,对javascript中涌现出的编程范式和常用技巧作一简单介绍.   1. AJAX: 状态驻留,异步更新 首先来看一点历史. A. 1995年Ne

在 Swift 3 上对视图控件实践面向协议编程

本文讲的是在 Swift 3 上对视图控件实践面向协议编程, 学习如何对 button, label, imageView 创建动画而不制造一串乱七八糟的类 你可能听人说过,学到了知识却缺失了行动就好比人长了牙却还老盯着奶喝一样.那好,我们要怎样开始在我的应用中实践面向协议编程? 为了能更加高效的理解下面的内容,我希望读者能够明白 Complection Handlers,并且能创建协议的基本实现.如果你还不熟悉他们,可以先查看下面的文章和视频再回来接着看: 前景提要: Intro to Pro

《交互式程序设计 第2版》一1.2 交互领域中的编程

1.2 交互领域中的编程 这本书之所以名为<交互式程序设计>,是因为我们主要关注交互设计中要用到的编程知识,也就是用编程的手段,去创造用户能直接与之交互的应用.编程有很多种,其中有些技术和思维方法更适合用于服务器和数据库,而不是交互.而本书集中讨论的东西将是你用来建立用户和应用之间沟通的知识和技能.交互设计中的一大挑战是如何在你设计的作品和用户之间建立真正的交互. 1.2.1 交互的本质 那么,"交互"到底是什么呢?我们可以把它定义为双方或多方之间的信息交换.作家及电子游戏

学习SEO就是学会在实践中总结和创新

很多人都会说,学习SEO很容易的,随便在哪个学习网站上就有大把的SEO学习教材,但是事实情况却是,这些教材绝大部分是一些过时经验或者非常基础的优化方法,可以这么说:95%的SEO学习教材和知识都可以在网上找到,但是真正能把SEO做好的确往往在那5%之中,那这5%是怎么来的呢,就是要靠你不断的积累和创新,下面我们就看看需要掌握哪些方面的知识. 1. 至少需要看懂网页代码(HTML JS CSS等) 我们都知道搜索收录网页中的信息是通过蜘蛛爬行网页源代码来获取的,我们就需要懂得如何去看源代码以及如何

浅谈.NET下的多线程和并行计算(八)Winform中多线程编程基础 上

首先我们创建一个Winform的应用程序,在上面添加一个多行文本框和一个按钮控件,按钮的事件如下 : Thread.Sleep(1000); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 10000; i++) sb.Append("test"); string s = sb.ToString(); textBox1.Text = s; 首先我们可以把这个操作理解为一个非常耗时的操作,它至少占用1秒的时间.

博客专题计划:《在实践中深入理解常见网络协议》

为什么要写这个系列的技术博文:         距离学习CCIE的课程已经有近一年的时间,虽然这一年来已经丢下了挺多关于路由交换技术的知识,不过随着这一年时间以来通过对Linux和Python的学习研究和学校相关课程的学习,对于TCP/IP的理解是越来越清晰,至少可以慢慢形成自己的想法,于是想借此机会,整理一下过去的思绪,撰写<在实践中深入理解常见网络协议>的博客专题.         写博客已有近一年的时间,慢慢地也形成了自己写博文的一种风格,有一大部分也获得了许多网友的肯定,包括51cto

阿里内贸团队敏捷实践(三)结对编程

原文发表于<程序员>杂志2012年2月刊 本文主要从提升项目质量.促进知识传递及减少项目风险等角度出发,讲述作者所在团队在结对编程实践中的一些经历,以及如何避免或减少其所带来的负面影响. 你了解结对编程吗?你尝试过结对编程实践吗?也许你还未曾尝试甚至还不曾了解,那么我们一起来学习和了解敏捷结对编程实践,相信对敏捷感兴趣的你会有收获. 什么是结对编程 结对编程(Pair Programming)是一种敏捷软件开发实践,指两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘和鼠标一起工作

O2O实践中可能需要克服的8个困难

摘要: 尽管关于O2O的畅想十分丰富,但O2O提倡的线上线下一体最终还是是需要落地的.在这个过程中,传统品牌商家需要遇到哪些问题?又如何推进这些问题的解决?日日顺官方旗舰店的负责人 尽管关于O2O的畅想十分丰富,但O2O提倡的线上线下一体最终还是是需要落地的.在这个过程中,传统品牌商家需要遇到哪些问题?又如何推进这些问题的解决?日日顺官方旗舰店的负责人张子宽给到了日日顺在这方面的经验. 从预算来说,日日顺官方旗舰店它的模式就是定位为全网,大家电的O2O的第一店.因为所有的包括O2O的话,现在基本