ورود

View Full Version : یادگیری چند زبان و حیطهء برنامه نویسی؟



eshpilen
یک شنبه 13 تیر 1389, 20:18 عصر
نظر شما دربارهء یادگیری چند زبان و حیطهء برنامه نویسی چیه؟
شما از اونایی هستید که میگید یادگیری برنامه نویسی تاحد امکان از نظر گستردگی هر چه محدودتر ولی تخصصی تر و حرفه ای تر و کاملتر، یا اونایی که اعتقاد دارن باید چند زبان و احتمالا چند حیطه مثل برنامه نویسی سیستمی، دسکتاپ، وب، لینوکس، ویندوز و غیره رو یاد گرفت.

البته من فکر میکنم اینها مفاهیم نسبی هستن و بستگی به شرایط اشخاص هم دارن.
خودم از اونایی بودم که روی تعداد قابل توجهی زبان و حیطه مطالعه داشتم (که البته وقت و انرژی زیادی هم میبره که ممکنه خیلی ها این وقت و انرژی آزاد کافی رو نداشته باشن).
البته بنظرم درهرصورت آخرش آدم روی یکی دو مقوله و زبان بهرحال خیلی بیشتر متمرکز میشه و برنامه های بیشتر و بزرگتری مینویسه. چون طبیعی هست که آدم میخواد از زحمتی که کشیده نتیجهء واقعی ببینه و لذت ببره و/یا پول خوب دربیاره.
من تاحالا درحال یادگیری هرچیزی بودم که بنظرم یکسری کارهای مهم و جذاب رو میشده باهاش انجام داد که با چیز دیگه ای نمیشده. کمتر بصورت متمرکز و عملی و برنامه های جدی و تجاری کار کردم. اما فکر میکنم هرچیزی رو یاد گرفتم با پایهء کامل و بصورت علمی یاد گرفتم و میتونم با کمی کار عملی و تجربه توش به سرعت موفق بشم.
بعضیا میگن بخاطر محدودیت های موجود نباید اینهمه گسترده کار کرد چون قضیهء همه کاره هیچ کاره میشه. اما من فکر میکنم این محدودیت ها باتوجه به خصوصیات و اهداف شخصی و شرایط بیرونی افراد تفاوت های فاحشی میکنه. مثلا یکی مثل من وقت و انرژی و فکر آزاد خیلی بیشتری از بسیاری افراد دیگر برای پرداختن به یادگیری داشته و داره و مسلما امکان داره بتونه در زبانها و حیطه های بیشتری به دانش و مهارت مناسبی برسه. ضمنا من علاقه و هدف علمی زیادی داشتم تا اینکه اول بخاطر شغل و پول بخوام هدفی رو دنبال کنم. شرایط محیطی مناسب من هم این بوده که مثلا خانوادهء خیلی کم جمعیتی داشتیم، برای درآوردن خرج زندگیم نیاز نداشتم فورا شروع به کار کنم، و کسی هم نبوده که مجبورم کنه مثلا بعد از یک سن خاصی دنبال شغل و درآمد برم یا ازدواج کنم و از خونه برم. درواقع تا الان من یک تنهایی و آزادی زیادی داشتم و دارم در انتخاب شرایط زندگیم از میان دو گزینه. میتونم خونه تنها بمونم و هرچی میخوام مطالعه کنم (البته درحال حاضر کار هم میکنم ولی کارش زیاد جدی نیست و بیشتر وقتم آزاده) و میتونم ازدواج بکنم یا نکنم و غیره.

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

یا امروزه بهرحال شبکه و اینترنت و وب چیزی هستن که در خیلی موارد بدون ارتباط با برنامه های دسکتاپ نیستن و خیلی وقتا ارتباط اینها با هم ضروری یا حداقل خیلی مفید میتونه باشه. یعنی برنامه هایی داشته باشیم که با شبکه یا وب و اینترنت ارتباط دارن یا اصلا خود برنامه عملا دو یا چند بخش داره که هرکدوم روی یکی از این محیطها قرار داره. مثلا یک بخش برنامه ای در وبسایت شرکت هست و با زبان PHP نوشته شده و یک بخش دیگر اون روی دسکتاپ هست و با زبان ++C نوشته شده. البته منظورم از اشاره به زبانهای متفاوت این بود که عملا یک برنامه میتونه از زبانها و فناوریهای مختلفی تشکیل شده باشه، بخصوص که در چند حیطه و مکانهای فیزیکی مختلفی توزیع شده باشه؛ وگرنه بخشهای مختلف میتونه همه با یک زبان و فناوری باشه (درصورت امکان).
بنظر شما از اینکه وب و شبکه و اینترنت در ترکیب با دسکتاپ، جزء جدایی ناپذیری از خیلی کاربردهای امروزی شدن نمیشه نتیجه گرفت که یادگیری چند حیطه (و احتمالا چند زبان) برای برآوردن نیازهای برنامه نویسی امروزی لازم یا حداقل خیلی مفید هست؟
یا شاید اعتقاد دارید که این بهینه نیست که یک نفر همه کاره باشه و بهتره یک تیم باشه که هرکدوم تخصص یک طرف قضیه رو دارن و یک بخش رو انجام میدن.
اما بهرحال کار تیمی هم دردسر و هزینه های خودش رو داره و در کشورهایی مثل ما شاید چندان عملی هم نباشه. از طرف دیگه خیلی از برنامه ها و نیازها چیزهای کوچک یا کمی بزرگتر هستن که لزوما نیاز به برنامه نویسی های خیلی حجیم و پیچیده و تیم ندارن یا صرف نمیکنه که به چند نفر دستمزد پرداخته بشه و غیره. اینطور برنامه ها رو یک نفر احتمالا میتونه حتی خیلی راحتتر و سریعتر هم تهیه کنه، ولی شرطش اینه که بتونه همهء بخشهای مختلف اون رو خودش بنویسه.

FastCode
یک شنبه 13 تیر 1389, 22:33 عصر
به نظر من چند تا زبون در حد کار راه انداختن و 1 یا 2 و حد اکثر 3 تا برای کارهای تخصصی.

eshpilen
یک شنبه 13 تیر 1389, 22:59 عصر
مثلا چه زبانهایی؟ منظورتون در چند حیطه هست یا مثلا فقط برنامه نویسی دسکتاپ یا فقط وب؟
شما خودتون چه زبانهایی رو یاد گرفتید و استفاده کردید؟

FastCode
یک شنبه 13 تیر 1389, 23:03 عصر
مثلا چه زبانهایی؟ منظورتون در چند حیطه هست یا مثلا فقط برنامه نویسی دسکتاپ یا فقط وب؟
شما خودتون چه زبانهایی رو یاد گرفتید و استفاده کردید؟

مثلا" من برنامه نویسی ویندوز انجام میدم ولی برای اینکه توی لینوکس و وب کم نیارم رفتم دنبال mySql.
مثلا" شما اگر برنامه نویس وب هستی یک ذره(در حد نوشتن دو تا کلاس و 6 تا پراسیجر) C++ یاد بگیر تا اگر جایی به یه مشکل برخوردی بتونی مشکل خودت رو حل کنی.

Behrouz_Rad
یک شنبه 13 تیر 1389, 23:22 عصر
مثلا" شما اگر برنامه نویس وب هستی یک ذره(در حد نوشتن دو تا کلاس و 6 تا پراسیجر) C++‎ یاد بگیر تا اگر جایی به یه مشکل برخوردی بتونی مشکل خودت رو حل کنی.

بنده همیشه از راهنمایی های خردمندانه ی شما فیض می برم.
لطفاً بفرمایید ارتباط ++C با برنامه نویسی وب چی هست؟

ممنون.

eshpilen
یک شنبه 13 تیر 1389, 23:53 عصر
مثلا" من برنامه نویسی ویندوز انجام میدم ولی برای اینکه توی لینوکس و وب کم نیارم رفتم دنبال mySql.

MySQL به تنهایی به چه دردتون میخوره؟

مثلا" شما اگر برنامه نویس وب هستی یک ذره(در حد نوشتن دو تا کلاس و 6 تا پراسیجر) C++‎‎ یاد بگیر تا اگر جایی به یه مشکل برخوردی بتونی مشکل خودت رو حل کنی.به تجربهء بنده دیگه یه ذره جواب نمیده. البته بازم از هیچی بهتره و در موارد محدودی گره از مشکلات باز میکنه.
ضمنا این یه ذره ها که خیلی عادی هست و بنظرم طرف اگر تحصیلات آکادمیک داشته باشه یه ذره با خیلی چیزا آشنایی اجباری داشته. بحث ما روی بیشتر از یه ذره و دو ذره هست :لبخند:
یه ذره تقریبا مترادف همون نظریهء یک حیطه و زبان خاص هست.

حمیدرضاصادقیان
دوشنبه 14 تیر 1389, 07:41 صبح
سلام.نظر شخصی بنده اینه که اگر شما در یک زبان متخصص بشید میتونید اکثر کارهارو باهمون زبان انجام بدین.فقط باید ببینید گستردگی اون زبان در چه حدی هست.به طور مثال شما دلفی رو مسلط باشی در زمینه امنیتی ( به جز سطح کرنل) ، برنامه های ویندوزی، برنامه های تحت وب، برنامه های تحت شبکه، برنامه های گرافیکی ، برنامه های تحت لینوکس میتونی فعالیت کنی.
شما الان کتابهای خارجی هارو هم نگاه کنی به طور مثال در SQL Server یک نفر فقط متخصص Replication هست. و دیگه در اون موردی وجود نداره که بلد نباشه.درحیطه های دیگه هم اطلاعات داره ولی نه به اندازه اون بخشی که خودش تخصصی کار میکنه.
شما به پزشک ها نگاه کن.آیا یک پزشک فوق تخصص معده ، میاد مثلا عمل جراحی قلب بکنه؟؟؟
اطلاعاتشو داره ولی نه به اندازه فوق تخصص قلب.
در کامپیوتر هم همینطور هست.
البته این نکته رو هم بگم شما وقتی روی یک زبان تسلط کافی داشته باشی میتونی در عرض چند روز به زبان دیگه ای که تقریبا مشابه با اون زبان هست سوئیچ بکنی چون دیگه یادگیری Syntax اون زبان هست.
به طور مثال شما وقتی در دلفی متخصص باشی یادگیری سی شارپ کاری نداره.
نکته بعدی اینکه اصل برنامه نویسی الگوریتم و طراحی هست.بقیه اش کار با محیط و سینتکس زبان هست که دیگه کسی که حرفه ای باشه حداکثر تو یک ماه با همون زبان کار میکنه.
هرجا هم مشکل داشت Help ها به کمک میان.
موفق باشید.

ali_kolahdoozan
دوشنبه 14 تیر 1389, 08:04 صبح
همون 1 دونه زبان رو طی 10 سال سعی کنید تا حدودی درش پیشرفت کنید . نمیخاد هی نک بزنید . بله در سن 20 سالگی آدم دوست داره هر چی میگن بپره بگه بلدم و این اقتضا میکنه به هر چیزی یک سری بزنه . کم کم که تکلیفت تا خودت معلوم شد میفهمی که همون 1 دونه هم یک دریاست و اگر بتونی حتی خودت رو در این دریا غرق کنی هنر کردی

JaguarXF
دوشنبه 14 تیر 1389, 09:14 صبح
یک برنامه نویس همیشه باید یک حداقلهایی رو بصورت حاظر و آماده بلد باشه. یک مفاهیم و تکنیکهایی هم در برنامه نویسی هست که اونها رو هم الزاما باید بدونه .
مثلا نمیشه برنامه نویس سرش رو بندازه پایین با مدرن ترین IDE ها و بهترین زبونهای شی گرا هم کد بزنه ولی یک ثانیه روی کدش فکر نکنه که آیا برای مثال داپلیکیت کد دارم یا نه . آیا بهتر نیست این کلاسه ابسترکت باشه . آیا بهتر نیست به این کد dependeny injection اعمال کنم و غیره. ( شخصی: اعمال همین موارد در عرض سه ماه باعث شد یک رتبه کاری ارتقا پیدا کنم!)
مثلا لازم نیست حتما spring رو بلد باشی ولی حداقل این هست که باید جاوا رو بلد باشی تا وقتی گفتند پروژه بعدی با جاوا و اسپرینگ هست دیگه لزومی به یاد گرفتن خود جاوا نداشته باشی و بتونی یک هفته ای خودت رو با اسپرینگ آشنا کنی. ( شخصی: در پروژه واکسیناسیون آنفولانزا من رو وارد کردند. جاوا بلد بودم. اسپرینگ رو خیر. یادش گرفتیم و نوشتیم رفت سر موقع . تقدیر هم شدیم به عنوان fire starter )
مثلا لزومی نداره متخصص سی پلاس پلاس باشی ولی اگر چهار خط کد سی خواستی بنویسی/تغییر بدی دیگه نباید بشینی C++‎‎ from the ground up رو بخونی . ( شخصی: یک کامپوننت قدیمی سی پلاس پلاس داشتیم که میخواستم داخل یک سلول از گریدهای سی شارپ قرارش بدهم و متاسفانه ایونت رایت کلیک هم برنامه نویسش در 12 سال قبل که اون رو نوشته بود برایش تدارک ندیده بود ولی من لازم داشتم امروز. کد رو میخونی . تغییر میدی. میره )
مثلا لزومی نداره dJango رو بلد باشی ولی دیگه حداقل جاوا اسکریپت و html رو باید بلد باشی که اگر لازم شد dJango رو هم بخاطر پروژه خاصی یاد بگیری. .( شخصی: پروژه اطلاعات پزشکی خانوار . با dJango کار کردیم. بلدش هم نبودم ).
و در نهایت هم اینکه کلا بعد از کمی کسب تجربه و کار کردن این مهارت رو خود بخود کسب میکنی که خودت رو سریع با تکنولوژی جدید منطبق کنی

Alireza_Salehi
دوشنبه 14 تیر 1389, 14:30 عصر
بنده همیشه از راهنمایی های خردمندانه ی شما فیض می برم.
لطفاً بفرمایید ارتباط ++C با برنامه نویسی وب چی هست؟

ممنون.
تنها ربطش میتونه ATL Server باشه...
http://en.wikipedia.org/wiki/ATL_Server

