Java

ข่าวเล็กๆ ที่ออกมาพร้อมกับ Android 2.3 คือ NDK r5 ที่อัพเดตมาพร้อมกัน ส่วนหนึ่งที่สำคัญของมันคือ NativeActivity ที่เปิดช่องให้นักพัฒนาสามารถพัฒนาซอฟต์แวร์ทั้งหมดโดยไม่ต้องเขียนจาวาแม้แต่บรรทัดเดียว

ตัวแอพพลิเคชั่นยังคงรันอยู่ภายใต้ DalvikVM และหากต้องการเรียกฟังก์ชั่นบางส่วนจากจาวาก็ทำได้ผ่าน JNI

Tim Bray เขียนบล็อกเรื่องนี้โดยยกตัวอย่างซอร์สโค้ดที่มีฟังก์ชั่น main เพียงฟังก์ชั่นเดียวในภาษา C/C++ ก็สามารถทำงานได้ (ตัวอย่างโค้ดอยู่ท้ายข่าว)

ที่มา - Android Developer

{syntaxhighlighter brush: cpp}
void android_main(struct android_app* state) {
// Make sure glue isn't stripped.
app_dummy();

// loop waiting for stuff to do.
while (1) {
    // Read all pending events.
    int ident;
    int events;
    struct android_poll_source* source;

    // Read events and draw a frame of animation.
    if ((ident = ALooper_pollAll(0, NULL, &events,
            (void**)&source)) >= 0) {
        // Process this event.
        if (source != NULL) {
            source->process(state, source);
        }
    }
    // draw a frame of animation
    bringTheAwesome();
}

}
{/syntaxhighlighter}

Hiring! บริษัทที่น่าสนใจ

Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
MuvMi (Urban Mobility Tech Co.,Ltd.) company cover
MuvMi (Urban Mobility Tech Co.,Ltd.)
Shape the future of urban mobility towards affordable, clean, and safe solutions
T.N. Digital Solution Co., Ltd. company cover
T.N. Digital Solution Co., Ltd.
TNDS has been involving in every first move of banking’s major digital transformation.
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
The Gang Technology Co., Ltd. company cover
The Gang Technology Co., Ltd.
We're a Digital Agency that helps our customers transform their business into digital with ease.
LTMH company cover
LTMH
LTMH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand

PaPaSEK Wed, 12/01/2011 - 07:47

NDK = Nokia Developer Kit กร๊ากๆๆๆ

ปล.ปัญหามันอยู่ที่ Java เหรอ

PiKO Wed, 12/01/2011 - 08:32

^o^/ I ♥ C .. หวังว่าจะไปรันใน Android 2.x ได้ด้วยน๊าาา

ไม่มีประโยชน์มั้งครับ syntax ต่างกันแค่นั้น สู้ไปเขียน java เลยดีกว่า

dalvik มันเหลือแค่ syntax java กับ lib นิดหน่อย นอกนั้นเป็น library ของ android ไปหมดแล้ว

ฟีเจอร์ดีๆที่มีใน C# แต่ไม่มีใน Java ก็มีอยู่นะครับ
อย่างน้อยมันก็คุ้นมือ ผมนึกไม่ออกเลยว่าถ้าไม่มี struct กับ generic ผมจะ optimize ยังไงดี

ผมถึงเขียนไว้ใน คห.บนๆ ของผมว่า ปัญหามันอยู่ที่ Java เหรอ

จริงๆ คือมันหามันอยู่ที่ Programmer มากกว่าที่เกี่ยงภาษานั้นภาษานี้ครับ
ทางเลือกเยอะมันก็ดี แต่มันไม่จำเป็นครับ อีกทั้งมันยังทำให้ขนาดของ Core ใหญ่ตามไปด้วย

พอมี C# ก็ต้องมีคนถามว่าทำไมไม่มี VB, J# บลาๆๆๆๆๆ

**ไม่ได้ประชดนะครับ(กลัวโดนดุ งุงิ)

การไม่ยึดติดกับภาษามี Cost ของเวลาในชีวิตมากครับ
มันก็แล้วแต่คนไป บางคนถนัดภาษา เรียนได้หลายภาษา แถมไม่ตีกัน ก็ถือว่าโชคดี
แต่บางคนชอบ Technical มากกว่า ไม่อยากนั่งปวดหัวกับการเรียนภาษา อยากใช้ภาษาที่มันเหมาะๆซักภาษาแล้วไม่ต้องเรียนอีก

