Most popular

วันอาทิตย์ที่ 27 มีนาคม พ.ศ. 2554

ทดสอบการใช้ JQuery กับ ASP.NET ที่มี Master Page

จากการที่ JQuery เริ่มโด่งดังขึ้นมาจากความนิยมใช้ AJAX (Asynchronous JavaScript and XML) และเป็น Framework ที่ดีที่สุดตัวนึง ดีขนาดที่ Microsoft ยังเลือกเอาไปบรรจุไว้ใน Visual Studio 2010
ทำให้ผู้เขียนเริ่มสนใจ หลังจากที่ผู้เขียนไม่ค่อยได้ใส่ใจในการศึกษาภาษาที่ใช้ในส่วนของ DOM (Document Object Model) ในปัจจุบันเกือบทั้งหมดคือ Java Script นั่นเอง
จากสมัยก่อน เมื่อประมาณ 4-7 ปีก่อนที่ Java Script ยังเป็นแค่ภาษากิ๊กก๊อกที่สามารถคัดลอกได้จากหน้าเพจ และใช้เพียงแค่แต่งแต้มสีสันของเพจเท่านั้น ตอนนี้ยังมีการใช้งานแบบ AJAX ซึ่งมีประสิทธิภาพมากขึ้น ถึงแม้ AJAX จะไม่ใช่สิ่งจำเป็นเสมอไปในการเขียนเว็บไซต์ แต่ก็พูดได้ว่าการใช้ AJAX เข้ามาช่วยมันเป็นสิ่งที่ทำให้เว็บดีขึ้น ดูเป็นมืออาชีพมากขึ้น และช่วยลดปริมาณข้อมูลที่ส่งผ่านกันระหว่าง Browser กับ Server ได้

ตอนนี้ผู้เขียนจะทดสอบ JQuery กับ Visual Studio 2008 Service Pack 1 ซึ่งผู้เขียนใช้ทำงานอยู่เป็นประจำ โดยจะทดสอบกับหน้าเพจเปล่า และหน้าเพจที่มีการใช้ Master Page ด้วย

อันดับแรกสร้าง Project เป็น ASP.NET Web Application

จากนั้นสร้าง Folder ย่อยใน Solution Explorer

ใน Folder JQuery นั้นผู้เขียนได้ใส่ JQuery Framework Libraly ไว้ เป็น Version 1.4.1 จำนวนไฟล์ 2 ไฟล์ คือ
  •     JQuery/jquery-1.4.1.min.js
  •     JQuery/jquery-1.4.1-vsdoc.js 
ดาวน์โหลดได้ฟรี ที่ http://docs.jquery.com/Downloading_jQuery

ผู้เขียนสร้าง หน้าเพจชื่อ "WebForm1.aspx"
และสร้าง Master Page ชื่อ "Site1.Master" ใน Folder ชื่อ "masterPage"
อีกเพจนึงคือ Content Page ชื่อ "index.aspx" เพจนี้สร้างเพื่อใช้งานกับ Master Page "Site1.Master"

ผู้เขียนเริ่มทดลองกับเพจ  "WebForm1.aspx"  โดยที่ผู้เขียนจะใช้ Web Control ของ ASP.NET ที่ชื่อว่า
"ScriptManager" และวางปุ่ม Button เพื่อทดสอบ

(ScriptManager อยู่ใน Tab AJAX Extensions)
จากนั้นผู้เขียนให้ Control ScriptManager1 เป็นตัว Reference มาที่ JQuery Framework โดยเลือกที่ Property Scripts และกำหนด Path ของไฟล์ทั้ง 2 ไฟล์ของ JQuery

 ถ้าไปดูหน้า Source Code ของ ScriptManager1 จะเป็นแบบนี้
<asp:ScriptManager ID="ScriptManager1" runat="server">
     <Scripts>
        <asp:ScriptReference Path="../JQuery/jquery-1.4.1.min.js" />
        <asp:ScriptReference Path="../JQuery/jquery-1.4.1-vsdoc.js" />
     </Scripts>
</asp:ScriptManager>


ทดสอบ Code Java Script ให้แสดงกล่องข้อความ "Hello World"
 <script type="text/javascript">
      $(document).ready(function () {
           $("#Button1").click(function () {
                    alert("Hello World");
           });
       });
  </script>

