请问初学者学习编程应该怎么办?

请问初学者学习编程应该怎么办?,第1张

选择一门语言

确定你感兴趣的领域

你可以开始学习任何编程语言(尽管其中一些被描述地比其他的更加“易学”),你得去问自己自己想用通过学习这门语言完成什么样的工作。这将会帮助你确定你应该追求的编程方式并且提供一个良好的开始。

如果你想进入Web开发行业,那你将会有一堆语言需要去学习,这和开发计算机程序相反。移动App的开发需要比PC等的开发更多的技巧。所有的这些决定将会影响着你的发展方向。

考虑从一个“易学”的语言开始

无论你做了什么样的决定,你可能只会希望从一门高水准又易学的语言开始。这些语言对于初学者非常有用,因为它们教授基本的概念和适用于几乎任何语言的思维过程。

在这种语言中最流行的两种是Python和Ruby。它们都是使用着易读的句法的面向对象的Web应用开发语言。

“面向对象”因为着这个语言是围绕着“对象”、数据收集和 *** 作的概念来打造的。这一概念被用在许多先进的编程语言上,比如C++、Java、Objective-C和PHP。

通读大量语言的基本教程

如果你还不确定你应该开始学习哪一门语言,那么就去阅读一些不同语言的基本教程吧。如果一门语言比别的更有意思,那就多去看看是不是真的那样。在网上对于所有的编程语言有无数个基本教程。

Python——一个非常适合初学者的语言 ,而且当你掌握它的时候它会变得更加强大。被用来开发了许多Web应用、甚至一些游戏。

Java——被无数个项目所使用,从游戏到Web应用再到ATM软件。

HTML——对于任何Web开发者必不可少的起航点。在从事其他一系列Web开发之前掌握好HTML非常重要。

C——最古老的语言之一,它已经是非常强大的工具,也是一些更现代的语言的祖先,比如C++,C#和Objective-C。

从简单的开始学起

学习语言的核心概念

虽然这一步中适合的部分将取决于你所选择的语言,但所有编程语言都有对建立有用的程序至关重要的基本概念。尽快的学习和掌握这些概念,将会使你更容易地解决问题和创建强大而有效的代码。下面只是一些在不同语言中的核心概念:

变量——一个变量就是一个去存储和应用以改变代码片的方式。变量可以被 *** 作,并且经常被定义成“整数”、“字符”,还有其他的确定可以存储的数据类型。进行编码时,变量通常具有让它们对于我们有种某种含义的名称。这样一来我们就容易理解该变量如何与其余的代码进行交互了。

条件语句——条件语句是基于条件是否为真的一种行为。对于一个条件语句最常见的形式是“如果-那么”。如果这个条件为真,那么就有一件事发生,如果条件为假,那么就会发生另一件事情。

函数或子例程——这个概念的实际名称可能取决于不同的语言。它也可能被叫做“过程”、“方法”或是“可返回单元”。它本质上是一个大程序中的一个小程序。一个函数可以被别的程序“调用”多次,运行程序员去有效的创建复杂的程序。

数据输入——这是在几乎所有语言中都使用的一个宽泛的概念。它涉及到处理用户的输入以及存储这些数据。这些数据怎样收集则取决于程序的类型以及对于用户的可用的输入方式。它和关于显示在屏幕上还是打印在文件上的输出有着精密联系。

安装一些有必要的软件

许多的编程语言都要求有被程序员设计来讲代码转换成机器能理解的语言的编译器。其他一些语言,比如Python,使用可以立即转换成程序而不需要编译。

一些语言有自己的往往包含着代码编辑器、调试器和/或者翻译以及调试的IDEs(集成开发环境)。这些程序员在同一个地方去执行任何必要的功能。IDEs可能还包含着包含对象层次结构和目录的可视化界面。

在网上有许多的代码编辑器可以用。这些程序都提供不同方式的语法高亮和提供其他开发人员友好的工具。(译者推荐用Emacs)

创建你的第一个程序

每次只专注于一个概念

几乎学习任何语言时被教的第一个程序就是“Hello World”。这是一个仅仅在屏幕上显示“Hello,World”的简单程序。这个程序教会初学者一些简单的语法来创建一个可以运作的基本程序,以及如何处理显示输出。通过改变文本,你还可以学习到这些基本数据是怎样被程序处理的。

通过在线示例的片段来学习

在网上几乎每个编程语言都有数以千记得在线代码示例。用这些例子来学习不同部分如何与语言协同工作,以及各个部分之前的差别。用这些在不断示例中取得的碎片来创建你自己的程序。

检查语法

语法就是一门语言被写得让编译器或解释权能够理解的方法。每种语言都有自己独特的语法,虽然有些元素可能在不同的语言中共享。学习语法对于学习怎样编程是非常重要的。在现实中,它只是更高级的概念赖以建立的基础。

试验性的更改

对你的示例程序做些修改,然后测试结果。通过试验你可以学到什么有用、什么没用,这比多阅读一本书或指南在任何时候都要快得多。不要害怕破坏了你的程序,学习去修复错误是任何开发过程中最重要的一步,并且新的事物永远不可能在第一次就正确运行。

开始练习调试

当你在编程时,你总会碰到bug。它们存在程序中,并且可能随时随地的出现在程序中的任何一个地方。漏洞可能会破坏程序,或者只是让程序不能编译/运行。捕捉和修复这些错误在软件开发周期中这是一个主要的过程,所以要早早地习惯于这么做。

当你快要修改程序时,你可能会碰到它们不能运作的情况。想办法弄清楚,并且采取不同的方式来解决,这将会成为你作为一个程序员最宝贵的技能之一。

给所有代码添加注释

几乎所有编程语言都有一个允许你包含未被解释器或编译器处理的文本的“注释”功能。也就允许了你可以留下短小但清晰的关于这段代码是用来做什么的人类语言的解释。这将不仅仅帮助你记住你的代码在这个大型程序是做什么的,在协作环境中因为它允许其他人也能够明白你的代码是做什么的,所以也是非常重要的做法。

不断练习

每天都要敲代码

花大量的时间对于掌握一门语言是最重要的。即便是像Python这样的简单语言,它可能也要画上一两天去了解它的基本语法,花大量的时间才能真正精通。想任何其他的技巧一样,练习是变得更加娴熟的关键。尽量每天都要花一些时间去敲代码,即便是在工作之后和晚餐之前的一小时。

给你的程序设定目标

通过设定能够实现但又有挑战性的目标,你将能够开始解决问题并拿解决方案。尝试着去设想去一个基本的应用程序,比如一个计算器,然后想办法去做出来。使用你一直学习的语法和概念,然后将它们应用到实际中。

和别人交流并且阅读他人的程序

有很多编程社区致力于特定的语言或学科。找到并参与到这些社区会为你的学习创造奇迹。你将会获得能够帮助你的学习过程的各式各样的示例代码和工具。通过阅读他人的程序代码不仅可以激励你,还可以帮助你回忆那些还没有掌握的概念。

为你所选择的编程语言找到论坛或在线社区。确保自己是真正参与进去而不是不断地问问题。这些社区往往看着做协作和讨论的地方,而不仅仅是简单的提问-回答问题。请随时寻求帮助,但要准备好你的程序以及尝试用不同的途径。

一旦你已经有了一些经验,可以参加一些编程的活动。这些活动是个人或团队争分夺秒的开发功能的程序,通常会围绕一个特定的主题。这些事情都很好玩并且是一个认识其他程序员的很好的方式。

挑战自己并保持乐趣

去尝试着做一些你现在还不知道怎么做的事情。研究该怎样完成这个任务的方式,并且不断的将它们添加到你的程序中。一定要尽量避免勉强能运行的程序,你应该让各个方面都很完美。

分享你的知识

参加一些培训课程

许多的大学、社区学院、社区中心都提供了你可以参加的编程课程和工作室,而无需在学校注册。这里对于新手程序员是很有裨益的,因为你可以从其他有经验的程序员那里得到帮助,或者你也可以通过网络和其他地方的程序员一起交流。

买或者借一本书

