Lit Element Web Components
Lit Library สร้าง Web Components 5KB Google Standard Web APIs ทุก Framework Template Literals Reactive Properties Shadow DOM Design System Component Library
| Level | ตำแหน่ง | ทักษะ | เงินเดือน (บาท) |
|---|---|---|---|
| Junior | Frontend Developer | HTML CSS JS React | 20,000-35,000 |
| Mid | Frontend Engineer | TypeScript, Testing, CI/CD | 35,000-60,000 |
| Senior | Senior Frontend | Architecture, Performance, Mentoring | 60,000-100,000 |
| Lead | Tech Lead | Team Leadership, System Design | 100,000-150,000 |
| Staff | Staff Engineer | Cross-team Architecture, Strategy | 120,000-200,000+ |
Lit Element Component
# === Lit Element Setup & Component ===
# npm init @open-wc
# npm install lit
# npm run dev
# src/my-card.ts
# import { LitElement, html, css } from 'lit';
# import { customElement, property, state } from 'lit/decorators.js';
#
# @customElement('my-card')
# export class MyCard extends LitElement {
# static styles = css`
# :host {
# display: block;
# padding: 16px;
# border-radius: 8px;
# background: white;
# box-shadow: 0 2px 8px rgba(0,0,0,0.1);
# }
# h3 { margin: 0 0 8px; color: #1a1a1a; }
# p { margin: 0; color: #666; }
# button {
# margin-top: 12px;
# padding: 8px 16px;
# border: none;
# border-radius: 4px;
# background: #4285f4;
# color: white;
# cursor: pointer;
# }
# `;
#
# @property() title = '';
# @property() description = '';
# @state() private _liked = false;
#
# render() {
# return html`
#
# #
# `;
# }
#
# private _toggle() {
# this._liked = !this._liked;
# this.dispatchEvent(new CustomEvent('liked', {
# detail: { liked: this._liked }
# }));
# }
# }
# Usage:
#
# In React:
# import 'my-card';
# function App() {
# return ;
# }
from dataclasses import dataclass
from typing import List
@dataclass
class WebComponent:
tag: str
props: List[str]
events: List[str]
size_kb: float
components = [
WebComponent("my-card", ["title", "description", "image"], ["liked", "shared"], 2.1),
WebComponent("my-button", ["variant", "size", "disabled"], ["click"], 1.5),
WebComponent("my-input", ["label", "value", "type", "error"], ["change", "input"], 2.8),
WebComponent("my-modal", ["open", "title", "closable"], ["close", "confirm"], 3.2),
WebComponent("my-tabs", ["active", "orientation"], ["tab-change"], 2.5),
]
print("Lit Element Component Library:")
total_size = 0
for c in components:
total_size += c.size_kb
print(f" <{c.tag}> ({c.size_kb}KB)")
print(f" Props: {', '.join(c.props)}")
print(f" Events: {', '.join(c.events)}")
print(f"\n Total Bundle: {total_size:.1f}KB (+ Lit core 5KB)")
Career Development Path
# career.py — IT Career Development Path
from dataclasses import dataclass, field
from typing import List, Dict
@dataclass
class CareerLevel:
title: str
years_exp: str
salary_range: str
skills: List[str]
responsibilities: List[str]
next_step: str
career_path = {
"Junior Frontend": CareerLevel(
"Junior Frontend Developer", "0-2 ปี", "20,000-35,000",
["HTML/CSS/JS", "React หรือ Vue", "Git", "Responsive Design"],
["เขียน UI ตาม Design", "แก้ Bug", "เขียน Unit Test"],
"Mid-level Frontend",
),
"Mid Frontend": CareerLevel(
"Frontend Engineer", "2-5 ปี", "35,000-60,000",
["TypeScript", "State Management", "Testing", "Performance", "Web Components"],
["ออกแบบ Component", "Code Review", "Technical Decision", "CI/CD"],
"Senior Frontend",
),
"Senior Frontend": CareerLevel(
"Senior Frontend Engineer", "5-8 ปี", "60,000-100,000",
["Architecture", "Design System", "Accessibility", "Security", "Mentoring"],
["ออกแบบ Architecture", "Mentor Junior", "Technical Leadership", "Cross-team Collaboration"],
"Tech Lead หรือ Staff Engineer",
),
"Tech Lead": CareerLevel(
"Tech Lead / Engineering Manager", "8-12 ปี", "100,000-150,000",
["People Management", "Project Management", "System Design", "Business Understanding"],
["นำทีม 5-10 คน", "Hiring", "Performance Review", "Technical Strategy"],
"Director of Engineering",
),
"Staff Engineer": CareerLevel(
"Staff / Principal Engineer", "8-15 ปี", "120,000-200,000+",
["Cross-org Architecture", "Technical Vision", "RFC/ADR", "Influence without Authority"],
["ออกแบบ Architecture ข้าม Team", "Technical Strategy", "แก้ปัญหาซับซ้อน", "Industry Thought Leadership"],
"Distinguished Engineer",
),
}
print("=== IT Career Development Path ===\n")
for level, info in career_path.items():
print(f" [{info.title}] ({info.years_exp})")
print(f" Salary: {info.salary_range} บาท")
print(f" Skills: {', '.join(info.skills[:3])}")
print(f" Next: {info.next_step}\n")
# Skills Roadmap
roadmap = {
"Year 1": ["HTML/CSS/JS", "React/Vue", "Git", "REST API", "Responsive"],
"Year 2": ["TypeScript", "Testing (Jest)", "State Management", "CSS-in-JS"],
"Year 3": ["Web Components (Lit)", "Performance", "Accessibility", "CI/CD"],
"Year 4": ["System Design", "Design System", "GraphQL", "Micro-frontend"],
"Year 5+": ["Architecture", "Technical Leadership", "Mentoring", "Open Source"],
}
print("=== Skills Roadmap ===")
for year, skills in roadmap.items():
print(f" {year}: {', '.join(skills)}")
Portfolio และ Interview
# portfolio.py — Portfolio & Interview Preparation
portfolio_projects = {
"Design System": {
"desc": "สร้าง Component Library ด้วย Lit Element",
"tech": "Lit, TypeScript, Storybook, npm publish",
"impact": "แสดง Web Components + Open Source skills",
},
"Dashboard App": {
"desc": "สร้าง Dashboard แสดงข้อมูล Real-time",
"tech": "React/Vue, Chart.js, WebSocket, REST API",
"impact": "แสดง Data Visualization + API Integration",
},
"E-commerce": {
"desc": "สร้าง E-commerce ครบ Cart Checkout Payment",
"tech": "Next.js, Stripe, Tailwind, Database",
"impact": "แสดง Full-stack + Payment Integration",
},
"CLI Tool": {
"desc": "สร้าง CLI Tool ที่มีประโยชน์",
"tech": "Node.js, Commander, Chalk",
"impact": "แสดง Problem Solving + Tooling skills",
},
}
print("=== Portfolio Projects ===")
for project, info in portfolio_projects.items():
print(f"\n [{project}]")
for k, v in info.items():
print(f" {k}: {v}")
# Interview Topics
interview_topics = {
"Frontend": [
"Virtual DOM vs Real DOM",
"Web Components vs React Components",
"CSS Specificity, Flexbox, Grid",
"Event Loop, Promises, async/await",
"Performance: Lazy Loading, Code Splitting",
"Accessibility (WCAG, ARIA)",
],
"System Design": [
"Design a Component Library",
"Design a Real-time Chat",
"Micro-frontend Architecture",
"CDN and Caching Strategy",
],
"Behavioral": [
"Tell me about a difficult bug you fixed",
"How do you handle disagreements in code review",
"How do you mentor junior developers",
"Describe a project you're most proud of",
],
}
print(f"\n\n=== Interview Topics ===")
for category, topics in interview_topics.items():
print(f"\n [{category}]")
for topic in topics:
print(f" - {topic}")
# Salary Negotiation
tips = [
"รู้ Market Rate ก่อนเจรจา (Glassdoor, LinkedIn)",
"เน้น Value ที่ให้ ไม่ใช่แค่ขอเงินเพิ่ม",
"เตรียม Counter Offer อย่างน้อย 2 บริษัท",
"เจรจา Total Compensation ไม่ใช่แค่เงินเดือน",
"Stock Options, Bonus, WFH, Learning Budget",
"อย่ารับ Offer แรก ขอเวลาคิด 2-3 วัน",
]
print(f"\n\n=== Salary Negotiation Tips ===")
for i, tip in enumerate(tips, 1):
print(f" {i}. {tip}")
เคล็ดลับ
- Lit: เล็ก เร็ว ใช้ Standard Web APIs ทำงานทุก Framework
- Portfolio: สร้าง 3-4 โปรเจคที่หลากหลาย Publish บน GitHub
- T-Shaped: เชี่ยวชาญ 1 ด้าน (Frontend) แต่รู้กว้าง (Backend, DevOps)
- Community: เข้าร่วม Meetup เขียน Blog แชร์ความรู้
- Remote: ฝึกภาษาอังกฤษ ทำงาน Remote บริษัทต่างประเทศ เงินเดือน 2-5x
Lit Element คืออะไร
Library สร้าง Web Components 5KB Google Standard Web APIs Template Literals Reactive Properties Shadow DOM ทุก Framework