วันศุกร์ที่ 3 ตุลาคม พ.ศ. 2557

อยากเป็นโปรแกรมเมอร์ เริ่มต้นอย่างไรดี


              น้องๆ หลายคนอาจจะมีความคิดว่าสักวันจะต้องก้าวขึ้นมาเป็นโปรแกรมเมอร์ให้ได้ เพราะมีไอดอลอย่าง มาร์ค แห่ง facebook สตรีฟ แห่ง apple หรือ บิลเกตจาก microsoft คงจะดูเท่ไม่น้อยเลย ถ้าวันนึงมีคนมาถามว่าเราทำงานอะไร และเรากล้าตอบอย่างเต็มปากว่า "ผมเป็นโปรแกรมเมอร์"
ก่อนที่เราจะมองถึงวันนั้น เราต้องถามตัวเองในวันนี้ก่อนว่าเราอยากเป็นโปรแกรมเมอร์เพราะอะไร ถ้าไม่นับรวมความเท่หรือดูเก่งกาจ ฉลาดปราดเปรื่อง ก่อนอื่นเราต้องรู้จักอาชีพโปรแกรมเมอร์ก่อนว่าเขาทำอะไร มีหน้าที่อะไร และต้องเรียนรู้อะไรบ้าง
1.ต้องรู้จักคำว่า "โปรแกรมเมอร์" ให้ดีก่อน
    โปรแกรมเมอร์ คือนักพัฒนา software ทั้งสร้าง แก้ไข และปรับปรุงให้ดีขึ้น เพื่อให้สามารถใช้งานร่วมกับอุปกรณ์ เทคโนโลยีที่มีอยู่ ณ ปัจจุบัน เพื่อให้เกิดประโยชน์อย่างใดอย่างหนึ่ง ไม่ว่าจะเป็น โปรแกรมอรรถประโยชน์ เช่น MS office ,excel หรือจะเพื่อความบันเทิง อย่างเกมส์ต่างๆ สิ่งเหล่านี้คือหน้าที่หลักของ "โปรแกรมเมอร์"

