ชื่นชอบสุด ๆ

posted on 13 Feb 2007 13:58 by wonam
แม้หลาย ๆ คนจะบอกว่า ภาษาโปรแกรมเป็นเรื่องของศาสนา

บางคนเปลี่ยนศาสนากันเป็นว่าเล่น แต่บางคนกลับมองว่ามันไม่ใช่เรื่องของความชื่นชมหรือศรัทธาเพียงอย่างเดียว

บา่งคนเห็น feature บา่งอย่างของภาษา A แต่ไม่เห็นในอีกภาษา B ก็เลยทำให้กระโดดไปหาภาษา A แถมต่อว่าต่อขานว่าภาษา A ออกแบบไม่ดีอย่างโน้่นอย่างนี้

เพิ่งได้อ่านบทความ:


ของ Bruce Eckel ที่เขียนไว้แต่ปลายสองปีที่แล้ว (ธันว่า 48)

หลัก ๆ คือเขาเขียนเกี่ยวกับการที่โปรแกรมเมอร์จาวาหลายคนหันไปหา Ruby ในนั้นกล่าวถึงถึง
  • หนังสือของ Bruce Tate ชื่อว่า Beyond Java ที่ Eckel คิดว่าน่าจะใช้ชื่อว่า Why Ruby is Better Than Java
  • หรือแนวคิดเกี่ยวกับ Humane Interface ใน Ruby ของ Fowler ที่พูดว่า library interface ของ ruby นั้นมีแนวคิดที่แตกต่างกับใน Java นั่นคือออกแบบมาโดยดูจากว่าคนใช้อะไร แล้วให้สิ่งนั้น
Eckel บอกว่า บางทีกลุ่มคนที่ให้ความเห็นลักษณะนี้ ไม่ได้ดูให้ชัดเจนว่า สิ่งที่เขาคิดว่าไม่มี มันไม่มีจริง ๆ หรือไม่มีทางอื่นจริง ๆ (ที่อาจจะดีกว่า) ในภาษานั้น

ขอยกตัวอย่างที่ Eckel พูดถึงตัวอย่างในบทความของ Martin Fowler:

Martin's argument is that Java's List interface requires you to say aList.get(aList.size -1) to get the last element, and this seemed silly to him. Which it is, if you have unified all sequence containers (that is, list containers) into a single type, as Ruby and Python do. Java, however, follows the C++ STL approach of providing different types based on the efficiency of various operations. The Java libraries do not unify to a single list type because of efficiency issues, so you have to decide if you are going to be fetching the last element from a list a lot, and if you are you use a LinkedList, which does have a getLast() method -- a fact which was completely left out of Martin's original discussion, and the ensuing firefight (other than some ignored comments).

ผมอ่านบทความของ Eckel แล้วรู้สึกว่า

เป็นบทความที่น่าอ่านมาก

ขอจบด้วยประโยคท้าย ๆ ของบทความนี้:

The person I want to hear from is the core Python expert, someone who knows that language incredibly well, who has decided that Ruby is just so much better that all the mature Python libraries and community expertise doesn't hold a candle to the value of moving to Ruby. That person would be able to make a compelling, feature-by-feature argument (such an essay is better served as his or her own weblog entry, rather than posting it as a comment here).

ได้จาก: slashdot

หมายเหตุ: เมื่อสัปดาห์ที่แล้ว เพิ่งได้อ่านหนังสือชื่อ Effective STL พอดี มีบทหนึ่งพูดเรื่องว่าทำไม container ทั่วไป ไม่มี getlast (แต่มีใน linked list) เขาบอกว่าการพยายามใช้ container ใน STL ให้ general ที่สุดนั้น จริง ๆ ไม่ค่อยถูกต้อง เพราะว่า library ถูกออกแบบมาเพื่อให้ "เลือก" ใช้ให้เหมาะสม (ตามประสิทธิภาพและการใช้งาน)
ไม่เคยอ่าน Beyond Java เลย

ผมใช้ popthai อ่าน The departure of the hyper-enthusiasts แล้วก็ยังงงๆ อยู่เพราะอ่านไม่ค่อยออก เคยยืม thinking in something มาอ่านก็อ่านไม่ค่อยออกคล้ายๆกัน พอเปิดดู comment ผมก็ยังอ่านไม่ออก (สงสัยต้องเรียนภาษาอังกฤษเพิ่ม)

