学习新语言时,什么是好的技巧或练习?

时间:2008-09-26 12:48:35

标签: language-agnostic

当你学习一门新语言时,有什么特别好的/有效的练习可以帮助你掌握它?为什么?

编辑: 最好找一些比“Hello World”更复杂的东西。

18 个答案:

答案 0 :(得分:10)

我通常会按照提供的顺序执行以下操作:

  1. 打印用户提供的高度金字塔(检查基本I / O,条件和循环)
  2. 使用多态等编写类层次结构...(检查OO概念)
  3. 将小数转换为罗马数字(检查枚举和基本数据结构)
  4. 编写链表实现(检查内存分配/释放)
  5. 编写JUnit和JMock的克隆(检查refelction / metaprogramming)
  6. 编写基于控制台的聊天系统(检查基本网络)
  7. 修改(6)以通过多播支持群组聊天(检查高级网络)
  8. 为(7)(检查GUI库)
  9. 编写GUI

    之后它进入一个真实的项目...

答案 1 :(得分:8)

除了hello world之外,我尝试将其中一个现有程序移植到新的languange。这将挑战我在新语言中学习一些好的旧技术,并帮助我建立一个新的类或帮助程序库..

答案 2 :(得分:6)

拉里·奥布莱恩(Larry O'Brien)有一系列博客,名为'15练习,以了解编程语言'Part 1 Part 2 Part 3

有关详细信息,请参阅Larry的博客。

第1部分。计算

  1. 编写一个程序,将第一个参数作为“sum”,“product”,“mean”或“sqrt”中的一个,并为进一步的参数创建一系列数字。该程序将适当的功能应用于该系列。

  2. 编写一个程序,在一组数字上计算Haar小波。

  3. 编写一个程序,将其作为参数的位图图像的名称。将Haar小波应用于像素值。将结果保存到文件中。

  4. 使用上一个练习文件的输出,编写一个重构原始位图的GUI程序(N.B。:The Haar wavelet是无损的)。

  5. 编写处理位图图像的GUI程序

  6. 第2部分。数据结构

    1. 编写一个类(或模块或者你有什么:请将OOP术语映射到适当的范例),它只存储与放置在其中的第一个对象相同类型的对象,如果是非存在则引发异常 - 兼容类型被添加。

    2. 使用该语言的习语,实现基于树的数据结构(展开,AVL或红黑)。

    3. 创建一个使用自定义比较器的新类型(即覆盖“等于”)。将更多这些对象放入上面创建的数据结构以及标准库中,将更多的对象放入内存中,而不是可以放入内存中。将标准库的性能与您自己的实现进行比较。

    4. 为您的数据结构实现迭代器。考虑多线程问题。

    5. 编写一个多线程应用程序,它使用您的数据结构,可比类型和迭代器来实现类型特定的存储功能,如练习6所述。您如何处理并发插入和遍历?

      < / LI>

      第3部分。图书馆

      1. 编写一个程序,将当前日期和时间输出到网页,作为反转的ISO 8601格式值(即:“2006-06-16T13:15:30Z”变为“Z03:51:31T61-” 60-6002" )。创建一个XML接口(POX或WS- *)。

      2. 编写一个客户端程序,可以抓取上述网页和XML返回,并以不同的格式重新显示日期。

      3. 编写监控电子邮件帐户的守护程序。当强编码的电子邮件到达时,解密到有效的ISO 8601时间,程序会将系统时间设置为该值。

      4. 编写一个连接到您的邮件客户端的程序,对其内容进行统计分析(请参阅垃圾邮件计划)并将结果存储在数据库中。

      5. 使用上一个练习,编写垃圾邮件过滤器,包括在邮件客户端中移动邮件

      6. 如果你能用2种语言做所有这些事情,我肯定谷歌有一份工作

答案 3 :(得分:4)

'你好世界!'

我确实认为这是一个好的起点。它的基本功能只需几秒钟,但您确保您的编译器正在运行并且您已准备好所有内容。一旦完成,你就可以继续前进。添加变量,打印到数据库,打印到文件。确保您知道如何发表评论。这可能需要5分钟的时间。但它的重要内容。

答案 4 :(得分:2)

以某种方式连接数据,无论是数据库,文件还是其他......

答案 5 :(得分:2)

红黑树。

答案 6 :(得分:2)

除非我有一个“真正的”项目来应用它,否则我通常不会很好。即便是成熟的人也会变得无聊。事实上,我发现将自己置于一个更大的项目中并对已经有效的事情进行微小的改动是有帮助的。

YMMV

答案 7 :(得分:2)

我相当于一个问候世界是做以下事情:

  1. 检索多个输入(即命令行中的parms,gui上的文本框)
  2. 操纵输入(即对数字进行数学运算和操作文本)
  3. 在gui上使用列表框。
  4. 读取和写入文件。
  5. 我觉得在完成上述操作之后,我对语言和IDE的良好介绍以及使用它运行的语言和环境有多容易(或者真的有多困难)感觉良好。

    之后如果我想更进一步,我将在我需要做的实际项目中使用该语言(可能是某种实用程序)。

答案 8 :(得分:1)

就个人而言,我喜欢制作一个简单的echo服务器和客户端来使用该语言进行网络编程。

答案 9 :(得分:1)

我喜欢通过“真正的”任务(“个人”使用)来学习一门新语言

我的第一个java程序是一个在线多人游戏的客户端(然后我发布到公共领域)

我的第一个vb.net程序是我的数字视频录像机的前端

我的第一个VHDL“程序”是64x32 led阵列控制器

答案 10 :(得分:1)

Ray tracer。

答案 11 :(得分:0)

我经常会实施k-means clustering algorithm.

答案 12 :(得分:0)

拖放图片库。

当我在Win32和MFC上切割牙齿时,这是我的第一个项目之一。很快我将所有代码移植到ActiveX控件中。然后我用Java重写了这个东西。对于踢,我在纯Javascript中再次重写它。当我进入.Net时,我在C#中再次重写了这个东西。最后但同样重要的是,我将它用作学习Objective-C和UIKit的练习。

为什么呢?一件事,它是一个视觉上吸引人的玩具。我认为,从代码中获得即时满足感是件好事,使用图像是我能想到的最令人满意的事情之一。

答案 13 :(得分:0)

基于控制台的俄罗斯方块

答案 14 :(得分:0)

我喜欢学习编程的游戏,因为业务规则是经过精心描述的。我用新语写的前三个程序是Ro-Sham-Bo,Blackjack和Video Poker。

答案 15 :(得分:0)

选择您已了解的任务。这样你就可以限制你需要吸收的“新东西”。

答案 16 :(得分:0)

我认为,对我来说,通过移植现有代码(例如,从其他平台)学习总是一个挑战和乐趣。只是简单的演示,桌面游戏等。

答案 17 :(得分:0)

Mandelbrot设定。