C/C++ เปนตัวอย่างที่ดีของภาษาที่ทำให้คนจำนวนมากเรียนมันแล้วไม่ต้องไปเรียนอะไรอย่างอื่น
การเปนโปรแกรมเมอร์ที่ดีอาจจะต้องไม่เกี่ยงภาษา แต่การทำผลงานดีๆ อาจไม่จำเปนต้องเปนโปรแกรมเมอร์ที่ดีก็ได้นะครับ

แทนที่จะเอาเวลาไปศึกษาภาษาอื่นๆที่คล้ายๆกันให้สับสนเล่น เอาเวลามาทำผลงานดีกว่าหรือเปล่า

ดีกว่าครับ

แต่ C# มันเหมือนกับ C/C++ ตรงไหนง่ะ
ถ้าบอกว่า C/C++ ดีเรียนทีเดียวใช้ได้ทุกอย่างทำไมไม่ใช้ C/C++
ทั้งๆ ที่รู็ว่า .NET มัน "Write in any language, run on windows"

การตัดสินใจใช้ C# ของผมก็มี Mono หนุนหลังอยู่
และสำหรับผมเองก็ไม่มีปัญหากับการทำงานบน Windows อย่างเดียวอยู่แล้วครับ
ผมจะไปทำอะไรอย่างอื่น ถ้าผมยังทำงานกับ Windows ก็ไม่ต้องเรียนภาษาอื่น ใช้ C# ได้ เพราะมันทำได้ทุกงาน

การเรียกร้องให้กูเกิลทำ C# บน Dalvik ก็เปนแค่การเรียกร้อง ไม่มีก็ไม่ตาย
แต่ในเมื่อมันมีแล้วดีกว่า มันก็คือดีกว่า

มันก็เหมือนการลงทุนแหละครับ
ผมลงทุนกับ C# เพราะมันลด Cost ของเวลาในชีวิตไปมากกว่าการพยายามใช้ C++ (แต่ผมก็ยังไม่ทิ้ง C นะ)
การที่มันรันได้แค่บนวินโดวส์ และ Mono ก็ไม่ค่อยซัพพอร์ทในที่อื่นๆ
มันก็เหมือนลงทุนแล้วได้กำไรน้อยกว่า ก็เปนเรื่องที่ยอมรับแต่ต้น
แต่ถ้ามีทางทำกำไรมากขึ้นด้วยที่การลงทุนเดิม และไม่เสียหายอะไร ผมว่าใครๆก็ทำ

ตอบสั้นๆ เห็นด้วยครับ :)

อันนี้ถามเล่นๆ ถ้าตัดสินใจใช้ C# เพราะว่ามี Mono หนุนหลังก็แสดงว่าเพิ่งเริ่มเขียนโปรแกรมได้ไม่นาน ทำไมไม่ลองเพิ่มภาษาอะไรสักอย่างลงเป็นภาษาที่สองล่ะครับ

Mono มีมาตั้งหลายปีแล้วครับ ผมใช้ C# มามากกว่า 4 ปีแล้ว(จำปีที่เริ่มไม่ได้)
ช่วงที่ผมมองๆ จับๆ ก็มี Mono เวอร์ชั่นแรกมาแล้ว

ถ้าผมจะเพิ่มอะไรเปนภาษาที่สอง คงเปนภาษาที่ทำในสิ่งที่ C# ทำไม่ได้ล่ะครับ
ส่วนตัวผมก็รู้ php MySQL HTML อยู่บ้าง แต่บางทีอาจจะหนีไปพวก Erlang หรือ Perl Lisp หรือ Prolog ไปเลยก็ได้ น่าจะมีประโยชน์กว่ามาเรียนภาษาที่ทำงานคล้ายๆกันให้ Syntax กับฟีเจอร์ตีกันในหัวเล่น

อย่างไปพิมพ์ struct หรือ virtual ใน Java ไรเงี้ย

ผมว่า การที่เราจะเลือกศึกษาภาษาอะไร ถ้าศึกษาภาษาที่ใกล้เคียงกันจะง่ายและไปเร็วกว่าครับ

