编程基础知识分享——编程开始之前

http://www.cnblogs.com/wiki-royzhang/p/4284383.html

 对我来说,编程这件事与其说是工作,不如说是兴趣。尽管和自己理想中的编程比,自己的所谓编程只不过是小打小闹,但是现在又有多少所谓的IT从业者是做真正的编程?产业化的今天,其实真的没有必要区分所谓的程序员和码农,每个人的路线和生活都不相同,也不可能相同,有人学编程只是为了一份工作,有人纯粹为了爱好。我的理解,无论出发点如何,只要尊重自己的选择,能够有所收获就够了。

  这系列文章,是自己当初学习编程的一些方法和经验,整理了一下,可以分成几块记录。对于专业的程序员,我的经验并不适合,一些计算机专业出身的朋友,也不太适合。个人认为,我的这些经验更适合对编程感兴趣和转行的同学,当然更多的是入门的东西,不必太严肃,也不会太枯燥,当初自己学习编程像听故事一下,也希望这里的经验分享也能当故事一样。

  这里的分享主要是计算机基础和编程基础为主,着重编程思维和编程的学习方法,核心的目标有三个:学习编程思想,学习解决问题的思路,学习乐观的态度。

  简单的介绍一下自己,性别:男,年龄:29,学历:本科(数学专业),比较感兴趣的方向是数据库、算法、大数据、统计、浏览器技术,自动化框架设计等,之前从事过医疗软件测试、office开发、windows客户端(浏览器、输入法等)测试,现在大部分时间在做云产品和基础安全产品(ddos)的测试,主要语言是C系列, python, java,matlab

 

  第一篇作为预备起,包含两部分内容,一部分是对编程基础的整体介绍,另一部分是编程的预备知识

 

编程入门的目的

狭义来讲,我认为编程入门的目的有下面四个:

  1. 编写程序解决实际问题
  2. 看懂别人的代码和思维方式
  3. 培养编程的兴趣
  4. 学会如何学习

广义上的目的有如下三个:

  1. 培养计算机思维
  2. 了解计算机的功能范围和它的局限
  3. 学会将实际问题转化为计算机模型

 

编程入门知识包含的内容

入门的知识如何界定是一个模糊的概念,一些常用的需要掌握的内容如下:

  1. 数据类型、变量、运算、语句和结构
  2. 函数编程和面向对象编程
  3. 高级数据类型
  4. 常用算法
  5. 异常、调试、故障定位和优化
  6. 基本的仿真和模拟
  7. 常用编程思想和模式设计

 

学习方法

考虑我个人的学习方法(我接触编程较晚,大学毕业后才学习),我推荐的一些方法如下:

  1. 抛弃老师或者书上的笔记,以自己记录的笔记为主
  2. 主动思考为主,遇到问题不要问别人答案,如果要就要提示
  3. 多看看面试题和开源的东西
  4. 简单的语言着手,但是需要对比的学习其他语言
  5. 学习不限制形式,轻松一点最好,但是要求要严格
  6. 切忌自欺欺人
  7. 学会分享

 

下面是一些储备知识,这些知识在网上都可以轻松的检索到,可以多参考一些资料:

  1. 冯诺依曼体系硬件模型

  建议学习编程的人在写helloworld之前,先了解计算机是怎么工作的,至少当你运行代码的时候,要知道程序并不是屏幕上的几行代码,至少需要一段可以运行的程序、专属的堆栈空间、有内核控制块、有独立的存储空间(内存)。

请参考维基百科以及涉及到的主要资料: http://zh.wikipedia.org/wiki/%E5%86%AF%C2%B7%E8%AF%BA%E4%BC%8A%E6%9B%BC%E7%BB%93%E6%9E%84

  1. 计算机启动过程

比如linux加电自检后的启动过程:

参考 http://roclinux.cn/?p=1301 http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html

 

  1. 编译过程

百度百科的资料可以参考 http://baike.baidu.com/link?url=v2YMwgziW6Z81dl_d0lUML8T9xL-rXWYWV4fVYJo6QAZLQYfemh3cNhCmtddMjM35gMlbx3LfiDUAT6X0PT4vq ,不需要严格的去学习编译原理,但是也不能仅仅限制于百科上的东东

  1. 内存进程模型

建议每一个学习编程的人,都要了解内存进程模型,这部分的东西可以参考经典的《深入了解计算机系统》第一章相关部门

 

  1. 程序执行过程

  可以参考 http://beyondjhf-2008.iteye.com/blog/394316 http://blog.sina.com.cn/s/blog_4cb133e501000au3.html

  1. 问题的抽象方法

  大部分遇到的问题,都可以抽象为两种最小粒度描述,描述结论的和描述过程的,即陈述型和推导型:

  陈述型:描述为主,一般有绝对的结果性,这种方法更多的时候是在说明一件实事和结果,比如加减计算;

  推导型:推导为主,一般只有相对和较优的结果(有时无结果),这种方法更多的是诠释一个过程,比如开平方和线性逼近;

  1. 编程语言类型

  分类的方法太多了,常用的分类如下:

  High vs. low

  General vs. targeted

  Interpreted vs. compiled

  对比编程语言的时候,另一个需要了解的东西是图灵兼容

  图灵兼容:

    只要有适用的基本指令集,好的程序员能编出任何程序。1936年,图灵认为只要六条简单的基本指令,一切都可以通过机械工艺解决。随之产生了一些有趣的推论。其中有条是,只要能在一种编程语言中实现,就能在另一种语言中实现。C中能实现的没有Fortran不能实现的。

  1. 语意和语法

  编程语言和人类语言一样也是沟通的一种方法,了解基本的语意语法,有助于快速的学习编程语言——从这点讲,疯狂英语的学习方法在编程语言的学习上并不适用。

  简单来说:

    语法错误可以认为程序本身是“错”的,即说的不是“人话”,比如“猫狗是”这样的表达,程序角度来讲,这样的错误编译是通不过的,大多数ide都会有这方面的处理;

    语意错误更多认为程序内容是错的,而程序本身没问题,即说的是“人话”,句子是对的,但是想表达的意思是不对的,比如“猫是狗”,这样的问题只能在代码执行的时候才能表现出来;

 

编程之前的储备知识就这么多了,下一篇是变量、结构、语句和类型的一些学习经验分享。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值