Tohum

تسلط بر Toolkit توسعه‌دهنده Embedded IoT

تصویرسازی: جعبه‌ابزار باز توسعه‌دهنده نهفته: موج اسیلوسکوپ، تراشه، هویه و پراب مولتی‌متر

مقیاس 5-to-1

برنامه یادگیری یک توسعه‌دهنده embedded باید بازتاب bill of materials باشد. ما این درس را به سختی آموختیم در حالی که یک node مانیتورینگ خاک خورشیدی بر پایه ESP32، back-haul cellular SIMCom و AWS IoT Core را راه‌اندازی می‌کردیم: firmware، سخت‌افزار، لینک‌های رادیویی و workflowهای cloud همگی باید همزمان سر جایشان می‌آمدند، و ردکردن حتی یک قسمت، آن «tweak firmware سریع» را به هفته‌ها debugging تبدیل می‌کرد.

برای متمرکز نگه داشتن آن برنامه، هر شایستگی را در یک مقیاس 5-to-1 رتبه‌بندی می‌کنیم—یک چارچوب کاملاً مستقل از فناوری:

سطحمعنیچرا مهم است
5 = Must-haveزبان اصلی، ابزارهای ضروری، مفاهیم بنیادینبدون این‌ها نمی‌توانید ship کنید
4 = OptimizersCI/CD، تست خودکار، سخت‌سازی امنیت، tuning عملکردprototypeها را به محصولات robust تبدیل می‌کنند
3 = Workflow boostersداشبوردها، debugging پیشرفته، cloud opsتوسعه روزمره را ساده‌تر می‌کنند
2 = Nice-to-havesویژگی‌های تخصصی که بعداً می‌خواهیدوقتی زمان اجازه دهد polish اضافه می‌کنند
1 = Specialtiesdeep dive برای دامنه‌های niche یا scaling آیندهوقتی use case آن را ایجاب کند

نحوه کاربرد در هر جا

  1. هدف نهایی را تعریف کنید. «job-ready» یا «production-ready» به چه معناست؟
  2. 5sها را فهرست کنید. کیت بقای مطلق.
  3. 4sها را شناسایی کنید. practiceهایی که راه‌حل را مستحکم و مقیاس‌پذیر می‌کنند.
  4. 3sها را پر کنید. ابزارهای quality-of-life و بهینه‌سازی.
  5. 2sها و 1sها را اضافه کنید. عمق تخصصی برای تیم‌های بزرگ‌تر یا ویژگی‌های پیشرفته.

اثبات سریع که خوب جابه‌جا می‌شود

با رتبه‌بندی impact و frequency هر موضوع، یک مسیر روشن ترسیم می‌کنید و از احساس غرق شدن اجتناب می‌کنید.


5sها برای stack ESP32 + SIM + AWS ما چگونه به نظر می‌رسند

  1. تسلط C/C++ – زبان ESP-IDF و hookهای FreeRTOS.
  2. تسلط ESP-IDF (یا Arduino-ESP32) – Wi-Fi، BLE، ADC، APIهای deep-sleep.
  3. مبانی الکترونیک – level-shifting UARTهای SIM، خواندن probeهای NPK، hygiene EMI.
  4. Power-budgeting و شارژ Li-ion/خورشیدی – زنده نگه داشتن یک 18650 4 Ah در طول هفته‌های ابری.
  5. اتصال robust (Wi-Fi، SIM AT، MQTT/TLS) – ارسال امن داده سنسور به AWS.

این پنج مورد را master کنید و می‌توانید یک prototype عملکردی ship کنید. به 4s بروید—CI pipelines، FreeRTOS پیشرفته، OTA، امنیت—و محصولی دارید که در میدان دوام می‌آورد. 3s، 2s و 1s toolkit حرفه‌ای را با داشبوردها، compliance و عمق دامنه‌ای کامل می‌کنند.

مقاله‌ای که در ادامه می‌آید یک چک‌لیست نیست؛ یک roadmap ترتیبی است که با انتخاب‌های سخت‌افزاری واقعی نگاشت شده است. با 5s شروع کنید، از 4sها فارغ‌التحصیل شوید، و تا زمانی که به سرزمین 3-to-1 وارد می‌شوید، هم اعتماد و هم context برای کاربرد آن‌ها در جایی که بیشترین اهمیت را دارند خواهید داشت، از breadboard تا تولید.