ทดสอบโดย Compiler และ run และกดปุ่ม Button1 ว่าทำงานหรือไม่

ปรากฎว่าทำงานตามคำสั่ง Java Script ที่เขียนเอาไว้
จากนั้นผู้เขียนก็มาออกแบบ Master Page โดยใส่ Control ScriptManager อยู่อันเดียวตามรูป

ส่วนใน Content Page ผู้เขียนใส่ปุ่ม 2 ปุ่มคือ Button1 ซึ่งเป็น Server Control และ Button2 คือ input type html ดัง Code ด้านล่างนี้
<asp:Button ID="Button1" runat="server" Text="Button (Server Control)" />
<input id="Button2" type="button" value="button (HTML)" />

จากนั้นผู้เขียนจะใช้ Java Script JQuery ในการทดสอบเหมือนเดิม แต่ใส่คำสั่งในทั้ง 2 ปุ่ม โดยใส่ภายใน tag ContentPlaceHolder
<script type="text/javascript">
     $(document).ready(function() {
        $("#Button2").click(function() {
               alert("Hello World");
         });

        $("#Button1").click(function() {
               alert("Hello World");
         });
     });
</script>



จากนั้นก็ run ทดสอบทั้ง 2 ปุ่ม จะได้ผลดังนี้

ปุ่มแรกคือปุ่มที่เป็น Server Control จะเห็นว่าปุ่มไม่ทำงานตามคำสั่ง

ปุ่มที่ 2 ซึ่งเป็น html input type จะสามารถทำงานได้ตามปกติ

สาเหตุเกิดจาก JQuery หา Selection Name ที่ระบุไม่เจอ คือ $("#Button1")
นี่คือจุดอ่อนอีกจุดของ ASP.NET กับ JQuery เพราะการ Design ของ ASP.NET ต่างจาก php และ jsp ที่ส่วนใหญ่จะใช้ html เป็นหลัก และทำงานในภาษาที่เป็น Script อยู่ตลอด

สาเหตุที่ JQuery หา Selection #Button ไม่พบก็เพราะว่า Server Control ที่ Compiler แล้วส่งมาที่ Browser ชื่อ ID ของมันเปลี่ยนไป โดยดูที่ View Source ที่ Browser จะพบสาเหตุครับ

 <input type="submit" name="ctl00$ContentPlaceHolder1$Button1" value="Button (Server Control)" id="ctl00_ContentPlaceHolder1_Button1" />

Code ด้านบนนี้คือปุ่ม Button1 ที่เป็น Server Control ที่ ID Name ได้เปลี่ยนไปเป็น "ctl00_ContentPlaceHolder1_Button1" ดังนั้นจึงต้$29;งอ้างอิงใช้งานชื่อนี้แทน

<input id="Button2" type="button" value="button (HTML)" />

วันพุธที่ 23 มีนาคม พ.ศ. 2554

Delphi OOP เรื่อง Class กับการใช้งาน

