Điều thú vị nhất bạn có thể làm trong <10 dòng mã đơn giản là gì? Giúp tôi truyền cảm hứng cho người mới bắt đầu! [đóng cửa]


406

Tôi đang tìm kiếm điều thú vị nhất bạn có thể làm trong một vài dòng mã đơn giản. Tôi chắc rằng bạn có thể viết một bộ Mandelbrot trong Haskell thành 15 dòng nhưng rất khó để theo dõi.

Mục tiêu của tôi là truyền cảm hứng cho sinh viên rằng lập trình là tuyệt vời .

Chúng tôi biết rằng lập trình rất tuyệt vì bạn có thể tạo ra bất cứ điều gì bạn tưởng tượng - đó là lối thoát sáng tạo cuối cùng. Tôi muốn truyền cảm hứng cho những người mới bắt đầu này và giúp họ vượt qua càng nhiều lần học càng sớm càng tốt.

Bây giờ, lý do của tôi là ích kỷ. Tôi đang dạy một khóa giới thiệu về máy tính cho một nhóm gồm 60 chuyên ngành nửa kỹ thuật, nửa kinh doanh; tất cả sinh viên năm nhất. Họ là những học sinh đến từ các trường trung học kém. Từ kinh nghiệm quá khứ của tôi, nhóm thường được chia như sau: một vài đá sao , một số người cố gắng rất chăm chỉ và loại có được nó, vài người cố gắng rất nhiều và hầu như không nhận được nó, và số ít người không quan tâm. Tôi muốn tiếp cận càng nhiều nhóm này càng hiệu quả càng tốt. Đây là một ví dụ về cách tôi sử dụng một chương trình máy tính để dạy:

Đây là một ví dụ về những gì tôi đang tìm kiếm: tập lệnh VBS 1 dòng để máy tính của bạn nói chuyện với bạn:

CreateObject("sapi.spvoice").Speak InputBox("Enter your text","Talk it")

Tôi có thể sử dụng điều này để chứng minh thứ tự hoạt động. Tôi sẽ hiển thị mã, cho họ chơi với nó, sau đó giải thích rằng có rất nhiều điều đang diễn ra trong dòng đó, nhưng máy tính có thể hiểu ý nghĩa của nó, bởi vì nó biết các quy tắc. Sau đó, tôi sẽ cho họ thấy một cái gì đó như thế này:

4(5*5) / 10 + 9(.25 + .75)

Và bạn có thể thấy rằng đầu tiên tôi cần làm là (5 * 5). Sau đó, tôi có thể nhân lên cho 4. Và bây giờ tôi đã tạo Đối tượng. Chia cho 10 cũng giống như gọi Nói - Tôi không thể nói trước khi có đối tượng và tôi không thể chia trước khi tôi có 100. Sau đó, trước tiên tôi tạo một InputBox với một số hướng dẫn về cách hiển thị . Khi tôi nhấn enter trên hộp nhập, nó sẽ đánh giá hoặc "trả về" bất cứ thứ gì tôi đã nhập. (Gợi ý: 'oooooo' tạo ra âm thanh vui nhộn) Vì vậy, khi tôi nói Nói, phía bên phải là những gì cần nói. Và tôi nhận được điều đó từ InputBox.

Vì vậy, khi bạn làm một số điều trên một dòng, như:

x = 14 + y;

Bạn cần phải nhận thức được thứ tự của mọi thứ. Đầu tiên chúng ta thêm 14 và y. Sau đó, chúng tôi đặt kết quả (những gì nó ước tính hoặc trả về) vào x.

Đó là mục tiêu của tôi, để có một loạt các ví dụ tuyệt vời này để chứng minh và dạy cho lớp trong khi họ vui chơi. Tôi đã thử ví dụ này trên người bạn cùng phòng của mình và trong khi tôi không thể sử dụng nó như bài học đầu tiên, cô ấy thích nó và học được điều gì đó.

Một số chương trình toán học thú vị tạo ra các biểu đồ hoặc hình dạng đẹp dễ hiểu sẽ là ý tưởng hay và tôi sẽ xem xét chúng. Dưới đây là một số ví dụ mô tả hành động phức tạp nhưng điều đó hơi quá tiên tiến và tôi không thể dạy flash. Bạn có ý tưởng nào khác?


102
Tôi nghĩ rằng các câu hỏi về cách dạy lập trình là tuyệt vời và không tầm thường. Chúc may mắn với những gì bạn đang cố gắng làm.
Mike Dunlavey

6
"Mục tiêu của tôi là truyền cảm hứng cho sinh viên rằng lập trình rất tuyệt." Tôi không nghĩ bạn có thể nói với mọi người lập trình là tuyệt vời. Hoặc họ thích nó, hoặc họ không.
Rik

2
Tập lệnh VBS một dòng của bạn không hoạt động trên máy Mac của tôi! :-P Câu hỏi hay mặc dù.
John Topley

1
Tôi luôn thích loại công cụ này, nhưng bạn đang cố gắng gây ấn tượng với ai, tôi là người đệm Sierpinki sẽ làm tốt công việc của tôi. Đối với một nhân viên IT có thể một cái gì đó tạo ra các tệp, đối với một số người làm cho máy tính nói chuyện sẽ rất ấn tượng, v.v. Vì vậy, vấn đề là đối tượng mục tiêu, sau đó bạn xác định những gì mát mẻ.
Oakcool

5
83 người nêu lên nhận xét về cách câu hỏi này "tuyệt vời và không tầm thường" ... đóng cửa là "không mang tính xây dựng" bởi 5 người dường như không đồng ý. Không quyền lực lớn?
rg88

Câu trả lời:


78

Tôi đã nhận được phản hồi tuyệt vời từ những đứa trẻ của mình với một kịch bản VB nhanh để thao túng một nhân vật Microsoft Agent. Đối với những người không quen thuộc với MS Agent, đó là một loạt các nhân vật trên màn hình hoạt hình có thể được thao tác thông qua giao diện COM. Bạn có thể tải xuống mã và ký tự tại trang tải xuống Microsoft Agent .

Một vài dòng theo sau sẽ làm cho nhân vật Merlin xuất hiện trên màn hình, bay vòng quanh, gõ vào màn hình để thu hút sự chú ý của bạn và nói xin chào.

agentName = "Merlin"
agentPath = "c:\windows\msagent\chars\" & agentName & ".acs"
Set agent = CreateObject("Agent.Control.2")

agent.Connected = TRUE
agent.Characters.Load agentName, agentPath
Set character = agent.Characters.Character(agentName)

character.Show

character.MoveTo 500, 400
character.Play "GetAttention"
character.Speak "Hello, how are you?"
Wscript.Sleep 15000
character.Stop
character.Play "Hide"

Có rất nhiều lệnh khác bạn có thể sử dụng. Kiểm trahttp://www.microsoft.com/technet/scriptcenter/funzone/agent.mspx để biết thêm thông tin.

EDIT 2011-09 / 02 Gần đây tôi phát hiện ra rằng Microsoft Agent không được cài đặt trên Windows 7. Tuy nhiên, nó được cung cấp dưới dạng tải xuống riêng biệt tại đây . Tôi chưa kiểm tra điều này nên không thể xác minh xem nó có hoạt động không.


Thật tuyệt vời. Điều này xứng đáng cách upvote nhiều hơn.
Tom Ritter

Cảm ơn sự công nhận Tom. Sucks mà tôi sẽ không nhận được điểm rep ngay cả khi nó bắt đầu nhận được upvote. :-P
Bob Mc

32
Bằng cách này, bạn có thể thấy kẹp giấy mọi lúc : D
Pedery