Skillsetهای توسعه‌دهندگان Embedded

راهنما – اهمیت
5 = ضروری (must-have برای کار روزمره)
4 = بسیار مهم (در اکثر پروژه‌ها لازم است)
3 = مفید (اغلب مفید است، به زودی یاد بگیرید)
2 = Nice-to-have (وقت اجازه داد یاد بگیرید)
1 = تخصصی / موقعیتی

#مهارت / ابزارچرا برای یک محصول اندازه‌گیری خاک مبتنی بر ESP32 مهم استاهمیت
1C / C++زبان‌های اصلی ESP-IDF، Arduino core و درایورهای پریفرال.5
2ESP-IDF (native) یا Arduino-ESP32دسترسی مستقیم به Wi-Fi، BLE، GPIO، ADC، UART، I²C و APIهای FreeRTOS.5
3مبانی FreeRTOSزمان‌بندی task، watchdogها، queueها و حالت‌های خواب کم‌مصرف.4
4Git & GitHub / GitLabکنترل نسخه، code review و hookهای CI.5
5VS CodeIDE سبک cross-platform با extensionهای قوی ESP-IDF و PlatformIO.4
6PlatformIOBuild، flash، unit-test و static-analysis پروژه‌های embedded از VS Code.4
7Linux CLI / WSLToolchainها، build scriptها، debugging OpenOCD و runnerهای CI containerized.3
8Unit-testing framework (Unity / CppUTest)تست‌های regression برای math سنسور، parserهای comms، منطق battery-state.3
9Continuous Integration (GitHub Actions / GitLab CI)اتوماسیون build، test، lint و بررسی اندازه firmware در هر push.3
10Jira (issues) & Confluence (docs)ردیابی taskها، باگ‌ها، نیازمندی‌ها و یادداشت‌های طراحی در تیم.3
11الکترونیک Digital & Analogخواندن خروجی‌های سنسور NPK، level-shifting UART ماژول SIM، کاهش EMI.5
12طراحی PCB (KiCad / Altium)برد سفارشی برای ESP32، رابط NPK، شارژر Li-ion و solar MPPT.4
13Power-budgeting و شارژ Solar-Li-ionاندازه‌گیری پنل، IC شارژ، مبدل‌ها و حالت‌های کم‌مصرف firmware.5
14Battery management (ایمنی و coulomb counting 18650)محافظت در برابر over-/under-voltage و تخمین SoC.4
15Cellular comms (دستورات SIMCom AT، PPP، TCP/IP)آوردن اتصال cloud وقتی Wi-Fi در میدان وجود ندارد.5
16IoT protocols (MQTT / HTTPS)لینک داده سبک و امن به سرور یا cloud.4
17TLS / mbedTLS security basicsرمزنگاری داده و authenticate دستگاه به endpointهای cloud.4
18Sensor calibration & compensationتأثیرات دما / رطوبت روی خوانش‌های NPK؛ منحنی‌های کالیبراسیون میدانی.5
19Data logging & OTA storage (SPIFFS، LittleFS، SD)Backup محلی در زمان از دست دادن اتصال؛ staging firmware update.3
20Remote OTA update flowقابلیت نگهداری هزاران واحد deployed.4
21Control & Estimation theoryاختیاری—به filtering پیشرفته (Kalman، PID) یا sampling تطبیقی کمک می‌کند.2
22Python / Bash scriptingPars کردن log، فلش کردن خط تولید، اتوماسیون تست.3
23Cloud & dashboard basics (AWS IoT Core، Azure IoT، InfluxDB + Grafana)ذخیره، visualization و alerting روی معیارهای خاک.3
24Regulatory & environmental compliance (CE، FCC، IP-rating)تضمین deployment قانونی و robustness میدانی.3
25Documentation tooling (Markdown، Doxygen)تولید API و docs طراحی HW قابل نگهداری.3

نحوه خواندن جدول

1 – C/C++