2.ต้องรู้ว่า "โปรแกรมเมอร์" ต้องเรียนรู้อะไรบ้าง
   โปรแกรมเมอร์เรียนเหมือนกับคนส่วนใหญ่ทั่วไป แต่สนใจในสิ่งที่คนอื่นเบือนหน้าหนี นอกจากภาษาในการพัฒนาโปรแกรมต่างๆ อย่าง C, C++,VB,Pascal,Java ,Object c ที่ต้องรู้จักโครงสร้างของภาษาเป็นอย่างดี ต้องแต่การประกาศตัวแปร จนไปถึงการใช้งาน method ต่างๆ ซึ่งแต่ละภาษาจะไม่เหมือนกัน แต่ก็อยู่ภายไต้แนวคิดเดียวกัน เช่น ใน ภาษา PHP จะไม่มีการประกาศชนิดของตัวแปรว่าเป็นประเภทใด เพราะใน PHP มีตัวจัดการอยู่แล้ว คอมไพล์เลอร์ ฉลาดพอที่จะแปลงชนิดข้อมูลเอง ต่างจาก Java และ C ที่ต้องประกาศชนิดของตัวแปรให้ชัดเจน ถึงจะใช้งานได้และแต่ละชนิดจะเก็บค่าได้เพียงชนิดเดียวเท่านั้น แต่ก็จะมี method สำหรับแปลงชนิดของตัวแปรไปเป็นชนิดอื่นเมื่อมีความจำเป็น
   นี่แค่เพียงพื้นฐานที่เราต้องเรียนรู้(แค่นี้ก็ปวดหัวแล้ว) ต่อไป เราต้องเข้าใจในฐานข้อมูล(database) เราหนีไม่พ้นว่าโปรแกรมที่เขียนจะต้องใช้งานร่วมกับฐานข้อมูลไม่ว่าเล็กหรือใหญ่ ถ้ามีคนใช้งานมากกว่าหนึ่งคนขึ้นไป ความยุ่งยากจะเพิ่มมากขึ้น ตามจำนวนผู้ใช้งาน ตั้งแต่แอพพลิเคชั่นเล็กๆ ไปจนถึงระบบใหญ่ ที่มีเป็นร้อยๆ โมดูล(โมดูล คือ โปรแกรมย่อยที่มีอยู่ในระบบ) ภาษาที่ต้องเรียนรู้เพื่อใช้งานฐานข้อมูล คือ SQL ซึ่งเป็นภาษาเฉพาะ ที่ต้องเข้าใจอย่างน้อยก็ต้องรู้จัก คำสั่งในการสร้างฐานข้อมูล ดึงข้อมูลมาแสดง ลบ เพิ่ม เป็นอย่างน้อย
   สิ่งที่ต้องเรียนรู้เพิ่มเติมและจำเป็นคือ อัลกอรึทึม หรือวิธีการแก้ปัญหา มีคนเคยบอกไว้ว่า การฝึกเขียนโปรแกรมใช้เวลาน้อยกว่า การฝึกอัลกกอริทึม ซึ่งเป็นความจริง 100 เปอร์เซ็นต์ เหมือนเราเรียน บวก ลบ หาร คูณ เลขได้ แต่จะทำอย่างไรให้เราเอามาแก้โจทย์ปัญหาได้ โปรแกรมเมอร์ก็เช่นกัน เรารู้จักวิธีการเขียนโปรแกรมก็ต้องรู้จักการพลิกแพลงให้เข้ากับโจทย์ให้ได้
  ต่อไปที่ต้องเข้าใจคือ แพลตฟอร์ม ของโปรแกรมที่เราจะเขียน windows ,linux,Macintos เหล่านี้เรียกว่า OS (Operating System) หรือระบบปฏิบัติการ โปรแกรมหนึ่งที่พัฒนาด้วยภาษาใดภาษาหนึ่งจะไม่สามารถใช้งานได้ทุก OS แต่จะสามารถใช้งานได้เพียง หนึ่ง หรือ สอง OS เท่านั้น เช่น โปรแกรมที่เขียนด้วยภาษา Java จะทำงานได้ดีบน windows และ Macintos แต่อาจจะไม่สามารถทำงานบน linux ได้ ดังนั้นหากคิดจะเป็นโปรแกรมเมอร์ต้องเลือกภาษาที่จะเขียน และ แพลตฟอร์มให้ชัดเจนอาจจะเริ่มต้นด้วยโปรแกรมบน windows ก่อน เพราะเป็น os ที่มีอยู่ทั่วไปและใช้งานง่ายที่สุด นอกจาก แพลตฟอร์มเหล่านี้แล้วยังอาจจะต้องเลือกอุปกรณ์(device)ที่จะใช้งานโปรแกรมด้วย เช่น สมาร์ทโฟน แท็ปแลต iPad เป็นต้นซึ่ง หากเราเคยเขียนโปรแกรมบน OS มาแล้ว ถ้าจะลงใน device ก็ไม่ใช่เรื่องยาก

3.ต้องพัฒนาตัวเองอยู่ตลอดเวลา
    โปรแกรมเมอร์ไม่ใช่อาชีพที่สบายและสนุกสนานตลอดเวลา โปรแกรมเมอร์ต้องตามให้ทันเทคโนโลยีใหม่ๆ เพราะโปรแกรมที่เขียนเมื่อ ปีที่แล้ว อาจจะทำงานไม่ได้ในปีต่อไป เคยเขียนโค้ดสิบบรรทัด อาจจะต้องปรับวิธีการเขียนให้เหลือแค่ไม่กี่บรรทัด เพราะฉะนั้น คนที่กระตือรือล้น เท่านั้นถึงจะเป็นโปรแกรมเมอร์ที่ดีได้ การฝึกเขียนบ่อยๆ เหมือนการเก็บ level ให้ตัวเอง ค่อยๆ ไต่ระดับความเทพขึ้นเรื่อยๆ ไม่มีโปรแกรมเมอร์คนไหนก้าวข้ามขั้น "Hello world " หรือโปรแกรมตัวแรกมาได้ ถ้าไม่เลียนแบบคนอื่นก่อน โปรแกรมเมอร์คืออาชีพแห่งการเลียนแบบ แต่ไม่ใช่การคัดลอก โปรแกรมบางอย่างเราไม่จำเป็นต้องคิดขึ้นมาใหม่ แต่เราแค่เอาของเดิมที่มีอยู่แล้วมาปรับให้ทำงานได้ดีขึ้น เร็วขึ้น การคิดวิธีใหม่ๆ เป็นขั้นที่สองมาจากการเลียนแบบ ยิ่งเลียนแบบมาเยอะ ก็จะค่อยๆ เพิ่มความเชี่ยวชาญให้ตัวเอง ยิ่งเข้าใจภาษา สุดท้ายเราก็คิดใหม่ได้ เพื่อให้เป็นสไตล์ของตัวเอง อย่ากลัวที่จะเลียนแบบ แต่อย่าชอบในการคัดลอก

