COMPΞZ 🧬
396 subscribers
1.87K photos
52 videos
24 files
739 links
متخصص کامپیوتر و نرم‌افزار • سازنده • هنرمند و طراح • مجموعه‌دار • نویسنده • تحلیل‌گر • مشاور استارتاپی و ایده‌پرداز

𐎲𐎴𐎠𐎼𐎴𐎫𐎹 𐏃𐎢𐎶𐎠𐎫𐎹

We create because the world deserves better code.

https://linktr.ee/compez
Download Telegram
COMPΞZ 🧬
این کتاب‌ها که می‌گم همشون مربوط به معماری کامپیوتر هستن! یعنی درک درست از معماری و رابطهٔ بین سخت‌افزار و نرم‌افزار.
در خصوص برنامه‌نویس و مهندسی نرم‌افزار هم من خودم این کتاب‌ها رو خوندم یا PDF اشو و یا بعضی‌هاشونم دادم چاپ کردن فیزیکی خوندم.

📘 Effective Modern C++
📘 C++ Concurrency in Action
📘 Professional C++
📘 Programming: Principles and Practice Using C++
📘 A Tour of C++
📘 The C++ Programming Language
📘 Clean Architecture
📘 Clean Code
📘 Professional CMAKE A practical guide
📘 Software architecture with C++

اینا از واجبات درک برنامه‌نویسیه! نه فقط برای خصوص برنامه‌نویسی سطح پیشرفته، اصلاً برای درک معماری و نرم‌افزار باید خونده بشن.

مثلاً بعضی‌ها مثل Domain-Driven Design  و Clean Architecture یا Clean Code اینارو دیگه هر برنامه‌نویسی باید بخونه با هر زبانی که کار می‌کنه لازمش میشه.

ولی خب برای سطوح پیشرفته ساخت محصولات خفن، قبل از ورود باید مباحث مربوط به Computer Organization and Design رو بخونی! چند جلد کتابن که همشون یکی از یکی پر از محتوای عالی. سخته اما آقا اگه می‌خوای مهندسی فکر کنی و متخصص باشی اینارو باید بخونی نه اینکه ۲ دو ۲ تا چهارتا رو کد نویسی کنی بعد با AI بگی من خفنم! هیچم خفن نیستی! منم بعد نزدیک به ۲۰ سال زحمتی که توی این تخصص کشیدم هنوز می‌گم هیچ کوفتی نیستم بعد چطور شما ادعا داری تو ۲ سال شدی پروفسور؟! سر در نمیارم! 😖
COMPΞZ 🧬
در خصوص برنامه‌نویس و مهندسی نرم‌افزار هم من خودم این کتاب‌ها رو خوندم یا PDF اشو و یا بعضی‌هاشونم دادم چاپ کردن فیزیکی خوندم. 📘 Effective Modern C++ 📘 C++ Concurrency in Action 📘 Professional C++ 📘 Programming: Principles and Practice Using C++ 📘 A Tour…
خیلی چیز‌ها از داخل کتاب‌ها می‌تونی پیدا کنی که تا به چشم نبینی، تا نخونی هیچ هوش مصنوعی‌ای بهش اشاره نمی‌کنه و رعایتش هم نمیکنه. همشون هم به ظاهر سادن و نادیده گرفته می‌شن اما به شدت در توسعه و شکل‌گیری یک محصول واقعی مهمن.

همین مثال ساده داخل همین کتاب

Software architecture with C++

میگه: خودت رو تکرار نکن!

یعنی چی؟ منظورش این نیست کد تکراری ننویس! می‌گه باید یک دانش، قانون، منطق یا تصمیم در پس زمینه یک منبع اصلی داشته باشه.

یعنی اگه فردا قانون تغییر کرد، مجبور نشی صد تا فایل رو تغییر بدی فقط به خاطر یه باگ یا یه ویژگی!