سطح: 1 – Absolute Beginner
– syntax و ساختار C: مدل کامپایل (source → object → executable)، تابع main()
– انواع داده پایه: int، char، float، double، bool
– متغیرها و ثوابت: declaration، initialization، qualifier const
– عملگرها: حسابی (+، −، *، /، %)، assignment، increment/decrement
– جریان کنترل: if/else، switch، حلقه for/while/do-while
– I/O ساده: printf، خروجی کنسول پایه
– مقدمه‌ای بر pointerها: declaration pointer، dereference
– ساخت و debugging: کامپایل با gcc -o، تفسیر خطاهای پایه کامپایلر

سطح: 2 – Beginner
– حافظه و pointerها: pointer arithmetic، pointer در مقابل array، مقدمه malloc/free
– انواع ساخت‌یافته: struct، union، typedef
– مبانی preprocessor: #define، #include، include guards
– کلاس‌های storage: auto، static، extern، scope و linkage rules
– رشته‌ها و آرایه‌ها: char[]، توابع رشته‌ای (strcpy، strlen و غیره)
– کد ماژولار: تقسیم به فایل‌های multiple .c/.h، اصول makefile (rules، targets)
– ابزارهای debugging پایه: gdb stepping، breakpoints، بررسی متغیرها

سطح: 3 – Intermediate
– مدیریت حافظه پویا: heap در مقابل stack، الگوهای leak رایج، استفاده از ابزارهایی مانند Valgrind
– File I/O: fopen/fread/fwrite/fclose، file pointerها، مدیریت خطا
– عملیات بیتی: maskها، shiftها، set/clear bitها، enum و bit-fields
– Function pointerها: callbackها، dispatch tableها
– مدیریت خطا: return-codeها، errno
– مبانی C++: classes & objects، constructor/destructor، access specifiers
– مبانی STL: std::vector، std::string، استفاده ساده از std::map و iteratorها
– Namespaces و سازماندهی header

سطح: 4 – Advanced
– C embedded خاص: volatile، memory-mapped I/O، const در flash در مقابل RAM
– Linker و build system: linker scriptهای سفارشی، placement section، پرچم‌های بهینه‌سازی (-O2، -Os)، toolchainهای cross-compilation
– ویژگی‌های C++11/14/17: lambdaها، auto، range-based for، constexpr، nullptr
– Smart pointerها و RAII: unique_ptr، shared_ptr، مدیریت resource
– مبانی Templates: function & class templates، template specialization
– Multithreading: std::thread، mutexها، condition variableها، atomic types
– مفاهیم real-time: interrupt service routineها (ISRs)، critical sectionها، mitigation priority inversion

سطح: 5 – Expert
– meta-programming template پیشرفته: variadic templates، SFINAE، type traits
– مدل object C++ عمیق: vtableها، layout object، ملاحظات ABI
– هم‌روندی lock-free & low-latency: atomics، memory orderingها، الگوریتم‌های wait-free
– درونیات کامپایلر و toolchain: pipelineهای pass GCC/Clang، نوشتن pluginهای کامپایلر سفارشی
– tuning عملکرد: cache alignment، branch prediction، profiling عمیق (مثلاً gprof، hardware counterها)
– porting bare-metal: پیاده‌سازی stubهای newlib، runtime C حداقل، کد bring-up
– استانداردها و ایمنی: compliance MISRA-C/C++، ابزارهای static analysis (Coverity، Cppcheck)
– مشارکت در framework: نوشتن/بهینه‌سازی درایورها برای درونیات FreeRTOS یا ESP-IDF

2 – ESP-IDF (native) یا Arduino-ESP32

سطح: 1 – Absolute Beginner
– نصب toolchain ESP-IDF (Python، Git، scriptهای ESP-IDF) یا core Arduino-ESP32
– راه‌اندازی VS Code (یا Arduino IDE) برای توسعه ESP32
– build و flash مثال «blink»
– بررسی layout پروژه (CMakeLists.txt، sdkconfig یا platformio.ini)
– استفاده از دستورات پایه idf.py (یا Arduino): build، clean، flash، monitor

سطح: 2 – Beginner
– GPIO: پیکربندی پین‌ها، خواندن ورودی‌ها، راه‌اندازی LED
– ADC: نمونه‌برداری از کانال‌های آنالوگ، تبدیل مقادیر raw به ولتاژ
– UART & I²C: ارسال/دریافت رشته‌ها یا بایت‌های ساده
– حالت station Wi-Fi: scan APها، اتصال، دریافت IP
– BLE peripheral: advertise، اتصال از یک اپ گوشی
– Tweak menuconfig (partition table، log level) یا تنظیمات برد Arduino

