SPI@ease II คือ โครงการสนับสนุนผู้ประกอบธุรกิจซอฟต์แวร์ในการปรับปรุงกระบวนการพัฒนา ซอฟต์แวร์ รุ่นที่ 2 หรือ SPI@ease Phase II ให้การสนับสนุนบริษัทซอฟต์แวร์ไทยในการเตรียมความพร้อมและประเมินมาตรฐาน CMMI®
โดย phase I ที่ผ่านมาได้สนับสนุนให้บริษัทคนไทย 25 บริษัท ได้รับมาตรฐาน CMMI ไป 23 บริษัท (ข้อมูล ณ วันที่ 27 พฤษภาคม 2553) มีบริษัทที่ผ่านการประเมิน CMMI® รวมแล้วทั้งสิ้น 34 บริษัท โดยแบ่งเป็น CMMI® Level 2 จำนวน 10 บริษัท CMMI® Level 3 จำนวน 22 บริษัท และ CMMI® Level 5 จำนวน 2 บริษัท ซึ่งเป็นบริษัทซอฟต์แวร์ที่อยู่ในโครงการ SPI@ease จำนวน 23 บริษัท หรือ 68 % เลยทีเดียวซึ่งส่งผลให้มีจำนวนบริษัทซอฟต์แวร์ไทยที่ได้ผ่านการรับรอง มาตรฐาน CMMI® เพิ่มขึ้นถึง 4 เท่า ในระยะเวลาเพียง 2 ปีด้วยเหตุนี้จึงทำให้เรากำลังเป็นที่จับตามมองในวงการซอฟต์แวร์โลกจากการ ประกาศผลอย่างเป็นทางการล่าสุดจาก Software Engineering Institute (SEI) เมื่อเดือนกันยายน 2552 ที่ผ่านมา ขณะนี้ประเทศไทยมีบริษัทที่ผ่านการประเมิน CMMI® จัดเป็นอันดับ 2 ในย่านเอเชียตะวันออกเฉียงใต้ รองจากมาเลเซีย ซึ่งมีทั้งสิ้น 71 บริษัท
โครงการจะให้เงินสนับสนุน 70% ของค่าใช้จ่ายในการอบรม การให้คำปรึกษา และการประเมินที่เกิดขึ้นจริง แต่ไม่เกินวงเงินที่กำหนดในการจ้างผู้เชี่ยวชาญภายนอก โดยให้เงินสนับสนุนต่อหนึ่งบริษัทซอฟต์แวร์ที่เข้าร่วมโครงการ
VB.NET Programming
VB.NET, C#, MCTS, ASP.NET, ASP.NET AJAX, 70-536, .NET Framework, Software Engineering
วันพุธที่ ๑๔ กรกฎาคม พ.ศ. ๒๕๕๓
วันศุกร์ที่ ๙ กรกฎาคม พ.ศ. ๒๕๕๓
ฟรี : งานสัมมนา 2010 New Technology Exclusive Seminar: The Next Wave of Business Productivity

ช่วยประชาสัมพันธ์งานสัมมนาของไมโครซอฟท์ ซึ่งผมมองว่าเป็นการโปรโมทการนำเครื่องไม้เครื่องมือทั้ง 4 ตัวมาทำงานร่วมกัน เพื่อช่วยในการทำ BI (Business Intelligence) ได้แก่ SQL Server 2008 R2, MS Office 2010, SharePoint 2010 และ Visual Studio 2010 ครับ
สถานที่
สำนักงานไมโครซอฟท์ ประเทศไทย
อาคาร CRC ชั้น 38 ออลซีซั่น ถ.วิทยุ เพลินจิต
วันพุธที่ 14 กรกฎาคม 2553
เวลา 8.30 - 17.00 น.
ช่วงเช้าเป็นการกล่าวภาพรวม ตอนบ่ายแยกเป็น 3 ห้อง ตามความสนใจของผู้ฟังครับ เช่น ระดับ user ก็อาจจะเข้าห้องที่ 1 ระดับ developer ก็อาจจะเข้าห้องที่ 3
รายละเอียดข้างล่าง
วันพุธที่ ๑๒ พฤษภาคม พ.ศ. ๒๕๕๓
ขนาดของ .NET Framework เวอร์ชั่น 4 น่าประทับใจมาก

ตารางเปรียบเทียบขนาดไฟล์ติดตั้งของ .NET Framework รุ่นต่างๆ
| เวอร์ชั่น | ขนาดไฟล์ติดตั้ง |
|---|---|
| 1.1 | 23 MB |
| 2.0 | 68 MB (x86 – 22.4 MB, x64 – 45.2 MB) |
| 3.0 | 140 MB (x86 – 50 MB, x64 – 90 MB) |
| 3.5 | 200 MB |
| 3.5 sp1 | 231.5 MB |
| 4.0 | 48.1 |
แหล่งข้อมูลเพิ่มเติม :
Microsoft .NET Framework Version 1.1 Redistributable Package (support both x86 and x64)
Microsoft .NET Framework Version 2.0 Redistributable Package (x86)
Microsoft .NET Framework Version 2.0 Redistributable Package (x64)
Microsoft .NET Framework 3.0 Redistributable Package (separate x86 and x64 - full package include)
Microsoft .NET Framework 3.5 (support both x86 and x64 - full package include)
Microsoft .NET Framework 4 (support both x86 and x64 - Standalone Installer)
วันอังคารที่ ๑๘ สิงหาคม พ.ศ. ๒๕๕๒
เพิ่มความสามารถให้ System.DateTime (DateTime Extensions)
Share this article on your facebook
จากบทความก่อนๆ ที่ผมเคยเขียนเกี่ยวกับ ฟังก์ชั่นหาวันแรกและวันสุดท้ายของเดือน (Get first and last day of month) ซึ่งเป็น Function ที่สร้างขึ้นไว้ใช้งานเอง แต่วันนี้ผมเจอเว็บของคุณ Fredrik Kalseth ผู้ที่ขยายความสามารถให้ System.DateTime ให้มีฟังก์ชันเหล่านั้นไว้ รวมทั้งอีกหลายๆ ฟังก์ชันที่เราใช้บ่อยๆ มาลองดูตัวอย่างกันครับ (ตัวอย่างข้างล่างทั้งหมด return เป็น DateTime object นะครับ มือใหม่บางคนอาจเข้าใจผิดว่าจะreturn เป็นอักษรวันที่ ซึ่งถ้าอยากได้แบบนั้นจริงๆ ก็ค่อยแปลง DateTime เป็น String อีกทีครับ)
'หาวันแรกของเดือนนี้
Now.First()
'หาวันจันทร์แรกของเดือนนี้
Now.First(DayOfWeek.Monday)
'หาวันสุดท้ายของเดือนนี้
Now.Last()
'หาวันศุกร์สุดท้ายของเดือนนี้
Now.Last(DayOfWeek.Friday)
'หาวันจันทร์ถัดไปจากวันนี้
Now.Next(DayOfWeek.Monday)
'กำหนดค่าเป็น วันนี้เวลา 17.30 น.
Now.SetTime(17, 30)
'ฟังก์ชัน SetTime มี overload 4 ตัว ให้กำหนดค่าตั้งแต่ชั่วโมงจนถึงมิลลิวินาที
SetTime(hour)
SetTime(hour, minute)
SetTime(hour, minute, second)
SetTime(hour, minute, second, millisecond)
หลังเห็นแล้วว่าน่าใช้ ขั้นต่อไปก็ไปโหลด assembly ที่ชื่อ DateTimeExtensions.dll จาก http://www.codeplex.com/DateTimeExtensions ขนาดเพียง 5 kB
เสร็จก็ add reference เข้ามาในโปรเจ็คของเรา ก็เป็นอันใช้งานได้
ช่วยลดโค้ดลงได้นิดหน่อย แบบนี้ถ้ามีคนใช้เยอะๆ ก็อยากให้ไมโครซอฟต์บรรจุฟังก์ชันเหล่านี้ลงไปใน DateTime มาตรฐานเลย..
แหล่งข้อมูลเพิ่มเติม :
DateTimeExtensions (www.CodePlex.com)
A Set of Useful Extension Methods for DateTime (Fredrik Kalseth Blog)
จากบทความก่อนๆ ที่ผมเคยเขียนเกี่ยวกับ ฟังก์ชั่นหาวันแรกและวันสุดท้ายของเดือน (Get first and last day of month) ซึ่งเป็น Function ที่สร้างขึ้นไว้ใช้งานเอง แต่วันนี้ผมเจอเว็บของคุณ Fredrik Kalseth ผู้ที่ขยายความสามารถให้ System.DateTime ให้มีฟังก์ชันเหล่านั้นไว้ รวมทั้งอีกหลายๆ ฟังก์ชันที่เราใช้บ่อยๆ มาลองดูตัวอย่างกันครับ (ตัวอย่างข้างล่างทั้งหมด return เป็น DateTime object นะครับ มือใหม่บางคนอาจเข้าใจผิดว่าจะreturn เป็นอักษรวันที่ ซึ่งถ้าอยากได้แบบนั้นจริงๆ ก็ค่อยแปลง DateTime เป็น String อีกทีครับ)
'หาวันแรกของเดือนนี้
Now.First()
'หาวันจันทร์แรกของเดือนนี้
Now.First(DayOfWeek.Monday)
'หาวันสุดท้ายของเดือนนี้
Now.Last()
'หาวันศุกร์สุดท้ายของเดือนนี้
Now.Last(DayOfWeek.Friday)
'หาวันจันทร์ถัดไปจากวันนี้
Now.Next(DayOfWeek.Monday)
'กำหนดค่าเป็น วันนี้เวลา 17.30 น.
Now.SetTime(17, 30)
'ฟังก์ชัน SetTime มี overload 4 ตัว ให้กำหนดค่าตั้งแต่ชั่วโมงจนถึงมิลลิวินาที
SetTime(hour)
SetTime(hour, minute)
SetTime(hour, minute, second)
SetTime(hour, minute, second, millisecond)
หลังเห็นแล้วว่าน่าใช้ ขั้นต่อไปก็ไปโหลด assembly ที่ชื่อ DateTimeExtensions.dll จาก http://www.codeplex.com/DateTimeExtensions ขนาดเพียง 5 kB
เสร็จก็ add reference เข้ามาในโปรเจ็คของเรา ก็เป็นอันใช้งานได้
ช่วยลดโค้ดลงได้นิดหน่อย แบบนี้ถ้ามีคนใช้เยอะๆ ก็อยากให้ไมโครซอฟต์บรรจุฟังก์ชันเหล่านี้ลงไปใน DateTime มาตรฐานเลย..
แหล่งข้อมูลเพิ่มเติม :
DateTimeExtensions (www.CodePlex.com)
A Set of Useful Extension Methods for DateTime (Fredrik Kalseth Blog)
วันจันทร์ที่ ๑๑ พฤษภาคม พ.ศ. ๒๕๕๒
ส่งอีเมล์บน .NET 2.0 (Sending e-mail with .NET 2.0)
เรื่องการเขียนโปรแกรมส่ง e-mail ก็เป็นงานที่ต้องเจอบ่อยๆ ครับ พอดีมีคนถามเข้ามาเลยจะพยายามรวบรวมวิธีการส่งอีเมล์แบบต่างๆ มาให้ดูครับ เดิมทีใน .NET เวอร์ชั่น 1.0/1.1 กลุ่มคลาสที่เกี่ยวกับอีเมล์จะอยู่ในเนมสเปส System.Web.Mail ซึ่งไมโครซอฟท์คงพิจารณาแล้วว่า ไม่เหมาะสมแน่ถ้าให้คลาสเกี่ยวกับอีเมล์อยู่ใน System.Web เพราะมีความหมายเป็นนัยว่างานด้านอีเมล์เกี่ยวกับงานเว็บเท่านั้น ทำให้เวลาพัฒนา win app., console ฯลฯ ต้อง add reference มาเสมอ ดังนั้นใน .NET เวอร์ชั่น 2.0 ทางไมโครซอฟท์จึงเปลี่ยนให้คลาสเกี่ยวกับอีเมล์ทั้งหมดไปอยู่ในเนมสเปส System.Net เป็นการบอกว่า งานด้านอีเมล์เป็นงานด้าน network ดังนั้นเวลาอ้างเนมสเปสจึงใช้เป็น System.Net.Mail แทน ซึ่งดูเหมาะสมดีครับ
Imports System.Net
....
Dim Mail As New MailMessage()
Mail.To.Add(New MailAddress("TO1@email.com"))
Mail.To.Add(New MailAddress("TO2@email.com"))
....
Mail.CC.Add(New MailAddress("CC1@email.com"))
Mail.CC.Add(New MailAddress("CC2@email.com"))
....
Mail.BCC.Add(New MailAddress("BCC1@email.com"))
Mail.BCC.Add(New MailAddress("BCC2@email.com"))
....
Mail.From = New MailAddress("FROM@email.com")
Mail.Subject = "......"
Mail.Body = "......"
Mail.IsBodyHtml = True
Dim Smtp As New SmtpClient("smtp.email.com")
Smtp.Send(Mail)
ชื่อ SMTP server ใช้ IP แทนก็ได้นะครับ
กรณีที่ SMTP server มีการตรวจสอบสิทธิ์ ก็ให้เพิ่มโค้ดในส่วน SmtpClient เป็น
Dim Smtp As New SmtpClient("smtp.email.com")
Smtp.DeliveryMethod = SmtpDeliveryMethod.Network
Smtp.Credentials = New NetworkCredential("UserName", "Password")
Smtp.Send(Mail)
ถ้า SMTP Server กำหนดให้ใช้ SSL\TLS (SSL ใช้ port หมายเลข 465 ,TLS ใช้ port หมายเลข 587) เพิ่ม properties ใช้อ็อบเจ็คดังนี้
Dim Smtp As New SmtpClient("smtp.email.com")
Smtp.DeliveryMethod = SmtpDeliveryMethod.Network
Smtp.Credentials = New NetworkCredential("UserName", "Password")
Smtp.EnableSsl = True
Smtp.Port = 587 '465
Smtp.Send(Mail)
บางคนอาจจำเป็นต้องเปลี่ยน SMTP บ่อยๆ หรือเปลี่ยน SMTP User บ่อยๆ ก็อาจจะระบุรายละเอียดของ SMTP Server ไว้ใน Web.config หรือ app.config เลยก็ได้ครับ
<configuration>
....
<system.net>
<mailsettings>
<smtp deliverymethod="Network">
<network host="smtp.email.com" username="..." password="..." port="..." />
</smtp>
</mailsettings>
</system.net>
....
</configuration>
<-- บทความกำลังเขียนต่อ -->
แหล่งข้อมูล :
ASPAlliance.com
dotnetcurry.com
DaniWeb
velocityreviews
SMTP gmail outlook
SMTP gmail Thunderbird 2.0
geekswithblogs.net
astahost.com
Imports System.Net
....
Dim Mail As New MailMessage()
Mail.To.Add(New MailAddress("TO1@email.com"))
Mail.To.Add(New MailAddress("TO2@email.com"))
....
Mail.CC.Add(New MailAddress("CC1@email.com"))
Mail.CC.Add(New MailAddress("CC2@email.com"))
....
Mail.BCC.Add(New MailAddress("BCC1@email.com"))
Mail.BCC.Add(New MailAddress("BCC2@email.com"))
....
Mail.From = New MailAddress("FROM@email.com")
Mail.Subject = "......"
Mail.Body = "......"
Mail.IsBodyHtml = True
Dim Smtp As New SmtpClient("smtp.email.com")
Smtp.Send(Mail)
ชื่อ SMTP server ใช้ IP แทนก็ได้นะครับ
กรณีที่ SMTP server มีการตรวจสอบสิทธิ์ ก็ให้เพิ่มโค้ดในส่วน SmtpClient เป็น
Dim Smtp As New SmtpClient("smtp.email.com")
Smtp.DeliveryMethod = SmtpDeliveryMethod.Network
Smtp.Credentials = New NetworkCredential("UserName", "Password")
Smtp.Send(Mail)
ถ้า SMTP Server กำหนดให้ใช้ SSL\TLS (SSL ใช้ port หมายเลข 465 ,TLS ใช้ port หมายเลข 587) เพิ่ม properties ใช้อ็อบเจ็คดังนี้
Dim Smtp As New SmtpClient("smtp.email.com")
Smtp.DeliveryMethod = SmtpDeliveryMethod.Network
Smtp.Credentials = New NetworkCredential("UserName", "Password")
Smtp.EnableSsl = True
Smtp.Port = 587 '465
Smtp.Send(Mail)
บางคนอาจจำเป็นต้องเปลี่ยน SMTP บ่อยๆ หรือเปลี่ยน SMTP User บ่อยๆ ก็อาจจะระบุรายละเอียดของ SMTP Server ไว้ใน Web.config หรือ app.config เลยก็ได้ครับ
<configuration>
....
<system.net>
<mailsettings>
<smtp deliverymethod="Network">
<network host="smtp.email.com" username="..." password="..." port="..." />
</smtp>
</mailsettings>
</system.net>
....
</configuration>
<-- บทความกำลังเขียนต่อ -->
แหล่งข้อมูล :
ASPAlliance.com
dotnetcurry.com
DaniWeb
velocityreviews
SMTP gmail outlook
SMTP gmail Thunderbird 2.0
geekswithblogs.net
astahost.com
วันศุกร์ที่ ๒๐ มีนาคม พ.ศ. ๒๕๕๒
ฟังก์ชั่นหาวันแรกและวันสุดท้ายของเดือน (Get first and last day of month)
คำว่าวันสุดท้ายของเดือนในที่นี้ หมายถึงวันใน data type แบบ DateTime (หรือ Date) นะครับ ไม่ใช่หมายถึงเดือนนั้นมีกี่วัน เพราะถ้าหาเดือนนั้นมีกี่วันก็แค่ใช้ Method ชื่อ DaysInMonth (พร้อมระบุปีเดือน) ก็ได้คำตอบแล้ว โค้ดข้างล่างเป็นตัวอย่างแนวทางการหาคำตอบเท่านั้น เพราะที่จริงสามารถพลิกแพลงได้หลายวิธีครับ ลองดูกันเลยครับ
'VB.NET
'หาวันแรกของเดือน จากวันปัจจุบัน
Function GetFirstDayOfMonth(ByVal CurrentDate As DateTime) As DateTime
Return (New DateTime(CurrentDate.Year, CurrentDate.Month, 1))
End Function
'หาวันแรกของเดือน ที่เป็นวันทำงาน (จันทร์-ศุกร์) จากวันปัจจุบัน
Function GetFirstWorkingDayOfMonth(ByVal CurrentDate As DateTime) As DateTime
With New DateTime(CurrentDate.Year, CurrentDate.Month, 1)
If .DayOfWeek = DayOfWeek.Saturday Then
Return .AddDays(2)
ElseIf .DayOfWeek = DayOfWeek.Sunday Then
Return .AddDays(1)
Else
Return .AddDays(0)
End If
End With
End Function
'หาวันสุดท้ายของเดือน จากวันปัจจุบัน
Function GetLastDayOfMonth(ByVal CurrentDate As DateTime) As DateTime
With CurrentDate
Return (New DateTime(.Year, .Month, Date.DaysInMonth(.Year, .Month)))
End With
End Function
แหล่งข้อมูล :
first day of month - eggheadcafe
First and Last Day Of Month - vbforums
'VB.NET
'หาวันแรกของเดือน จากวันปัจจุบัน
Function GetFirstDayOfMonth(ByVal CurrentDate As DateTime) As DateTime
Return (New DateTime(CurrentDate.Year, CurrentDate.Month, 1))
End Function
'หาวันแรกของเดือน ที่เป็นวันทำงาน (จันทร์-ศุกร์) จากวันปัจจุบัน
Function GetFirstWorkingDayOfMonth(ByVal CurrentDate As DateTime) As DateTime
With New DateTime(CurrentDate.Year, CurrentDate.Month, 1)
If .DayOfWeek = DayOfWeek.Saturday Then
Return .AddDays(2)
ElseIf .DayOfWeek = DayOfWeek.Sunday Then
Return .AddDays(1)
Else
Return .AddDays(0)
End If
End With
End Function
'หาวันสุดท้ายของเดือน จากวันปัจจุบัน
Function GetLastDayOfMonth(ByVal CurrentDate As DateTime) As DateTime
With CurrentDate
Return (New DateTime(.Year, .Month, Date.DaysInMonth(.Year, .Month)))
End With
End Function
แหล่งข้อมูล :
first day of month - eggheadcafe
First and Last Day Of Month - vbforums
วันจันทร์ที่ ๒๐ ตุลาคม พ.ศ. ๒๕๕๑
ปัจจัยในการพัฒนาอุตสาหกรรม IT ของประเทศ ตอน 1 (Thai IT Industial devlelopment factor 1)
บทความนี้ ผมคัดลอกและปรับมาเพียงบางส่วนจากหนังสือ แผนแม่บทการพัฒนาอุตสาหกรรมซอฟต์แวร์ ของประเทศไทย โดย SIPA ซึ่งผมต้องการช่วยเผยแพร่ให้คนในวงการ ได้รับทราบหรือตระหนัก และนำไปสู่การพูดคุยเพื่อแก้ปัญหา"การพัฒนาบุคคลากรที่มีฝีมือและมีคุณภาพจำนวนมาก"
"เราอาจจะกล่าวได้ว่าหัวใจของความสำเร็จ ในการพัฒนาอุตสาหกรรม IT ก็คือ คน นี่เอง สิ่งที่น่าแปลกใจสำหรับประเทศไทย คือ การพัฒนาบุคคลากร ซึ่งเราสร้างผู้จบการศึกษาเป็นจำนวนมากในแต่ละปี แต่กลับปรากฎว่า มีผู้สำเร็จการศึกษาตกงานเป็นจำนวนมาก ทั้งๆ ที่ในภาคอุตสาหกรรมนั้ขาดแคลนบุคลากร โดยเฉพาะประเภทที่เป็นฝีมือในระดับสูง ทั้งนี้ก็เป็นเพราะระบบการศึกษาของประเทศไทยด้อยคุณภาพ ผลิตออกมาแต่ด้านปริมาณ โดยไม่มีคุณภาพที่ดีพอในภาคธุรกิจและอุตสาหกรรม
ปัญหาเรื่องคุณภาพของระบบการศึกษานี้ ได้สร้างภาระให้กับผู้ประกอบการ และสถาบันต่างๆ ในการฝึกอบรมผู้ที่สำเร็จจากระบบการศึกษาสมัยใหม่ ซึ่งนับเป็นเรื่องที่สิ้นเปลื้องทั้งค่าใช้จ่าย และเสียเวลาแก่ประเทศชาติเป็นอย่างมาก
โดยเฉพาะอย่างยิ่งในอุตสาหกรรม IT ซึ่งมีการพัฒนาที่รวดเร็วมาก ดังนั้นความรู้ต่างๆ จึงต้องมีการปรับปรุงให้ทันเทคโนโลยีใหม่ๆ อยู่ตลอดเวลา ประเทศอย่าง สิงคโปร์ ไต้หวัน เกาหลี ต่างก็พยายามพัฒนาระบบการศึกษา ให้มีคุณภาพในระดับสูงเป็นอย่างมาก โดยเฉพาะในเรื่องการเรียนรู้ให้ปฏิบัติในเชิงอุตสาหกรรมได้ แม้แต่ประเทศจีน มาเลเซีย และเวียดนาม ก็ได้พยายามยกฐานะและระดับการศึกษาให้เจริญขึ้นอย่างรวดเร็ว จนประสบความสำเร็จ เป็นที่ประทับใจจากนานประเทศ...................."ความคิดเห็น - เราลองคิดง่ายๆ ว่า เวลาเราจะไปฝึกอบรมในเอกชน ยังต้องเสียเงินสำหรับค่าสอน แต่เด็กจบใหม่ที่ไม่สามารถทำงานได้ เรากลับต้องจ่ายเงินเดือนพร้อมฝึกอบรมให้อีก และคนที่แบกภาระนี้ ส่วนใหญ่จะตกอยู่ที่บริษัทขนาดเล็ก เพราะบริษัทขนาดใหญ่ต่างแย่งตัวเด็กที่เก่งๆ ไปหมดแล้ว บริษัทแบบ SME ทุนก็น้อย ยังต้องมารับภาระแบบนี้อีก
อยากฝากให้เด็กรุ่นใหม่ได้ตระหนัก 2 อย่าง คือ
1. การศึกษา ถือเป็นการเตรียมตัวเข้าสู่ภาคอุตสาหกรรม ดังนั้น การฝึกปฏิบัติจึงเป็นสิ่งจำเป็นพอๆ กับการเรียนรู้ให้ห้องเรียน ซึ่งหลายๆ คนนั้น ได้งานจากความรู้เชิงปฏิบัติ มากกว่าเกรดสวยๆ เสียอีก
2. เราอาจจะคิดว่าการศึกษาของเราเป็นเรื่องส่วนตัว ซึ่งทำให้หลายๆ คนคิดว่า การเรื่องหนังสือไม่เก่ง ไม่เข้าใจบทเรียนนั้น มีแค่ตัวเราเองที่ได้รับผลเสีย ซึ่งจริงๆ แล้วเกิดความเสียหายกระทบไปยังประเทศชาติอย่างคาดไม่ถึง (ดังที่บทความข้างบนได้กล่าวไว้) จึงอยากฝากให้เด็กรุ่นใหม่ ได้ตระหนักในบทบาทของตนเองที่มีต่อสังคมมากขึ้น
ส่วนภาคการศึกษานั้น ผมอยากให้ลองคิดกันดูครับว่า ทุกวันนี้เทคโนโลยีพัฒนาไปอย่างรวดเร็ว แต่หลักสูตรกลับพัฒนาบทเรียนตามเทคโนโลยีไม่ทัน ซึ่งทำให้เกิดปัญหาอยู่ 2 อย่าง คือ
1. วิชาเดิมแต่อัดเนื้อหาเพิ่มเข้าไป สมัยก่อนวิชา programming เรียนแค่การใช้ syntax, if, loop แต่ทุกวันนี้เรียนตั้งแต่ syntax, การใช้ library, framework, IDE tools, การติดต่อ database ไปจนถึง web services ในวิชาเดียว จากประสบการณ์ ผมเคยถูกจำกัดให้สอนการติดต่อ database ในคาบเดียว ทำให้เด็กไม่มีความลึกซึ่งในเนื้อหาเลย ผมอยากให้แบ่งเนื้อหาออกไปเป็นอีกหลายๆ วิชา แต่ก็ทำไม่ได้
2. ชื่อวิชาดูทันสมัย เช่น software design, design pattern, object-oriented แต่ผู้สอนกลับขาดทักษะ ขาดประสบการณ์ในอุตสาหกรรมจริง ตลอดจน(อาจจะ)ไม่รู้จริงไปเลยก็มี ที่จริงเรื่องนี้เป็นปัญหาระดับชาติมานานแล้ว เพราะเราขาดครูที่มีคุณภาพจริงๆ เรียกได้ว่าสมองไหลไปวงการอื่นหมดเลยครับ (เงินน้อย งานหนักครับ สำหรับอาชีพครู)
วันอังคารที่ ๑๔ ตุลาคม พ.ศ. ๒๕๕๑
บ้านเราสร้างค่านิยมในสายอาชีพด้าน IT กันถูกหรือไม่ (Thai IT Career Path rigth or wrong?)
ยุคสมัยที่มีการเปลี่ยนแปลงอย่างรวดเร็ว ที่เป็นผลมาจากความก้าวหน้าทางเทคโนโลยี
ทำให้เราซึ่งทำงานเรื่อยๆ กลับกลายเป็นคนล้าหลัง โดยไม่คาดคิด
ไม่ใช่เพราะเราหัวโบราณ แต่เป็นเพราะเราไม่รู้ว่าโลกนั้นก้าวหน้าไปรวดเร็ว
คนเรามีความคิดและชีวิตแตกต่างกัน สิ่งแวดล้อมต่างกัน งานอดิเรกต่างกัน
แต่สิ่งหนึ่งที่คนในวงการคอมฯ ต้องตระหนักคือ บริบทที่มีการเปลี่ยนแปลงอย่างรวดเร็ว
แตกต่างจากบริบทในวงการอื่น เช่น วงการนิติศาสตร์ วงการรัฐศาสตร์ ที่นานๆจะเปลี่ยนกฎหมาย เปลี่ยนระบอบการปกครอง ซักที
ถามว่าผิดไหม ถ้าไม่ปรับตัวตามกระแส ก็ต้องตอบได้เลยว่า ไม่ผิด
แต่ Value ของคุณจะต่ำโดยธรรมชาติของยุคสมัยไปเอง
ดังนั้นสิ่งที่เราทำกันอยู่ คือ การเปลี่ยน career path ไปส่วนงานที่ไม่ใช้ทักษะเชิงเทคนิค
สังเกตว่าบ้านเรา ไม่มีตำแหน่งวิศวะกรอาวุโส ไม่มีโปรแกรมเมอร์ประสบการณ์สูงมีอายุ ไม่มี SA อายุ 50
แต่หลายๆคนก็จำใจเปลี่ยน เพราะเรื่องเงินเดือน
เรานิยมเรียนต่อ MBA เพื่อเลี่ยงการปรับตัวตลอดเวลาต่อเทคโนโลยี และคาดหวังจะเป็นหัวหน้าคน หรือเงินเดือนสูงๆ นอกจากนั้นยังมีค่านิยมที่เห็นว่าการบริหารใช้สมองมากกว่าเชิงเทคนิค (ที่ใช้แรงงาน)
เราจึงขาดคนที่เข้าใจต่อปัญหาการผลิตซอฟต์แวร์อย่างมาก เพราะคนที่มีประสบการณ์เปลี่ยนไปสายบริหาร
พอไม่ได้ใช้นานๆ ก็ลืม น่าเสียดายความรู้และประสบการณ์เชิงเทคนิค
อยากฝากให้พวกเราช่วยตระหนัก และเรียกร้องให้ผู้ใหญ่ส่งเสริม Career Path เชิงเทคนิค เพื่อให้อุตสาหกรรมซอฟต์แวร์ไทยก้าวไกลกว่านี้ครับ

จากรูปด้านบนจะเห็นได้ว่า ตำแหน่งงานในวงกลมสีเขียวส่วนมาก (คิดว่ามากกว่า 95% - ความคิดเห็นส่วนตัว รอคนทำสถิติอยู่) จะย้ายตำแหน่งไปเป็นสายเชิงบริหารในอนาคต ทำให้ตำแหน่งงานในวงกลมสีแดงขาดแคลนอย่างมาก ซึ่งเป็นเพราะปัจจัย 2 อย่าง คือ เงินเดือนในตำแหน่งนั้นๆ เทียบกับตำแหน่งที่ทำได้ในสายอื่นๆ และความรู้ของคนที่จะมาทำ
ขอยกคำพูดขอ ดร.รอม หิรัญพฤกษ์ ผู้อำนวยการเขตอุตสาหกรรมซอฟต์แวร์ประเทศไทย ซอฟต์แวร์ปาร์ค เมื่อ 4-5 ปีที่แล้ว มาเป็นอุทธาหรณ์ดังนี้ครับ "......บุคลากรไอทีทั่วโลกมี 30 ล้านคน มีคนที่เป็น SA อยู่ประมาณ 1% ส่วนไทยมีบุคลากรไอที 35,000-40,000 คน ใช้บัญญัติไตรยางค์ก็จะได้ออกมาประมาณ 300-400 คน ตัวเลขกลมๆ และจากผลสำรวจพบว่า 70% ของสาเหตุที่ระบบไอทีล่มเหลวคือขาด SA ที่เชี่ยวชาญ........."
เป็นคำถามฝากให้คิดกันต่อไปแล้วกันครับว่า ที่ ดร.รอม พูดคำว่า SA ที่เชี่ยวชาญ นั้น หมายถึง SA ที่มีบาทหน้าที่อย่างไร เพราะหลายองค์กร จะให้ SA ทำหน้าที่ทั้ง Business Analyze, Software Design หรือบางทีอาจเหมือน Documentator หรือ Coordinator ไปเลยก็มี
ข้อมูลเพิ่มเติม:
ชำแหละจุดอ่อนอุตฯซอฟต์แวร์ไทย มีแต่รายย่อย-ขาดศักยภาพรับงานใหญ่
ความสำคัญของมาตรฐานคุณภาพ ต่ออุตสาหกรรมซอฟต์แวร์ไทย
ชมรมสถาปนิกซอฟแวร์ หรือ IASA Thailand Chapter
ทำให้เราซึ่งทำงานเรื่อยๆ กลับกลายเป็นคนล้าหลัง โดยไม่คาดคิด
ไม่ใช่เพราะเราหัวโบราณ แต่เป็นเพราะเราไม่รู้ว่าโลกนั้นก้าวหน้าไปรวดเร็ว
คนเรามีความคิดและชีวิตแตกต่างกัน สิ่งแวดล้อมต่างกัน งานอดิเรกต่างกัน
แต่สิ่งหนึ่งที่คนในวงการคอมฯ ต้องตระหนักคือ บริบทที่มีการเปลี่ยนแปลงอย่างรวดเร็ว
แตกต่างจากบริบทในวงการอื่น เช่น วงการนิติศาสตร์ วงการรัฐศาสตร์ ที่นานๆจะเปลี่ยนกฎหมาย เปลี่ยนระบอบการปกครอง ซักที
ถามว่าผิดไหม ถ้าไม่ปรับตัวตามกระแส ก็ต้องตอบได้เลยว่า ไม่ผิด
แต่ Value ของคุณจะต่ำโดยธรรมชาติของยุคสมัยไปเอง
ดังนั้นสิ่งที่เราทำกันอยู่ คือ การเปลี่ยน career path ไปส่วนงานที่ไม่ใช้ทักษะเชิงเทคนิค
สังเกตว่าบ้านเรา ไม่มีตำแหน่งวิศวะกรอาวุโส ไม่มีโปรแกรมเมอร์ประสบการณ์สูงมีอายุ ไม่มี SA อายุ 50
แต่หลายๆคนก็จำใจเปลี่ยน เพราะเรื่องเงินเดือน
เรานิยมเรียนต่อ MBA เพื่อเลี่ยงการปรับตัวตลอดเวลาต่อเทคโนโลยี และคาดหวังจะเป็นหัวหน้าคน หรือเงินเดือนสูงๆ นอกจากนั้นยังมีค่านิยมที่เห็นว่าการบริหารใช้สมองมากกว่าเชิงเทคนิค (ที่ใช้แรงงาน)
เราจึงขาดคนที่เข้าใจต่อปัญหาการผลิตซอฟต์แวร์อย่างมาก เพราะคนที่มีประสบการณ์เปลี่ยนไปสายบริหาร
พอไม่ได้ใช้นานๆ ก็ลืม น่าเสียดายความรู้และประสบการณ์เชิงเทคนิค
อยากฝากให้พวกเราช่วยตระหนัก และเรียกร้องให้ผู้ใหญ่ส่งเสริม Career Path เชิงเทคนิค เพื่อให้อุตสาหกรรมซอฟต์แวร์ไทยก้าวไกลกว่านี้ครับ