8
@Bob BASIC là ngôn ngữ mới bắt đầu. VB không phải là CƠ BẢN. VB là con dao quân đội Thụy Sĩ mà MS tạo ra để phù hợp với nhu cầu tại thời điểm đó. Ngày nay, có nhiều công cụ tốt hơn (chuyên dụng hơn nhiều) để thay thế nó. VB không phải là một ngôn ngữ xấu, nó chỉ có rất nhiều hành lý dư thừa. Nếu tôi đưa ra một lý do hoàn toàn không thiên vị tại sao không sử dụng nó, thì đó là vì MS đang dần bỏ hỗ trợ cho VB. Đó là một ngôn ngữ chết. Chỉ cần đợi cho đến khi kịch bản Office được thực hiện bằng JavaScript (được lên kế hoạch trong tương lai gần) thì sự suy giảm của VB sẽ là một điều chắc chắn.
Evan Plaice

3
@Evan - Cảm ơn câu trả lời công bằng, thay vì một số ý kiến ​​tôn giáo. Làm rất tốt Chưa từng nghe về động thái Javascript của Office. Sẽ điều tra.
Bob Mc

339

Nhập mã này vào thanh địa chỉ của bạn (trong trình duyệt của bạn) và nhấn enter. Sau đó, bạn có thể chỉnh sửa tất cả nội dung của trang web!

javascript:document.body.contentEditable='true'; document.designMode='on'; void 0

Đó là "một lớp lót" thú vị nhất mà tôi biết =)


95
"One-liner" là một cách gọi sai. Đó là 3 dòng, thực sự. Bất kỳ mã nào cũng có thể là một dòng nếu bạn muốn.
DisgruntledGoat

5
Điều này trông thực sự gọn gàng, nhưng có cách nào để có được trang sau khi nó được sửa đổi?
Sylverdrag

51
Tôi thích nó rất nhiều, tôi đã nâng cấp cho bạn 999999999 lần !! img707.imageshack.us/img707/4843/jshack.png
JRL

4
Điều này không còn đúng trong Firefox vì javascript: đã bị vô hiệu hóa. Một sự xấu hổ.

2
@DisgruntledGoat javascript:void 0đang sôi nổi: tương đương int main() {return 0; }trong C. Và hai dòng khác chỉ là các API trình duyệt khác nhau làm cùng một điều: Đầu tiên là API IE, thứ hai là API NetScape. HTML5 sử dụng contentEditable, vì vậy trừ khi bạn quan tâm đến việc hỗ trợ Firefox 1.5 hoặc một cái gì đó, mã thực tế lên tới:document.body.contentEditable='true';
Zarel

201

Khi tôi lần đầu tiên viết này.

10 PRINT "What is your name?"
20 INPUT A$
30 PRINT "Hello " A$
40 GOTO 30

Nó thổi bay mọi người! Máy tính nhớ tên của họ!

EDIT: Chỉ để thêm vào này. Nếu bạn có thể thuyết phục một lập trình viên mới thì đây là điều tuyệt vời nhất họ có thể làm, họ sẽ trở thành những lập trình viên giỏi. Ngày nay, bạn có thể làm hầu hết mọi thứ bạn muốn với một dòng mã để chạy thư viện do người khác viết. Cá nhân tôi hoàn toàn không hài lòng khi làm điều đó và thấy ít lợi ích trong việc dạy nó.


15
sẽ tốt hơn với những điều sau: 40 GOTO 30
tiêu

8
+1 để hiển thị tên người dùng, mọi người luôn thích nhìn thấy tên của chính họ được hiển thị. @saua, làm thế nào mà không phải là một vòng lặp in vô hạn? Nó quay trở lại dòng 30, không phải dòng 20.
z -

13
Nên là goto 10 chắc chắn để ai đó khác có thể nhập tên của họ ...
Omar Kooheji

17
Bạn đã quên 35 IN ẤN $ (7)
Adam Jaskiewicz

6
đây là cách tôi học lập trình Đó là câu trả lời tốt nhất của nó. +1 để chấp nhận cái này
Nhấp vào Upvote

180

PHP - miếng đệm Sierpinki hay còn gọi là Triforce

OK, đó là 15 dòng mã nhưng kết quả thật tuyệt vời! Đó là thứ khiến tôi phát điên khi còn nhỏ. Đây là từ hướng dẫn PHP:

$x = 200;
$y = 200;

$gd = imagecreatetruecolor($x, $y);

$corners[0] = array('x' => 100, 'y' =>  10);
$corners[1] = array('x' =>   0, 'y' => 190);
$corners[2] = array('x' => 200, 'y' => 190);

$red = imagecolorallocate($gd, 255, 0, 0); 

for ($i = 0; $i < 100000; $i++) {
  imagesetpixel($gd, round($x),round($y), $red);
  $a = rand(0, 2);
  $x = ($x + $corners[$a]['x']) / 2;
  $y = ($y + $corners[$a]['y']) / 2;
}

header('Content-Type: image/png');
imagepng($gd);

đệm lót


25
Đối với hồ sơ, đó là một miếng đệm Sierpinki.
hỗn loạn

6
Điều đó thật tuyệt vời, nhưng tôi nghĩ nó nên đến vào giữa khóa học, bởi vì nó được xây dựng trên một số khái niệm, như các vòng lặp và mảng.
Mike Dunlavey

4
@Masi: ý tưởng chung là có ba điểm cố định là các góc của tam giác và một điểm "hiện tại" mà bạn tiếp tục cập nhật. Để thực hiện di chuyển, chọn ngẫu nhiên một trong các góc và di chuyển nửa điểm hiện tại về phía góc đó. Màu trong điểm hiện tại. Sau đó thực hiện một động tác khác theo cách tương tự, và sau đó một vài nghìn lần nữa và mô hình sẽ xuất hiện. Sau đó thử nó với một số góc khác nhau hoặc thay đổi phân số mà điểm hiện tại nhảy về phía góc, để xem nó ảnh hưởng đến mẫu như thế nào.
Daniel Earwicker

18
Đối với hồ sơ, đó không phải là một miếng đệm Sierpinki ... Thực tế, đó là Triforce. vi.wikipedia.org/wiki/The_Legend_of_Zelda
jason

2
Mã này có vẻ kỳ lạ đối với tôi bởi vì tôi thường thấy điều này được thực hiện với đệ quy (cũng với rất ít dòng mã). Trong thực tế, fractals là một giới thiệu tốt về đệ quy trong các lớp khoa học máy tính. Nhưng có vẻ như mã này sẽ khá kém hiệu quả, vẽ và sơn lại rất nhiều pixel do cách tiếp cận ngẫu nhiên của nó.
Steve Wortham

105

Microsoft có Small Basic , một IDE cho "trẻ em".

pic = Flickr.GetRandomPicture("beach")
Desktop.SetWallpaper(pic)

Nó được thiết kế đặc biệt để cho thấy lập trình tuyệt vời như thế nào.


80
Điều này thực sự tệ, bởi vì những cuộc gọi thư viện này có vẻ như ma thuật. Bạn đang thiết lập chúng để trở thành những đứa trẻ kịch bản VB. Tôi sợ rằng họ sẽ không bao giờ ẩn nấp trong khu vực "ma thuật đen tối" đó và ở lại khu vực ống nước "an toàn". ... Hãy nhìn đây là cách tạo một trình duyệt internet trong một dòng! MSIEControl (.. blabla bất cứ điều gì ...) hiển thị ().
Hasen

88
Tôi không nghĩ trẻ con là những kẻ ngốc. Nếu bạn khiến họ hào hứng với các khả năng lập trình, họ sẽ tự tìm ra cách làm những thứ cao cấp hơn. Nếu không có gì khác, các chàng trai trẻ bị nhiễm testosterone sẽ cố gắng học những điều đen tối, đen tối nhất trước khi bạn biết chuyện gì đã xảy ra.
Tim Lin

