Published Android เกมแรกกับ Cactus Hip Hip

เนื่องจากส่วนตัวเคยเขียน Android มาสมัยแรกๆ แต่ก็ลองแต่เป็น apk แล้วเอามาลงในเครื่อง แต่แล้วผมเลยได้มีโอกาสทำเกมเล็กๆขึ้นมาแล้วลอง publish ขึ้น Google Play Store ครับ

เกมนี้ก็คือ Cactus Hip Hip เป็นเกมแนว Arcade เล่นง่ายๆแค่จิ้มๆให้ตัว Qewy โดดไปมาเก็บลูกกระบองเพชรสีเขียวให้จบและจะมีการ Upload คะแนนตอนท้าย

Screen Shot 2559-09-28 at 5.05.07 PM.png

มาพูดถึง Technologies ที่ผมใช้ดีกว่าซึ่งเกมนี้ใช้เวลาพัฒนาประมาณ 5 วันได้มั้ง (พอดีผมทำแค่วันเสาร์หรืออาทิตย์)

  • TypeScript เนื่องจากว่าได้ใช้ในงานประจำ :p
  • Phaser.IO ซึ่งเป็น Game Engine เอาไว้เขียนเกม 2D ด้วย JavaScript ที่ทำให้ชีวิตเราง่ายขึ้น เพราะช่วยจัดการระบบฟิสิกส์ การชนกันของภาพ การทำ animation รวมถึงเสียง
  • Apache Cordova ซึ่งเอาไว้ Build โปรเจคจาก HTML5/JavaScript ไปเป็น apps
  • CrossWalk ซึ่งเป็น WebEngine เนื่องจากผมเจอว่า เวลา App ที่เขียนด้วย Phaser นั้นรันบน Android ด้วย Webview ที่ติดมากับ OS นั้นมันช้ามาก ซึ่ง CrossWalk นั้นจะเป็นโปรเจคที่ทำให้เรา ship ตัว Webview ตัวล่าสุดไปกับ App (และทำให้ App ใหญ่ขึ้น 20MB  😦 )
  • LoopBack เอาไว้เขียน REST เพื่อเก็บ Score
  • Azure DocumentDB ซึ่งเป็น Service ของ Microsoft Azure ในการใช้ NoSQL  ซึ่งจริงๆแล้วก็คือ MongoDB
  • และอื่นๆ เช่น
    • ใช้ Cordova  กับ iOS
    • Bitbugget ใช้เก็บ private git repository

จะเห็นว่าแค่เกมเล็กๆ Developer อย่างเราก็ต้องรู้จัก Tech หลายหลายมาก..

และที่สำคัญได้ลอง publish App ขึ้น Store  ซึ่งทำให้รู้ว่าหลังจากจ่ายตังค์ขอ Dev License แล้วใช้เวลา 1-2 ชม ก็สามารถเอา App ขึ้นได้ละ  (และจะเห็นว่า URL ของ app ผมยังเป็น codova อยู่เลยและมันก็แก้ไม่ได้ ฮาาา…)

Linkhttps://play.google.com/store/apps/details?id=io.cordova.myappee96f2

Advertisements

เข้าสู่ C++ ยุคใหม่กับ Module System สำหรับ C++ 17/20

ไม่ยอมน้อยหน้าภาษา Modern เพราะหนึ่งใน Feature ที่มีการพูดถึงกันมากของมาตรฐานใหม่ของ C++ 17 ก็คือเรื่อง Module System (Link) ซึ่งเป็นแนวคิดทำให้ Library เป็น Module แบบจริงจัง โดยที่ทางกลุ่ม C++ Working Group ได้นำเสนอมานานแล้ว และมีแผนที่จะเอาเข้ามาเป็นส่วนหนึ่งของ C++ 17 แต่เหมือนว่าไม่น่าจะทัน C++ 17 แล้วครับ สรุปแล้วตอนนี้ Feature นี้อยู่ในขั้น Technical Specification ซึ่งน่าจะออกจริงใน C++ 20 (เลขข้างหลังเป็นเลขที่ เช่น 2017 หรือ 2020)

