Apple
public://topics-images/apple_webp.png
SCB10X
public://topics-images/347823389_774095087711602_515970870797767330_n_webp.png
Windows 11
public://topics-images/hero-bloom-logo.jpg
Huawei
public://topics-images/huawei_standard_logo.svg_.png
Google Keep
public://topics-images/google_keep_2020_logo.svg_.png
Instagram
public://topics-images/instagram_logo_2022.svg_.png
Microsoft
public://topics-images/microsoft_logo.svg_.png
Basecamp
public://topics-images/bwpepdi0_400x400.jpg
FTC
public://topics-images/seal_of_the_united_states_federal_trade_commission.svg_.png
Pinterest
public://topics-images/pinterest.png
Palantir
public://topics-images/-nzsuc6w_400x400.png
AIS Business
public://topics-images/logo-business-2021-1.png
PostgreSQL
public://topics-images/images.png
JetBrains
public://topics-images/icx8y2ta_400x400.png
Krungthai
public://topics-images/aam1jxs6_400x400.jpg
Palworld
public://topics-images/mccyhcqf_400x400.jpg
Bill Gates
public://topics-images/bill_gates-september_2024.jpg
VMware
public://topics-images/1nj4i1gp_400x400.jpg
Take-Two Interactive
public://topics-images/0khle7nh_400x400.jpg
OpenAI
public://topics-images/ztsar0jw_400x400.jpg
Thailand
public://topics-images/flag_of_thailand.svg_.png
ServiceNow
public://topics-images/ytnrfphe_400x400.png
Klarna
public://topics-images/urcllpjp_400x400.png
Google Play
public://topics-images/play.png
Drupal
public://topics-images/drupal.png
Virtua Fighter
public://topics-images/virtua_figther_2024_logo.png
Paradox Interactive
public://topics-images/paradox_interactive_logo.svg_.png
Europa Universalis
public://topics-images/europa-icon.png
Nintendo Switch 2
public://topics-images/mainvisual.png
Cloudflare
public://topics-images/cloudflare_logo.svg_.png
Samsung
public://topics-images/samsung.png
Google
public://topics-images/google_2015_logo.svg_.png
Uber
public://topics-images/uber.png
Microsoft 365
public://topics-images/m365.png
USA
public://topics-images/flag_of_the_united_states.svg_.png
GM
public://topics-images/0pe0po-z_400x400.jpg
Perplexity
public://topics-images/perplex.jpg
Xperia
public://topics-images/xperia.png
iOS 18
public://topics-images/ios-18-num-96x96_2x.png
True
public://topics-images/true_logo.png
SoftBank
public://topics-images/softbank.jpg
Pac-Man
public://topics-images/pacman.png
Harry Potter
public://topics-images/harry.png
Marvel
public://topics-images/marvel.png
Skydance
public://topics-images/skydance.png
SEA
public://topics-images/sealogo.png
Find Hub
public://topics-images/find.png
Accessibility
public://topics-images/accessibility-128x128_2x.png
Material Design
public://topics-images/m3-favicon-apple-touch.png
Android 16
public://topics-images/android16.png
Android
public://topics-images/android_0.png
Firefox
public://topics-images/firefox_logo-2019.svg_.png
Google Messages
public://topics-images/messages.png
Notepad
public://topics-images/notepad.png
Singapore
public://topics-images/flag_of_singapore.svg_.png
Airbnb
public://topics-images/airbnb.png
PS5
public://topics-images/ps5.png
Krafton
public://topics-images/krafton.png
Doom
public://topics-images/doom-game-s_logo.svg_.png
AMD
public://topics-images/amd_logo.svg_.png
GTA
public://topics-images/gta_0.png
DoorDash
public://topics-images/doordash.png
YouTube
public://topics-images/yt.png
YouTube Music
public://topics-images/yt-music.png
Facebook
public://topics-images/fb.png
iQiyi
public://topics-images/iqiyi_0.png
Viu
public://topics-images/viu.png
Amazon Prime Video
public://topics-images/prime-vid.png
Spotify
public://topics-images/spotify.jpg
Apple TV
public://topics-images/apple-tv.png
HBO Max
public://topics-images/max.png
Threads
public://topics-images/threads.png
Alexa
public://topics-images/alexa.png
Kindle App
public://topics-images/kindle.png
Shopee
public://topics-images/shopee.png
Waze
public://topics-images/waze.png
Bilibili
public://topics-images/bili.png
Google Maps
public://topics-images/maps.png
Apple Music
public://topics-images/apple-music.png
Claude
public://topics-images/claude.png
TikTok
public://topics-images/tiktok.png
Xbox
public://topics-images/xbox.png
Tesla
public://topics-images/tesla.png
Chrome
public://topics-images/chrome.png
Google Calendar
public://topics-images/gcal.png
Google Home
public://topics-images/ghome.png
Google Meet
public://topics-images/meet.png
NotebookLM
public://topics-images/notebooklm.png
Reddit
public://topics-images/reddit.png
Assassin’s Creed
public://topics-images/ac.png
Mark Zuckerberg
public://topics-images/zuck.jpg
Meta
public://topics-images/meta.png
Meta AI
public://topics-images/meta-ai.png
Epic Games
public://topics-images/epic_games_logo.svg_.png
Unreal
public://topics-images/unreal_engine_logo-new_typeface-svg.png
Fortnite
public://topics-images/fortnite.png
DeepMind
public://topics-images/deepmind.png
Databricks
public://topics-images/databricks.png
Netflix
public://topics-images/netflix-logo.png
Microsoft Azure
public://topics-images/azure.png
Microsoft Copilot
public://topics-images/microsoft_copilot_icon.svg_.png
Bing
public://topics-images/bing.png
EA
public://topics-images/ea.png
Intel
public://topics-images/intel.png
Amazon
public://topics-images/amazon.png
AWS
public://topics-images/aws.png
Zoom
public://topics-images/zoom.png
Dropbox
public://topics-images/dropbox_0.png
Dell Technologies
public://topics-images/dell-tech.png
Nothing
public://topics-images/nothing.svg_.png
Microsoft Teams
public://topics-images/teams.png
Mojang
public://topics-images/mojang.png
Minecraft
public://topics-images/minecraft.png
Redis
public://topics-images/redis_logo.svg_.png
Ubisoft
public://topics-images/ubisoft_logo.svg_.png
Elden Ring
public://topics-images/elden.png
Brave
public://topics-images/brave.png
Opera
public://topics-images/opera.png
Vivaldi
public://topics-images/vivaldi.png
Microsoft Edge
public://topics-images/edge.png
Duolingo
public://topics-images/duolingo.png
LinkedIn
public://topics-images/linkedin.png
Canva
public://topics-images/canva.png
Realme
public://topics-images/realme.png
NASA
public://topics-images/nasa-logo.png
Booking.com
public://topics-images/booking.png
Agoda
public://topics-images/agoda.png
Bolt
public://topics-images/bolt.png
Temu
public://topics-images/temnu.png
LINE
public://topics-images/line.png
Facebook Messenger
public://topics-images/messenger.png
WhatsApp
public://topics-images/whatsapp.png
Telegram
public://topics-images/telegram.png
Signal
public://topics-images/signal.png
X.com
public://topics-images/x.png
Grok
public://topics-images/grok.png
xAI
public://topics-images/xai.png
CapCut
public://topics-images/capcut.png
Edits
public://topics-images/edit.png
Google One
public://topics-images/gone.png
Tinder
public://topics-images/tinger.png
Whoscall
public://topics-images/whoscall.png
OneDrive
public://topics-images/onedrive.png
Lightroom
public://topics-images/lr.png
Meitu
public://topics-images/meitu.png
Outlook
public://topics-images/outlook.png
Excel
public://topics-images/excel.png
PowerPoint
public://topics-images/ppt.png
Microsoft Word
public://topics-images/word.png
Phone Link
public://topics-images/phone-link.png
OneNote
public://topics-images/onenote.png
Windows App
public://topics-images/windows-app.png
Notion
public://topics-images/notion.png
Google Drive
public://topics-images/drive.png
YouTube Kids
public://topics-images/yt-kids.png
Gboard
public://topics-images/gboard.png
DeepSeek
public://topics-images/deepseek_logo.svg_.png
Prince of Persia
public://topics-images/prince-persia.png
Sony
public://topics-images/nq0nd2c0_400x400.jpg
Cisco
public://topics-images/jmyca1yn_400x400.jpg
Alibaba Cloud
public://topics-images/qm43orjx_400x400_cloud.png
Coinbase
public://topics-images/consumer_wordmark.png
CarPlay
public://topics-images/carplay.png
Rust
public://topics-images/rust-logo-blk.png
Red Hat
public://topics-images/redhat.png
Anthropic
public://topics-images/anthropic.png
Xcode
public://topics-images/xcode.png
Tim Cook
public://topics-images/tim-cook.jpg
Donald Trump
public://topics-images/trump.jpg
Microsoft Surface
public://topics-images/surface.jpg
Copilot+ PC
public://topics-images/copilotpc.png
Stellar Blade
public://topics-images/stellar-blade.jpg
Snapdragon
public://topics-images/snapdragon_chip.png
Qualcomm
public://topics-images/qualcomm-logo.svg_.png
CoreWeave
public://topics-images/coreweave.png
Ford
public://topics-images/ford.png
Xiaomi
public://topics-images/xiaomi.png
Google Cloud
public://topics-images/google_cloud_logo.svg_.png
PlayStation Network
public://topics-images/psn.png
PlayStation Plus
public://topics-images/ps-plus.png
Windsurf
public://topics-images/windsurf.png
Square Enix
public://topics-images/square-enix.png
MIT
public://topics-images/x7hyjl3t_400x400.jpg
Zoox
public://topics-images/zoox.jpg
Evernote
public://topics-images/1neatidg_400x400.jpg
Magic the Gathering
public://topics-images/magic.png
Call of Duty
public://topics-images/cod.png
NVIDIA
public://topics-images/nvidia_logo.svg_.png
Satya Nadella
public://topics-images/nadella.png
Nintendo
public://topics-images/nintendo.png
Japan
public://topics-images/japan_flag.png
China
public://topics-images/china-flag-sq.png
Sam Altman
public://topics-images/sam-altman.png
SNK
public://topics-images/snk_logo.svg_.png
EPYC
public://topics-images/epyc.png
HPE
public://topics-images/hpe.png
Juniper
public://topics-images/juniper.png
CMA
public://topics-images/cma.png
App Store
public://topics-images/app-store.png
DoJ
public://topics-images/doj.png
Siri
public://topics-images/siri.png
Apple Intelligence
public://topics-images/apple-intelligence.png
Acer
public://topics-images/acer.png
GeForce
public://topics-images/geforce.png
Omen
public://topics-images/omen.png
HP
public://topics-images/hp.png
Alienware
public://topics-images/alienware.png
Dell
public://topics-images/dell.png
Bungie
public://topics-images/bungie.png
Marathon
public://topics-images/marathon.png
Intel Arc
public://topics-images/badge-arc-graphics.png
GitHub
public://topics-images/8zfrryja_400x400.png
GitHub Copilot
public://topics-images/copilot.png
Foxconn
public://topics-images/foxconn_0.png
Visual Studio
public://topics-images/vs.png
Visual Studio Code
public://topics-images/vscode.png
WSL
public://topics-images/wsl.png
Linux
public://topics-images/linux.png
Tencent
public://topics-images/tencent_logo_2017.svg_.png
Entra
public://topics-images/microsoft_entra_id_color_icon.svg_.png
RHEL
public://topics-images/rhel-icon.png
MSI
public://topics-images/msi-logo-for_digital_use_b.png
MCP
public://topics-images/mcp.png
Docker
public://topics-images/docker.png
RISC-V
public://topics-images/risc-v-logo.svg_.png
Fedora
public://topics-images/fedora.png
ASUS
public://topics-images/asus.png
ROG
public://topics-images/rog-logo_red.png
Naughty Dog
public://topics-images/naughty-dog.png
AIS
public://topics-images/357073423_657473419752809_8491928084596189631_n.png
National Telecom
public://topics-images/nt.jpg
Elon Musk
public://topics-images/elon_musk_2015_0.jpg
OpenShift
public://topics-images/openshift-logotype.svg-0.png
Shift Up
public://topics-images/shiftup.png
Bethesda
public://topics-images/bethesda.png
The Elder Scrolls
public://topics-images/tes.png
CATL
public://topics-images/img_7841.png
Radeon
public://topics-images/radeon.png
Borderlands
public://topics-images/borderlands4.png
Android XR
public://topics-images/android-xr.png
Ninja Theory
public://topics-images/ninja.jpg
Jonathan Ive
public://topics-images/ive.jpg
Bitcoin
public://topics-images/bitcoin.svg_.png
Baidu
public://topics-images/baidu.jpg
Wear OS
public://topics-images/wearos.png
Activision
public://topics-images/activision.svg_.png
Netmarble
public://topics-images/netmarble.png
NetEase
public://topics-images/netease.png
Fujifilm
public://topics-images/l_9ycfw2_400x400.png
Google Vids
public://topics-images/vids.png
Google Docs
public://topics-images/docs.png
Google Sheets
public://topics-images/sheets.png
Google Chat
public://topics-images/gchat.png
Google Slides
public://topics-images/slides.png
Google Photos
public://topics-images/photos_0.png
Snapchat
public://topics-images/snapchat.png
Google TV
public://topics-images/gtv.png
Android Auto
public://topics-images/aauto.png
Gmail
public://topics-images/gmail.png
Google Forms
public://topics-images/forms.png
Google Workspace
public://topics-images/workspace_0.png
Android Studio
public://topics-images/android_studio_logo_2024.svg_.png
Pocket
public://topics-images/spnhfky8_400x400.png
Mozilla
public://topics-images/mozilla.jpg
Thunderbird
public://topics-images/thunderbird.png
Bluesky
public://topics-images/bluesky.jpg
Warhammer
public://topics-images/warhammer-bw.png
Relic Entertainment
public://topics-images/relic_entertainment_logo.svg_.png
Age of Empires
public://topics-images/age_of_empires_franchise_logo.png
Azul
public://topics-images/azul.png
Meta Quest
public://topics-images/meta-quest.png
Informatica
public://topics-images/qzlzwpsp_400x400.jpg
Salesforce
public://topics-images/salesforce.com_logo.svg_.png
Steam
public://topics-images/steam.png
Valve
public://topics-images/valve_logo.svg_.png
SteamOS
public://topics-images/steamos_wordmark.svg_.png
Steam Deck
public://topics-images/steam-deck.png
Arch Linux
public://topics-images/archlinux-logo-standard-version.svg_.png
Half-Life
public://topics-images/orange_lambda.svg_.png
Counter-Strike
public://topics-images/counter-strike.png
OnlyFans
public://topics-images/onlyfans_logo_icon_blue.png
Strava
public://topics-images/strava.png
Mortal Kombat
public://topics-images/mortal-kombat.png
Canon
public://topics-images/canon.png
Snipping Tool
public://topics-images/snipping.png
Microsoft Paint
public://topics-images/paint.png
Microsoft Photos
public://topics-images/photos.png
File Explorer
public://topics-images/file_explorer.png
Git
public://topics-images/git-logo.svg_.png
Star Wars
public://topics-images/star-wars.png
Activision Blizzard
public://topics-images/actvision-blizz.png
Microsoft Store
public://topics-images/microsoft-store.png
France
public://topics-images/france.png
Ricoh
public://topics-images/ricoh_logo_2005.svg_.png
Xeon
public://topics-images/xeon.png
.NET
public://topics-images/dotnet.png
SQL Server
public://topics-images/microsoft_sql_server_2025_icon.svg_.png
Power BI
public://topics-images/power-bi.png
Microsoft Fabric
public://topics-images/fabric.png
MSN
public://topics-images/msn.png
SharePoint
public://topics-images/sharepoint.png
Ubuntu
public://topics-images/ubuntu-logo-2022.svg_.png
Debian
public://topics-images/debian-openlogo.svg_.png
LLM
public://topics-images/7410e129-824e-479c-93c7-558e87130b8f.png
Meituan
public://topics-images/meituan.png
Logitech
public://topics-images/logitech_logo.svg_.png
Llama
public://topics-images/llama.png
Oracle
public://topics-images/oracle_logo.svg_.png
Arc Browser
public://topics-images/arc.png
Circle
public://topics-images/circle.png
T-Mobile
public://topics-images/tmobile.jpg
Starlink
public://topics-images/starlink.jpg
SpaceX
public://topics-images/hbri04tm_400x400.jpg
Apple Arcade
public://topics-images/en-us-large-1x.png
TypeScript
public://topics-images/typescript.svg_.png
AlmaLinux
public://topics-images/almalinux.png
Subnautica
public://topics-images/subnautica.png
Clair Obscur
public://topics-images/clair-33.png
Dragon Quest
public://topics-images/dragon_quest_logo.png
Twitter
public://topics-images/twitter300.png
One UI
public://topics-images/one-ui.png
Fire TV
public://topics-images/amazon_fire_tv_2024.svg_.png
Stellantis
public://topics-images/stellantis.png
Taobao
public://topics-images/taobao.png
WeChat
public://topics-images/wechat.png
Alipay
public://topics-images/alipay.png
DingTalk
public://topics-images/dingtalk.png
Alibaba
public://topics-images/alibaba-group-logo.svg_.png
Pokemon
public://topics-images/international_pokemon_logo.svg_.png
NBTC
public://topics-images/nbtc.png
CD Projekt
public://topics-images/cd_projekt_logo.svg_.png
Cyberpunk 2077
public://topics-images/cyberpunk.png
The Witcher
public://topics-images/witcher.png
Boeing
public://topics-images/boeing.png
Discord
public://topics-images/discord.png
Grammarly
public://topics-images/grammarly.png
Google Lens
public://topics-images/lens.png
WordPress
public://topics-images/wordpress.png
Automattic
public://topics-images/automattic.png
Zotac
public://topics-images/zotac.png
Black Forest Labs
public://topics-images/flux.png
Sega
public://topics-images/sega.png
Twitch
public://topics-images/twitch.png
Person
public://topics-images/gemini_generated_image_ddj47iddj47iddj4.png
IntelliJ
public://topics-images/intellij.png
CrowdStrike
public://topics-images/cs_logo.png
Bandai Namco
public://topics-images/bandainamco.png
Oppo
public://topics-images/oppo.png
Dontnod
public://topics-images/don-t_nod.png
Hugging Face
public://topics-images/huggingface.png
Bixby
public://topics-images/logo_bixby_new.svg_.png
Gemma
public://topics-images/gemma.png
Flash Express
public://topics-images/flash.png
Lyft
public://topics-images/lyft.png
James Bond
public://topics-images/007.png
Snowflake
public://topics-images/snowflake.png
IO Interactive
public://topics-images/ioi.png
The Sims
public://topics-images/the_sims.png
Character.AI
public://topics-images/character_ai.png
IBM
public://topics-images/xy93qvy4_400x400.png
USB
public://topics-images/usb-logo.png
Zynga
public://topics-images/zynga.svg_.png
Broadcom
public://topics-images/broadcom.png
Photoshop
public://topics-images/ps.png
Adobe
public://topics-images/adobe.png
Premiere Pro
public://topics-images/premier.png
Database
public://topics-images/gemini_generated_image_nlgayenlgayenlga.png
GeForce Now
public://topics-images/gf-now.png
Go
public://topics-images/o6aczwfv_400x400.png
ChatGPT
public://topics-images/chatgpt.png
Final Fantasy
public://topics-images/ff.png
Swift
public://topics-images/swift_logo.svg_.png
Cursor
public://topics-images/cursor.png
AirPods
public://topics-images/airpods_pro2.png
AirPods Max
public://topics-images/airpodsmax.png
Koei Tecmo
public://topics-images/koei_tecmo.png
Team Ninja
public://topics-images/team-ninja.png
Disney+
public://topics-images/disney-plus.png
Capcom
public://topics-images/capcom.png
Pornhub
public://topics-images/pornhub-logo.svg_.png
Proton
public://topics-images/proton.png
PlayStation
public://topics-images/playstation.png
GOG
public://topics-images/gog-logo.png
Mistral
public://topics-images/mistral.png
No Man's Sky
public://topics-images/nomansky.png
Hello Games
public://topics-images/hello-games-logo.png
SCB
public://topics-images/scb.png
Kasikorn Bank
public://topics-images/kbank.png
Grasshopper Manufacture
public://topics-images/grasshopper-100.png
Metal Gear
public://topics-images/metal_gear_franchise_logo.svg_.png
Google Wallet
public://topics-images/g-wallet.png
PayPal
public://topics-images/paypal.png
Mark Cuban
public://topics-images/cuban.jpg
Giant Squid
public://topics-images/giant-squid.png
Black Myth: Wukong
public://topics-images/blackmyth.jpg
Deathloop
public://topics-images/deathloop_logo.webp_.png
Resident Evil
public://topics-images/residentevil.png
Street Fighter
public://topics-images/street_fighter_logo.png
Ryu Ga Gotoku
public://topics-images/ryugagotokustudio.png
Like a Dragon
public://topics-images/lad-logo.png
Sonic the Hedgehog
public://topics-images/sonic.png
Blender
public://topics-images/logo_blender.svg_.png
Volvo
public://topics-images/volvo-iron-mark-black.svg_.png
Atomic Heart
public://topics-images/atomic.png
Hitman
public://topics-images/hitman.png
Mac
public://topics-images/apple-finder.png
Arc Raiders
public://topics-images/arc-raiders.jpg
Krungsri Bank
public://topics-images/krungsri.png
Lenovo
public://topics-images/branding_lenovo-logo_lenovologoposred_low_res.png
Owlcat Games
public://topics-images/owlcat.png
Scale
public://topics-images/scale_ai.png
The Outer Worlds
public://topics-images/1600px-outerworlds-logo.png
Obsidian Entertainment
public://topics-images/obsidian_entertainment.svg_.png
Avowed
public://topics-images/avowed.png
Grounded
public://topics-images/grounded.png
Atlus
public://topics-images/atlus_logo_thin_stroke_277x108.png
High on Life
public://topics-images/high-logo.png
Ryzen
public://topics-images/ryzen.png
Flight Simulator
public://topics-images/microsoft_flight_simulator.png
Indiana Jones
public://topics-images/indiana_jones_logo.svg_.png
Dawnwalker
public://topics-images/the-blood-of-dawnwalker-logo-light.png
Rebel Wolves
public://topics-images/rebel-wolves-logo-black.png
inXile
public://topics-images/inxile_entertainment_logo.png
Double Fine Productions
public://topics-images/double-fine.png
Game Freak
public://topics-images/game_freak_logo.svg_.png
iOS 26
public://topics-images/ios26.png
Tahoe
public://topics-images/macos26.png
iPadOS 26
public://topics-images/ipados26.png
Zelda
public://topics-images/zelda_logo.svg_.png
watchOS 26
public://topics-images/watchos26.png
Apple Vision Pro
public://topics-images/applevisionpro.png
Amiibo
public://topics-images/amiibo.png
Thunder Lotus
public://topics-images/thunder-lotus.png
Games
public://topics-images/role-playing_video_game_icon.svg_.png
Waymo
public://topics-images/waymo.png
Grab
public://topics-images/grab_0.png
Fallout
public://topics-images/fallout_logo.svg_.png
Warner Bros. Discovery
public://topics-images/wbd.png
Splatoon
public://topics-images/splatoon.png
Gemini
public://topics-images/google_gemini_logo.png
Kingston
public://topics-images/kingston.png
Roblox
public://topics-images/roblox_thumb.png
Google Pixel
public://topics-images/pixel_wordmark.svg_.png
Jensen Huang
public://topics-images/jensen-headshot-1906-600x338.png
Midjourney
public://topics-images/61396273.png
NBCUniversal
public://topics-images/umh_w5l-400x400.png
Disney
public://topics-images/disney.png
Snap
public://topics-images/snap_inc.png
Wikipedia
public://topics-images/wikipedia-logo-v2.svg_.png
Kaggle
public://topics-images/kaggle_logo.svg_.png
Wikimedia Foundation
public://topics-images/wikimedia_foundation.png
IonQ
public://topics-images/ionq.png
Apple TV+
public://topics-images/apple_tv_plus.png
Slack
public://topics-images/slack.png
Webex
public://topics-images/webex.png
Wayland
public://topics-images/wayland.png
GNOME
public://topics-images/gnomelogo.svg_.png
X.Org
public://topics-images/xorg.png
PCI-SIG
public://topics-images/pci-sig_logo.png
PCI
public://topics-images/pci_express.svg_.png
Instinct
public://topics-images/instinct.png
MariaDB
public://topics-images/img_9067.png
Mattel
public://topics-images/mattel-2019-svg.png
Silent Hill
public://topics-images/silent_hill_2022_logo.png
Bloober Team
public://topics-images/blooberlogo260b.png
India
public://topics-images/flag_of_india.png
Nexon
public://topics-images/nexon.svg_.png
Helldivers
public://topics-images/helldivers_print_logo.png
Mac Mini
public://topics-images/mac-mini-202410-gallery.png
Dyson
public://topics-images/dyson.png
Mario Kart
public://topics-images/mario-kart-100.png
Germany
public://topics-images/flag_of_germany.svg_.png
Gears of War
public://topics-images/gears-of-war-logo-2006.png
Warren Buffett
public://topics-images/buffett.png
Craig Federighi
public://topics-images/craige1.png
Boston Dynamics
public://topics-images/boston.png
aespa
public://topics-images/aespa.png
NewJeans
public://topics-images/newjeans.png
iPhone 16
public://topics-images/iphone16_.png
iPhone 16 Pro
public://topics-images/iphone16_pro.png
Indonesia
public://topics-images/indo_flag.png
Devil May Cry
public://topics-images/dmc5.png
Etsy
public://topics-images/etsy.png
Ghost of Yōtei
public://topics-images/ghost.png
BT
public://topics-images/bt_logo_2019.svg_.png
Kubernetes
public://topics-images/kubernetes_logo_without_workmark.svg_.png
Pixelfed
public://topics-images/pixelfed.png
Mastodon
public://topics-images/mastodon.png
Iran
public://topics-images/iran.png
Israel
public://topics-images/flag_of_israel.png
Warner Bros.
public://topics-images/warner_bros.png
เย้ C#, Java ยังอยู่ต้น ๆ
hisoft Wed, 11/04/2012 - 09:25
เย้ C#, Java ยังอยู่ต้น ๆ (T_T)
เดาได้เลยว่าคนไทยหลายๆคนจะงงว
UltimaWeapon Wed, 11/04/2012 - 10:37
เดาได้เลยว่าคนไทยหลายๆคนจะงงว่า C/C++ มันโผล่มาอยู่อันดับสูงขนาดนี้ได้ไงแน่ๆ เพราะไทยแลนด์งานเกี่ยวกับ C/C++ แทบจะไม่มีกันเลยทีเดียว มีแต่ Java, C#, PHP ซะส่วนมาก
ผมคนนึงที่งง ห้า ห้า
btoy Wed, 11/04/2012 - 12:35
In reply to เดาได้เลยว่าคนไทยหลายๆคนจะงงว by UltimaWeapon
ผมคนนึงที่งง ห้า ห้า
อยู่ในความคิดของผมมาก่อนแล้ว.
cavaji Wed, 11/04/2012 - 12:44
In reply to เดาได้เลยว่าคนไทยหลายๆคนจะงงว by UltimaWeapon
อยู่ในความคิดของผมมาก่อนแล้ว... เพราะมันเร็วมากๆๆ Java สู้ไม่ได้เลย.
ผมก็งงครับ โดยเฉพาะ c นี้ล่ะ
tonkung Wed, 11/04/2012 - 12:50
In reply to เดาได้เลยว่าคนไทยหลายๆคนจะงงว by UltimaWeapon
ผมก็งงครับ โดยเฉพาะ c นี้ล่ะ
ผมกลับงงว่า Assembly
จักรนันท์ Wed, 11/04/2012 - 17:07
In reply to เดาได้เลยว่าคนไทยหลายๆคนจะงงว by UltimaWeapon
ผมกลับงงว่า Assembly หล่นไปอยู่อันดับ 24 ได้ไง โดยเฉพาะไปอยู่หลัง Ada!!
เอาจริงๆแล้ว Assembly
UltimaWeapon Wed, 11/04/2012 - 19:03
In reply to ผมกลับงงว่า Assembly by จักรนันท์
เอาจริงๆแล้ว Assembly แทบจะไม่ค่อยได้ใช้เลยนะคับ ส่วนมากจะ C กันหมด เพราะได้ Performance เกือบจะระดับเดียวกัน (ถ้าเขียนเป็น + Compiler เก่ง) เผลอๆบางทีจะมากกว่าด้วย ถ้าคนเขียน Assembly เก่งไม่เท่า C Compiler ส่วนมากหลักๆแล้ว Assembly มันจะไว้ใช้ก็ต่อเมื่อ C ทำงานนั้นๆไม่ได้ เช่น การใช้ Instruction พิเศษของ CPU ที่ Compiler ไม่สามารถให้ได้ หรือ entry point ของตัว boot loader
ผมยังใช้กันอยู่เสมอๆ ครับ คือ
จักรนันท์ Wed, 11/04/2012 - 21:35
In reply to เอาจริงๆแล้ว Assembly by UltimaWeapon
ผมยังใช้กันอยู่เสมอๆ ครับ
คือ ทุกๆ Compiler มันจะมีจุดที่ให้ผลเป็น Native ที่งี่เง่าอยู่เสมอ ซึ่งจุดเหล่านั้นทำให้ Process period time คลาดเคลื่อนในงาน Control ระดับ Hardware
ผมยกตัวอย่างเช่น...
ลองใช้ if (); ดูนะครับ แล้ว Compile ดู แล้วดู Code ที่ได้ออกมา จะพบ Format ที่ทุกๆ Compiler วางไว้ออกมาเป็นแบบนี้...
// สมมติใน if เราเช็ค ตัวแปร เป็น true (คือ 1), bsf ก็คือเช็ค bit 0 ในตัวแปร ว่า Set หรือไม่
bsf ตัวแปร,0
goto จริง
goto ไม่จริง
จริง:
bla...
bla...
bla...
goto งานต่อไป
ไม่จริง:
goto งานต่อไป
งานต่อไป:
bla...
bla...
bla...
แบบนี้ครับ ทุก Compiler ของทุกค่ายเลย เวลาเจองานที่ผมต้อง Strict เรื่อง Process period time นี่ ต้อง asm เอาเท่านั้น ไม่งั้น คุมไม่ได้ครับ
งานที่ว่าเช่น เวลาต้องทำ Bit bang ใน BUS ด้วย Speed สูงสุดที่ไม่มีมี Clock อ้างอิง (และไม่ขึ้นกับ Clock)
ยังมีตัวอย่างให้ยกอีกเยอะครับ ทดลองดูได้เลยครับง่ายๆ เขียนสั้นๆ มีแค่ 1 Instruction แล้ว Compile เสร็จแล้วดู Native ที่ออกมาเลย (เปิดตาราง CPU Instruction ดูเลย) จะเจออะไรที่เป็น Garbage แบบนี้อยู่พอสมควร
หลายลักษณะครับ ที่ Compiler เหมือนทำ Template ไว้แล้ว
แค่ goto อันเดียวนี่ ถ้าเป็น x86 ต้อง Fetch code ถึง 8 byte เป็นอย่างน้อยนะครับ เสียเวลา CPU ไปถึง 39 Clock เลยทีเดียว ทำให้เวลาทำ Process Synchronization Calibrating นี่ยากมาก ขยับ Code นิดเดียวเช่น...
i = i + 1; เป็น i++; เท่านั้น ถึงเละได้ทันที เพราะบาง Compiler ให้ผล Native ออกมาต่างกัน
บาง Compiler ก็สู่รู้ครับ มันแปลทั้ง 2 Instruction นั่นออกมาเป็น Native เดียวกัน ทั้งที่จงใจจะถ่วงเวลา Process ด้วย i = i + 1; เพื่อให้มีการ Load ค่า i ลงใน Register เล่นๆ ก่อน แล้วค่อยเพิ่มค่า แล้ว Load กลับอีกที
ถ้าผมยกตัวอย่างอีก มีหวัง Blog ระเบิดแน่นอน.... ผมมี Case เยอะครับ
ถ้าไม่ใช้ Assembly เลย เป็นไปไม่ได้เลย ที่จะคุมเรื่อง Timing ได้แม่นยำครับ ผมเลยคิดว่ามันน่าจะยังจำเป็นกว่า Ada
ไอ้ที่ยกตัวอย่างมานั้น
UltimaWeapon Wed, 11/04/2012 - 21:50
In reply to ผมยังใช้กันอยู่เสมอๆ ครับ คือ by จักรนันท์
ไอ้ที่ยกตัวอย่างมานั้น Assembly ของอะไรเหรอคับ เพราะถ้า x86 มันคงไม่ใช่ละ ถ้า x86 VC++ ฉลาดจะตาย ที่คุณยกตัวอย่างมาไม่มีหรอก มีแต่มันจะออกมาแบบนี้
test eax, eax
jz ไม่จริง
เริ่มทำงานส่วนจริง
ส่วน Process period time ผมไม่รู้จักหรอก Bit bang ของคุณก็เหมือนกัน คุณบอกยังมีตัวอย่างอีกเยอะ แต่ผมผ่าน Code ของ VC++ มาเยอะแล้ว Garbage ที่คุณว่ามันแทบจะไม่มีออกมา
Process Synchronization Calibrating ที่คุณว่ามาผมก็ไม่รู้เหมือนกัน ไม่รู้ว่าคุณมั่วมา หรือผมโง่เองกันแน่
ส่วนเรื่อง Timing ที่คุณว่ามา ยกตัวอย่างให้ดูหน่อยได้มั้ยคับว่ามันเป็นยังไง
ไอ้ที่คุณว่ามัน ฉลาดจะตาย
จักรนันท์ Thu, 12/04/2012 - 05:32
In reply to ไอ้ที่ยกตัวอย่างมานั้น by UltimaWeapon
ไอ้ที่คุณว่ามัน ฉลาดจะตาย นั่นแหละครับ ที่ผมว่าในงานของผม คือการ สู่รู้ ครับ
งานของคุณมีแต่งานที่ Code สามารถมี Overhead สูงได้ คุณจึงไม่ทราบว่า สำหรับงานที่ Interface ระดับ Hardware นั้น Compiler ยุคใหม่ สู่รู้กันมาก (ทำให้ความฉลาดของมัน กลายเป็น Garbage ไป)
เช่นที่คุณยกผลว่า...
test eax, eax
jz
นั่นคือ Native ที่ได้หลังจาก Load ค่าจาก Memory ใส่ eax ไปตรวจสอบแล้ว ซึ่งมีขนาดถึง 16 bit ตรงนี้ CPU จะต้อง Fetch อ่าน Native code ก่อน Process ถึง 8 byte เช่นที่ผมบอกไปแล้ว แล้วจึงค่อย Process ตาม และผมให้สังเกตุนะครับ ในมื่อตัวอย่างผมต้องการตรวจสอบแค่ Bit 0 ของตัวแปรเท่านั้น!! คุณลองพยายามเขียน VC++ ให้ Compile ออกมาได้โดยได้ Native ที่กระทำแค่เท่าที่จำเป็นที่ Bit 0 ให้ผมดูหน่อยซิครับ?
สำหรับเรื่องที่คุณคิดว่ามั่ว นั่นเพราะคุณไม่รู้น่ะครับ... เมื่อคุณ Design Board ออกมา ไม่ว่าจะ CPU อะไร พอคุณวาง Chipset หรือ MCU อื่นๆ ที่คุณต้องการลงไปใน Board โดยใช้ Oscillator เดียวกันเป็น Source (CLK) ให้แต่ละ Processor ทำ PLL คูณค่า Clock เอาเอง (x86 ปัจจุบันทำแบบนี้หมดครับ โลกเรายังไม่สามารถผลิต Crystal ระดับ GHz ได้ครับ เขาทำ PLL กันทั้งนั้น) ในการออกแบบ Board ลักษณะนี้ จะสามารถทำความเร็วสื่อสารใน Bus ระหว่าง Processor ได้สูงสุด ด้วยการใช้ Bit bang concept ครับ เพราะ Processor ทุกตัวจะเดินอยู่บน Clock Source เดียวกัน
ทีนี้ Bit bang เนี่ย ต้องเข้มงวดมากครับ เรื่องเวลาในการ Process แต่ละ Loop ของการรับ/ส่งข้อมูลแต่ละ Bit ใน Bus line ซึ่ง... คุณต้องเขียน Code ให้แต่ละ Loop ใช้เวลาเท่ากันครับ (ในระดับ Pico Sec ลงไป)
คุณ UltimaWeapon ทดลองเองได้เลยครับ...
ลองเขียน Code 2 Code นะครับ เอา Bit bang concept นี่เลยพอ คุณก็ได้หัวแตกแน่นอน... ผมให้โจทย์คุณเลย ไปลองดู
Code แรก สมมติเป็น Master แล้วกัน ส่งข้อมูล Byte เดียวพอ
อีก Code เป็น Slave ครับ รับ Byte เดียว
ให้คุณเขียน Code แรก ส่งข้อมูล 8 bit จากตัวแปร โดยเปลี่ยน Bit ที่ขาใดก็ได้ ตามใจคุณ ของ Printer port หรือจะใช้ Port อื่นใด ก็ตามแต่จะสะดวกครับ เอา I/O บน Mainboard คุณนั่นแหละ มาใช้ทดสอบแค่ Bit เดียว โดยมี Start bit เป็น Bit แรก และข้อมูลตามมาอีก 8 bit ทันที หนึ่ง Cycle จึงเท่ากับ 9 bit ไม่มี Clock ให้อิงครับ วิ่งเต็มที่ตามที่คุณเขียน Code ได้ เขียนเสร็จแล้ว เอา Scope ทำการจับ Capture เอาไว้เลย ว่าได้ 9 bit ความเร็วกระฉูด ยิ้มแย้มไปได้
ทีนี้....
มาเขียน Code ที่สอง เป็นขารับนะครับ... เออ.. นี่แหละ ทำให้มันรับได้ครับ แค่นี้ เริ่มเห็นปัญหาของ Compiler หรือยังครับ?
เพราะ Code มันย่อมไม่เหมือนกัน แต่... คุณต้องเขียนให้ได้ Native code ที่ใช้เวลาทำงานในแต่ละรอบการเปลี่ยน Bit เท่ากันเสมอ!!! ที่ความเร็วสูงสุดตาม Clock source ของ CPU (ที่ผ่าน PLL แล้วด้วย) ทำได้ ไม่ใช่ตาม Clokc จำกัดแบบ PCI Bus อะไรพวกนั้น พวกนั้นต้องทำงานตามจังหวะ Clock ของ Bus ครับ
ยังมีอื่นๆ อีกเยอะครับ ถ้าคนที่เคยแต่เขียน Program ลงบน Board ที่คนอื่นทำมาให้ใช้ ไม่มีวันเข้าใจว่าทำไมผมจึงว่า "ความฉลาด" ที่คุณยกมา กลับเป็น "การสู่รู้" แบบที่ผมกล่าวไป คนที่ไม่ถึงกับ Implement กับ Processor ได้เองโดยตรงจะเข้าใจได้ก็อีกกลุ่มหนึ่งครับ (สำหรับ x86 นะ) คือกลุ่มที่มีความสามารถและเคยเขียน Driver เอง ไม่ว่ากับ DOS หรือ OS ใดๆ เพื่อใช้ Peripheral Interface Card ที่ไม่ใช่ของทั่วไปในตลาดใช้งาน เช่นในโรงงานอุตสาหกรรม มีกรณีเยอะ เอา ModBus Interface Card เข้าไปเสียบ เพื่อให้ PC เข้าร่วมวงกับ PLC ของ Siemens ได้เป็นต้น กรณีเจอของหลายสัญชาติในระบบ เช่น German + India + Japan + Russia และ Italy + German + USA มา Join Hardware กัน แล้วเราต้องเอาอะไรมาเชื่อม ไม่ว่าจะ Base บน x86 หรือ Processor อื่นใด
เจ้าพระยาพืชไร่... โคราช... ถ้ามีใครผ่านมา Blog นี้ ช่วยผมอธิบายก็ได้นะครับ งานที่คุณเคยจ้างบริษัทผมเข้าไปแก้ปัญหาให้เมื่อปี 2542 เมื่อ Seimens + Toshiba + อะไรหว่าลืมแล้ว เข้าไปสางให้ สถานการณ์อย่างกับสนามรบระหว่าง Engineer ข้ามชาตินั่นน่ะครับ
ไทยบารอดา... มาบตาพุฒ... นาย India กับการพยายาม Implement ของ India ลงไปในระบบด้วย (ผมชื่นชมนะ กับความพยายามส่งเสริมงานที่ออกมาจากสมองของ Engineer ชาติตัวเอง แต่ให้ตายสิ... ผมต้องเอา Network Card ของ 3COM USA ไปนั่ง Remount Chip ออก มาทำใหม่กับ Ukriane Engineer เพราะ... Protocol ของ India เป็นของเขาเอง!!! ต้องหาทางเชื่อมกับ Siemens ให้ได้)
ผมเอ่ยชื่อไว้เป็นตัวอย่างถึง 2 โรงงานเลยนะครับ ถ้ามั่วผมจะได้ติดคุกโชว์ให้คุณดูเลยไง (พวกเขาเห็นชื่อผมก็รู้แล้วครับว่าใคร ชื่อผมไม่โหล และผมใช้ชื่อจริงเสมอ ไม่ต้องเสียเวลาไปสืบเลยว่าใครที่ไหน)
ผมพยายามยกตัวอย่างและพูดด้วยภาษาที่เชื่อว่าพาคุณเข้าใจได้ง่ายที่สุดแล้ว ถ้านึกไม่ออก ต้องขออภัยจริงๆ แต่ให้ถามมาครับ จะพยายามอธิบายลงไปอีก ผมไม่หวง ไม่กั๊กครับ ผมอยากให้มีบุคคลากรระดับนี้ในบ้านเราเกิดขึ้นอีก มันมีน้อยมากอยู่แล้วจริงๆ การเป็นแต่ Programmer จะเก่งยังไง ก็แค่ผู้บริโภคนวตกรรม (ในมุมมองของผม) อย่างน้อยต้องมีความสามารถระดับสร้าง Compiler เองได้ จึงจะเป็นบุคคลากรที่ทำให้ชาติเริ่มต่อสู้ในสงครามเทคโนโลยีได้ครับ (นี่อย่างน้อยแล้วนะ ในมุมมองของผม)
ใครแถวนี้ จะช่วยอธิบาย ผมก็ไม่ขัดข้องนะครับ เพราะการพูดให้สั้นแล้วเข้าใจได้ง่ายนั้น ไม่ใช่ความสามารถของผม
==== มา Edit เพิ่ม ====
พอดีนึกได้ เพราะคุณอ้างถึง VC++ ทำให้เข้าใจได้ว่า คุณเป็น Programmer ที่ถนัดทาง x86 เลยจะยกตัวอย่างนี้เพิ่มแล้วกันครับ
คุณเคยเขียนโปรแกรม Interface กับ USB ไหมครับ? ผมอนุมานว่าต้องเคยแน่ๆ นะครับ แต่ตอนคุณเขียน ผมเชื่อว่าคุณคงใช้งานผ่าน Library สำเร็จรูปเอา ทีนี้... ผมอยากให้คุณลองเขียนโปรแกรมใช้งาน USB โดยตัวเอง ควบคุมขา D- D+ เอง ไม่ใช่ใช้งานผ่าน Driver ที่คนอื่นทำมาให้แล้ว เอาตามความเร็วมาตรฐาน USB 2.0 ด้วย คือ 480 Mbps นี่คือผมต่อให้มีฐาน Clock ที่แน่นอน ไม่ใช่วิ่งตามความเร็วสูงสุดที่ USB Chip สามารถเปลี่ยน State ของขา D- D+ ได้ (Keyword คือ Latch จะได้ไปค้นได้ครับ)
แค่นี้แหละครับ ลองเขียนให้แต่ละ Loop ทำงานที่พอดีเวลา 1/480,000,000 วินาทีดูครับ แล้วจะทราบว่า ยังมีอีกหลายกรณีนัก ที่หลีก Assembly ไม่พ้นแน่ๆ ชนิดที่ผมกล้าพูดว่า Assembly ไม่มีวันตายแน่นอน
480 ล้านรอบต่อวินาที ต่อให้ x86 CPU ที่ทำงานระดับ GHz แต่ถ้าเขียน Code ด้วยภาษาที่สูงกว่า Assembly ก็หน้ามืดล่ะครับ ที่จะทำให้พอดีได้ (Garbage จาก Compiler ทำนองที่ผมกล่าวไว้จะโผล่มาไม่ได้เลยไง) แค่เขียนให้ทำงานทันใน 1 คาบเวลาก็หืดขึ้นคอแล้วครับ พอมี Clock ให้ CPU ใช้ Process แค่ 2 Clock กว่าๆ ต่อความเร็ว CPU 1 GHz (1 GHz ก็เป็นไปไม่ได้แล้วล่ะ แค่ fetch คำสั่ง ก็เวลาไม่พอแล้วครับ ยังไม่ทันได้ประมวลผลเลย)
การเขียนตรงนี้ พวก Hardcore ที่ทำงานใน Layer แบบผมลงไป เรียกว่า Stack ครับ (เขียน USB Stack ใช้เอง - เป็นการให้ Keyword ไว้ให้คุณไปค้นได้อีกน่ะครับ)
อีกตัวช่วยสนับสนุนความมั่วของผมได้คือ คนที่เล่น MCU แถวนี้ (บางคนที่ Hardcore พอ) น่าจะเข้าใจที่ผมพูดได้ทั้งหมดทันที... ใช่ไหมครับ?
==== มา edit เพิ่มอีกครั้ง ส่วนที่ลืมอธิบาย ====
การปรับ Code เพื่อให้ Loop ทำงานที่เวลาเท่ากันพอดีในการทำงานที่ต่างกันตั้งแต่ 2 Code ขึ้นไป เรียกการกระทำนี้ว่า Process Synchronization Calibrating ครับ มันไม่ใช่ศัพท์เฉพาะครับ มันเป็นคำนามของกิริยา เหมือนคำว่า Walking นั่นแหละ ดังนั้น มันไม่มีในตำราแบบเป็น Topic เลยตรงๆ ครับ บางครั้งเวลาคุยกัน ก็พูดสั้นๆ เลยว่า Timing หรือ Period tuning ก็ว่ากันไปแล้วแต่กลุ่มคนครับ
ผมว่าคุณกับผมเลิกตีกันเหอะ
UltimaWeapon Thu, 12/04/2012 - 10:41
In reply to ไอ้ที่คุณว่ามัน ฉลาดจะตาย by จักรนันท์
ผมว่าคุณกับผมเลิกตีกันเหอะ เพราะมันคุยกันคนละ Architecture ละ ผมไม่ใช่สาย Micro controller หรือ Hardware อย่างคุณ
คุณบอก Assembly น่าจะยังใช้เยอะ นั่นเพราะชีวิตคุณติดกรอบอยู่แต่ในโลกของ Micro controller นั่นละคับ คุณลองมองดูโลก PC ดูสิ โปรแกรม Unix ส่วนมากก็ C กันหมด มันไม่มีใครมาบ้าเขียน Assembly ทั้งโปรแกรมหรอก ซึ่ง Driver ของพวก Unix/Windows ก็เหมือนกัน Code แทบจะทั้งหมดก็เป็น C
"นั่นคือ Native ที่ได้หลังจาก Load ค่าจาก Memory ใส่ eax ไปตรวจสอบแล้ว ซึ่งมีขนาดถึง 16 bit" eax 16 บิทเหรอคับ? ไม่ใช่ละ 32 บิทตะหาก คุณไม่ใช่สาย x86 คุณอย่ามาพยายามทำตัวเอาชนะและบ้าพลังเลยคับ เหมือนกับการพยายามทำตัวเอาชนะว่า Assembly มันไม่ควรจะตกอันดับขนาดนั้น OK คุณเก่งมากในสาย Micro controller/Hardware
เรื่องเชคแค่บิทแรก x86 ไม่มีอะไรดีเท่า test แล้วละคับ หรือถ้าคุณว่ามี ก็เอามาให้ผมดูหน่อย
ผมว่าถ้าคุณจะดูถูกความสามารถของ VC++ ขนาดนั้น วามันสร้าง Garbage เยอะ ลองมาหัดเล่นสาย x86 ดูแล้วลองคอมไพล์แบบ Performance Optimization + Link-time code generation ดู คุณจะได้เห็นกับตาตัวคุณเองว่า Garbage มันแทบจะไม่มี นอกจากจะเป็น Garbage ที่เกิดจากการเขียน Code ไม่เป็นเอง
หรือถ้าคุณยอมรับแม้แต่ Garbage เล็กๆน้อยๆขนาดนั้นไม่ได้ คุณก็เขียนโปรแกรมใหญ่ๆด้วย Assembly ไปเถอะ อย่างเขียนระบบ OS ที่ใหญ่เท่ากับ Linux/Windows ด้วย Assembly ทั้งหมด (ซึ่งไม่มีใครเขาบ้าพลังเพื่อจะทำแบบนั้นหรอก) หรือไม่ต้อง OS ก็ได้ แค่เขียนเว็บใหญ่ๆด้วย Assembly ก็พอละ
สรุปทั้งหมดที่ผมจะอยากอธิบายคือ มันปรกติแล้วที่ Assembly จะร่วงอันดับขนาดนั้น เพราะมันมีแค่งานส่วนน้อยเท่านั้นที่ต้องการใช้มัน ใช่ อย่างที่คุณว่า มันไม่มีวันตายแน่นอน แต่มันก็ไม่มีวันที่จะขึ้นมาอยู่ในอันดับหนึ่งได้อีกแล้ว
อ้าว... ผมว่าคุณเข้าใจผิดนะ
จักรนันท์ Thu, 12/04/2012 - 12:56
In reply to ผมว่าคุณกับผมเลิกตีกันเหอะ by UltimaWeapon
อ้าว... ผมว่าคุณเข้าใจผิดนะ คุณตั้ง Guard อะไรหรือครับ? ผมไม่ได้ตีกับคุณนะ แล้วประเด็นที่ผมออกความเห็นคือ ผมไม่คิดว่า Ada จะอยู่ลำดับที่สูงกว่า Assembly ด้วยเหตุผลที่ผมเห็นว่า Assembly ยังมีส่วนใช้งานมากกว่า Ada เพราะแม้มี C ก็ตาม ยังมีหลายอย่างที่ Compiler ทำแทนไม่ได้?!?
ผมงงท่านล่ะสิ?!?
ชีวิตผมไม่ได้ติดอยู่ในโลกแคบแน่นอนครับ บริษัท (ของ) ผมรับงานออกแบบ Consumer prototype ของหลายสิ่งหลายอย่าง มีแม้กระทั่งที่ใช้อยู่ใน PC ของคุณ บน Motherboard ของคุณเลยด้วยซ้ำ ไปตลอดจนถึง Server ในปัจจุบันผม Outsource งานระดับ High Level Language ออกไปเกือบหมด (ภาษา Script ออกไปได้หมด 100% แล้ว ส่วน C ยังใช้อยู่ จึงเรียกว่าเกือบหมด) ในบริษัทผม มอง Compiler เป็นเครื่องมือลดภาระในการเขียนโปรแกรมครับ แต่เวลา Inspect งานแล้ว 50% ผมตรวจงานกันที่ Native code เลย ไม่ได้ตรวจที่ Source code ครับ จึงทำให้มีประสบการณ์กับ ความสู่รู้ ของ Compiler หลายตัว
คุณพูดไม่ผิดครับ ที่คุณใช้คำว่า แทบ ทั้งหมดก็เป็น C ถ้าคุณพูดว่าทั้งหมดเป็น C ล่ะก็ผิดแน่ๆ แต่จะขอถามว่า ไม่ได้มีตรงไหน ที่ผมบอกว่า ทั้งหมดเขียนเป็น Assembly เลย เหตุที่ผมเห็นว่า Assembly ยังจำเป็น เพราะผมยกส่วนที่แม้จะเขียนด้วย C ก็ไม่สามารถบังคับให้ Native ออกมาตรงประสงค์ได้ จึงทำให้ Assembly ยังคงอยู่ และจำเป็นถึงขนาดแม้ใน VC++ หรือ C Compiler ตัวอื่นๆ ก็ตาม ก็ยังสามารถ Inline Assembly code ลงไปใน Source ได้เลยโดยตรง นั่นแปลว่า มันยังจำเป็นจนถึงขนาดผู้สร้าง Compiler เองก็ทราบดี
ส่วนที่คุณยกมา ผมพิมพ์ผิด คุณจะจับผิดที่พิมพ์ผิดหรือครับ งั้นคุณช่วยดูตรงที่ผมพิมพ์ไม่ผิดหน่อยนะครับ ที่ผมกล่าวต่อเนื่องไปอีกว่า "จะต้อง Fetch อ่าน Native code ก่อน Process ถึง 8 byte" นั่นหมายความว่าอะไรครับ?
fetch คำสั่ง 4 byte และ eax อีก 4 byte เท่ากับ 8 byte... ในใจผมคิดเป็น byte ที่ CPU ต้อง fetch ไป ความันมือที่กำลังพิมพ์ ซึ่งติดพันกับกำลังคิดในใจถึง x86 มันเลยพิมพ์ผิดออกไป 1 จุด ดังนั้นมันไม่ได้มีผลอะไรกับ Reply ผมดอกครับ
ผมไม่ได้เอาชนะครับ ไม่ได้บ้าพลัง ผมอยู่ในวงการมาตั้งแต่ก่อนยุค 8080 ผมออกแบบสร้างเองได้ด้วยตัวเองทั้งหมด ผมส่งแบบสั่งทำ Chip เองกับทั้ง Microchip, Ti, Freescale, Intel และ Samsung ซึ่งมีผมเป็นบริษัทเดียวในประเทศไทย (ที่เป็นของคนไทย 100%) ที่มีความสามารถทำได้แบบนั้น นอกนั้นเป็นแค่ Dealer/Distributor นำเข้า Chip สำเร็จรูปมาขายเท่านั้นครับ ถ้าผมจะเอาชนะ ก็คงกร่างมานานแล้ว ผมไม่ใช่เด็กๆ แล้วนะครับ
ผมยังยืนยันให้คุณกลับไปอ่านใหม่ ว่าผมแปลกใจที่.... Assembly อยู่อันดับหลัง Ada
การยกตัวอย่าง ไม่ได้เป็นการโจมตี C แต่อย่างใด ผมเขียนได้ทุกภาษา ไม่มีภาษา Computer ใดๆ ในทุกๆ Platform เป็น Black magic box สำหรับผม ทุกๆ ภาษา ทุกๆ Compiler คือ Tools ในการอำนวยความสะดวกและความรวดเร็วในการ Coding ทั้งสิ้นครับ ทุกภาษาผมจึงใช้เวลาเพียงสัปดาห์เท่านั้นในการศึกษาและเริ่ม Coding มันได้
ประเด็นที่ว่า Check bit ไม่มีอะไรดีเท่า test นั้น คุณก็หลงประเด็นของผมนะครับ ผมยกตัวอย่างว่า Assembly จำเป็นกว่า Ada ยังไง เพื่อแสดงให้เห็นว่า แม้ใช้ C ก็ตาม ก็ยังทำให้ Assembly หายไปไม่ได้... แต่... กลับกันคือ เมื่อมี C แล้ว มันแทนที่ Ada ได้ 100% จึงสงสัยยิ่งนักว่า ทำไม Ada อยู่ก่อน Assembly
Get the point ไหมครับ?
ถ้าอธิบายผมได้ว่า Ada มันไปอยู่งานไหนบ้างให้ผมรู้เพิ่มสิ โอเคเลยครับ ผมอยากรู้!
ย่อหน้าถัดมา คุณก็ยังระมัดระวังตัวด้วยคำว่า "Garbage มันแทบจะไม่มี" เมื่อมีคำว่าแทบ... ผมก็ไม่ต่อประเด็นล่ะนะครับ... เพราะเหตุผลของผมที่ทำไมแม้ VC++ เอง ก็ยัง Inline Assembler ลงไปได้ ก็เพราะ มันทำให้ ไม่มี Garbage เลย ไม่ได้นั่นเอง
ย่อหน้าถัดมา... ครับ ผมยอมรับไม่ได้ แม้แต่ Garbage เล็กๆ น้อยๆ ครับ ผมยกตัวอย่างเพิ่มให้ก็ได้... คุณลองเอา Modem ที่ใช้ Connexant chip มานะครับ มา Re-engineering ดูนะครับ แล้วดูใน Driver ของมัน เวลาที่ Initalize ทุกครั้ง ดู Native ที่มัน Load ลง Chip เพื่อทำงานนะครับ ทำไมเขาเขียนด้วย Pure C ไม่ได้?
นั่นเพราะ Connexant ใช้ DSP ในการ Modulate สร้างสัญญาณเสียง Modem ทำงานในเชิง Software ล้วนๆ ซึ่งไม่สามารถเขียนด้วย Pure C ให้แม่นยำทางเวลาได้ครับ
นี่ผมยกตัวอย่างด้วย Windows Driver ที่คุณถนัดเลยนะครับ
ย่อหน้าสุดท้าย ผมขอย้ำว่า... อธิบายผมที ทำไม Ada อยู่อันดับก่อน Assembly ครับ...
มีตรงไหน ที่ผมสงสัยว่า Assembly ควรอยู่อันดับ 1 ??? (และมันไม่เคยได้อยู่อันดับต้นๆ เลยด้วยซ้ำ อย่างน้อยก็ในรอบ 25 ปีล่ะ ก่อนหน้านั้น ไม่กล้า Confirm)
จะผลักไสให้ผมไปอยู่ขอบทำไมครับ ผมอยู่สายกลาง... พูดอย่างเป็นกลาง ไม่ได้อยู่ข้างภาษาไหนๆ เลย ผมใช้ได้หมดครับ วิศวกรคอมพิวเตอร์ที่แท้จริงในความหมายของผมคือ ต้องเห็น Programming Language เป็นแค่ Tool ครับ ไม่งั้นเป็นลูกน้องผมไม่ได้ จะได้รับค่าตอบแทนวันละ 15,000 ขึ้นไปจากผมได้ ต้องคิดและทำได้ขนาดนั้นครับ
OS ผมสร้างใหม่กันเป็นประจำอยู่แล้วครับ.. เรื่องจริง.. งานไหนๆ ออกแบบเสร็จ ก็ต้องทำอยู่แล้ว เพราะอะไรน่ะหรือ... คืองี้...
ก่อนจะร่ายต่อ... คุณเข้าใจประเด็นหรือยังครับ? เลิกคิดว่าตัวเองกำลังงัดข้อกับผมเถอะ มาเสวนาแลกเปลี่ยนความรู้/ความคิดเห็นกันดีกว่า ผู้อ่านคนอื่นได้ประโยชน์ไปด้วยครับ ผมไม่ได้เอาชนะอะไรใคร หรือภาษาใดๆ ทั้งนั้นครับ
ร่ายต่อ...
เพราะสิทธิบัตรครับ
เมื่อบริษัทผมรับงาน... เกริ่นก่อน... ปัจจุบัน ผมรับงานต่างชาติ 100% ครับ ในประเทศไม่รับแล้ว ดูแลเฉพาะลูกค้าเก่ากันมา เพราะมันเป็น Connection กว่า 10 ปีกันแล้วทั้งนั้น ทิ้งไม่ได้ ด้วยความที่บุคคลากรในระดับ Hardcore ทุกวันนี้ หายากกว่าเมื่อ 20-30 ปีก่อนเยอะ ผมก็ต้อง Outsource งานที่มีบุคคลากรในตลาดทำได้อยู่แล้วออกไปให้มากที่สุด เท่าที่จะมากได้ แต่งานที่ Outsource ออกไปได้น้อยมากคือ ใน Layer ที่เริ่ม Interface กับ Hardware ลงไปจนถึงตัว Hardware design แต่เมื่อก่อน ที่เราเริ่มต้น งานยังไม่เยอะ เราทำทั้งหมดแหละครับ ตั้งแต่ยังไม่มี Windows เกิดขึ้น ลูกค้าไม่เอา OS/2 (ตอนนั้น OS/2 ก็ยังห่วย) เราก็ต้องเขียน OS ใช้เอง บลาฯ บลาฯ บลาฯ.... เกริ่นพอแล้ว...
ดังนั้น ตัว Frontend application ใน Layer ที่คุณทำ ถึงแม้ผมจะ Outsource ออกไปหมดก็ตาม แต่ไม่ได้หมายความ บริษัทผมจะไม่ได้แตะของใน Layer นั้นอีก ทุก OS ที่ออกมา เราต้องชำแหละครับ ทุก Compiler ทุก Technology ครับ แต่ให้เราทำ Frontend application ตอนนี้เราไม่ทำครับ ความรู้ความชำนาญเราสูง แต่คนเราไม่พอ ยังไงก็ยังมีแค่ 2 มือ 1 หัว 24 ชั่วโมงต่อวันต่อคนอยู่ดี
ยิ่งในไทยยิ่งยาก ผมจึงเปิดสาขาไว้อีก 4 ประเทศ เอางานออกไป R&D นอกบ้านดีกว่า... (คนไทยเป็นยังไง ผมขอไม่เปิดประเด็นแล้วกัน เดี๋ยวเรื่องยาว)
เรื่องสิทธิบัตร นั่นเอง ที่ทำให้ แม้แต่ USB Stack เรายังต้องเขียนขึ้นเองครับ เมื่อลูกค้าสั่ง Design ออกมา ผมจะเอา Code เก่าๆ หรือ Code ของคนอื่นมายำยัดใส่ไม่ได้ครับ หรือแม้แต่ใช้ Library/Driver ของคนอื่นก็ไม่ได้ เว้นแต่ลูกค้าจะยอมเอง เพราะเมื่อเขานำไปผลิตเป็น Product จริงของเขาแล้ว มีปัญหาสิทธิบัตรตามหลังมา ผมได้ล้มละลายทันทีครับ!!
แค่ทำ MP3 Decoding QFN Chip เมื่อ 6-7 ปีที่แล้ว ก็ยุ่งตายแล้ว เพราะจะโดน Lame เก็บตังค์ ทั้งๆ ที่ Code เราเขียนใหม่เองหมด ไม่ได้มีลอกแม้แต่น้อย....
นี่แหละ ทำให้ Team ผมมีความชำนาญสูง ในการ Re-engieering ตรวจสอบงานที่ผลที่เป็น Native ครับ
ผมมอง Computer เหมือนกันหมดครับ!! ไม่มี Architecture สำหรับผมในการคิด คำว่า Architecture จะมีในความคิดเมื่อตอน Design เท่านั้นครับ เวลาตรวจงาน ก็กาง Instruction Table ตรวจกันเลย Processor ไหนๆ ก็คือ Processor ทั้งนั้นในสายตาผมครับ
แต่เรื่องหนึ่งคือ ด้วยความเคารพ ผมกลับเห็นว่าผมอยู่ในกรอบที่มีกรอบของคุณเป็น Subset นะครับ เพราะ Software คือ Subset ของ Hardware เสมอ (เป็นความเป็นจริงสำหรับผม จะไม่เป็นข้อเท็จจริงของใคร ผมขออย่าเปิดประเด็นใหม่เลยนะครับ) โลกของ PC ก็เป็น Sub world ของโลก Processor และโลก Processor ทั้งหมดก็ยังเป็น Sub world ของโลก Analog Transistor ธรรมดาๆ นี่แหละ แต่เวลาผมคิด (เรื่อง Software) ผมก็ไม่ได้บ้าคิดจากระดับ Transistor ขึ้นมานะครับ ผมจะคิดจากระดับ Logic gate ขึ้นไป (คือเริ่มจากจุดที่เป็น Digital แล้วขึ้นไป)
ขอแค่นี้ก่อนแล้วกันครับ เพราะถ้าคุณยังยืนที่เดิม คือคิดว่ากำลัง ตี กับผมอยู่เหมือนเดิม ผมพิมพ์ต่อไป ก็รังแต่จะทำให้คุณยิ่งเกิดทิฐิเข้าไปอีก ถ้าเข้าใจกันแล้ว มันค่อยน่าเสวนากันหน่อย
ย้ำอีกทีทิ้งท้าย.....
เหตุใด Assembly จึงตกลงไปถึงอันดับ 24 โดยเฉพาะไปอยู่หลัง Ada
ถ้าช่วยชี้แจงข้อสงสัยให้ผมได้ ผมยินดีครับ
ผมกำลังงงฮะว่าที่เถียงกันเนี่
Thaitop_BN Fri, 13/04/2012 - 02:39
In reply to อ้าว... ผมว่าคุณเข้าใจผิดนะ by จักรนันท์
ผมกำลังงงฮะว่าที่เถียงกันเนี่ย ประเด็นคืออันดับความนิยมของภาษา หรือภาษาไหนเจ๋งกว่ากันกันแน่?
หากจะวิเคราะห์กันเรื่อง"ความนิยม" ผมว่าใช้ข้อมูลทาง"เทคนิค"อย่างเดียวไม่เพียงพอหรอก ต้องใช้ข้อมูลด้าน"สังคม"ร่วมด้วย เพราะเรากำลังพูดถึง"ความนิยมของกลุ่มคน" ซึ่งต่างคนก็ต่างสภาพแวดล้อมครับ
งั้นสงสัยคงจะมีแค่ผมคนเดียวมั
UltimaWeapon Fri, 13/04/2012 - 14:06
In reply to อ้าว... ผมว่าคุณเข้าใจผิดนะ by จักรนันท์
งั้นสงสัยคงจะมีแค่ผมคนเดียวมั้งที่อ่านแล้วรู้สึกว่าตีกัน (ดราม่า) อยู่
เอาเถอะคับ ขี้เกียจจะเถียงละ ขี้เกียจจะอ่านอะไรยาวๆด้วย สำหรับผมคุณก็แค่อีโก้สูง บ้าพลัง พยายามจะเอาชนะ เพราะไม่อยากจะเสียหน้าที่คนอื่นรู้ว่าคุณเก่ง แค่ศัพท์ที่คุณใช้อย่าง "ความสู่รู้" มันก็บ่งบอกละ แล้วยิ่งที่คุณบอกว่าไม่ใช่เด็กๆแล้วยิ่งทำให้ผมรู้สึกว่าเป็นแบบที่ผมคิด
คุณอาจจะสวนกลับว่าผมอีโก้สูง พยายามเอาชนะเหมือนกัน ใช่คับ ตัวผมก็อีโก้สูง ผมรู้ตัวผมดี
"ความสู่รู้" ผมพูดถึง
จักรนันท์ Fri, 13/04/2012 - 16:08
In reply to งั้นสงสัยคงจะมีแค่ผมคนเดียวมั by UltimaWeapon
"ความสู่รู้" ผมพูดถึง Compiler นะครับ อย่างชัดเจน ไฉนคุณตีความเหมือนผมหมายถึงมนุษย์ (โดยเฉพาะคุณคงตีความหมายถึงตัวคุณ)
Compiler ไม่ใช่สิ่งมีชีวิตด้วยซ้ำ กับหมา แมว เวลามันสู่รู้ ผมจะพูดว่ามันสู่รู้ มันก็ไม่เห็นจะแปลก ไม่ได้หยาบคาย ความหมายก็ตรงตัว จะมีคำไหนที่ผมจะต้องใช้เพื่อถนอมน้ำใจ นุ่มนวล และสุภาพกว่านี้ได้อีก? โดยเฉพาะกับ Compiler ซึ่งไม่ใช่สิ่งมีชีวิตเนี่ย มันมีน้ำใจให้ผมต้องถนอมด้วยหรือครับ?
คุณคิดว่าผมมี Ego สูงเช่นที่คุณว่ามา...
ถ้าอย่างนั้น... อยากให้ผมสำแดง Ego จริงๆ ไหมครับ?
อยากเห็นคนเก่งจริงแสดง Ego ไหมครับ?
ขอผมมาสิครับ ผมจะยกตัวอย่างสัก Code หนึ่งให้คุณดูเลย ทั้งที่ผ่านมา ผมพูดแต่เรื่องที่ Compiler ทำไม่ได้ ทำให้ Assembly ยังต้องมีอยู่ และควรจะสำคัญกว่า Ada เพราะมี Pascal/Delphi/Kylix/FPC/Lazarus ขึ้นมาแล้ว ซึ่งเป็นภาษาที่วิวัฒนาการจาก Ada ขึ้นมาอีก ผมหลีกเลี่ยงมากที่จะพูดถึงข้อจำกัดของตัวภาษาเอง โดยเฉพาะเวลามาเจอหนุ่มไฟแรงแบบคุณ ที่มีความคิดว่า ภาษาใดภาษาหนึ่งคือที่สุดแล้ว ก็ยกตัวอย่างด้วย C Compiler เพราะรู้ว่าถ้าเอา Compiler ภาษาอื่น มีหวังได้เจอเด็กรุ่นหลังที่มั่นใจเกินเหตุแบบคุณมากมายกว่านี้อีก ผมคาดหวังว่าเซียน C ก็น่าจะรู้ข้อจำกัดของภาษาที่ตนเองชื่นชอบดี ว่า C ทำผลงานได้ Optimize ใกล้เคียง Assembly ที่สุดแล้ว แต่มันก็ได้แค่ใกล้เคียงครับ และคงไม่มาต่อล้อต่อเถียงกลายเป็นเอาตัวภาษามาแย้งกันแบบนี้ เพราะประเด็นผมอยู่ที่ ลำดับของภาษา โดยมีจุดสนใจที่ Assembly และ Ada โดยยก C Compiler มาเป็นตัวอย่างว่า ทุกๆ C Code ในระดับ Hardware Interface ของทุก Architecture ทุก Platform ทุก OS ยังต้องใช้ Assembly อยู่ร่วมด้วยทั้งสิ้น ในขณะที่ Ada ไม่ได้มีเหตุให้ต้องมีภาษานี้เข้าไปแทรกอยู่ทุกอณูของ Computer เช่น Assembly ดังนั้นไฉนเลย Ada จึงได้ลำดับก่อน Assembly
ผมดูออกครับ ว่าคุณมั่นใจเหลือเกิน ว่าคุณเก่ง C มากๆ ผมหลีกเลี่ยงนะครับ ที่จะไม่แทงใจดำคุณตรงนี้ แต่ถ้าคุณอยากเห็น Ego ของคนเก่งจริง ก็บอกมาครับ ผมจะยกตัวอย่าง Code ง่ายๆ เลย ที่แสดงให้เห็นเลยว่า ไม่ว่า C Compiler ใดๆ ในโลกทั้งตอนนี้และในอดีต ก็ไม่สามารถผลิต Native code ได้ออกมา Optomize ไปกว่าการเขียน Code ส่วนนั้นเป็น Assembly ครับ
คุณบังคับให้ผมแสดง Ego ด้วยวาจาไม่งดงามของคุณเองนะครับ
ผมเห็นอยู่แล้ว ว่าคุณมั่นใจเกินเหตุ เจตนาจะไม่ฉีกหน้าคุณก็รักษาไว้มาตลอดนะครับ อีกทั้งเจตนาจะไม่ได้โจมตีตัวภาษา C เลยแม้แต่น้อย แต่ถ้าต้องการผมก็จะแสดงให้ดูได้ครับ ถ้าคิดจะเป็นเซียน C ก็ควรรู้ข้อจำกัดของภาษาที่ตัวเองเป็นเซียนด้วยสิครับ Code แบบไหนที่ C ไม่สามารถผลิตออกมาได้ เซียนจริงๆ ย่อมรู้ทุกคนครับ ผมถือว่าเป็น Basic ของทุกภาษาเลยนะ ที่ผู้ประสิทธิประสาทวิชาภาษานั้นย่อมสอนลูกศิษย์ไว้ ว่าภาษานั้นมีข้อจำกัดอะไรบ้าง
คุณมองว่าที่คุณเป็นเซียน C คือคุณกว้างกว่าผม ผมก็พยายามถนอมน้ำใจคุณ ชี้ให้เห็น ให้คิดได้เองว่าไม่ได้เป็นเช่นนั้น คุณเอา Architecture มาตีกรอบ ผมก็ถนามน้ำใจ ชวนออกมาให้เห็นอีกเหมือนกัน คราวนี้ผมจะถนอมน้ำใจน้อยลงหน่อยนะครับ... ดังนี้.. (คราวนี้ สอนมวยจริงๆ ล่ะ)
Assembly คือพื้นฐานของ Digital ครับ มันคือ Hardware แท้ๆ มันจึงสำคัญกว่าภาษาอื่นใดทั้งในโลก แต่ไม่ได้หมายความว่ามันจะได้รับความนิยมครับ
Architecture คือตัวเลือกครับ มนุษย์ต้องเป็นผู้เลือก Architecture มาใช้งานครับ Architecture ไม่ใช่ กรอบ ความคิดครับ Computer คือทาสของเราครับ
ภาษาอื่นใดทั้งหมด นอกจาก Assembly คือ Tool ในการอำนวยความสะดวกแก่ Developer ทั้งสิ้น เป็นการกระจายงาน เพื่อลดเวลาการสร้างงาน ในส่วนงานที่อะลุ่มอล่วยให้มี Garbage ได้ โดยเฉพาะ Frontend application บน PC Platform ซึ่งอะลุ่มอล่วยได้มากที่สุดในเวลานี้ เพื่อกระจายงานออกไปให้ได้มากที่สุด ให้ Programmer ต่อยอดงานได้ง่ายที่สุด ทำให้โลกสร้างบุคคลากรพันธุ์ Programmer ออกมาได้ง่ายขึ้น มากขึ้น ไม่ต้องเริ่มกันตั้งแต่ 0/1 เป็นผลให้เกิดการศึกษาในสาขา Software Programming โดยเฉพาะขึ้นมาได้
ถ้ายังเชื่อว่าผมมี Ego แบบทำลายคนอื่นเช่นที่คุณคิด ก็ขอมาครับ ผมจะเขียนตัวอย่างให้คุณดู คนมีความรู้ความสามารถสูงแบบผม ถ้าเป็นแบบที่คุณคิด คงโด่งดังในทางเลวร้ายไปทั่วแล้วล่ะครับ ลูกศิษย์ลูกหาผมก็มีทั่ว Asia แล้ว นี่ขนาดผมไม่มีประวัติเลวร้ายอะไรกับใครมาก่อนเลยจนใกล้ฝั่งแล้วนี่ ก็ยังมีคนไทยหมั่นไส้ผมเกิดขึ้นได้เองอยู่แล้ว(เช่นคุณ)
ผมไม่ได้กลัวเสียหน้าเลยนะครับ ด้วยความเคารพ ผมขอพูดตรงๆ จากใจเลยว่า ผมกลัวจะเป็นผู้ใหญ่รังแกเด็กครับ ถึงตอนนี้ยังไงก็ชัดว่าผมเก่งกว่าคุณแบบชนิดที่พูดได้ว่ามากมายนัก ผู้อ่านเขาอ่านยังไง มันก็จะออกมาเป็น ผู้ใหญ่รังแกเด็ก ครับ ดังนั้นอย่าบังคับให้ผมรังแกคุณเลย ขนาดตัวผมเองยังออกตัวเสมอว่า เหนือฟ้ายังมีฟ้า แล้วนี่คุณกล้าขนาด....
ผมชอบอ่านคอมเมนต์ตุณจัง
Yoeko Wed, 18/04/2012 - 06:12
In reply to "ความสู่รู้" ผมพูดถึง by จักรนันท์
ผมชอบอ่านคอมเมนต์ตุณจัง ได้ความรู้เข้ามาเต็มๆ ถึงแม้ผมจะไม่ได้เรียนสาย hardware มาเลย ได้เรียนแค่ microcom ก็ตาม แต่พยายามอ่านคอมเม้นต์ช้าๆ เพื่อรับความรู้ที่คุณจะสื่อออกมา ซึ่งสำหรับผมคุณถ่ายทอดประสบการณ์ได้ดีมากๆเลยครับ :) มีเรื่องราวแบบนี้ให้ผมอ่านได้จากที่อื่นหรือเปล่าครับ พอดีอยากหาความรู้เพิ่มใส่ตัว
ขอบคุณครับ
จักรนันท์ Wed, 18/04/2012 - 17:00
In reply to ผมชอบอ่านคอมเมนต์ตุณจัง by Yoeko
ขอบคุณครับ เจตนาตรงของผมก็คือเผื่อแผ่ประสบการณ์แก่คนรุ่นหลังนั่นแหละครับ เพราะความรู้ในตำราหาศึกษาได้ง่าย แต่ประสบการณ์ของคน หาศึกษาได้ยากกว่าครับ
ถึงเจตนาจะเป็นเช่นไร แต่ผมก็มีงานภาระหน้าที่ จึงเลือกที่จะสิงสถิตอยู่เพียงที่เดียวในแต่ละเวลาเท่านั้น เอื้อเฟื้อให้กับสังคม/วงการตามเวลาว่างที่จัดให้ได้น่ะครับ
หากจะค้นหาสิ่งที่ผมโม้ไว้ในอดีต ก่อนยุค Internet คงหายากแล้ว สมัยนั้นผมเขียนลงนิตยสาร Computer Review แต่ไม่ได้ชื่อจริง (เป็นยุคที่นิยมใช้นามปากกา เพื่อความเท่ห์) ผมมีเก็บไว้ในชั้นหนังสือประมาณ 30-40 เล่ม แต่ก็ไม่ครบทั้งหมด
หลังจากนั้น Modem เริ่มเร็วถึง 9,600 bps เริ่มเกิด BBS ในบ้านเรา ที่โด่งดังก็ของคุณไพศาล ของดร.โจ ผมจำไม่ได้แล้วว่าผมนิยมเชื่อมต่อ Server ของใคร เพราะเป็นสมาชิกไปเสียทุกที่ แต่จะเชื่อมต่อเพื่อรับส่ง Content/File/email เพียงที่เดียว โดยเลือกที่โด่งดังน้อยที่สุด เพราะสายโทรศัพท์จะว่างมากกว่าที่โด่งดังมาก อีกทั้งยังเป็นกำลังใจแก่ผู้ตั้ง Server เพราะ BBS นี่ เสียกับเสียเลยนะครับ ไม่สามารถ Make profit อะไรได้ เนื้อหาที่ผมโม้ไว้ใน BBS ผมไม่ได้เก็บไว้เลย ยกเว้น email ยังเก็บไว้ทั้งหมด แต่อยู่ในรูปแบบของ BlueWave Format ครับ ยุคนี้เป็นยุคที่เซียน Computer ใกล้ชิดกันมากที่สุดครับ อบอุ่น ตั้งแต่ Singapore ขึ้นมายันเมืองไทย โดยมี BBS ฝรั่งอยู่คนหนึ่ง ซึ่งมาอาศัย/ทำงานอยู่พัทยา เป็น Gateway หลักของไทยเรา เพื่อ Exchange กับ BBS ต่างประเทศ (ขออภัย ที่นึกชื่อไม่ออกจริงๆ ใครจำได้จะเสริมก็ได้นะครับ และถ้าผมจำผิดตรงไหน ก็ทักท้วงได้ครับ)
หลังจากยุค BBS เมื่อตอน Windows NT เกิดขึ้นมา ช่วงนั้นเป็นช่วงเงียบหายไปหลายปีของผม เพราะไปอยู่ต่างประเทศเสียมาก รับงานสร้างเครื่องจักร/หุ่นยนต์ต่างๆ ที่ใช้ในกระบวนการผลิตของโรงงานอุตสาหกรรม ร่วมกับวิศวกรมากมายหลายเชื้อชาติหลายบริษัท เป็นงาน Sub-contract จากบริษัทยักษ์ใหญ่ในวงการอีกที
กลับมาตั้งหลักที่เมืองไทยอีกครั้งเมื่อปี 39 (คราวนี้เริ่มจำได้ชัดขึ้น เพราะเวลาไม่ไกลมาก) เปลี่ยนวิธีคิดใหม่โดยทำงานเอาตัวเราเป็นศูนย์กลางแทน เพื่อลดการเดินทางลง เพราะมันเหนื่อย มันเบื่อ มันคิดถึงบ้านครับ ถึงแม้ตอนนี้ผมก็ไม่เคยได้ใช้ Passport จนหมดอายุเลย เล่มเต็มก่อนตลอด มันเอียนเครื่องบินจริงๆ นะครับ อย่าคิดว่าโชคดีได้เที่ยวบ่อยเลย (คนอื่นมักทักแบบนี้) เลยปฏิวัติการรับงานของตัวเอง เมื่อนั้นก็มีเวลาว่างขึ้นมาอีกครั้ง เพราะต้องสร้างฐานธุรกิจตาม Model ใหม่ของตัวเอง ได้ย้อนกลับมาดูในวงการของบ้านเรา พบว่าเซียนๆ หายไปเยอะ กลายร่างเป็น Business man เต็มตัวไปแล้วทั้งนั้น ท้อแท้กับคนรุ่นใหม่ในวงการอยู่หลายปีเพราะเจอแต่นักวิชาการเยอะแต่นักปฏิบัติแทบไม่มี (รู้กว้าง แต่ไม่ลึกซักอย่าง เหมือนเป็ด) จนกระทั่งเกิด Grand Linux และ LinuxTLE ผมจึงไปสังกัด opentle.org อยู่พักใหญ่ ตลอดช่วงที่ LinuxTLE ยัง Base อยู่บน Redhat/Fedora ครับ ก็คงหาอ่านในนั้นได้พอสมควร
เมื่อ LinuxTLE เริ่มจาง ไปเป็น SIS คำถามต่างๆ ใน Board ก็เริ่มลอยขึ้นไปในระดับ User/Implementor และบังเอิญได้พบ Link ของที่นี่ จึงตามมาดู ชอบใจ Concept ของเจ้าของ Web จึงย้ายมาที่นี่ครับ
ยินดีครับ ที่มีคนจับเนื้อหาสาระในข้อเขียนของผมได้ ผมจะ "บ้าพลัง" เพิ่มให้เพื่อเป็นประโยชน์ต่อผู้อ่านไว้เลย เพราะเชื่อว่า น่าจะมีผู้อ่านที่อยากทราบแล้วล่ะ ว่าที่ผมบอกว่า "ข้อจำกัดของภาษา" คือตรงไหน แต่อาจไม่กล้าถาม (เพราะดูเหมือนผมจะเป็นคนดุกระมัง)
เอากรณีเดียวก่อนนะครับ เดี๋ยว Blog ระเบิด แล้วจะโดนคุณ lew, mk เขาไล่ตะเพิดเอา ประมาณว่าเว็ปข่าว ไม่ใช่เว็บโชว์พาว... (ขอใช้ศัพท์วัยรุ่น กัดตัวเองดักไว้หน่อยนะครับ กันเด็กรุ่นใหม่หมั่นไส้แล้วเปิดประเด็นกับผมอีก)
ภาษาที่สูงกว่า Assembly ย่อมมี Overhead เสมอครับ กรณีแรกที่จะเล่าเลยคือ เรื่อง Register ครับ ที่ถ้าใช้ภาษาสูงกว่า Assembly แล้ว ไม่มีทางใช้ Register ได้อย่างเต็มประสิทธิภาพใน Processor ส่วนใหญ่ โดยเฉพาะ PC นี่แหละครับ ตัวดีเลย...
ยกตัวอย่างเลย.... สมมติ C Code เป็นดังนี้... (สมมติหยาบๆ นะครับ)
int i;
int j;
for (i = 0; i < 10; i++)
for (j = 0; i < 20; j ++)
target [i,j] = bla... bla....;
Native code ที่ได้จะมีกระบวนการประมาณนี้ (หยาบๆ อีกเช่นกัน - ระแวงการจับผิดเลยนะเนี่ย)
ทำ eax เป็น 0
mov [Address ของ i],eax // เอาค่าใน eax ไปใส่ใน i
ทำ eax เป็น 0 อีก // เข้า Loop แรก
mov [Address ของ j],eax // เอาค่าใน eax ไปใส่ใน j
อ่านค่าจาก Address ของ i // เข้า Loop ที่สอง
อ่านค่าจาก Address ของ j
เอามากำหนด Pointer เพื่อไปยัง target ที่ Array [i,j]
เข้าสู่กระบวนการ... เตรียมค่าให้ target
mov [Address ของ j],eax // เอาค่าใน j ไปใส่ใน eax
inc eax // เพิ่มค่า eax
mov eax,[Address ของ j] // เอาค่าใน eax ไปใส่ใน j
ตรวจสอบ eax ว่าเท่ากับ 20 หรือยัง ถ้ายังก็ย้อนไป 5)
mov [Address ของ i],eax // เอาค่าใน i ไปใส่ใน eax
inc eax // เพิ่มค่า eax
mov eax,[Address ของ i] // เอาค่าใน eax ไปใส่ใน i
ตรวจสอบ eax ว่าเท่ากับ 10 หรือยัง ถ้ายังก็ย้อนไป 3)
ข้อจำกัดของภาษาสูงคือ จะทำการ Clear การใช้งาน Register ก่อน Process ในแต่ละ Statement เสมอ เพื่อป้องกันการเกิด Bug จากความไม่รอบคอบของผู้เขียนภาษานั้น เพราะไม่ใช่สิ่งที่เป็นเป้าหมายของภาษาอยู่แล้ว ตัวภาษาถูกออกแบบมาเพื่อให้ผู้เขียนได้ Comfortable ขึ้น ข้อควรระวังจะได้ลดลง เขียนง่ายขึ้น สบายขึ้น ดังนั้นจึงเป็น Overhead เกิดขึ้นเสมอ....
เกิดขึ้นอย่างไร... ดู Process ต่อไปนี้ที่ทำงานเหมือน C Code ข้างบน เมื่อเป็น Assembly ใน x86 นะครับ...
Clear bx เป็น 0
push bx // เก็บ bx ลง Stack // เข้า Loop แรก
Clear cx เป็น 0
push cx // เก็บ cx ลง Stack // เข้า Loop ที่สอง
เตรียมข้อมูลให้ target ตามสบาย เพราะ cx และ dx ถูก Push ลง Stack ไว้แล้ว , สมมติว่าเตรียมใส่ ax แล้วกัน
pop cx
pop bx
เอาค่า ax ใส่ใน target ที่ Offset ตำแน่ง [cx,dx] // ถ้าไม่ใช่ x86 แล้ว หลาย Processor โดยเฉพาะ SoC ทั้งหลายสามารถอ้างถึง SRAM ได้โดยตรงโดยไม่ต้องกระทำค่าบน Registor ก่อนด้วยครับ
test cx ว่าได้ 20 หรือยัง ถ้ายัง ก็ goto 4)
test bx ว่าได้ 10 หรือยัง ถ้ายังก็ goto 2)
แจ๋มเลยไหมครับ? ข้อจำกัดแรกของภาษาสูงที่ผมอธิบาย คือคุณไม่สามารถใช้ Registor ได้อย่างเต็มที่และมีประสิทธิภาพครับ ภาษาสูงไม่ให้คุณเข้าถึงการกำหนด Registor ใดๆ โดยตรงทั้งสิ้นครับ มันเป็นนโยบายหลักของภาษาสูงอยู่แล้ว คือทำให้ง่ายในการเขียนครับ แลกกับ Overhead เข้าไปแทน
ปกติคุณใช้ Loop กันประจำอยู่แล้ว ตั้งตัวแปร Temporary กันประจำเพื่อนับ Loop กันอยู่แล้ว แต่ตัวแปรเหล่านั้น ภาษาสูงจะใช้หน่วยความจำจริงๆ ในการเก็บ และต้อง Load ไป Load มาระหว่าง Register กับ Memory ในตำแหน่งนั้นเสมอๆ ตลอดเวลา ซึ่งไม่มีความจำเป็น ในขณะที่เมื่อเขียนเป็น Assembly เราสามารถใช้ Registor ที่มีทั้งหมดได้ ซึ่งทำให้ความเร็วสูงกว่าภาษาสูงอีกหลายเท่าตัว (ถึงเป็นหลายร้อยเท่าตัวเลยทีเดียว เช่นใน Code ตัวอย่างที่ผมอธิบาย) เพราะการกระทำใน Registor อยู่ในภาย Processor เอง แต่การเคลื่อนข้อมูลกับหน่วยความจำ ต้องผ่าน Memory Bus ครับ มี Delay time ตามความเร็ว Bus และหน่วยความจำเอง
ทุก Statement ของภาษาสูง จะได้ Native code ที่ทำการ Clear การใช้งาน Registor ทุกตัวเสมอ ไม่ให้ข้าม Statement เพื่อไม่ให้เกิด Bug นี่เป็น Overhead แรกที่ผมนำมาอธิบายเพราะเป็น Overhead ที่มีมากที่สุดของภาษาสูงครับ (ย้ำว่า Overhead และ Garbage คือคนละคำกันนะครับ ทำความเข้าใจดีๆ)
ยิ่งโดยเฉพาะ PC แล้ว มี Register ให้ใช้หลายตัวเชียว แต่คุณจะไม่สามารถควบคุมให้ใช้ Registor ทั้งหมดได้เต็มประสิทธิภาพเลย สำหรับ Processor ที่มีเพียง Registor เดียว ก็จำเป็นต้องอาศัย Momory เหมือนกันครับ (ไม่มีเหลือแล้วมั๊งในปัจจุบัน Processor ที่มี Registor ให้แต่ตัวเดียวเนี่ย)
คุณคงนึกในใจว่า แล้วมีตรงไหนบน PC หรือ ที่ต้องเขียนขนาดนี้?
มีครับ เช่น... Display driver ไง...
ลอง Re-engineering ดูสิครับ เลือกเอา nVidia driver มาก็ได้ เอาบน Windows นี่เลยที่คุณผู้อ่านส่วนใหญ่ถนัดกันนี่แหละ.... พวกนี้ต้องการความเร็วสูงมากอยู่แล้ว (Render)
ลองคิดถึงว่า เมื่อคุณต้องการลดความสว่าง (ทำ Fade out) ในภาพ 3D ที่กำลังแสดงผลอยู่ทั้งภาพ ด้วยลดค่า R,G,B เพียงแค่ 1 เท่านั้น ของภาพหลังจากที่ GPU Render แล้วออกมาไว้ใน Video buffer เป็น 2D แล้วและกำลังส่งผลต่อไปยัง Buffer ที่จะให้ Circuit นำไปแสดงที่จอภาพต่อไป....
คุณจะ....
ลดค่า R, G, B ของทุก Pixel ด้วยการเขียน Code ใน Driver เป็นภาษาสูง ซึ่งต้อง Load ไป/มา กับ System memory มันตลอดทุก Loop แต่ละ Loop ต้อง Load ไป/มาหลายๆ ครั้ง หรือเปล่าครับ?
nVidia คงขายไม่ออกเป็นแน่แท้.....
และเหตุนี้เอง ความที่ผู้ที่นำ GPU ไป Implement ต่อแต่ละรายมัก Optimize Code ได้ไม่ดีพอ เช่น Asus, Gigabyte ซึ่งก็ต้องเขียน Driver ของตนเองขึ้นมาขายพร้อมกับ Card ส่งผลให้ nVidia พบว่ารีดศักยภาพได้ไม่เต็มที่ จึงทำให้ nVidia เองต้องตั้งทีมเขียน Driver สำหรับ GPU ของตนเองขึ้นมาซึ่งใช้ได้กับ Card ส่วนใหญ่ที่ใช้ GPU ของตน มีความ Optimize มากกว่า คือ Optimize ทั้ง Code และ Optimize Algorithm ด้วย
และส่งผลให้ ในกรณี Linux นั้น nVidia จึงไม่เต็มใจ Open source ทั้งหมดออกมา เพราะการ Open source ก็เท่ากับการเปิดเผยเคล็ดทาง Algorithm ด้วยนั่นเอง นี่ผมถือเป็นโอกาสได้อธิบายข้อข้องใจที่ผมผ่านตาที่คนสงสัยว่า nVidia หวงอะไรนักหนา?
การเปิด Code นั้นไม่ส่งผลต่อความลับในตัว GPU ของ nVidia ครับ แต่มันเปิดเผยการเร่งความเร็วที่ได้จากการ Coding และยังเป็นคำตอบที่ว่า ทำไม nv Driver แบบ Open source บน Linux ที่ xorg ทำกัน จึงยังไม่สามารถทำให้ได้ศักยภาพอย่าง Code ของ nVidia เองบน Windows Driver (ก็ nv เขียนเป็น Pure C ก็คงรอไปชาติหน้าเลยมั๊ง อาจจะได้ความเร็วไล่ทัน Windows ได้)
เวลาผมหมดแล้ว รู้สึกค้างคาในการอธิบายอย่างไรไม่รู้ แต่ต้องทำงานก่อนล่ะครับ ขอไว้เท่านี้ก่อน
ขอขอบคุณสำหรับความเห็นดีๆ
Virusfowl Fri, 20/04/2012 - 21:40
In reply to ขอบคุณครับ by จักรนันท์
ขอขอบคุณสำหรับความเห็นดีๆ อีกคนครับ ผมเข้าใจว่าเวลาของคุณมีค่ามากกว่าจะมาใช้ในการโต้เถียงกับคนที่ไม่เข้าใจวัตถุประสงค์ของการ "ถกกันทางวิชาการ" ในนี้แน่ๆ แต่การที่คุณสละเวลาอันมีค่าและเขียนอธิบายอย่างชัดเจน น่าจะทำให้คนที่เปิดใจอ่าน ได้เปิดโลกให้กว้างมากขึ้นอีกโขเลยล่ะ (ผมก็หนึ่งในนั้น)
ผมชอบความเห็นของคุณนะครับ ถึงจะมาโพสต์ไม่บ่อย แต่ แต่ละครั้งให้ความรู้มากทีเดียว อ่านแล้วรู้สึกหนัก ในด้านประสบการณ์ และความรู้(จริง) ต่างจากการให้ความเห็นของหลายคนสมัยนี้ ที่เน้นหนักไปแต่ด้านอารมณ์ ซึ่งไม่ให้ประโยชน์ใดๆ ต่อสังคม...
ขอบคุณอีกครั้งครับ :)
ป.ล. น่าจะหาเวลาเขียนประสบการณ์ออกมาเป็นบล็อกหรือหนังสือบ้างนะครับ สิ่งที่สั่งสมมาจะได้ไม่เลือนหายไปกับกาลเวลา...
ยินดีครับ ดีใจที่ได้ทราบว่า
จักรนันท์ Sat, 28/04/2012 - 15:21
In reply to ขอขอบคุณสำหรับความเห็นดีๆ by Virusfowl
ยินดีครับ ดีใจที่ได้ทราบว่า ข้อเขียนของผมยังมีผู้เห็นประโยชน์อยู่
สำหรับเรื่องเขียน Blog ผมไม่ถนัดครับ ผมมักจับประเด็นตามสมัยนิยมและอยู่ในแนวทางที่ตัวเองเชี่ยวชาญ ถ้าให้ผมใช้ตัวเองเป็นศุนย์กลาง ตั้ง Topic ขึ้นมาเขียนเองแบบ Blog style ผมก็จะไม่รู้ว่าจะเริ่มที่ตรงไหนดี มันมีเรื่องราวเยอะแยะไปหมด แม้กระทั่งสมัยที่เขียนบทความลงหนังสือ ก็จะอาศัยจับประเด็นในวงการตอนนั้นขึ้นมาครับ ดังนั้นถ้าผมสร้าง Blog มันคงออกมาสะเปะสะปะทีเดียว
และยังมีเหตุผลทางด้านเวลา ที่ผมไม่สามารถแบ่งเวลาให้ได้พอที่จะดูแลถึงขั้นทำ Blog ของตัวเองได้
ถึงกระทั่งหนังสือ สมัยก่อนพิมพ์ด้วย RW แล้วส่งไฟล์ให้ Edtior ก็พอแล้ว ทางนั้นจะเกลาให้ เรียบเรียงใหม่ ตรวจแก้ไข จัดเรียงพิมพ์ให้เอง ไอ้ผมมันก็คนนิสัยชอบพิมพ์สดๆ รวดเดียว ในลักษณะของการเล่าประสบการณ์ มาสมัยนี้มันกลายเป็นภาระของผู้เขียนไปตลอดจนถึงการวาง Layout ของ Content ไปเสียแล้ว
การเล่าของผม ผมจะไม่เล่า "ความรู้" เพราะเป็นสิ่งที่หาได้ง่ายเรียนรู้อยู่แล้ว ผมยึดลำดับการเกิดความเป็นจริงที่ว่า
ข้อเท็จจริง (Fact) คือสิ่งที่มีอยู่แล้ว ตั้งอยู่แล้ว รอบตัวเรา เป็นเงื่อนไขธรรมชาติ
ประสบการณ์ (Experience) คือวิธีการค้นพบข้อเท็จจริงใดๆ ด้วยสติปัญญาของมนุษย์
ความรู้ (Knowledge) คือบันทึกผลของประสบการณ์ ซึ่งเป็นแบบสรุป คัดย่อ ตัดทอน เพราะถูกจำกัดด้วยความจุของสื่อบันทึกและข้อจำกัดของการสื่อสารระหว่างมนุษย์ด้วยกันเอง
ในการร่ำเรียนของมนุษย์ ก็ไม่ต่างจากหลักการทาง Programming language นั่นคือ เริ่มเรียนจาก Knowledge เพื่อไม่ต้องเสียเวลาเริ่มกันจาก "การค้นหาข้อเท็จจริง" เพื่อให้มนุษย์นำไป Apply ต่อยอดต่อไปได้เลย เพราะข้อจำกัดที่สำคัญของเราคือ ช่วงชีวิต
เมื่อมีการค้นพบข้อเท็จจริงมากขึ้นเท่าไหร่ เวลาใน 1 ชีวิตของมนุษย์ก็ยิ่งไม่มีมากพอที่จะเรียนรู้จาก Base ขึ้นไปได้มากเท่านั้น จึงต้องตัดทอนเป็น Layer ออกไป ในขณะเดียวกันยิ่งมนุษย์เอาไป Apply ต่อยอดมากเท่าไหร่ ในอีกด้านของการเรียนรู้ ก็ยิ่งมีนวตกรรม/เทคโนโลยีให้เรียนรู้มากขึ้นเท่านั้น
Knowledge มันยังเติบโตไม่หยุดทั้งสองด้านครับ ยังมี Fact ที่เรายังไม่รู้อีกจำนวนมาก ไหนจะยังมีสิ่งที่เราเชื่อว่าเป็น Fact แต่เพราะประสบการณ์ของเผ่าพันธุ์เรายังไปไม่ถึงที่จะพบได้ว่ามันไม่ใช่ Fact และ/หรือไม่เป็น Fact เสมอไป และยังมีด้านที่เป็นนวตกรรม/เทคโนโลยีที่มนุษย์เราต่อยอดกันขึ้นไปเองอีก
อธิบายเท่านี้ คงจะพอเข้าใจได้ว่า Concept ผมคืออะไร จุดยืนผมอยู่ตรงไหน
จุดเสียของการแบ่ง Layer ในการเรียนรู้/ทำงาน/ต่อยอดของมนุษย์ก็คือ อัตตาของมนุษย์เอง เมื่อมนุษย์ผู้ใดเชื่อว่า ทุกสิ่งที่ตนรู้คือที่สุดแล้ว แล้วตีกรอบตัวเอง เติมแต่ง ใส่ไข่ความเชื่อจนกลายเป็นงมงายในบางครั้ง ไม่เปิดใจลงไป/ขึ้นไปดูใน Layer ติดๆ กัน/ใกล้เคียงกัน กลับกลายเป็นความแตกแยกไม่ลงรอย กลายเป็นความไม่สมบูรณ์ของผลงานของเผ่าพันธุ์ และเป็นทางตันแห่งการพัฒนาของ Human race ในที่สุด
นักปราชญ์ไม่หวงวิชา ไม่ใช่เพราะความเป็นคนดีครับ ที่จริงมันไม่เกี่ยวกันเลยระหว่าง ความถือตัว กับ ความดี แต่เพราะถ้าผู้ใดถึงระดับปราชญ์ ผู้นั้นย่อมพบข้อเท็จจริงว่า สิ่งต่างๆ มันมีมากมายเกินกว่าที่สมองมนุษย์แต่ละคนจะแบกได้หมด หวงไปก็เท่านั้นครับ เมื่อถึงจุดนี้ เขาจะละวางอัตตาลงเองโดยอัตโนมัติ ในมุมของผู้รู้แล้ว การสร้างทายาทสืบต่อความรู้ของตัวเองต่างหาก ที่ยากเย็นเหลือเกิน และจุดนี้เองที่ผู้รู้ทุกคนจะเข้าใจคำว่า "Born to be" ได้อย่างชัดเจนครับ ตลอดจนไปถึงที่จะเข้าใจได้ว่า "บัวสี่เหล่า" นั้น พระพุทธเจ้าไม่ได้หมายถึงคนดี/ไม่ดี อย่างที่คนส่วนใหญ่เข้าใจกันอยู่เลย
จบเรื่องปรัชญาดีกว่า มาเข้าเรื่อง Technic ที่ผมถนัดต่อดีกว่าครับ
สำหรับคุณ mk และคุณ lew ถ้ามันชักจะเยอะไปแล้ว ก็เตือนผมได้ ไม่ต้องเกรงใจนะครับ และขอขอบคุณที่ปล่อยให้โม้อยู่ได้อย่างนี้ครับ
Reply ที่แล้ว มีคนบอกผมว่า ผมพิมพ์ผิดอยู่สองแห่ง (Serious mis-typing) นะครับ ตรง Assembly code ใน Step ที่ 5) และ 8) ที่ผมพิมพ์เป็น cx และ dx ต้องเป็น bx และ cx นะครับ ที่ผิดตรงนี้มันถึงขั้นทำให้คนที่พยายามทำความเข้าใจตาม อาจทำยังไงก็ไม่อาจเข้าใจได้ เลยต้องแก้ครับ
จาก Reply ที่แล้ว เป็น Overhead แรกที่มีมากที่สุด ถ้าเอาประสบการณ์มาเล่าเป็น Case ก็จะเยอะมากมาย ขาดเขียนตำราหากินไปได้ตลอดชีวิตเลยทีเดียว นี่เป็นเหตุผลที่ผมได้เคยพูดว่า "Case ผมเยอะ" เพราะจะเอาตรงไหน Appliationใด โปรแกรมอะไร Platform ใด ที่เป็น High Level มาเป็นโจทย์ ก็ใช้ได้หมดโลก ตั้งแต่อดีตจนถึงปัจจุบัน และยังคงมีต่อไปในอนาคตครับ
Reply นี้จะขอเล่ากรณีที่สอง ซึ่งเป็น Overhead รอง เพราะบาง Compiler สร้าง Compiler directive และ/หรือ Macro ให้พอจะแก้ไขข้อจำกัดทางภาษาในกรณีนี้ได้ แต่ไม่มีความสามารถนี้ใน Compiler ทั้งหมดบน PC นะครับ มีในระดับ ARM และพวก Microcontroller ลงไป
นั่นคือการ กำหนด Instruction Algorithm ได้
ผมจะสมมติตัวอย่าง C Code แบบง่ายๆ หยาบๆ นะครับ
do
i += j;
{
if (condition) j--;
i++;
}
} while (another_condition);
ด้วยข้อจำกัดทางภาษา ใน Statement ที่ว่า i += j; จะแตกออกเป็น Native ที่ต้อง Load ค่า i และ j มาบวกกัน และค่าจะคาอยู่ที่ ax (ผมไม่ได้พูดถึง Overhead จากการ Load ไป/มาระหว่าง Register และ Memory ซึ่งมีอยู่แล้วแน่นอนนะครับ ขอให้ทำความเข้าใจตามดีๆ)
หลังจากตรวจสอบ condition แล้ว ถ้าเป็นเท็จ ก็จะต่อไป i++ ซึ่ง Native ที่ได้จะทำการ Load ค่าจาก Memory มาสู่ ax Register ใหม่อีกครั้งเสมอ เพราะภาษาต้องป้องกันกรณีที่ condition เป็นจริง ซึ่งค่าใน ax จะกลายเป็นค่าของ j ไปแล้ว
นี่คือข้อจำกัดทางภาษา ที่ไม่สามารถกำหนด Algorithm ลงไปขนาดนั้นได้ครับ ในเมื่อเราทราบว่า ค่า i คือสิ่งที่เราสนใจอยู่ แต่เพราะตัวภาษาไม่อาจทราบได้ว่า เจตนาของ Algorithm เป็นเช่นนั้น ไม่ว่า Compiler จะ AI ขนาดไหนในปัจจุบันนี้ ก็ไม่มีตัวไหนมีปัญญาทำความเข้าใจเจตนาของผู้ Coding จนผลิต Native ให้ออกมา Optimize ได้แบบดังต่อไปนี้ครับ... (Assembly หยาบๆ เช่นเคยนะครับ)
1).... 9) ขอข้าม i += j; ไปเลยนะครับ เพราะส่วนนี้ได้ Code ที่ Optimize กว่าอยู่แล้วตามกรณีแรก แต่นี่ผมกำลังอธิบาย OVerhead กรณีที่สองนะครับ
ตรง if (condition) j--; จะได้ Native ประมาณว่า
test condition // หรือ Flag อะไรก็ได้จากการเช็ค condition - ไม่ใช่จุดสนใจเลยขอหยาบๆ
jz NEXT
move ax,[Address ของ j]
dec ax
move [Address ของ j],ax
NEXT:
ตรง i++; จะได้ Native ประมาณว่า
move ax,[Address ของ i]
inc ax
move [Address ของ i], ax
Instruction สุดท้าย เป็น Overhead ของกรณีแรกนะครับ ไม่ใช่สิ่งที่ผมสนใจในขณะที่อธิบายกรณีที่สองอยู่นี้
Instruction ที่สองจากท้าย ได้ผลเหมือน Assembly เท่ากันอยู่แล้ว แต่... ดูที่ Instruction ที่สามจากท้ายครับ กับสังเกตุหลังตรวจสอบ condition ร่วมนะครับ
เพราะภาษาต้องปิดงานในทุก Statement ของภาษาเอง อีกทั้งไม่มี Compiler ใดเข้าใจเจตนาของผู้เขียนได้ ในขณะที่เมื่อเขียนเป็น Assembly แล้ว เราสามารถวาง Code ใหม่ ให้ทำงานเร็วขึ้นอีกเป็นร้อยเท่าตัวได้ง่ายๆ เช่นตัวอย่างหยาบๆ ต่อไปนี้ครับ
test condition // หรือ Flag อะไรก็ได้จากการเช็ค condition - ไม่ใช่จุดสนใจเลยขอหยาบๆ
jz NEXT
move ax,[Address ของ j]
dec ax
move [Address ของ j],ax
move ax,[Address ของ i]
NEXT:
inc ax
move [Address ของ i], ax
สังเกตุนะครับ ผมแค่ย้าย move ax,[Address ของ i] เท่านั้น ความเร็วเพิ่มขึ้นหลายร้อยเท่าตัวทันทีครับ เพราะเราทราบอยู่แล้วว่า ถ้า condition ไม่เป็นจริงแล้ว ค่าใน ax ยังคงเป็นค่าของ i อยู่เช่นเดิม จังไม่จำเป็นต้อง Load ค่ามาจาก Memory ใหม่ ซึ่งใช้เวลานานมาก แม้กระทั่ง Memory ที่เร็วที่สุดในปัจจุบัน ก็ยังใช้เวลานานกว่าการถ่ายเทค่าภายใน Register ที่อยู่ในตัว Processor เองถึงหลายร้อยเท่าตัวขึ้นไป
นี่ผมยังไม่แสดงถึงว่า แค่ Code นี้ เรา Optimize ได้มากกว่านี้อีก ถ้าจัดวางลำดับ Instruction ใหม่เท่านั้นเอง โดยที่ไม่ได้ลดขนาด Native code ลงด้วยนะครับ (อันนั้นมันเข้าสู่ Overhead กรณีแรก) นี่คือ Native ได้เท่าเดิมเลย
อ่านมาถึงตรงนี้... คงสงสัยกันอีกแล้วล่ะสิ ไอ้ "บ้าพลัง" นี่ มันเอาตรงไหนมาพล่ามหว่า ใน PC มีด้วยหรือ? (บ้าพลังหรือไม่ ถึงตอนนี้ผู้อ่านคงทราบแล้วว่า ที่จริง ยักษ์ของผมยังนอนกรนอยู่เลยครับ)
มีครับ เอาตัวอย่างบน Windows เช่นเคย ซึ่งผู้อ่านส่วนใหญ่ถนัด ก็เช่น Codec ทั้งหมดไงครับ ไหนจะ Compression tools ทั้งหลายอีก Spread sheet application ทั้งหลาย ...โอย... เยอะแยะไปหมดครับ
ลักษณะ Code ที่ทำ Loop ซ้ำๆ จะแยกประเด็นออกไปทำอย่างอื่นเป็นครั้งคราวตาม Period condition จะเจอ Overhead นี้ของภาษาทั้งนั้น
บนเครื่องทรัพยากรเยอะๆ อย่าง PC ที่สามารถ Coding แบบขี่ไดโนเสาร์จับอะมีบาได้ ก็ไม่จำเป็นต้องให้ความสำคัญในกรณีนี้ไปเสียทั้งหมดในการ Coding โปรแกรมใดๆ แต่อย่างกรณีเช่น Codec ก็หนีไม่พ้นครับ
PC ออกจะแร้งแรง กว่าจะ Decoding HD ได้ลื่น บริโภค Hardware แค่ไหนครับ?
กับอีกหลาย Embedded ที่มีทรัพยากรด้อยกว่ามากๆ แบบเทียบกันไม่ติด เขาก็ตามมา Decoding HD ได้บ้างเพราะอะไร?
และนี่เอง Compiler สำหรับ Processor เล็กๆ เหล่านี้ เลยต้องมี Compiler directive หรือ Macro พิเศษให้ผู้ Coding สามารถลงไปกำหนดลำดับ Instruction ด้วยตัวเองได้นั่นเอง แต่ PC ยังไม่มีเพราะ... เหลือเฟือเหลือเกินนั่นเอง เวลาจะต้องใช้ที เลยต้อง Inline Assembler ใส่ลงไปเลย
และอย่าง Spread sheet application ก็เช่นกัน นี่เป็นคำตอบที่ทำไม OpenOffice Calc ให้ความเร็วสู้ Excel ไม่ได้ และ ณ ตอนนี้ ไม่มีทางสู้ได้แน่นอน เพราะ OOO เป็น Open Source ที่มี Concept เป็น Single code ไปสู่ Multi architecture/Platform จึงต้องเขียนเป็น Pure C ให้มากที่สุด ดังนั้นการ Update แต่ละ Cell ซึ่งมีลักษณะการ Coding เป็น Loop เข้ากรณีที่สองที่ผมอธิบายนี้จึงมีมาก ในขณะที่ Excel นั้น M$ แยก Platform ในการ Compile และ Inline Assembler ในส่วนเหล่านี้ลงไปเพื่อ Optimize Algorithm ให้ได้ Performance สูง ที่จริงแล้ว M$ เขาถึงขนาดแยก Code ในแต่ละ Architecture เลยด้วยครับ
อธิบายกรณีที่สองแค่นี้นะครับ
มีเวลาแล้วจะมาร่ายกรณีต่อๆ ไปให้ เอาสัก 4-5 กรณีแรกก็พอ กรณีหลังๆ มันจะมี Case น้อยลงเรื่อยๆ
เรื่องเหล่านี้ไม่มีในตำราครับ ต่อให้หาบน Internet ก็ไม่มีเนื้อหาลงลึกแบบนี้ เพราะนี่คือการเล่า "ความเป็นจริง" ที่เกิดขึ้นจริงจากประสบการณ์ และดันเป็นสิ่งที่ "เซียน" ส่วนใหญ่ของโลก เขาหวงนักหวงหนา เพราะมันเป็นเหมือนเคล็ดวิชาที่เอาไว้สยบคนอื่นเขาไปได้ทั่ว ใช้เรียกค่าตัวแพงๆ หากินไปได้ตลอด เอาไว้ใช้เป็น Consult ก็ได้ เต๊ะจุ๊ยแล้วคอยตบหัวเด็กรุ่นใหม่ด้วยสิ่งเหล่านี้ แล้วยังได้ค่าตัวแพงอีก (ผมจะโดนดักตีหัวไหมเนี่ย?) ไหนจะยังเอาไว้ใช้ใส่ในผลิตภัณฑ์ของตัวเองให้เหนือกว่าคู่แข่งที่ดันมีแต่ทีมลูกจ้าง Software engineer ที่ไม่ลงลึกพอ (ทำให้ผมมีตลาดหากินอยู่ทุกวันนี้ ตลาดนี้โล่งสบาย คู่แข่งน้อยจนแทบไม่มี ที่มีก็ไม่น่าเรียกว่าคู่แข่ง เพราะเกี่ยงงานกันทั้งนั้น มันทำไม่ทันครับ - มาสิครับ มาจับตลาดนี้กัน คนไทยจะได้ผงาด)
เช่นเดียวกับที่ผมจะบอกว่า ที่มีผู้ใช้ C กล่าวกันเกลื่อนว่า "ผลงานจาก C ได้ Performance เกือบระดับเดียวกัน" ลามไปถึงว่า "เผลอๆ จะดีกว่า" นั้น แค่สองกรณีแรกที่ผมยกข้อจำกัดทางภาษามาอธิบาย ก็เห็นได้แล้วว่า "เป็นไปไม่ได้ที่ C จะได้ Native ที่มี Performance ดีกว่า Assembly" ครับ
เมื่อภาษาอื่นนอกจาก Assembly จัดระดับกันเองแล้ว จะให้ C อยู่ล่างสุด ถือได้ว่าใกล้เคียง Assembly ที่สุดแล้ว นั่นกล่าวถูกต้องครับ แต่อย่าเข้าใจผิดในเรื่องหนึ่งคือ....
ในวิธีการเทียบดังกล่าวนั้น ถ้าดูเฉพาะ Gap ระหว่าง C กับ Assembly แล้ว โดยไม่มี Gap ระหว่าง C กับภาษาอื่นข้างบนมาเป็น Scale วัด ผมจะขอใช้คำว่า "ยังห่างไกล" ครับ ชนิดที่ว่าเป็นไปไม่ได้เลยทีเดียว ที่ Pure C จะได้ Code ที่มี Performace ใกล้เคียง Assembly ได้
ขอให้ผู้ที่ถนัด C ทั้งหลาย จงอย่าใส่ไข่ความรู้/ความเชื่อของตัวเองจนล้นหลามไปแบบนั้นครับ
ยกตัวอย่างข่าวเรื่อง Source code ของ POP (Prince Of Persia) แล้วกันครับ ผู้อ่านไปฮือฮากันที่ Code เป็น Assembly ล้วนๆ แต่... มีใครสังเกตุไหมครับ? ว่า Native ของทั้ง Game รวมไปถึง Data ของ Game ไม่ว่าจะเสียง ดนตรี ตลอดไปจน Story board และ Save Game สามารถบรรจุในแผ่น Diskette ขนาด 720KB ได้?
ขอให้เซียน C ทั้งโลก ลองใช้ Pure C เขียน Game ลักษณะเดียวกัน ละเอียดเท่ากัน มีเนื้อหาเท่ากัน แล้ว Compile ด้วย Compiler ใดๆ ที่เซียนผู้นั้นถนัดที่สุด Optimize ได้เป็นที่สุด เขียนออกมาดูสิครับ ว่าจะทำให้อยู่ใน 720KB ได้ไหม? และยังทำงานบน Processor ที่มีหน่วยความจำเพียงแค่ 640KB ด้วยความเร็วแค่ 16MHz ได้หรือไม่?
เอาสิครับ จะ "บ้าพลัง C" สักแค่ไหน ก็ลองพยายามดูกันนะครับ (C, Pascal และ Assembly ทั้งสามคือภาษาอันดับ 1 ของผม แต่เจอโจทย์อย่างนี้ ผมก็ขอบายล่ะครับ เพราะรู้ว่า เป็นไปไม่ได้)
ได้ความรู้อีกเยอะเลย
Go-Kung Sat, 28/04/2012 - 17:52
In reply to ยินดีครับ ดีใจที่ได้ทราบว่า by จักรนันท์
ได้ความรู้อีกเยอะเลย ขอบคุณมากครับ
^_^
Virusfowl Tue, 01/05/2012 - 00:43
In reply to ยินดีครับ ดีใจที่ได้ทราบว่า by จักรนันท์
^_^ โดยส่วนตัวผมมีความรู้ด้านเทคนิคที่คุยๆ กันนี้น้อยมากๆ ยิ่ง coding ยิ่งแล้วใหญ่ แม้พื้นก็ไม่มี แต่ก็ยังชอบอ่านครับ ส่วนไหนไม่รู้เรื่องก็ข้ามๆ ไป แต่ชอบความเห็นในเว็บนี้ เพราะถกกันด้วยเหตุผล+หลักฐาน ไม่ใช่อารมณ์ :D
ส่วนความเห็นของคุณ จักรนันท์ ผมชอบส่วนที่เป็นปรัชญานะครับ พอได้อ่านอะไรที่ทำให้เรารู้สึกว่า มนุษย์นี้ช่างกระจ้อยร่อยนัก ก็เป็นการลดอัตตาของตัวเองลงได้
บางทีเรื่องการหวง/ไม่หวงความรู้ ก็เป็นข้อสงสัยของผมเช่นกัน เพราะบางทีผมก็รู้สึกว่า ทำไมคนเราต้องหวงความรู้กันด้วยนะ ทำไมบางคนก็กระจายความรู้กันแค่คนในกลุ่มหรือเฉพาะพวกพ้อง แต่ในบางครั้ง ผมก็รู้สึกว่าตัวเองก็เป็นอย่างนั้นเหมือนกัน บางทีเราก็กลับรู้สึกว่า "เฮ้ยไม่ใช่หน้าที่" ทำไมเราจะต้องไปนั่งไล่บอกคนโน้นบอกคนนี้ ในเรื่องที่เขาไม่รู้ด้วยล่ะ อะไรประมาณนี้
แต่ช่วงไหนที่ลดอัตตาในส่วนนี้ได้ + ขยันๆ หน่อย ผมก็พยายามกระจายความรู้ที่พอจะมีบ้างกลับคืนให้สังคมบ้างเหมือนกันอะนะครับ โดยการเขียนพวก how to หรือข่าวสารต่างๆ ที่น่าสนใจ (ต้องหมายเหตุไว้นิดนึงด้วยว่า วงการที่ผมต้องการสื่อไปถึงเป็นวงการเล็ก เรื่องที่จะแบ่งปันก็เป็นของเฉพาะกลุ่มมาก) ได้ทำแล้วผมก็รู้สึกดี ว่าอย่างน้อยเราก็ยังได้ทำแล้วแหละ ส่วนจะมีใครเข้าถึงสิ่งที่ผมสื่อออกไปได้บ้าง อันนี้คงต้องขึ้นอยู่กับความขวยขวายของพวกเขาเหล่านั้นแล้วล่ะ เพราะผมก็ทำเท่าที่ผมจะพอทำให้ได้ โดยไม่เบียดเบียนตัวเองจนเกินไป...
เอ๊ะ! รู้สึกจะไม่เกี่ยวกับหัวข้อข่าวเลยสินะ :P
edit: ลืมเขียน ^^ มัวแต่บ่นเรื่องตัวเอง
"ผมมักจับประเด็นตามสมัยนิยมและอยู่ในแนวทางที่ตัวเองเชี่ยวชาญ" อ่านประโยคนี้แล้วผมนึกถึงคุณหมอจิม @jimmy_live แฮะ มีอยู่ช่วงนึงที่คุณหมอแกจะทำ live tweeting เกือบทุกคืน ตามอ่านแล้วได้แง่มุมจากประเด็นในตอนนั้นๆ ได้ดีมากเลย อีกคนที่เคยมี live tweeting ก็ อาจารย์ไพศาล @paisalvision ผมชอบที่อ.แกมาเล่าประสบการณ์เรื่องโน้นเรื่องนี้(ไม่ใช่วิจารณ์การเมืองอะนะ) อ่านตอนหัวค่ำ+ถึงดึกๆ หน่อย แล้วได้อารมณ์เหมือนคุณตามาเล่านิทานให้หลานๆ ฟังก่อนนอนดีอ่า :) แต่ประเด็นคือปัจจุบันนี้ ทั้ง 2 ท่านที่ว่ามา ก็เลิกทำ live tweeting กันหมดแล๊ว T_T
ผมว่าคุณออกตัวแรงไปหน่อย
Go-Kung Thu, 12/04/2012 - 12:58
In reply to ผมว่าคุณกับผมเลิกตีกันเหอะ by UltimaWeapon
ผมว่าคุณออกตัวแรงไปหน่อย UltimaWeapon ครับ
คอมเมนท์ก่อนมาเป็นชุดเลยทั้ง Asslembly ของอะไร, นู่นนี่ผมไม่รู้จัก ไม่ผมโง่ก็คุณมั่ว, ยกตัวอย่างให้ดูหน่อย
พออีกฝั่งยกตัวอย่างมาพร้อมอธิบายทั้งหมด คุณกลับบอกว่าเลิกตีกันเหอะ ตัดบทดื้อๆทันที
+1
idxn Sun, 15/04/2012 - 22:38
In reply to ผมว่าคุณออกตัวแรงไปหน่อย by Go-Kung
+1
ในไทยไม่ค่อยมีงานแนวๆ OS ,
BLiNDiNG Wed, 11/04/2012 - 17:44
In reply to เดาได้เลยว่าคนไทยหลายๆคนจะงงว by UltimaWeapon
ในไทยไม่ค่อยมีงานแนวๆ OS , แนวๆ linux ล่ะมั้งครับ
เอ๋... สถิตินั่น
จักรนันท์ Thu, 12/04/2012 - 05:18
In reply to ในไทยไม่ค่อยมีงานแนวๆ OS , by BLiNDiNG
เอ๋... สถิตินั่น แค่ในเมืองไทยหรือครับ? ผมไม่ทันสังเกตุ
ถ้าแค่ในไทย งั้นผมไม่แปลกใจ แต่ถ้าเป็นสถิติทั่วโลก ยังไงก็ยังแปลกใจ ที่ Ada นิยมกว่า Assembly ได้ยังไง ผมคงรู้จักงานที่ใช้ Ada น้อยไปจริงๆ
เสาร์-อาทิตย์ที่ผ่านมา
จักรนันท์ Mon, 16/04/2012 - 15:40
In reply to เอ๋... สถิตินั่น by จักรนันท์
เสาร์-อาทิตย์ที่ผ่านมา ได้พบเพื่อนเก่าหลายคน หนึ่งในนั้นเป็นอาจารย์ วศ.ม. บางมดอยู่ คุยกันสนุกออกรส และผมได้หยิบกรณี Assembly VS Ada นี่ขึ้นมาสนทนากับเขา ได้ฟังความเห็นที่น่าสนใจมา จึงมา Reply ตอบตัวเองในนี้ และเผื่อเป็นประโยชน์ต่อท่านอื่นต่อไป สรุปได้ดังนี้...
สถาบันการศึกษาในเมืองไทย โดยมากนิยมใช้ Pascal ในการปูพื้นการคิดอย่างมีโครงสร้างให้แก่นักศึกษา แต่สถาบันต่างชาติจำนวนมาก นิยมใช้ Ada ในการสอนปูพื้น ดังนั้นจากสถิติซึ่งน่าจะวัดจากการ Download และ/หรือ ดัชนีคำในการค้นหาของ Search engine ต่างๆ จึงมีจำนวนที่เกี่ยวข้องกับ Ada สูงกว่า แม้ว่าในการทำงานจริง Ada จะมีเหลือใช้น้อยมากแล้วก็ตาม
ด้วยความเห็นที่ผมได้รับฟังมานี้ ทำให้ผมหายสงสัยแล้วว่า Ada ยังเหลือใช้มากอยู่ที่ใด
ผมไม่เคยเขียน Ada เลย
Yoeko Wed, 18/04/2012 - 06:16
In reply to เสาร์-อาทิตย์ที่ผ่านมา by จักรนันท์
ผมไม่เคยเขียน Ada เลย ภาษานี้คือภาษาระดับไหนครับ high หรือ low ครับ
High ครับ จัดว่าเป็น Pure OO
Go-Kung Wed, 18/04/2012 - 11:36
In reply to ผมไม่เคยเขียน Ada เลย by Yoeko
High ครับ
จัดว่าเป็น Pure OO ภาษาแรกเลยก็ได้
ป่าวครับ ผมตอบคุณ ultima
BLiNDiNG Sat, 21/04/2012 - 23:58
In reply to เอ๋... สถิตินั่น by จักรนันท์
ป่าวครับ ผมตอบคุณ ultima weapon ที่บอกว่า
"ในไทยแลนด์งานเกี่ยวกับ C/C++ แทบจะไม่มีกันเลยทีเดียว มีแต่ Java, C#, PHP ซะส่วนมาก"
long live php
projectsoft.biz Wed, 11/04/2012 - 10:45
long live php
ของ VB, VB.NET มันเป็นการ
Go-Kung Wed, 11/04/2012 - 12:41
ของ VB, VB.NET มันเป็นการ Transfer กันเองรึเปล่า
แบบคนย้ายจาก VB มาเขียน VB.NET แทน
ยังรู้เรื่องอยู่ C, Java,
cavaji Wed, 11/04/2012 - 12:42
ยังรู้เรื่องอยู่
C, Java, C++, Objective-C, C#, PHP, Visual Basic, JavaScript
อืมมมม
cloverink Wed, 11/04/2012 - 12:57
อืมมมม ก้มหน้าก้มตาเขียนโปรแกรมต่อไป :3
ถ้าชีวิตยังมีแรงก็จะไม่ขอแตะ
Architec Wed, 11/04/2012 - 15:50
ถ้าชีวิตยังมีแรงก็จะไม่ขอแตะ VB ตลอดกาล
Native Client ครับ
punbodyslam Wed, 11/04/2012 - 15:57
Native Client ครับ
แอบเชียร์ Python อยู่ลึกๆ
jonathanz Wed, 11/04/2012 - 17:38
แอบเชียร์ Python อยู่ลึกๆ
Perl จงเจริญ... * 0 *
sornram9254 Wed, 11/04/2012 - 22:46
Perl จงเจริญ... * 0 *
นึกว่าอ่านพันทิพอยู่
panuphong Thu, 12/04/2012 - 11:51
นึกว่าอ่านพันทิพอยู่
JavaScript
pittaya Thu, 12/04/2012 - 14:33
JavaScript ไม่แรงอย่างที่คิดแฮะ