کتاب عالی برای تقویت حل مسأله و یادگیری برنامه نویسی با زبان بی نظیر C

c
problem-solving
design

#1

بالاخره یه کتاب عالی برای یادگیری اصول برنامه نویسی و حل مسأله و Design با استفاده از زبان بی نظیر C .

من فکر میکنم هر کسی تا با C کار نکنه یه برنامه نویس واقعی نیست.
هر کسی که میخواد قوی بشه به نظر من حتی اگر برای یکبار هم شده باید C رو یادبگیره و بفهمه.

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

اینم از کتاب، امیدوارم مفید باشه.

https://www.pearson.com/us/higher-education/program/Hanly-Problem-Solving-and-Program-Design-in-C-Plus-My-Lab-Programming-with-Pearson-e-Text-Access-Card-Package-8th-Edition/PGM9844.html


#2

بازم مجبورم با شما مخالفت کنم، C زبان پر قدرتیه اما خوب بودن در برنامه نویسی ربطی به C نداره، و از طرف دیگه c یک زبان پر اشکاله که خیلی هم قدیمه و گزینه های خیلی بهتری وجود داره.

به هر حال من کلا با شما مخالفم حتی اگر درست بگید :joy:


#3

:smile: باعث افتخاره که با من مخالفم باشی @toomaj عزیز.

من کلا کسی که برنامه نویسی low-level رو بلد نباشه برنامه نویس واقعی به حساب نمیارم، High-level نوشتن برای بچه های ترم ۱ یا ۲ رشته IT خوبه از دید من، حالا با یکم اغراق :wink:

البته که خوب بودن در زبان C به برنامه نویس خوبی شدن خیلی ربط داره، این رو فقط کسی درک کرده که جزئی از پروژه های سنگین و بزرگ بوده (مثل بازی ها، compiler ها، interpreter ها و flight simulator ها و خیلی پروژه های حساس دیگه).
حتی اگر از زبان C استفاده نشه تو یه پروژه، بازم یادگیری C یه برنامه نویس خیلی بهتر میسازه از طرف، همونطور که یاد گرفتن یه زبان کاملا functional مثل Haskell و یه زبان بی نظیر مثل Lisp، یه برنامه نویس بهتر از طرف میسازه.

برنامه نویسی که تا عمق ماجرا (یعنی C و بعد از اون Assembly !) رو یاد نگرفته باشه، همیشه پایه ی ضعیفی خواهد داشت و در حد متوسط باقی میمانه و همیشه پایه های لرزانی خواهد داشت.

در مورد پر اشکال بودن زبان C هم که این صحبت مثل شوک الکتریکی بود برای من.

از دید من پر اشکال بودن برای کسیه که C رو در حد حرفه ای بلد نیست، “اشکال” به نوع دید و باور آدم به یه چیز بستگی داره.

فراموش نکنیم که درصد زیادی از کل حوضه IT رو همین C پر اشکال (!) یه تنه به دوش میکشه و خواهد کشید (حداقل تا چندین و چند سال آینده) :

  • اکثر Operating System ها بدون C یعنی فاجعه
  • اکثر زبانهای دیگه مثل Java، ++C، Perl، Python، C SHARP زیربنای اونها از C ساخته شده.
  • اکثر compiler ها و interpreter ها بدون C یعنی فاجعه.
  • اکثر زیربنای نرم افزاری Web و اینترنت همین C هستش.
  • اکثر زبانهای دیگه بخش های Cpu intensive از library ها و غیره شان با C نوشته شده.

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

احتمالا کل نسل های طلائی بزرگ ترین Computer Scientist ها و برنامه نویس های تاریخ از پر اشکال بودن C خبر نداشتن‌ !!!

بیشتر از ۱۰ ساله بصورت روزانه با C و ++C زندگی کردم و تنها چیزی که ندیدم اشکاله!
والا منم خیلی دوس دارم از این اشکالات C با خبر بشم.

هر زبانی برای یه هدفی درست شده و هیچ زبانی بهترین و بدترین نیست، هرکدام برای پروژه های خاص کاربرد دارن و هر کدام برای یه سری کارها بهترن.

فک کنم نظرت یکم بی انصافی باشه در حق زبانی که کل IT رو یه تنه به دوش کشیده!

به هر حال از دید من یادگیری زبان C (و حتی Assembly) بسیار برای شخصی که میخواد پایه قوی داشته باشه و در برنامه نویسی قوی بشه مهمه، حتی اگه بعد از یادگیریش هم سراغ اینها بصورت جدی دیگه نیاد.


#4

چرا فکر کردین سی Low level هست؟ این اشتباه رو البته خیلی ها می کنند. بهتره بدونید که C یک زبان سطح بالاست.

و اینکه خیلی از برنامه ها با C نوشته شده بازم ربطی به این نداره که دونستن یا ندونستن C یعنی خوب یا بد بودن در برنامه نویسی. من مشکلی با C ندارم اما نظرم اینه که دونستن یا ندونستن یک زبان هیچ ربطی به مهارت نداره.