اینارو باید توی عمل ببینی و انجام بدی، و اگرنه خیلی جاها درکش به شدت نا مفهومه.
چی شد پس این انتقام سخت؟ بهترین فرصته‌ها! طرف بیخ گوشیمونه! 😉😒😪
:)
COMPΞZ 🧬
:)
یه زمانی مد شده بود هرچی اسکریپت یا سیستم می‌ساختن می‌گفتن Non Blocking I/O هست خیلی خفنه! شعار تبلیغاتیشون شده بود این به خصوص اون اوایل وب ۳ که هرچی سایت می‌ساختن با ری‌اکت و راست ترکیبش می‌کردن می‌گفتن ببین چقدر سریع و خفنه!

خب سریع‌ترین CMS ای که توی عمرتون دیدین رو برای من معرفی کنید! تگرارو با همون مقایسه خواهم کرد. 🫡 با هزاران و شاید هم میلیون‌ها تست استرس واقعی می‌خوام فشار بیارم به این سیستم.

قوی‌ترین رو بذارید روی میز! 😊 می‌خوام فرق یک سیستم کامپایلری Native خالص رو با یک سیستم اسکریپتی براتون نشون بدم.
اینطور که می‌بینم داریم باز قطع می‌شیم نه؟ توف تو قبرتون بیاد. تقی به توقی سریع خر‌خره ملت رو هدف بگیرید از صبح دو تا صفحه نتونستم باز کنم با این وضعیت نت شخمی! اینبار قطع بشیم من دیگه حوصله ندارم سرور بگیرم سرویس بسازم پول بدم به اون آروان دزد‌تر از خودتون.

نجه قالمیشیخ مووووصیبته بو گده گودلرین الیننننن.
COMPΞZ 🧬
یه زمانی مد شده بود هرچی اسکریپت یا سیستم می‌ساختن می‌گفتن Non Blocking I/O هست خیلی خفنه! شعار تبلیغاتیشون شده بود این به خصوص اون اوایل وب ۳ که هرچی سایت می‌ساختن با ری‌اکت و راست ترکیبش می‌کردن می‌گفتن ببین چقدر سریع و خفنه! خب سریع‌ترین CMS ای که توی…
در مورد نحوهٔ انتقال فرامتن روی محتوای صفحه‌هات سوألی بود که که بد نیست بدونید این CMS دارای یک ویرایشگر درون برنامه‌ای هست به نام TGEditor به علاوهٔ پشتیبانی از Markdown.

ولی از سه نوع ویرایشگر دیگه مثل Quill و TinyMCE و CKEditor هم به صورت نصب از نوع افزونه پشتیبانی می‌کنه.

قدیما من با CKEditor زیاد کار کردم، گزینهٔ خوبیه.

در واقع کاربر می‌تونه هر نوع ویرایشگری که باهاش راحته رو انتخاب کنه.

البته تمرکز من این خواهد بود که TGEditor رو به دو حالت Compact و Pro توسعه بدم.

ولی خب از اونجایی که خیلی‌ها روی سیستم‌های دیگه با امثال TinyMCE و یا به سبک مارک‌دان گیت‌هاب هم عادت دارن اینارو هم پشتیبانی می‌کنیم.
COMPΞZ 🧬
در مورد نحوهٔ انتقال فرامتن روی محتوای صفحه‌هات سوألی بود که که بد نیست بدونید این CMS دارای یک ویرایشگر درون برنامه‌ای هست به نام TGEditor به علاوهٔ پشتیبانی از Markdown.
😉 یک اسپویل بدم از محیط TGEditor.
این یک ویرایشگر ساده و سبک هست با پشتیبانی از Markdown که کاربر می‌تونه با ساده‌ترین حالت ممکن محتوای مربوط به فرامتن‌های وب‌سایت رو باهاش ویرایش کنه.

البته می‌دونم بخش بلاک کدش زیادی لوس شده! اونو با highlightJS شاید جایگزین کنم تا هر زبانی رو به سبک خودش پشتیبانی کنه.
از من به شما نصیحت، هر مدرسی که اهل پایتون و راست بود و در مورد سی++ اینطور صحبت‌ها کرد به قطع یقین چپی یا خرزشی هست. 😁 حالا دوست داشتین حرف‌هاش رو باور کنید.

این‌ها توی همه چیز این مدلی هستن! چون نمی‌تونن و از دستشون بر نمیاد با واقعیت روبرو بشن ساده‌ترین توجیه براشون نپذیرفتن و گمراه کردن دیگران هست.