ผมเริ่มจาก C ไป Java ไป C# กลับมา C++ (ภาษากลุ่มนี้เรียกว่า C-derived ก็ได้มั้งนะ ถ้าเกิดผมไปจับ Pascal คงต้องใช้เวลามากขึ้นพอดู)

Syntax คล้าย ๆ กันไม่เป็นปัญหาเท่าไหร่ ตัว Lib เองก็เหมือนกัน ตราบใดที่จับ Concept หลัก ๆ ได้ก็ไม่มีปัญหานะ คือ Syntax มันเปิด reference อ่านได้ ตราบใดที่เข้าใจว่า concept ข้างหลัง syntax นี่มันคืออะไรก็ไม่มีปัญหาครับ

ปล. ผมมีหนังสือตระกูล In The Nutshell ประมาณ12 เล่มครับ 555+

มันไม่คล่องน่ะสิครับ เวลาใช้หลายๆภาษาที่หน้าตาใกล้ๆกันสับไปมา มันจะตีกันเอง
ฟีเจอร์ภาษานึงไม่มีในอีกภาษา วิธีเขียนบางทีก็เปลี่ยน เทคนิคชินมือบางอย่างก็ตัดหายไป
เทียบตอนที่ผมเขียน C# พร้อม Java กับ C# พร้อม SQL นี่ความงงคนละเรื่อง

ถ้่าบอกว่าให้เขียน Java วันนี้ ก็แหงว่าทำได้แน่ๆ แต่ของที่ไม่ถนัดมันถ่วงเวลานะครับ

และในเมื่อมันทำอะไรๆได้เหมือนๆกัน ก็ไม่รู้จะลงแรงกับมันไปทำไมถ้ามันไม่ได้ดีกว่าขนาดนั้น

สำหรับผม C++ "เหมือน" ปาสคาล ในแง่ของสิ่งที่มันทำได้
C# กับ Java ก็เช่นกัน
ตรงนี้ก็ เลือก ตัวใดตัวหนึ่ง น่าจะดีกับชีวิตมากกว่า

+1 ครับ ตรงที่ถ้าจะเริ่มภาษาที่าสอง ไปเริ่มภาษาที่ C# มันทำไม่ได้ดีกว่า

แต่ผมเขียน C# อย่างเดียวจนลืมภาษาอื่นไปหมดสิ้นแล้ว

เป็นเรื่องที่ดีมากๆเลย ถึงผมเองจะไม่มีโอกาสได้เขียนโปรแกรมเยอะๆเหมือนสมัยก่อนอีก ก็ยังรู้สึกดีใจอย่างประหลาด ฮ่าๆ

ตอนแรกผมเขียน C++ อยู่แล้วผันตัวมาเขียน java อยากบอกว่าพอยเตอร์ลืมเกลี้ยงเลย อุอุอุ java ง่ายกว่า C++ เยอะ

ประเด็นของข่าวนี้น่าจะเป็นการดึง App ของ iPhone มาพอร์ทลง Android มากขึ้น (เพราะว่า iPhone ใช้ C/C++/ObjC) ถ้าเกิดว่าสามารถเอาโค๊ดมาใช้ได้มากขึ้นก็พอร์ทได้ง่ายขึ้นใช่มั้ยล่ะครับ :-)

มันกว้างกว่านั้นครับ เกมของ PC/Console ฯลฯ ก็ล้วนพัฒนาบน C/C++ เป็นส่วนใหญ่ (โดยเฉพาะเกมสามมิติทั้งหลาย)

giogio Wed, 12/01/2011 - 13:54

เหอๆ รอมานาน เห็นใจคนเชี่ยวชาญ c++ แต่ลืม java หมดอย่างผมบ้างเถอะนะ android จ๋า ^^

ถ้าเอาเริ่มง่ายแต่งงทีหลัง C# น่าจะเป็นคำตอบ เพราะว่าใช้ง่ายแต่ฟีเจอร์เยอะ ไม่ควรเริ่มที่ 1.0 เพราะบางฟีเจอร์ไม่สมบูรณ์ (ทำให้คนหนีไปเลยก็เยอะ)

ภาษา C มีข้อจำกัดเยอะที่สุด แต่ก็ทำให้มีสิ่งที่ต้องเรียนรู้น้อยที่สุดเหมือนกัน ทำให้สามารถเป็นเทพได้ง่ายที่สุด