سطح: 3 – Intermediate
– taskها، queueها و timerهای FreeRTOS در چارچوب ESP-IDF
– Wi-Fi events API: مدیریت connect/disconnect، منطق reconnection
– BLE client & GATT: کشف سرویس‌ها، خواندن/نوشتن characteristicها
– SPI & I²C: یکپارچه‌سازی و کالیبراسیون یک سنسور واقعی (مثلاً رطوبت خاک)
– HTTP(S) OTA updates: راه‌اندازی partitionها، trigger کردن updateها
– استفاده از esp_timer، logging دقیق (ESP_LOG*) و کدهای خطا

سطح: 4 – Advanced
– ایجاد کامپوننت‌های reusable (CMake Component API) یا کتابخانه‌های سفارشی Arduino
– ساخت یک partition table سفارشی و جابجایی partitionها در runtime
– Provisioning امن: SmartConfig، راه‌اندازی Wi-Fi مبتنی بر BLE
– مثال‌های BLE پیشرفته (L2CAP، mesh)
– بهینه‌سازی SPI DMA و تنظیمات سرعت/timeout bus I²C
– یکپارچه‌سازی mbedTLS برای MQTT over TLS
– اتوماسیون build/flash/test در CI (GitHub Actions، scriptهای ESP-IDF CI)

سطح: 5 – Expert
– مشارکت درایورهای جدید یا رفع باگ در core ESP-IDF (مثلاً کالیبراسیون ADC)
– توسعه bootloader سفارشی یا بهینه‌سازی سطح ISR
– tuning دقیق heap regionها و پارامترهای scheduler FreeRTOS
– پیاده‌سازی end-to-end secure boot و flash encryption
– tracing و profiling real-time (ESP-Trace، Perfcnt)
– architect کردن workspaceهای CMake multi-project
– mentoring دیگران: تعریف best practices ESP-IDF و کتابخانه‌های کامپوننت داخلی

3 – FreeRTOS Fundamentals

سطح: 1 – Absolute Beginner
– درک اینکه RTOS چیست و چرا از آن استفاده می‌کنید
– نصب FreeRTOS (از طریق ESP-IDF یا PlatformIO) و بررسی مثال demo task «hello world»
– یادگیری API پایه برای ایجاد و شروع یک task واحد (xTaskCreate، vTaskStartScheduler)
– بررسی system tick و نحوه جابجایی scheduler بین taskها
– استفاده از vTaskDelay برای مسدود کردن یک task برای زمان ثابت

سطح: 2 – Beginner
– ایجاد taskهای multiple با اولویت‌ها و stack sizeهای مختلف
– استفاده از vTaskDelayUntil برای زمان‌بندی task دوره‌ای
– درک و اعمال critical sectionها (taskENTER_CRITICAL / taskEXIT_CRITICAL)
– آشنایی با حالت‌های task (Running، Ready، Blocked، Suspended)
– استفاده از vTaskSuspend / vTaskResume برای کنترل ساده task

سطح: 3 – Intermediate
– ارتباط بین taskها با queueها (xQueueCreate، xQueueSend، xQueueReceive)
– همگام‌سازی taskها با binary و counting semaphoreها (xSemaphoreCreateBinary، xSemaphoreTake)
– هماهنگ‌سازی رویدادها با Event Groups (xEventGroupSetBits، xEventGroupWaitBits)
– استفاده از timerهای نرم‌افزاری (xTimerCreate، callback)
– تشخیص و مدیریت stack overflow

سطح: 4 – Advanced
– بهینه‌سازی allocation حافظه: انتخاب و پیکربندی schemeهای heap (heap_1…heap_5) و درک fragmentation
– استفاده از task notificationها به عنوان binary semaphoreهای سبک‌وزن یا پیام‌های داده direct-to-task
– پیکربندی و استفاده از tickless idle mode برای کاربردهای کم‌مصرف
– تولید و تفسیر run-time statistics (vTaskGetRunTimeStats)
– یکپارچه‌سازی FreeRTOS+Trace یا Percepio Tracealyzer