Delphi นั้นเป็นเครื่องมีที่ผู้เขียนใช้งานมานาน และมันก็ยังใช้งานดีอยู่ เป็นเรื่องมือที่ใช้ภาษา Object Pascal ในการพัฒนา Object Pascal ต่างจาก Pascal เดิมตรงที่ว่าเพิ่งแนวคิดการพัฒนาเชิงวัตถุ (OOP) เข้าไป ก็คล้ายกับภาษายุคเดียวกันอย่าง C และ C++
เริ่มแรกตอนที่ผู้เขียนใช้ Delphi ใหม่ๆ (ตอนนั้นมี Visual Basic 6 ของ Microsoft และ Delphi 5 ของ Borland) ผู้เขียนเขียน VB6 มาก่อนจึงค่อนข้างถนัดการเขียนแบบ Procedural (เป็นโปรแกรมย่อย) พอมาลองใช้ Delphi ผู้เขียนก็เขียนแบบเดิมคือ Procedural อีกซึ่ง Delphi รองรับอยู่แล้ว และไม่บังคับให้เขียนเป็น OOP จนผู้เขียนได้มีโอกาศเปลี่ยนงานมาทำ Delphi โดยตรง จากมือใหม่ก็เริ่มกลายเป็นมืออาชีพขึ้นมา แต่ทว่า หลายๆบริษัทที่ผู้เขียนเคยทำงานมามักจะเขียนเป็นแบบ Procedural คล้าย VB6 โดยเพียงใช้ unit.pas เก็บ Source code โปรแกรมย่อยๆเหล่านั้น ผู้เขียนคิดว่ามันไม่น่าจะใช่ OOP จริง จากการที่ผู้เขียนได้ค้นคว้าหาข้อมูล และมีรุ่นพี่ๆแนะนำในช่วงนั้น ผู้เขียนยังได้พยายามค้นคว้า OOP ของภาษาอื่นด้วย เช่น Java และ C++ เพื่อให้เข้าใจ และนำมาใช้ในการ Design Code ในงานของตัวเอง
ขั้นแรกเราต้องรู้ก่อนว่า Class คืออะไร ซึ่ง Class เป็นชนิดข้อมูล(Type) ที่มีอยู่ทุกภาษาที่อยู่ในหลัก OOP ผู้เขียนขอให้คำจำกัดความสั้นๆว่า Class นั้นก็คือส่วนที่เก็บคุณสมบัติต่างๆ ของ Object เอาไว้ ซึ่งภายใน Class อาจจะประกอบด้วยหลายสิ่ง เช่น Variable , Method (ซึ่งใน Delphi ก็คือ Function และ Procedure) , property 
ผู้เขียนจะสาธิตการเขียน Class ใน Delphi เพื่อนำมาใช้งานดังนี้
1. ให้เราสร้าง Project ขั้นมาเป็น VCL Form แล้ววาง Button  เราจะใช้ Class ในการเปลี่ยน Caption ของ From


(Code ใน Form)


จาก Code ด้านบนแสดงให้เห็นส่วนของ Class TForm1 ซึ่งได้สืบทอดมาจาก Class TForm ของ Delphi
 TForm1 = class(TForm)
    Button1: TButton;         //ส่วนประกาศสมาชิกของคลาส
private
   { Private declarations }  //ส่วนประกาศ Interface ของคลาสซึ่งจะเป็นส่วนตัว
public
   { Public declarations }   //ส่วนประกาศ Interface ของคลาสซึ่งจะเป็นสาธารณะ
end;

2.  สร้าง Class ขึ้นมา ในที่นี้ผู้เขียนใช้ชื่อว่า TClass1 โดยสร้าง Class ด้านล่างของ Type
 3. สร้าง Method ภายใน Class TClass1 ชื่อ setCaption โดยให้เป็นแบบ Public พร้อมทั้งประกาศ Instance Class ใต้ var ซึ่งเป็นส่วนประกาศแบบ Global ของ unit โดยใช้ชื่อ Class1



4. จากนั้นทดลองเรียกใช้งานจากการคลิ๊กของ Button1 โดยอ้างถึง Instance ชื่อ Class1 และเรียก Method setCaption พร้อมส่ง Parameter เป็น String ไปด้วย
 จากนั้น run โปรแกรมเพื่อทดสอบ
 จะเห็นว่าเมื่อกดปุ่มแล้ว คำสั่งในปุ่มจะไปเรียก Method setCaption ที่อยู่ใน TClass1 ผ่าน Instance Class ชื่อ Class1

หากเป็นการนำไปใช้งานจริงอาจมี Method มากมายที่อยู่ใน Class อาจมี Property หรือมีการทำ Override , Overload อีกมากมาย ผู้พัฒนาก็สามารถนำ Class ไปไว้ใน unit อื่นๆเพื่อเป็นที่รวบรวม Class ต่างๆก็ได้ ซึ่งเป็นการทำ Class library ไว้ใช้งานนั่นเอง

วันจันทร์ที่ 21 มีนาคม พ.ศ. 2554

Delphi 2010 ทดสอบการเชื่อมต่อกับ Web Service (.asmx)

ปกติผู้เขียนจะไม่ใช้ Delphi เชื่อมต่อ Web Service ผู้เขียนจะใช้ C#.Net เป็นหลักทั้งตัวของ Web Service และ Thin client เพราะเขียนในภาษาเดียวกันอีกทั้งการส่งผ่าน DataSet ก็ยังสะดวกกว่า แต่ในความที่ผู้เขียนผูกพันกับ Delphi ตั้งแต่ Delphi 5 จึงขอทดสอบเป็นประสบการณ์ โดยผู้เขียนจะใช้ Delphi 2010 เป็นตัวทดสอบ

1. เมื่อสร้าง Project เปล่าๆ ขึ้นมาแล้ว (สร้างโดยเลือก VCL Form) จะพบกับ Form เปล่า ผู้เขียนนำ Component HTTPRIO มาใช้บน Form ดังภาพ


2. ผู้เขียนนำเข้าไฟล์ที่เป็นประเภท WSDL (ไฟล์นี้เปรียบเสมือนคู่มือการใช้ฟังชั่นของ Web Service) โดยไปที่ File > New > Other... > Delphi project > Web Service และเลือก WSDL Importer


3. จากนั้นก็ใส่ที่อยู่ของ Web Service ตอนแรกก็ยังงง ว่ามันอยู่ที่ไหนเพราะ Web Service ของ .Net จะเป็นไฟล์ .asmx ก็แค่เติม "?WSDL" แล้วกด Next (ตามภาพ)
 

 พบ Dialog ถามถึง Version ของ Soap ที่ใช้ในการส่งข้อมูล ผู้เขียนเลือกเป็น Automatic


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


 4. จากนั้น Delphi จะทำการสร้าง unit ขึ้นมาเพื่อให้เราใช้งานกับ Web Service ตามที่ไฟล์ WSDL กำหนดไว้ ผู้เขียนตรวจสอบ Function ที่สร้างขึ้นมาเพื่อเชื่อมต่อว่าลิงค์ที่อยู่ถูกต้องหรือไม่

 5. ผู้เขียนเข้าไปตั้งค่า Properties ของ HTTPRIO1 เพื่อให้ทำงานกับ unit ที่ Delphi สร้างให้ โดยถ้าใส่ที่อยู่ในช่อง WSDLLocation ถูกแล้ว ค่าต่างๆจะมีให้เลือกเอง

 6. ทดสอบด้วยการใส่ Code ภายในปุ่ม Button1 Even Click

 procedure TForm1.Button1Click(Sender: TObject);
 Var
   
ws: Service1Soap;
 begin
   
ws:=email.GetService1Soap(false,'',nil);
    ShowMessage(ws.HelloWorld);

 end;


จาก Code เป็นการเรียกใช้ Method HelloWorld ที่เขียนไว้ที่ Web Service โดยจะส่งค่ากลับมาเป็น String


 

วันอาทิตย์ที่ 20 มีนาคม พ.ศ. 2554

เมื่อ Java และ MySQL ตกอยู่ในกำมือของ Oracle


Oracle วางแผนที่จะออก Java Virtual Machines หรือ JVM บนโครงการ OpenJDK แยกเป็น 2 แบบ คือ แบบฟรี และ แบบเสียเงิน

รายงานนี้ เกิดจากการส่งข่าวผ่านทางทวิสเตอร์ จากการสัมมนาของ Oracle ในเมืองซานฟรานซิโก โดยนาย Adam Messinger รองประธานของบริษัท Oracle ได้กล่าวว่า Oracle วางแผนที่จะออก JDK เวอร์ชั่น “premium” ซึ่งจะต้องเสียเงินเพื่อใช้งาน
เขาได้ระบุเพิ่มเติมว่า เวอร์ชั่น premium นี้ จะปรับประสิทธิภาพการทำงานให้สอดคล้องกับการทำงานร่วมกับฐานข้อมูล Oracle ได้ดียิ่งขึ้น และเป็นเหมือน JVM ประสิทธิภาพสูง (high-performance JVM)

แต่เขาก็ไม่ได้ระบุว่า JVM เวอร์ชั่น premium ซึ่งเสียเงินนี้ มีอะไรแตกต่างกับ เวอร์ชั่น ฟรี หรือเปล่า, หรือ จะเปิดจำหน่ายอย่างไร, หรือโดยเฉพาะเรื่อง “ราคา” ของเวอร์ชั่น premium นี้จะเท่าไร

ที่หลายคนเป็นห่วงในเรื่อง “ราคา” ค่อนข้างมาก ก็เพราะว่าจากอดีตที่ผ่านมา Oracle มักจะตั้งราคา หรือขึ้นราคาไปสูงมาก โดยเฉพาะล่าสุดที่ Oracle ปรับราคาการให้บริการ (support) MySQL (รุ่นที่ไม่ฟรี) ขึ้นไปเป็น 2 เท่าของราคาเดิม