eshpilen
دوشنبه 14 تیر 1389, 18:33 عصر
همون 1 دونه زبان رو طی 10 سال سعی کنید تا حدودی درش پیشرفت کنید . نمیخاد هی نک بزنید . بله در سن 20 سالگی آدم دوست داره هر چی میگن بپره بگه بلدم و این اقتضا میکنه به هر چیزی یک سری بزنه . کم کم که تکلیفت تا خودت معلوم شد میفهمی که همون 1 دونه هم یک دریاست و اگر بتونی حتی خودت رو در این دریا غرق کنی هنر کردی
والا منکه هیچوقت با این انگیزه کار نکردم.
البته نه اینکه بگم این برام انگیزه نبوده. از اولش در زمینهء علم رقابتی بودم و همین الانش هم هستم (ولی رقابت با حسادت فرق اساسی داره و بنده اهل حسادت نیستم). دوست دارم همه چیز رو بدونم و بتونم همه کار بکنم. پیش خودم میگم هرکاری که یک کسی انجام داده چرا منم نتونم انجام بدم مگه من چیم کمه! همیشه دوست دارم بهترین باشم. حتی طرف در حد انیشتین باشه من تلاش خودم رو میکنم تا حداقل به سطح اون فرد در درک و توان برسم و چه دیدی شاید از اونم پیشتر رفتم. محدودیتی قائل نیستم مگر اینکه ببینم با یک مانع اساسی یا به آخر محدوده های توان ذهنی خودم برخورد کردم. خوشبختانه فکر میکنم تابحال به چنین موانعی برنخوردم :لبخند:
یه چیزی بگم و اونم اینکه فکر میکنم توان انسان در کسب دانش و قدرت ذهنی درمورد تمام یا حداقل بیشتر افراد تقریبا نامحدود هست و فقط به فرصت و کوشش خودشون برمیگرده. یعنی بعد سالها تلاش آدم میتونه به جاهایی برسه که بنظرش غیرممکن میامده.
چیزی که هست هیچوقت اهل سطحی بودن و خودنمایی نبودم؛ بلکه میخوام دانش و توان واقعی داشته باشم و از تعریف و تمجید صرف دیگران یا یه مقام هیچ حال نمیکنم (ممکنه این تعریف ها اشتباه باشه از نظر من و هیچ ارزشی نداشته باشه). دوست دارم واقعا اون دانش و توان رو داشته باشم و تایید دیگران فقط برای مطمئن شدن از این واقعیت و رضایت بیشتر از احساس خوشامد دیگران هست، نه بعنوان یه هدف.
خلاصه واسه همین دنبال هرچیزی رفتم سعی کردم بصورت اصولی و علمی و کامل یاد بگیرم.
به همش علاقهء شخصی زیاد داشتم. دنبال هرچیزی هم نمیرم. دنبال بهترین ها و کاربردی ترین ها میرم. حتی توی ورزش هم همینطوره دیدگاهم. از نظر من قدرت جسم و فکر مکمل هم هستن و برای واقعا کامل بودن باید هردو رو داشت. مثلا اولین باشگاه ورزشی و آخرینش که رفتم بغیر از بدنسازی که هدف اصلیم نبود و بخاطر اینکه امکانش در دسترس بود رفتم، کنگفو بود چون فقط اینطور ورزشهای رزمی رو بعنوان یک هدف کامل و صددرصد کاربردی میبینم. مثلا از فوتبال و یا کلا چیزهای نمایشی یا صرفا تفریحی متنفرم. ممکنه یکی مثلا یه کار خیلی سخت و عجیب و ظاهرا زیبا و چشمگیری رو انجام بده، اما وقتی کاربرد عملی نداشته باشه بنظر من هیچ ارزشی نداره. ولی بعضیا جو گرفته میشن میخوان برن اون کار رو هرطور شده یاد بگیرن. من دنبال قدرت خالص و کامل و صددرصد کاربردی هستم. مثلا یه فوتبالیست فقط بلده با توپ کار بکنه که صرفا نمایشی و تفریحی و یا برای پول درآوردن هست و نهایتا این فرد از جنبه های دیگه که کاربردی باشه میشه گفت آمادگی و قدرت بدنی بیشتر از یک فرد عادی داره، اما هیچ کار دیگه ای در سطح کامل و برجسته ازش برنمیاد. درحالیکه یه ورزش رزمی روح و جسم رو صددرصد در راستای نیازهای اصیل و واقعی زندگی در تمام دوران ها و شرایط آماده میکنه و به انسان توان فراعادی میده. البته من نهایتا با برخورد به محدودیت وقت و انرژی مجبور شدم کنگفو رو ول کنم و دانش و قدرت ذهنی رو بهش ترجیح دادم؛ چون بنظرم دانش و توان فکری مهمتر بود و ضمنا در علم و ذهن خیلی پیشرفته تر و نزدیکتر به دستیابی به قله های موفقیت دیدم خودم رو، درحالیکه ورزش رزمی رو باید از صفر شروع میکردم و سالها ادامه میدادم که آیا نهایتا به کجا برسم یا نرسم. هرچند الان تازگیا خودم شک کردم که شاید ورزش رزمی هدف و تخصص کاملتری برای زندگی بوده در کل! یعنی بجای دانشمند شدن شاید باید یک جنگجو میشدم. البته منظورم از جنگجو یه آدم خشن نفهم و زورگو نیست :لبخند:
اصلا دانش ورزشهای رزمی و فلسفهء اون و تعالی جسمی و ذهنی و روحی و روانی ای که آدم پیدا میکنه میتونه یه چیزی خیلی متفاوت با این حرفا باشه بنظر من.
خب ببخشید که زیاد صحبت کردم و سرتون رو درد آوردم با این بحث ورزش رزمی و اینا. من فکر میکردم ربط داره و حاوی اطلاعات مفیدی هست گفتن این حرفا.

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