سطح: 5 – Expert
– porting FreeRTOS به سخت‌افزار سفارشی یا اصلاح port layer برای use caseهای پیشرفته
– پیاده‌سازی و tuning policyهای scheduler سفارشی یا hook functionها (vApplicationIdleHook، vApplicationMallocFailedHook)
– طراحی state machineهای پیچیده با استفاده از primitiveهای همگام‌سازی پیشرفته (mutexها با priority inheritance، recursive mutexها)
– mentoring تیم‌ها درباره best practices، ایمنی (کد MISRA-compliant) و tuning رفتار deterministic

4 – Git & GitHub/GitLab

سطح: 1 – Absolute Beginner
– نصب Git؛ پیکربندی user.name و user.email
– مقداردهی اولیه repo (git init) و clone کردن repoهای موجود (git clone)
– tracking فایل پایه: git status، git add، git commit
– مشاهده تاریخچه با git log، بررسی تغییرات با git diff
– .gitignore ساده برای exclude کردن فایل‌ها

سطح: 2 – Beginner
– ایجاد و جابجایی branchها: git branch، git checkout/git switch
– راه‌اندازی remote: git remote add، git fetch، git pull، git push
– درک origin/main در مقابل branchهای local
– رفع conflictهای merge ساده از طریق editor یا CLI
– استفاده از رابط وب GitHub/GitLab برای مرور commitها و branchها

سطح: 3 – Intermediate
– Merge در مقابل rebase: git merge، git rebase؛ دانستن زمان استفاده از هر کدام
– Interactive rebase (git rebase -i) برای تمیز کردن commitها
– Tagging: ایجاد tagهای annotated و lightweight؛ push با git push –tags
– کار با pull requestها (GitHub) یا merge requestها (GitLab): ایجاد، بازبینی، merge
– CI stub پایه: افزودن یک YAML ساده GitHub Actions یا GitLab CI

سطح: 4 – Advanced
– مدیریت submoduleها (git submodule) و subtreeها
– نوشتن hookهای client-side (pre-commit، pre-push) و hookهای ساده server-side GitLab/GitHub
– محافظت از branchها و اجرای merge checks (status checks، approvals)
– ساخت pipelineهای CI/CD multi-stage با caching و artifactها
– استفاده از git bisect برای پیدا کردن باگ‌ها؛ cherry-pick کردن commitهای خاص

سطح: 5 – Expert
– مدیریت تنظیمات org GitLab/GitHub: permissionهای user/group، branchهای محافظت‌شده
– architect کردن استراتژی‌های monorepo؛ مدیریت فایل‌های بزرگ با Git LFS
– توسعه ابزارها یا scriptهای Git سفارشی (libgit2، hookها، اتوماسیون)
– deep-dive به درونیات Git: object storage، packfileها، refs، index
– تعریف و اجرای workflowها (Gitflow، trunk-based، GitOps);mentoring تیم درباره best practices

5 – VS Code

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

6 – PlatformIO

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

7 – Linux CLI / WSL

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

8 – Unit-Testing Framework (Unity / CppUTest)

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

9 – Continuous Integration (GitHub Actions / GitLab CI)

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

10 – Jira & Confluence

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

11 – Digital & Analog Electronics

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

12 – PCB Design (KiCad / Altium)

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

13 – Power-Budgeting & Solar-Li-ion Charging

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

14 – Battery Management (18650)

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

15 – Cellular Comms (SIMCom AT, PPP, TCP/IP)

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

16 – IoT Protocols (MQTT / HTTPS)

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

17 – TLS / mbedTLS Security Basics

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

18 – Sensor Calibration & Compensation

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

19 – Data Logging & OTA Storage

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

20 – Remote OTA Update Flow

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

21 – Control & Estimation Theory

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

22 – Python / Bash Scripting

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

23 – Cloud & Dashboard Basics

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

24 – Regulatory & Environmental Compliance

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات:

25 – Documentation Tooling (Markdown, Doxygen)

سطح: 1 – Absolute Beginner
موضوعات:

سطح: 2 – Beginner
موضوعات:

سطح: 3 – Intermediate
موضوعات:

سطح: 4 – Advanced
موضوعات:

سطح: 5 – Expert
موضوعات: