PDA

View Full Version : دانستنیهای ضروری یک برنامه نویس (اپلیکیشن)



میلاد قاضی پور
چهارشنبه 27 مرداد 1389, 14:08 عصر
سلام . به نظر شما یک برنامه نویس اپلیکیشن های ویندوز یا مک یا لینوکس و موبایل و ... باید چه قابلیتهایی داشته باشه و به چه مباحثی تسلط داشته باشه ؟
مثلا آیا دانستن و تسلط زیاد روی مباحث طراحی الگوریتم و ساختمان داده لازم هست یا اهمیتی نداره ؟
آیا برنامه نویس اپلیکیشن لازمه به زبانهای اسکریپت نویسی هم تسلط داشته باشه ؟
برای زبانهای مختلف باید با چه تکنولوژی هایی آشنایی داشت ؟
به همراه هر زبان مشخص با چه بانکی ترجیحا باید آشنا بود ؟ مثلا اوراکل بیشتر کجاها استفاده میشه ؟ یا برای برنامه نویسی کامپیوتر های مک به چه دیتابیسی باید تسلط داشت ؟
اینم نقشه راه وحشتناک برنامه نویسی :

http://up.iranblog.com/Files2/34ec13f9b8f342119235.png

eshpilen
پنج شنبه 28 مرداد 1389, 11:09 صبح
اینکه چیزی رو نشون نمیده تازه.
فقط راجع دات نت هست و اپلیکیشن نویسی روی ویندوز.
دربارهء سطوح پایینتر برنامه نویسی و مفاهیم پایه و چیزهایی مثل متدهای برقراری امنیت و غیره هم چیزی نداره.
برید در دنیای بازمتن و لینوکس و غیره میفهمید که این هیچی نیست. اینقدر تنوع و تعدد وجود داره که دوزاری تازه میفته که باید چطوری فکر کرد و چه راهی رو دنبال کرد!!
تعریف یه برنامه نویس واقعی، محدود به یک فریمورک و زبان و سیستم عامل نمیشه. بلکه میدونه ممکنه یه جایی برای یه کاری نیاز داشته باشه از یک کتابخانه و/یا زبان استفاده کنه و جای دیگه از انواع دیگه. بکار گیری کتابخانه هایی که بزرگ نباشن زیاد سخت نیست و اغلب میشه ظرف چند روز حلش کرد، اما زبان و فریمورک میتونن وسیعتر باشن.
قدرت واقعی برنامه نویس در اینه که بتونه هر زبان و فریورک و سیستم عاملی رو که لازم بود، حداقل موقع پیش آمد، یاد بگیره و روش کار کنه. سرعت و قدرت یادگیری مسلما مهم هست.
یعنی مهارت و توانایی اصلی اینه که شما هرچیزی رو برای هر شرایط و مکانی که لازمه بتونید یاد بگیرید.
البته این به شرط دید گسترده هست، نه اینکه بچسبید به یک سیستم عامل و شرکت و یک نوع خاص برنامه نویسی.
تاجایی که من از تعریف ها و مقاله ها در اینمورد استنباط کردم، در دنیای واقعی فرصتهای شغلی خیلی متنوع هستن و نیاز به دانش و مهارت های مختلف منجمله همین ویژگی اصلی که گفتم دارن. یعنی برنامه نویسان وقتی جایی استخدام میشن ممکنه تازه اول یادگیری خیلی چیزای لازم براشون باشه و معمولا کنار یا زیردست برنامه نویسان زبردست و با تجربه به نوعی کارآموزی میکنن و احتمالا جایگزین همون برنامه نویسها میشن (قبلی ها احتمالا کم بودن یا بازنشسته میشن یا موندنی نیستن و میخوان برن).

میلاد قاضی پور
پنج شنبه 28 مرداد 1389, 11:28 صبح
اینکه چیزی رو نشون نمیده تازه.
فقط راجع دات نت هست و اپلیکیشن نویسی روی ویندوز.
دربارهء سطوح پایینتر برنامه نویسی و مفاهیم پایه و چیزهایی مثل متدهای برقراری امنیت و غیره هم چیزی نداره.
برید در دنیای بازمتن و لینوکس و غیره میفهمید که این هیچی نیست. اینقدر تنوع و تعدد وجود داره که دوزاری تازه میفته که باید چطوری فکر کرد و چه راهی رو دنبال کرد!!

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




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


در کل استفاده کردم اما میخوام بدونم مثلا من باید مستقیم برم سر اصل مطلب یا باید مثلا مسائل مربوط به پیچیدگی الگوریتمها و انواع طراحی الگوریتم رو بلد باشم .

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

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

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

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

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

میلاد قاضی پور
جمعه 29 مرداد 1389, 00:19 صبح
من نمیدونم چرا کلید تشکر رو زیر پستهای افراد جدیدا نمیبینم . این دومین باری هست که این مشکل رو دارم. در هر صورت از شما به خاطر توضیحات مفصل متشکرم .

eshpilen
جمعه 29 مرداد 1389, 09:35 صبح
این تالار امکان تشکر نداره.

راستی پست مفصل دوست داری از این طولانی تر هم میتونم پست درست کنما :لبخند:

Felony
جمعه 29 مرداد 1389, 10:57 صبح
من نمیدونم چرا کلید تشکر رو زیر پستهای افراد جدیدا نمیبینم . این دومین باری هست که این مشکل رو دارم. در هر صورت از شما به خاطر توضیحات مفصل متشکرم .
دکمه تشکر در این بخش وجود نداره .