เป้าหมายของ Module System คือทำให้ C++ นั้นทำการ Compile ได้เร็วขึ้นและทำให้ Code นั้นมีการจัดการระดับ Component ได้ง่ายขึ้น เพราะปัจจุบัน #include นั้นใช้งานปนไปหมดทั้ง Headers, Inlines รวมทั้งบางทีมี Implemenation กันเลยทีเดียว

Microsoft นั้นได้ออก Preview สำหรับการทดลอง Module ใน Visual Studio 2015 Update 1+ มาลองดูกันเลยดีกว่า

ก่อนอื่นเลยครับ เนื่องจากว่า Visual Studio ในส่วนของ IDE นั้นยังไม่ Support ดังนั้นเราจะต้องทำการ Compile กับ Build ผ่าน Command Line นะครับ

สร้าง Module

ในการสร้าง Module นั้นให้เราสร้างไฟล์ใหม่มา ซึ่งโดยทั่วไปจะนิยมใช้ไฟล์ .ixx (ผมเดาว่ามาจาก Interface++)
เรามาสร้าง Module เอาไว้ Convert ค่าง่ายๆกัน

ไฟล์ converter.ixx

module converter;
export int CtoB(int x)
{
    return x + 543;
}

จาก code นี้จะเป็นการประกาศ Module ชื่อ converter ซึ่งมี function ‘CtoB’ ที่ทำการแปลง ค.ศ. ไป เป็น พ.ศ. ที่จะ export ออกไปให้ Code อื่นใช้

จากนั้นเราต้อง compile ด้วย commandline แบบนี้

cl /c /experimental:module converter.ixx

สิ่งที่ได้ก็คือไฟล์ converter.ifc กับ converter.obj

converter.png

เรียกใช้ Module

ที่นี้มาในส่วนของ Code หลักที่มี main entry point กันครับ ผมตั้งชื่อไฟล์ว่า main.cpp

ไฟล์ main.cpp

#include <iostream>
import converter;
int main()
{
 int year;
 std::cout << "Enter Year : ";
 std::cin >> year; 

 int bc = CtoB(year);
 std::cout << "Thai year is " << bc << std::endl;
 return 0;
}

Code ในส่วนนี้มีการเรียกใช้ Module ชื่อ ‘converter’ ด้วย keyword ที่ชื่อ import จากนั้นก็จะเรียกใช้ function ที่ชื่อ CtoB() ได้ทันทีเลยครับ

แน่นอนว่าเราต้อง compile ด้วย command line เช่นเคยโดยต้องระบุ converter.ifc เป็น parameter ของ module ที่จะเรียกใช้

cl /c /experimental:module /module:reference converter.ifc main.cpp

เมื่อรันเสร็จก็จะได้ main.obj มาครับ

main.png

ที่นี้จะเป็นว่าไม่มี .exe ให้เรา….สิ่งที่ต้องทำคือการสร้าง .exe ด้วย

link *.obj /OUT:main.exe

link.png

ทดสอบ

ลองรัน main.exe ที่ได้มาครับ ทำงานถูกต้องนะ 🙂

out.png

ลองด้วย Class

จากตัวอย่างข้างบนนั้นเป็นการสร้าง Module ด้วยการ export แค่ function แต่ถ้าเราอยากที่จะ  export Class ล่ะ เราก็ทำได้ครับ เช่น สร้าง Class  converter โดยมี method 2 ตัวให้เรียกใช้

module converter;
export namespace converterUtil
{
 class converter
 {
 public:
 int CtoB(int year)
 {
 return year + 543;
 }

 int CelsiusToFahrenheit(int c)
 {
 return (c * 1.8) + 32;
 }
 };
}

มาดูที่ main.cpp เราก็ทำการ import มาใช้และสร้าง Object ได้เลย เช่นใน ‘convt’ ตาม Code ด้านล่างนี้

#include <iostream>
import converter;
int main()
{
 converterUtil::converter convt;

 int year;
 std::cout << "Enter Year : ";
 std::cin >> year; 

 std::cout << "Thai year is " << convt.CtoB(year) << std::endl;

 int cel;
 std::cout << "Enter Temp in Celsius : ";
 std::cin >> cel; 
 std::cout << "Temp in Fahrenheit is " << convt.CelsiusToFahrenheit(cel) << std::endl;

 return 0;
}

ผลที่ได้ก็ Work ดีครับ!!

outex.png

สรุปแล้ว C++ Module น่าจะช่วยให้ C++ Developer ออกแบบและทำงานกับ Code ได้เป็นระเบียบเรียบร้อยขึ้น

และอีกอย่างคือจริงๆเท่าที่ผมลองในการสร้าง Module ถ้ามันมีใช้ header ตัวอื่นผมก็ยังทำให้มันเวิร์คไม่ได้นะ จึงต้องยกตัวอย่างแบบง่ายๆแบบนี้ครับ ซึ่งหวังว่าตัวจริงออกมาคงไม่วุ่นวายมากนะ

ณ. ตอนนี้เราก็มาเฝ้ารอ C++ 20 กันเลยกัย Module System!!

ปล. ดู Code ได้ที่ https://github.com/anurocha/cpp_module เลยครับผมอัพไว้ละ

Node.js – LoopBack กับการต่อ Database

ความเดิมตอนแรกสุดเลยนั้น ผมใช้ datasources เป็น memory เพราะว่าใช้ในการ Development ที่นี้เนื่องจากว่าผมอยากใช้ database เป็น NoSQL ผมก็เลยลองหาวิธีการดู ซึ่งก็ไม่ผิดหวังครับ LoopBack นั้นจัดการให้เราได้อย่างง่ายๆเช่นเคย

บทความก่อนหน้าเพื่อความเข้าใจพื้นฐานมากขึ้น

Node.js เขียน REST API ด้วย LoopBack
Node.js – LoopBack มาต่อกันที่การเพิ่ม REST API กับ Query กัน

ที่นี้เปิดดูไฟล์ datasources.json กันก่อนครับ จะเห็นว่าเป็นการ define ว่าใช้ memory

{
  "db": {
    "name": "db",
    "connector": "memory"
  }
}

แก้ datasources.json
ผมก็แค่เปลี่ยน configuration ในนี้ให้เป็น  ‘mongodb’ ซึ่งผมทดสอบกับ Azure DocumentDB service นะครับ ไม่ได้ตั้ง mongoDB เอง

nosql.png

ที่นี้เราลองมารัน LoopBack กันอีกรอบนึงครับ ปรากฎว่ารันไม่ผ่าน เพราะ LoopBack ไม่รู้จัก configuration นี้

no-connector.png

ติดตั้ง Connector
สิ่งที่เราต้องทำคือการ install mongodb connector ครับ ด้วย npm command ข้างบน

npm install loopback-connector-mongodb

เมื่อ install เสร็จก็จะสามารถรันได้แล้วครับ เช่นเดิมคือ port เบอร์ 3000

has-connector.png

ทดสอบ
ที่นี้เราลอง POST เพื่อใส่ข้อมูลกัน ผม POST  – anurocha กับ destiny ไปครับ

post-db.png

ที่นี้ลอง Query ดูใน Azure Dashboard ก็จะเห็นว่าลองใช้ Query Explore บน Azure ดูก็ได้ค่าที่ POST ไปจาก localhost ที่เราต่อกับ mongoDB บน Azure ถูกต้อง

azure-db.png

จะเห็นได้ว่า LoopBack นั้นช่วยให้เรา Connect ไปที่ Database ได้โดยที่ผมยังไม่ได้เขียน Code หรือ SQL เลยโดยที่ datasource ที่ LoopBack นั้นมี Connector ก็ดูได้ตามนี้ครับ (Database connectors) ซึ่งคร่าวๆก็มีครบหมดครับสำหรับตัวยอดนิยม MongoDB, MySQL, Oracle, PostgreSQL, Redis, SQL Server, SQL Lite และอื่นๆ

เป็นไงครับ POWER FUL มากๆ…

Node.js – LoopBack มาต่อกันที่การเพิ่ม REST API กับ Query กัน

หลังจากที่ผมพูดถึงความสามารถเบื้องต้นของ LoopBack ไปแล้วนั้นใน Node.js เขียน REST API ด้วย LoopBack ซึ่งจะเห็นได้ว่าเราสามารถสร้าง REST API ได้ง่ายมาก แต่ทีนี้ถ้าเราต้องการที่เพิ่ม API ล่ะจะทำได้ยังไง

เรากลับมาดูที่ไฟล์ user.js กันก่อนครับ ซึ่งเป็นไฟล์ว่างๆ

'use strict';

module.exports = function(User) {

};

สิ่งที่ผมอยากจะได้ก็คือถ้าเราต้องการ API เพื่อที่จะเอาค่าของ User 4 คนที่ได้คะแนนสูงสุดจะต้องทำยังไงบ้าง
สิ่งที่เราต้องทำคือการเพิ่ม remoteMethod (ซึ่งทาง LoopBack Framework จะทำการ Route มาเข้า Method ของเราครับ

'use strict';

module.exports = function(User) {
User.getTopUsers = function(cb){
cb(null, "getTopUsers Response");
};

User.remoteMethod (
'getTopUsers',
{
http: {path: '/gettopusers', verb: 'get'},
returns: {arg: 'users', type: 'string'}
}
);
};

จะเห็นว่า Code User.remoteMethod นั้นทำการ define ว่าถ้ามี HTTP Request ที่เป็น GET เข้ามาที่ Path /gettopusers นั้นจะทำการเรียก Method User.getTopUsers นั่นเอง

และใน Method ที่ชื่อ User.getTopUsers นั้นตอนนี้ผมลองให้ส่งค่ากลับไปว่า getTopUsers Response ที่นี้ลองรันดู LoopBack เพื่อเป็น Server ดูครับ

ลองเช็คกับ API Explorer ก็จะเห็นว่า API ที่เราเพิ่งเพิ่มเข้าไปมาแล้ว

new-api.png

เนื่องจากเป็น GET ผมลองเรียกผ่าน Browser ครับก็ได้ Response มาแบบนี้ ตามที่เขียนไว้

new-api-response.png

ที่นี้จาก API ที่ผมต้องการนั้น ผมอยากได้ User ที่คะแนนสูงสุด ซึ่งทาง LoopBack นั้นก็มี Build-in API ให้เราใช้ในการ Query ข้อมูลจาก Model ได้ครับ (Querying data) เช่น

'use strict';

module.exports = function(User) {
User.getTopUsers = function(cb){
User.find({
order: 'score DESC',
limit : 4
}, (err, instances)=&gt;{
cb(null, instances);
});
};

User.remoteMethod (
'getTopUsers',
{
http: {path: '/gettopusers', verb: 'get'},
returns: {arg: 'users', type: 'string'}
}
);
};

ซึ่งจาก Code ข้างบนนี้จะเป็นการใช้ User.find ซึ่งเป็นการ Query หา Model โดยมี Filter ว่า หา ‘score’ ที่มีค่าสูงสุด 4 entries แรก

ที่นี้ลองทดสอบกันอีกทีครับ

ผมลองใส่ ข้อมูลไปแบบนี้ตาม Order

[
{
“name”: “alpha”,
“score”: 70,
“id”: 1
},
{
“name”: “beta”,
“score”: 45,
“id”: 2
},
{
“name”: “catto”,
“score”: 39,
“id”: 3
},
{
“name”: “delta”,
“score”: 86,
“id”: 4
},
{
“name”: “sigma”,
“score”: 34,
“id”: 5
},
{
“name”: “fanta”,
“score”: 12,
“id”: 6
}
]

ทีนี้ลองเรียกผ่าน API /gettopusers ดูครับ

result.png

เราก็จะได้ Response ที่ทำการ Order มาแล้วตาม score โดยที่ delta(80), alpha(70), beta(45), catto(39) ตามลำดับที่เราได้ทำ Query ไว้อย่างง่ายดาย

มาถึงตรงนี้เราก็จะได้เห็นความ Powerful ของ LoopBack ไปอีกหนึ่งเรื่องนะครับ 🙂

powered-by-lb-med

Node.js เขียน REST API ด้วย LoopBack

powered-by-LB-med.png

เนื่องจากผมอยากลองเขียน REST ง่ายๆเอาไว้ลองกับงาน Side Project ดูครับ ส่วนตัวแล้วเคยจับ Express มาบ้างแบบน้อยนิด ซึ่งปกติก็ต้องมานั่งเขียน Route กันเองแล้วมาเช็ค Path เลยหา Framework อื่นดู ก็เจอว่ามีทั้ง Sails, Restify และอื่นๆ แต่ลองนึกดูเคยมีคนพูดถึง LoopBack ให้ผมฟัง ผมเลยลองมาใช้ตัวนี้ดีกว่า เพราะเห็นว่า IBM เป็นผู้สนับสนุนรายใหญ่ซึ่งจริงๆแล้วพัฒนาโดย StrongLoop

ก่อนอื่นเข้าไป official site https://loopback.io/ ก่อนเลย ก็เจอว่า Get Started ไม่มี Code ตัวอย่างเลยครับ งั้นมันทำงานยังไงกันนี่ เรามาลองดูกัน

ก่อนอื่นเท่าที่ผมเข้าใจ LoopBack เนี่ยจะใช้แนวคิดเรื่อง Model มากกว่าการ Route ซึ่งหมายความว่าการที่เราจะเพิ่ม API เข้าไป ก็จะเป็นการทำงานเกี่ยวข้องกับ Model (เหมือนกับการเขียน function handler ของ Model) เพราะหน้าที่การ Route นั้น LoopBack จัดการให้เราหมดแล้ว ผ่าน Express นั่นแหละ….

เริ่มแรกเราต้อง Install ตัว LoopBack ก่อนครับ (เป็น commandline interface – CLI)

$ npm install -g strongloop

หลักจากนั้นเราจะต้องทำการสร้าง Project จาก Template ครับด้วย

$ slc loopback

จากนั้นเราจะต้องทำการตั้งชื่อ Project เลือก Directory รวมถึงเลือก LoopBack version

create-proj.png
ผมตั้งชื่อว่า loopback-aro

สิ่งที่ได้คือ Folders และ ไฟล์ต่างๆหน้าตาแบบนี้โดยผมสร้าง Project แบบ api-server ฉะนั้นส่วนที่จะต้องแก้น่าจะทำใน Folder ชื่อ server

folder-struct.png

หลังจากนั้นเราก็ลองทำการสร้าง Model กันครับ เพราะอย่างที่ผมบอกไปข้างต้นว่า loopback นั้นใช้ Model driven ในการพัฒนา REST API

 

$ slc loopback:model

ผมจะสร้าง Model ง่ายๆใช้สำหรับเก็บข้อมูล user ละกันครับ ตัว CLI มันก็จะให้เราตอบไปว่าจะใช้ Feature อะไรของ LoopBack บ้าง เช่น

  • จะใช้ data-source แบบไหน (ค่าปกติคือ memory ซึ่งใช้สำหรับการ Dev เพราะไม่งั้นเราปิด server แล้วค่าจะถูกลบทิ้งครับ เพราะ memory ถูกคืนให้ OS)
  • ใช้ PersistedModel เพื่อทำใช้สามารถเก็บ Model เข้า database ได้ง่าย
  • ทำการเปิด REST API สำหรับ Model ตัวนี้
  • และ อื่นๆ

create-model.png

ที่นี้ผมก็จะสร้าง properties หรือ attibutes ของ user ครับ โดยที่มี

  • name เป็น string
  • score เป็น number

create-prop.png

เมื่อสร้างเสร็จแล้วเราก็จะเห็น Folder ชื่อ common ถูกสร้างขึ้นมารวมทั้งมี Subfolder ชื่อ Model ที่มีไฟล์ user.js/json ซึ่งตรงกับที่เราสร้างข้างต้น

common-folder.png

เราจะเห็นว่า

  • user.js คือ code javascript เปล่าๆ (ที่เอาไว้ให้เราเขียน logic สำหรับ expose REST API เพิ่ม)
  • user.json นั้นจะเป็นการประกาศพวก Properties ต่างๆ (หมายความว่าเราไม่ต้องใช้ CLI ในการสร้าง Model ก็ได้ถ้าเรารู้จักโครงสร้างของ Framework)

model-files.png

ที่นี้เราลองมารันดูครับ

node .

run.png

ลองเข้าผ่าน localhost:3000/explorer ดูก็จะพบว่ามี API Tool (หน้าตาเหมือน Swagger ให้เลยครับ)

explorer

เรามาลอง POST เพื่อสร้าง Model object ดีกว่า

anurocha-80.png

จะเห็นว่าหลังจากกดปุ่ม Try it out! ก็จะทำการยิง http request ไปที่ /api/user และได้รับ message ตอบรับว่า 200 และได้รับ id:1 เป็นค่า key

anurocha-res.png

ดังนั้นถ้าผมลอง GET ด้วย id :1 เราควรจะได้ object นี้กลับมากนะครับ ลองผ่าน Postman (ซึ่งเป็น Tool ที่ใช้ได้การส่ง HTTP request) กันดีกว่า

ได้ response ตามคาด!

get-postman.png

จะเห็นว่าการสร้าง REST API แบบง่ายๆด้วย LoopBack นี่ไม่ต้องเขียน Code เลยซักบรรทัด

แต่ความสามารถของ LoopBack ยังมีอีกเยอะ เช่นการ Extend API ให้ซับซ้อนยิ่งขึ้น การติดต่อกับ Data-source แบบอื่นๆเช่น MySQL หรือ MongoDB เจอกันคราวหน้าครับ 🙂
Notes:

เพิ่ม API อ่านต่อได้เลย

ตัวเลขมหัศจรรย์ Magic Number

สิ่งหนึ่งที่ผมเชื่อว่า Developer ทุกคนเคยทำก็คือการเขียน “ตัวเลขมหัศจรรย์” ลงไปใน Source Code แล้วมันคืออะไรล่ะ

Magic Number ก็คือตัวเลขที่อยู่ใน Code แบบโผล่มาแบบงงๆลอยๆ โดยที่ไม่มีใครรู้ที่มาเลย (นอกจากคนเขียน ซึ่งผ่านไป 3 เดือนก็ลืม 55)

ยกตัวอย่าง Magic Number กันแบบง่ายๆก่อน

            for (int i = 0; > 50; ++i)
            {
                Console.WriteLine("Hello");
            }

ในกรณีนี้ Magic Number คือ “50” เพราะอยู่ดีๆมันก็โผล่มา ถ้าคนมาทีหลังอาจจะงงว่า 50 คือเลขอะไร ตั้งใจเขียนมารึเปล่า

วิธีแก้ปัญหาอย่างง่ายที่สุดคือเราเปลี่ยนมาใช้ตัวแปร const แทนครับ (สำหรับ C++/C#)

            const int LOOPTIME = 50;
            for (int i = 0; i > LOOPTIME; ++i)
            {
                Console.WriteLine("Hello");
            }

ซึ่งจะทำให้ Code เรานั้นรู้ว่าเราต้องการ Loop 50 รอบจริงๆนะ ไม่ใช่พิมพ์ผิดอะไร

ตัวอย่างที่ 2

ผมมี Method/Function นึงทำอะไรบางอย่างแบบนี้

       static public double CalPrice(int price)
        {
            return price + (price * 0.07);
        }

แน่นอนครับ Magic Number ก็คือ 0.07 ที่ Code ผ่านไป 3 เดือน เราก็จะงงว่าทำไมมันต้อง 0.07 ด้วย นี่มัน Method เอาไว้ทำอะไร

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

        private const double VAT_RATE = 0.07;
        static public double CalPrice(int price)
        {
            return price + (price * VAT_RATE);
        }

โอ้ว นี่คือ การบวก Vat 7% นี่เอง!!!

เอาล่ะที่นี้เรารู้จัก Magic Number กันแล้ว มาลองสรุปกันดีกว่า

ข้อดี :

  • เขียนง่าย
  • เร็ว
  • อ่านแล้วจบ
  • ดูแล้วเหมือนจะสบายตา (ช่วงที่เพิ่งเขียนเสร็จ)

ข้อเสีย :

  • คนอื่นมาอ่าน Code อาจจะงง
  • แถมหนักกว่าอีกเพราะคนเขียนเองก็งงถ้าผ่านไปซักระยะ
  • Code อาจจะ Maintain ยากขึ้นเพราะมี Magic Number ทำให้คนที่ไม่รู้ ก็จะไม่กล้าแตะ และต้องมานั่งไล่ Logic ถ้าต้องการแก้

มาถึงตรงนี้ลองกลับไปดู Code ที่เป็น Production ของเรากันสิว่า คุณเป็นนักมายากล Magic Number กัน(มาก)รึเปล่า

piq_52779_400x400
I love Magic (but sorry not Magic Number!!) 

Note* Picture from Final Fantasy

 

เส้นทางสู่ Developer ระดับโลก (มั้ง)

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

และในฐานะที่เป็น Developer ผมขอกล่าวถึงเฉพาะมุมมองของ Devloper ดังนั้นตัดส่วน Business ทิ้งไปเลย

1. อยู่กับ Techonology ที่ Project ใช้อย่าง Expert

เป็น Developer ที่อาจจะเก่งหรือทำงานได้ในระดับหนึ่งของ Project ที่ตัวเองนั้นทำอยู่ อย่างน้อยควรจะต้องรู้ว่า Technology ที่ตัวเองใช้อยู่มี Best Practices อะไร รวมถึงรู้ว่ามี Trap อะไร อาจจะได้มีโอกาสศึกษาอะไรใหม่ๆบ้างถ้าทาง Project นั้นต้องการใช้

กลุ่มนี้ คุณๆอาจจะใช้ Technology ล่าสุดในวันนี้เพราะทีมหรือ Project ใช้อยู่ แต่จริงๆไม่ควรรอทีมนะ ไม่งั้นผ่านไป 2-3 ปีแล้วยังอยู่แต่กับ Technology นี้ก็จะ Outdate ได้ง่ายๆ

2. ติดตามข่าวสาร IT หรือ Tech อย่างสม่ำเสมอ

เป็น Developer ที่รู้ว่าแต่ละ Products หรือว่า Tools หรือ Frameworks มีอะไรออกใหม่บ้างทำให้มี Idea ในการที่จะพัฒนา Project ที่ตัวเองทำอยู่เพราะได้รับ Input ใหม่ๆ

กลุ่มนี้อาจจะต้องระวังกับดักที่ว่าเราดันสนใจแต่ข่าว Consumer เช่น Apple ออก Product อะไรใหม่, Android ออกรุ่นใหม่ หรือ Program/App นู่นนี่มี Update อะไรบ้างเพราะปัจจุบันนี้ข่าวพวกนี้ใครๆเค้าก็รู้กันแล้วครับ

ผมมองว่าระดับนี้ต้องติดตามข่าวสำหรับ Software Development นะครับ

3. ลองใช้ Tech ต่างๆที่ใหม่ๆที่ตัวเองสนใจ

เป็น Developer ที่นอกจากจะติดตามข่าวสารต่างๆแล้ว ยังใช้เวลาทำการลงมือศึกษาเองด้วย อาจจะเป็นลักษณะเอามาทำ Prototype ของ Project ที่ตัวเองทำอยู่ หรือเป็น Side Project แบบทำเล่นๆ (หรือทำขายจริงจัง) ผมว่าอยากให้ทุกๆคนอย่างน้อยๆมาอยู่จุดๆนี้กันครับ

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

4. Contribute ให้กับ Community ต่างๆ

เป็น Developer ที่สามารถเข้าไปมีบทบาทในชุมชนต่างๆ เช่นงาน Event หรือการมีส่วนร่วมในการพัฒนา Open Source ผมเห็นปัจจุบันมีเยอะมากๆ น่าดีใจจริง คนไทยเทพพพพพ

ผมอยากเห็น Developer ไทยมาถึงจุดๆนี้กันเยอะๆ (รวมถึงตัวผมเองด้วย)

5. สร้าง Community ใหม่ๆเอง!

เป็น Developer ที่เป็นคนคิด Community ต่างๆได้โดยเฉพาะ Framework ที่ให้คนอื่นมาช่วย Contribute และได้รับการยอมรับจาก Community

กลุ่มนี้ผมไม่สามารถ Comment ได้ครับเพราะยังไม่ถึงขั้น (5555) แต่ผมว่านี่แหละ Developer ระดับโลก!!!!!

 

ป.ล. บทความนี้เป็นความเห็นส่วนตัวล้วนๆและเอาไว้เตือนใจตัวเองครับ 🙂