จากรูปด้านบนจะเห็นได้ว่า ตำแหน่งงานในวงกลมสีเขียวส่วนมาก (คิดว่ามากกว่า 95% - ความคิดเห็นส่วนตัว รอคนทำสถิติอยู่) จะย้ายตำแหน่งไปเป็นสายเชิงบริหารในอนาคต ทำให้ตำแหน่งงานในวงกลมสีแดงขาดแคลนอย่างมาก ซึ่งเป็นเพราะปัจจัย 2 อย่าง คือ เงินเดือนในตำแหน่งนั้นๆ เทียบกับตำแหน่งที่ทำได้ในสายอื่นๆ และความรู้ของคนที่จะมาทำ
ขอยกคำพูดขอ ดร.รอม หิรัญพฤกษ์ ผู้อำนวยการเขตอุตสาหกรรมซอฟต์แวร์ประเทศไทย ซอฟต์แวร์ปาร์ค เมื่อ 4-5 ปีที่แล้ว มาเป็นอุทธาหรณ์ดังนี้ครับ "......บุคลากรไอทีทั่วโลกมี 30 ล้านคน มีคนที่เป็น SA อยู่ประมาณ 1% ส่วนไทยมีบุคลากรไอที 35,000-40,000 คน ใช้บัญญัติไตรยางค์ก็จะได้ออกมาประมาณ 300-400 คน ตัวเลขกลมๆ และจากผลสำรวจพบว่า 70% ของสาเหตุที่ระบบไอทีล่มเหลวคือขาด SA ที่เชี่ยวชาญ........."
เป็นคำถามฝากให้คิดกันต่อไปแล้วกันครับว่า ที่ ดร.รอม พูดคำว่า SA ที่เชี่ยวชาญ นั้น หมายถึง SA ที่มีบาทหน้าที่อย่างไร เพราะหลายองค์กร จะให้ SA ทำหน้าที่ทั้ง Business Analyze, Software Design หรือบางทีอาจเหมือน Documentator หรือ Coordinator ไปเลยก็มี
ข้อมูลเพิ่มเติม:
ชำแหละจุดอ่อนอุตฯซอฟต์แวร์ไทย มีแต่รายย่อย-ขาดศักยภาพรับงานใหญ่
ความสำคัญของมาตรฐานคุณภาพ ต่ออุตสาหกรรมซอฟต์แวร์ไทย
ชมรมสถาปนิกซอฟแวร์ หรือ IASA Thailand Chapter
หมวดหมู่บทความ:
Coffee break,
วงการซอฟต์แวร์ไทย
| ปฏิกิริยา: |
วันจันทร์ที่ ๒๑ กรกฎาคม พ.ศ. ๒๕๕๑
อบรมฟรี Java Certificate ขั้นสูง โดย SIPA เชียงใหม่
ข่าวดีสำหรับนักพัฒนาสาย Java นะครับ ผู้ที่ได้ Cert SCJP (1.4 หรือ 5.0) อยู่แล้ว ทาง SIPA ร่วมกับบริษัท HITCHA จัดอบรมฟรี SCWCD, SCDJWS, SCBCD และ SCEA เป็นครั้งแรกของประเทศเลยนะครับ แต่เป็นข่าวร้ายสำหรับคนที่ไม่ได้อยู่ภาคเหนือนะครับ เพราะการอบรมครั้งนี้ จัดที่จังหวัดเชียงใหม่ครับ แม้จะอบรมวันเสาร์-อาทิตย์ แต่หลาย course จะพ่วงวันจันทร์ไปด้วยวันนึง จึงน่าเสียดายสำหรับคนอยู่พื้นที่อื่นๆ (ทำไมการอบรมในกรุงเทพมีแต่เสียเงินก็ไม่รู้ อยู่กรุงเทพก็มีคนจนนะครับ) งานนี้แค่อบรมครับ ถ้าจะสอบจริงต้องวางเงินอีก 2000 บาท ถ้าผ่านถึงจะให้เงินคืนครับกำหนดการอบรม (แต่ละหลักสูตร รับ 15 คน อบรมเวลา 9.00 - 16.00)
SCDJWS (Sun Certified Developer For Java Web Services)
อบรมวันเสาร์ถึงจันทร์ที่ 16-18 ส.ค.51
SCBCD (Sun Certified Business Component Developer)
อบรมวันเสาร์ถึงจันทร์ที่ 23-25 ส.ค.51
SCWCD (Sun Certified Web Component Developer)
อบรมวันเสาร์ถึงจันทร์ที่ 30, 31 สค. - 1 ก.ย.51
SCEA (Sun Certified Enterprise Architect)
อบรมวันเสาร์ถึงอาทิตย์ที่ 6-7 และ 13-14 ก.ย.51
งานนี้ผมขอบริษัทไปได้ครับ ยกเว้นแค่หลักสูตร SCDJWS เท่านั้น แล้วเจอกันที่ SIAP เชียงใหม่ครับ
update:
เต็มทุก course แล้วนะครับ
course SCBCD ที่อบรมเป็น Java 1.5 (EJB 3.0 ) ครับ
ข้อมูลเพิ่มเติม :
SIPA ร่วมกับ Hitcha Co.,Ltd. จัดคอร์สอบรม Sun Java Certification ขั้นสูง - SIPA เชียงใหม่
Java Certification Overview - Sun Microsystem
Sun Certified Professional - Wikipedia
SIPA เชียงใหม่
SIPA ขอนแก่น
SIPA ภูเก็ต
วันเสาร์ที่ ๑๙ เมษายน พ.ศ. ๒๕๕๑
Value Types (3) : Enumerations
Enumerations หรือ Sealed value types คือ กลุ่มของค่าคงที่ที่เรากำหนดขึ้นเอง ซึ่งกลุ่มของค่าคงที่เหล่านี้มักจะเป็นข้อมูลที่เกี่ยวข้องกัน และค่าคงที่เหล่านี้จะมีค่าเป็นตัวเลขกำกับไว้ด้วย หรือพูดง่ายๆ ว่ามันคือ (string) Array ในแบบ value type นั้นเองครับ (ปกติ Array ใน java หรือ .net จะเป็น object) ตัวเลขที่กำกับไว้ ก็เปรียบกับ index ใน array ครับ
ประโยชน์ของ Enumerations คือ
|<attributes>| |<modifiers>| Enum <identifier> |As <data>|
<enumerator-list> |= <number>| |:|
End Enum
การประกาศ Enumeration สำหรับ C# (Enumeration Declaration for C#)
|<attributes>| |<modifiers>| enum <identifier> |: <data>|
{
<enumerator-list> |= <number>| |,|
}
ความหมาย
ในเครื่องหมาย | หมายถึง มีหรือไม่มีก็ได้
attributes คือ แท็กซึ่งใช้สำหรับปรับแต่งความสามารถ
modifiers ได้แก่ Private, Friend, Public ส่วน Protected และ Protected Friend ไม่สามารถใช้ใน Module ได้
identifier คือ ชื่อที่จะตั้งให้ enum
data type ได้แก่ type ที่เป็นตัวเลขจำนวนเต็มทั้งหลาย ได้แก่ Byte, Integer, Long, SByte, Short, UInteger, ULong, UShort ถ้าไม่ระบุจะถือเป็น Integer
ตัวอย่าง
'VB.NET
Enum MemberStatus
Active
Inactive
Expire
Close
End Enum
Public Enum Result As Integer
Excellent = 2
Good = 1
Average = 0
Fair = -1
Poor = -2
End Enum
<Serializable()> Protected Friend Enum ColorCode As Byte
Red = 100 : Green = 51 : Blue = 255
End Enum
//C#
enum MemberStatus
{
Active,
Inactive,
Expire,
Close
}
public enum Result : int
{
Excellent = 2
Good = 1
Average = 0
Fair = -1
Poor = -2
}
[Serializable]
protected internal enum ColorCode : byte
{
Red = 100, Green = 51, Blue = 255
}
แหล่งข้อมูล :
Enum Statement (Visual Basic)
Enumerations in VB.NET (ASP Alliance)
Enumeration (StartVBDotNet)
What are Enumerations in VB.NET and how are they used?
what the difference between Enum and an ARRAY?
Programmatically Enumerate the values of an ENUM structure in VB.NET
enum - C# Online.NET
ประโยชน์ของ Enumerations คือ
- ทำให้โค้ดอ่านง่ายขึ้น (readability) ซึ่งทำให้ดูแลรักษาโค้ดง่ายด้วย (maintain)
- ทำให้ลดการ hard coding ได้ (hard coding หรือ hard code คือ การฝังค่าข้อมูลลงใน source code เลยซึ่งถือเป็นการเขียนโปรแกรมที่ไม่เป็นระเบียบในระหว่างพัฒนา แต่อาจจะมีประโยชน์ในขั้นตอนทดสอบระบบ)
- บางกรณีที่ใช้แทน array จะสามารถเพิ่มประสิทธิภาพ (performance) ให้กับซอฟต์แวร์ที่เขียนได้
|<attributes>| |<modifiers>| Enum <identifier> |As <data>|
<enumerator-list> |= <number>| |:|
End Enum
การประกาศ Enumeration สำหรับ C# (Enumeration Declaration for C#)
|<attributes>| |<modifiers>| enum <identifier> |: <data>|
{
<enumerator-list> |= <number>| |,|
}
ความหมาย
ในเครื่องหมาย | หมายถึง มีหรือไม่มีก็ได้
attributes คือ แท็กซึ่งใช้สำหรับปรับแต่งความสามารถ
modifiers ได้แก่ Private, Friend, Public ส่วน Protected และ Protected Friend ไม่สามารถใช้ใน Module ได้
identifier คือ ชื่อที่จะตั้งให้ enum
data type ได้แก่ type ที่เป็นตัวเลขจำนวนเต็มทั้งหลาย ได้แก่ Byte, Integer, Long, SByte, Short, UInteger, ULong, UShort ถ้าไม่ระบุจะถือเป็น Integer
ตัวอย่าง
'VB.NET
Enum MemberStatus
Active
Inactive
Expire
Close
End Enum
Public Enum Result As Integer
Excellent = 2
Good = 1
Average = 0
Fair = -1
Poor = -2
End Enum
<Serializable()> Protected Friend Enum ColorCode As Byte
Red = 100 : Green = 51 : Blue = 255
End Enum
//C#
enum MemberStatus
{
Active,
Inactive,
Expire,
Close
}
public enum Result : int
{
Excellent = 2
Good = 1
Average = 0
Fair = -1
Poor = -2
}
[Serializable]
protected internal enum ColorCode : byte
{
Red = 100, Green = 51, Blue = 255
}
แหล่งข้อมูล :
Enum Statement (Visual Basic)
Enumerations in VB.NET (ASP Alliance)
Enumeration (StartVBDotNet)
What are Enumerations in VB.NET and how are they used?
what the difference between Enum and an ARRAY?
Programmatically Enumerate the values of an ENUM structure in VB.NET
enum - C# Online.NET
สมัครสมาชิก:
บทความ (Atom)