به همین سادگی!
قبلاً بارها و بارها توضیح دادم که چرا! اساتید ایرانی دو قرون اگه سواد داشتن که رسانشون ویندوز رو با HTML نمی‌ساخت. 😄😉 البته اینا ایرانی واقعی نیستن... دیگه وارد جزئیاتش نمی‌شم خودتون می‌دونید چی می‌گم.
COMPΞZ 🧬
از من به شما نصیحت، هر مدرسی که اهل پایتون و راست بود و در مورد سی++ اینطور صحبت‌ها کرد به قطع یقین چپی یا خرزشی هست. 😁 حالا دوست داشتین حرف‌هاش رو باور کنید. این‌ها توی همه چیز این مدلی هستن! چون نمی‌تونن و از دستشون بر نمیاد با واقعیت روبرو بشن ساده‌ترین…
دلیلش اینه که اکثر جامعه اینطور یاد گرفتن که فقط چیز‌های نزدیک به سخت‌افزار و سیستمی رو با این زبان‌ها باید ساخت.

این تا حدی اشتباهه! این زبان بر خلاف راست و سی یک زبان سطح بالاست نه سطح پایین.

هرچند گاهاً هم می‌گن سطح میانی است؛ اما این هم اشتباهه.

دلیل اینکه بهش می‌گیم خدایان زبان‌های برنامه‌نویسی دقیقاً همین خاصیت‌هاشه که می‌تونید نا ممکن‌ها رو باهاش بسازید خیلی هم خوب و خیلی‌هم خفنشو بسازید.

اینکه کسی نمی‌تونه فقط بر می‌گرده به محدودیت‌ها در آگاهی و شناختش نسبت به یک ابزار و این می‌شه پاسخ که خب چون من نتونستم پس نمیشه. :) اتفاقاً اون چیز‌هایی که در زبان‌های دیگه نمی‌تونید بسازید راه چارش اینوره.

حالا برای تجربهٔ بیشتر CMS که آماده شد خودتون خواهید دید که چه خروجی‌هایی میشه در وب با این زبان ایجاد کرد که برای بعضی‌ها حتی تصورش هم تو خواب ممکن نبود.
COMPΞZ 🧬
دلیلش اینه که اکثر جامعه اینطور یاد گرفتن که فقط چیز‌های نزدیک به سخت‌افزار و سیستمی رو با این زبان‌ها باید ساخت. این تا حدی اشتباهه! این زبان بر خلاف راست و سی یک زبان سطح بالاست نه سطح پایین. هرچند گاهاً هم می‌گن سطح میانی است؛ اما این هم اشتباهه. دلیل…
بارها گفتم شرکت‌ها و سیستم تبلیغاتی جامعه مردم رو فریب میدن که برای خودشون رقیب در محصولات نتراشند. اینو من ۱۵ سال پیش وقتی بردهٔ مایکروسافت و اون قوائد مزخرفش بودم درک کردم! یه عمر با سی‌شارپ و ویژو‌ال بیسیک کار کردم تا بفهمم چرا این زبان‌ها محدودیت دارن و چرا تبلیغ میشن اصلاً.

بزرگان صنعت نرم‌افزاری چیز‌های خوب رو برای خودشون انحصاری می‌کنن و یه سری ابزار‌های مزخرف برای دیگران توصیه می‌کنن! مثل مایکروسافت، اپل یا گوگل! خب به همینجاش فکر نکردین که چرا اپل خودش با سی++ محصولاتش رو می‌سازه ولی برای جامعش Swift رو پیشنهاد می‌کنه؟ یا اون مایکروسافت چرا با سی++ محصولات انحصاریش رو می‌سازه ولی سی‌شارپ رو توصیه می‌کنه به بقیه؟ یا گوگل؟ چرا؟

درسته که این ابزار‌ سخته! مهندسی و تخصصیه و جامعه همه قرار نیست متخصص باشن! اما اینکه همه چیزو پنهان کنی و در مورد واقعیت‌ها صحبت نکنی این خودش سیاستی برای کنترل جامعهٔ توسعه‌دهنده‌هاست.

جامعه باید یک مکانیزمی داشته باشه! چرا باید تبلیغ چیزی رو کنه که فردا روزی یکی بیاد یه چیزی بسازه که بتونه رقابت کنه با محصول یک شرکت غول؟ 😄😉

در مورد راست ندیدین چه تبلیغات گنده‌گوزی‌ای موزیلا براش کرد حتی به قدری هزینه کرد که نفهم‌ها اومدن مراجع سی++ رو هک کردن و به زور اسم راست رو چپوندن توش که مثلاً ملت رو به شک بندازن؟! همون موقع کل کمیتهٔ استاندارد‌سازی به این رفتار بچگانشون خندید.

اینا اینطورین! دنیا دست یه مشت چپیه که نمی‌ذاره منافع خودشون زیر سوأل بره! ذهن‌ها رو با تبلیغات دروغ و کودن پروری سوق میدن به سمتی که جامعه رو گمراه کنن.

اسمشم می‌ذارن سخته، ایمن نیست، فلان نیست. چون تنها زبانیه که متعلق به هیچ شرکت یا فردی نیست! یک استاندارد پشتشه و همهٔ این شرکت‌ها هم وابستشن. اما این مسخره‌بازی‌هاشون همیشه بوده و هست.

سیاست توی همه چیز رخنه کرده! نمی‌ذارن ملت از چیزی که باید آگاه باشن شما بخوای پیشرفت کنی خودت باید بری دنبالش و اگرنه با توصیه این شرکت‌ها قرار نیست پیشرفتی کنی.

همین Fable 5 رو که دیدی... چرا خاموشش کردن؟ و چرا الآن به شدت ضعیفش کردن؟ چون دیدن که عه!!! ملت می‌تونن به چیز‌هایی دسترسی داشته باشن که ممکنه به ضرر ما باشه. همیشه همینطور بوده و همینطور خواهد بود.

جامعه به خصوص جامعهٔ ایرانی ساده‌تر از اونیه که فکرشو می‌کنید، به قدری سادن که هرکی هرچی گفت عین بت می‌پرستنش! چه یک ابزار باشه، چه یه شخص یا ایدوئولوژی باشه. هیچ وقت هم به خودشون نمی‌گن آخه بابا یه علامت سوأل تو ذهنم بسازم توش بعد ببینم داستان چیه اصلاً.
COMPΞZ 🧬
بارها گفتم شرکت‌ها و سیستم تبلیغاتی جامعه مردم رو فریب میدن که برای خودشون رقیب در محصولات نتراشند. اینو من ۱۵ سال پیش وقتی بردهٔ مایکروسافت و اون قوائد مزخرفش بودم درک کردم! یه عمر با سی‌شارپ و ویژو‌ال بیسیک کار کردم تا بفهمم چرا این زبان‌ها محدودیت دارن…
البته یه چیزی رو صادقانه بگم! هرچقدر کمتر بدونید راحت‌ترید!
هم زندگی واستون راحته هم کمتر از کثافت‌کاری دیگران حرص می‌خورید. چیز‌های سطحی رو یاد بگیرید راحت‌تر زندگی کنید حالشو ببرید.

ما که عددی نیستیم ولی بسیاری از بزرگ‌ترین دانشمندان و متفکران تاریخ، بهای سنگینی برای اندیشیدن و کشف حقیقت پرداختن! پیشگام بودن معمولاً با تنهایی، مقاومت دیگران و سال‌ها تلاش بی‌وقفه همراه بوده.
این پیشنهاد چیز جالبی بود!
https://htmx.org

چرا که نه! لایهٔ رندرینگ CMS خودش مجزاست؛ من تصمیم داشتم این لایه رو به یک روند بازطراحی کننده سمت بک‌اند تبدیل کنم ولی با دیدن این موضوع بد نیست به عنوان یک گزینه در اختیار صاحبین وب‌سایت قرار بدیم.

یعنی وقتی سیستم رو نصب می‌کنی، کاربر انتخاب می‌کنه که به کدوم حالت صفحه‌هات براش رندر بشن:

Rendering Engine

├── HTML Standard
├── Native Enhanced
│ └── Provider
│ ├── HTMX
│ ├── Turbo (future)
│ └── Native (future)
└── Native Dynamic (future)
COMPΞZ 🧬
این پیشنهاد چیز جالبی بود! https://htmx.org چرا که نه! لایهٔ رندرینگ CMS خودش مجزاست؛ من تصمیم داشتم این لایه رو به یک روند بازطراحی کننده سمت بک‌اند تبدیل کنم ولی با دیدن این موضوع بد نیست به عنوان یک گزینه در اختیار صاحبین وب‌سایت قرار بدیم. یعنی وقتی…
مزیت Native Enhanced با HTMX این است که تگرا همچنان همه‌چیز را سمت سرور و با ++C رندر می‌کند، اما برای هر تعامل مجبور نیست کل صفحه دوباره بارگذاری شود.

نتیجه‌اش میشه همچین چیزی:

- جابه‌جایی بین صفحات سریع‌تر و نرم‌تر می‌شود.
- داده و HTML کمتری منتقل می‌شود.
- نیاز به React، Vue و SPA از بین می‌رود.
- منطق UI همچنان روی بک‌اند متمرکز می‌ماند.
- فرم‌ها، فیلترها، صفحه‌نگاری‌ها، مدل‌ها و جدول‌های ادمین ساده‌تر پویا می‌شوند.
- ساختار SEO حفظ می‌شود، چون درخواست مستقیم هنوز HTML کامل می‌گیرد.
- بدون JavaScript هم سایت می‌تواند به روش عادی کار کند.
- مصرف منابع مرورگر نسبت به SPA کمتر می‌ماند.
- توسعه و نگهداری برای یک CMS سرورمحور ساده‌تر می‌شود.

به علاوهٔ این چیزی که در هسته گنجوندم مکانیزمی برای رندر کردن صفحه‌هات از Memory هست به جای دیسک سخت و فایل‌ها! مانور دادن روی این موضوع خیلی مهمه! به خصوص وقتی شما با مشکلات CDN برخورد می‌کنی و با کوچیکترین تغییر وب‌سایت کند یا ناقص یا حتی بارگذاری نمیشه.
حقیقتاً بعضی‌ها انگار برای نفهمیدن آفریده شده‌اند؛ نه تجربه عوضشان می‌کند، نه منطق، نه واقعیت.


در واقع گاو به دنیا اومدن، گاو می‌مونن و گاو به درک واصل می‌شن. 😪 ولشون کنید اینا رو خدا برای نفهمیدن برنامه‌نویسی کرده! دقیقاً مثل همون بخش Unit Test هست که ما عمداً کد رو برای نفهمیدن می‌نویسیم که ثابت کنیم این باگ چه نتیجه‌ای داره! ایناهم همینطورن. باگ‌های خلقتن اما به عمد از سمت آفریدگار عالم که قربونش برم چقدر تمیز برنامه‌نویسی کرده! به همراه مستندات و مثال‌های آشکار برای فهمیدن آن‌چیزی که لازمه.
COMPΞZ 🧬
حقیقتاً بعضی‌ها انگار برای نفهمیدن آفریده شده‌اند؛ نه تجربه عوضشان می‌کند، نه منطق، نه واقعیت. در واقع گاو به دنیا اومدن، گاو می‌مونن و گاو به درک واصل می‌شن. 😪 ولشون کنید اینا رو خدا برای نفهمیدن برنامه‌نویسی کرده! دقیقاً مثل همون بخش Unit Test هست که ما…
همینقدر شفاف و ساده!

هرچه یک زبان قدرتمندتر و امکاناتش بیشتر باشد، اشتباهات ساده را بهتر مهار می‌کند، اما در عوض امکان ساختنِ اشتباهات پیچیده‌تر و عمیق‌تر هم وجود دارد.

قدرت همیشه با مسئولیت همراه است. هیچ زبان برنامه‌نویسی نمی‌تواند جای مهندسی نرم‌افزار خوب، طراحی صحیح و درک عمیق مسئله را بگیرد.
خیلی‌ها هنوز گارد می‌گیرن که هوش مصنوعی ملتو بیکار می‌کنه! حتی نزدیکش نمی‌شن! خب بله کارهای سطحی حذف می‌شن اما استفاده از AI الآن واقعاً خریدِ خودِ زمانه! با هوش باشی می‌تونی خیلی کار‌ها رو که عذاب می‌کشیدی یا براش کلی هزینه صرف می‌کردی رو خیلی راحت‌تر مدیریت کنی بدون کوچیک‌ترین خطا.

یکی از بخش‌هایی که خودم خیلی ازش راضی هستم بحث ترجمهٔ فایل‌های زبان نوشتاری محتواست!

تقریباً ۱۲-۱۳ سال پیش برای ترجمهٔ فایل‌های زبانِ سیستم الینور (یک CMS روسی) فقط برای ترجمهٔ فایل‌های بخش مدیریت وب‌سایت حدود ۱ تا ۲ هفته وقت می‌ذاشتم تازه اگه اشتباه تایپی نداشتم یا یه نقطه‌ای خطی چیزی رو خراب نمی‌کردم سیستم کامپایل می‌شد و محتوا رو می‌خوند! شده بود بارها بین هزاران خط یهو بین مثلاً خط ۱۵۰۰ یه نقطه از کد رو جا انداختم حین ترجمه و این به خاطر خطای سینتکس PHP کل فایل ترجمه رو با شکست مواجه می‌کرد. تازه اگه خیلی هم درست از اب در میومد نوک انگشتام می‌سوخت از شدت فشاری که بهشون میاوردم.

الآن با هوش مصنوعی یه فایل مرجع فارسی یا انگلیسی رو میدی سیر تا پیازش رو به هر سطحی که بخوای واست ترجمه می‌کنه اونم زیر چند دقیقه! بدون هیچ مشکلی یا شکستن ساختار کد و حتی خطای گرامری.

خب این زمان نمی‌خره پس چیه؟ والا باید پاره پوره شده باشی تا قدر هوش مصنوعی رو الآن بدونی. این حرف‌ها چیه به درد نمی‌خوره! اتفاقاً به درد می‌خوره کافیه مغزتو به کار بندازی درست ازش استفاده کنی.
COMPΞZ 🧬
تقریباً ۱۲-۱۳ سال پیش برای ترجمهٔ فایل‌های زبانِ سیستم الینور (یک CMS روسی) فقط برای ترجمهٔ فایل‌های بخش مدیریت وب‌سایت حدود ۱ تا ۲ هفته وقت می‌ذاشتم تازه اگه اشتباه تایپی نداشتم یا یه نقطه‌ای خطی چیزی رو خراب نمی‌کردم سیستم کامپایل می‌شد و محتوا رو می‌خوند! شده بود بارها بین هزاران خط یهو بین مثلاً خط ۱۵۰۰ یه نقطه از کد رو جا انداختم حین ترجمه و این به خاطر خطای سینتکس PHP کل فایل ترجمه رو با شکست مواجه می‌کرد. تازه اگه خیلی هم درست از اب در میومد نوک انگشتام می‌سوخت از شدت فشاری که بهشون میاوردم.
یکی از دردناک‌ترین مباحث برنامه‌نویسی ترجمهٔ فایل‌های زبان یک نرم‌افزار هست.
اینکه یک زبان راست به چپ با یک زبان چپ به راست و استاندارد‌هایی که دارد دقیقاً درست از آب در بیاد راحت نیست! فکرشو بکن سال‌ها پیش من این کار رو با دست خالی بدون هوش مصنوعی انجام میدادم اونم به سه زبان انگلیسی، فارسی و روسی.

هفته‌ها زمان می‌برد! کار با CSS از یه طرف کار با خود PHP از یه طرف! همرو سر هم می‌کردم تا قالب وب‌سایت با زبان‌های خودشون درست و استاندار نمایش داده بشن. تازه اونم با سواد اون موقع که زبانم همچین هم جالب نبود.

بعد حالا فکر کن همچین موضوعی چقدر ساده شده! نه فقط به زبان‌هایی که آشنا هستی بلکه به هر زبان یا نحوی که می‌خوای کارتو انجام میده.

نه خطایی! نه ایرادی! خب چی‌می‌خوای؟! به جای اینکه ۱ ماه وقت صرف کنی کلی هزینه کنی برای فقط ترجمهٔ یک محصول وقتت رو بذار برای توسعش این کار‌ها رو بذار توی دستهٔ فرعی نه اصلی. 😉 کافیه مکانیزم و معماریش درست باشه.