ในประเด็นที่ Bruce Tate เขียนผิด นี่ชัดเจน เช่น เรื่อง metaclass นี่เห็นๆ

แต่ว่า Eckel พยายามจะบอกว่า Ruby ไม่มีอะไรดีกว่า Python (ถ้าตัดเรื่องศาสนาอย่างชอบไม่ชอบ block, indent ออก?) ประมาณว่าถ้าอยากเขียนอะไรที่มักจะสั้นๆกว่า Java ก็ใช้ Python ก็ได้?

#1 By veer on 2007-02-13 17:02

เรื่อง block vs lambda บรรทัดเดียว นี่ก็เป็นศาสนาหรือเปล่า?

#2 By veer on 2007-02-13 17:03

"unified all sequence containers" นี่ก็ทำให้งงๆ ว่า unify กันอย่างไร (unify นี่แปลว่า"รวมกัน"?) ใน ruby ก็เห็นมีแต่ array ก็มองไม่เห็นว่า มันโดนรวมกับ linked list อย่างไร

ถ้ามองในแง่ว่า ruby ไม่มี linked list ให้ใน standard library เลยทำให้ไม่สะดวก ผมคงไม่สงสัยอะไร ถ้าหากว่าอยากได้ประสิทธิภาพดี (หลีกเลี่ยงกรณีที่ array ทำงานได้ไม่ดีเช่น insert) ก็ใช้ Linked List ที่ไม่ได้อยู่ใน standard library ก็ได้?

หรือ Eckel มองว่ามันไม่เท่ห์ ถ้า Linked List และ Array ไม่ได้ inherit มาจาก List?

#3 By veer on 2007-02-14 01:38

ดีนะครับ แต่หลังๆ เห็นคนไม่ค่อยใช้ JAVA กันแล้ว สงสัย tool มีใช้น้อย คนเลยไม่ค่อยสนเท่าไร

#4 By zixma (158.108.211.10) on 2007-02-14 02:12

I think I'm not getting much from the article as I'm not very familiar with Ruby or Python myself. It seems to be saying that Ruby seems to have a number of merits although there are a lot of quirky issues that it inherits from Perl.

It also indicates that the popularity of a language can depend a lot on software created from it as well. Rails is awesome indeed, but whether Ruby makes it awesome is questionable because Django is written in Pythong, and probably can do the same thing Rails does. (On the other hand, I heard that a language feature in Ruby makes it easier to implement ActiveRecord than doing so in Python. I'm not sure whether this is true or not.) Simplicity rules, and I think that's why a lot of people turns to Ruby because they can just use one class to do almost everything. Even professional programmers does not have time to read through all implementations of the List interface, I think.

Different communities favor different language designs, that's for sure. And I think it's as much a matter of religion as a matter of what kind of software they write.

The academia likes functional programming languages such as ML or Scheme because it allows people to express their thoughts mathematically and clearly. Functional languages also allow people to create complex programs in a clean matter and avoid being squashed by the complexity themselves.

Application programmers like OOP because it allows them to devide labor, and features like private/protected/public class members can help prevent errors created by code misuses.

Performance-oriented programmers, e.g. game programmers, love C or Assembly to death. Mike Acton from Insomniac Games (maker of Resistance) says they will sacrifice everything, including simplicity and portability, for performance. Interstingly enough, Tim Sweeney of Epic Games (maker of Unreal) favors languages that enhance productivity, and he likes Haskell. (You can read his Powerpoint on his view on programming languages here: http://lambda-the-ultimate.org/node/1277.)

P'Manow, here's a question for you krab: what language do you think is the most suitable to teach in the first programming course? Kaset uses C#, Chula uses Java, and IPST teaches C++ to kids. This seems to be in contrast with the US's acedemia preferences in functional programming languages: MIT uses Scheme, and CMU and Cornell use ML as introductory programming languages. However, courses on software engineering are taught in Java or C#, so learning those weird languages may seem like a lost cost. Also, currently there is an emerging trend in using Python in the first programming language course, which I think is a good compromise between simplicity and versatility.

#5 By Pramook (61.213.76.87) on 2007-02-14 04:04

veer:
ผมว่า Eckel พยายามจะบอกว่า <b>อย่าดูแค่ผิวเผิน</b>

เช่น ประเด็นของ interface ของ library เนี่ยะ อาจจะต้องดูว่าตอนออกแบบ มีเป้าหมายอะไร ใน java มีให้เลืิอกได้หลายแบบ เพราะอะไร และการที่ใน Ruby ไม่มีให้เลือกหรือมีอย่างเดียวอาจไม่ได้แปลว่าออกแบบได้ "ดีกว่า" เสมอไป

เหมือนว่าบางทีเปรียบเทียบโดยเผิน ๆ จากคนที่ "ชื่นชอบสุด ๆ" อาจไม่ใช่การเปรียบเทียบทีเขาอยากเห็น

เขาอยากเห็นจากผู้รู้จริง ๆ (มากกว่า) มั้ง

Pramook:
จริง ๆ ผมไม่เห็นด้วยเท่าไหร่กับการใช้ C# สอนเป็นภาษาแรก ตอนนี้เรายังไม่ได้สอน C# เป็น oop (แค่สอน for loop ก็แย่แล้ว) ทำให้ดูเหมือนว่า C# จะมีสิ่งที่ไม่จำเป็นต้องรู้ (เช่น syntax มากมาย class, namespace, static void) มากเกินไป

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

ถ้าถามผมว่าผมชอบภาษาไหนจริง ๆ ในการเรียนภาษาแรกสำหรับนักเรียน cs ผมว่าผมชอบ ML หรือ scheme นะ เพราะผมเห็นว่าแนวคิดเกี่ยวกับ recursion เป็นสิ่งที่สำคัญมาก การได้เห็นมันและฝึกมันแทบตลอดเวลา น่าจะเป็นสิ่งดี

แต่ถ้ามองถึงการนำไปใช้ อืม... ผมว่า Python/Ruby น่าจะดีเหมือนกัน (ไม่ต้องบังคับนักเรียนเรื่อง indent อีกต่อไป ไม่เขียนให้ถูกโปรแกรมผิดเลย ฮ่าฮ่า) แต่ เรื่อง type มันจะมึน ๆ นะ ถ้าเริ่มจากภาษาเหล่านี้

#6 By wonam on 2007-02-14 08:43

veer (ต่อ):
คือผมรู้สึกว่า Eckel ไม่ได้พยายามจะฟันธงไปว่า การที่ Ruby มี container อย่างเดียวเนี่ยะ ดีหรือไม่ดี เขาแค่บอกว่ามันไม่เหมือนกัน เขายังพยายามอธิบายเหตุผลโต้กับ Harold ในกรณีของ list interface ของ Ruby ที่มีหลาย ๆ อันแปลก ๆ ว่าอาจเป็นเพราะว่า Matz เขียน interface นี้เป็นอันแรก ๆ

"On the other hand, I'll bet that list was one of the first library classes that Matz wrote. You can find plenty of methods and classes in Java 1.0 that appear to be amateurish additions, as well. I think a better test, for both Ruby and Java, is to examine the classes that people have created when they have more experience with the language and its use."

#7 By wonam on 2007-02-14 08:51

การชอบหรือไม่ชอบอะไร ขึ้นอยู่กับท่าทีที่คนๆนั้นใช้มองโลก

อย่าง martin ที่เขาชอบ interface ของ ruby Array
ก็อาจจะเป็นเพราะว่า สิ่งที่เขาหมกมุ่น ก็คือเรื่อง pattern, Domain Modeling ซึ่งเป็น abstraction ที่สูงกว่าเรื่อง containter abstraction (สูงกว่า นี่ไม่ได้เปรียบว่าดีกว่าแนะ แค่ว่า layer มันสูงกว่า)

อย่างคนเขียนบทความ ถ้าเปรียบเทียบกับ ช่างฝีมือ
ก็น่าจะเป็นช่างที่โต๊ะทำงานเป็นระเบียบเรียบร้อย
รู้ชัดเจนว่าเครืื่องมือชิ้นไหน ควรจะใช้กับงานประเภทไหน (ใครหยิบไปใช้ผิดประเภทไม่ได้นะ โกรธกันตายเลย)

พวกชอบ ruby (พวกที่บทความกล่าวถึง) น่าจะเป็นช่างฝีมือ แบบที่มองโลกสบายๆ หน่อย,
ชอบคิดสร้างสรรค์แผลงๆ (meta programming เลยกระฉูดใน rails), ชอบของใหม่ๆ

#8 By pphetra (58.10.90.193) on 2007-02-14 11:22

อยากให้มี effective STL.
น่าจะมีให้เลือกได้ด้วยว่าจะ effective ในแง่ speed หรือ space.
ทำเป็น template parameter ให้เลือก.

#9 By อานนท์ (202.93.47.42 /127.0.0.1, 127.0.0.1) on 2007-02-14 11:43

พวก syntax, block, indent นี่ ถ้าไม่ชอบ ก็ สร้าง grammar ใหม่ ที่ equivalent กัน ก็ ได้ ป่าว?
แล้ว ทำ ตัวแปลง ไปมา ระหว่าง grammar ใหม่ กับ เก่า.
ใคร ชอบ แบบ ไหน ก็ ใช้ แบบนั้น, แต่ เป็น ภาษา เดียวกัน.

แปลง indent เป็น block, block เป็น indent, อะไร ประมาณ นี้.

#10 By อานนท์ (85.14.217.51 /127.0.0.1, 127.0.0.1) on 2007-02-14 11:47

อานนท์: HashMap (อยู่ในมาตรฐาน STL ยัง?) กับ Map (เฉยๆ ไม่บอกว่าเป็นอะไร แต่จริงๆ เป็น Red black tree?) ก็เหมือนใช้ Space กับ Speed ไม่เท่ากันปะ? หรือว่าอยากจะเลือกได้ใน HashMap เลยว่า เป็น HashMap แบบ space=10 speed=5 อะไรแบบนั้น?

#11 By veer on 2007-02-14 12:19

wonam: นักเรียนคงต้องสั่ง type(x) ดูไปเรื่อยๆ ว่่าอะไรเป็น type อะไร อาจจะงงน้อยลง?

แต่ว่าท่าแบบนี้เหมือน Smalltalk จะพร้อมกว่า เพราะมี Inspector เป็นเรื่องเป็นราว?

#12 By veer on 2007-02-14 12:40

matlab แพง, คงมีน้อยคนที่จะได้ซื้อมาใช้เอง.

optimize speed/space เช่น int c[10] กับ vector<int> c(10);

vector<int> มันต้อง เก็บ length เก็บ อะไร เพิ่ม, แถม ยัง ต้อง เสียเวลา malloc อีก.
แต่ int[10] มัน ก็ ดัน ไม่มี iterator ที่ เป็น abstract เข้ากันได้ กับ stl.

ถ้ามี vector<int, 10> ที่ ใช้ space และ speed เท่าๆ int[10] ก็ ดี.

#13 By อานนท์ (81.169.155.246 /127.0.0.1, 127.0.0.1) on 2007-02-14 13:19

int[10] หรือ vector<int, 10> อาจ จะ ไม่ support push() method เพราะมันเป็น fix size,
แต่ หลาย ๆ อย่าง ที่ มัน ควร จะ มี common กันได้, เช่น iterator, ก็ ควร จะ จับ มา common กัน ให้หมด.

#14 By อานนท์ (81.169.155.246 /127.0.0.1, 127.0.0.1) on 2007-02-14 13:24

wonam: *อย่าดูแค่ผิวเผิน* ก็ดีอยู่ เพียงแต่*บาง*ตัวอย่างอ่านแล้วแปลกๆ

#15 By veer on 2007-02-14 16:01

N

#16 By (67.18.134.226) on 2007-08-03 11:03

People deserve very good life and <a href="http://goodfinance-blog.com/topics/credit-loans">credit loans</a> or just term loan can make it much better. Because people's freedom bases on money.

#17 By NixonRachel26 (94.242.214.7) on 2011-12-12 10:36

According to the detailed analysis of distinguished scientists, lots of students use the custom write company frequently.

#18 By research writing service (31.184.236.16) on 2011-12-17 22:12

Are acknowledged of that writing papers for money service can be good assistant when you are in trouble because of writing. You can hardly see more suitable partner in the web. Therefore, why look more? Make your decision at this moment.

#19 By essay writing samples (31.184.236.16) on 2011-12-21 08:36

Some distinguished students should read your thought close to this post and just order the phd thesis at the buy dissertation service.

#20 By buy thesis (91.212.226.136) on 2012-01-11 22:58

You can work for a long time on your assignments spending many hours of your free time. Nonetheless, I guess that you would like to spend your free time as a lot of students, arranging celebrations. Do not opine that you're in the deadlock! Go to the essay writing service. I will be a good high school student. Furthermore, you will have good rates!

#21 By essay writing services (31.184.238.21) on 2012-01-12 07:49

If you are willing to find the best prices for link building issues, you ought to try to use our social bookmarking sites and be assured that we are the best of the best!

#22 By bookmarking submissions (91.212.226.136) on 2012-03-23 18:24