همه برنامه نویس هایی که حتی یک برنامه کوچک با C نوشتن از اشکالاتش اطلاع دارند مگر اینکه دید علمی به برنامه نویسی و رایانه نداشته باشند، اما چند دلیل وجود داره که این زبان پرقدرت انقدر زیاد کاربرد داره.
اول ساده بودنشه و کوچک بودن Syntax این زبان و دوم اینکه تا مدتهای زیادی واقها برای System Programming و مثال های مشابهی که شما زدین گزینه بهتری نبود.

بعد چون دانشمندان از اشکالات C اطلاع داشتند و همینطور زبان های دیگه هر روز یک زبان جدید ساختند.

آیا ممکنه کمی دچار تعصب شده باشید؟ و آیا ممکنه که فکر کنید شاید من با C کار مهمی انجام ندادم و از روی بی اطلاعی میگم؟ در هر دو صورت بهتره کمی بیشتر روی این مساله کار کنید.

بازم نمیگم C بده اما من ترجیح میدن در موردش بزرگنمایی نکنم، نه فقط C بلکه در مورد هیچ چیز دیگه.


#5

C هم low level هستش هم high level. قدرتشم همینه که low level رو داره، بهتره این رو شما بدانی که C بیشتر به خاطر داشتن ویژگی های low level که C شده. سخت در اشتباهی اگه C رو فقط high level در نظر بگیری.

من نخواستم راجع به generation های زبان ها اینقدر جزئی بشم دیگه.

البته که تعصبی وجود نداره و C هم ارث پدر من نیست، ولی کلا کسی که با C حرفه ای کار کرده متوجه صحبت من میشه.

یادگیری C بسیار مهمه برای یه تازه کار چون با C پایه واساس یه سیستم کامپیوتری، Memory و غیره یاد گرفته میشه و درک میشه، متوجه میشید که انتخاب گزینه های مختلف چه تاثیری در performance دارن و خیلی چیزهای دیگه.

من تعجب میکنم از “اشکال” هایی که مطرح کردی @toomaj عزیز.

من فکر میگردم باتجربه باشی، اگر تجربه کاریت بیشتر بود syntax کوچک رو اشکال نمیدیدی، اگه پای حرف افراد با تجربه و بزرگ در زمینه IT بشینی اکثرا میگن که اتفاقا داشتن syntax کوچک و ساده بودن یه مزیت بسیار بزرگه!
(البته که من هم آدم بزرگی نیستم و فقط از آدم های بزرگ یاد گرفتم.)

تعجب بیشتر من از اشکال دومیه که گرفتی، واقعا انقدر عجیبه برام که صحبتی ندارم در این زمینه!

ولی من واقعا ترجیح میدم که راجب چیزهایی که شایستگیش رو دارن اتفاقا زیاد بنویسم و بگم که یه موقع تازه کار ها و مبتدی ها زبان هایی مثل C و Lisp و Haskell رو به خاطر این “اشکال” های نادرست کنار نزارن و بی بهره نشن از اینها.

فکر نمیکنی اگه یکم راه رو برای مبتدی ها روشن کنیم بهتر نیست؟

به هر حال جوابی که به من دادی اصلا مربوط به اصل صحبت من نبود، اگه یکم دقت میکردی منظور اصلی من رو از یادگیری C متوجه میشدی.

این بحث رو من دیگه ادامه نمیدم.


#6

جسارتا زبان مذکور یک زبان سطح بالاست. البته بنده وارد بحث شما دو بزرگوار نمی شم ولی یکمی سختش گرفتید !!

به نظرم یادگیری c یا هر زبان برنامه نویسی می تونه بسیار مفید باشه که قبلا بحث شده است ولی در افرادی تازه وارد به شخصه دیدم که بعد از مدتی شروع با c خسته می شند ولی زبان های کمی ساده تر مثل php می تونه در شروع اونارو جذب کنه چون خیلی سریع بازخورد خودشون می بینند و به نظرم با وجود زبان های بهینه شده از c یا جایگزینش خیلی می تونه جالب تر باشه مخصوصا با انتخاب های زیادی که الان افراد دارند.

پروژه های بزرگ !! همیشه این صحبت مطرح می شه ولی صحبت نمی شه دقیقا پروژه بزرگ چی هست ؟ مواردی که فرمودید مثلا با rust نوشته شده و خیلی قدرتمند بوده است یا …

ولی به شخصه خودم دوست دارم در زمان بیکاری بلخره c رو در حد تجربه ساخت پروژه کوچیک تست کنم امید وارم شیرین باشه


#7

سطح بالا در مقایسه با چه؟ سوال درست اینه.

C زبانی هستش که به خاطر ویژگی هایی که داره درست و حسابی در این تقسیم بندی های غیر علمی high و low نمیگنجه.
اصولا اون اوایل کار به هرچی که یک abstraction level از Assembly بالاتر بود به اصطلاح میگفتن high level . ولی اوضاع الان فرق کرده، الان بهتر اینه که نسبی نگاه بشه :

  • اگه C رو با Assembly مقایسه کنی بله میشه سطح بالا.
  • ولی C در مقایسه با Java به هیچ عنوان سطح بالا نیست، در مقایسه با Java میشه low level .
  • برای همینه که خیلی وقت ها حتی به C گفته میشه mid level .

من نمیخوام وارد جزئیات تاریخی این بحث و چیزهایی بشم که دردی از یه مبتدی دوا نمیکنه.

هدف اصلی من از معرفی این کتاب تاثیرات بسیار خوبیه که یادگیری C روی هر برنامه نویسی میزاره، همین.

ایشالا خودت وقتی C رو خوب یادبگیری این تغییرات رو حس میکنی و قطعا بسیار شیرین خواهد بود که با یه زبان خیلی ساده چه کار ها که نمیشه کرد.


#8

مطمئن دوست من ما جمع شدیم تا از تجربیات همدیگر استفاده کنیم و کسی نگفته چرا شما معرفی کردید اتفاقا بسیار ممنونم که معرفی کردید و امید وارم تعداد معرفی شده ها روز به روز بیشتر بشه

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

https://www.webopedia.com/TERM/H/high_level_language.html

مطمئنن همینطور خواهد بود هر زبانی که یاد گرفتم باعث شد کارم پیشرفت کنه C نیز در همین وادی

موفق باشید


#9

همچنین شما.


#10

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

فارسی یک زبان طبیعی هست که میتونیم در اون و در هنگام بحث علمی از زبان فرمال ریاضی استفاده کنیم اما این به معنی این نیست که فارسی زبان ریاضی هست.

دوست عزیز من راستش برای سواد شما احترام زیادی قائل هستم اما در این مورد اشتباه می کنید و پیشنهاد میکنم به جای مقایسه C با پایتون یا روبی و تعیین سطح کمی روی مفهوم این موضوع که چندان هم مهم نیست کار کنید.

در مورد اشکالات زبان های برنامه نویسی از جمله C زیاد بحث شده در این سایت و اگر خواستید با کمال میل بازم در موردش حرف میزنیم.
من اولین برنامه ای که به زبان C نوشتم بر میگرده به سالها پیش و اولین زبانی که به صورت حرفه ای کار کردم در کنار پاسکال همین C بود و البته C++. این باعث نمیشه که من از شما بیشتر بدونم اما تا حد زیادی تضمین می کنه که پر بی راه نمیگم.


#11

فعلا باید برم، سر فرصت بیشتر توضیح میدم، در این بین شما میتونید روی مفهوم سطح بالا و پایین کار کنید.


#12

چشم، بیشتر کار میکنم @toomaj عزیز.
درست میگی.


#13

منظورم این نبود، داشتم فکر میکردم یه مجموعه از مشکلاتی که خودم با c و c++ داشتمو به اضافه ضعف هایی که این زبان با وجود قدرت زیادش داره اینجا بزارم اما راستش بازم امروز خیلی دیر شد و من حتی به کارای روز مره هم نرسیدم و امیدوارم فردا بتونم بهتر پست بزارم


#14

من الان متن شما رو خوندم، من کی گفتم کوچک بودن سینتکس اشکال هست؟ انگار با کس دیگه بحث میکردین فکر کردین منم.
یه استادی داشتیم که همیشه می گفت ندونست از نیمه دونستن بهتره


#15

:slightly_smiling_face:

هنوز تو فکر این بحثی؟ کوتاه بیا دیگه toomaj عزیز.

من ممنونم از زحمات شما و دوستان دیگه.

ایشالا از شما و اساتید دیگه اینها رو یاد بگیریم همه.

تو فکرش نرو دیگه.


#16

تو فکر چی؟ از چی کوتاه بیام؟ اومدم مطابو خوندم و پاسخ دادم، من متوجه شما نمیشم؟

یکی میاد یه چیز میگه بعد ۴ نفر میان جواب میدن، مثل یک جامعه متمدن به همین‌سادگی. :thinking: کلا چیزی به نام comprehension وجود داره که میشه با استفاده از اون بهتر بحث کرد.


#17

والا toomaj عزیز شما عصبی هستی من که چیزی نگفتم :sweat_smile:

هرچی شما بگی عزیز دل، گردن ما از مو باریک تر.

هرچی toomaj بگه اصلا. :wink:


#18

ای بابا چرا باید عصبی باشم :joy: فکر کردم ناراحت شدین، بی خیال آقا، اینجا در مورد ای تی بحث میشه، داستانی شده ها. اینجوریشو ندیده بودم :smiley:

image


#19

چرا باید ناراحت بشم آخه؟ :slightly_smiling_face:

از معایب communication از طریق text همین انتقال نادرست احساساته دیگه :wink:


#20

کلا آفلاین که میشه هم سو تفاهم پیش میاد هم اینکه ممکنه حرف ها اشتباه تعبیر بشه، به هر حال اگر تند رفتم پوزش میخوام اما واقعا قصدم مثبت بود