ภาษา C++ มีศักยภาพสูงที่สุดในบรรดาสามภาษานี้ เพราะฟีเจอร์เยอะมาก เยอะจนจำได้ไม่หมด แถม C++0x ก็จะเพิ่มฟีเจอร์เอาให้งงเข้าไปอีก (ฮา) เป็นภาษาที่รองรับแนวความคิดถึงสามแบบ คือ procedural, object-oriented, และ meta-programming แถมใช้ผสมกันได้อีก (ในขณะที่ภาษาอื่น ๆ มักจะมีตัวใดตัวนึงยืนพื้น และตัวอื่นจะขาด ๆ เกิน ๆ)

สรุป ... Java ง่ายกว่าสามภาษานี้ ในแง่ของคนเริ่มต้น 555 แต่ผมเชื่อว่า C เป็นภาษาที่น่าศึกษาที่สุดสำหรับคนเริ่มศึกษาครับ เพราะจะไม่ได้โดนภาษา spoil คนเรียน (อย่างภาษาที่ใช้ GC) แล้วพอแม่นในคอนเซ็ท์ตรงนี้แล้วค่อยขยับขยายไปศึกษาภาษาอื่นครับ

ผมเชื่อว่า การเขียนโปรแกรมมันไม่ได้สำคัญที่ Syntax แต่เป็น Logic ถ้าเราเข้าใจในแต่ละภาษาในระดับของคอนเซ็พท์เบื้องหลังภาษา เราจะสามารถเรียนรู้ภาษาเขียนโปรแกรมอื่น ๆ ได้เร็วมาก สิ่งที่สำคัญที่สุดคือการเลือกผู้สอน/ตำรา ถ้าเลือกผิดก็จบกันเลย ควรจะเรียนกับคน/ตำราที่สอนให้เข้าใจถึงึคอนเซ็พท์ ไม่ใช่ผลลัพท์ที่ได้ เช่นถ้าเกิดเราไปเรียน C# แล้วเขาสอนลากวาง ๆ อย่างเดียวมันก็ไม่ได้อะไรครับ

เล่าเป็นประวัติคร่าวๆ ละกันครับ

ถ้าขี้เกียจอ่าน ข้ามไปอ่านสรุป

-ผมเริ่มจาก QBASIC
-พอมันเริ่มทำตามความต้องการได้ไม่ครบก็ย้ายไป Quick Basic (ต่างกันตรงที่เป็น Version จ่ายเงินกับไม่จ่ายเงิน และจำนวนคำสั่งบางอย่าง)
-ตอนนั้น Windows 3.11 ออกมาก็ยังเล่น Quick Basic ไปพักใหญ่ แต่ก็เริ่มมาหัดเขียน VB ตอนที่เป็น VB4
-Windows 95 ออกก็มาเขียน VB6
-จากนั้นเข้าเรียน ปวช ก็ได้เรียน Assembly เล็กๆ กับ Z80
-ปวส ได้เรียน C ครับเป็น Turbo C
-ปริญญาตรีได้เรียน Java พร้อมกับ Data Structure
-ทำงานแล้วผมก็ยังเกาะกับ VB ครับ แต่เริ่มทำงานที่แรกเขียน Delphi จนติดพอสมควร แต่ Delphi นั้นได้ Executable File ที่ใหญ่มาก ผมรับไม่ได้ แต่ต้องใช้เพราะมันเป็นงาน ส่วน VB(6) นั้นไฟล์เล็ก แต่ต้องใช้ VB Runtime Library เสมอ ซึ่งตอนที่เป็น Windows 98 มันไม่ได้ให้มาด้วยเป็น Default ผมรำคาญมาก
-ทำงานที่แรกได้ปีนึงก็เปลี่ยนงาน คราวนี้เริ่มด้วย VB6 และขยับมาเขียน VB.NET เพราะความเป็น Object Oriented
-เขียนไปเขียนมาขยับมาเป็น C# ครับ เพราะสนุกกว่ากันเยอะ ใช้ Pointer ได้ เขียนโปรแกรมได้ง่ายขึ้นและ Debug ง่ายขึ้นเพราะ C# ค่อนข้างเข้มงวดกับ Datatype ซึ่ง VB ขาดตรงนี้ไป ทำให้บางครั้งโปรแกรมทำงานผิดก็ไม่รู้ตัว
-ระหว่างนี้ผมรู้สึกว่าตัวเองรู้น้อยเกินไปที่จะเป็นโปรแกรมเมอร์(ที่ดี) จึงไปอ่าน Assembly เพื่อให้รู้ว่าจริงๆ แล้วมันเกิดอะไรขึ้นบ้างในฉากหลังของ High Level Language ที่สวยงาม การที่ได้ไปศึกษา Assembly ทำให้เข้าใจการทำงานของ Computer มากขึ้น และเขียนโปรแกรมที่มีประสิทธิภาพได้มากขึ้น ใช้ Memory น้อยลง ขนาด Executable ไฟล์เล็กลง โปรแกรมทำงานเร็วขึ้น ฯลฯ

** ผมไม่รวมพวก Scripting Language อย่าง ASP,PHP นะครับ

สรุป
ถ้าอยากเป็นผู้เชี่ยวชาญในภาษาใดภาษานึงก็เลือกมาเลยครับ แต่ถ้าอยากเป็นโปรแกรมเมอร์ที่ดี รู้ภาษาเดียวไม่พอครับ อย่างไรก็ตาม แนะนำว่าไปจาก C/C++ จะทำให้ชีวิตรุ่งโรจน์ครับ ถ้าเริ่มจากตระกูล Basic จะสบัดรูปแบบมันยากครับ

ขอบคุณทั้งสองท่านเลยครับ (เมนท์บนด้วย) จริงๆผมก็ไม่ได้ว่าว่างขนาดจะมานั่งศึกษาอะไรที่มันซับซ้อนขนาดนี้เพิ่มหรอกครับ แต่เพราะเคยเขียนโปรแกรมกะหลั่วๆเพื่อใช้คำนวนตอนเรียนมาบ้าง (Pascal กับ Fortran) แล้วพบว่ามันสนุกดี เลยอยากลองเล่นอะไรใหม่ๆนอกจากภาษาโบราณอย่างเจ้าสองตัวนั้นบ้าง แต่เลือกไม่ถูกเพราะผมไม่เข้าใจความแตกต่างระหว่างไอ้ C 3 ตัวนี้แหละครับ ไว้เดี๋ยวไปลองหาหนังสือมานั่งงมเล่นๆดู

ถ้าอยากได้ Interface ง่ายๆ แค่ลากๆ คลิกๆ เขียนสักสองสามบรรทัดก็ได้โปรแกรม

แนะนำ C# ครับผม

ถึงแม้ว่า C# จะมี Syntax แตกต่างกับ VB แต่วิธีการเรียกใช้ Class ต่างๆ จำนวนตัวแปร ฯลฯ นั้นเรียกได้ว่าเข้ากันหมดกับทุก .NET Programming language ครับ

ผมเขียนโปรแกรมใหญ่ๆ สำเร็จครั้งแรกกับ Java นะครับ ก่อนหน้านั้นเคยลอง C C++ Pascal ซึ่งอันสุดท้ายนี่หา library ใช้ไม่ค่อยได้เลยเลิกไป C กับ C++ นี่บางทีเขียนแล้ว memory leak ไม่รู้ตัว จนมาเขียนภาษาที่มี CG บ่อยๆ ถึงจะเข้าใจแนวคิดการจัดการ memory แต่ก็ไม่รู้บังเอิญด้วยหรือเปล่าว่า ช่วงที่เริ่มเข้าใจคือช่วงเรียนป.ตรี ได้เรียนเรื่องพวกนี้อย่างจริงจัง

สรุปว่าจะบอกว่า Java ไม่ spoil แต่ช่วยให้เรียนได้เร็วขึ้นครับ

ป.ล. ตอนนี้อยากกลับไปเขียนภาษาตระกูล C แต่ยังไม่ได้โอกาส

น่าจะเป็นเพราะ Oracle เริ่ม Devil ขึ้นทุกวันนับตั้งแต่ซื้อ Sun เช่น การฟ้องร้อง การกั๊ก การจำกัด ซึ่งทำให้เกิดช่องว่างถ่างขึ้นเมื่อเทียบกับ Sun และนักพัฒนากลุ่มเดิมที่มีอุดมการณ์สูง