28
@hansen j, thật không công bằng, mọi người phải bắt đầu từ đâu đó.
John Farrell

30
Đây không phải là bằng cấp CS cho trẻ em, đây là đồ chơi lập trình. Dù cửa ngõ đó là gì để khiến trẻ em nhìn thấy khía cạnh thú vị của lập trình thì thật tuyệt vời, nó không cần phải là ASM.
Copas

29
Biết những đứa trẻ mà tôi đã cố dạy, sẽ mất khoảng mười giây trước khi chúng thử pic = Flickr.GetRandomPicture ("ngực")
Iain Galloway

83

Tôi có xu hướng nghĩ rằng mọi người ấn tượng với những thứ mà họ có thể liên quan hoặc có liên quan đến cuộc sống của họ. Tôi sẽ thử và dựa trên 10 dòng mã của mình xung quanh thứ gì đó mà họ biết và hiểu. Lấy ví dụ, Twitter và API của nó. Tại sao không sử dụng API này để xây dựng một cái gì đó tuyệt vời. 10 dòng mã sau đây sẽ trả về "dòng thời gian công khai" từ Twitter và hiển thị nó trong ứng dụng bảng điều khiển ...

using (var xmlr = XmlReader.Create("http://twitter.com/statuses/public_timeline.rss"))
    {
        SyndicationFeed
            .Load(xmlr)
            .GetRss20Formatter()
            .Feed
            .Items        
            .ToList()
            .ForEach( x => Console.WriteLine(x.Title.Text));
    }

Mẫu mã của tôi có thể không phải là tốt nhất cho sinh viên của bạn. Nó được viết bằng C # và sử dụng .NET 3.5. Vì vậy, nếu bạn định dạy cho họ PHP, Java hoặc C ++ thì điều này sẽ không hữu ích. Tuy nhiên, quan điểm của tôi là bằng cách liên kết 10 dòng mã của bạn với một thứ gì đó "tuyệt vời, thú vị và phù hợp với các sinh viên, mẫu của bạn cũng trở nên thú vị, thú vị và phù hợp.

Chúc may mắn!

[Vâng, tôi biết rằng tôi đã bỏ lỡ một vài dòng sử dụng câu lệnh và phương thức Chính, nhưng tôi đoán rằng 10 dòng không cần phải đúng 10 dòng]


Điều này thực sự gọn gàng! Tôi không quen thuộc với đối tượng SyndicationFeed - cảm ơn vì mã!
Tad Donaghe

Đối tượng mục tiêu không phải là chuyên viên máy tính, ergo, họ không cho một cái chết tiệt về tweeter?
peufeu

80

Đây là một máy chủ telnet Python sẽ hỏi tên người dùng và nói xin chào với họ. Điều này có vẻ hay vì bạn đang liên lạc với chương trình của mình từ một máy tính khác qua mạng.

from socket import *
s=socket(AF_INET, SOCK_STREAM)
s.bind(("", 3333))
s.listen(5)
while 1:
   (c, a) = s.accept()
   c.send("What is your name? ")
   name = c.recv(100)
   c.send("Hello "+name)
   c.close()

68

Tôi nghĩ thật khó khăn để trở thành một nhà giáo dục máy tính ngày nay. Tôi là. Chúng tôi phải đối mặt với một trận chiến khó khăn ngày càng dốc. Sinh viên của chúng tôi là những người dùng cực kỳ tinh vi và phải mất rất nhiều thời gian để gây ấn tượng với họ. Họ có rất nhiều công cụ có thể truy cập để làm những điều tuyệt vời.

Một máy tính đơn giản trong 10 dòng mã? Tại sao? Tôi đã có TI-86 cho điều đó.

Một kịch bản áp dụng hiệu ứng đặc biệt cho một hình ảnh? Đó là những gì Photoshop dành cho. Và Photoshop thổi bay mọi thứ bạn có thể làm trong 10 dòng.

Làm thế nào về việc trích xuất CD và chuyển đổi tệp sang MP3? Uhh, tôi đã có 50.000 bài hát tôi nhận được từ BitTorrent. Chúng đã ở định dạng MP3. Tôi chơi chúng trên iPhone của tôi. Ai mua CD nào?

Để giới thiệu người dùng thông thái về lập trình, bạn sẽ phải tìm một thứ gì đó:

a) áp dụng cho điều gì đó họ thấy thú vị và tuyệt vời, và b) làm điều gì đó họ chưa thể làm.

Giả sử sinh viên của bạn đã có quyền truy cập vào phần mềm đắt nhất. Nhiều người trong số họ có phiên bản đầy đủ của Adobe CS5.5 (giá bán lẻ: $ 2,600; giá thực tế: miễn phí) và có thể dễ dàng nhận được bất kỳ ứng dụng nào thường phá vỡ ngân sách của bộ.

Nhưng đại đa số họ không biết làm thế nào bất kỳ "thứ máy tính" này thực sự hoạt động.

Họ là một nhóm vô cùng sáng tạo: họ thích tạo ra mọi thứ. Họ chỉ muốn có thể làm hoặc làm một cái gì đó mà bạn bè của họ không thể. Họ muốn một cái gì đó để khoe khoang.

Dưới đây là một số điều mà tôi đã tìm thấy để cộng hưởng với các học sinh của mình:

  • HTML và CSS. Từ những người họ tìm hiểu cách các chủ đề MySpace hoạt động và có thể tùy chỉnh chúng.
  • Mashup. Tất cả họ đều đã nhìn thấy chúng, nhưng không biết cách tạo ra chúng. Hãy xem Yahoo! Ống . Có rất nhiều khoảnh khắc có thể dạy được, chẳng hạn như RSS, XML, lọc văn bản, ánh xạ và trực quan hóa. Các widget mashup hoàn thành có thể được nhúng trong các trang web.
  • Ảnh minh họa. Nhìn vào nghệ thuật bối cảnh miễn phí . Đệ quy và ngẫu nhiên là chìa khóa để tạo nên những bức ảnh đẹp.
  • Kể chuyện. Với môi trường lập trình 3D dễ sử dụng như Alice , thật dễ dàng để tạo ra những câu chuyện chất lượng cao, hấp dẫn, không sử dụng gì ngoài kéo và thả.

Không ai trong số này liên quan đến bất kỳ chương trình theo nghĩa truyền thống. Nhưng họ tận dụng các thư viện mạnh mẽ. Tôi nghĩ về họ như một loại lập trình khác.


11
+1 Tôi thích cách bạn mô tả những đứa trẻ ngày nay có 50.000 bài hát từ bittorrent và Adobe CS4 mà không có gì, tất nhiên đó là thực tế
thomasrutter

Viết một thuật toán tìm kiếm nhị phân đơn giản trong python. Xé một cuốn danh bạ nhiều lần để mô tả cách thức hoạt động của nó. Đó là các khía cạnh đơn giản nhưng mạnh mẽ của lập trình mà các lập trình viên giàu kinh nghiệm thường bỏ qua và người mới nhìn @ kinh ngạc. hầu hết mọi người không nhận ra rằng màn hình của họ làm mới ít nhất một nửa số pixel trên màn hình 60-120 / giây. làm cuộc đua tốc độ của con người và máy tính. công cụ thú vị. xem điều này để biết thêm ý tưởng: acadearth.org/cifts/int sinhtion-to-computer-science-i : và, bất cứ điều gì bạn làm ... đừng dạy họ ANSI C là ngôn ngữ đầu tiên của họ. Tôi đã ở đó, nó bị hút.
Evan Plaice

3
Nếu bạn đang tùy chỉnh các trang web, tại sao không sử dụng Greasemonkey?
new123456

Chỉ cần một vài suy nghĩ về các ví dụ của bạn: re photoshop, bạn chỉ cần chỉ ra điều hiển nhiên - với photoshop bạn có thể thay đổi 1 hình ảnh, với kịch bản bạn có thể thay đổi hàng trăm ngàn. Và lại là MP3, bạn không còn ai tải xuống CD nữa, nhưng bạn có thể (nếu không hợp pháp) giải thích rằng họ có thể viết chương trình để tự động tải nhạc mới nhất vào ipod của họ.
Jeff Welling

@JeffWelling tốt với Photoshop, bạn có thể tạo Batches và Action để thực hiện những thay đổi đó đối với bất kỳ số lượng tệp nào. Thật đáng ngạc nhiên bao nhiêu được sử dụng cho những ngày này với máy tính mặc dù.
Giăng

63

Tôi đã tìm thấy một yêu thích lớn (trong GWBASIC) là:

10 input "What is your name ";N$
20 i = int(rnd * 2)
30 if i = 0 print "Hello ";N$;". You are a <fill in insult number 1>"
40 if i = 1 print "Hello ";N$;". You are a <fill in insult number 2>"

Tôi đã tìm thấy những sinh viên bắt đầu có một vài quan niệm cần được sửa chữa.

  • Máy tính không đọc được suy nghĩ của bạn.
  • Máy tính chỉ làm một việc tại một thời điểm, ngay cả khi chúng làm điều đó quá nhanh, dường như chúng làm tất cả cùng một lúc.
  • Máy tính chỉ là những cỗ máy ngu ngốc và chỉ làm những gì chúng được bảo.
  • Máy tính chỉ nhận ra một số thứ nhất định và chúng giống như các khối xây dựng.
  • Một khái niệm quan trọng là một biến là một cái gì đó có chứa một giá trị và tên của nó khác với giá trị đó.
  • Sự khác biệt giữa thời gian bạn chỉnh sửa chương trình và thời gian chương trình chạy.

Chúc may mắn với lớp học của bạn. Tôi chắc chắn bạn sẽ làm tốt.

Tái bút: Tôi chắc chắn bạn hiểu rằng, cùng với vật chất và kỹ năng, bạn cũng đang dạy một thái độ, và điều đó cũng quan trọng không kém.


Máy tính hiện đại làm rất nhiều việc cùng một lúc.
dreamlax

Nhưng, mã của bạn có làm nhiều việc cùng một lúc không?
JeffO

5
@dreamlax: Tất nhiên là bạn đúng, nhưng chúng ta đừng chia tóc. Chúng ta đang nói về việc giới thiệu máy tính cho trẻ em và cho chúng các khối xây dựng tinh thần cơ bản. Song song có thể đến sau.
Mike Dunlavey

1
@Ben S: Bạn có bất kỳ cơ hội nào để xóa khoảng trống ở phía trước của dòng 10 không? Tôi đã đặt nó vào vì có vẻ như bộ định dạng SO dường như bỏ dòng đầu tiên bằng 1 khoảng trắng. Tôi tự hỏi nếu có một cách tốt hơn để làm cho dòng mã lên?
Mike Dunlavey

2
@ Scratchjs: Trời ạ! Có thật không? :-) dreamlax đã đưa ra quan điểm tương tự. Vấn đề là, khi bạn làm việc với những người không biết gì về máy tính, có vẻ như mọi thứ xảy ra cùng một lúc, vì vậy chúng ta phải vượt qua điều đó, mà không cần phải chia tóc. Vì vậy, một khái niệm thực sự cơ bản là "Đầu tiên nó làm A, sau đó là B, v.v."
Mike Dunlavey

62

Mã C này có thể bị xáo trộn, nhưng tôi thấy nó rất mạnh

#include <unistd.h>
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<L?--_
%6:6:7)+"World! \n",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}

Và đây là kết quả ... Chỉ trong 3 dòng ... Một loại fractal Hello World...

WWWWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWooooooooooooooooorrrrrrrrrrrrrrrrrrrrroooooooooooooooooooooooooooo
WWWWWWWWWWWoooooooooooorrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrooooooooooooooooooooo
WWWWWWWWWWooooooooorrrrrrrrrrrrrrrrrrrrrrrllllld!!ddllllrrrrrrooooooooooooooooo
WWWWWWWWoooooooorrrrrrrrrrrrrrrrrrrrrrllllllldd!oWW!!dllllllrrrrroooooooooooooo
WWWWWWWoooooorrrrrrrrrrrrrrrrrrrrrrlllllllldddd!orro!o!dllllllrrrrrrooooooooooo
WWWWWWooooorrrrrrrrrrrrrrrrrrrrrllllllllldddd!WorddddoW!ddllllllrrrrrrooooooooo
WWWWWoooorrrrrrrrrrrrrrrrrrrrrlllllllllddd!!!o!!!   !dWW!ddddllllrrrrrrrooooooo
WWWWooorrrrrrrrrrrrrrrrrrrrllllllllldd!!!!WWWoo      WloW!!!ddddllrrrrrrrrooooo
WWWWoorrrrrrrrrrrrrrrrrrrlllllllddddWldolrrlo!Wl     r!dlooWWWoW!dllrrrrrrroooo
WWWoorrrrrrrrrrrrrrrrrlllllddddddd!!Wdo  l!               rdo!l!r!dlrrrrrrrrooo
WWoorrrrrrrrrrrrrrrlllddddddddd!!!!oolWW                       lW!ddlrrrrrrrroo
WWorrrrrrrrrrrrllld!!!!!dddd!!!!WWrd !                        rlW!ddllrrrrrrrro
Worrrrrrrllllllddd!oooWWWoloWWWWoodr                           drrWdlllrrrrrrrr
Worrrlllllllldddd!WolWrr!!dWWWlrrldr                            ro!dlllrrrrrrrr
Wrrllllllllddddd!WWolWr        oWoo                              r!dllllrrrrrrr
Wlllllllldddd!!odrrdW            o                              lWddllllrrrrrrr
Wlddddd!!!!!WWordlWrd                                          oW!ddllllrrrrrrr
olddddd!!!!!WWordlWrd                                          oW!ddllllrrrrrrr
Wlllllllldddd!!odrrdW            o                              lWddllllrrrrrrr
Wrrllllllllddddd!WWolWr        oWoo                              r!dllllrrrrrrr
Worrrlllllllldddd!WolWrr!!dWWWlrrldr                            ro!dlllrrrrrrrr
Worrrrrrrllllllddd!oooWWWoloWWWWoodr                           droWdlllrrrrrrrr
WWorrrrrrrrrrrrllld!!!!!dddd!!!!WWrd !                        rlW!ddllrrrrrrrro
WWoorrrrrrrrrrrrrrrlllddddddddd!!!!oolWW                       lW!ddlrrrrrrrroo
WWWoorrrrrrrrrrrrrrrrrlllllddddddd!!Wdo  l!               rdo!l!r!dlrrrrrrrrooo
WWWWoorrrrrrrrrrrrrrrrrrrlllllllddddWldolrrlo!Wl     r!dlooWWWoW!dllrrrrrrroooo
WWWWooorrrrrrrrrrrrrrrrrrrrllllllllldd!!!!WWWoo      WloW!!!ddddllrrrrrrrrooooo
WWWWWoooorrrrrrrrrrrrrrrrrrrrrlllllllllddd!!!o!!!   WdWW!ddddllllrrrrrrrooooooo
WWWWWWooooorrrrrrrrrrrrrrrrrrrrrllllllllldddd!WorddddoW!ddllllllrrrrrrooooooooo
WWWWWWWoooooorrrrrrrrrrrrrrrrrrrrrrlllllllldddd!orro!o!dllllllrrrrrrooooooooooo
WWWWWWWWoooooooorrrrrrrrrrrrrrrrrrrrrrllllllldd!oWW!!dllllllrrrrroooooooooooooo
WWWWWWWWWWooooooooorrrrrrrrrrrrrrrrrrrrrrrllllld!!ddllllrrrrrrooooooooooooooooo
WWWWWWWWWWWoooooooooooorrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrooooooooooooooooooooo
WWWWWWWWWWWWWooooooooooooooooorrrrrrrrrrrrrrrrrrrrroooooooooooooooooooooooooooo
WWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWWWWWWWoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
WWWWWWWWWWWWWWWWWWWWWoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

5
Đẹp! Quá tệ, không có bất kỳ vị trí nào trên đó thực sự nói "Xin chào thế giới!"
Ponkadoodle

Cái này đẹp quá Mô hình Mandelbrot: D
Aniket

45

Còn về việc hiển thị rằng bạn có thể lấy bất kỳ trình duyệt web nào và nhập JavaScript vào thanh địa chỉ và nhận mã để thực thi?

EDIT: Chuyển đến một trang có nhiều hình ảnh và thử điều này trong thanh địa chỉ:

javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i<DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++ }setInterval('A()',5); void(0)

2
ok, nhưng bạn nên đưa ra một ví dụ cụ thể mà bạn biết ..
hasen

1
@ John: Xin vui lòng, đưa ra một ví dụ cụ thể. Tôi chỉ sử dụng JS trong máy chủ của mình bằng cách xuất tệp JS. Tôi chưa bao giờ đặt mã vào thanh địa chỉ của tôi.
Léo Léopold Hertz

7
Cũng không phải là một ví dụ thú vị, nhưng bạn có thể làm javascript: alert ("Hello World");
John Topley

Tôi thích: "javascript: for (var i = 0; i> -1; i ++) alert ('Xin chúc mừng, bạn đã nhấn enter cho' + i + 'lần!');". (Đọc mã đó trước khi chạy ...). ^^
Arnis Lapsa

+1 cho yếu tố wow ... ví dụ khá ngoạn mục :)
fretje

37

Bạn có thể tạo một ứng dụng chọn một số ngẫu nhiên. Và bạn phải đoán nó. Nếu bạn sai nó nói: cao hơn hoặc thấp hơn. Và nếu bạn đoán nó, một tin nhắn tốt đẹp.

Thật tuyệt khi chơi cho học sinh.

Phiên bản Python đơn giản mà không cần kiểm tra lỗi thích hợp:

import random

while input('Want to play higher/lower? ').lower().startswith('y'):
    n = random.randint(1, 100)
    g = int(input('Guess: '))

    while g != n:
        print('  %ser!' % (g > n and 'low' or 'high'))
        g = int(input('Guess: '))

    print('  Correct! Congratulations!')

Erik gợi ý rằng máy tính nên đoán số. Điều này cũng có thể được thực hiện trong vòng 10 dòng mã (mặc dù hiện tại việc thiếu kiểm tra lỗi thích hợp thậm chí còn nghiêm trọng hơn: các số hợp lệ ngoài phạm vi gây ra một vòng lặp vô hạn):

while input('Want to let the pc play higher/lower? ').lower().startswith('y'):
    n = int(input('Give a number between 1 and 100: '))
    lo, hi, guess, tries = 1, 100, 50, 1

    while guess != n:
        tries += 1
        lo, hi = (guess + 1, hi) if guess < n else (lo, guess - 1)
        guess = (lo + hi) // 2

    print('Computer guessed number in %d tries' % tries)

4
Thú vị hơn là để người dùng chọn số ngẫu nhiên, sau đó để máy tính đoán nó.
Erik Forbes

15
Bây giờ làm cho hai chương trình này chơi với nhau trên một ổ cắm.
Josh Lee

3
Sẽ tốt hơn nếu máy tính không được cung cấp số trực tiếp. Bạn nên bảo người dùng "chọn một số trong khoảng từ 1 đến 100". Sau đó xuất "Tôi đoán 50" và yêu cầu đầu vào ("cao hơn", "thấp hơn" hoặc "chính xác") và tinh chỉnh dự đoán của bạn.
Ponkadoodle

Tôi đã thực hiện điều này với con trai tôi (9) và nó cũng có lợi ích khi suy nghĩ về thuật toán, chiến lược tốt nhất để tìm ra con số chính xác trong số lần đoán ngắn nhất.
mbesso

Tôi nghĩ bạn muốn raw_input. Đầu vào bằng eval(raw_input(prompt)). Xem đầu vào .
Jeff Kaufman

26

Quay trở lại lớp học máy tính ở trường trung học, bản thân tôi và một vài người bạn đã dạy cả lớp cách lập trình với Delphi. Lớp học chủ yếu tập trung vào lập trình với Pascal, vì vậy Delphi là bước tiếp theo tốt. Chúng tôi đã chứng minh bản chất hướng sự kiện của Delphi và khả năng RAD của nó. Vào cuối bài học, chúng tôi đã cho lớp thấy một ứng dụng mẫu và yêu cầu họ sao chép nó. Ứng dụng hỏi " Bạn có say không? " Với hai nút Không . ... Tôi nghĩ rằng bạn biết điều gì sẽ xảy ra tiếp theo ... nút Không thay đổi vị trí trên chuột và đã gần như không thể nhấp vào.

Các học sinh và giáo viên đã có một cú đá tốt từ nó.

Chương trình chỉ yêu cầu một vài dòng mã do người dùng viết với một phương trình đơn giản để tính toán vị trí di chuyển nút. Tôi không nghĩ bất kỳ học sinh nào khác phát hiện ra điều đó, nhưng một số ít đã thân thiết.


7
Không chỉ giải trí, mà một đồng nghiệp của tôi đã từng làm điều đó trong một số phần mềm, chỉ có nó là nút "OK" trên hộp thông báo. Nó là một ứng dụng được sử dụng nội bộ nên nó không được tán thành. Nó chỉ làm điều này một lần trong một mặt trăng màu xanh. Tất nhiên họ sẽ gọi anh ta và anh ta sẽ nói rằng anh ta cần phải thấy điều đó xảy ra nếu anh ta tin điều đó. Vì vậy, anh ta đi lang thang và tất nhiên điều đó sẽ không xảy ra khi anh ta ở đó ...
Jason D

Tôi nhớ lại một cái gì đó như thế này .. nhưng đó là trong nháy mắt .. và câu hỏi là "Bạn có phải là gay?" .. và nút bấm đặt một sự kiện pháo hoa.
glasnt

2
Đó sẽ là một thời gian thú vị để dạy mọi người điều hướng qua tab và không gian.
davidahines

23

Khi tôi lần đầu tiên tìm ra bash fork, tôi nghĩ rằng nó thực sự ngọt ngào. Rất đơn giản, nhưng gọn gàng trong những gì nó có thể làm:

:(){ :|:& };:

7
Đây là một lời giải thích khá hay: cyberciti.biz/faq/under
Hiểu

12
đối với người mới sử dụng linux: không chạy, nếu không bạn sẽ mất hết công việc.
Behrooz

@Behrooz, tùy thuộc vào bản phân phối của bạn, một số có giới hạn luồng / ngã ba tùy ý được tích hợp.
Dao cạo Storm

Nó tạo ra một tiếng vang lớn trên SuSE, nhưng không làm gì trên hầu hết các bản phát hành dựa trên debian.
Behrooz

Điều đó, cũng như giới hạn người dùng, tần suất lưu trữ đĩa của bạn bị
xóa

22

Điều này là gian lận, và thậm chí không đơn giản từ xa, nhưng tôi đã từng viết một cảnh quay trong 20 dòng C ++, sử dụng thư viện đồ họa Allegro. Không có tiêu chí thực sự cho những gì a dòng là, nhưng nó là một chút trước đây, và nó được làm hoàn toàn cho vui. Nó thậm chí còn có hiệu ứng âm thanh thô.

Đây là những gì nó trông giống như:

20 dòng http://img227.imageshack.us/img227/8770/20linesxx0.png

Và đây là mã ( nên biên dịch):

bool inside(int x, int y, int x2, int y2) { return (x>x2&&x<x2+20&&y>y2&&y<y2+10); }
int main() {
  BITMAP* buffer;
  float px,shotx,shoty,monstars[8],first,rnd,pressed,points = 0, maxp = 0;
  unsigned char midi[5] = {0xC0,127,0x90,25,0x54}, plgfx[] = {0,0,0,10,3,10,3,5,6,5,6,10,8,12,10,10,10,5,13,5,13,10,16,10,16,0,13,0,13,2,3,2,3,0,0,0}, mongfx[] = {0,0, 10,5, 20,0, 17,8, 15,6, 10,16, 5,6, 3,8, 0,0};
  allegro_init(), set_color_depth(32), set_gfx_mode(GFX_AUTODETECT_WINDOWED,320,240,0,0), install_timer(), install_keyboard(),  install_mouse(), buffer = create_bitmap(320,240),srand(time(NULL)),install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT,""),clear_to_color(buffer,makecol32(100,100,255));
    while ((pressed=(!key[KEY_Z]&&pressed)?0:pressed)?1:1&&(((shoty=key[KEY_Z]&&shoty<0&&pressed==0?(pressed=1?200:200):first==0?-1:shoty)==200?shotx=px+9:0)==9999?1:1) && 1+(px += key[KEY_LEFT]?-0.1:0 + key[KEY_RIGHT]?0.1:0) && 1+int(px=(px<0?0:(px>228?228:px))) && !key[KEY_ESC]) {
    rectfill(buffer,0,0,244,240,makecol32(0,0,0));
    for(int i=0;i<8;i++) if (inside(shotx,shoty,i*32,monstars[i])) midi_out(midi,5);
        for (int i=0; i<8; monstars[i] += first++>8?(monstars[i]==-100?0:0.02):-100, points = monstars[i]>240?points-1:points, monstars[i]=monstars[i]>240?-100:monstars[i], points = inside(shotx,shoty,i*32,monstars[i])?points+1:points, (monstars[i] = inside(shotx,shoty,i*32,monstars[i])?shoty=-1?-100:-100:monstars[i]), maxp = maxp>points?maxp:points, i++) for (int j=1; j<9; j++) line(buffer,i*32+mongfx[j*2 - 2],monstars[i]+mongfx[j*2-1],i*32+mongfx[j*2],monstars[i]+mongfx[j*2+1],makecol32(255,0,0));
    if (int(first)%2000 == 0 && int(rnd=float(rand()%8))) monstars[int(rnd)] = monstars[int(rnd)]==-100?-20:monstars[int(rnd)]; // randomowe pojawianie potworkow
    if (shoty>0) rectfill(buffer,shotx,shoty-=0.1,shotx+2,shoty+2,makecol32(0,255,255)); // rysowanie strzalu
    for (int i=1; i<18; i++) line(buffer,px+plgfx[i*2 - 2],200-plgfx[i*2-1],px+plgfx[i*2],200-plgfx[i*2+1],makecol32(255,255,0));
    textprintf_ex(buffer,font,250,10,makecol32(255,255,255),makecol32(100,100,255),"$: %i   ",int(points)*10);
    textprintf_ex(buffer,font,250,20,makecol32(255,255,255),makecol32(100,100,255),"$$ %i   ",int(maxp)*10);
    blit(buffer, screen, 0, 0, 0, 0, 320,240);
  }
} END_OF_MAIN()

5
Làm thế nào điều này được cho là để dạy bất cứ ai bất cứ điều gì? Trên một lưu ý không liên quan, COOL! HẠ! Đã yêu nó!
slezica

21

Trong thời đại ngày nay, JavaScript là một cách tuyệt vời để chỉ ra cách bạn có thể lập trình bằng một số công cụ thực sự cơ bản, ví dụ như notepad.

Hiệu ứng jQuery là điểm khởi đầu tuyệt vời cho bất cứ ai muốn wow bạn bè của họ!

Trong cái này, chỉ cần nhấp vào khoảng trắng của trang.

<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script>
$(document.body).click(function () {
  if ($("#pic").is(":hidden")) {
    $("#pic").slideDown("slow");
  } else {
    $("#pic").slideUp();
  }
});
</script>
</head>
<body><img id="pic" src="http://www.smidgy.com/smidgy/images/2007/07/26/lol_cat_icanhascheezburger.jpg"/>
</body>
</html>

1
Tôi sẽ đồng ý. Bạn có thể mở notepad và bắt đầu mã hóa bằng java script rồi mở trình duyệt và tôi chắc chắn rằng các sinh viên của bạn sẽ rất ấn tượng. Đây là những công cụ mà mọi người đều có và họ có thể tìm kiếm rất nhiều hiệu ứng và công cụ khác nhau có thể được thực hiện như ví dụ của Jon.
Jeff Reddy

1
Tôi không nghĩ nên dạy ai đó nền tảng của một ngôn ngữ khá đơn giản bằng thư viện. Bạn có thể dễ dàng làm điều này mà không cần sử dụng jQuery và đối với người mới bắt đầu, bạn nên làm điều đó. Thư viện không phải là một thay thế cho ngôn ngữ thực tế.
Một số Guy

Trong trường hợp javascript, jQuery không phải là sự thay thế cho javascript, nó là sự thay thế cho các doms (rất biến). Đó là một điều tuyệt vời để có thể sidestep, cho bất cứ ai.
Kzqai

20

Một điều bạn có thể cân nhắc là một cái gì đó như Robocode , trong đó rất nhiều mã hóa được trừu tượng hóa và về cơ bản bạn chỉ cần nói cho robot biết phải làm gì. Một chức năng 10 dòng đơn giản có thể làm cho robot làm rất tốt, và có một kết quả rất trực quan và dễ theo dõi.

Có lẽ bản thân Robocode không phù hợp với nhiệm vụ, nhưng loại điều này là một cách tốt để liên kết mã bằng văn bản với các hành động trực quan trên máy tính, cộng với việc vui vẻ xem khi bạn cần đưa ra ví dụ.

public class MyFirstJuniorRobot extends JuniorRobot {
 public void run() {
  setColors(green, black, blue);
  // Seesaw forever
  while (true) {
   ahead(100); // Move ahead 100
   turnGunRight(360); // Spin gun around
   back(100); // Move back 100
   turnGunRight(360); // Spin gun around
  }
 }
 public void onScannedRobot() {
  turnGunTo(scannedAngle);
  fire(1);
 }
 public void onHitByBullet() {
  turnAheadLeft(100, 90 - hitByBulletBearing);
 }
}

6
Không biết về robocode, nhưng tôi đã mã hóa sau khi sử dụng Logo. Có thể vẽ một ngôi nhà bằng cách sử dụng tiến, lùi, trái, phải, v.v ... Nó đưa bạn vào suy nghĩ của các hướng dẫn đơn giản thực hiện các nhiệm vụ lớn.
Ngày Robin

1
Vâng, tôi đã học Logo trong phòng thí nghiệm máy tính ở trường tiểu học. Tôi là một trong những đứa trẻ, ngoài suy nghĩ nó thật tuyệt, muốn biết nhiều hơn.
Travis

1
+1 cho RoboCode! Tôi yêu robocode và chúng tôi đã từng thực hiện các cuộc thi giữa chúng tôi để xem ai sẽ đưa ra các thuật toán tốt nhất
Andreas Grech

18

Vì vậy, một ngày, tôi quyết định rằng tôi đã có đủ. Tôi sẽ học piano. Nhìn thấy những người như Elton John ra lệnh làm chủ bàn phím như vậy đảm bảo với tôi rằng đây là điều tôi muốn làm.

Thật ra học piano là một sự thất vọng lớn. Ngay cả sau khi hoàn thành tám lớp học piano, tôi vẫn không ấn tượng với hình ảnh tinh thần của mình khi chơi piano rất khác so với tầm nhìn ban đầu của tôi về việc thưởng thức hoạt động.

Tuy nhiên, những gì tôi hoàn toàn thích là ba lớp thô sơ của lý thuyết âm nhạc. Tôi đã học về việc xây dựng âm nhạc. Cuối cùng tôi đã có thể bước từ thế giới biểu diễn âm nhạc bằng văn bản sang viết nhạc của riêng mình. Sau đó, tôi đã có thể bắt đầu chơi những gì tôi muốn chơi.


Đừng cố làm lóa mắt các lập trình viên mới, đặc biệt là các lập trình viên trẻ. Toàn bộ khái niệm "ít hơn mười dòng mã đơn giản" dường như gợi ra tâm trạng "Chỉ cho tôi một cái gì đó thông minh ".

Bạn có thể hiển thị một lập trình viên mới một cái gì đó thông minh. Sau đó, bạn có thể dạy cho cùng một lập trình viên cách tái tạo "hiệu suất" này. Nhưng đây không phải là điều khiến họ bị cuốn hút vào lập trình. Dạy chúng những sơ suất, và để chúng tự tổng hợp mười dòng mã thông minh của riêng chúng.

Tôi sẽ hiển thị một lập trình viên mới mã Python sau:

input = open("input.txt", "r")
output = open("output.txt", "w")

for line in input:
    edited_line = line
    edited_line = edited_line.replace("EDTA", "ethylenediaminetetraacetic acid")
    edited_line = edited_line.replace("ATP", "adenosine triphosphate")
    output.write(edited_line)

Tôi nhận ra rằng tôi không cần phải gán linecho edited_line. Tuy nhiên, đó chỉ là để giữ cho mọi thứ rõ ràng và để cho thấy rằng tôi không chỉnh sửa tài liệu gốc.

Trong chưa đầy mười dòng, tôi đã xác minh một tài liệu. Tất nhiên, cũng chắc chắn hiển thị cho lập trình viên mới tất cả các phương thức chuỗi có sẵn. Quan trọng hơn, tôi đã chỉ ra ba điều cơ bản thú vị mà tôi có thể làm: gán biến, vòng lặp, tệp IO và sử dụng thư viện chuẩn.

Tôi nghĩ bạn sẽ đồng ý rằng mã này không gây lóa mắt. Trong thực tế, nó là một chút nhàm chán. Không - thực sự, nó rất nhàm chán. Nhưng hãy trình mã đó cho một lập trình viên mới và xem liệu lập trình viên đó không thể chuyển đổi mọi phần của tập lệnh đó thành một thứ gì đó thú vị hơn nhiều trong tuần, nếu không phải là ngày. Chắc chắn, nó sẽ gây phiền nhiễu cho bạn (có thể sử dụng tập lệnh này để tạo trình phân tích cú pháp HTML đơn giản), nhưng mọi thứ khác chỉ cần thời gian và kinh nghiệm.


17

Giống như hầu hết các nhà bình luận khác, tôi bắt đầu viết mã để giải các bài toán (hoặc để tạo đồ họa cho các trò chơi thực sự khủng khiếp mà tôi sẽ thiết kế - những thứ như Indiana Jones so với Zombies).

Điều thực sự bắt đầu tôi (trên cả toán học và lập trình) là từ văn bản, chọn các trò chơi theo phong cách phiêu lưu của riêng bạn ... đến các trò chơi dựa trên đồ họa nhiều hơn. Tôi bắt đầu tô màu giấy vẽ đồ thị và vẽ các pixel, cho đến khi tôi đi vào hình học ... và khám phá ra cách sử dụng các phương trình để vẽ các đường cong và đường, hộp, v.v.