有成千上万种你所能想象出的所有语言的教学书籍。虽然你的知识不应该全然来自一本书,但它们会给你提供许多的参考,而且往往内含了大量友好的示例。

学习数学和逻辑

大多编程都涉及了基本的算术运算,但可能你想要学习更先进的概念。如果你想写出复杂的模拟或者算法级别程序,这将是非常重要的。对于大多数日常编程而言,你并不需要太多先进的数学知识。但学习逻辑,尤其是计算机逻辑,将能帮助你理解处理更先进程序的复杂问题的最好方式。

永远不要停止编程

有一个流行的理论,成为一名专家至少需要10000小时的练习。虽然这个理论还处于辩论中,但它内含的原则永远是正确的:精通需要时间和奉献精神。不要指望一夜之间你就能学会一切,但如果你保持专注,并且不断的学习,很快你就会成为你的领域里的专家。

学习另一种编程语言

虽然你可以仅仅精通一门语言,但许多的程序员通过学习多种语言来提高在其领域内成功的机会。它们的第二或者第三个语言往往和第一个语言相辅相成,这就能帮助他们去写出更加复杂和有趣的程序。一旦你掌握了你的第一个语言,你就有时间来学习第二个语言。

你可能会发现第二个语言会学的比第一个更快。那是因为许多的核心概念对于多种语言都是相通的,尤其是如果这两个语言本身就是密切相关的。

[转载]C程序代码风格

原始连接:http://www.ecnweb.net/modules.php?name=Forums&file=viewforum&f=4

下面这篇文章是linux内核中Documentation/CodingStyle文件,觉得挺有意思,就顺手把它译出来了,因为虽然这只是“linux”的代码风格,但优秀的C程序风格大致无二。特别是emacs相关的东西,肯定有误译,请多指正

代码:

Linux内核编码风格

这篇简短的文章描述了Linux内核首选的编码风格。编码风格是很个人化的东西,我不会把自己的观点强加给任何人。但是,Linux内核的代码毕竟是我必须有能力维护的,因此我宁愿它的编码风格是我喜欢的。请至少考虑一下这一点。

首先,我建议打印一份《GNU编码标准》,不要阅读它。烧掉它,它不过是象征性的姿态。

然后,请看:

第 1 章: 缩进

Tabs(制表符)是8个字符的大小,因此缩进也应该是8个字符的大小。有些叛逆主张试图把缩进变成4个(甚至是2个!)字符的长度,这就好象试图把PI(案,圆周率)定义成3是一样的。

依据:缩进背后的思想是:清楚地定义一个控制块从哪里开始,到哪里结束。尤其是在你连续不断的盯了20个小时的屏幕后,如果你有大尺寸的缩进。你将更容易发现缩进的好处。

现在,有些人说8个字符大小的缩进导致代码太偏右了,并且在一个80字符宽的终端屏幕上看着很不舒服。对这个问题的回答是:如果你有超过3个级别的缩进,你就有点犯糊涂了,应当修改你的程序。

简而言之,8个字符的缩进使程序更易读,而且当你把功能隐藏的太深时,多层次的缩进还会对此很直观的给出警告。要留心这种警告信息。

第 2 章: 放置花括号

C程序中另一个要主意的就是花括号的放置。与缩进尺寸不同的是,关于如何放置花括号没有技术上的理由。但是,首选的方法是象先知Brain Kernighan和Dennis Ritchie展现的那样:把左括号放在行尾,右括号放在行首。也就是:

if (x is true) {

we do y

}

然而,还有另外一种情况,就是函数:函数应当把左右括号都放在行首。也就是:

int function(int x)

{

body of function

}

叛逆的人们所在皆有。他们说,这样会导致…嗯,不一致性(案,指函数的花括号使用与其他情况不统一)。但是所有正确思考的人都知道:(1) K&R是正确的;(2) K&R还是正确的。 而且,函数与别任何东西都不一样(在C语言中你没法隐藏它)。

注意,右括号所在的行不应当有其它东西,除非跟随着一个条件判断。也就是do-while语句中的“while”和if-else语句中的“else”。象这样:

do {

body of do-loop

} while (condition)

和:

if (x == y) {

..

} else if (x >y) {

...

} else {

....

}

依据: K&R。

而且,注意这种花括号的放置减少了空行的数目,并没损害可读性。因此,当屏幕上不可以有很多空行时(试想25行的终端屏幕),你就有更多的空行来安插注释。

第 3 章: 命名

C是一门朴素的语言,你使用的命名也应该这样。与Modula-2和Pascal程序员不同,C程序员不使用诸如 “ThisVariableIsATemporaryCounter”这样“聪明”的名字。C程序员应该叫它“tmp”,这写起来更简单,也不会更难懂。

然而,当面对复杂情况时就有些棘手,给全局变量取一个描述性的名字是必要的。把一个全局函数叫做“foo”是一种目光短浅的行为。

全局变量(只当你确实需要时才用)应该有描述性的名字,全局函数也一样。如果你有一个统计当前用户个数的函数,应当把它命名为“count_active_user()”或者简单点些的类似名称,不应该命名为“cntusr()”。

把函数类型写进函数名(即所谓的“匈牙利命名法”)简直就是大脑有问题——编译器总是知道函数的类型并且能加以检查,这种命名法只会弄糊涂程序员自己。怪不得微软总是制造充满bug的程序。

局部变量的名字应该尽量短,而且说到点子上。如果你有个普通的整型循环计数变量,应当命名为“i”。命名为“loop_counter”并不能带来任何成效,如果它不被误解的话(案,这里的言外之意是说,如果被误解就更惨了)。与此类似,“tmp”可以作为一个用来存储任何类型临时值的变量的名字。

如果你害怕弄混淆局部变量(s)的名字,你就面临着另一个问题,也叫作“函数增长荷尔蒙失调综合症”。请参考下一章。

第 4 章: 函数

函数应当短而精美,而且只做一件事。它们应当占满1或2个屏幕(就象我们知道的那样,ISO/ANSI的屏幕大小是80X24),只做一件事并且把它做好。

一个函数的最大长度与它的复杂度和缩进级别成反比。所以,如果如果你有一个概念上简单(案,“简单”是simple而不是easy)的函数,它恰恰包含着一个很长的case语句,这样你不得不为不同的情况准备不懂的处理,那么这样的长函数是没问题的。

然而,如果你有一个复杂的函数,你猜想一个并非天才的高一学生可能看不懂得这个函数,你就应当努力把它减缩得更接近前面提到的最大函数长度限制。可以使用一些辅助函数,给它们取描述性的名字(如果你认为这些辅助函数的调用是性能关键的,可以让编译器把它们内联进来,这比在单个函数内完成所有的事情通常要好些)。

对函数还存在另一个测量标准:局部变量的数目。这不该超过5到10个,否则你可能会弄错。应当重新考虑这个函数,把它分解成小片。人类的大脑一般能同时记住7个不同的东西,超过这个数目就会犯糊涂。或许你认为自己很聪明,那么请你理解一下从现在开始的2周时间你都做什么了。

第 5 章:注释

注释是有用的,但过量的注释则是有害的。不要试图在注释中解释你的代码是如何工作的:把代码是如何工作的视为一件显然的事情会更好些,而且,给糟糕的代码作注释则是在浪费时间。

通常,你愿意自己的注释说出代码是做什么的,而不是如何做。还有,尽量避免在函数体内作注释:如果函数很复杂,你很可能需要分开来注释,回头到第4章去看看吧。你可以给一段代码——漂亮的或丑陋的——作注释以引起注意或警告,但是不要过量。取而代之,应当把注释放在函数首部,告诉人们该函数作什么,而不是为什么这样做。

第 6 章:你把事情弄乱了

好吧,我们来看看。很可能有长期使用UNIX的人告诉过你,“GNU emacs”能自动为你格式化C程序源代码,你注意到这是真的,它确实能做到,但是缺省情况下它的用处远远小于期望值——键入无数的monkeys到GNU emacs中绝不可能造出好的程序。

因此,你可以或者删除GNU emacs,或者对它进行理智的配置。对于后者,可以把下面的行粘贴到你的.emacs文件中:

(defun linux-c-mode ()

"C mode with adjusted defaults for use with the Linux kernel."

(interactive)

(c-mode)

(c-set-style "K&R")

(setq c-basic-offset Cool)

这将会定义一个把C代码弄成linux风格的命令。当hacking一个模块时,如果你把“-*- linux-c -*-”放到了最初的两行,这个模块将被自动调用。而且,如果你打算每当在/usr/src/linux下编辑源文件时就自动调用它,也许你会把下面的命令:

(setq auto-mode-alist (cons '("/usr/src/linux.*/.*\\.[ch]$" . linux-c-mode)

auto-mode-alist))

添加进你的.emacs文件。

但是,即使你没能让emacs正确做到格式化,也并非将就此一无所有:还有“indent”程序呢。

嗯,再提醒一下,GNU indent跟GNU emacs有同样的毛病,这就需要你给它一些命令行选项。然而,这不是很糟糕的事,因为即使是GNU indent也承认K&R的权威性(GNU的人不是魔鬼,他们只是在这里太过严格了,以致于误导人),所以你可以只需给indent这样的选项: “-kr -i8”(表示“K&R风格,8个字符的缩进”)。

“indent”程序有很多选项,特别是当为重排过的程序作注释的时候,你需要看一下它的手册。记住:“indent”可不是修正糟糕程序的万能钥匙。

第 7 章: 配置文件(configuration-files)

对配置选项来说(arch/xxx/config.in和所有的Config.in文件),使用不同的缩进风格。

若代码中的缩进级别为3,配置选项就应该为2,这样可以暗示出依赖关系。后者只是用于bool/tristate(即二态/三态)的选项。对其它情况用常识就行了。举例来说:

if [ "$CONFIG_EXPERIMENTAL" = "y" ]then

tristate 'Apply nitroglycerine inside the keyboard (DANGEROUS)' CONFIG_BOOM

if [ "$CONFIG_BOOM" != "n" ]then

bool ' Output nice messages when you explode' CONFIG_CHEER

fi

fi

通常CONFIG_EXPERIMENTAL应当在所有不稳定的选项的周围出现。所有已知会破坏数据的选项(如文件系统的实验性的写支持功能)应当被标记为(DANGEROUS),其他实验性的选项应当被标记为(EXPERIMENTAL)。

第 8 章: 数据结构

假如数据结构在其被创建/销毁的线程环境(案:这里说的线程是一个执行实体,可能是进程、内核线程或其它)之外还具有可见性,那么他们都该有引用计数。在内核中没有垃圾收集机制(而且内核之外的垃圾收集也是缓慢而低效的),这意味着你绝对应该为每一次使用进行引用计数。

引用计数意味着你可以避开锁,还能允许多个线程并行访问该数据结构——而且不用担心仅仅因为访问数据结构的线程睡眠了一会儿或者干别的去了,它们就会消失。

注意,锁不是引用计数的替代品。锁是用来保持数据结构的一致性的,而引用计数是一种内存管理技术。通常二者都需要,而且不会彼此混淆。

确实有许多数据结构可以有两个级别的引用计数,当使用者具有不同的“等级”(classes)时就是这样。子等级(subclass)记录了处于该等级的使用者个数,而且当它减到零的时候就把总体计数(global count)减一。

这种“多级引用计数”(multi-reference-counting)的一个实例可以在内存管理子系统("struct mm_struct":mm_users和mm_count)中找到,也可以在文件系统的代码中("struct super_block":s_count和s_active)找到。

记住:如果另一个线程能找到你的数据结构,而你有没对它做引用计数,那几乎可以肯定:这是一个bug。

首先,使用下面这个命令来设置git默认的编辑器,其中的“editor”替换成你自己的编辑器,如Vim、Emacs、gedit、subl等:

git

config

--global

core.editor

"editor

-w"

然后,在做提交的时候使用命令不要写"-m"参数,直接写成git

commit这样子就行,这样就会自动打开你刚才指定的编辑器,你可以在里面添加大段注释。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11444833.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存