به درخواست چندتا از دوستان ، تصمیم دارم از میانه اسفند ماه یا میانه فروردین دوره تخصصی ساختمان داده در جاوااسکریپت رو برگزار کنم.
در ادامه سرفصلهاش رو میبینید. هنوز سرفصلهاش ، زمان برگزاریش و هزینهاش نهایی نشده.
هر کدام از دوستان تمایل به شرکت داره بهم پیام بده که توی گروه مرتبط ، جوینش کنم. اگر پیشنهادی هم دارید ، خوشحال میشم بشنوم.
1.Introduction to Data Structures and Complexity Analysis
•Overview of data structures and their importance
•JavaScript as a tool for implementing data structures
•Big O notation: time and space complexity basics
2.Arrays
•Understanding JavaScript arrays
•Operations: traversal, insertion, deletion, searching, and sorting
•Dynamic arrays vs. static arrays and performance considerations
3.Linked Lists
•Singly Linked Lists: structure, insertion, deletion, and traversal
•Doubly Linked Lists: advantages and operations
•Circular Linked Lists: implementation and use cases
•Comparison of linked lists with arrays
4.Stacks and Queues
Stacks:
•LIFO (Last-In, First-Out) principle
•Implementation using arrays or linked lists
•Common operations: push, pop, peek
•Practical applications (e.g., recursion, expression evaluation)
Queues:
•FIFO (First-In, First-Out) principle
•Implementation using arrays or linked lists
•Common operations: enqueue, dequeue, front, rear
•Variants: Circular Queues and Priority Queues (optional)
5.Trees
•Basic tree terminology: nodes, root, leaves, levels, depth
•Binary Trees: structure and traversal methods (inorder, preorder, postorder, level-order)
•Binary Search Trees (BST): insertion, deletion, and search operations
•Brief overview of balanced trees (AVL, Red-Black Trees) if time permits
6.Heaps
•Introduction to heaps: Max Heap and Min Heap
•Array-based heap implementation
•Key operations: insertion, deletion, and heapify
•Applications: implementing priority queues and heap sort
7.Hash Tables
•Fundamentals of hashing and hash functions
•Collision resolution strategies: chaining vs. open addressing
•Implementing a hash table in JavaScript
•Performance analysis and practical use cases
8.Graphs
•Graph basics: vertices, edges, directed vs. undirected graphs
•Graph representations: adjacency matrix and adjacency list
•Graph traversal algorithms: Depth-First Search (DFS) and Breadth-First Search (BFS)
9.Advanced Data Structures (Optional/Advanced Topics)
•Tries (Prefix Trees)
•Segment Trees
•Disjoint Set (Union-Find)
•Discussion on when and why to use these structures
در ادامه سرفصلهاش رو میبینید. هنوز سرفصلهاش ، زمان برگزاریش و هزینهاش نهایی نشده.
هر کدام از دوستان تمایل به شرکت داره بهم پیام بده که توی گروه مرتبط ، جوینش کنم. اگر پیشنهادی هم دارید ، خوشحال میشم بشنوم.
1.Introduction to Data Structures and Complexity Analysis
•Overview of data structures and their importance
•JavaScript as a tool for implementing data structures
•Big O notation: time and space complexity basics
2.Arrays
•Understanding JavaScript arrays
•Operations: traversal, insertion, deletion, searching, and sorting
•Dynamic arrays vs. static arrays and performance considerations
3.Linked Lists
•Singly Linked Lists: structure, insertion, deletion, and traversal
•Doubly Linked Lists: advantages and operations
•Circular Linked Lists: implementation and use cases
•Comparison of linked lists with arrays
4.Stacks and Queues
Stacks:
•LIFO (Last-In, First-Out) principle
•Implementation using arrays or linked lists
•Common operations: push, pop, peek
•Practical applications (e.g., recursion, expression evaluation)
Queues:
•FIFO (First-In, First-Out) principle
•Implementation using arrays or linked lists
•Common operations: enqueue, dequeue, front, rear
•Variants: Circular Queues and Priority Queues (optional)
5.Trees
•Basic tree terminology: nodes, root, leaves, levels, depth
•Binary Trees: structure and traversal methods (inorder, preorder, postorder, level-order)
•Binary Search Trees (BST): insertion, deletion, and search operations
•Brief overview of balanced trees (AVL, Red-Black Trees) if time permits
6.Heaps
•Introduction to heaps: Max Heap and Min Heap
•Array-based heap implementation
•Key operations: insertion, deletion, and heapify
•Applications: implementing priority queues and heap sort
7.Hash Tables
•Fundamentals of hashing and hash functions
•Collision resolution strategies: chaining vs. open addressing
•Implementing a hash table in JavaScript
•Performance analysis and practical use cases
8.Graphs
•Graph basics: vertices, edges, directed vs. undirected graphs
•Graph representations: adjacency matrix and adjacency list
•Graph traversal algorithms: Depth-First Search (DFS) and Breadth-First Search (BFS)
9.Advanced Data Structures (Optional/Advanced Topics)
•Tries (Prefix Trees)
•Segment Trees
•Disjoint Set (Union-Find)
•Discussion on when and why to use these structures
اگر کتاب کلین کد رو نخوندید ، متن زیر رو بخونید انگار کل کتاب رو خوندید (توسط هوش مصنوعی تولید شده)
---
در زیر یک خلاصه از کتاب کلین کد (Clean Code) نوشته رابرت سی. مارتین (عمو باب) ارائه شده است:
1. اهمیت کد تمیز:
کتاب تأکید میکند که کد نوشته شده باید مانند یک داستان خواندنی و قابل فهم برای هر برنامهنویسی باشد. کد تمیز، نگهداری و گسترش آن در طول زمان را بسیار سادهتر میکند.
2. نامگذاری معنادار:
• استفاده از نامهای واضح و دقیق برای متغیرها، توابع و کلاسها به خوانایی کد کمک میکند.
• نامهای خوب باید منظور و عملکرد اجزای کد را به خوبی منعکس کنند.
3. تابعهای کوچک و وظیفهگرا:
• هر تابع باید فقط یک کار مشخص انجام دهد.
• توابع کوتاه، تست و اشکالزدایی آنها را سادهتر میکند و باعث میشود کد بهینهتر و قابل فهمتر شود.
4. کد خود توضیحی:
• کد باید تا حد امکان به گونهای نوشته شود که خود به خود معنا داشته باشد و نیاز به کامنتهای اضافی کاهش یابد.
• کامنتها نباید به عنوان جایگزین کدهای قابل فهم استفاده شوند؛ بلکه باید تنها برای توضیح نکات پیچیده به کار روند.
5. اجتناب از پیچیدگی:
• سعی در ساده نگه داشتن ساختار کد و حذف پیچیدگیهای غیرضروری از اصول مهم کتاب است.
• پیچیدگی زیاد باعث افزایش احتمال خطا و سختی در نگهداری میشود.
6. اصول طراحی شیگرا (SOLID):
• کتاب به اصولی مانند اصل مسئولیتپذیری منفرد (Single Responsibility) و سایر اصول SOLID اشاره میکند که به طراحی سیستمهای منعطف و قابل توسعه کمک میکنند.
7. آزموننویسی و پوشش کد:
• اهمیت نوشتن تستهای واحد (Unit Tests) برای اطمینان از صحت عملکرد کد و جلوگیری از بروز خطا در آینده مورد تأکید قرار میگیرد.
• تستهای خوب به برنامهنویسان کمک میکنند تا هنگام تغییر یا اضافه کردن ویژگیهای جدید، عملکرد کد تضمین شود.
8. بازنگری و بهبود مداوم:
• کد هیچگاه “تمام شده” تلقی نمیشود؛ بلکه همیشه جای بهبود دارد.
• نویسنده توصیه میکند که برنامهنویسان به صورت مستمر کدهای خود را بازنگری کنند تا آنها را بهینه و تمیز نگه دارند.
9. فرهنگ کاری حرفهای:
• نوشتن کد تمیز تنها به تکنیکهای برنامهنویسی محدود نمیشود؛ بلکه یک نگرش و فرهنگ کاری است که بر احترام به همکاران و ارزش نگهداری سیستمهای نرمافزاری تأکید دارد.
نتیجهگیری:
کتاب کلین کد یک راهنمای عملی برای برنامهنویسان است تا با پیروی از اصول و روشهای مطرحشده، کدهایی تمیز، خوانا و قابل نگهداری بنویسند. این کتاب نشان میدهد که سرمایهگذاری در نوشتن کدهای باکیفیت نه تنها در کوتاه مدت بلکه در بلندمدت، بهرهوری تیم و کیفیت نرمافزار را به طور چشمگیری افزایش میدهد.
---
در زیر یک خلاصه از کتاب کلین کد (Clean Code) نوشته رابرت سی. مارتین (عمو باب) ارائه شده است:
1. اهمیت کد تمیز:
کتاب تأکید میکند که کد نوشته شده باید مانند یک داستان خواندنی و قابل فهم برای هر برنامهنویسی باشد. کد تمیز، نگهداری و گسترش آن در طول زمان را بسیار سادهتر میکند.
2. نامگذاری معنادار:
• استفاده از نامهای واضح و دقیق برای متغیرها، توابع و کلاسها به خوانایی کد کمک میکند.
• نامهای خوب باید منظور و عملکرد اجزای کد را به خوبی منعکس کنند.
3. تابعهای کوچک و وظیفهگرا:
• هر تابع باید فقط یک کار مشخص انجام دهد.
• توابع کوتاه، تست و اشکالزدایی آنها را سادهتر میکند و باعث میشود کد بهینهتر و قابل فهمتر شود.
4. کد خود توضیحی:
• کد باید تا حد امکان به گونهای نوشته شود که خود به خود معنا داشته باشد و نیاز به کامنتهای اضافی کاهش یابد.
• کامنتها نباید به عنوان جایگزین کدهای قابل فهم استفاده شوند؛ بلکه باید تنها برای توضیح نکات پیچیده به کار روند.
5. اجتناب از پیچیدگی:
• سعی در ساده نگه داشتن ساختار کد و حذف پیچیدگیهای غیرضروری از اصول مهم کتاب است.
• پیچیدگی زیاد باعث افزایش احتمال خطا و سختی در نگهداری میشود.
6. اصول طراحی شیگرا (SOLID):
• کتاب به اصولی مانند اصل مسئولیتپذیری منفرد (Single Responsibility) و سایر اصول SOLID اشاره میکند که به طراحی سیستمهای منعطف و قابل توسعه کمک میکنند.
7. آزموننویسی و پوشش کد:
• اهمیت نوشتن تستهای واحد (Unit Tests) برای اطمینان از صحت عملکرد کد و جلوگیری از بروز خطا در آینده مورد تأکید قرار میگیرد.
• تستهای خوب به برنامهنویسان کمک میکنند تا هنگام تغییر یا اضافه کردن ویژگیهای جدید، عملکرد کد تضمین شود.
8. بازنگری و بهبود مداوم:
• کد هیچگاه “تمام شده” تلقی نمیشود؛ بلکه همیشه جای بهبود دارد.
• نویسنده توصیه میکند که برنامهنویسان به صورت مستمر کدهای خود را بازنگری کنند تا آنها را بهینه و تمیز نگه دارند.
9. فرهنگ کاری حرفهای:
• نوشتن کد تمیز تنها به تکنیکهای برنامهنویسی محدود نمیشود؛ بلکه یک نگرش و فرهنگ کاری است که بر احترام به همکاران و ارزش نگهداری سیستمهای نرمافزاری تأکید دارد.
نتیجهگیری:
کتاب کلین کد یک راهنمای عملی برای برنامهنویسان است تا با پیروی از اصول و روشهای مطرحشده، کدهایی تمیز، خوانا و قابل نگهداری بنویسند. این کتاب نشان میدهد که سرمایهگذاری در نوشتن کدهای باکیفیت نه تنها در کوتاه مدت بلکه در بلندمدت، بهرهوری تیم و کیفیت نرمافزار را به طور چشمگیری افزایش میدهد.
یادتونه بیخوابی میکشیدید درس میخوندید؟ یادتونه تا چشماتون خون نمیافتاد کد میزدید؟ یادتونه بیپولی رو تحمل میکردید ولی یادگیری رو ادامه میدادید؟ یادتونه نصف روز کار میکردید نصف روز مطلب جدید یاد میگرفتید؟
امیدوارم یادتون نباشه و همیشه در آرامش رشد کرده باشید ولی به نظرم تا این روزا رو کسی نگذرونه نمیتونه رشد کنه.
الآن چی شده که همه میخوان بدون این روزا رشد کنن؟ حتی خودمون که این روزا رو گذرونیدیم.
امیدوارم یادتون نباشه و همیشه در آرامش رشد کرده باشید ولی به نظرم تا این روزا رو کسی نگذرونه نمیتونه رشد کنه.
الآن چی شده که همه میخوان بدون این روزا رشد کنن؟ حتی خودمون که این روزا رو گذرونیدیم.
توی سیستمعامل مک ، برای minimize کردن همه پنجرههای باز به صورت همزمان ، میتونید از shortcut زیر استفاده کنید:
Command (⌘) + Option (⌥) + H + M
Command (⌘) + Option (⌥) + H + M
پیشنهاد غیر فنی:
با شعر دوست باشید. مخصوصا اشعار خیام.
تاثیرش رو حس میکنید.
با شعر دوست باشید. مخصوصا اشعار خیام.
تاثیرش رو حس میکنید.
یک مورد امنیتی حساس روی سیستمعامل دیوایسهای اپل گزارش شده.
در اسرع وقت آپدیت کنید.
در اسرع وقت آپدیت کنید.
اگر از ادیتور Cursor به جای VSCode استفاده میکنید (که پیشنهاد میکنم این کار رو کنید) ، طبق اسکرینشات پیش برید و رولهای توی لینک زیر رو به رولهای Cursor اضافه کنید. هوش مصنوعیش بهتر جواب میده.
https://github.com/piotr-jura-udemy/cursorai-nextjs/blob/main/rules-for-ai.txt
https://github.com/piotr-jura-udemy/cursorai-nextjs/blob/main/rules-for-ai.txt
اگر اکانت چتجیپیتی دارید ، نمیخواد اکانت کرسر بخرید. میتونید مشابه اسکرین شاتهای زیر چتجیپیتی رو به کرسر اضافه کنید
خیلی کورس ساده و ترسناکیه. ببینید ، خطر بیکاری رو کنار گوشتون حس میکنید. نه فقط برای فرانت. برای هر تکنولوژی و استکی. نفس بگیرید ، عمیق بشید دوستان.
( مثلا نیمه اسفند توی دوره ساختمان داده من شرکت کنید 🤪 )
Udemy - Cursor AI Learn by Building Full-Stack Next.js 15 App 2025-1
( مثلا نیمه اسفند توی دوره ساختمان داده من شرکت کنید 🤪 )
Udemy - Cursor AI Learn by Building Full-Stack Next.js 15 App 2025-1
خلاصه کتاب کلین کدر
--------
۱. حرفهایگری در برنامهنویسی
یک برنامهنویس حرفهای باید مسئولیت کار خود را بپذیرد و بهترین عملکرد را ارائه دهد. حرفهایگری به این معناست که زمانبندیها را رعایت کنید، تعهدات خود را به درستی مدیریت کنید و کیفیت کد را همیشه در اولویت قرار دهید.
نکات کلیدی:
• «نه» گفتن به درخواستهای غیرمنطقی یک مهارت مهم است.
• برنامهنویس حرفهای کار خود را متعهدانه انجام میدهد، اما هر درخواست نابهجایی را نمیپذیرد.
• یادگیری مستمر و بهروز نگه داشتن دانش فنی از ویژگیهای یک حرفهای است.
۲. نوشتن کد با کیفیت و مسئولیتپذیری
کد باید به گونهای نوشته شود که نهتنها عملکرد صحیحی داشته باشد، بلکه خوانا، قابل نگهداری و تستپذیر باشد. برنامهنویسان باید مسئول کیفیت کار خود باشند و از ابتدا استانداردهای بالایی را رعایت کنند.
نکات کلیدی:
• تستنویسی (Unit Testing) وظیفهی هر برنامهنویس است، نه یک انتخاب.
• قبل از ارسال کد برای بازبینی، اطمینان حاصل کنید که همهی تستها پاس شدهاند.
• اگر اشکالی در کد شما وجود دارد، آن را بپذیرید و سریعا رفع کنید.
۳. مدیریت زمان و تخمینها
برنامهنویسان حرفهای باید مهارت تخمین زمان را بیاموزند. تخمینهای دقیق به تیم کمک میکند که برنامهریزی درستی انجام دهد و انتظارات مدیران و مشتریان را مدیریت کند.
نکات کلیدی:
• هنگام ارائهی تخمین، باید همهی عوامل (پیچیدگی، وابستگیها، تستها و تغییرات احتمالی) را در نظر بگیرید.
• اگر تخمین اولیهی شما اشتباه بود، به سرعت آن را اصلاح کنید و تیم را در جریان بگذارید.
• برنامهنویس نباید بدون بررسی دقیق، به هر درخواستی «بله» بگوید.
۴. برخورد حرفهای با فشار کاری
برنامهنویسان گاهی با فشار کاری شدید مواجه میشوند، اما یک حرفهای نباید اجازه دهد که این فشارها باعث کاهش کیفیت کارش شود.
نکات کلیدی:
• کار کردن بیش از حد معمولاً باعث کاهش بهرهوری و افزایش خطاها میشود.
• مدیریت زمان و انرژی برای حفظ تعادل بین کار و زندگی ضروری است.
• در شرایط بحرانی، تمرکز بر روی حل مشکل مهمتر از وحشتزدگی است.
۵. ارتباطات مؤثر در تیم
یک برنامهنویس حرفهای باید بتواند نظرات خود را شفاف بیان کند، بازخورد بگیرد و در کار تیمی مؤثر باشد.
نکات کلیدی:
• در جلسات فنی، به دقت گوش دهید و با ارائهی نظرات منطقی مشارکت کنید.
• بازخورد دادن و گرفتن بخش مهمی از حرفهایگری است.
• اگر با تصمیمی مخالف هستید، مخالفت خود را محترمانه و با ارائهی دلایل منطقی بیان کنید.
۶. یادگیری مداوم و رشد شخصی
یک برنامهنویس حرفهای باید همیشه در حال یادگیری باشد. فناوریها و روشهای توسعهی نرمافزار به سرعت تغییر میکنند و برای موفقیت، باید خود را بهروز نگه داشت.
نکات کلیدی:
• هر روز زمانی را برای مطالعه، تمرین و یادگیری اختصاص دهید.
• با پروژههای متنباز کار کنید، در کنفرانسها و انجمنهای فنی مشارکت داشته باشید.
• تجربیات خود را با دیگران به اشتراک بگذارید و از تجربیات دیگران یاد بگیرید.
۷. مهارت حل مسئله و مدیریت بحران
یکی از مهمترین مهارتهای یک برنامهنویس حرفهای، توانایی حل مشکلات پیچیده و مدیریت بحرانهاست.
نکات کلیدی:
• هنگام مواجهه با یک مشکل، قبل از نوشتن کد، مشکل را به خوبی تحلیل کنید.
• از ابزارها و روشهای مختلف برای عیبیابی (Debugging) استفاده کنید.
• در شرایط بحرانی، آرامش خود را حفظ کرده و بهترین راهحل ممکن را ارائه دهید.
--------
۱. حرفهایگری در برنامهنویسی
یک برنامهنویس حرفهای باید مسئولیت کار خود را بپذیرد و بهترین عملکرد را ارائه دهد. حرفهایگری به این معناست که زمانبندیها را رعایت کنید، تعهدات خود را به درستی مدیریت کنید و کیفیت کد را همیشه در اولویت قرار دهید.
نکات کلیدی:
• «نه» گفتن به درخواستهای غیرمنطقی یک مهارت مهم است.
• برنامهنویس حرفهای کار خود را متعهدانه انجام میدهد، اما هر درخواست نابهجایی را نمیپذیرد.
• یادگیری مستمر و بهروز نگه داشتن دانش فنی از ویژگیهای یک حرفهای است.
۲. نوشتن کد با کیفیت و مسئولیتپذیری
کد باید به گونهای نوشته شود که نهتنها عملکرد صحیحی داشته باشد، بلکه خوانا، قابل نگهداری و تستپذیر باشد. برنامهنویسان باید مسئول کیفیت کار خود باشند و از ابتدا استانداردهای بالایی را رعایت کنند.
نکات کلیدی:
• تستنویسی (Unit Testing) وظیفهی هر برنامهنویس است، نه یک انتخاب.
• قبل از ارسال کد برای بازبینی، اطمینان حاصل کنید که همهی تستها پاس شدهاند.
• اگر اشکالی در کد شما وجود دارد، آن را بپذیرید و سریعا رفع کنید.
۳. مدیریت زمان و تخمینها
برنامهنویسان حرفهای باید مهارت تخمین زمان را بیاموزند. تخمینهای دقیق به تیم کمک میکند که برنامهریزی درستی انجام دهد و انتظارات مدیران و مشتریان را مدیریت کند.
نکات کلیدی:
• هنگام ارائهی تخمین، باید همهی عوامل (پیچیدگی، وابستگیها، تستها و تغییرات احتمالی) را در نظر بگیرید.
• اگر تخمین اولیهی شما اشتباه بود، به سرعت آن را اصلاح کنید و تیم را در جریان بگذارید.
• برنامهنویس نباید بدون بررسی دقیق، به هر درخواستی «بله» بگوید.
۴. برخورد حرفهای با فشار کاری
برنامهنویسان گاهی با فشار کاری شدید مواجه میشوند، اما یک حرفهای نباید اجازه دهد که این فشارها باعث کاهش کیفیت کارش شود.
نکات کلیدی:
• کار کردن بیش از حد معمولاً باعث کاهش بهرهوری و افزایش خطاها میشود.
• مدیریت زمان و انرژی برای حفظ تعادل بین کار و زندگی ضروری است.
• در شرایط بحرانی، تمرکز بر روی حل مشکل مهمتر از وحشتزدگی است.
۵. ارتباطات مؤثر در تیم
یک برنامهنویس حرفهای باید بتواند نظرات خود را شفاف بیان کند، بازخورد بگیرد و در کار تیمی مؤثر باشد.
نکات کلیدی:
• در جلسات فنی، به دقت گوش دهید و با ارائهی نظرات منطقی مشارکت کنید.
• بازخورد دادن و گرفتن بخش مهمی از حرفهایگری است.
• اگر با تصمیمی مخالف هستید، مخالفت خود را محترمانه و با ارائهی دلایل منطقی بیان کنید.
۶. یادگیری مداوم و رشد شخصی
یک برنامهنویس حرفهای باید همیشه در حال یادگیری باشد. فناوریها و روشهای توسعهی نرمافزار به سرعت تغییر میکنند و برای موفقیت، باید خود را بهروز نگه داشت.
نکات کلیدی:
• هر روز زمانی را برای مطالعه، تمرین و یادگیری اختصاص دهید.
• با پروژههای متنباز کار کنید، در کنفرانسها و انجمنهای فنی مشارکت داشته باشید.
• تجربیات خود را با دیگران به اشتراک بگذارید و از تجربیات دیگران یاد بگیرید.
۷. مهارت حل مسئله و مدیریت بحران
یکی از مهمترین مهارتهای یک برنامهنویس حرفهای، توانایی حل مشکلات پیچیده و مدیریت بحرانهاست.
نکات کلیدی:
• هنگام مواجهه با یک مشکل، قبل از نوشتن کد، مشکل را به خوبی تحلیل کنید.
• از ابزارها و روشهای مختلف برای عیبیابی (Debugging) استفاده کنید.
• در شرایط بحرانی، آرامش خود را حفظ کرده و بهترین راهحل ممکن را ارائه دهید.
شغلایی که اگر بلد باشید ، بهتون کمک میکنه بیاید تورنتو.
از قصاب بگیر تا لولهکش
از قصاب بگیر تا لولهکش