Quan điểm của tôi là, tôi có thể thực sự đã tham gia vào một cái gì đó như xử lý ( http: // Processing.org/ ) trong đó một chương trình điển hình trông giống như thế này:

void setup() 
{
  size(200, 200); 
  noStroke();
  rectMode(CENTER);
}

void draw() 
{   
  background(51); 
  fill(255, 204);
  rect(mouseX, height/2, mouseY/2+10, mouseY/2+10);
  fill(255, 204);
  int inverseX = width-mouseX;
  int inverseY = height-mouseY;
  rect(inverseX, height/2, (inverseY/2)+10, (inverseY/2)+10);
}

Đối với tôi, đây là "Logo" của tương lai.

Có những ví dụ "xin chào thế giới" dễ dàng có thể nhanh chóng khiến ai đó vẽ và thay đổi mã và xem cách mọi thứ bị phá vỡ và những "tai nạn" kỳ lạ nào có thể được tạo ra ... tất cả các cách để tương tác và tạo ra fractal nâng cao hơn ...


+1 Tôi nghĩ rằng xử lý là một cách tuyệt vời để dạy tư duy thuật toán, đó là chủ đề quan trọng nhất mà người mới bắt đầu cần học.
Nils

15

Bạn có thể sử dụng một tập lệnh được viết bằng AutoIt , làm mờ ranh giới giữa việc sử dụng một ứng dụng và lập trình truyền thống.

Ví dụ: một tập lệnh mở notepad và làm cho máy tính của chính họ xúc phạm chúng trong đó và thông qua một hộp thông báo, và sau đó không để lại dấu vết nào cho hành động của nó:

Run("notepad.exe")
WinWaitActive("Untitled - Notepad")
Send("You smell of human.")
Sleep(10000)
MsgBox(0, "Humans smell bad", "Yuck!")
WinClose("Untitled - Notepad")
WinWaitActive("Notepad", "Do you want to save")
Send("!n")

++ Tôi không chắc nó sẽ phù hợp với kế hoạch bài học ở đâu, nhưng nó dễ thương.
Mike Dunlavey

13

Tôi nhớ khi tôi mới bắt đầu các vòng lặp mã hóa luôn gây ấn tượng với tôi. Bạn viết 5 - 10 dòng mã (hoặc ít hơn) và hàng trăm (hoặc tuy nhiên nhiều dòng bạn chỉ định) in ra. (Tôi đã học đầu tiên về PHP và Java).

for( int i = 0; i < 200; i++ )
{
   System.out.println( i );
}

13

Tôi nghĩ rằng một nơi tốt để học sinh bắt đầu có thể là Greasemonkey . Có hàng ngàn tập lệnh mẫu trên userscripts.org, tài liệu đọc rất tốt, một số trong đó rất nhỏ. Các tập lệnh Greasemonkey ảnh hưởng đến các trang web, mà các sinh viên sẽ quen với việc sử dụng, nếu không thao tác. Greasemonkey tự cung cấp một cách rất dễ dàng để chỉnh sửa và bật / tắt tập lệnh trong khi thử nghiệm.

Ví dụ, đây là tập lệnh "Google Hai cột":

result2 = '<table width="100%" align="center" cellpadding="10" style="font-size:12px">';
gEntry = document.evaluate("//li[@class='g'] | //div[@class='g'] | //li[@class='g w0'] | //li[@class='g s w0']",document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
for (var i = 0; i < gEntry.snapshotLength; i++) {
  if (i==0) { var sDiv = gEntry.snapshotItem(i).parentNode.parentNode; }
  if(i%2 == 0) { result2 += '<tr><td width="50%" valign="top">'+gEntry.snapshotItem(i).innerHTML+'</td>'; }
  if(i%2 == 1) { result2 += '<td width="50%" valign="top">'+gEntry.snapshotItem(i).innerHTML+'</td></tr>'; }
}
sDiv.innerHTML = result2+'</table>';

if (document.getElementById('mbEnd') !== null) { document.getElementById('mbEnd').style.display = 'none'; }

10

Đây là một chương trình c # dựa trên văn bản rất thô sơ mô phỏng hành động quay của máy đánh bạc. Nó không bao gồm các tỷ lệ thắng khác nhau hoặc thanh toán bằng tiền mặt, nhưng đó có thể là một bài tập tốt cho sinh viên.

Xin lỗi rằng nó là hơn 10 dòng.

string[] symbols = new[] { "#", "?", "~" }; // The symbols on the reel
Random rand = new Random();

do
{
    string a="",b="",c="";

    for( int i = 0; i < 20; i++ )
    {
        Thread.Sleep( 50 + 25 * i ); // slow down more the longer the loop runs

        if( i < 10 )
            a = symbols[rand.Next( 0, symbols.Length )];

        if( i < 15 )
            b = symbols[rand.Next( 0, symbols.Length )];

        c = symbols[rand.Next( 0, symbols.Length )];

        Console.Clear();
        Console.WriteLine( "Spin: " + a + b + c );
    }

    if( a == b && b == c )
        Console.WriteLine( "You win. Press enter to play again or type \"exit\" to exit" );
    else
        Console.WriteLine( "You lose. Press enter to play again or type \"exit\" to exit" );
}
while( Console.ReadLine() != "exit" );

9

Với Tcl, bạn có một trình soạn thảo văn bản đơn giản với nút lưu trong khoảng 12 dòng mã (nhưng không mở, sẽ mất thêm 8 dòng nữa). Nó hoạt động trên tất cả các nền tảng tiêu chuẩn:

pack [frame .toolbar] -side top -fill x
pack [button .save -text save -command save] -in .toolbar -side left
pack [scrollbar .vsb -orient vertical -command [list .text yview]] -side right -fill y
pack [text .text -wrap word -yscrollcommand [list .vsb set]] -side left -fill both -expand true
proc save {} {
    set filename [tk_getSaveFile]
    if {$filename ne ""} {
        set f [open $filename w]
        puts $f [.text get 1.0 end-1c]
        close $f
    }
}

Tôi nhận ra mục tiêu là 10 dòng, vì vậy nếu bạn muốn dính vào 10 dòng trở xuống, một trình soạn thảo văn bản đơn giản không tải hoặc lưu chỉ là hai dòng. Điều đó không quá tồi tàn.

pack [scrollbar .vsb -orient vertical -command [list .text yview]] -side left -fill y
pack [text .text -wrap word -yscrollcommand [list .vsb set]] -side left -fill both -expand true

Thực hiện một trong các khối mã ở trên với " tên tệp mong muốn " trên nền tảng bạn chọn. Mong muốn có hầu hết * nix và mac nhưng bạn sẽ phải cài đặt thủ công cho windows.

Để tiến thêm một bước, kịch bản hai dòng đó cũng có thể được viết bằng python, mặc dù phải mất tám dòng, vẫn nằm dưới mục tiêu 10 dòng:

from Tkinter import *
root=Tk()
text = Text(wrap="word")
sb = Scrollbar(orient="vertical", command=text.yview)
text.configure(yscrollcommand=sb.set)
sb.pack(side="right", fill="y")
text.pack(side="left", fill="both", expand=True)
root.mainloop()

9

Làm thế nào về một bookmarklet? Nó sẽ chỉ cho họ cách thao túng thứ gì đó mà họ sử dụng hàng ngày (Internet) mà không cần bất kỳ công cụ phát triển nào.


Tôi muốn đề xuất này, nhưng sẽ tốt hơn với một ví dụ và những gì có thể được dạy từ nó. Chẳng hạn như ví dụ được đưa ra trong câu hỏi: [code] javascript: alert (4 (5 * 5) / 10 + 9 (.25 + .75)); [/ code] để hiển thị thứ tự hoạt động.
tylermac

8

Nếu bạn có thể đủ khả năng cho phần cứng, sử dụng bảng Arduino + xử lý sẽ tạo ra một số thứ khá tuyệt, mặc dù nó có thể là một chút tiên tiến cho những người có thể không quan tâm đến lập trình.


8

Tôi đã viết về điều này gần đây trong một bài viết "Chương trình ngắn nhất, hữu ích nhất tôi từng viết."

Tóm tắt: Tôi đã viết một ứng dụng VB6 3 dòng vào năm 1996 mà tôi vẫn sử dụng hàng ngày. Khi exe được thả trong thư mục "Gửi đến". Nó cho phép bạn nhấp chuột phải vào một tệp trong explorer và gửi đường dẫn đầy đủ của tệp đó vào bảng tạm.

Public Sub Main()   
    Clipboard.SetText Command$   
End Sub  

Tại sao Clipboard.Clear? Nó xóa tất cả nội dung khỏi bảng tạm, ngay cả dữ liệu phi văn bản (ví dụ: dữ liệu hình ảnh). Điều này thường không phải là những gì bạn muốn ở tất cả.
Konrad Rudolph

Chà, có lẽ chương trình ngắn nhất cần phải bằng một nửa kích thước hiện tại của nó ...
JohnFx

Thực sự gọn gàng. Tôi ghét phải gõ những con đường dài và sau đó tự hỏi nếu có một lỗi đánh máy
Sylverdrag

AFAIK trong các phiên bản windows "hiện đại" chính xác là những gì nó làm khi bạn sao chép tệp (Ctrl + C) ... Chỉ cần sao chép tên tệp. Ai đó có thể thử cái này không (vì tôi không có cửa sổ)?
opatut

Tôi có Windows 7 và nó KHÔNG làm điều đó.
JohnFx

7

Thật thú vị khi bạn đề cập đến bộ Mandelbrot, vì việc tạo ra các fractals với GW-BASIC là điều làm tôi yêu thích lập trình trở lại ở trường trung học (khoảng năm 1993). Trước khi chúng tôi bắt đầu tìm hiểu về fractals, chúng tôi đã viết các ứng dụng độ lệch chuẩn nhàm chán và tôi vẫn dự định đi vào ngành báo chí.

Nhưng một khi tôi thấy chương trình BASIC dài, khó viết đó tạo ra "địa hình gãy xương", tôi đã bị cuốn hút và tôi không bao giờ nhìn lại. Nó thay đổi cách tôi nghĩ về toán học, khoa học, máy tính và cách tôi học.

Tôi hy vọng bạn tìm thấy chương trình có ảnh hưởng tương tự đối với học sinh của bạn.


Điều đó thật tuyệt vời cho một dự án học kỳ. Tôi ước tôi đã nghĩ về điều đó khi tôi đang giảng dạy.
Mike Dunlavey


6

Tôi chắc chắn rằng nó sẽ biến thành hơn 10 dòng mã, nhưng bạn đã xem xét một ứng dụng dựa trên biểu mẫu trong đó việc nhấn các nút có làm những việc như thay đổi màu nền hoặc thay đổi kích thước của văn bản không? Điều này sẽ cho họ thấy làm thế nào các chương trình tương tác làm việc. Nó cũng sẽ cho họ thấy rằng họ, với tư cách là lập trình viên, hoàn toàn kiểm soát những gì máy tính (chương trình) làm.

Hy vọng rằng nó sẽ khiến họ đưa ra đề xuất cho những thứ khác mà họ có thể thay đổi và sau đó sang những thứ khác mà họ có thể muốn làm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.