4.ต้องยอมรับในความเครียดและความไม่เป็นเวลาของงานได้
    โปรแกรมเกือบทุกคนไม่ใช่คนตรงต่อเวลา ในการทำงานแต่ละคนล้วนทำงานเกินเวลา และพักผ่อนน้อย เพราะบางอย่างเราไม่สามารถเก็บไว้ทำวันหลังได้ เพราะงานจะไม่ต่อเนื่อง คิดได้ต้องรีบทำรีบเขียนก่อนจะลืม ไม่ต้องถามถึงเวลาพักผ่อน เที่ยวเตร่ หากคิดจะเป็นโปรแกรมเมอร์ต้อง มีความอดทน ถึงจะไม่ใช่ลูกจ้าง แต่งานเราก็คือส่วนหนึ่งของชีวิต แต่เมื่อไหร่ที่งานลุล่วงโปรแกรมเมอร์ก็คือนักเที่ยวดีๆ นั่นเอง โปรแกรมเมอร์เก่งๆ หลายคนเป็นนักดื่มคอทองแดง บางคนเขียนโปรแกรมได้ดีตอนเมา พอสร่างเมากลับไม่เข้าใจโค้ดที่ตัวเองเขียน

5.โปรแกรมเมอร์ไม่จำเป็นต้องเก่งทุกอย่างที่เรียน
    โปรแกรมเมอร์ไม่ใช่คนอัจฉริยะทุกคน บางคนมาจากคนเรียนแย่ด้วยซ้ำแต่เพราะความพยายามและการฝึกฝนทำให้กลายเป็นคนที่เชี่ยวชาญ เหมือนนักดนตรีงานเลี้ยง อ่านโน๊ตไม่เป็นแต่ solo กีตาร์ได้เทพกว่าคนที่เรียนสายตรงมา ทุกอย่างเกิดจาการฝึกฝน แต่อาจจะเสียเปรียนคนที่เรียนสายตรงมา ซึ่งพื้นฐานจะแน่นกว่า แต่ความรู้เรียนทันกันได้โปรแกรมเมอร์แก้สมการแคลคลูลัสเองไม่ได้ แต่อาจจะเขียนโปรแกรมที่สามารถแก้โจทย์ได้ ถ้ารู้สูตรของ แคลคลูลัส

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

วันอังคารที่ 30 กันยายน พ.ศ. 2557

APi คืออะไร วันนี้มีคำตอบ

API หรือ Application programing Interface
เปรียบเสมือนสายลิงค์ข้อมูลระหว่าง server แต่ละตัวเพื่อให้สามารถเข้าถึงข้อมูลและบริการได้โดยที่ไม่จำเป็นต้องเข้าไปยัง server โดยตรง ยกตัวอย่างงง่ายๆ เหมือนเราฝากเพื่อนไปตลาด สุดท้ายเราก็ได้ของ(ข้อ) จากตลาด(server) โดยที่ไม่ต้องไปตลาดเอง API มีสองแบบ คือ
1.เอพีไอที่ขึ้นกับภาษา (language-dependent API) คือ เอพีไอ ที่สามารถการเรียกใช้จากโปรแกรมที่เขียนขึ้นด้วยภาษาเพียงภาษาใดภาษาหนึ่ง
2.เอพีไอไม่ขึ้นกับภาษา (language-independent API) คือ เอพีไอ ที่สามารถเรียกได้จากโปรแกรมหลายๆภาษา
      API ถือเป็นกลุ่มของฟังชั่น ขั้นตอน หรือคลาส (Class ) ที่ระบบปฏิบัติการ (OS) หรือผู้ให้บริการ สร้างขึ้นมา เพื่อรองรับการเรียกขอข้อมูล จากโปรแกรมอื่น ๆ ทั้งนี้ API สามารถใช้งานได้กับภาษาในการเขียนโปรแกรมที่รองรับเท่านั้น ซึ่งมันจะถูกจัดทำให้อยู่ในรูปแบบ Syntax หรือ element ที่สามารถนำไปใช้ได้อย่างสะดวกสบาย
ยกตัวอย่าง api เช่น Google APi ทำหน้าที่เชื่อมต่อกับฐานข้อมูลเพื่อให้ผู้ใช้งานสามารถเรียกใช้งานข้อมูลต่างๆ ได้โดยอยู่ภายใต้การควบคุมของ google ซึ่งเป็นผู้ให้บริการ