Oracle ได้เข้าซื้อกิจการบริษัท Sun ที่เป็นเจ้าของ Java ไปเมื่อ 27 มค.2010 ด้วยราคา 7,400 ล้านเหรียญสหรัฐ และก็ปรับเปลี่ยนหลายอย่างในบริษัท Sun รวมทั้ง Java ในครั้งนี้ด้วย
ก็ไม่รู้ว่า นักพัฒนาโปรแกรม (developer) ของ Java จะคิดอย่างไร โดยเฉพาะบริษัทยักษ์ใหญ่อย่าง IBM ที่ซอล์ฟแวร์เกือบทั้งหมด พัฒนาด้วย Java จะปรับตัวอย่างไร
 ภาพตึกสำนักงานใหญ่ บริษัท ออราเคิล คอร์ปอเรชั่น (Oracle Corporation) รัฐแคลิฟอร์เนีย สหรัฐอเมริกา
ทุกตึกออกแบบให้มีหน้าตาเป็นรูปสัญลักษณ์ของฐานข้อมูล 


ที่มา : http://www.dreamincode.net/forums/topic/198677-oracle-planning-two-jvms-one-free-and-one-paid/ 
ที่มา : http://www.7boot.com/oracle-java-free-premium/ 

ซีชาร์ป ฉันเข้าใจความเป็นเธอ "เมื่อฉันหารเธอ"


ตอนแรกก็นึกแปลกใจกับค่า int กับ double หรือ float ที่มาหารกัน หารยังไงก็ไม่ค่อยจะถูกจนเมื่อฉันถึงบางอ้อ ว่า "เธอฉลาดกว่าที่คิด" เธอจะจับค่าทศนิยม หรือเลขจำนวนเต็มได้เองหลงหาวิธีทำซะตั้งนาน ที่แท้ก็เส้นผมบังภูเขา

จากตัวอย่าง สมมุติว่าเราต้องการแสดงชั่วโมงเป็นค่าทศนิยม วิธีแรกจะได้ค่าไม่ถุกต้องเช่น 2 ชั่วโมง คือ 2.0 สองชั่วโมงครึ่ง คือ 2.5 ถ้าเขียนสมการแบบนี้จะได้ผลผิดพลาด

ให้ n= 30 (คือ 30 นาที)

n / 60


ถ้ากดเครื่องคิดเลข 30 หารด้วย 60 จะได้ 0.5 แต่ตามผลลัพธ์ในโปรแกรมจะได้ 0สาเหตุก็เพราะซีชาร์ป เธอเห็นว่าในสมการทุกตัวเป็นเลขจำนวนเต็ม เธอจึงจัดให้ตามนั้น
แต่ถ้าเปลี่ยนเป็น

n / 60.00

หรือ ให้ n=30.00


ผลลัพธ์ที่ได้ออกมาก็จะถูกต้อง คือ ได้ 0.5 หรือครึ่งชั่วโมงนั่นเองส่วนตัวคิดว่าน่าจะเหมือนของน้องจาวานะ เห็น Concept ของภาษาแทบจะโคลนกันมาเลย

วันเสาร์ที่ 19 มีนาคม พ.ศ. 2554

อยากเก่งเขียนโปรแกรม อย่าใช้ภาษาที่ทำลายสมอง

จากประสบการเกือบ 10 ปี ผู้เขียนเป็นคนหลงไหลในการเขียนโปรแกรมมากพอดู สิ่งที่เจาะจงเป็นพิเศษก็คือตัวภาษา ผู้เขียนมักจะสนใจศึกษาเกือบทุกภาษา ไม่ว่าจะเป็น
Visual Basic , php , C# (.net) , Java , python , Object Pascal (Delphi) ,C++ ที่เคยหยิบมาใช้งานจริงๆ จังๆ เห็นจะมีอยู่ 4 ตัวคือ Visual Basic , php , C# (.net) ,  Object Pascal (Delphi) จึงรู้ว่าจุดเด่นจุดด้อยของแต่ละภาษาเป็นอย่างไร
แต่ผมจะมองตามหลักแนวคิด และการพัฒนาตัวเอง ไม่ได้เกี่ยวกับตัว Compiler เพราะ Compiler พัฒนาอยู่ตลอด แต่ภาษามันมีนิยามแห่งการเกิด เหมือนหลักปรัชญาที่ต่างกัน


