R2A: มันต้องมีวิธีที่ง่ายและเร็วกว่านี้


ในวันศุกร์ที่ผ่านมาผมขอความช่วยเหลือคุณภัคชุดา วสุวัต (ยุ้ย) ซึ่งเป็นผู้ประสานงานของสำนัก 7 ของ สสส. ให้ช่วยส่งรายการอีเมลของภาคีของ สสส. มาให้ผมเพื่อผมจะได้ใช้ในบริการหนึ่งที่โครงการ Digital KM ของเราได้สร้างเพื่อภาคีต่างๆ ครับ

คุณยุ้ยส่งมาให้ผมเป็น Microsoft Word ไฟล์ โดยในไฟล์นั้นมีตารางประกอบด้วยชื่อภาคีและอีเมลติดต่อ ในขณะที่สิ่งที่ผมต้องการเพื่อโปรแกรมของผมคือไฟล์ (text file) ที่มีรายการอีเมลเรียงหนึ่งอีเมลต่อหนึ่งบรรทัดครับ

เพื่อจะให้ได้เป็นผลลัพธ์ที่ผมต้องการนั้น มีวิธีการทำอยู่สองวิธีครับ คือใช้ "คน" และใช้ "เครื่อง"

วิธีใช้ "คน" คือให้ นศ. ฝึกงาน copy อีเมลออกมาจากไฟล์ทีละอีเมลจนครบ ในขณะที่ copy ออกมานั้นก็ให้ดูด้วยว่ามีอีเมลซ้ำหรือไม่จะได้ไม่ใส่รายการอีเมลซ้ำในไฟล์

ส่วนวิธีใช้ "เครื่อง" คือการเขียนโปรแกรมดึงอีเมลออกมาจากไฟล์ โดยโปรแกรมนั้นตรวจสอบว่าอีเมลที่ดึงมาแต่ละอันซ้ำกันหรือไม่ด้วย

วิธีไหนง่ายกว่ากันครับ?

คำถามนี้ตอบยากครับ การใช้คนย่อมง่ายกว่าแน่ แต่จะใช้เวลามาก และปัญหาที่จะตามมาคือเรื่องการ copy อีเมลจำนวนสามร้อยกว่าๆ รายการนั้นย่อมไม่ใช่เรื่องสนุก ความผิดพลาดย่อมเกิดขึ้นได้แน่นอน

ส่วนการใช้เครื่องนั้นในกรณีเช่นนี้กลับทำได้ง่ายกว่า

ผมเปิดไฟล์โดยคลิกใน Gmail ตรง "View as HTML" แล้ว save ไฟล์นั้นลงในเครื่องผม ด้วยวิธีนี้ผมแปลง Word file เป็น HTML file แล้ว

ขั้นต่อไปผมเขียนโปรแกรมเพื่อดึงเฉพาะอีเมลออกมาจาก HTML file นั้น ดังนี้

#! /usr/bin/env perl