درمورد حد یادگیری دریاهای بی پایان هم بنظر من اونقدرها هم نباید گندش کرد. همونطور که گفتم این به شرایط افراد هم برمیگرده. مگه ما افرادی رو نداریم که چند حیطه و زبان رو بلد باشن و در همه موفق بوده باشن؟ فکر میکنم داشته باشیم و تاجایی که فهمیدم خیلی از هکرها یا برنامه نویسان برجسته در تعداد دو یا حتی بیشتری از زبانها و حیطه ها تسلط دارن و برنامه های موفقی نوشتن. افراد برجستهء زیادی هستن که در شاخه های حتی ظاهرا دور و نامرتبط کار کردن و کاملا موفق هم بودن. البته من الان سند ندارم اما اینهمه مطلب اینور و اونور خوندم که بعضی تعریف از زبان خود این افراد بوده منو به این نتیجه رسونده. اصولا هکرها خودشون رسما اینو میگن که با یک زبان و مقوله هیچکس هکر نمیشه (یه لیست هراس آور از زبانها و مهارت هایی که یک هکر باید داشته باشه لیست کردن!). اونا افراد با استعداد و علاقمند و پرپشتکاری هستن که علم رو بخاطر لذت بردن شخصی ازش میخوان. دقیقا شبیه انگیزهء من که داشتن دانش و توان هست و از صرف این دانش و توان لذت وافری میبرم، ولو اینکه پولی هم توش نباشه و کسی هم تحویلم نگیره. اما البته اگر اینا هم توش باشه کسی بدش نمیاد و استفادهء بهینه تری میشه. ضمنا بخصوص اینکه آدم بتونه دانشش رو به دیگران منتقل کنه و برای یادگیری کمکشون کنه و برنامه هایی بنویسه که دیگران استفاده کنن، واسه آدم لذت بخش هست.
اینکه بگیم هر زمینه و زبانی یک دریای بی پایانه مقداری اغراق آمیزه بنظر من. شاید خیلی زیاد و متنوع باشه، اما بقول معروف مسلط شدن در اون زمینه یک کاری نیست که در چند سال با تلاش بی وقفه ممکن نباشه. و اصل هم همین تسلط هست. بله چیزهای زیادی و برنامه های زیادی برای یاد گرفتن و نوشتن و استفاده کردن هست، اما اینا دیگه تکثر هستن و نه چیزهای خیلی متفاوت و اساسی و یک آدم مسلط میتونه با سرعت و قدرت قابل توجهی هرکدوم رو به موقع نیاز یاد بگیره و استفاده کنه (دوست دیگرمون هم در بالاتر همین رو گفتن).
میشه روی یک حیطه و زبان خیلی هم گیر داد و سعی کرد خدا شد و هرچیزی رو پیشاپیش دونست و تونست، اما بنظر من بعکس این رویه بهینه نیست و بهتره آدم حداقل به یک زبان و حیطهء دیگه هم احاطه پیدا کنه بجای اینکه سر جزییات و متفرقات یه چیزی خیلی گیر بده.

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

