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

  对我来说,编程这件事与其说是工作,不如说是兴趣。尽管和自己理想中的编程比,自己的所谓编程只不过是小打小闹,但是现在又有多少所谓的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=1301http://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/394316http://blog.sina.com.cn/s/blog_4cb133e501000au3.html

  1. 问题的抽象方法

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

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

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

  1. 编程语言类型

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

  High vs. low

  General vs. targeted

  Interpreted vs. compiled

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

  图灵兼容:

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

  1. 语意和语法

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

  简单来说:

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

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

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

时间: 2024-10-13 06:00:19

编程基础知识分享——编程开始之前的相关文章

计算机基础知识对编程的重要性

码农和架构师的差别在哪里 从题目看文章,大家的第一想法是本篇文章是一篇讲述计算机基础知识和编程之间的关系,但是为什么开篇是这样的呢?当然这样的开篇并没有多大的意义,唯一的目的就是吸引读者而已. 纵观计算机专业的学生在毕业之后大多数会走向编写程序的道路,当然也会有部分同学有自己更感兴趣的事情,从而在毕业之后选择其他的职业.在这里根据我个人在毕业之后的编写程序的道路,写下一点总结,希望能和大家交流,有什么不对的地方,希望大家能给我指正,因为我个人觉得"三人行必有我师"是一句很有道理的话,每

多线程编程基础知识

多线程编程基础知识 http://www.cnblogs.com/cy163/archive/2006/11/02/547428.html 当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力.用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义.现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的.因此掌握

C#——编程基础知识

编程基础知识适用于所有高级编程语言.学了C#的第一小节,又对这些基础知识梳理了一遍.感觉比学习VB的时候的理解好了很多.下面看图: 基础知识:数据类型,表达式,流程控制语句.一切皆在图中. 一直在做编织知识网的工作.自己真的是不撞南墙不回头啊.米老师早就说过:要记笔记,要少记笔记,多了没用,又不会回头看.可是自己看的时候完全相反了.依旧几乎全部是截图,总结的时候特别费劲儿.得浏览所有截图,然后在几乎与视频等量的信息里再找主题,找中心.可是苦不堪言啊.现在终于下定决心,不再截图了.虽然总是有那股冲

unix环境高级编程基础知识之第一篇

陆陆续续看完了圣经第一章,熟悉了unix的整个编程流程,c语言的用处在这里得到伸张. 从unix的体系结构,原来操作系统包括内核及一些其他软件,我们常常误称为linux内核为操作系统,这俨然成为一种共识.基本熟悉了shell的介绍,主流的是bash(Bourne-again shell),unix的文件的基本操作,出错处理,用户ID,信号(感觉类似windows的消息),时间值,最后还有系统调用和库函数的区别. 自己把这篇的所有代码用vim的敲完了,主要前期是熟悉unix的基本命令编程,大致了解

编程基础知识——C++能不能支持Java和ObjC的反射?

C++能不能支持Java和ObjC的反射? 要回答这个问题,首先我们要清楚什么是反射.什么是反射? 教科书的解释我就不说了,(^o^)其实我也记不得.实际开发应用的反射就是在没有某个类型的头文件或者类结构定义的情况下,存取这个类型的对象的成员字段的值,调用这个对象的成员函数(方法). 比如我有定义了一个类型 Class  A,里面有 a,b,c三个字段,有fun()函数.现在我手里只有一个 void* pA,注意它的类型只是一个void指针,我手里也没有Class的头文件,我要怎么样得到,a,b

编程基础知识——Java JNI开发流程(2)

android中使用jni调用本地C++库 android平台上的本地库文件后缀 .so.类似windows上的dll文件. 要在android上使用jni,首先需要下载android ndk. 操作步骤,正常建立android工程,然后在android工程那里右键,属性,选择Android Tools -> Add Native Support.就可以为android工程增加本地库支持. 添加支持后的android工程,会增加jni目录,C++代码就写在这个目录里. 新建一个类,并且使用nat

编程基础知识——java类加载

java类加载 先来看一段小程序: package com; public class Main1 { static { System.out.println("1111") ; } public static void main(String[] args) { System.out.println("2222") ; } } 输出结果为: 1111 2222 其中static的执行时机就是class被 classloader加载的时候执行. 这有什么用?看下面代

PB编程基础知识汇总

PB编程基础知识汇总 第一章      1.  程序的开始,application的open事件. 退出程序例程:halt为退出函数 int SureQuit SureQuit = 2 SureQuit=Messagebox("退出系统","退出前请确认已保存好数据",Question!,OKCancel!, 2) if SureQuit = 1 then halt 2.  变量定义有效范围: ◎     declare-globe 全局变量,整个程序均有效 ◎  

c#编程基础知识

一.静态与动态 html属于静态,没有数据库 asp.net属于动态,将数据库中不断变化的数据显示在浏览器 二..NET的发展历程 96年以前都是以dos为核心的运行系统 年份         框架版本(.NET Frame work)        开发工具版本号(visual studio) 2002           1.0                                   vs2002 2003           1.1