ทุกภาษานั้นมีส่วนที่คล้ายกัน และส่วนที่ต่างกัน ส่วนที่คล้ายกันก็คือส่วนของ syntax หรืออักขระรูปแบบการเขียน เช่น การวน loop การใช้ expression if else หรือว่าจะเป็นการเขียน class การใช้ object instance ซึ่งเข้าไปอยู่ในเรื่องของเชิงวัตถุ หรือ OOP (Object Oriented Programming) ที่เราเรียกติดปากกัน
จากตัวภาษาที่ยกตัวอย่างด้านบน ที่ผู้เขียนได้ศึกษาและใช้งานมา เห็นว่ามีภาษา Visual Basic Version 6 และ python ที่จะต่างจากเพื่อน

กล่าวคือ VB6 นั้นเป็นภาษาแบบ Procedural มากกว่า การใช้หลักเชิงวัตถุนั้นค่อนข้างลำบากและเป็นไปอย่างไม่มีประสิทธิภาพ หมายความว่าการเขียนแบบ Procedural จะทำให้เขียนโปรแกรมง่าย เป็นการเขียนโปรแกรมส่วนย่อยๆ ออกไป และมีการใช้ Object มาตรฐานเท่านั้น ซึ่งทำให้มือใหม่ที่หัดเขียนนั้นชื่นชอบ และเขียนได้ง่าย (ผู้เขียนก็เริ่มต้นจาก VB6 เช่นกัน)
สามารถพัฒนาโปรแกรมได้อย่างรวดเร็ว แต่ในขณะเดียวกันจะทำให้ผู้พัฒนาโปรแกรมไม่พัฒนาตนเอง และไม่สามารถเข้าใจในหลักการเขียนโปรแกรมเชิงวัตถุได้ เห็นผลได้ชัดเจนจากการที่มีโปรแกรมเมอร์ VB6 บางส่วนนั้น ไม่สามารถเขียนและเข้าใจใน Visual Basic .Net ได้ จำเป็นต้องไปศึกษาเพิ่มเติมในเรื่อง OOP เพราะ VB.Net นั้นสามารถเขียนโปรแกรมเชิงวัตถุได้อย่างสมบูรณ์


ส่วน python นั้นเป็นภาษาที่แตกต่างจากพวกทั้งแนวคิด และ syntax เพราะเป็นภาษาสมัยใหม่ แนวคิดคือ "สิ่งที่คุณต้องทำอยู่แล้วไม่ต้องทำอีก" มี Compiler ที่ฉลาดมาก มีการเขียน Code ที่สั้นกระชับ มองผ่านๆจะไปเหมือนภาษารุ่นลุงอย่าง Perl

แต่ทั้ง VB6 และ python ต่างมีการทำงานของ Compiler ที่ช้าเหมือนกัน เนื่องจากมีอักขระและกฎเกณฑ์ในการเขียนที่น้อย Compiler จึงมีหน้าที่จัดการให้ทั้งหมด

แต่ถ้าถามว่าภาษาไหนทำลายสมอง ผู้เขียนหมายความว่าทำให้ผู้พัฒนาเคยตัว ในความเห็นส่วนตัวของผู้เขียนมองง่ายๆ คือ "ภาษาที่ไม่มีอักขระจบคำสั่ง (;)" ในที่นี้มีอยู่ 2 ภาษาคือ Visual Basic (All Version) และ python ผู้เขียนเห็นว่าการที่เราไม่ต้องใช้เครื่องหมาย ";" เมื่อจบคำสั่งผู้พัฒนาควรรู้และรอบคอบ และสามารถประหยัดบรรทัดได้ อย่างไรก็ตามการวางแผนในการพัฒนาโปรแกรมอาจเป็นสิ่งที่สำคัญกว่าภาษาที่ใช้ ภาษาที่บังคับให้ผู้พัฒนาต้องเขียนเป็นหลักการเชิงวัตถุนั้นยิ่งดี ทำให้ผู้พัฒนารุ่นใหม่ๆ มีประสบการณ์และเข้าใจมากขึ้น เช่น C# หรือ Java แต่ผู้เขียนคงไม่แนะนำให้ไปลุยกับภาษาอย่าง C++ เพราะท่านจะต้องผจญภัยกับความยุ่งยากเกี่ยวกับ type ของข้อมูล อาจจะทำให้มือใหม่หลงทาง ถอดใจไปเสียก่อน