eshpilen
دوشنبه 14 تیر 1389, 18:36 عصر
یک برنامه نویس همیشه باید یک حداقلهایی رو بصورت حاظر و آماده بلد باشه. یک مفاهیم و تکنیکهایی هم در برنامه نویسی هست که اونها رو هم الزاما باید بدونه .
...
و در نهایت هم اینکه کلا بعد از کمی کسب تجربه و کار کردن این مهارت رو خود بخود کسب میکنی که خودت رو سریع با تکنولوژی جدید منطبق کنی
من با نظرات شما کاملا موافقم.
متاسفانه این تالار امکان تشکر زدن رو نداره و مجبور شدم با نقل قول به پست شما (http://barnamenevis.org/forum/showpost.php?p=1032230&postcount=9) اشاره بکنم.

eshpilen
سه شنبه 15 تیر 1389, 17:18 عصر
راستی یه چیزی.
من خیلی اعضای باسواد این سایت رو دیدم که توی پروفایلشون کلی زبان که بعضا مال حیطه های مختلفی هستن رو لیست کردن. پس وارد بودن به زبانها و فناوریها و حیطه های مختلف چیز غیرعادی ای نیست و بنظر میرسه بیشتر افراد با تجربه این ویژگی رو دارن.
بطور مثال این پروفایل رو ببینید: http://barnamenevis.org/forum/member.php?u=41233

FastCode
سه شنبه 15 تیر 1389, 18:19 عصر
معلومه توی این 1 روز که نبودم خیلی مورد عنایت دوستان قرار گرفتم
در ضمن منظور بنده هم یادگرفتن چیز های نا مربوط بود.
مثلا" یاد گرفتن C++ به یه برنامه نویس وب کمک میکنه که بفهمید این چیه:http://learn.iis.net/page.aspx/169/develop-a-native-cc-module-for-iis-7/
یا مثلا" MySql که فکر میکنم همه جا بدرد میخوره مثلا" اگر جایی گیر بیافتید که مشتری ازتون یه سرور لینوکس بخواد اولین انتخاب شما میتونه MySql باشه.

eshpilen
سه شنبه 15 تیر 1389, 18:25 عصر
بله تمام این زبانها و حیطه ها اونقدری که ما فکر میکنیم بی ربط نیستن.
البته بستگی داره شما بخواید چیکار بکنید.
اگر هدف فقط پول درآوردن باشه احتمالا نیازی نیست زیاد غصهء این حرفا رو بخورید چون کسی مثلا از یک برنامه نویس PHP انتظار نداره بتونه برنامهء سی++ بنویسه.
اما اگر آدم بخواد همه چیز رو بدونه و بتونه و بدون حد و مرز باشه، اونوقت هست که میبینه به هر زبان اصلی در هر حیطه باید تسلط کافی داشته باشه.

Alireza_Salehi
سه شنبه 15 تیر 1389, 20:25 عصر
معلومه توی این 1 روز که نبودم خیلی مورد عنایت دوستان قرار گرفتم
در ضمن منظور بنده هم یادگرفتن چیز های نا مربوط بود.
مثلا" یاد گرفتن C++‎ به یه برنامه نویس وب کمک میکنه که بفهمید این چیه:http://learn.iis.net/page.aspx/169/develop-a-native-cc-module-for-iis-7/
یا مثلا" MySql که فکر میکنم همه جا بدرد میخوره مثلا" اگر جایی گیر بیافتید که مشتری ازتون یه سرور لینوکس بخواد اولین انتخاب شما میتونه MySql باشه.
به نظر شما چند درصد پروژه های تحت وب نیاز به توسعه سرور دارند؟
تا جائی که من میدونم درصد خیلی بالائی از وب سرور ها از امکانات آماده استفاده می کنند.

منظورم اینه که چند درصد برنامه نویس های وب درگیر پروژه ای می شوند که نیاز به توسعه سرور داشته باشه و دات نت از پسش برنیاد؟ و مجبور بشن برن سراغ CPP؟

برای فهمیدن این که ماژول های IIS چه می کنند نیازی به دانستن CPP نیست.
پروژه های خیلی بزرگی رو ما دیدیم که حتی نیاز به یک خط کد CPP برای نوشتن ماژول های IIS نداشته اند و همه کارها با IHttpModule در دات نت حل شده است.

CPP زبون خیلی قوی هست ولی در کار توسعه وب ASP.NET و PHP راه حل هایی هستند که خیلی سریع تر به جواب می رسند.

Alireza_Salehi
سه شنبه 15 تیر 1389, 20:37 عصر
بله تمام این زبانها و حیطه ها اونقدری که ما فکر میکنیم بی ربط نیستن.
البته بستگی داره شما بخواید چیکار بکنید.
اگر هدف فقط پول درآوردن باشه احتمالا نیازی نیست زیاد غصهء این حرفا رو بخورید چون کسی مثلا از یک برنامه نویس PHP انتظار نداره بتونه برنامهء سی++ بنویسه.
اما اگر آدم بخواد همه چیز رو بدونه و بتونه و بدون حد و مرز باشه، اونوقت هست که میبینه به هر زبان اصلی در هر حیطه باید تسلط کافی داشته باشه.
در برنامه نویسی یک سری مفاهیم، معماریها، روش های توسعه، روش های بکار بردن ابزارها و ....
هر زبان برنامه نوییسی برای یک سری اهداف طراحی شده، که بر مبنای اصول پایه ای هست، شما اگر مفاهیم رو بلد باشید تنها مسئله شما میشه سینتکس و ابزارهای یک زبان که به سرعت قابل یادگیری است.

مثلا: در حوزه شبکه در ویندوز یکی از روش های رایج و مرسوم Socket Programming است، شما اگر طرز کار سوکت ها رو بدونید دیگه فرقی نمیکنه با چه زبونی دارید برنامه می نویسید.

یا مثلا برنامه نویسی موازی، شما اگر مفهوم Task,Thread,Process,Deadlock, و .... مربوط به مدیریت سی پی یو رو بلد باشید و بدونید سیستم عامل مقصد از چه روشی داره استفاده می کنه باز هم فرقی نمیکنه با چه زبونی دارید برنامه می نویسید.

یا در حوزه معماری نرم افزار اگر با چند ریختی ، وراثت و الگو های طراحی آشنا باشید با هر زبونی می تونید نرم افزارتون رو طراحی کنید فقط با یک جستجوی ساده متوجه می شید که وراثت چند گانه چه طوری در سی شارپ اجرا میشه، یا برای پیاده سازی Factory Pattern از چه ابزارهای سی شارپ (http://msdn.microsoft.com/en-us/library/ee817667.aspx) یا جاوا (http://www.allapplabs.com/java_design_patterns/factory_pattern.htm) یا ... باید استفاده کنید.


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


و بسیاری مثال های دیگه...

FastCode
سه شنبه 15 تیر 1389, 20:39 عصر
به نظر شما چند درصد پروژه های تحت وب نیاز به توسعه سرور دارند؟
تا جائی که من میدونم درصد خیلی بالائی از وب سرور ها از امکانات آماده استفاده می کنند.

منظورم اینه که چند درصد برنامه نویس های وب درگیر پروژه ای می شوند که نیاز به توسعه سرور داشته باشه و دات نت از پسش برنیاد؟ و مجبور بشن برن سراغ CPP؟

برای فهمیدن این که ماژول های IIS چه می کنند نیازی به دانستن CPP نیست.
پروژه های خیلی بزرگی رو ما دیدیم که حتی نیاز به یک خط کد CPP برای نوشتن ماژول های IIS نداشته اند و همه کارها با IHttpModule در دات نت حل شده است.

CPP زبون خیلی قوی هست ولی در کار توسعه وب ASP.NET و PHP راه حل هایی هستند که خیلی سریع تر به جواب می رسند.
درسته ولی باید به انداره ای بلد باشه که وقتی اسمش رو گفتن مثل چیز تو گل نمونه.
چند نفر میتونن جواب من رو مثل شما بدن؟فقط کسایی که میدونن من چی میگم.غیر از اینه؟
حالا به CPP گیر ندید.
مهم اینه که هر برنامه نویس باید زبونها و فنّاوری های نیمه مرتبط و حتی غیر مرتبط رو در حد آشنایی یا به انداره‌ی کار راه انداختن هم که شده بلد باشه.تا بتونه یه جاهایی گلیم خودش رو از آب بیرون بکشه.

eshpilen
سه شنبه 15 تیر 1389, 20:47 عصر
مثلا: در حوزه شبکه در ویندوز یکی از روش های رایج و مرسوم Socket Programming است، شما اگر طرز کار سوکت ها رو بدونید دیگه فرقی نمیکنه با چه زبونی دارید برنامه می نویسید.

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


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

FastCode
سه شنبه 15 تیر 1389, 20:52 عصر
حالا نمیدونم شما بفرمایید ببینیم شاید واقعا روشی برای شبیه سازی ارث بری چندگانه در سی شارپ هم وجود داشته باشه.
راهش:استفاده از یه ماژول C++/CLI‎ کنار برنامتون که با ابزارهایی مثل ILMerge و یکم وقت میتونید تبدیلش کنید به یک فایل
همینجاست که من میگم باید چند فناوری رو در حد کار راه انداختن بلد بود.
پروژمو تموم کردم == ۳ رو بیکارم == باید حالا حالا ها پست های متوقف نشدنی منو ببینید.

eshpilen
سه شنبه 15 تیر 1389, 20:56 عصر
راستی بعنوان یک مثال، پایتون میتونه از کتابخانه های سی استفاده کنه و برای اینکار بالاخره باید یه حداقلی با سی هم آشنا بود. چون سی کتابخانه های گسترده و قدرتمندی داره و سرعتش هم خیلی بالاست پس نیاز به چنین استفاده هایی چندان هم بعید نیستن. مثلا فرض کنید کتابخانهء خاصی هست که با یک برنامهء سرویس دهندهء خاص روی سیستم ارتباط برقرار میکنه و این کتابخانه به زبان سی هست و حالا ما میخوایم در پایتون با اون برنامهء سرویس دهنده ارتباط برقرار کنیم.
یا مثلا میشه مفسر پایتون رو داخل یک برنامهء دیگه Embed کرد، که این میتونه بعضی جاها لازم یا خیلی مفید باشه. عملا اون برنامه میتونه بخشی از عملیات خودش رو با پایتون اجرا کنه و ضمنا مهم اینکه قابلیت اسکریپت نویسی پیدا میکنه. یعنی مثلا کاربر میتونه اسکریپت هایی رو برای سفارشی و خودکار کردن عملیات برنامه که خودش در زبان دیگری نوشته شده ایجاد کنه. مثلا شما چنتا تابع پایتون در اختیار کاربر میذارید که کاربر میتونه از اونا در یک اسکریپت که مینویسه استفاده کنه.
این کاربرد افزودن قابلیت Scripting به برنامه ها یکی از کاربردهای متداول پایتون هست و در برنامه های معروفی بکار رفته.

اما بهرحال همونطور که گفتیم اینا کاربردهای متداول و چیزی که از هر برنامه نویسی انتظار بره نیستن.
یه برنامه نویس وب مثلا احتمالا هیچوقت نیازی به چنین چیزی پیدا نمیکنه. اما یه برنامه نویس پایتون که برنامه های دیگه غیر از وب هم با پایتون مینویسه احتمال بیشتری داره به چنین چیزی نیاز پیدا کنه. یا شاید یه برنامه نویس سی++ که میخواد به برنامش قابلیت Scripting اضافه کنه میتونه پایتون رو انتخاب کنه و هم میتونه بخشی از کارایی برنامهء خودش رو در پایتون پیاده کنه و از مزایای این زبان جالب و مختصر در بعضی جاها که مناسبه بهره ببره و هم به کاربران امکانات اسکریپت نویسی و کنترل کارکرد برنامه رو به روش برنامه نویسی بده. اما برای اینها طرف باید با پایتون هم آشنا باشه!

eshpilen
سه شنبه 15 تیر 1389, 21:00 عصر
راهش:استفاده از یه ماژول C++‎‎/CLI‎ کنار برنامتون که با ابزارهایی مثل ILMerge و یکم وقت میتونید تبدیلش کنید به یک فایل
همینجاست که من میگم باید چند فناوری رو در حد کار راه انداختن بلد بود.

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


پروژمو تموم کردم == ۳ رو بیکارم == باید حالا حالا ها پست های متوقف نشدنی منو ببینید.
پروژت چی بود؟

FastCode
سه شنبه 15 تیر 1389, 21:26 عصر
نقل قول:
نوشته شده توسط FastCode http://barnamenevis.org/forum/images/buttons/viewpost.gif (http://barnamenevis.org/forum/showthread.php?p=1033752#post1033752)
راهش:استفاده از یه ماژول C++‎‎‎/CLI‎ کنار برنامتون که با ابزارهایی مثل ILMerge و یکم وقت میتونید تبدیلش کنید به یک فایل
همینجاست که من میگم باید چند فناوری رو در حد کار راه انداختن بلد بود.

من فکر کردم روش مورد اشارهء شما ساده تر و استانداردتر از این حرفا باشه.
هرچند نیاز به توضیح بیشتر هست تا واقعا متوجه این روش بشم، ولی بنظرم استفاده از اجزا و ابزارهای خارجی و دردسردار و غیراستاندارد میاد.
فکر نمیکنم ارث بری چندگانه اینقدر در سی شارپ و دات نت ضرورت داشته باشه که بخوایم به روشهای خارجی پناه ببریم. اصولا برای سازگاری با بقیهء کدها و برنامه نویسها فکر میکنم همون بهتر که از ارث بری چندگانه هیچوقت استفاده نکنیم.
در واقع برای این کار شما به یک .Net Circular Dependency نیاز دارید که درست کردنش کاره حضرت فیله.
برای این کار هر دو library یه reference به هم دیگه دارن
توی کتابخونه C++ یه کلاس درست میکنید که از چند کلاس C# ارثبری میکنه.
بعد توی کتابخونه C# از اون کلاس استفاده میکنید.
گفتنش هم سخته.چه برسه به پیاده سازیش.
برای همین من توی همون پروژم (http://barnamenevis.org/forum/showthread.php?t=216244) از +۲۰۰ تا interface استفاده کردم.
برای Circular dependency لطفاً از گوگل استفاده کنید چون از حوصله مطلب خارجه.

JaguarXF
چهارشنبه 16 تیر 1389, 08:17 صبح
.
Net Circular Dependency


اکیدا حذر کنید.

راههای حذر :

- انتقال لایبرری های پایه ای تر به اسمبلی های لایه پایین تر در هایرآرکی کلاسهای نرم افزارت و حتی انتقال اکثرشون به یک اسمبلی ( کاری که من کردم در برنامه مان )
- استفاده از اینترفیس ها و پیاده سازی اون قسمتهایی که نیاز داری
- استفاده از تکنیک تزریق وابستگی ( راه بهتری هست. فرصتش رو نداشتیم )

FastCode
چهارشنبه 16 تیر 1389, 18:58 عصر
اکیدا حذر کنید.
خدایی ناکرده تنهایی که نگفتید؟
من هم به این معترفم.
یک بار یدونه درست کردم آسفالت شدم.