วันพุธที่ 20 สิงหาคม พ.ศ. 2557

วิธีแก้ error uses-sdk:minSdkVersion xx cannot be smaller than version xx

สวัสดีครับ วันนี้ มีตัวอย่างปัญหาใน android studio มาให้ดูอีกแล้วครับ ปัญหาในวันนี้คือ การที่โปรแกรม แจ้งว่ามี error version ของ sdk ในไฟล์ minifest โดยตัวอย่างข้อความจะเป็นแบบประมาณ

"uses-sdk:minSdkVersion 14 cannot be smaller than version 14 declared in library
 com.android.support:support-v4:21.0.0-rc1"
 
สาเหตุคือเรากำหนด  uses-sdk:minSdkVersion ต่ำไปครับทำให้ไม่สามารถใช้งาน android L ได้วิธีแก้ปัญหาคือ
เราต้องไปแก้ไข
ที่ไฟล์ build.graddle ใน android studio 
 
คือไฟล์ที่ชื่อ build.graddle ซึ่งในภาพจะเห็นว่ามีสองไฟล์ แต่ต่าง path กันนะครับ ให้เปิดไปที่ไฟล์ที่สอง

(ด้านล่างในโฟล์เดอร์ graddle )แก้ไขโดยการ เพิ่ม คำสั่ง

          compile "com.android.support:cardview-v7:21.0.0-rc1"
          compile "com.android.support:recyclerview-v7:21.0.0-rc1"
          compile "com.android.support:palette-v7:21.0.0-rc1"

เข้าไปใน class dependencies  แทนที่ของเดิมซึ่งเป็น

 compile 'com.android.support:support-v4:+'
 
แบบในภาพนี้
 
จากนั้นให้คลิกที่แถบ graddle ด้านข้างหา task ตามภาพ แล้วกดรัน เพื่อให้ โปรแกรมทำการ generate ไฟล์ที่แก้ไข


 แล้วลองกดรันแอพตามปกติ ก็จะสามารถรันได้แล้วละครับ

 

สร้าง AVD ใน android studio ไม่ได้ มีคำตอบ

สวัสดีครับ ท่านผู้อ่าน วันนี้ผมจะมาแชร์ประสบการณ์ในการใช้งาน android studio โดยปัญหาที่พบคือ ผมไม่สามารถ กดปุ่ม OK ในหน้าของการสร้างตัว emulator ได้ เพราะอะไร ทั้งๆ ที่ผมทำการเลือกองค์ประกอบทุกอย่างครบแล้ว เป็นแบบนี้ครับ

ถ้าเป็นแบบนี้ ผู้เริ่มต้นเขียน android app มือใหม่จะปวดหัวมากครับ ทั้งๆที่ทำตามตัวอย่างแล้วแท้ๆ ทำไมยังไม่ได้ คำตอบคือ ครบ แต่ยังไม่สมบูรณ์ครับ ผมจึงขอนำเสนอ วิธีสร้างตัว AVD ใน android studio เผื่อเป็นไกด์ให้ผู้เริ่มต้นได้เข้าใจครับ
1.อันดับแรกเราต้องเปิด SDK Manager ขึ้นมาดูก่อนว่าต้องติดตั้งอะไรเพิ่มเติมบ้าง

ตอนนี้ Android SDK Tools เป็นเวอร์ชั่น 23.0.2 แล้วทำการอัพเดทและติดตั้งให้เรียบร้อย
2.สิ่งต่อมาที่เป็นหัวใจหลักของบทความนี้คือ CPU ในการทำงานของ AVD ครับ สังเกตดูว่าทำการติดตั้ง ARM EABI v7a System Image หรือยัง ถ้ายัง ให้ทำการติดตั้งก่อนจึงจะสามารถสร้าง AVD ได้นะครับ


ตอนนี้ผมยังไม่ได้ติดตั้ง ARM EABI v7a System Image สังเกตุจากสถานะด้านหลังนะครับ ยังเป็น Not installed ผมก็จะทำการติดตั้งใหม่ดังนี้

ติ๊กเลือก
ARM EABI v7a System Image แล้วกด Install package รอดาวน์โหลด และกด acept Licence เท่านี้ก็เสร็จสิ้นแล้วครับ



ทีนี้ก็จะสามารถกดปุ่ม OK เพื่อสร้าง AVD ได้แล้วครับ







วันอังคารที่ 19 สิงหาคม พ.ศ. 2557

แนะนำการพัฒนาแอพพลิเคชั่นแบบ Native และ Hybrid

     

 image from :http://blog.brightcove.com



   ก่อนอื่นต้องขอออกตัวก่อนนะครับว่า ผมไม่ใช่เจ้าของข้อมูลโดยตรงครับ พยายามหาแหล่งอ้างอิงหลายๆที่ และเอามาสรุปแบบรวบยอดให้ได้อ่านกันครับ
      Native app คือ การพัฒนาแอพพลิเคชั่นด้วย library หรือ sdk ของ platform ที่ทำงานอยู่ เช่น ios ก็ใช้ object c ในการพัฒนา android ใช้ sdk ในการพัฒนา สำหรับข้อดีของ native app คือ เป็นภาษาเฉพาะง่ายต่อการพัฒนาไม่ต้องห่วงเรื่อง service อื่นๆ ตั้งหน้าตั้งตาเขียนเพื่อใช้งาน lib ที่มีมาให้ แต่ข้อเสีย คือ เป็นแอพพลิเคชั่นที่มีความยืดหยุ่นน้อยมาก พูดตรงๆ คือ ใช้งานได้แค่ platform เดียว จะข้าม platform ไม่ได้ ทำให้ต้องเสียเวลามาแปลงรูปแบบของแอพพลิเคชั่นไปเป็น platform อื่น ด้วยภาษาที่ต่างกัน พูดง่ายๆ เสียเวลาครับ จึงมีการคิดค้นการพัฒนาแอพพลิเชั่น แบบ Hybrid ขึ้นมา
    Hybrid app เป็นการพัฒนาแอพพลิเคชั่นให้สามารถทำงานได้หลาย platform ยกตัวอย่างง่ายๆ อย่างเกมส์บางเกมส์ที่เราเห็นใน google play และ play store ซึ่งเวลาอัพเดทแพทต่างๆ ทำไมเราถึงสามารถอัพได้พร้อมๆ กันสอง platform คนพัฒนาไม่เสียเวลาในการพัฒนาระบบแบบคู่ขนานเหรอ ? คำตอบคือ เกมส์ประเภทนี้เป็นแบบ hybrid ครับ โดยการไม่ยึดติดกับระบบปฏิบัติการ ขอแค่มีตัวกลางที่เหมือนกัน ก็สามารถทำงานได้แล้ว ยกตัวอย่างตัวกลางง่ายๆ คือ flash player ครับ ทุก platform สามารถรองรับ flash player ได้ โดยทำงานบนพื้นฐานของ html 5+ java script แต่ก่อนที่จะพัฒนาแอพพลิเคชั่นแบบ hybrid ได้ คุณต้องมีพื้นฐาน native app มากพอสมควร เพราะ hybrid ถือได้ว่าเป็นเรื่องที่ค่อนข้างเข้าใจยาก และต้องเป็นขั้นสูงพอสมควร หากต้องการศึกษาจริงๆ คงไม่ใช่เรื่องยาก สำหรับ นักพัฒนาแน่นอนครับ
    แนะนำ website ในการศึกษาเรื่องมือ นะครับ http://phonegap.com เจ้าของ blog เองก้กำลังศึกษาอยู่ครับ เป็น develop ระดับกลาง เพราะงานหลักเป็น java programmer อยู่ ว่างๆ อยากได้เงินเพิ่มแถมไม่ปล่อยเวลาทิ้งไปด้วยครับ มีอะไรใหม่ อะไรดี ยังไงก็ช่วยแนะนำด้วยนะครับ นักพัฒนาไทย ยังไปได้อีกไกลครับ        
    สุดท้ายผมต้องขอขอบคุณที่เข้ามาอ่านนะครับ อะไรที่ผมสรุปผิดไป ข้อมูลไม่ถูกต้อง ติชมกันได้เลยครับ ปกติไม่ค่อยได้เขียน bloger แบบนี้เลยครับ แต่ไม่อยาก copy ข้อมูลจาก blog อื่น เพราะเข้าใจคนเขียนดี คงไม่มีใครอยากให้ข้อมูลที่ตัวเองรวบรวมมา ถูก copy ไปวางในหน้าของคนอื่นแน่นอนครับ

วันศุกร์ที่ 27 มิถุนายน พ.ศ. 2557

ยินดีต้อนรับเข้าสู่แหล่งข้อมูลเกี่ยวกับแอนดรอยด์