<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>rawitat.com &#124; Rawitat Pulam &#187; Quote</title>
	<atom:link href="http://www.rawitat.com/category/quote/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rawitat.com</link>
	<description>Simplicity within Complexity, and Vice-Versa</description>
	<lastBuildDate>Fri, 06 Jan 2012 07:48:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>เปลี่ยนภาษาเขียนโปรแกรม</title>
		<link>http://www.rawitat.com/2007/09/20/65/</link>
		<comments>http://www.rawitat.com/2007/09/20/65/#comments</comments>
		<pubDate>Wed, 19 Sep 2007 17:12:29 +0000</pubDate>
		<dc:creator>rawitat</dc:creator>
				<category><![CDATA[Computing]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[Quote]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://www.rawitat.com/2007/09/20/%e0%b9%80%e0%b8%9b%e0%b8%a5%e0%b8%b5%e0%b9%88%e0%b8%a2%e0%b8%99%e0%b8%a0%e0%b8%b2%e0%b8%a9%e0%b8%b2%e0%b9%80%e0%b8%82%e0%b8%b5%e0%b8%a2%e0%b8%99%e0%b9%82%e0%b8%9b%e0%b8%a3%e0%b9%81%e0%b8%81%e0%b8%a3/</guid>
		<description><![CDATA[อะไรยากกว่ากัน ระหว่าง สอนคนที่เขียนโปรแกรมเป็นแล้ว ให้เปลี่ยนภาษา สอนคนที่เขียนโปรแกรมไม่เป็น ให้เขียนโปรแกรมเป็น หลายคนจะตอบข้อ 2 โดยไม่ลังเลเท่าไหร่ เพราะว่าถ้าเป็นภาษาหนึ่งๆ แล้ว เรียนอีกภาษาหนึ่งคงไม่ยากเท่าไหร่ สาเหตุหนึ่งก็คงเพราะว่าภาษาส่วนมากมีรากที่คล้ายๆ กัน เช่น Pascal, C, C++, Java, C# ถ้าเป็นภาษาใดภาษาหนึ่งแล้ว การเรียนรู้ syntax ของอีกภาษาหนึ่งก็ไม่ใช่เรื่องยากเย็นเท่าไหร่แต่ว่าสอนคนที่เขียนโปรแกรมไม่เป็นให้เขียนโปรแกรมเป็นนี่สิ งานช้าง เพราะว่าอาจจะต้องสอนแนวคิด หลักการคิดแบบคอมพิวเตอร์ หลักการคิดแบบ von Neumann machine หลักการคิดแบบที่เราต้องใช้เวลาเขียนโปรแกรม ฯลฯ ซึ่งอาจจะยากหน่อย ไหนเลยจะต้องมานั่งเรียนรู้ syntax อีกแต่ว่าถ้าเปลี่ยนคำถามหน่อยนึงล่ะ เปลี่ยนข้อที่ 1 ให้เป็น สอนคนที่เขียนโปรแกรมเป็นแล้ว ให้เปลี่ยน paradigm ในการเขียนโปรแกรม ไอ้นี่อาจจะเป็นงานช้างพอๆ กัน หรือว่าช้างกว่าการสอนคนที่เขียนโปรแกรมไม่เป็นให้เขียนโปรแกรมก็ได้ เพราะว่าคนเราพอมันชินกับวิธีคิดแบบไหนแล้ว การจะเปลี่ยนรูปแบบของวิธีคิด การที่จะออกจาก The Matrix ของกระบวนการคิดของตัวเอง หรือว่าลักษณะการคิดของตัวเองได้ นี่คงจะยากเย็นแสนเข็ญมิใช่น้อย [...]]]></description>
			<content:encoded><![CDATA[<p>อะไรยากกว่ากัน ระหว่าง
<ol>
<li>สอนคนที่เขียนโปรแกรมเป็นแล้ว ให้เปลี่ยนภาษา</li>
<li>สอนคนที่เขียนโปรแกรมไม่เป็น ให้เขียนโปรแกรมเป็น</li>
</ol>
<p>หลายคนจะตอบข้อ 2 โดยไม่ลังเลเท่าไหร่ เพราะว่าถ้าเป็นภาษาหนึ่งๆ แล้ว เรียนอีกภาษาหนึ่งคงไม่ยากเท่าไหร่ สาเหตุหนึ่งก็คงเพราะว่าภาษาส่วนมากมีรากที่คล้ายๆ กัน เช่น Pascal, C, C++, Java, C# ถ้าเป็นภาษาใดภาษาหนึ่งแล้ว การเรียนรู้ syntax ของอีกภาษาหนึ่งก็ไม่ใช่เรื่องยากเย็นเท่าไหร่แต่ว่าสอนคนที่เขียนโปรแกรมไม่เป็นให้เขียนโปรแกรมเป็นนี่สิ งานช้าง เพราะว่าอาจจะต้องสอนแนวคิด หลักการคิดแบบคอมพิวเตอร์ หลักการคิดแบบ von Neumann machine หลักการคิดแบบที่เราต้องใช้เวลาเขียนโปรแกรม ฯลฯ ซึ่งอาจจะยากหน่อย ไหนเลยจะต้องมานั่งเรียนรู้ syntax อีกแต่ว่าถ้าเปลี่ยนคำถามหน่อยนึงล่ะ เปลี่ยนข้อที่ 1 ให้เป็น
<ol>
<li>สอนคนที่เขียนโปรแกรมเป็นแล้ว ให้เปลี่ยน paradigm ในการเขียนโปรแกรม</li>
</ol>
<p>ไอ้นี่อาจจะเป็นงานช้างพอๆ กัน หรือว่าช้างกว่าการสอนคนที่เขียนโปรแกรมไม่เป็นให้เขียนโปรแกรมก็ได้ เพราะว่าคนเราพอมันชินกับวิธีคิดแบบไหนแล้ว การจะเปลี่ยนรูปแบบของวิธีคิด การที่จะออกจาก The Matrix ของกระบวนการคิดของตัวเอง หรือว่าลักษณะการคิดของตัวเองได้ นี่คงจะยากเย็นแสนเข็ญมิใช่น้อย จะยกตัวอย่างดังนี้
<ul>
<li>นึกถึงโปรแกรมที่ประกาศตัวแปรไม่ต้องประกาศ type แต่ว่าก็ยังเป็น strong typing ออกไหม</li>
<li>นึกถึงโปรแกรมที่ไม่ต้องประกาศ main function ออกไหม</li>
<li>นึกถึงภาษาโปรแกรมที่ไม่มี loop ออกไหม</li>
<li>นึกถึงภาษาโปรแกรมที่ฉลาดพอที่จะทำ list comprehension (เช่นบอกว่า จะเอา x จาก list L โดยที่ x มากกว่า 3 แล้วมันเข้าใจว่าจะต้องทำอะไรโดยที่เราไม่ต้องเขียน low-level instruction)</li>
</ul>
<p>นอกจากเรื่องพวกนี้จะยาก เพราะว่าพอสมองเราถูก over-train ให้ชินกับอะไรบางอย่างมากๆ แล้ว มันจะเรียนรู้สิ่งใหม่ยากขึ้น มีอะไรที่ต้อง unlearn มากขึ้น อย่าว่าแต่ imperative vs. functional programming เลย แค่ procedural vs. object-oriented ก็แย่แล้ว การที่เราจะ unlearn เรื่องหนึ่งๆ แล้วปรับไปสู่เรื่องใหม่ เป็นเรื่องที่ค่อนข้างยากเอาการทีเดียวไม่ใช่แค่นั้น แต่ให้เขียน style เดิม แต่ว่าเปลี่ยนภาษาเขียนโปรแกรม ก็ยากแล้ว
<ol>
<li>สอนคนที่เขียนโปรแกรมเป็นแล้ว ให้เปลี่ยนภาษา โดยต้องใช้เป็นภาษาหลักในกรณีทั่วไปแทนภาษาเดิม</li>
</ol>
<p>ผมเห็นน้องหลายคนเขียน Ruby กันมาพักนึง (เพราะว่างานบางงานที่อาจจะต้องใช้ Rails) แต่ว่าพอลองตั้งโจทย์ที่มองไม่เห็นชัดว่าจะใช้ความสามารถของภาษาตรงไหน (ให้สร้าง permutation ของ list) น้องหลายคนก็ fall-back กลับไปเขียน C เหมือนเดิมไม่แปลกอะไร เพราะว่าจริงๆ แล้วผมเอง บางทีขนาดโปรแกรมง่ายๆ ก็ยังดื้อจะเขียน C++ กับ STL อยู่เลย ทั้งๆ ที่รู้อยู่แก่ใจว่า Ruby, Python, Haskell มันก็ทำได้ และจะง่ายกว่าด้วย แต่ว่าทำไมนะ ทำไมผมถึงยังจะดื้อที่จะ fall-back ไปเขียน C++ อยู่ดี?ความเคยชินบางอย่างมันแก้กันยาก อาจจะเป็นเพราะว่าผมใช้เวลาอยู่กับ C++ มานานกว่าภาษาอื่นๆ และทำงานจริงในภาษาตระกูล C มานานกว่าภาษาอื่นๆ หลายเท่าตัวก็ได้ (C, C++, Objective-C)เปล่าหรอกครับ ผมไม่ได้ถามเพื่อหาคำตอบใดๆ เพราะว่านี่คือธรรมชาติของมนุษย์ อะไรก็ตามที่เราทำจนเป็นนิสัย จนเป็น second nature แล้วมันอาจจะเปลี่ยนแปลงยากมาก หลายเรื่องเราเปลียนไม่ได้ เพราะว่าเรามีความรู้สึกว่า &#8220;เคยทำ&#8221; อะไรที่มันคล้ายๆ กันมาก่อนในลักษณะนั้นอยู่แล้ว (เช่นเวลาผมจะเขียนโปรแกรมง่ายๆ บางทีผมใช้ C++ โดยไม่มีเหตุผล ทั้งๆ ที่เขียน Ruby ง่ายกว่าเยอะ ส่วนหนึ่งเพราะว่าผม &#8220;เคยทำ&#8221; สิ่งนั้นมาแล้วใน C++ มั้ง)ผมเลยมีข้อสังเกตและข้อเสนอแนะให้น้องๆ ที่อยากจะเขียนโปรแกรมภาษาใหม่นะครับ ดังนี้
<ol>
<li>เขียน code ภาษานั้นให้เยอะที่สุดและเร็วที่สุด โดยอย่าเอาแต่ลอก code จากหนังสือหรือว่า tutorial เพราะว่าคุณจะไม่ได้ใช้งานจริง และไม่ได้ force ให้ตัวเองคิดในลักษณะของภาษาใหม่ๆ เท่าไหร่</li>
<li>เรียน standard library ของภาษานั้นๆ ให้มากที่สุดในเวลาที่น้อยที่สุด เพื่อให้รู้ว่ามันพอจะทำอะไรให้เราได้บ้าง โดยไม่ต้องลงอะไรเพิ่มเติม แล้วก็ลองดูว่ามันเอามาทำอะไรให้ชีวิตเราง่ายขึ้นได้บ้าง</li>
<li>หักดิบ อย่าเล่นภาษาเดิมเท่าที่จะทำได้ ถ้าจำเป็นจริงๆ ก็ลองลบ compiler ภาษาเดิมทิ้งไปเลย</li>
<li>อย่าเอาแต่เรียน syntax กับ library นะ เพราะว่าสิ่งที่สำคัญที่สุดสิ่งหนึ่งที่แทบทุกคนลืม ก็คือ การเรียน idiom ของภาษานั้นๆ ยิ่งหลายภาษา โดยเฉพาะพวกภาษาใหม่ๆ เป็นพวก expressionism ซะด้วยสิ แบบนี้ idiom ยิ่งสำคัญมากเข้าไปอีก</li>
<li>ยิ่งถ้าเป็นการเรียนภาษาคนละ paradigm กับที่เคยเขียนนะ ยิ่งไปกันใหญ่ เพราะว่าลักษณะการเขียน วิธีคิด idioms ต่างๆ มันจะต่างกันมาก มากๆ ถึงมากที่สุด</li>
<li>ยากนะ แต่ว่าหลายครั้งต้องคิดนอกกรอบเดิม ถ้าคิดตามกรอบเดิมล่ะก็ คุณก็จะไม่ได้เขียนภาษาใหม่หรอก แต่ว่าจะเขียนภาษาเดิมน่ะแหละ แต่ว่าอยู่ใน syntax ใหม่เท่านั้นเอง</li>
<li>ทำงานจริง เพราะว่าทำงานจริงเท่านั้นที่จะบังคับให้เราต้องอยู่กับภาษาโปรแกรมภาษาใหม่และกระบวนการคิดของมัน ยิ่งทำงานจริงแบบมี deadline ด้วยแล้วล่ะก็ ยิ่งดี เพราะว่าเป็นการบังคับให้เรายิ่งต้องคิดและ figure out การทำงานต่างๆ และ idioms ของมันให้ได้เยอะที่สุด เพื่อประโยชน์สูงสุด และให้งานเสร็จเร็วที่สุด</li>
<li>หา library เพื่อช่วยงานโน้นงานนี้เยอะๆ มีของเล่นเยอะๆ แล้วลองเล่นกับมัน เดี๋ยวก็ชินกับมันไปเองแหละ</li>
<li>ดูภาษาอื่นๆ ใน paradigm เดียวกันบ้าง เพื่อหาข้อเปรียบเทียบหน่อยๆ ก็ดี</li>
<li>ระลึกไว้ ว่าไม่ใช่ทุกภาษาเหมือนกัน สิ่งที่ผิดหลักการในภาษาหนึ่ง อาจจะเป็นสิ่งที่ถูกหลักการและควรทำในอีกภาษาหนึ่งก็เป็นได้ ดังนั้นอย่ายึดติดกับหลักการและข้อบังคับข้อกำหนดต่างๆ ของภาษาหนึ่งๆ มากไปนัก</li>
<li>พยายามมองหาโอกาสใช้มันให้เยอะที่สุดเท่าที่จะทำได้ และอย่าเลี่ยงโอกาสในการใช้มันซะล่ะ</li>
</ol>
<p>จริงๆ เรื่องนี้ยังเขียนได้อีกยาวมาก แต่ว่าวันนี้พอแค่นี้ก่อน ชักเหนื่อย แต่ขอปิดท้ายด้วย quote ดังจากคนดัง<br />
<blockquote> Anyone could learn Lisp in one day, except that if they already knew Fortran, it would take three days.Marvin Minsky</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.rawitat.com/2007/09/20/65/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Quote: แก้ไขอดีต</title>
		<link>http://www.rawitat.com/2007/06/26/21/</link>
		<comments>http://www.rawitat.com/2007/06/26/21/#comments</comments>
		<pubDate>Tue, 26 Jun 2007 08:39:40 +0000</pubDate>
		<dc:creator>rawitat</dc:creator>
				<category><![CDATA[Quote]]></category>

		<guid isPermaLink="false">http://www.rawitat.com/2007/06/26/quote-%e0%b9%81%e0%b8%81%e0%b9%89%e0%b9%84%e0%b8%82%e0%b8%ad%e0%b8%94%e0%b8%b5%e0%b8%95/</guid>
		<description><![CDATA[จาก Fortune (via: Exploring Solution Spaces, C. Keith Ray): You can change tomorrow&#8217;s yesterday only if you make a change today. สุดยอดมาก ขอเก็บไว้เป็นอีกหนึ่ง quote ในดวงใจเลย (มี quote ที่ชอบเยอะแยะไปหมด) &#8230; เราชอบบ่นกันใช่มั้ยล่ะ ว่า ถ้าแก้ไขอดีตได้นะ หรือว่าถ้าวันน้ันทำแบบนั้นทำแบบนี้ ถ้าย้อนกลับไปได้นะ ฯลฯ &#8230;. แต่ว่า วันนี้ มันก็จะกลายเป็น อดีต เมื่อ พรุ่งนี้ มาถึงใช่มั้ยล่ะ อืมมมม เราสามารถเปลี่ยนอดีตของวันพรุ่งนี้ได้ ก็ต่อเมื่อเราเปลี่ยนมันในวันนี้ เมื่อเอามาประกอบกับ quote หนึ่ง (อันนี้จากการไปฟัง VP ของ IBM พูดมานะ) ซึ่งผมชอบอยู่แล้วเป็นทุนเดิมล่ะก็เยี่ยมเลย [...]]]></description>
			<content:encoded><![CDATA[<p>จาก <b>Fortune</b> (via: <a href="http://homepage.mac.com/keithray/blog/2007/06/19/">Exploring Solution Spaces, C. Keith Ray</a>):</p>
<blockquote><p>
You can change tomorrow&#8217;s yesterday only if you make a change today.
</p></blockquote>
<p>สุดยอดมาก ขอเก็บไว้เป็นอีกหนึ่ง quote ในดวงใจเลย (มี quote ที่ชอบเยอะแยะไปหมด) &#8230;</p>
<p>เราชอบบ่นกันใช่มั้ยล่ะ ว่า ถ้าแก้ไขอดีตได้นะ หรือว่าถ้าวันน้ันทำแบบนั้นทำแบบนี้ ถ้าย้อนกลับไปได้นะ ฯลฯ &#8230;. แต่ว่า <b>วันนี้</b> มันก็จะกลายเป็น <b>อดีต</b> เมื่อ <b>พรุ่งนี้</b> มาถึงใช่มั้ยล่ะ อืมมมม</p>
<blockquote><p>
เราสามารถเปลี่ยนอดีตของวันพรุ่งนี้ได้ ก็ต่อเมื่อเราเปลี่ยนมันในวันนี้
</p></blockquote>
<p>เมื่อเอามาประกอบกับ quote หนึ่ง (อันนี้จากการไปฟัง VP ของ IBM พูดมานะ) ซึ่งผมชอบอยู่แล้วเป็นทุนเดิมล่ะก็เยี่ยมเลย</p>
<blockquote><p>
If nothing changed, nothing changes.
</p></blockquote>
<p>หรือว่าแปลว่า</p>
<blockquote><p>
ถ้าไม่เปลี่ยนอะไร ก็ไม่มีอะไรเปลี่ยน
</p></blockquote>
<p>สรุปว่า มันจะมีเรื่องโน้นเรื่องนี้ ที่เราเห็นว่ามันไม่เข้าท่า แล้วเราก็มานั่งด่ามัน นั่งบ่นมัน นั่งกลุ้มใจ นั่งอารมณ์เสีย นั่งเสียสติ นั่งคิดมาก นั่งฟุ้งซ่านอยู่กับมัน แต่ว่าหลายคนกลับกลัวการเปลี่ยนแปลง มีข้ออ้างโน่นนี่สาระพัดสาระเพ เพื่อให้ไม่ต้องเปลี่ยนไป ข้ออ้างที่ไร้เหตุผลและไร้สาระที่สุด ก็คือ เดี๋ยวมันก็ดีขึ้นเอง หรือว่าเมื่อเวลาผ่านไปทุกอย่างจะดีขึ้นเอง ทำนองนั้น</p>
<p>เวลามันไม่ช่วยอะไรหรอกนะครับ มันไม่เคยช่วยอะไรเลย</p>
<p>ผมเชื่อว่าทุกอย่างน่ะ มันเป็น dynamical system ง่ายๆ แค่</p>
<p>x[t+1] = F(x[t])</p>
<p>เท่านั้นแหละครับ&#8230;.. ถ้าอยากจะให้พรุ่งนี้มันเปลี่ยนไป ไม่ต้องนั่งด่าเรื่องโน้นเรื่องนี้ หรือว่าบ่นเรื่องเดิมๆ อีกล่ะก็ ช่วยๆ กันเปลี่ยนๆ มันตั้งแต่วันนี้เถอะครับ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rawitat.com/2007/06/26/21/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

