ผมเป็นคนที่ชอบศึกษาเรื่องภาษาเขียนโปรแกรม ดังจะเห็นได้จาก จำนวนบล็อกที่ผมเขียนเกี่ยวกับภาษาเขียนโปรแกรม ที่มีมากกว่าในเรื่องอื่น ๆ จากการศึกษาโดยการเข้าไปหาข้อมูลในอินเตอร์เนตพบว่า เรื่องภาษาเขียนโปรแกรมเป็นเรื่องศาสนา คือ เป็นเรื่องที่มีพื้นฐานอยู่บนความเชื่อ มากกว่าเหตุผล
ทฤษฎีทางความเชื่อเกี่ยวกับภาษาเขียนโปรแกรมจำนวนมาก ได้ถูกกล่าวอ้างโดยไม่ได้รับข้อพิสูจน์ โดยเฉพาะจากเหล่าสาวกของภาษานั้น ๆ บางครั้งเวลาผมอ่านก็เคลิ้มตามไปเหมือนกัน บางครั้งก็อดตั้งคำถามไม่ได้ว่า มันจะจริงเหรอ ???
หมายเหตุ : ขอโฆษณาต้นฉบับหน่อยครับ ที่ BioLawCom.De :D
ผมจึงรู้สึกว่า น่าจะเขียนบล็อกขึ้นมาหนึ่งบล็อก เพื่อเปรียบเทียบคุณสมบัติต่าง ๆ ของภาษาเขียนโปรแกรมขึ้นมาหนึ่งบล็อก เพื่อเปรียบเทียบให้เห็นกันจะ ๆ และพยายามเป็นกลางให้มากที่สุด (อันนี้แหละยาก) เผื่อว่าใครจะเอาข้อมูลไปใช้ประกอบการตัดสินใจ โดยภาษาที่ผมจะนำมาเปรียบมวยมีด้วยกัน 3 ภาษา คือ Java, Python และ Ruby เพราะเป็นภาษาที่ได้รับความนิยมในขณะนี้ และดูที่อนาคตจะไปได้สวย (จริง ๆ อยากเขียน C# เหมือนกัน แต่ดูเหมือน C# จะแผ่วไปเยอะในช่วงหลัง)
อันที่จริงมีคนเปรียบมวย Python กับ Java ไว้แล้วเยอะเหมือนกัน ไม่ว่าจะเป็น Python & Java: Side by Side Comparison
(รู้สึกหน้านี้จะเสีย ลองไปอ่านที่ Google-Cache ดูครับ), C++ vs Java vs Python vs Ruby : a first impression และ Python vs. Perl vs. Java vs. C++ Runtimes แต่ส่วนมากมักเป็นข้อมูลเก่า (ยกเว้น C++ vs Java vs Python vs Ruby : a first impression ข้อมูลค่อนข้างใหม่) ผมจึงอยากอัพเดดข้อมูลบางอย่างเพิ่มเติมลงไป และทดสอบโดยใช้โปรแกรมที่ใกล้เคียงกับการใช้งานจริงมากที่สุด
About me
ก่อนอื่นผมต้องแนะนำตัว เกี่ยวกับพื้นหลังการเขียนโปรแกรมของผมก่อนครับ เพื่อให้คนอ่านใช้ประกอบวิจรณญาณในการอ่าน
ทุกวันนี้ผมทำงานโดยใช้ Python ในการเขียนโปรแกรม Simulation เกี่ยวกับเคเบิลใยแก้วนำแสง ดังนั้น คนอ่านไม่ต้องแปลกใจครับ หากผมจะลำเอียงไปทาง Python แต่ผมจะพยายามรักษาความเป็นกลางไว้ให้มากที่สุดครับ
ส่วน Java นั้น ในมหาวิทยาลัยผม บังคับเรียนหนึ่งเทอม จำนวน 2 หน่วยกิจ ขออนุญาตขี้โม้หน่อยนึงครับ ว่าตอนสอบผมได้คะแนนเกือบเต็ม เป็นหนึ่งในไม่กี่วิชา ที่ผมได้คะแนนดีกว่าเพื่อนเยอรมัน และผมเคยพยายามทำโปรเจคโดยใช้ Java เลยมีหนังสือ Java เต็มบ้าน แต่สุดท้ายก็ไม่สำเร็จ เพราะจนถึงทุกวันนี้ผมยังงงอยู่เลยว่า อาจารย์ที่ปรึกษาคนนั้นต้องการอะไรจากผม ดังนั้น ผมคิดว่าความรู้ Java ที่ผมมีนั้นก็พอไปวัดไปวาได้เหมือนกัน แต่หลัง ๆ มา ผมไม่ค่อยชอบ Java เท่าไร
ผมไม่เคยศึกษา Ruby อย่างเป็นเรื่องเป็นราว แต่ก็ผ่าน ๆ ตามาบ้าง โดยการใช้งาน Ruby on Rails ความรู้ Ruby ผมจึงเป็นแบบ งูงู ปลาปลา อย่าถือสากันนะครับ :D
About this fight
การเปรียบมวยครั้งนี้ ผมได้เขียนขึ้นโดยวิเคราะห์จากการเขียนโปรแกรม โปรแกรมค้นหาข้อมูลสำหรับ CMS ซึ่งเดิมทีนั้น ผมเขียนขึ้นโดยใช้ PHP แล้วนำมาเขียนใหม่โดยใช้ Java, Python และ Ruby โดยมีการตัดโค้ดบางส่วนออก และปรับปรุงอีกเล็กน้อย เพื่อให้เหมาะสมกับการทดสอบ
ส่วนการทดสอบความเร็วนั้น ผมได้อ้างอิงตาม Python vs. Perl vs. Java vs. C++ Runtimes โดยมาปรับปรุงสำหรับ Ruby และเพิ่มการทดสอบในกรณีอื่น ๆ เข้าไปอีกเล็กน้อย
ในแต่ละยกผมจะให้คะแนน แต่ละภาษาโดยให้เป็น ยิ่งมากยิ่งดี โดยมีคะแนนเต็ม (คิดถึงตอนเรียนอนุบาลเลย)
Round 1 : The first impression
ในยกนี้ผมวิเคราะห์ตามความรู้สึกของผม ที่ได้เขียนโปรแกรมในภาษานั้น ๆ เป็นครั้งแรก ประกอบกับความรู้สึกของเพื่อน ๆ ที่เขียนโปรแกรมภาษานั้น ๆ เป็น
- Java : : เป็นภาษาที่เหมาะกับวิศวกรซอพท์แวร์ แต่ไม่ค่อยถูกโฉลกกับคนวงการอื่น ๆ ในครั้งแรกที่เริ่มเขียน Java อะไร ๆ ก็ดูยากไปหมด ผมและเพื่อนทุกคนเห็นพ้องต้องกันตอนเรียน Java ว่า Java ยากกว่า C อีก อีกทั้งตัวภาษาไม่เอื้อต่องานประเภท Quick and Dirty คือลองเขียนเล่น ๆ สั้น ๆ คนที่จะเขียนโปรแกรม Java โปรแกรมแรกได้นั้น ต้องรู้จัก JRE, JDK, class, object, public, static, void, main ก่อนถึงจะเขียนได้ อีกทั้งยังเจอ Concept แปลก ๆ ที่คนที่ไม่เคยเขียน Java มาก่อน ก็ต้องงงไปตาม ๆ กัน เช่น Interface, Abstact Class, Iteration, Type Cast เป็นต้น สรุปคือ กว่าจะเขียน Java เป็นต้องใช้เวลาค่อนข้างนาน
- Python : : คงเหมือนกับภาษา Script ภาษาอื่น ๆ ที่ไม่ต้องรู้อะไรมากก็ลงมือเขียนได้เลย มี Interactive-Console ให้ใช้งาน ลองเล่นไปตามเรื่องตามราว แต่สิ่งที่กวนประสาทมาก ๆ คือ Indent เป็นเรื่องที่ต้องใช้เวลาในการปรับตัวกันนานพอสมควร
- Ruby : : ครั้งแรกที่ลองใช้งาน อะไร ๆ ก็ดูง่ายไปหมด หากรู้จักภาษา Script อื่น ๆ มาก่อน Ruby แล้ว การเรียนรู้ Ruby ก็จะใช้เวลาน้อยมาก
Round 2 : Community
Community เป็นปัจจัยสำคัญมากในการเลือกใช้งานภาษาเขียนโปรแกรมในปัจจุบัน ภาษาที่มี Community ที่แข็งแกร่ง ย่อมหมายถึงโอกาสอยู่รอดของภาษาในอีกสิบปี ยี่สิบปีข้างหน้าก็จะสูงตามไปด้วย
- Java : : เนื่องจาก Java เป็นภาษาที่ได้รับความนิยมสูงสุด มีบริษัทยักษ์ใหญ่จำนวนมากให้การสนับสนุน Java และเลือก Java เป็นภาษาหลักในพัฒนาซอพท์แวร์ของตัวเอง อีกทั้งในขณะนี้ Java กลายเป็น OpenSource เป็นที่เรียบร้อยแล้ว ดังนั้น Community ของ Java จึงแข็งแกร่งไร้เทียมทาน
- Python : : Python เป็น OpenSource โดยกำเนิด และเป็นภาษาที่ได้รับความนิยมมากขึ้นเรื่อย ๆ มีองค์กรณ์สนับสนุนอย่างเป็นทางการมากมาย (PSF, Google, Zope) แม้ความนิยมในตัว Python ยังไม่เทียบเท่า Java แต่ความแข็งแกร่งของ Community ก็ไม่ได้เป็นรอง Java แม้แต่น้อย
- Ruby :: แม้ว่า Ruby จะเป็นภาษาที่ค่อนข้องใหม่ แต่ในระยะเวลาสองปีที่ผ่านมา Ruby ได้รับความนิยมเพิ่มขึ้นอย่างรวดเร็ว สาเหตุก็เนื่องมาจาก Ruby on Rails ความแข็งแกร่งของ Community ของ Ruby จึงเพิ่มขึ้นอย่างน่าจับตามอง แม้กระนั้นก็ตาม Community ของ Ruby ยังอยู่ในภาวะสร้างตัว จึงยังไม่แข็งกร่งเท่าภาษาเขียนโปรแกรมรุ่นพี่อย่าง Java และ Python แต่คาดว่าอีกปีหรือสองปี Ruby อาจเทียบชั้นมาตีเสมอได้ไม่ยาก
Round 3 : Library
- Java : : เนื่องจาก Java เป็นภาษาที่ได้รับความนิยมอย่างสูง จึงไม่ใช่เรื่องแปลกที่ Java จะมี Library ให้เลือกใช้มากมาย โดยเฉพาะอย่างยิ่งการเขียนโปรแกรมเชิงธุรกิจ แต่ Library ส่วนใหญ่ของ Java ได้รับการออกแบบมาซับซ้อนเกินไป ทำให้ใช้ยาก อีกทั้งยังขาด Library สำหรับโปรแกรมทางวิทยาศาสตร์อีกจำนวนมาก
- Python : : แม้ว่า Library ของ Python คลอบคลุมการใช้งานมากกว่า Java (ทางวิทยาศาสตร์, Image Processing, Latex, 3D-Rendering, etc.) แต่ Library ส่วนใหญ่ยังมีมาตรฐานไม่เทียบเท่าของ Java ส่วนหนึ่งเนื่องมาจากเป็นโครงการ OpenSource ขนาดเล็ก
- Ruby : : ความเป็นภาษาใหม่ของ Ruby ทำให้ Ruby มี Library ให้เลือกใช้ยังไม่มากนัก แต่ Library ของ Ruby ก็น่าจับตามอง เนื่องเพราะเป็น Library ที่ใช้งานง่าย และมีมาตรฐาน เมื่อเปรียบเทียบกับ Java และ Python
Round 4 : Time to code
- Java : : ใครบอกว่า Java เขียนง่ายผมคนหนึ่งล่ะที่ไม่เชื่อ คนส่วนใหญ่บอกว่า Java เขียนง่ายกว่า C++ ผมเห็นด้วยเพียงครึ่งเดียว Concept ของ Java แม้จะทำให้เขียนโปรแกรมง่ายกว่า C++ ก็จริง แต่ก็เข้าใจยากกว่าเหมือนกัน (แค่ Itration อ. ที่สอนต้องใช้เวลาอธิบายอยู่หลายอาทิตย์ กว่าพวกผมจะเข้าใจ) และเนื่องจาก Java ยังเป็น Compiled Language อยู่ การลองโน่นลองนี่จึงไม่ใช่เรื่องง่าย เพราะต้องเสียเวลาในการ Compile อีกทั้งความพยายามออกแบบ Java ให้ Common มากที่สุด ก็ทำให้ Java ซับซ้อนเกินกว่าเหตุ
- Python : : ความเป็น Script ของ Python ทำให้การเขียนโค้ดด้วย Python รวดเร็วทันใจอยู่แล้ว บวกกับคอนเซพท์ที่เข้าใจง่ายของ Python ยิ่งทำการเขียนโค้ดของ Python เร็วขึ้นไปอีก เครื่องมือในการหาข้อผิดพลาดที่พร้อม คุณภาพโค้ดที่ได้ก็สูง เพราะโดนบังคับโดยตัวภาษา โครงสร้างของภาษาที่รองรับโครงการขนาดใหญ่ โดยส่วนตัวผมเห็นว่า Python น่าจะเป็นภาษาที่เขียนโค้ดได้เร็วที่สุดในขณะนี้
- Ruby : : คุณสมบัติดี ๆ หลายอย่างของ Perl และ Python ถูกสอดแทรกลงใน Ruby ได้อย่างลงตัว แม้ว่า Ruby จะเป็นภาษาที่ใช้เครื่องหมายมากเกินไป (ออกแนว Perl) ทำให้โค้ดที่ได้อ่านยากไปบ้าง แต่ก็ถูกทดแทนด้วยคอนเซพท์หลายอย่างที่ไม่เหมือนใคร (symbol, attr_reader) ในขั้นต้นการเขียนโค้ดด้วย Ruby อาจเร็วกว่า Python แต่ในระยะยาว Ruby อาจประสบปัญหาเดียวกับ Perl คือ Write only coding
Round 5 : How does the language do ?
5.1 : Block
- Java : : สำหรับผมแล้วการแบ่งบล็อกด้วยวงเล็บปีกกา {} เป็นการแบ่งบล็อกที่ผมชอบมากที่สุด เพราะสามารถทำได้ง่าย รวดเร็ว และชัดเจน แม้ว่าจะมีปัญหาเกิดขึ้นบ้าง เวลาที่มีบล็อกซ้อนบล็อกมากเกินไป แต่ปัญหานี้ไม่ว่าจะใช้วิธีการแบ่งบล็อกแบบไหน ก็เกิดขึ้นได้ทั้งนั้น การเลี่ยงการเขียนบล็อกซ้อนบล็อกจึงน่าจะเป็นทางออกที่ดีกว่า
- Python : : แม้ว่าการแบ่งบล็อกด้วย indentation มีข้อดีหลายอย่าง ทั้งง่าย รวดเร็ว เป็นการบังคับให้คนเขียนโปรแกรมเขียนโค้ดที่อ่านง่าย แต่ก็มีอันตรายแอบแฝงหลายอย่าง เช่น การใช้ Tabalator ผสมกับการเว้นวรรค ขนาด indentation ที่ไม่เท่ากัน การเขียนโปรแกรมด้วย Python จึงต้องใช้ Editor ที่มีคุณภาพพอสมควร เพื่อป้องกันปัญหาดังกล่าว อีกทั้งต้องมีการตกลงกันระหว่าคนเขียนโปรแกรมว่าจะใช้ indentation แบบใด
- Ruby : : การแบ่งบล็อกด้วย begin และ end แม้ว่าจะทำให้อ่านง่ายขึ้น แต่ก็ง่ายกว่าการใช้วงเล็บปีกกาไม่มากนัก Ruby เองก็ไม่ใช่ภาษาที่อ่านง่ายอยู่แล้ว การใช้ begin และ end จึงไม่มีข้อได้เปรียบที่ชัดเจน นอกจากจะทำให้โค้ดยาวขึ้น
5.2 : Loop
- Java : : การวนลูปของ Java เริ่มต้นเดิมทีได้นำวิธีการของ C มาใช้ จากนั้นก็เพิ่ม Iteration เข้ามา แม้ว่า Iteration จะได้เปรียบ for ธรรมดาอยู่หลายอย่าง แต่ก็ทำให้โค้ดที่ได้อ่านยาก ต้องเขียนโค้ดยาว งง ๆ คนส่วนมากจึงยังคงใช้ for ธรรมดามากกว่า Iteration ใน Java 5 จึงได้มี for-each เพิ่มเข้ามา แต่ก็ยัง for-each ที่ยัง งง ๆ อยู่ ถึงตอนนี้ผมยังคอมไพล์โปรแกรมที่มี for-each ไม่ผ่านเลยครับ
- Python : : คอนเซพท์ for-loop ของ Python ถือว่าเป็นคอนเซพท์ที่ดีมาก มีการนำ iteration มาใช้โดยที่คนเขียนไม่ต้องทำความเข้าใจเรื่อง iteration แต่อย่างใด for-each เป็นการวนลูปที่เร็วที่สุดใน Python (เร็วกว่า while) มีฟังก์ชั่น zip() ให้ใช้ ทำให้สามารถใช้ for-each กับข้อมูลสองชุดที่มีขนาดเท่ากันพร้อมกันได้
- Ruby : : คอนเซพท์วนลูปของ Ruby คล้ายคลึงกับของ Python มาก ข้อเสียเดียวที่ผมมองเห็นในการวนลูปของ Ruby คือ incosistence Ruby มีการวนลูปหลายรูปแบบเกินไป ทำให้เกิดความสับสนในการใช้งานในบางครั้ง
5.3 : Container
- Java : : ตอนผมเรียน Java อ.ที่สอนท่านชอบบอกว่า Collection-Classes ของ Java มันเจ๋งอย่างไรบ้าง หากเปรียบมวยกับ Array ของ C++ มันก็เจ๋งกว่าจริง ๆ นั่นแหละ แต่มันซับซ้อนมาก ๆ มากเกินไป การทำความเข้าใจ Collection-Classes ของ Java ให้แตกฉาน เป็นศาสตร์ และศิลป์ในตัว ต้องใช้เวลานาน มีจำนวน Classes ให้เลือกใช้มากเกินไป ทั้งที่แต่ละ Class ก็ไม่ต่างกันมาก การนำข้อมูลดิบใส่ลงไปใน Container ก็ไม่ใช่เรื่องง่าย ๆ (ดูตัวออย่างโปรแกรม)
- Python : : ใน Python มี Container เพียงสามแบบ คือ [List], {Dictionary} และ (Tuple) สามารถนำไปใช้งานง่าย คลอบคลุมทุกการใช้งาน เจ๋งไหม
- Ruby : : คอยเซพท์ Container ของ Ruby เหมือนของ Python ทุกอย่าง แต่ไม่มี Tuple ให้ใช้
Round 6 : OOP
- Java : : Java เป็นภาษาเขียนโปรแกรมที่นำทฤษฎี OOP มาใช้งานได้เต็มรูปแบบ และสมบูรณ์ที่สุด มีเพียง C# เท่านั้น ที่สามารถเทียบชั้นกับ Java ได้ในเรื่องนี้ แต่คำถามคือ เรามีความจำเป็นเพียงใด ในการใช้ OOP เต็มรูปแบบ
- Python : : แม้ว่า Python จะรองรับการเขียนโปรแกรมแบบ OOP แต่ผมก็มองว่าเป็น OOP แบบขำ ๆ มีคอนเซพท์ OOP หลายอย่างที่ขาดใน Python (public, private, protected, interface, abstact calss, etc.) อีกทั้งทุกอย่างใน Python ไม่จำเป็ต้องเป็น Object สำหรับคนที่เรียน วิชา Software Engineering หรือ Software Architect มา อาจเริ่มต้นกับ Python ไปไม่ถูกเหมือนกัน แต่สิ่งเหล่านี้ถูกทดแทนได้โดย Meta- , Functional-Programming และ Dynamic Typing
- Ruby : : Ruby อาจไม่รองรับ OOP เท่า Java แต่ดีกว่า Python และทำหน้าที่ OOP ได้อย่างไม่ขาดตกบกพร่อง OOP ในส่วนที่ขาดไปของ Ruby สามารถทดแทนได้ด้วย Dynamic Typing
Round 7 : Web-Development
- Java : : แม้ว่า Java จะสร้างชื่อเสียงของตัวเองด้วยการใช้งานบนอินเตอร์เนต แต่ Framework เกี่ยวกับ Web-Development ของ Java ก็ไม่เคยประสบความสำเร็จอย่างจริงจัง Applet โดนโลกลืมอย่างน่าสงสาร Servlet และ JSP ก็โดน PHP กินส่วนแบ่ง ทิ้งห่างอย่างไม่เห็นฝุ่น เพราะมันดันใช้ยาก และตะกละตะกลาม แม้ว่าจะมี Web-Framework ใหม่ ๆ ออกมาให้ใช้งานมากมาย แต่ก็กินส่วนแบ่งกันเอง และไม่มีนวัตกรรมใหม่ ๆ ที่น่าสนใจ
- Python : : Plone ถือเป็น Killer Application ของ Python และเป็นเครื่องยืนยันได้ถึงคุณภาพด้านนี้ของ Python ได้อย่างดี อีกทั้ง Google และ YouTube ต่างก็หันมาใช้ Python อย่างออกหน้าออกตา สำหรับ Framework ก็มีทั้ง Zope , Django และ Turbo-Gear ให้เลือกใช้ แต่ปัญหามันอยู่ตรงนี้แหละครับ มันมีให้เลือกใช้เยอะเกินไปจน inconsistence
- Ruby : : บอกได้คำเดียวครับว่า Rails มันสุดยอด
Round 8 : GUI
- Java : : เป็นจุดอ่อนของที่ติดตัว Java มานานนับปี AWT , SWT และ Swing ต่างก็มีจุดอ่อนจุดแข็งของตัวเอง แต่เมื่อเปรียบเทียบทั้งสามกับ GUI ภาษาอื่น บอกได้เลยครับว่ามันห่วย สาเหตุก็เนื่องมาจาก Java มันเป็น Manage Code จึงไม่สามารถดึงพลังของ CPU มาใช้สำหรับ GUI ได้เท่า Native Code
- Python : : Python เป็นภาษาเขียนโปรแกรมที่มี GUI ให้เลือกใช้มากที่สุดภาษาหนึ่ง ไม่ว่าจะเป็น Tk, Qt, KDE, GTK, Gnome, wxPython และทุก GUI-Toolkit ต่างก็เป็น GUI-Toolkit ที่มีประสิทธิภาพทั้งสิ้น
- Ruby : : ความเป็นภาษาใหม่ของ Ruby ทำให้ Ruby ยังมี GUI ให้ใช้ไม่มากนัก แต่ไม่นานครับ ตอนนี้นักพัฒนาโปรแกรมของ Ruby ต่างเร่งผลิต Toolkit เหล่านี้ให้เราใช้งานอยู่ อีกสองสามปี ผมคิดว่า GUI ของ Ruby คงเทียบชั้น Python ได้ไม่ยาก
Round 9 : ETC.
9.1 : Tools
- Java : : เนื่องจาก Java เป็นภาษาที่เขียนยาก แต่มีคนใช้เยอะ เลยมี IDE ดี ๆ ให้เลือกใช้งานหลากหลายตามไปด้วย สองผู้นำในวงการ IDE ของ Java ได้แก่ NetBeans และ Eclipse ซึ่งทั้งสองเป็น IDE ที่มีคุณภาพสูง แถมทั้งคู่เป็น OpenSource อีกต่างหาก นอกจาก IDE แล้ว Java ยังมีเครื่องมืออื่น ๆ ให้เลือกใช้อย่างจุใจ
- Python : : IDLE เป็นเครื่องมือมาตรฐานที่ติดตัวมากับ Python อันประกอบด้วย Editor และ Interactive-Python ซึ่งเป็นเครื่องมือที่เหมาะสำหรับงานขั้นพื้นฐานเท่านั้น แม้ว่า Python จะเป็นภาษาที่ค่อนข้างได้รับความนิยม แต่ถือว่ามีเครื่องมือจำพวก IDE ให้เลือกใช้งานน้อยมาก
- Ruby : : ความเป็นน้องใหม่ของ Ruby ทำให้ Ruby เสียเปรียบในหลาย ๆ ด้าน ไม่เว้นแม้แต่ด้านเครื่องมือการพัฒนาโปรแกรม โดยส่วนตัวผมคิดว่า ในอนาคตเราก็อาจไม่มีเครื่องมืออลังการอย่าง NetBeans หรือ Eclipse สำหรับ Ruby หรือ Python มาใช้งานกัน เพราะคุณสมบัติของภาษา Script ทำให้เครื่องมือต่าง เป็นเพียงเครื่องอำนวยความสดวก มากกว่าเครื่องมือจำเป็น
9.2 : Platform
- Java : : คอนเซพท์ Write once run any where ของ Java นั้น ถือเป็นนวรรตกรรมบรรลือโลก ที่ถึงตอนนี้ยังไม่มีใครมาเทียบรัศมี (.NET ฟังดูดี แต่ในความเป็นจริงมันงี่เง่า เพราะใช้งานได้เฉพาะ OS ความหวังจึงน่าจะอยู่ที่ Mono) Byte-Code ที่ได้ไม่ต้องเปลี่ยนแปลงใด ๆ ก็ใช้งานได้ทุก OS ดังนั้นเรื่อง Plattform ต้องยกให้ Java เขาไป
- Python : : แม้ว่า Python จะรองรับหลาย OS ไม่แพ้ Java แต่โค้ดบางส่วน ก็ต้องมีการแก้ไขเพื่อให้เข้ากับ OS โดยเฉพาะในส่วนที่ใช้ Module os ของ Python อีกทั้งการนำไปใช้งาน ก็เป็นการนำซอร์สโค้ดไปใช้ ไม่ได้เป็น Byte-Code อย่าง Java
- Ruby : : เหมือน Python ครับ :P
Round 10 : Performance
ในที่สุดก็มาถึงยกสุดท้าย ยกที่สำคัญที่สุด เรื่องความเร็วมักเป็นปัจจัยสำคัญ ที่ได้รับการพิจรณราในการตัดสินใจไม่ใช้ภาษา Script เพราะคนส่วนใหญ่มีความเชื่อว่า ภาษา Script เป็นภาษาที่ช้า แต่จากประสบการณ์และความรู้สึกของผม ภาษา Script ไม่ได้มีความเร็วเพียงแค่ เพียงพออย่างพอเพียง แต่เร็วกว่าภาษา Managed Code อย่าง Java เสียด้วยซ้ำ แต่ก็เป็นเพียงความรู้สึกที่ไม่ได้รับการพิสูจน์ (คนอ่านอย่าคิดลึกเชียวล่ะ) ครั้งนี้ถือเป็นโอกาสดี เลยเอาเสียหน่อย
Platform
Computer-Modell : Notebook Samsung R55
CPU : Intel Core 2 Duo Centrino T5500
CPU-Freq : 1830 MHz
RAM : 1 GB
OS : Ubuntu 6.04 LTS
Java-1.4 : gij (GNU libgcj) version 4.1.0 (Ubuntu 4.1.0-1ubuntu8)
Java-1.6 : Java(TM) SE Runtime Environment (build 1.6.0-b105)
Python : Python 2.4.3 (#2, Oct 6 2006, 07:52:30) , [GCC 4.0.3 (Ubuntu 4.0.3-1ubuntu5)] on linux2
Ruby : ruby 1.8.4 (2005-12-24) [i486-linux]
หมายเหตุ สำหรับ Java ให้ยึด Java 1.6 เป็นหลักครับ เพราะ Java ของ GNU มันไม่ดีเท่า Java 1.6 ของ Sun แต่สูสี Java 1.4 ของค่ายอื่น ๆ อยู่ (แต่จากการคาดการณ์ ผมคิดว่าคนส่วนใหญ่ยังใช้ Java 1.4 อยู่นะ)
Speed
Test |
Java 1.4 |
Java 1.6 |
Python |
Ruby |
Console |
12.2 |
13.9 |
11.7 |
12.8 |
Hash |
7.4 |
2.0 |
3.6 |
11.3 |
IO |
1.2 |
0.7 |
1.9 |
6.5 |
List |
2.2 |
0.4 |
0.4 |
5.5 |
Math |
0.7 |
0.5 |
0.3 |
4.4 |
Real-World-Application |
14.8 |
3.6 |
0.9 |
1.5 |
Memory-usage
Test |
Java 1.4 |
Java 1.6 |
Python |
Ruby |
Console |
17.9 |
8.9 |
17.5 |
1.6 |
Hash |
17.7 |
8.9 |
2.4 |
40.7 |
IO |
17.9 |
8.9 |
2.3 |
1.6 |
List |
17.9 |
8.9 |
2.3 |
4.1 |
Math |
24.7 |
22.3 |
13.9 |
19.1 |
Real-World-Application |
45.3 |
37.2 |
6.2 |
16.7 |
Console
ในส่วนนี้ไม่มีใครได้เปรียบเสียเปรียบอย่างได้ชัดในเรื่องความเร็ว แต่การใช้ Memory ต้องยกใช้ Ruby ส่วน Python มีการใช้ Memory มากผิดปกติ สาเหตุน่าจะมาจาก range() ที่ต้องผลิต list ขนาดยักษ์
Java
public class test {
public static void main
(String[] args
) { for (int i = 0; i < 1000000; i++) {
}
}
}
Python
for x in range(1000000):
print x
Ruby
1000000.times do |i|
puts i
end
Hash
Ruby ทำได้ไม่ดีนัก ทั้งในเรื่องความเร็ว และการใช้ Memory ในทางกลับกัน Python กลับทำได้ดีจนน่าแปลกใจ มีการใช้ Memory ขั้นต่ำสุด ความเร็วห่างจาก Java 1.6 ไม่มากนัก
Java
import java.util.*;
public class test {
public static void main
(String[] args
) { for (int i = 0; i < 6000; i++) {
for (int j = 0; j < 1000; j++) {
x.put(J,I);
x.get(J);
}
}
}
}
Python
for i in range(6000):
x={}
for j in range(1000):
x[j]=i
x[j]
Ruby
6000.times do |i|
x={}
1000.times do |j|
x[j] = i
x[j]
end
end
IO
ในเรื่องความเร็ว ไม่มีอะไรน่าแปลกใจ แต่การใช้ Memory ของทุกภาษาอยู่ในขั้นต่ำสุด
Java
import java.io.*;
public class test
{
public static void main
(String[] args
) { try {
for (int i = 0; i < 1000000; i++) {
pw.print(i);
}
pw.close();
}
ioe.printStackTrace();
}
}
}
Python
f=open('/tmp/scratch','wb')
for i in xrange(1000000):
f.write(str(i))
f.close()
Ruby
f = File.new("/tmp/scratch", "w")
1000000.times do |i|
f.syswrite(i.to_s)
end
f.close
List
งานนี้มีการใช้ทริกเล็กน้อยสำหรับ Python ทำให้ Python มีความเร็วเทียบเท่า Java-1.6 ขึ้นมาได้ ส่วน Ruby รั้งท้ายเหมือนเดิม
Java
import java.util.*;
public class test {
public static void main
(String[] args
) { initial.add("a");
initial.add("b");
initial.add("c");
initial.add("d");
initial.add("e");
initial.add("f");
initial.add("g");
for (int i = 0; i < 3000; i++) {
for (int j = 0; j < 1000; j++) {
v.get(j);
}
}
}
}
Python
a = map(lambda x : ['a','b','c','d','e','f','g']+range(1000),range(3000))
for i in a : i
Ruby
3000.times do |i|
v=['a','b','c','d','e','f','g']
1000.times do |j|
v.push(j)
v[j]
end
end
Math
การทดสอบในส่วนนี้ค่อนข้างใกล้เคียงการใช้งานจริงที่ผมใช้อยู่ ที่ตลกคือ การจัดการ Memory และระบบ Typecast ของ Java ตอนแรกผมใช้ Class ArrayList ในการเก็บข้อมูล แต่ก็ต้องมานั่งปวดหัวกับเรื่อง Typecast มากกว่าจะมาจดจ่อกับตัวโปรแกรม เลยต้องหันใช้ double[] แทน แต่ตัว double[] ก็เก็บข้อมูลได้เพียง 2000000 หน่วย และไม่สามารถประกาศตัวแปรขนาด 2000000 หน่วย ติดต่อกันได้เกิน 3 ตัวแปร ไม่งั้นมีเรื่อง ส่วน Ruby ก็ช้าจนน่าเกลียด
Java
import java.lang.Math;
public class test {
public static void main
(String[] args
) { double[] x = new double[200000];
double[] gauss = new double[200000];
double[] laplace = new double[200000];
double[] si = new double[200000];
double[] sisqr = new double[200000];
double[] bp = new double[200000];
for(int i = 0 ; i < 200000; i++){
x[i] = (i/10000.0)-10.0;
gauss
[i
] =
Math.
exp(-1.0 * x
[i
] * x
[i
]);
laplace
[i
] =
Math.
exp(-1.0 *
Math.
abs(x
[i
]));
sisqr[i] = si[i]*si[i];
bp
[i
] = si
[i
]*
Math.
cos(x
[i
]*
100);
}
}
}
Python
import numpy
x = numpy.arange(-10,10,0.0001)
gauss = numpy.exp(-(x**2))
laplace = numpy.exp(-numpy.abs(x))
si = numpy.sin(x*numpy.pi)/(numpy.pi)
sisqr = si**2
bp = si*numpy.cos(x*100)
Ruby
x = []
gauss = []
laplace = []
si = []
sisqr = []
bp = []
200000.times do |i|
x.push( (i / 10000.0)-10.0 )
gauss.push( Math.exp(-1.0 * x[i] * x[i]) )
laplace.push(Math.exp(-1.0 * x[i].abs ))
si.push(Math.sin(x[i]* Math::PI) / (x[i] * Math::PI))
sisqr.push(si[i]*si[i])
bp.push(si[i]*Math.cos(x[i]*100))
end
Real-World-Application
การทดสอบสุดท้าย ผมคิดว่าน่าจะใกล้เคียงกับการใช้งานจริงมากที่สุด ในการทดสอบนี้ตัวโปรแกรมต้องสร้าง Query เพื่อสอบถามไปยังฐานข้อมูลก่อน เมื่อได้ข้อมูลมาแล้ว จึงเปลี่ยนแปลงรูปแบบข้อมูลด้วย RegEx และ Splitจากนั้นข้อมูลจะถูกเก็บไว้ใน Hash สุดท้ายก็แสดงผลข้อมูลออกมาทาง Console จะเห็นได้ว่า การทดสอบนี้ มีส่วนประกอบที่ใช้ในการเขียนโปรแกรมเวบไซท์ค่อนข้างครบ
ข้อมูลที่อยู่ในฐานข้อมูลก็คือข้อมูลของ BioLawCom.De คำที่ผมใช้หาในฐานข้อมูลคือ ตัวอักษร a ข้อมูลที่ได้มีทั้งสิ้น 690 rows
สิ่งที่น่าเบื่อมากใน Java คือ Typecast และไม่สามารถบรรจุข้อมูลลงใน Hash และ List ได้แบบง่าย ๆ อย่าง Python กว่าผมจะเขียนโปรแกรมนี้ด้วย Java ได้ต้องใช้เวลานานมาก เพราะต้องแก้ไขข้อผิดพลาดเกือบทุกครั้งที่คอมไพล์ ส่วน Ruby และ Python นั้นมีความคล้ายคลึงกันมาก ต่างกันเพียงแค่รายละเอียดเล็กน้อยเท่านั้น
โปรแกรมที่ได้จาก Ruby และ Python มีขนาดใกล้เคียงกันมาก แต่ของ Java มีขนาดใหญ่กว่าเกือบสองเท่า เวลาที่ใช้ในการเขียนอาจจะมากกว่าห้าหรือสิบเท่า ผลที่ออกมาก็ไม่คุ้มกับเวลาที่เสียไปเอาเสียเลย Java ทั้งใช้เวลามากกว่า และใช้ Memory มากกว่า น่าผิดหวังมาก ส่วน Python นั้นนำโด่ง ทิ้งห่าง Ruby เกือบสองเท่า
(เนื่องจากโค้ดยาวมาก ดังนั้น ผมเลยแยกโค้ดออกมาต่างหาก สามารถดาวน์โหลดได้ที่ Real.zip ครับ)
- Java : : มีความเร็วเหนือกว่า Ruby และ Python ในเรื่องง่าย ๆ และพื้น ๆ เท่านั้น โปรแกรมที่มีความซับซ้อนมากขึ้น Java จะเริ่มตะกละ และอุ้ยอ้าย การจะเขียน Application ขนาดใหญ่ด้วย Java จึงต้องเตรียมรับเรื่องนี้ไว้ให้ดี
- Python : : ต้องยกให้เป็นผู้ชนะในครั้งนี้ครับ เพราะมีความเร็วสูงสุดใน 4 จาก 6 การทดสอบ ในการทดสอบที่ Python ช้ากว่า Java ก็มีความแตกต่างเกิดขึ้นไม่มากนัก
- Ruby : : แม้ว่า Ruby จะไม่ชนะในการทดสอบใดเลย แต่ก็รักษาตำแหน่งการใช้ Memory น้อยได้โดยตลอด แม้ว่าการทดสอบพื้น ๆ Ruby จะเป็น looser แต่ในการใช้งานจริง โดยเฉพาะ Web-Application Ruby ก็สามารถรักษาความเร็วของตัวเองได้ดีทีเดียว แต่สำหรับโปรแกรมจำพวก Simulation ลืม Ruby ไปได้เลยครับ
Conclusion
ในส่วนของผลรวมคะแนน ผมคิดว่าแต่ละคนคงมีตัวคูณสำหรับคะแนนจากแต่ละยกที่ไม่เท่ากัน สำหรับผม ในเรื่อง Peformance x 3 และ Time to code x 2 และ Python ก็เป็นแชมป์ในครั้งนี้ แต่ทั้งหมดทั้งสิ้นก็เป็นการให้คะแนนโดยผมเพียงคนเดียว ซึ่งอาจไม่ตรงใจหลาย ๆ คน ก็สามารถให้คะแนนแต่ละส่วนกันได้ตามความพอใจครับ
ทั้งนี้และทั้งนั้น ในส่วนของ Performance และ Time to code เป็นส่วนสำคัญมาก และ ผลก็คงเปลี่ยนแปลงจากนี้ไปได้ไม่มาก จากสองส่วนนี้ผมพอจะสรุปได้ว่า Java เป็นอะไรที่ไม่น่าใช้เอาเสียเลย เพราะต้องเสียเวลาเขียนโค้ดนาน แต่โปรแกรมที่ได้กลับไม่มีข้อได้เปรียบใด ๆ
สำหรับบริษัทพัฒนาโปรแกรม หากเลือกใช้ Java เหมือนกับเป็นการเสียเงินลงทุนไป 5-10 เท่าโดยใช่เหตุ ส่วนหนึ่งต้องลงทุนไปกับการเขียนโค้ดที่ต้องใช้เวลานานขึ้น ส่วนหนึ่งต้องเสียไปกับการซื้อเครื่องมือมาช่วยในการพัฒนาโปรแกรม ส่วนหนึ่งต้องเสียไปในการอบรมพนักงาน และอื่น ๆ อีกมากมาย
ข้อได้เปรียบเดียวของ Java คือ เครื่องมือที่พร้อม และมีทฤษฎีรองรับมากมาย ทฤษฎีการวางโครงสร้างระบบส่วนมาก ใช้ Java เป็นภาษาอ้างอิง ในส่วนของทฤษฎีผมมองว่า เราสามารถนำมาปรับใช้กับ Python และ Ruby ได้ไม่ยาก
ส่วน Python นั้นเป็นภาษาที่สามารถนำไปใช้งานได้หลายรูปแบบ ใช้เวลาในการเขียนโค้ดน้อย โปรแกรมที่ได้มี Performance สูง (ว่ากันว่า Python 3000 จะมีความเร็วเพิ่มขึ้นอีก 20-30%) จึงไม่ใช่เรื่องแปลกที่ Python จะเป็นภาษาที่ได้รับความนิยมมากขึ้นเรื่อย ๆ
ข้อเสียเปรียบเดียวของ Ruby คือ เป็นภาษาที่ยังใหม่อยู่ จึงยังอาจไม่พร้อมในหลาย ๆ เรื่อง แต่ Community ของ Ruby ก็โตวันโตคืน ทำให้ Ruby ได้รับการพัฒนาอย่างรวดเร็ว และ อาจเทียบชั้นภาษารุ่นพี่อย่าง Java และ Python ได้ในอนาคตอันใกล้
แม้กระนั้นก็ตาม Web-Application ถือเป็นจุดแข็งที่สำคัญที่สุดของ Ruby คุณภาพของ Ruby on Rails อาจทำให้ Ruby เป็นภาษาที่เข้ามาแทนที่ PHP ในอนาคต แต่เรื่องนี้เราคงด่วนสรุปไม่ได้ เพราะขณะนี้มีโปรแกรมจำนวนมากใช้ PHP การเข้ามาแทนที่ PHP ของ Ruby จึงต้องใช้ระยะเวลา และปัจจัยอื่น ๆ อีกมากมาย
Comments
โอ้ ดีๆครับ ได้เห็นความคิดเห็นเพิ่ม :D
โอ้ว ยาวมาก ขอเปลี่ยนจาก range() เป็น xrange() แล้วลองอีกรอบได้มั๊ยครับ
สำหรับ Ruby ลองดู link นี้ประกอบได้ครับ เพราะ Ruby เองก็มีหลายตัว Ruby Implementations Shootout: Ruby vs Yarv vs JRuby vs Gardens Point Ruby .NET vs Rubinius vs Cardinal
"Java : คอนเซพท์ Write once run any where ของ Java นั้น ถือเป็นนวรรตกรรมบรรลือโลก ที่ถึงตอนนี้ยังไม่มีใครมาเทียบรัศมี (.NET ฟังดูดี แต่ในความเป็นจริงมันงี่เง่า เพราะใช้งานได้เฉพาะ OS ความหวังจึงน่าจะอยู่ที่ Mono)"
ก็ .Net เค้าจุดประสงค์คือให้นักพัฒนาภาษาต่างๆ ทำงานได้บน framework ตัวเดียวกันได้คับและแน่นอนว่าต้อง OS เป็น Windows ต่างกับ Java ที่จุดประสงค์คือเขียนภาษาเดียวกันแต่ run ได้บนหลาย Platform ที่เอามาเปรียบเทียบกันผมว่ามันไม่ค่อยถูกต้องเท่าไร...
แต่ผมว่าเปรียบเทียบแบบนี้ถูกต้องแล้วนะ เพราะตัว .NET เอง นอกเหนือจากเขียนได้หลายภาษาแล้ว ก็โปรโมตในเชิงไม่ขึ้นกับแพลทฟอร์มเหมือนกัน
ขยันจริงๆ ชื่นชม :)
อู้หู .... ยาวสุดๆ กว่าจะอ่านจบ :)
อยากรู้เรื่อง scalability ด้วยอะครับ
Python เป็นภาษาที่ได้รับการพิสูจน์มาแล้วครับว่ามี scalability ที่ดี ลองอ่านได้ที่ Python Success Stories
ส่วน Ruby ต้องรอดูไปอีกสักพักครับ แต่ดูจากโครงสร้างแล้ว ผมว่าน่าจะเป็นภาษาที่ scalability สูงอยู่ BioLawCom.De
ใน PHP หรือโปรแกรมภาษาอื่นๆ เราจะหาข้อมูลเกี่ยวกับเรื่อง Performance ต่างๆ เช่น ความเร็ว หน่วยความจำที่ใช้ ของแต่ละคำสั่งได้อย่างไรครับ เช่น กรณีบทความนี้กล่าวว่า for-each เป็นการวนลูปที่เร็วที่สุดใน Python (เร็วกว่า while) เป็นต้น
** โพสต์ถามไว้ที่ biolawcom.de แล้ว ขออนุญาตโพสต์ซ้ำไว้ที่นี่ด้วยนะครับ
ผมไม่ค่อยเห็นด้วยนิดหน่อยที่หักคะแนนจาก Python ตรงเรื่อง Indent ครับ เพราะจากประสบการณ์ที่ต้องแก้ code ต่อจากคนอื่นแล้ว ผมว่าข้อนี้ทำให้ Python ได้เปรียนภาษาอื่นอย่างแรง
เท่าที่เห็นภาษาอื่น ทำให้เกิดความไร้ระเบียบขนาดที่ว่าเจ้าตัวที่เขียนเองยังอ่าน code ตัวเองไม่รู้เรื่องเลย
ผมเจอเรื่องแก้โค้ดคนอื่นแล้วผมให้คะแนนลบนะครับ ผมชอบใช้ space อีกคนชอบใช้ tab ส่งงานกันแรกๆ นี่งงสุดๆ
จริงแล้วเรื่องใช้ tab ก็ไม่น่าใช่เรื่องใหญ่ แต่ผมว่าน่าจะ define ให้ strict กว่านี้ เช่นฟันธงไปเลยว่าต้องใช้ tab เท่านั้น ------ LewCPE
lewcpe.com, @wasonliw
เคยเจอเหมือนกัน ต้องแปลง tab กระจุย จำได้ว่าเคยบอกให้มันใช้ space นี่หว่า ไหงกลายเป็น tab ไปได้
ผมว่ามันจะมั่วก็ตรง editor ด้วยนี่แหละครับ บางทีมันชอบเปลี่ยนให้เองไปๆ มาๆ
---------- iPAtS
iPAtS
ใน http://www.jwz.org/doc/tabs-vs-spaces.html พูดถึงว่าทำไม /t ถึงไม่ดี และไม่ควรใช้ใน Python
แต่ผมติดการเขียนโปรแกรมโดยใช้ tab มาจาก C ดังนั้นแทนที่ผมต้องเปลี่ยนจากการกด tab มาเป็น space ผมจึงแก้ tab ให้เป็น space x 4 แทน
ใน vim ผมใช้: set expandtab " เมื่อเจอ tab ให้มันแก้เป็น space set softtabstop=4 " เมื่อเจอ 4 space ให้มองว่ามันอาจจะเป็น tab
รัก Java ไม่ยอมเปลี่ยนแปลง :D
ไม่ค่อยเห็นด้วยที่ community กับ library ที่ให้ java ได้เท่ากับ python ครับ .. ในความเป็นจริงถ้าวัดจำนวนแล้ว java ทิ้งไม่เห็นฝุ่นเลยครับผมว่า
แฟนพันธุ์แท้สตีฟจ็อบส์ | MacThai.com
เรื่องนี้ถ้าเป็นผมผมให้คะแนนมากกว่าจาวาอีกนะ เพราะแม้ว่าจาวาจะเยอะกว่า แต่แนวคิด battery included ทำให้ไลบรารีทาง Python มาในรูปแบบ Standard Library ซึ่งเวิร์คกว่ามาก เพราะ doc มันรวมมากับตัว python โดยตรง ------ LewCPE
lewcpe.com, @wasonliw
เรื่อง community ผมเห็นด้วยนะครับว่าจำนวนมีผลแปรผันตรง
แต่ library ผมคิดเหมือนคุณ bow ว่าจำนวนไม่ใช่สิ่งสำคัญ ปัญหาอยู่ที่ว่ามีแล้วมันเวิร์คไหม ต้องติดตั้งเพิ่มเติมวุ่นวายหรือเปล่า ซึ่งตรงนี้ batteries included ชนะขาด
Web-Development :
ต้องลอง Tapestry ดูครับ ^_^
ผมว่าโครงสร้าง และ syntax ภาษา java นั้น "สวย" ที่สุดในสายตาผมตอนนี้นะ
อาจจะผมชอบภาษา {ปีกกา} เป็นพิเศษ
เริ่มอยากหัดเขียนโปรแกรม (:
ที่จริง ชอบ จาวานะครับ เพราะว่าการเริ่มศึกษาโปรแกรมมิ่งมาในรากฐาน ของ ภาษาวงเล็บมา แต่ หลังๆ ผมเริ่มเห็นว่า งูพิษเนี้ย ลักษณะภาษาเนี้ยผมชอบมากเพราะ ถ้าเอามาเขียนในแนวอัลกอลิทึมแล้วสุดแสนจะสบาย มีลูกเล่นไว้ย้อส่วนมากๆ แต่ปัญหาคือ ไม่มีความคุ้นเคย ไม่มีคนแนะนำการเขียนเบื่องต้น และการเขียนโปรแกรมแบบซับซ้อนหน่อย ก็ไม่อยากเรียน หลักภาษาแหละ *0*
ปล. ใครอยากสอน Python or Ruby แบบแนะแนวทาง ก็บอกนะครับ แหะ ขอเป็นประมาณ IM ก็พอ.
ลองเข้าไปที่ Codenone ดูครับ ;) BioLawCom.De
ผมขออนุญาตโต้ละกัน
ผมคงไม่อาจเอื้อมไปตีกับภาษาอื่นที่ผมไม่ถนัดหรอกนะครับ เพราะฉะนั้นขอโต้แย้งในประเด็นที่เกี่ยวข้องเฉพาะจาวาที่ผมถนัดที่สุดละกัน การโต้เถียงครั้งนี้ ผมไม่ได้ต้องการทำไปเพื่อเอาชนะ แต่เพื่อให้คนอ่านได้พิจารณาประกอบการเปรียบเทียบ ผมพร้อมเสมอหากต้องการแลกเปลี่ยนมุมมองทางด้านวิชาการด้วยข้อมูล ด้วยเหตุผล
ผมเป็นใคร? ไม่ได้เป็นใคร มนุษย์ขี้เหม็นธรรมดาคนหนึ่ง cert. ซักใบไม่มี ทำงานและเกี่ยวข้องกับจาวาตลอด 3 ปีที่เรียนจบปริญญาตรี ตอนนี้ทำหัวข้อวิทยานิพนธ์ปริญญาโทเกี่ยวกับจาวาโดยตรง
About this fight ด้วยความเคารพคุณ bow_der_kliene เท่าที่คุณออกตัวว่าไม่ถนัดจาวาผมก็พอเห็นภาพจากโค้ดที่คุณเขียนอยู่ แล้วก็ขออนุมานว่าคุณคงไม่ถนัด OOP เท่าไหร่ (ถ้าผมผิดก็ขออภัย) ผมมองโลกในแง่ดีว่าคุณคงเขียนโค้ดจาวานี้จากความไม่ถนัดของตัวเอง เพราะว่าโค้ดนี้เหมือนจะพยายามเขียนให้จาวาช้าให้ได้ยังไงยังงั้น : )
ผมขอโต้เป็นหัวข้อๆ ไปละกัน
Round 1 : The First Impression
ถูกแล้วครับจาวาเหมาะกับ Software Engineer มากกว่าทุกภาษา ด้วยเหตุที่มันเป็นภาษา managed code และเป็นภาษา static จึงเหมาะสมกับงานที่ต้องการความสามารถด้าน scalability, security,maintainability เป็นอย่างยิ่ง ด้วยความที่ภาษาจาวาไม่ใช่ภาษาประเภท dynamic มันจึงไม่เหมาะกับการทำquick & dirty จริงๆ ผมเห็นด้วยทุกประการ แต่จาวาแพลตฟอร์มก็ไม่ต่างกับ .NET ที่สามารถโค้ดด้วยภาษาอื่น ผู้ใช้สามารถเลือกภาษาที่เหมาะสมกับจุดประสงค์ของตัวเอง ตัวอย่างภาษาอื่นที่สามารถทำงานบนจาวาแพลตฟอร์มได้แก่ JavaScript, JRuby, Jython, Groovy หรือแม้แต่ PHP เป็นต้น ต่อไปในอนาคตอันใกล้รับรองได้ว่าจะเห็นภาษาอื่นนอกจากจาวาทำงานอยู่บนแพลตฟอร์มมากขึ้นอย่างมีนัยสำคัญ
Round 2 & Round 3 : Community & Library
ประเด็นนี้ผมขอพูดรวมๆ แล้วกัน ถ้าพูดถึง Community ผมยังเชื่อว่าจาวายังชนะ Python อยู่พอสมควร Community ที่หลากหลายเป็นที่มาสำคัญว่าทำไมจาวาถึงได้รับตำแหน่งภาษาและแพลตฟอร์มแห่งทางเลือก ไม่ว่าจะทำอะไรสักอย่างมีหนทางได้มาซึ่งความสำเร็จหลายเส้นทางทั้งจากผลิตภัณฑ์เพื่อการค้า หรือผลิตภัณฑ์จากทางฝั่งโอเพนซอร์ส ระดับความมีนัยสำคัญสามารถวัดได้จาก ตำแหน่งงานที่ต้องการ จำนวนโปรเจ็กใน sourceforge ที่เขียนด้วยจาวา แม้แต่งานวิจัยใหม่ๆ จาวามันจะถูกนำมาใช้พิสูจน์ทดลองก่อนเสมอ
การโอเพนซอร์สจาวาในอนาคต ผมเชื่อเหลือเกินว่าจะทำให้ชุมชนนี้เข้มแข็งขึ้นกว่าเดิมมาก ซันเองใส่ใจกับจาวามากขึ้นในช่วง 2-3 ปีที่ผ่านมา ในอดีตบ่อยครั้งเหลือเกินที่ซันมักปล่อยสเป็กออกไปแต่ขาดตัว reference implementation ที่ดีที่สามารถทำงานได้ตามสเป็กอย่างมีประสิทธิภาพ ผู้ใช้ต้องรอให้ฝั่งโอเพนซอร์สหรือทางเวนเดอร์อื่นๆ มาสร้าง การเปลี่ยน bussiness model ของซันส่งผลให้แนวคิดเช้าชามเย็นชามหมดไป สังเกตุได้จากการหันมาใส่ใจกับสิ่งที่ตัวเองมีมากขึ้น ยกตัวอย่างเช่น NetBeans, Glassfish, Solaris พักหลังๆ เราจะเห็นได้ว่าตัวอย่างที่ยกมาได้รับการยกย่องว่ามีพัฒนาการที่ดีสุด ไม่ใช่แค่ผลิตภัณฑ์แต่รวมถึงเอกสาร เว็บไซต์ ต่างๆ ที่พักหลังได้รับความใส่ใจทั้งด้านเนื้อหาและความง่ายในการเข้าถึงใช้งานอย่างมาก แต่ก่อนถ้าใครไม่เคยเข้า SDN นานมาแล้ว กลับไปดูตอนนี้จะเห็นเอกสารมากมายที่อ่านกันไม่หวาดไม่ไหว
Round 4 : Time to code
ผมมาจากสาย C++ ผมยืนยันได้ว่าทั้งไลบรารี ทั้งตัวภาษาทำให้เขียนง่ายกว่า C++ แน่นอน คนที่มีโอกาสได้เขียนแอพลิเคชันบนมือถือคงช่วยยืนยันคำพูดผมได้ ถ้าเทียบโค้ด Symbian กับจาวาจะเห็นนรกกับสวรรค์ ส่วนถ้าเทียบกับภาษา dynamic ถ้าอยากเปรียบมวยกัน มันจะไม่ใช่ประเด็น Java VS. Python VS. Ruby แล้ว มันจะกลายเป็นประเด็น Static Language VS. Dynamic Langauge มากกว่า ผมว่าถ้าอยากเปรียบมวยกันแบบแฟร์ๆ น่าจะไปเทียบกับภาษา Groovy ที่เกิดมาเพื่อเป็นภาษา dynamic ที่ทำงานบนแพลตฟอร์มจาวาโดยเฉพาะจะตรงตัวกว่า ผมว่าเรื่องพวกนี้มันเป็นรสนิยมส่วนตัวของใครของมันมากกว่า
Round 5 : How does the language do ?
5.1 Block
ผมไม่มีประเด็นอะไรเกี่ยวข้องกับจาวาให้พูดถึง
5.2 : Loop
ตั้งแต่ Java 5.0 ก็มีฟีเจอร์ for-each ให้ใช้ ผมว่าก็ไม่ได้ใช้ยากอะไรเลย น่าจะเป็นที่คุณ bow_der_kliene ขาดความถนัดซะมากกว่า การขาด Closure ในภาษาอาจจะทำให้ดูขาดลูกเล่นหวือหวาไปบ้าง แต่พบกับมันได้แน่นอนใน Java 7.0 หรือถ้าอดใจไม่ไหว Groovy ก็เป็นทางเลือกอื่นให้ลอง
5.3 Collection
อย่างที่บอกจาวาเป็นภาษาแห่งทางเลือก เราสามารถที่จะเลือกได้หมดว่าอยากได้ data structure แบบไหน สามารถแจกแจงย่อยลงไปเพื่อให้เหมาะสมกับงาน มีตัวเลือกอย่าง Stack, Queue, Tree, Map, List, Set ที่ภายในซอยแยกออกเป็นรายละเอียดมากมาย โดยปกติถ้าไม่ได้ใช้อะไรหวือหวาตัวเลือกธรรมดาอย่าง ArrayList, LinkedList, HashMap, HashSet ก็เพียงพอต่อการใช้งาน นอกจากนี้หากยังไม่พอใจยังมีโปรเจ็กโอเพนซอร์สของ Apache ที่รวบรวม Collection ขั้น advance มากมาย หรืออีกตัวของ Javalution ที่นำเสนอ FastMap , Map ความเร็วสูงเหมาะกับงานที่ความเร็ว HashMap ธรรมดาๆ ไม่เพียงพอ มักใช้ในงาน real-time
ผมไม่เชื่อหรอกครับว่ามันจะมี silver bullet ที่สามารถจัดการได้ทุกอย่าง ทุกที่ ทุกความต้องการ
นอกจากนี้สิ่งที่เป็นที่เทิดทูนมากที่สุด คือความสามารถทางด้าน concurrent programming ที่ java.util.concurrent ได้นำเสนอตั้งแต่ Java 5.0 เป็นความสามารถที่มีเอกลักษณ์หาได้ยากในแพลตฟอร์มอื่น
Round 6 : OOP
OOP เต็มรูปแบบเหมาะกับระบบที่ต้องการความมั่นใจสูง สิ่งที่ผิดพลาดไม่ได้ จึงเหมาะกับการสร้างเป็น core ของ business หลัก เหมาะกับระบบขนาดใหญ่ ต้องการความสามารถในการบริหารจัดการ ดูแลรักษา เหมาะกับระบบที่ต้อง scale ได้สูงๆ รองรับการขยาย หลักฐานที่สำคัญก็คือองค์กรขนาดใหญ่ เวนเดอร์เจ้าต่างๆ ก็ให้การยอมรับจาวาทั้งนั้น
Round 7 : Web-Development
จุดประสงค์ที่แท้จริงของ Java EE อย่างที่ผมบอกไป จุดขายของมันอยู่ที่ระบบข้างหลังที่จาวาชนะต่างหาก เราจะเห็นการใช้จาวาเฉพาะในระดับเว็บ หรือองค์กรขนาดใหญ่อย่าง ebay.com เป็นต้น จาวาจึงไม่มีความจำเป็นหากนำมาใช้สร้างเว็บเล็กๆ ที่ PHP CMS ก็เพียงพอ
หากคุณไม่ใช่ engineer เลยไม่ชอบ web framework ตัวหลักๆ ในจาวาเอาซะเลย อย่างที่ผมบอกอีกนั่นแหละว่าจาวาเป็นภาษาแห่งทางเลือก ถ้าคุณชื่นชอบ web framework อย่าง Ruby on Rails จาวามีทางเลือกอย่าง Groovy on Grails, Sails, Trails หรือถ้าคุณถนัด PHP ในการสร้างเว็บไซต์ มันก็ไม่จำกัดว่า PHP จะคุยกับจาวาไม่ได้ซะหน่อย อย่างที่ผมบอก ผมไม่เชื่อเรื่อง silver bullet
Round 8 : GUI
ผมไม่คิดว่า Swing ห่วยเลยนะครับ ข้อจำกัดของ Swing มีน้อยมาก ตั้งแต่ Java 1.5 update 8 ขึ้นไป ซันปรับปรุงการทำงานของ Swing อย่างมโหฬาร ทั้งความเร็วและหน้าตา แม้ Metal/Ocean จะไม่สวยเอาซะเลย แต่ Look & Feel ตัวอื่นๆ ที่ทำงานได้ข้ามแพลตฟอร์ของ 3rd party ที่ดีๆ โอเพนซอร์ส ก็มีเยอะแยะ เครื่องมือพัฒนา GUI มืออาชีพอย่าง NetBeans Matisse ก็สามารถสร้างแอพลิเคชันได้ง่ายและเร็ว เป็นธรรมชาติ เก่งกว่า Visual Studio.NET ด้วยซ้ำไป
ถ้าจะให้พูด เรื่อง Swing พูดได้ยาวเลย เอาเป็นว่าผมเชื่อว่า Swing ยังมีอนาคตที่สดใส และเก่งกว่า ง่ายกว่า GUI toolkit เจ้าอื่นๆ เป็นไหนๆ
Round 9 : ETC.
ผมไม่มีประเด็นให้พูดถึง
Round 10 : Performance
ผมเห็นโค้ดของคุณ คุณ bow_der_kliene แล้วดูไม่น่าจะถนัดจาวา หลายจุดที่เค้าไม่เขียนกันอย่างนั้น เอาเป็นว่าผมเขียนให้ใหม่เท่าที่ผมสามารถละกัน คุณจะเอาไปทดสอบใหม่หรือเปล่าก็เรื่องของคุณละกันครับ
Console คุณ bow_der_kliene ทดสอบความเร็วผ่าน console ของ IDE หรือของ OS? ถ้าเป็น console ของจาวา IDE มันย่อมช้ากว่า console ของ OS เป็นแน่ เพราะปกติมันจะมี buffer ที่ใหญ่กว่า ความสามารถที่มากกว่า ประเด็นอื่นผมไม่มี โค้ดยอมรับได้
Hash
คุณ bow_der_kliene คงใช้ความสามารถของภาษาใน Java 5.0 ไม่คล่อง โค้ดข้างล่างสามารถทำงานได้กับ Java 5.0 ขึ้นไป จุดที่แตกต่างกันคือ เนื่องจากจาวาเป็นภาษา static ดังนั้น HashMap และ Collection ต่างๆ สามารถใส่จำนวน element ที่กำกับให้ VM เตรียมพื้นที่ใน memory ไว้ล่วงหน้า จะได้ไม่
เสียเวลา allocate พื้นที่ใหม่ เพื่อขยายขนาด collection อย่างที่ผมบอก ถ้าจะวัดเฉพาะความเร็ว FastMap ใน Javalution ทำงานได้เร็วกว่า กินหน่วยความจำน้อยกว่า HashMap เดิมๆ เยอะ
import java.util.*;
public class testHash {
public static void main(String[] args) { for (int i = 0; i < 6000; i++) { Map x = new HashMap(6000); for (int j = 0; j < 1000; j++) { x.put(j,i); x.get(j); } } } } IO คุณ bow_der_kliene เขียนส่วนนี้เยิ่นเย่อ และผมไม่เข้าใจจุดประสงค์ว่าทำไมต้องเอา PrintWriter ไปต่อ
import java.io.*;
public class testIO{ public static void main(String[] args) throws IOException {
Writer writer = new BufferedWriter(new FileWriter("c:/test.txt")); for (int i = 0; i < 1000000; i++) { writer.write(i); } writer.close(); } } List โค้ดคุณ bow_der_kliene เทียบกับโค้ด Ruby แล้วมันไม่ตรงกัน น่าจะเป็นอย่างข้างล่างมากกว่า
import java.util.*; public class testList { public static void main(String[] args) {
for (int i = 0; i < 3000; i++) { List v = new ArrayList(1007);
v.add("a"); v.add("b"); v.add("c"); v.add("d"); v.add("e"); v.add("f"); v.add("g");
for (int j = 0; j < 1000; j++) { v.add(j); v.get(j); } } } } Math คุณ bow_der_kliene บอกว่ามีปัญหาเรื่องการ cast ทำให้ผมเชื่อว่าคุณขาดความรู้ด้าน Java 5.0 พอสมควร ตัวอย่างข้างล่างผมใช้ความสามารถ static import เพื่อลดความเยิ่นเย่อของโปรโกรมลง นอกจากนี้หากไม่พอใจความสามารถพื้นฐานใน java.util.Math ยังมีโอเพนซอร์สมากมายที่ช่วยเพิ่มความสามารถตรงนี้ ยกตัวอย่างเช่น Apache Commons-Math
ปัญหาเรื่องตัวแปรขนาด 2 ล้านตำแหน่ง คุณ bow_der_kliene ลองกำหนด argument -Xms100m -Xmx100m เข้าไปด้วยตอนรัน เพื่อบ่งบอกว่าต้องการหน่วยต่ำสุดและมากสุดเท่านี้ ที่ต้องให้ผู้ใช้กำกับเองเพราะเหตุผลทางด้านความปลอดภัย ในกรณีที่ผู้ใช้เขียนโปรแกรมไม่ดีแล้วส่งผลให้ memory leak อย่างไม่ตั้งใจ VM จะได้ปิดโปรแกรมให้เอง การกำกับเป็นการบ่งบอกว่าผู้ใช้รู้ตัวว่าตัวเองกำลังทำอะไร จากการทดสอบด้านหน่วยความจำจะเห็นได้ว่า จาวาจองพื้นที่ส่วนหนึ่งไว้เบื้องต้น ถ้าหน่วยความจำเริ่มเกิน VM จะขยาย Heap ขึ้นไปเรื่อยๆ จนถึงค่าสูงสุดที่กำหนดไว้ ถ้าเกินกว่านั้นจะยกเลิกการทำงานของโปรแกรม
import static java.lang.Math.*;
public class testMath { public static void main(String[] args) {
double[] x = new double[200000]; double[] gauss = new double[200000]; double[] laplace = new double[200000]; double[] si = new double[200000]; double[] sisqr = new double[200000]; double[] bp = new double[200000]; for(int i = 0 ; i < 200000; i++){ x[i] = (i/10000.0)-10.0; gauss[i] = exp(-1.0 * x[i] * x[i]); laplace[i] = exp(-1.0 * abs(x[i])); si[i] = sin(x[i]*PI)/(x[i]*PI); sisqr[i] = si[i]*si[i]; bp[i] = si[i]*cos(x[i]*100); } } } Real-World-Application ตั้งชื่อซะเท่เลยครับ ผมเปิดดูนึกว่าจะใหญ่กว่านี้ซะอีก : ) เท่าที่ดูเขียนได้แบบมือสมัครเล่นไปนิดนึงครับ ต้องขออภัยที่พูดตรงๆ เครื่องที่ผมเขียนบทความนี้อยู่ ขาดเครื่องมือด้านฐานข้อมูล MySQL ผมจึงยังไม่ได้ทดสอบ เอาเป็นว่าเดี๋ยวผมทดสอบแล้วเอามาโพสละกัน ติดไว้ก่อน พอดีผมติดธุระสำคัญที่ต้องจัดการเลยต้องขอตัวก่อน
สรุป ผมสนับสนุนให้เลือกใช้ภาษา เครื่องมือ ให้เหมาะสมกับงานที่ต้องทำ ผมไม่เคยต่อต้านเทคโนโลยีอื่นโดยไม่จำเป็น อันที่จริงผมเป็นคนปรับตัวง่าย และผมไม่ได้เทิดทูนจาวาวิเศษกว่าภาษาไหน สิ่งที่ทำให้ผมออกมาพูดและเรียกร้องให้พูดเรื่องนี้เหมือนปกป้องมัน ผมแค่ต้องการชี้ประเด็นให้เห็นถึงเหรียญทั้งสองด้าน งานของผมเกี่ยวข้องกับจาวาเป็นพิเศษทั้งวิทยานิพนธ์ที่ผมกำลังทำอยู่ และงานในอนาคตของผม
ผมเชื่อว่าหลังจากที่คุณ bow_der_kliene ได้ทดลองใช้จาวาในการทดสอบครั้งนี้ น่าจะพิสูจน์ได้ในระดับหนึ่งว่าจาวาไม่ได้ช้าไปกว่าภาษาที่ทำงาน native และบางการทดสอบก็ได้ผลลัพธ์ดีกว่าด้วยซ้ำ
ปล. ผมทำ code highlight ไม่เป็น
นึกว่า deans4j จะไม่มาซะแล้ว
กลับมาทันเรื่องน่าสนใจพอดี ขอบคุณที่นึกถึงกัน
เห็นจั่วหัวว่า Java ก็นึกถึง deans4j
ขอเถียงตรงนี้เลย ผมใช้ NetBeans ตอนทำ Swing ในโปรเจ็คจบตอนเรียน ปวส. แล้วตอนนี้มาใช้ .NET ด้วย SharpDevelop พบเลยว่า Swing ห่วย .NET ทำได้รวดเร็วและสวยงามกว่ามาก การทำงานข้าม platform ได้ไม่ใช่เรื่องสำคัญอะไรเลย สิ่งสำคัญคือ "คนที่ใช้โปรแกรมนี้ พอใจหรือเปล่า"
ขนาด SharpDevelop ยังทำงานได้ดีขนาดนี้ ผมก็เชื่อแน่ว่า Visual Studio.NET ไม่ได้แย่กว่า NetBeans
ปัจจัยว่าอะไรยาก ง่าย ขึ้นกับหลายอย่างครับ พื้นฐานเราไม่เท่ากัน ผลลัพธ์ก็ออกมาต่างกัน ชอบอะไรก็ใช้เถอะครับ
xcaleber มาแว้ว
ผมขอเป็นคนกลางเอาโค้ดข้างบนมายำแล้วทดสอบใหม่อีกครั้งละกัน
Console
Hash
IO
List
Math
คราวนี้จาวาชนะขาดลอย ซึ่งก็เป็นไปตามที่คิด เพราะจาวาได้รับการปรับปรุงให้เข้ากับการใช้งานมากขึ้นแทนที่จะใช้สมมติฐานเดียวกับ Python และ Ruby งั้นผมขอสรุปว่า อย่าเอารถเกียร์อัตโนมัติมาแข่งกับรถเกียร์กระปุก
ปล. ผมไม่ได้ปรับ Ruby รอผู้เชี่ยวชาญมาปรับดีกว่า แล้วเดี๋ยวจะปรับ Python ตามอีกทีนึง
ปล 2. ผมไม่ใช้ numpy เพราะกลัวจะไม่ยุติธรรม ต้องยอมรับความจริงว่า for-loop ของ Python มันกินแรงพอสมควร ถ้าเลี่ยงได้ก็เลี่ยง ไปใช้ iterator จะเร็วกว่านี้ 2 เท่า แต่โจทย์มันไม่เอื้อเท่าไหร่
แล้วอัตราการกิน memory เป็นไงบ้างครับ ------ LewCPE
lewcpe.com, @wasonliw
วัดใหม่อีกรอบนึง เครื่องเดิม แต่แก้โค้ด hash.java นิดหน่อย
elapsed
maxsize
maxrss
เพิ่มอีกนิดหน่อย เนื่องจากจาวาได้คอมไพล์เป็น bytecode ล่วงหน้าไปแล้วเลยไม่ต้องเสียเวลาคอมไพล์ใหม่ ผมเลยแก้นิดหน่อย ย้ายคำสั่งพวกนี้ลงไปในโมดูลเพื่อคอมไพล์เป็น pyc/pyo เรื่องขนาดหน่วยความจำคงไม่ต่าง ขอแค่เวลาอย่างเดียวพอ และถือโอกาสทดสอบใหม่อีกรอบด้วย
ช่วยได้นิดนึง
ผมลอง run console ของ java เทียบกับ python ดู บนเครื่องผม (ubuntu 6.10 + java 1.5.0_08-b03 + python 2.4.4c1) python ใช้เวลา 1.3 sec (python console.py > t) java ใช้เวลา 6.9 sec (java -cp . console > t)
แปลกดี ทำไมของคุณสุกรี java ใช้เวลานิดเดียว
เดาว่าเป็นประเด็นเรื่อง buffer ก็เลยเพิ่ม
run แล้วเหลือเวลา 1.13 sec.
สงสัยเป็นเพราะผมโยนลง /dev/null ทั้งหมด เครื่องผม ubuntu 7.04+java 1.5.0_11-b03+python 2.5.1c1
ขอบคุณที่ช่วยทดสอบครับ ถ้าจะทดสอบด้านหน่วยความจำก็ยินดีครับ แต่ช่วยแก้โค้ด Hash บรรทัด "Map x = new HashMap(6000);" จาก 6000 เป็นแค่ 1000 ด้วยครับ พอดีผมคงตาลายไปหน่อย
แก้เป็นแบบนี้นะ เดี๋ยวรันใหม่
มีคนจะอาสา เอา code ไปลอง บน os อื่นมะ เพื่องูๆ จะเก่งกว่า หรือไม่เกี่ยวหว่า?
ขอคุณคุณ dean4j มากครับสำหรับความรู้เพิ่มเติม :D
BioLawCom.De
ยินดีครับ
ผมชอบแนวคิดของท่าน deans4j ทั้งตอนต้นและท้าย แลกเปลี่ยนเพื่อวิชาการ แต่ผมไม่เห็นด้วยกับประโยคนี้เท่าไร "น่าจะพิสูจน์ได้ในระดับหนึ่งว่าจาวาไม่ได้ช้าไปกว่าภาษาที่ทำงาน native และบางการทดสอบก็ได้ผลลัพธ์ดีกว่าด้วยซ้ำ" เพราะต้องนิยาม native สำหรับแต่ละคนนั้นหมายถึงอะไรหรือปล่าว? :) เพราะส่วนตัวคิดว่าตัวแปลภาษาใดก็ตามที่ไม่ได้แปลเป็น machine code แต่แปลงเป็น intermediate code ไม่มีทางที่จะเร็วกว่า(เพราะต้องทำการแปล bytecode เป็น machine code อีกที) [ในบทความมี interpreter ด้วย ไม่ขอรวมนะครับ] แนวคิดเรื่อง intermediate code มาตั้งแต่ UCSD pascal(UCSD p-System) เพื่อทำให้ code สามารถ portable แล้ว microsoft นำมาใช้ใน VB(เราถึงเห็น VBrunxxx และ VB ทำงานช้า) แต่ port ไม่ได้ .. ฮา ผมชอบเล่น assembly(แต่ตอนนี้เลิกไปแล้ว)สมัยก่อนจะมีหัวข้อที่ programmer ชอบทำกันก็คือ optimize code(แล้วแต่ optimize เพื่ออะไร) ส่วนตัวใช้ delphi เป็นหลัก(ติดมาจาก turbo pascal) และ ใช้ C บางครั้ง (ผมชอบ code ที่เป็น native cpu code แต่หลังๆเริ่มเปลี่ยนความคิดไปเยอะเพราะฮาร์ดแวร์เร็วมาก) ผมเคยบอกใน blognone นี้ว่าโปรแกรมผมจะไม่เขียนโดย java เพราะไม่ชอบเป็นการส่วนตัว(บังเอิญอาจสั้นไป จริงๆคือไม่อยากใช้ intermidiate code โดยไม่จำเป็น และมี code ที่ต้องทำ hook กับ OS .. สรุปคือถ้าอันไหนเป็น intermediate code ก็ยังไม่ชอบอยู่ดี[แต่ต่อไปก็ไม่แน่ เพราะแรงเริ่มสู้เด็กใหม่ๆที่ขยันและเก่งขึ้นเยอะไม่ได้]) เรื่องภาษาคอมฯบางทีก็เหมือนศาสนาฯ จริงๆผมก็มีส่วนชอบ java (และเป็นคนเขียนบทความของ java เป็นคนแรกๆในไทย-วารสาร internet magazine ฉบับที่ 1)และที่ผมถือว่ายังหาคนเทียบยากก็คือ J2EE สรุปบทความไม่ขอวิจารณ์เพราะความรู้ไม่พอ แต่ขอไม่เห็นด้วยเรื่องภาษา native แต่ความเร็วไม่ใช่การโตต่อไปเสมอไป อย่างเช่น ภาษา forth [forth on wiki] ที่สมัยก่อนถือว่าเร็วมาก(เป็นภาษาที่ถูกออกแบบโดยเอาใจคอมฯเป็นหลัก ภาษาอื่นๆมักเอาใจคนเป็นหลัก)แต่ภาษานี้ก็หายไปแล้ว(หรือยังมีใช้อยู่หว่า?) ---------------- http://www.ThaiBuddy.com ฟรี T<->E dictionary แค่ชี้ mouse
คุณ ThaiBuddy อย่าเชื่อผมมาก อยากให้ลองเล่นเอง อย่าให้ประสบการณ์ในอดีตมาปิดกั้นความคิด นานมาแล้วครับ ที่จาวาเป็นภาษา interprete ปัจจุบันจาวาเป็นลูกผสมครับ
น่าจะเคยได้ยิน Just In Time Compiler ภายใน HotSpot มาบ้าง
สิ่งที่มันทำคือมันฉลาดพอที่จะอ่านก้อนโค้ดมาล่วงหน้า compile พร้อมกับ optimize ณ วินาทีสุดท้ายให้เหมาะสมกับสถาปัตยกรรมของเครื่องนั้นๆ มากที่สุด บีบคั้นเอาทุกหยดทุกรายละเอียด เพื่อให้ได้ประสิทธิภาพสูงสุด แล้ว cache เก็บเอาไว้ เป็นเหตุผลที่ว่าทำไมจาวามีโอกาสเร็วกว่า c
การทดสอบของคุณ sugree ไม่ได้บอกอะไรเป็นนัยสำคัญหรอกหรือ?
ปัจจุบัน HotSpot เปิดโอเพนซอร์สล่วงหน้า ถ้าสนใจลองหาอ่านบทความทางด้านนี้ดู จะพบว่า HotSpot ฉลาดสุดๆ
ผมลืมเรื่อง just in time compiler เลย(จริงๆมีมาตั้งแต่ต้น)แต่อย่างไรผมว่า native compiler(ถ้าเขียนcompiler ไม่ห่วยก็น่าจะชนะ) ... ฮิ ฮิ(อาหารแช่แข็งไม่อร่อย)ผมไม่ปิดกั้นความคิดแน่นอนครับ(ถ้าพิสูจน์ได้) .. สรุปจริงๆแล้วไม่มีแรงตามเทคโนโลยีหลายอันมากกว่าครับ(หลักจากวางมือหลัง JAVA ออกมา 2-3 ปี) อย่างไรการ optimize ก็ยังสู้ native ไม่ได้ แต่ถ้าพูดถึงเทคนิค(caching,prefetch,predict ..etc)ก็ต้องยอมละครับ เพราะเรื่องเทคนิคเป็นเรื่องของการ implement(ซึ่งคงเถียงกันไม่สิ้นสุด) อาจเพราะไปนึก J2ME เป็นหลัก(เอ่ยในบทความ) ลืมนึกถึง J2EE :P ถ้า hardware ใกล้เคียง เช่น symbian,J2ME อย่างไรโปรแกรมบน symbian ก็น่าจะเร็วกว่า(native)? แต่แอบกระซิบว่าผมกำลังจะเขียนโปรแกรม dictionary บนมือถือ คงไม่ต้องถามว่าใช้อะไร(J2ME?) .. ใช่ครับ คงไม่ต้องบอกเหตุผล ในเวลานี้ อนาคตค่อยพูดกันอีกที) :) ผลการทดสอบของคุณ sugree ไม่มี native จริงๆนี่ครับ? หรือผมเข้าใจผิดหว่า(ก็ python,ruby มันเกิดมาเป็น interpreter?(ไม่พูดถึง JIT หรือเทคนิคอื่นผสมนะ) หรือเพราะผมไม่ได้ตาม?) หวังว่าคงไม่มีใครเอาผล JAVA ไปเทียบกับ .Net อีกนะ(เพราะไม่ใช่ native ทั้งคู่ แม้ว่าจะทำเป็น native ได้) ถ้าดู hotspot ก็เกิดมาคู่ๆกับ JAVA ถ้าใครเคยเห็น JAVA run บนเครื่อง 80486 หรือ pentium 1(ตอนนั้นมี just in time แล้ว) คงต้องบอกว่ายังรับไม่ได้[ตอนนั้นไม่มีเครื่องมือ library ..etc มากเท่าทุกวันนี้] :) แต่ตอนนี้ hardware มันไปไกลจริงๆ(ต้องหาเครื่องช้าๆมาลอง run ก็ได้ครับ)..เป็นว่าแค่จุดเล็กๆที่ผมยังไม่ชอบพอที่จะเปลี่ยนใจไปใช้(ถึงบอกว่าภาษาคอมฯเหมือนศาสนา ถกเถียงกันไปอาจไม่จบ แต่ถ้ามีใจเป็นกลางเพื่อแลกเปลี่ยนเรียนรู้ ศาสนาไหนก็เรียนรู้กันได้) :) ---------------- http://www.ThaiBuddy.com ฟรี T<->E dictionary แค่ชี้ mouse
ruby, python เป็นภาษา interpret ถูกแล้วครับ ประโยคนั้นผมตั้งใจชี้ให้เห็นความแตกต่างของ HotSpot
ส่วนผมมองประโยชน์ที่ได้จากภาษาและความถนัดส่วนตัวมากกว่าครับ java มันก็ไม่ใช่ว่าไม่ดีอะไร เพียงแต่คนเขียนต้องเข้าใจเรื่อง Garbage หน่อย แล้วจะควบคุมการใช้ memory ได้ ถ้าพวก GUI นี่ผมว่า .NET ดีกว่าทุกภาษาเลยครับ
ส่วน Library ที่ java ชนะขาด python ก็พวกทำรายงานครับ ตอนผมจะใช้ python ทำ mini-project นึกถึงเครื่องมือทำรายงานก็มีแต่ของ Java ล่ะครับ ฟรี ๆ ทั้งนั้น สำหรับงานด้านสารสนเทศ java ยังจำเป็นอยู่เยอะเลย ด้าน web ตอนนี้ GWT ก็ช่วยลดจุดอ่อนเรื่องช้า กินแรมเยอะของ JSF ไปได้ อีกประเด็นคือ Concept ของ Hibernate มันดีนะครับ ถ้าศึกษาแล้ว ทำให้เปลี่ยน RDBMS เป็นเจ้าไหนก็ได้ โดย business logic ไม่ต้องตามแก้ หรือถ้าแก้ก็ไมต้องไปทำอะไรกับ RDBMS เลย Hibernate จัดการให้หมด
เพื่อนผมฝากถามครับ ทำไมภาพประกอบ เกย์ จัง
นึกว่าจะไม่มีใครถามเรื่องรูปเสียแล้วครับ :D เป็นรูปจากหนังเรื่อง Fight Club น่ะครับ BioLawCom.De
ผมคิดว่า คุณไม่ค่อยถนัดจาวาเอาซะเลยนะครับ ผมคิดว่าการทำ type cast หรือ for loop เป็นสิ่งที่เป็นพื้นฐานมากในการเขียนจาวา ถ้าคุณใช้เวลาศึกษาเพิ่มอีกหน่อยก็น่าจะทำได้แล้ว ไม่ได้ยากอะไรเลย
ในโลกของจาวานั้นมีทางเลือกหลายทาง มีทางเลือกมากมายซึ่งถ้าผู้ศึกษาใหม่ ๆ เวลาศึกษาตัวภาษาพอเขียนได้แล้ว จะไปศึกษาต่อ ๆ ไปจะเจอเรื่องอะไรต่าง ๆเต็มไปหมด ไม่ว่าจะเป็น JSE JEE JME AWT Swing servlet ejb และ library ที่มีให้เลือกมากมาย อาจทำให้สับสนได้ง่าย อันนี้ผมว่าเป็นข้อด้อยอันหนึ่งที่ทำให้ต้องใช้เวลาศึกษาค่อนข้างมากกว่าจะทำความเข้าใจในแต่ละเรื่อง แต่ถ้ามองในทางกลับกัน ถ้าสำหรับการศึกษาผมว่ามันเป็นความหลากหลายที่เป็นแหล่งความรู้ที่ดีมาก ๆ กับเรา ซึ่ง library ใน java หรือ opensource project ต่าง ๆ ที่มีให้ใช้ก็มีมากมายและมีทั้งดีและไม่ดีอย่างที่คุณเขียน เพราะมีเยอะมากจึงมีทั้งดีและไม่ดีซึ่งแนะนำว่ามีบทความต่าง ๆ คอยเปรียบเทียบให้อยู่แล้ว ซึ่งสามารถกรองมาให้เราได้ในระดับหนึ่ง และค่อยไปศึกษาต่อจะทำให้ไม่สับสนครับ
เนื่องจากสิ่งที่เนื้อหามาก ย่อมมีความสับสนได้ง่าย แต่ต้องแยกกันก่อนว่าอะไรที่มันมาก จริง ๆ ตัวภาษาจาวา แนวความคิด OO ก็มีเหมือน ๆ ภาษาทั่ว ๆ ไป syntax ต่าง ๆ ถ้าคุณศึกษาภาษาใดภาษาหนึ่งก็คงคล้าย ๆ กันไม่ต่างอะไรกัน ส่วนความเชี่ยวชาญในแนวคิด OO เป็นสิ่งที่ต้องใช้เวลาศึกษาและฝึกฝนพอสมควรที่จะเข้าใจและใช้ได้ถูกต้อง ซึ่งอันนี้ไม่ขึ้นกับภาษา แต่ขึ้นกับลักษณะของภาษา ภาษาอื่นที่เป็น OO ถ้าคุณเข้าใจดีอยู่แล้วก็สามารถนำแนวคิดไปใช้ได้เหมือน ๆ กัน ซึ่งส่วนนี้ควรศึกษาตัวภาษา และแนวคิดให้เข้าใจให้แม่นยำเป็นส่วนแรก แล้วจึงจะไปศึกษาส่วนอื่น ๆ ต่อไป
ส่วนที่เริ่มมีมากก็คือ library ต่าง ๆ ที่มีให้ใช้ ไม่ว่าจะเป็นของภายใน java เอง ซึ่งอันนี้ จาวาแบ่งหลัก ๆ ออกเป็น 3 ระดับ ก็คือ JSE JME JEE ซึ่งก็คือสำหรับทั่วไป สำหรับมือถือ และสำหรับระดับ enterprise ซึ่งในส่วนนี้ก็จะมี library ให้เรียกใช้เพิ่มเติมตามลักษณะการทำงานของงานในหมวดนั้น ๆ ซึ่งเราจะทำงานในกลุ่มไหน ก็ไปศึกษา library ในส่วนนั้น ๆ ที่มีให้ใช้งานเพิ่มเติม ซึ่งควรศึกษาในส่วน library ของในส่วนทั่วไปให้รู้ก่อน ซึ่งก็จะมีพวก collection , io , thread หรือ concurrency แล้วถ้าจะไปทำ GUI app ก็ไปศึกษา swing หรือจะไปทำ JME ก็ไปศึกษา library ใน JME ที่มีให้ใช้งาน ต่อ ๆ ไป หรือในส่วน JEE ก็ไปศึกษาชุดคำสั่งที่มีให้ใช้งานต่อไป ส่วนต่อไปก็ java project ที่เป็น open source ซึ่งมีมากมาย หลังจากที่เราเริ่มพัฒนางานในหมวดที่เลือกแล้ว ในส่วนนี้ก็จะเข้ามาช่วยเราในการพัฒนางานเพื่อช่วยให้ไม่ต้องไปทำขึ้นมาใหม่ ซึ่งจะประหยัดเวลา ซึ่งมีทั้งเป็น library ให้เรียกใช้ หรือเป็น framework วาง pattern ในการพัฒนางานที่ดีให้กับเรา ทำให้พัฒนาได้ง่ายขึ้น และรวดเร็วขึ้น แต่ก็ต้องแลกกับเวลาที่ต้องใ้ช้ศึกษาการใช้งาน
ผมยังไม่เคยตอบใน blognone เลย อ่านมานานแล้วเหมือนกัน คราวนี้ได้สมัครและตอบสักที ก็อยากชี้แจงในเรื่องของจาวา ผมคิดว่าในจาวามีความหลายหลายค่อนข้างมาก และ community ก็มีมาก ซึ่งเป็นแหล่งความรู้ที่ดีสำหรับการพัฒนาความคิดและงานของเรา แต่เมื่อมีเยอะก็ต้องใช้เวลาพอสมควรในการศึกษา แต่ถ้ามีคนแนะนำหรือวางแนวทางการศึกษาดี ๆ ก็จะได้ความรู้มาก และความคิดดี ๆ มากเหมือนกันครับ จริง ๆในฐานะ programmer ผมคิดว่าเมืื่่อเราเชี่ยวชาญภาษาใดแล้ว ก็ควรศึกษาภาษาอื่น ๆ เพิ่มเติม เพื่อเพิ่มมุมมองในการพัฒนางานของเราให้ดีขึ้น เพราะว่าภาษาแต่ละภาษามีข้อดีและข้อด้อยแตกต่างกัน ความเข้าใจที่เรามีต่อภาษาหนึ่งจะทำให้เราเปรียบเทียบกับภาษาอื่นได้ดีขึ้นเมื่อเราเริ่มไปศึกษาภาษาอื่นต่อ ซึ่งจะขยายความคิดและแนวทางการแก้ไขปัญหาให้กับเรา อันนี้หมายความว่าเราลงไปศึกษาจริง ๆ ก็จะเห็นถึงข้อดีข้อเสียได้ชัดขึ้น เพราะเรามีสิ่งเปรียบเทียบกับความรู้เดิมของเรา และจะทำให้เลือกใช้งานได้ดีขึ้นได้ถูกต้องเหมาะสม
ในส่วนของ performance ผมยังไม่มีความเห็นครับ เพราะยังไม่ได้ทดลองดู แต่คิดว่าในการพัฒนางานนั้นมันมีปัจจัยอื่น ๆ ประกอบด้วยนอกจากประสิทธิภาพครับ
ปล. คงเขียนมาชี้แจงเท่านี้แหละครับว่าจาวาไม่ได้แย่อะไรขนาดนั้นซะหน่อยครับ (ล้อเล่นนา) ;p
ตามอ่านเงียบๆ มานานทั้งที่นี่และ biolawcom.de
คิดว่าเรื่องที่คุณยกมา คุณ bow_der_kleine เค้าคงรู้หมดแล้วนะ เพียงแต่อาจจะไม่ถนัดเขียนจาวาเท่าไร (แถวนี้มีเซียนๆ เยอะ มีพระเจ้าจาวาอยู่ด้วย 1 องค์ เห็นมี "เทิดทูน" :P)
ตามอ่านคุณ deans4j มานานเหมือนกัน ทั้งที่นี่ pantip narisa
(ผมก็ใช้ java หากินนะ แต่ไม่เคยเทิดทูนขนาดนี้อะ)
เหมียนกันเลยครับ
นานา จิตตัง ครับ เวลาเปลี่ยน บางสิ่งบางอย่างเปลียน เรามิอาจค้นพบและคิดได้ตลอดเวลา
อย่าเลือกสิ่งที่ดีที่สุดครับ เลือกสิ่งที่เหมาะสมที่สุด
ใช่ครับ หนับหนุน
หนับหนุนด้วยคน ---------------- http://www.ThaiBuddy.com ฟรี T<->E dictionary แค่ชี้ mouse
ตามอ่านมานานครับ แต่ว่าเพิ่งสมัคร ฝากเนื้อฝากตัวด้วยละักันครับผม (นายตาหวาน จาก TGDX ครับ)
ตอนแรกอ่านแล้วรู้สึกหงุดหงิด ๆ เล็ก ๆ เพราะว่าตัวเองใช้ Java อยู่บ้าง (ส่วนใหญ่ใช้ .NET หรือไม่ก็พวก Win32 ครับ หลัง ๆ มานี่) ศึกษา Lua มานิดหน่อย อิอิ อ่านแล้วความเห็นไม่ค่อยตรงกับที่รีวิวเท่าไหร่ แต่ว่าอ่านที่ท่าน deans4j โพสต์มาแล้วเลยคิดว่าคงไม่ต้องออกความเห็นตรงจุดนี้แล้วล่ะมั้ง
โดยส่วนตัวผมว่าการเอามาเปรียบเทียบแบบนี้ไม่ค่อยจะได้ประโยชน์เท่าไหร่ คิดว่า ถ้าให้ดีลองลิสต์เอาข้อดีของแต่ละภาษามาให้ดู แล้วให้คนอ่านมาเปรียบเทียบว่าภาษาไหนเหมาะสมกับงานประเภทไหน น่าจะได้ประโยชน์มากกว่าครับ
อย่าง สมมติ คนใช้ภาษา C/C++ มาก่อน ก็แน่นอนว่าเค้าจะต้องชอบอะไรที่มันคล้าย ๆ กัน อย่างผมเนี่ยผมจะถือว่า {} คือสิ่งที่สวรรค์ประทานมาให้เลยนะ โค๊ดในภาษา Java ถ้าถามผมนะ ผมว่ามันใกล้เคียงความงามชั่วนิรันดร์มากทีเดียว (เว่อร์มะ) แต่สำหรับคนใช้ BASIC มาก่อน ก็ร้อง ยี้ อะไรฟะ {} ไม่เห็นสื่อความหมายอะไรเลย งี้เป็นต้น
แล้วก็อาจจะเพิ่มส่วน Application Deployment ด้วยก็ดีนะครับผมว่า
อ้อ ในหลาย ๆ กรณี SWING นี่ใช้ง่าย ยืดหยุ่น มากกว่า .NET อีกนะครับ อาจจะช้า+หน้าตาไม่สวยไปนิดก็เหอะนะ :P
ผมยังเชื่อว่า Battery included ของ python ดีกว่า standard library ของ java นะ
ผมจะใช้ Java ในกรณีเดียวเท่านั้นคือ ต้องเขียนโปรแกรมร่วมกับคนอื่น ไม่งั้นผมใช้ภาษาอื่นตลอด
ปล. ผมเป็นสาวก python
pittaya.com
ผมจะใช้ภาษาอื่นเมื่อต้องใช้ครับ : )
ใช้ภาษาใจ :)
ขนาดนั้น? ตกลงคุยกับสาว หรือ คุยกับคอมฯ? :) ---------------- http://www.ThaiBuddy.com ฟรี T<->E dictionary แค่ชี้ mouse
ผมว่า ถ้าจะวัดความเร็วจริงๆ น่าจะหา code จากสุดยอดคนมาเทียบกันเลย แบบที่ Topcoder.com หรืออะไรสักอย่างเขียนกัน *0* จริงๆแล้วแต่คนชอบอะ ถ้าจะทำงานจริงผมใช้เป็นแค่ java ที่เสกได้ทุกอย่าง แต่ python มันมีดีตรงที่เอาไว้ใช้เขียน พวกงานที่เขียนแปปเดียว อ่านง่ายๆ เช่นพวก Swap ตัวแปลงี้ จาวา ซะยาว เลยกว่าจะสลับกันได้ พวก งูๆๆ เนี้ย บรรทัดเดียว
ps. What is Battery included?
อ่าน
Computer Language Shootout
เข้ามาเก็บเกี่ยวครับ :) ส่วนตัวคิดว่าคนที่มีสิทธิเลือก (ได้อย่างเหมาะสมและถูกต้อง) จะเป็นคนชนะในเกมครับ แต่ก็ต้องทำงานหนักกว่าคนอื่นหลายเท่า
น่าจะมีประเด็นเรื่อง Job Opportunity ด้วยนะเนี่ย ... ไม่ว่าจะเขียนภาษาไหนก็เถอะ ถ้าไม่มีงาน ไม่มีตังค์ ก็ ...
แฟนพันธุ์แท้สตีฟจ็อบส์ | MacThai.com
นั่้นสิ น่าจะเอาคนเก่งๆ ในภาษานั้นๆ มาแข่งกันสมัครงาน ให้เวลาเท่ากัน ดูว่าใครได้งานเร็วกว่ากัน เงินเดือนมากกว่า วัดผลสองปี ใครมีความสุขในการทำงานมากกว่ากัน
เกี่ยวมะ???
ผมว่าอันนั้นมันก็อีกประเด็นนะครับ บนเว็บนี้เองก็มีข่าวแนวโน้มการจ้างงานเข้ามาเรื่อยๆ แต่ไม่เยอะเพราะเมืองไทยไม่มีใครทำวิจัยเชิงลึกอย่างจริงจัง
ถ้าใครทำแล้วเขียนดีๆ ผมก็เอาขึ้น Sticky แน่ๆ ล่ะ ------ LewCPE
lewcpe.com, @wasonliw
เห็นด้วยกับคุณ Lew เพราะมีหลากหลายประเด็น เน้นที่ผลที่ต้อง เช่น ต้องการทำเสร็จเร็ว การทำงานเร็ว ..ฯลฯ แต่ทำอย่างไรมีความสุขนี่เข้าสมัยดี .. ฮิ ฮิ ---------------- http://www.ThaiBuddy.com ฟรี T<->E dictionary แค่ชี้ mouse
หากว่าหัวข้อดี ๆ อย่างนี้อยู่แต่ในบล็อกของคุณโบว์ คงไม่ได้รับการคอมเม้นท์เยอะเพียงนี้แน่ ๆ แสดงว่าที่นี่เป็นคอนเทนเนอร์ที่ดีครับ ^o^ ----- http://www.peetai.com | เว๊ปบล็อกที่โม้แต่เรื่อง Software as a Service.
จริงๆเวลาเปรียบเทียบภาษา น่าจะระบุว่าเอาภาษานี้ไปใช้งานในแง่ไหนด้วยน่าจะดีกว่านะ แล้วก็ ประสปการณ์ของ programmer ทำให้ performance ของ program เดียวกัน ต่างกันได้มากจริงๆ
ส่วนตัวเขียน java เป็นหลัก เคยลอง python กับ ruby นิดๆหน่อยๆเท่านั้น เลยไม่รู้มากเรื่องสองภาษานี้ รู้สึกว่าเอา java มาเขียนระบบ distributed ใหญ่ๆ ต่อกับ system อื่นๆเยอะๆ transection หนักๆ ก็ยังทำงานได้ดี เสถียร แต่ถ้าจะต้องเขียนระบบที่ต่อกับ system อื่นๆมากมาย ยังไม่รู้ว่า python กับ ruby จะทำได้มั้ย? เพราะเห็นที่โปรโมทกันส่วนใหญ่จะเป็นเขียนเวปธรรมดาต่อกับ database เฉยๆ มากกว่า (แนวๆ shopping cart, cms)
ผมก็เชื่ออย่างนั้นนะ ว่าจาวาเหมาะกับระบบใหญ่ๆ แต่ผมมองว่าระบบใหญ่ๆ พวกนั้นมันต้องประมาณ eBay หรือไม่ก็ Amazon หรือไม่ก็พวกการเงินที่มี transaction ต่อวันเยอะๆ ไปนั่นเลย ส่วนเว็บในบ้านเรา 95% วันนึงอย่างมากก็ 1M PV โดยที่ข้อมูลไม่ได้มีอะไรเปลี่ยนแปลงมากมาย เกือบทั้งหมดเป็น CMS
ผมไม่ได้ไม่ชอบจาวาเพราะข้อเสียของมัน ข้อเสียของจาวาโดยทั่วไปแล้วมีเหตุผลทางวิศวกรรมที่จำเป็นต้องยอมรับข้อเสียเหล่านั้นเสมอๆ แต่ผมไม่ชอบจาวาที่หลายๆ คนพยายามมองมันเป็นยาวิเศษใช้งานได้กับทุกโรค ------ LewCPE
lewcpe.com, @wasonliw
อืม.. ผมได้ยินหลายคนบอกมาแล้วว่า จาวาเหมาะกับระบบใหญ่ๆ แต่ตอนผมทำงานที่บริษัทเก่า เป็นโปรแกรมเขียนด้วย C จัดการ transaction ด้านการเงินขนาด 60-70 ล้าน transaction ให้เสร็จภายใน 2 นาที ยังทำงานแทบไม่ทัน ตัว process ก็กิน memory เกือบถึง 4 GB
ผมเลยสงสัยว่า ถ้าภาษาที่ทดสอบแล้ว performance กิน memory มากกว่า C และใช้ cpu time มากกว่า C อย่าง Java, Python, Ruby จะเหมาะกับระบบใหญ่ๆ หรือครับ
อีกอย่างมีเกณฑ์ยังไงในการแบ่งว่าระบบนี่ใหญ่อ่ะครับ ?
ใหญ่ != เยอะ
น่าจะอยู่ที่ลักษณะงานครับ ผมเข้าใจว่าคำว่า "ใหญ่่" คือใหญ่ในแง่ของ function การทำงาน เช่นระบบ CMS ที่มี features เยอะๆนี่จะเรียกว่าใหญ่ก็ไม่ผิด
ที่บอกว่า "จาวาเหมาะกับระบบใหญ่ๆ" ผมกลับไม่คิดถึงเรื่องของการรับ load หรือการทำงานเป็น realtime แต่นึกไปถึงการออกแบบระบบที่ซับซ้อนมากกว่า
ถ้าผมเจอ case แบบที่คุณ kaze เจอ ผมก็จะใช้ C เขียนในงานส่วนนั้นครับ ระบบซอฟต์แวร์มันไม่จำเป็นต้องเป็น จาวา หรือ C อย่างเดียวไม่ใช่หรือ
ในกรณีแบบนี้การเลือกใช้ภาษาไม่ใช่ทางแก้เดียว แม้การใช้ C อาจจะเร็วที่สุด แต่เท่าที่บอกว่ายังแทบไม่ทัน และกินถึง 4 GB แสดงว่าอาจจะไม่รองรับการขยายตัวของระบบที่เร็วกว่าการพัฒนาของฮาร์ดแวร์ ถ้าไม่ไหวจริงๆ ก็ต้องเปลี่ยนสถาปัตยกรรมให้ทำงานกันหลายเครื่องอยู่ดี เข้าตำราสองหัวดีกว่าหัวเดียว
ไม่ใช่ว่า C ทำระบบซับซ้อนหลายเครื่องไม่ได้ หรือไม่มีประสิทธิภาพ แค่บังเอิญว่า time to result มันจะนานกว่า และโอกาสผิดพลาดก็สูงกว่า ถ้าดูผลการวัดประสิทธิภาพเบื้องต้นข้างบนก็บอกนัยสำคัญได้หลายมุม เช่น
1. เมื่อเขียนอย่างถูกวิธี Java จะเร็วกว่า Python เสมอ ซึ่งก็เป็นเรื่องปกติที่ static type จะเร็วกว่า dynamic type ถ้า Python เร็วกว่าก็แปลกแล้ว 2. เมื่อเขียนแบบเรื่อยเปื่อย Python จะเร็วกว่า Java ซึ่งเป็นจุดขายอย่างนึง บางครั้งเราต้องการพัฒนาระบบที่มีโครงสร้างซับซ้อน การปรับแต่งเป็นเรื่องรองลงมา ซึ่งต้องทำหลังจากที่โครงสร้างโดยรวมทำงานได้จริง ในความเป็นจริง Python ถูกออกแบบมาเพื่อเป็นภาษาสำหรับพัฒนาระบบต้นแบบ ทั้งนี้เป็นเพราะการออกแบบระบบขนาดใหญ่นั้นอาจมีข้อผิดพลาดในการใช้งานจริง การเขียน C อยู่ครึ่งเดือนแล้วพบว่ามีข้อบกพร่องต้องกลับไปแก้ใหม่เป็นเรื่องที่น่ากลัวมาก แทนที่จะต้องเผชิญความเสี่ยงแบบนั้นเราอาจพัฒนาระบบต้นแบบด้วย Python ทั้งหมดในเวลาเพียง 1 สัปดาห์ ถ้าพบข้อบกพร่องก็สามารถแก้ได้อย่างรวดเร็ว เมื่อทุกอย่างลงตัวจึงเขียนใหม่ด้วย Java หรือ C ก็แล้วแต่จะสะดวก สรุปง่ายๆ ว่า Python คือ pseudocode ที่บังเอิญทำงานได้
จุดสำคัญของการทำงานแบบ real-time หรือ mission critical ไม่ได้อยู่ที่ภาษาเสมอไป สถาปัตยกรรมสำคัญกว่ามาก ระบบที่ดีก็เหมือนถนน จะเอารถอะไรมาวิ่งก็วิ่งได้เต็มความเร็ว เพิ่มถนนรถก็วิ่งได้มากขึ้น ถ้าถนนขรุขระต่อให้มีรถแรงๆ ก็วิ่งไม่ออกอยู่ดี
ถ้าเป็นในแง่ของ Pseudo code เพื่อพัฒนาระบบที่มีความซับซ้อนแล้ว นอกจากความเร็วของโปรแกรมที่ทำได้ดีกว่า Java (ถ้าเขียนแบบเรื่อยเปื่อยอย่างที่บอก) แล้ว Python มีอะไรที่ช่วยสนับสนุนการเขียนแบบนี้ (เขียนเชิง Pseudo Code) อีกรึเปล่า?
----------------------- http://www.seasandsong.com/
เป็นคำถามที่ดีมาก
1. syntax และ grammar ของ Python เป็นตัวช่วยอย่างมาก คนส่วนใหญ่จะมองข้าม แต่ผมกลับเห็นว่ามันเจ๋งที่สุด มีไม่กี่ภาษาที่เห็นโค้ดแล้วเข้าใจในอึดใจเดียว Python ก็เป็นหนึ่งในนั้น เพราะไม่มีสัญลักษณ์พิเศษซับซ้อน ทุกอย่างกระจ่างชัดในตัวเอง ผมถึงบอกว่ามันเป็น pseudocode ที่บังเอิญทำงานได้จริง 2. Batteries Included เป็นสิ่งที่ใครๆ ที่ได้ลองใช้ Python ซักครั้งจะติดใจ อธิบายง่ายๆ ว่าไลบรารี่มาตรฐานของ Python มีสิ่งที่คนส่วนใหญ่มักใช้บ่อยๆ ทำให้การพัฒนาโปรแกรมที่ซับซ้อนง่ายลงไปถนัดใจ บางคนเคยบอกว่าไลบรารี่ที่ให้มามันไม่มีประสิทธิภาพ ผมไม่เถียง และเห็นด้วยในหลายๆ ครั้ง เจตนาของหลักการนี้มีเพื่อทำให้เรื่องยากกลายเป็นเรื่องง่าย แต่ไม่ใช่วิธีที่ดีที่สุดเสมอไป สิ่งที่ถูกรวมเข้ามาในไลบรารี่มาตรฐานล้วนแล้วแต่ผ่านการคัดกรองมาอย่างดีว่า "เป็นของเล่นที่ใช้งานได้จริง" แก้ปัญหาแบบตรงไปตรงมา ไม่สลับซับซ้อน 3. โครงสร้างข้อมูลพื้นฐาน เช่น list dict tuple ใน Python นั้นไม่ใช่กระสุนเงินในตำนานก็ใกล้เคียง มันไม่ใช่สิ่งที่ดีที่สุดสำหรับทุกงานเสมอไป แต่ในกรณีทั่วไปเราสามารถใช้มันโดยไม่รู้สึกว่าเป็นตัวถ่วง และในบางครั้งมันก็เร็วน่าพอใจ ที่สำคัญมันยืดหยุ่นมากพอที่จะรองรับงานเกือบทุกประเภท ถ้าอยากได้มากกว่านี้ก็สร้างลูกสร้างหลานกันเอง
เอ่อ คิดออกแค่นี้ ลองนึกถึงวิชา data structure ซึ่งแต่ละที่ก็สอนคนละแบบ ใช้คนละภาษา ปัญหาที่ผมพบตลอดเวลาก็คือมีหลายคนที่ไม่เชี่ยวชาญภาษาที่ได้รับมอบหมายมา เช่น C หรือ Java ซึ่งกลายเป็นว่าคนเหล่านี้ไม่ได้ใช้สมาธิกับ data structure แต่กลับต้องมาสนใจเรื่อง syntax, grammar และ library ของภาษานั้นๆ เขียน C ก็ต้องมั่วพอยเตอร์ รันสิบครั้งไม่เคยให้ผลเหมือนกัน เขียน Java ก็เมากับคู่มือ ไม่รู้จะเลือกใช้อะไรดี แค่อยากได้ dynamic array เท่านั้นเอง สุดท้ายจบมาแบบมึนๆ เขียนก็ไม่คล่อง โครงสร้างก็ไม่ถ่องแท้ ส่วนคนที่มีประสบการณ์กับภาษาพวกนั้นมาก่อนก็รอดไป
เรื่อง Syntax ผมว่าบางทีมันขึ้นอยู่กับพื้นฐานของแต่ละคนด้วยล่ะครับ ถ้าคนนึงมาจาก VB คนนึงมาจาก Java อีกคนมาจาก PHP ก็จะมองและเขียน Source Code ของภาษาใหม่ได้ยากง่ายต่างกัน
อืม... หรือผมเข้าใจผิด จริงๆคุณ sugree หมายถึงคนที่เขียน Python เป็นอยู่แล้ว มามอง Source Code ของคนอื่นรึเปล่า?
----------------------- http://www.seasandsong.com/
ผมหมายถึงคนที่เขียนไม่เป็นมาอ่านครับ สมมติว่าไม่รู้จัก VB ไม่รู้จัก Java ไม่รู้จัก PHP ไม่รู้จัก Ruby ไม่รู้จัก Perl ไม่รู้จัก C ไม่รู้จัก C++ ไม่รู้จัก Python เมื่อต้องมาเจอโค้ดที่ไม่รู้จักแล้วเราจะใช้เวลาทำความเข้าใจมากแค่ไหน นับหมดตั้งแต่วินาทีแรก และการเปิดค้นเอกสารทุกประเภทเพื่อให้รู้ว่าโค้ดนั้นทำอะไรกันแน่
จริงๆ แล้วผมก็นับจากประสบการณ์ของผมเอง ผมมักเรียนจากการดูโค้ดคนอื่น Python เป็นภาษาเดียวที่เห็นปุ๊ปก็เข้าใจปั๊ป ไม่ต้องถึงกับค้นหาว่าสัญลักษณ์นี้ หรือคำนี้มีความหมายยังไง มีไว้เพื่ออะไร
เรื่อง syntax มันนานาจิตตัง ผมอาจจะสมองทึบไปซักหน่อย เลยชอบ Python เพราะมันง่าย เขียนได้โดยไม่ต้องใช้ความจำมากนัก และไม่ต้องเปิดคู่มือไว้ด้านข้าง
'แต่ผมไม่ชอบจาวาที่หลายๆ คนพยายามมองมันเป็นยาวิเศษใช้งานได้กับทุกโรค' ชอบประโยคนี้และเห็นด้วย --- จากความรู้สึกของผมครับ
เห็นด้วยคน และขอเชียร์ ภาษา Erlang ถ้าใครจบสายสื่อสารจะรู้จักคำนี้(ผมจบสื่อสารสมัยยังไม่มีสาขาคอมฯ เรียน OS,database,system programing ..etc) ที่เดียวกับคนที่ทำ blog นี้แหละ(แต่นานมาแล้ว) ถ้าอยากทำ server MMORPG ก็มีบทความ 5 ตอน อยู่ที่นี้ครับ) Writing Low-Pain Massively Scalable Multiplayer Servers ตอนอื่น click ที่ navigator menu 'game design' จริงๆคือหาเรื่องเปิดประเด็นใหม่ กลัวกระเด็นเก่าจะร้อนเกินไป ฮิ ฮิ ---------------- http://www.ThaiBuddy.com ฟรี T<->E dictionary แค่ชี้ mouse
นอนเช้าจังเลยครับ ไม่น่าเชื่อว่า หลังจากผมคอมเม้นไป จะมีคอมเม้นเพิ่มมาอีก 8 ในช่วงเวลาใกล้รุ่ง (แนะ เผลอใช้คำคลาสสิก) --- จากความรู้สึกของผมครับ
blog นี้มันส์สุดๆไปเลย ^^
>>แต่ผมไม่ชอบจาวาที่หลายๆ คนพยายามมองมันเป็นยาวิเศษใช้งานได้กับทุกโรค
นั่นมันก็ความผิดของคนใช้ ไม่ใช่ความผิดของภาษาซักหน่อย
ก็ไม่ใช่อ่ะครับ แต่ก็ทำให้ผมไม่ค่อยชอบจาวาอยู่ดี (งงป่ะ?) ------ LewCPE
lewcpe.com, @wasonliw
ไปกันใหญ่แล้ว ^_^
มีideที่ช่วยเขียน ruby ชื่อ aptana+radrails นะครับ สามารถดูได้ที่ aptana.com นะครับ ปล. มีโปรแกรมเมอร์หญิงบ้างไหมเนี่ย lol
ide ที่ช่วยเขียน python ก็ dabo framework พึ่งเจอเมื่อวาน เขาพยายามเลียนแบบ vb ส่วน orm ก็ dejavu 1.4 (stable) เห็นแล้วมันก็น่าเล่นดี แต่ตอนนี้คิดแต่ว่าจบแล้วต้องมีงานทำ ยังมีบริษัทไม่กี่แห่งในไทยที่ใช้ python ถ้าเทียบกับ java แล้ว 1/30 ได้เลย งานและเงินครับที่เป็นปัจจัยสำคัญในการเลือก
ก็เริ่มมีบ้างแล้วนะครับ อย่างผมนี่ได้เข้าทำงานในบริษัทใหญ่ๆ แถวๆ สวนลุม นี่ก็เพราะ python เลย
edit: ลืมบอกไปว่า ผมใช้ eclipse + pydev เป็นหลักนะ จริงๆ ก็ซื้อ wingide (www.wingware.com) มาใช้เองแล้ว แต่ไม่ค่อยถูกใจ กลายเ็ป็นว่าใช้ของฟรีดีกว่าแฮะ (แต่ license wingide รุ่น personal มันก็ไม่แพงนะ)
ตอนนี้เงินเดือนผมครึ่งตัวก็เป็น Python ครับ
แต่ผมชอบ Komodo มากกว่านะ แต่มันแพง ------ LewCPE
lewcpe.com, @wasonliw
1/30 มากไป ผมว่าทั้งประเทศคงมีไม่ถึง 1000 แห่งที่รู้จัก และใช้จริงไม่น่าจะเกิน 100 แห่ง รวมมหาวิทยาลัยแล้ว แต่ถึงยังไงผมก็ว่ามันแปลกนะ เลือกภาษาที่จะเขียนจากงานและเงิน
เห็นด้วยครับ .. สองสามเดือนก่อน เพื่อนผมมันถามว่าเขียนภาษาอะไรอยู่ ก็ตอบไปว่าตอนนี้เขียน python ... เลยเจอถามกลับมาอย่างมึนเลยว่า "ทำไมไปเขียนภาษาเก่าอย่างนั้นวะ ... เขียนเหมือนๆกับ cobol ตอนที่เรียนใช่มั๊ย?" เล่นเอาผมมึนไปเลย ...
สนุกดีครับ ผมว่า การฟังคนอื่นมากขึ้น ทำให้เรามีความรู้มากขึ้น บางคนอาจเห็นว่าเป็นความรู้ที่ไม่สำคัญ แต่ถ้าสมมติวันนึง เกิด programmer ภาษานึง ไปจีบสาวที่เป็น programmer อีกภาษานึง ผมว่าเค้าจะรู้สึกเสียดายที่ไม่ได้รู้ถึงเรื่องของอีกฝั่งเลย ถ้าเราเข้าใจถึง field ของแต่ละภาษา ก็จะเข้าใจว่า เราอาจไม่ได้อยู่สนามนั้นก็ได้ ------------ No more creative. But more producer! ijira.blogspot.com
สนุกดีครับ ผมว่า การฟังคนอื่นมากขึ้น ทำให้เรามีความรู้มากขึ้น บางคนอาจเห็นว่าเป็นความรู้ที่ไม่สำคัญ แต่ถ้าสมมติวันนึง เกิด programmer ภาษานึง ไปจีบสาวที่เป็น programmer อีกภาษานึง ผมว่าเค้าจะรู้สึกเสียดายที่ไม่ได้รู้ถึงเรื่องของอีกฝั่งเลย ถ้าเราเข้าใจถึง field ของแต่ละภาษา ก็จะเข้าใจว่า เราอาจไม่ได้อยู่สนามนั้นก็ได้ ------------ No more creative. But more producer! ijira.blogspot.com
ได้ความรู้เพิ่มขึ้นมากเลยครับ ทั้งจาก Dr.Python และ Dr.JAVA
ผมอ่านแล้วก็ขำๆ ผมกำลังจะทำงานที่ใช้ภาษา Cobol ฮ่าๆ ตลกดี โบร๊าณโบราณ เรื่องภาษาผมไม่ค่อยได้สนใจเท่าไหร่ จะเก่าจะใหม่ จะดีจะเลิศแค่ไหนไม่สำคัญ! ขอแค่มันทำให้เรามีเงินเดือน เลี้ยงพ่อแม่ ส่งน้องเรียนให้จบ ทำให้ครอบครัวเรามีความสุข แค่เนี๊ย พอแล้วครับ..
"ผมมีความสุขเวลาเห็นพ่อกับแม่ยิ้ม ไม่ได้อยู่ที่ว่าจะเขียนโปรแกรมดีเลิศแค่ไหน" ^^
ผมอ่านแล้วก็คิดอะไรตลกๆได้อย่างหนึ่งครับ
"ริมถนนมีวิวสวยๆ อากาศดีๆ บางทีการขี่เฟอรารี่ ก็ไม่ได้ดีไปกว่าการเดิน.." อิอิ :D
ขอบคุณครับ
จาวาเหนือกว่าชัวร์ๆ เหมือนวิวสวยอากาศดีแล้วได้ขับเฟอรารี่เปิดประทุนผ่านกันเลยทีเดียว ความจริงซีชาร์ปก็ดี แต่ระบบโพรไพรโทรี่จะมาสู้จาวาที่ตอนนี้เป็นโอเพนซอร์สแล้วได้ไง ส่วนไพท่อนกับรูบี้นี่ไม่ขอวิจารณ์เพราะไม่รู้จักคัฟ
Round 6 : OOP .... Ruby อาจไม่รองรับ OOP เท่า Java ??
* Ruby เป็น pure OO ครับ
VisionGolf says : โอ้ววว จนป่านนี้ OOP ผมยังไม่เอาอ่าวเลย T T
โอ้ว !!! บทความนี้ผมเพิ่งเคยอ่าน
เป็น บทความ ที่ผมอ่านแล้วมีความสุขมากเลย (ขำทุก comment ^.^)
เคยได้ยินว่า "ทะเลอะกัน ดีกว่าหนีปัญหา" มันสร้างผลดี ให้มีการถกเถียงกัน ให้ได้ความรู้ดีๆ แบบนี้ นี่เอง
ขอบคุณทุกบทความ ในที่นี้ (ที่ทำให้ผม ขำ โคร ตๆ (ก็มีครั้งเนี๊ยแหละ ที่คุยกันเรื่องเขียนโปรเกรมเครียดๆ ให้เป็นเรื่องขำ ... ผมอ่านทุกข้อความเลยนะเนี๊ย ^.^))
eakmotion blog
พอดีหาข้อมูลเรื่อง python อยู่ เลยเจอกระทู้ fight นี้ แนะนำเพิ่มเติมในส่วนสายงานที่ผมทำนะครับ ผมทำด้าน Visual Effect ,CG ในหนัง,โฆษณาใน zone asia นี้แหละครับ ภาษาเดียวที่จะเรียกว่า take over script ทุกตัวในวงการ เลย คือ ตัวนี้แหละครับ python แต่ผมเพิ่งหัดเองนะครับไม่ได้รักใคร่มันหรอก แต่ไปใช้ โปรแกรมไหนก็ python หมดเลย แต่ก็ถือเป็น standard ดีครับ เขียนเป็นแล้ว ต้องข้ามโปรแกรม ก็เอามาใช้ต่อได้ แก้นิดหน่อยเอง
สำหรับเด็กจบใหม่คิดว่าเป็นภาษาไหน จะมีโอกาสได้ทำงาน programmer เลี้ยงปากเลี้ยงท้องมากกว่ากันอะครับ ระหว่าง python กับ java ในไทยนะครับ
(search เจอแต่ java)
ผมว่า python ก็เป็นอีกทางเลือกนึงนะครับ
ผมพึ่งทำงานได้ 7 เดือน
ตอนนี้เงินเดือนพุ่งกระฉูดเลย
ขอบคุณ bow_der_kleine และ sugree ครับ
คนแก่อย่างผมเพิ่งเข้าใจว่า Python มีเสน่ห์อย่างไรก็วันนี้เอง คนอื่นอธิบายไม่เคยเข้าใจ
ชาบู \o/ o
ผมชอบ Java ทั้งที่ไม่ค่อยได้เขียน เพราะเกลียด C++ ที่ตัวเองถนัดที่สุด
หลายท่านให้ความเห็นเหมือนกันว่า C++ มันนรกชัดๆ +_+! (งั้น perl (โครงการใหญ่ๆ) ก็คืออเวจีนั่นเอง)
แต่ desktop app ใหญ่ๆ ก็ต้องให้เขาล่ะนะ ผมเห็นความเร็ว Lotus Symphony (Java/RCP) กับ MS Expression 4 (Silverlight) แล้วเชื่อว่า GUI เอาใจยูสเซอร์ก็ native C++ ดีกว่า แต่มันก็จะหมดอายุแล้วในโลก RIA
เข้าเรื่อง ในมุมมองคนทำงานโอเพนซอร์สนะครับ
พวกผมจะเลือกภาษาเองก็หมดสิทธิแหละครับ เจ้าของโครงการเขียนมายังไง เราจะแก้ก็ต้องไปตามเขา ก็รักเขานี่
ผมถึงชอบประชดเวลามีภาษาใหม่ฮิตขึ้นมาเพราะขี้เกียจอ่าน "The XYZ Programming Language" อีกเล่มแล้ว แต่ก่อนพยายามจะเลี่ยงโครงการที่ใช้ python หลายหนแต่ทนเสน่ห์ OpenERP ไม่ไหว (แต่จริงๆโดนไปตั้งแต่ Trac แล้ว) ส่วน perl ครั้งเดียวเข็ด ดูแลไม่ไหวจริงๆ แม้ว่า OTRS มันจะแสนดียังไงก็ตาม
วงการโอเพนซอร์สภาษาเยอะมาก แล้วแฮกเกอร์ก็ต้องอ่านมันได้หมดอีกไม่งั้นไม่คูล ตั้งแต่ bash, perl, awk, c, c++, java, javascript, php, python, (ruby, grail, ... OMG RIP) แต่ถ้าในแวดวง enterprise OSS ก็ให้ java เขาไป ตามด้วย python/php เบียดๆกันอยู่
ผมว่าต่อไปเถียงกันเรื่อง "java เหนียวส์" ดีกว่าไหม เทียบเรื่องเร็วโดยไม่แคร์เรื่องบริบทเช่นขนาดโปรเจกก็เหมือนเทียบแตงกวากับแตงโม ใครจะเชื่อว่าแตงกวามีน้ำมากกว่าแตงโม (นั่น! ไม่เชื่ออะซิ!)
ผมสรุปแบบเกรียนๆทีเดียวเลยแล้วกัน "c++ นรก perl อเวจี php รั่ว java เหนียวส์ python ง่ายย์"
โพสต์นี้สนุกดีครับ :) ขอบคุณทุกความเห็น อดมาเมนต์ต่อไม่ได้จริงๆ :P
ขอบคุณครับ ผมชอบบทความนี้ครับเพราะเปิดหูเปิดตามือใหม่อย่างผม
อ่านมาแล้วอดไม่ได้ แจม ข้าม ปี
ส่วนตัวว่านะครับ
ระบบ obj นั้นเป็นเรื่องที่ดีนะครับ เพราะจะทำให้ง่าย
ฉะนัน java กินขาด เหนือฟ้ายังมีฟ้า คือ c เหนือ c ยังมี แอสเซมบลี ปล.เคยได้ เอ นะ อิอิ
ผมเคยจับ java c perl php python etc. ปล.ruby ไม่ได้จับ
ตอนนี้ก็ php กับ python ส่วน perl เล็กก็เขียนดี แต่นรกเหมือนกัน ถ้ายาวแล้ว
ยังเพิ่งศึกษา python คิดว่า obj คงไม่เท่า java เทียบความง่ายแล้ว ก็ โอนะครับ
แนวเขียนได้ ทำให้เขียนได้หลากหลายครับ
แต่เอาความนิยมแล้ว python คงสู้ java ยากเนื้องจาก มานานกว่า
แต่ผมโดนใจเรื่อง data stucture นะครับ มั่วแต่ดู ไวยกร ยิ่ง tc แล้วเจ็บ แต่ก็จำมาบ้างนะ ออกแนวซาดิส
เนื่องจากต้องรีบซักผ้า
ไม่รู้ละ ตอนนี้ผมใช้ python กับ php เล่นไปคู่กันอะ
เนื่องจากใครจับภาษาไหน ก็จะชอบไปในทางนั้น นี้ละคน
แต่สิ่งที่สำคัญที่สุดคือ
การ join กันครับ obj จึงเป็นที่นิยม คือมองในทางเดียวกันให้ได้
python อยากให้ คล้าย java จะดีมาก แต่เขียนหลากหลายพอกัน คิดไงเขียนให้สนุกก็พอแล้ว
อาชีพ นี้เครียดนะครับ คิดไงให้ผ่อนคล้ายสมอง ขีเกียจไล่ code เล็กๆน้อย นี้ละ มีดของแท้
เอาเป็นว่า ลองเองครับ ชอบอันไหนก็อันนั้น
เสน่ของ คน ก็ไม่ต่าง ภาษา แล้วแต่คนชอบ คนโน่นคนนี้แนะนำ ก็ไม่เท่าคบดูเองครับ อันนี้บอกไม่ได้ครับ
ขอพูดเท่ๆละกัน
ชอบมาก
ผมเปลี่ยนจาก php, js, au3 ได้ ก็เพราะเห็นความสวยของ python นี่แหละฮะ
และมันก็ดีสมคำร่ำลือ อ่านงายโพดๆ
ไม่คดรีเทิร์นไปหา php อีกเลย
ขยาดมากๆ ตอนแก้โค้ด
เพราะผมชอบเขียนย่อๆแบบ คุณ deans4j ใน http://www.blognone.com/node/4385#comment-20299
แล้วพอแก้โค้ด ผมก็แบบว่า "เอิ่ม~ เขียนใหม่เฮอะฉัน -*-"
แต่พอมาใช้ python นี่ reuse code ทั้งก็อป ทั้ง mod ง่ายดายทีเดียว อ่านแป๊ปเดียวรู้เรื่องเลยฮะ
โอ๊ะ อยู่ๆ มาโผล่ที่นี่ได้ไงหว่า กระทู้ในตำนาน เกิดไม่ทัน