%h = ();
while (<>) {
    if (/mailto:([^"]+)/) {
        $email = $1;
        unless ($h{$email}) {
            print lc($email) . "\n";
            $h{$email} = 1;
        }
    }
}

ที่จริงโปรแกรมนี้มีความยาวเพียงสิบบรรทัด แต่ผมใส่คำอธิบายไว้ด้วยทำให้ยาวขึ้น (คำอธิบายโปรแกรมคือบรรทัดที่เริ่มต้นด้วยเครื่องหมาย #) ดังนี้

#! /usr/bin/env perl
# define a hash for duplication checking
%h = ();
# loop over each line received from STDIN
while (<>) {
# check the line with a regular expression to extract
# an email address from it
if (/mailto:([^"]+)/) {
# save the extracted email to $email
$email = $1;
# if the email is not in the checking hash
unless ($h{$email}) {
# lowercase the email and print to STDOUT
print lc($email) . "\n";
# save the email to the checking hash
$h{$email} = 1;
}
}
}

แล้วเรียกใช้โปรแกรมนี้ในเครื่องคอมพิวเตอร์ผมซึ่งใช้ระบบปฎิบัติการ Ubuntu เช่นนี้

./thf_emails.pl <thf_partners.html > thf_partners.txt

ผมก็ได้รายการอีเมลทั้งหมดของภาคี สสส. โดยไม่ต้องให้ นศ. ฝึกงานช่วยผมทำ ซึ่งกระบวนการทั้งหมดผมใช้เวลาไม่เกินครึ่งชั่วโมง และเมื่อรายการอีเมลมีการเปลี่ยนแปลงในอนาคต ผมจะใช้เวลาเพียงไม่กี่นาทีหลังจากได้รับไฟล์ใหม่ เพราะโปรแกรมเขียนเสร็จแล้วตั้งแต่ครั้งนี้

นี่คือ "อานุภาพของคอมพิวเตอร์" ครับ

คอมพิวเตอร์คือเครื่องมือที่มีให้เราประยุกต์ใช้เพื่อลดเวลาในการทำงานที่เป็นงานไม่ได้ใช้ความคิดในการทำงาน งานเหล่านั้นได้แก่งานที่เป็นงาน routines ทั้งหลายครับ

หัวใจของผู้เรียนวิทยาการคอมพิวเตอร์หรือวิศวกรรมคอมพิวเตอร์คือ เมื่อพบงาน routines สักอย่างหนึ่ง เขาต้องช่างคิดเพื่อตอบให้ได้ว่า

"มันต้องมีวิธีที่ง่ายกว่านี้และเร็วกว่านี้"

คอมพิวเตอร์ในปัจจุบันมีศักยภาพในการทำให้งานที่ต้องทำซ้ำๆ และไม่ใช้ทักษะความคิด (หรืองาน routines ทั้งหลาย) เป็นงานอัตโนมัติได้หมดแล้ว (เพื่อให้มนุษย์ได้ทำงานที่ใช้ความคิดมากกว่า)

แต่จะทำได้ดังนั้นก็ต้องอาศัยทักษะในการประยุกต์ใช้โปรแกรมหรือเขียนโปรแกรมแก้ไขปัญหา ซึ่งทักษะเหล่านี้ไม่ใช่เกิดขึ้นภายในชั่วข้ามคืน แต่เกิดจากการฝึกฝนมาอย่างยาวนาน

ที่ผมเขียนโปรแกรมแก้ไขปัญหานี้ได้ภายในเวลาอันสั้นไม่ได้หมายความว่าผมเก่ง แต่หมายความว่าผมฝึกฝนเขียนโปรแกรมอย่างต่อเนื่องมาตลอด 20 ปีตั้งแต่ผมเริ่มรู้จักคอมพิวเตอร์

ผมเชื่อว่างานเขียนโปรแกรมเป็นแขนงหนึ่งของศิลปะ ซึ่งต้องอาศัยเวลาในการฝึกฝนในทักษะเพื่อให้เข้าถึงซึ่ง "ศิลป์" นี้

ผู้เรียนรู้ในการเขียนโปรแกรมคือผู้ฝึกฝนเพื่อให้เกิดศิลป์ในการทำ R2A หรือ Routines to Automation ครับ

งาน routine ทุกงานสามารถแปลงเป็น automation ได้ทั้งสิ้น ผมเชื่อว่าไม่มีข้อแม้ครับ

เมื่อวันที่ 5 ส.ค. ที่ผ่านมาผมสอนนักศึกษาปีสองเรื่อง "The Art of Programming" โดยบอกนักศึกษาว่าที่ผมพูดนี่นักศึกษาคงยังไม่เข้าใจหรอก เพราะพึ่งเริ่มต้นเรียนรู้การเขียนโปรแกรม แต่เมื่อได้อยู่ในวิชาชีพนี้ไปสักพักก็จะเริ่มซึมซับถึงความหมายเหล่านี้มากขึ้นเรื่อยๆ ตามลำดับ

การได้เรียนรู้ดื่มด่ำกับ "ศิลป์" นี้นับเป็นความสุขอย่างหนึ่งของวิชาชีพนี้ เช่นเดียวกันกับนักเขียน หรือนักดนตรี หรืออื่นๆ และรางวัลที่สำคัญในวิชาชีพนี้คือความสุขในการได้ทำงานศิลป์นี่เอง ก็เหมือนกับผู้ฝึกฝนในศิลปะประเภทอื่นๆ เช่นเดียวกัน

บันทึกนี้เป็นตัวอย่างหนึ่งของ "ศิลป์" ในการเขียนโปรแกรม และหวังว่าแนวคิดของการฝึกฝนเพื่อเข้าถึง "ศิลป์" ในการเขียนโปรแกรมจะได้กลายเป็นส่วนหนึ่งในการเรียนการสอนในวิชาการด้านนี้ครับ

หมายเลขบันทึก: 201549เขียนเมื่อ 16 สิงหาคม 2008 19:07 น. ()แก้ไขเมื่อ 8 พฤษภาคม 2012 11:32 น. ()สัญญาอนุญาต: จำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (9)
  • เจริญพรนะโยมธวัชชัย
  • มาอ่านอานุภาพของคอมพิวเตอร์
  • อ่านแล้วทึ่งในความสามารถของโยม
  • อนุโมทนาสาธุ
  • บุญรักษา

กราบเรียนพระอาจารย์ ยินดีที่พระอาจารย์มาเยี่ยมอ่านบันทึกครับ

อาจารย์ครับ อ่านมาตลอด นานๆ จะแวะหยุดคุย

เรื่อง programming can be art! นี่ (คำโฆษณาของโปรแกรม pl/sql dev.)

มีไม่กี่คนที่ทำให้ผมเห็นเป็นรูปธรรมชัดเจนขนาดนี้

อ่านแล้วมีความสุขครับ :-)

ไม่แน่ใจว่าสิ้นเดือนจะได้เจอกันใน barcamp2 รึเปล่า

เข้าใจ อานุภาพ ของความรักจริงในงานที่ทำ ความอดทน ใจเย็น และความเอาจริงเอาจัง

นับถือ ในผลงาน 20 ปี ของอาจารย์

มหัศจรรย์ ว่า เออ คอมพิวเตอร์ มันวิเศษ ถ้าใช้มันเป็น

จุดสำคัญ อยู่ตรงนี้แหละค่ะ ว่า แต่ละคนจะอดทนสร้างศิลป สำหรับตนเองขนาดไหน

แต่ของอาจารย์ เป็นระดับเซียน ออกมาเป็นศิลป สำหรับมวลชน แล้วละค่ะ

ขอบคุณที่แวะเยี่ยมครับคุณ Rerng®IT ผมไม่แน่ใจว่าจะได้เดินทางไป BarCamp2 หรือเปล่าครับ แต่ช่วงนั้นต้องเดินทางไปกรุงเทพฯ พอดีครับ อาจหาโอกาสอยู่จนไปถึง BarCamp2 เลยครับ

ขอบคุณคุณหมอรวิวรรณ ความสำคัญของการเรียนรู้สร้างงานศิลป์นี่อยู่ที่ความอดทนจริงๆ ครับ พรสวรรค์มีค่าน้อยกว่าพรแสวงครับ

  • เห็นด้วยอย่างยิ่งครับ
  • ผมชอบประโยคนนี้จังเลยครับ "ที่ผมเขียนโปรแกรมแก้ไขปัญหานี้ได้ภายในเวลาอันสั้นไม่ได้หมายความว่าผมเก่ง แต่หมายความว่าผมฝึกฝนเขียนโปรแกรมอย่างต่อเนื่องมาตลอด 20 ปีตั้งแต่ผมเริ่มรู้จักคอมพิวเตอร์"
  • มีคนเคยกล่าวว่า อย่าดูที่ความสำเร็จ แต่ให้ดูที่อุปสรรค การฝึกฝน  ประสบการณ์ .....
  • ขอบคุณมากครับ

ขอบคุณครับ ประสบการณ์พิสูจน์จริงๆ ครับ ว่าพรใดๆ ก็ไม่สู้พรแสวงครับ

อ่านแล้วมีไฟ ต้องรีบไปฝึกฝนเขียนโปรแกรมครับ

ขอบคุณมากครับอาจารย์

-สวัสดีค่ะ อ.P

-ครูต้อยเพิ่งเข้ามาเรียนรู้ได้ 2 เดือนเศษๆ แรกๆเข้ามาอ่านแบบเป็นงงไปหมด เพราะไม่มีความรู้พื้นฐานเรื่องคอมพิวเตอร์ แม้งานพิมพ์ง่ายๆ

ได้พยายามแสวงหา ในg2k ทำให้อาการงง  คงเหลือมึนๆ  ไม่รู้เมือ่ไหร่จะโล่ง คงอีกนานค่ะ

-ชื่นชมอในคะ 10 ปีกับการปั้นคอมให้อยู่ในมืออย่างน่าอัศจรรย์

-นับถือค่ะ

พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท