Facebook Pixel
Searching...
فارسی
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Algorithms + Data Structures = Programs

Algorithms + Data Structures = Programs

توسط Niklaus Wirth 1976 366 صفحات
4.24
100+ امتیازها
گوش دادن

نکات کلیدی

1. مدیریت حافظه: پایه و اساس برنامه‌نویسی

هر کامپیوتر دیجیتال … چه به اندازه یک اتاق و چه به اندازه یک جیب … از سه بخش عملکردی یکسان تشکیل شده است: CPU = واحد پردازش مرکزی (ریزپردازنده، GPU و غیره)، I/O = ورودی/خروجی، حافظه اصلی.

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

مشکلات رایج حافظه. برنامه‌نویسان باید از مشکلات احتمالی آگاه باشند:

  • سرریز پشته (بازگشت بی‌پایان)
  • فساد هیپ
  • نشت حافظه
  • عدم تشخیص شکست‌های تخصیص
  • خستگی آرایه‌های با اندازه ثابت

درک این مسائل به نوشتن کد قوی‌تر و کارآمدتر کمک می‌کند، حتی زمانی که از زبان‌های سطح بالا استفاده می‌شود که بیشتر مدیریت حافظه را به‌طور خودکار انجام می‌دهند.

2. برنامه‌نویسی شیءگرا: محصور کردن داده‌ها و رفتار

یک "شیء"، برای مقاصد ما، یک قطعه ذخیره‌سازی خودتوصیف است که از هیپ تخصیص داده شده است. این شامل، نه تنها فضایی برای مقادیر فردی ("خواص") که ممکن است نیاز به ذخیره‌سازی داشته باشند، بلکه داده‌های توصیفی اضافی ("فرا داده") است که به‌طور مستقیم شیء را با کد رویه‌ای ("روش‌ها") که برای کار با آن طراحی شده‌اند، مرتبط می‌کند.

یکپارچه‌سازی داده‌ها و رفتار. برنامه‌نویسی شیءگرا (OOP) ساختارهای داده را با الگوریتم‌هایی که آن‌ها را دستکاری می‌کنند ترکیب می‌کند. این پارادایم امکان سازماندهی کد به‌صورت شهودی‌تر و ماژولارتر را فراهم می‌کند، که باعث افزایش قابلیت استفاده مجدد و نگهداری آسان‌تر می‌شود.

مفاهیم کلیدی OOP:

  • محصورسازی: پنهان کردن جزئیات پیاده‌سازی
  • وراثت: ایجاد سلسله‌مراتب اشیاء مرتبط
  • چندریختی: اجازه دادن به اشیاء برای رفتار به‌عنوان نمونه‌هایی از کلاس والد

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

3. SQL: زبان پایگاه‌های داده

SQL به شما اجازه می‌دهد تا مشخص کنید چه داده‌ای را می‌خواهید به دست آورید. این به عهده موتور پایگاه داده است که به‌صورت پویا برنامه‌ای برای به دست آوردن این پاسخ‌ها ایجاد کند و سپس آن را انجام دهد.

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

مفاهیم کلیدی SQL:

  • جداول، سطرها و ستون‌ها
  • پیوندها (داخلی، خارجی چپ، خارجی راست)
  • عبارات WHERE برای فیلتر کردن
  • GROUP BY برای تجمیع
  • ORDER BY برای مرتب‌سازی

درک این مفاهیم برای تعامل کارآمد با پایگاه داده ضروری است. همچنین، در نظر گرفتن عملکرد پرس‌وجو، با استفاده از ابزارهایی مانند EXPLAIN برای تحلیل برنامه‌های اجرای پرس‌وجو، مهم است. علاوه بر این، اقدامات امنیتی مناسب، مانند محدود کردن مجوزهای کاربر، برای جلوگیری از دسترسی یا دستکاری غیرمجاز پایگاه داده ضروری است.

4. مشخصات دقیق: تبدیل نیازمندی‌ها به کد

نوشتن نرم‌افزار نباید – نباید – "یک سفر اکتشافی" باشد. هیچ‌کس در عقل خود از یک بندر یا فرودگاه بدون برنامه‌ای که به‌طور خاص شامل احتمالات باشد، حرکت نمی‌کند.

برنامه‌ریزی قبل از کدنویسی. پرش مستقیم به کدنویسی بدون یک برنامه واضح اغلب منجر به نرم‌افزار ناکارآمد و سخت برای نگهداری می‌شود. در عوض، زمان را برای تحلیل دقیق نیازمندی‌ها و طراحی معماری سیستم قبل از نوشتن هر کدی سرمایه‌گذاری کنید.

فرآیند مشخصات مؤثر:

  1. جمع‌آوری و روشن‌سازی نیازمندی‌های کسب‌وکار
  2. ترجمه نیازهای کسب‌وکار به مشخصات فنی
  3. طراحی معماری کلی سیستم
  4. برنامه‌ریزی برای احتمالات و موارد حاشیه‌ای
  5. تقسیم پروژه به وظایف قابل مدیریت

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

5. معماری چندلایه: توسعه فرانت‌اند و بک‌اند

تمام برنامه‌های تولیدی دنیای واقعی دارای معماری "چندلایه" خواهند بود. آن‌ها شامل تعامل "ماشین در دست مشتری" (یا، روی میز او …) هستند که به برخی سرورها متصل می‌شود که مسئول انجام تمام یا بخشی از کار هستند.

جداسازی نگرانی‌ها. معماری چندلایه برنامه‌ها را به لایه‌های مجزا تقسیم می‌کند، معمولاً فرانت‌اند (سمت مشتری) و بک‌اند (سمت سرور). این جداسازی امکان توسعه تخصصی، مقیاس‌پذیری بهبود یافته و نگهداری آسان‌تر را فراهم می‌کند.

اجزای کلیدی:

  • فرانت‌اند: رابط کاربری و منطق سمت مشتری
  • بک‌اند: پردازش سمت سرور و تعاملات پایگاه داده
  • APIها: رابط‌ها برای ارتباط بین لایه‌ها

درک پروتکل‌هایی مانند HTTP و فرمت‌های داده مانند JSON برای پیاده‌سازی ارتباط مؤثر بین لایه‌ها ضروری است. فناوری‌هایی مانند AJAX امکان رابط‌های کاربری پویا و پاسخگو را با اجازه ارتباط غیرهمزمان با سرور فراهم می‌کنند.

6. فریم‌ورک‌ها: بلوک‌های سازنده برای توسعه کارآمد

فریم‌ورک‌ها نیز برای ساخت رابط‌های کاربری فرانت‌اند استفاده می‌شوند. برخی از کیت‌های ابزار برای پوشاندن تفاوت‌های بین مرورگرهای وب استفاده می‌شوند. دیگران تفاوت‌های بین انواع مختلف (و برندهای) دستگاه‌های موبایل را پوشش می‌دهند.

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

مزایا و ملاحظات:

  • توسعه سریع و نمونه‌سازی
  • ساختار و شیوه‌های کدنویسی سازگار
  • پشتیبانی جامعه و مستندات
  • پتانسیل برای وابستگی بیش از حد یا تورم ویژگی

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

7. اشکال‌زدایی عمل‌گرایانه: پیشگیری و شناسایی نقص‌ها

اولین اصلی که اکنون ارائه می‌دهم این است که: "نرم‌افزار کامپیوتری، خود، تنها طرفی است که واقعاً در موقعیت تشخیص نقص درون خود قرار دارد."

تشخیص خطای پیشگیرانه. اشکال‌زدایی مؤثر با نوشتن کدی که می‌تواند خطاهای خود را شناسایی کند، آغاز می‌شود. این رویکرد تمرکز را از اشکال‌زدایی واکنشی به پیشگیری از خطا و تشخیص زودهنگام تغییر می‌دهد.

استراتژی‌های اشکال‌زدایی:

  • استفاده از ادعاها برای بررسی فرضیات
  • پیاده‌سازی مدیریت خطای جامع
  • ثبت پیام‌های پیشرفت آموزنده
  • نوشتن کد "مشکوک" که شرایط غیرممکن را بررسی کند
  • استفاده از مدیریت استثنا برای سناریوهای غیرمنتظره

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

آخرین به‌روزرسانی::

نقد و بررسی

4.24 از 5
میانگین از 100+ امتیازات از Goodreads و Amazon.

کتاب الگوریتم‌ها + ساختار داده‌ها = برنامه‌ها به‌عنوان یک اثر کلاسیک در علم کامپیوتر شناخته می‌شود. خوانندگان از محتوای بی‌زمان آن، توضیحات واضح درباره‌ی ساختار داده‌ها و الگوریتم‌ها و تأثیر آن بر آثار بعدی قدردانی می‌کنند. بسیاری آن را مطالعه‌ای ضروری برای برنامه‌نویسان می‌دانند. رویکرد کتاب به پالایش گام‌به‌گام و تأکید آن بر رابطه‌ی بین الگوریتم‌ها و ساختار داده‌ها به‌ویژه مورد تحسین قرار می‌گیرد. برخی از خوانندگان به زبان و مثال‌های قدیمی اشاره می‌کنند، اما همچنان محتوای آن را بسیار مرتبط و به‌خوبی ارائه‌شده می‌دانند. به‌طور کلی، این کتاب به‌عنوان یک متن بنیادی دیده می‌شود که همچنان به برنامه‌نویسان مدرن بینش‌های ارزشمندی ارائه می‌دهد.

درباره نویسنده

نیکلاوس ویرث یکی از پیشگامان علم کامپیوتر است که بیشتر به خاطر خلق زبان برنامه‌نویسی پاسکال شناخته می‌شود. او در مهندسی نرم‌افزار و طراحی زبان‌های برنامه‌نویسی مشارکت‌های قابل توجهی داشته است. ویرث چندین زبان برنامه‌نویسی تأثیرگذار توسعه داده و کتاب‌های مهمی در زمینه توسعه نرم‌افزار نوشته است. کار او بر سادگی، وضوح و کارایی در برنامه‌نویسی تأکید داشت. او در سال ۱۹۸۴ به خاطر طراحی‌های نوآورانه زبان‌های برنامه‌نویسی، جایزه تورینگ را دریافت کرد. رویکرد ویرث به آموزش علم کامپیوتر تأثیر ماندگاری بر این حوزه داشته است. تمرکز او بر برنامه‌نویسی ساخت‌یافته و اهمیت الگوریتم‌ها و ساختارهای داده، نحوه آموزش و اجرای علم کامپیوتر در سراسر جهان را شکل داده است. ایده‌های ویرث همچنان بر پارادایم‌های برنامه‌نویسی مدرن و طراحی زبان تأثیر می‌گذارد.

0:00
-0:00
1x
Dan
Andrew
Michelle
Lauren
Select Speed
1.0×
+
200 words per minute
Create a free account to unlock:
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Ratings: Rate books & see your ratings
Unlock Unlimited Listening
🎧 Listen while you drive, walk, run errands, or do other activities
2.8x more books Listening Reading
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Jan 25,
cancel anytime before.
Compare Features Free Pro
Read full text summaries
Summaries are free to read for everyone
Listen to summaries
12,000+ hours of audio
Unlimited Bookmarks
Free users are limited to 10
Unlimited History
Free users are limited to 10
What our users say
30,000+ readers
"...I can 10x the number of books I can read..."
"...exceptionally accurate, engaging, and beautifully presented..."
"...better than any amazon review when I'm making a book-buying decision..."
Save 62%
Yearly
$119.88 $44.99/year
$3.75/mo
Monthly
$9.99/mo
Try Free & Unlock
7 days free, then $44.99/year. Cancel anytime.
Settings
Appearance
Black Friday Sale 🎉
$20 off Lifetime Access
$79.99 $59.99
Upgrade Now →