میں نے اصل میں اسے سافٹ ویئر انجینئر بننے کے لیے مطالعے کے عنوانات کی ایک مختصر فہرست کے طور پر بنایا تھا، لیکن یہ اس بڑی فہرست تک پہنچ گئی جو آپ آج دیکھ رہے ہیں۔ اس مطالعاتی منصوبے سے گزرنے کے بعد ، مجھے ایمیزون میں سافٹ ویئر ڈویلپمنٹ انجینئر کے طور پر ملازمت پر رکھا گیا ہے!! آپ کو شاید اتنا مطالعہ نہیں کرنا پڑے گا جتنا میں نے کیا تھا۔ بہرحال، آپ کی ضرورت کی ہر چیز یہاں ہے۔
میں نے کئی مہینوں تک ، دن میں تقریبا 8 سے 12 گھنٹے مطالعہ کیا۔ یہ میری کہانی ہے: گوگل انٹرویو کے لئے میں نے 8 ماہ تک فل ٹائم کیوں پڑھا
براہ کرم نوٹ کریں: آپ کو اتنا مطالعہ کرنے کی ضرورت نہیں ہوگی جتنا میں نے کیا تھا۔ میں نے ان چیزوں پر بہت وقت ضائع کیا جن کے بارے میں مجھے جاننے کی ضرورت نہیں تھی۔ ذیل میں اس کے بارے میں مزید معلومات۔ میں آپ کا قیمتی وقت ضائع کیے بغیر وہاں پہنچنے میں آپ کی مدد کروں گا۔
یہاں درج عنوانات آپ کو کسی بھی سافٹ ویئر کمپنی بشمول ایمیزون، فیس بک، گوگل، اور مائیکروسافٹ میں تکنیکی انٹرویو کے لیے اچھی طرح تیار کریں گے۔
آپ کے لیے نیک تمنائیں!
یہ ایک بڑی کمپنی کے لیے ایک ویب ڈویلپر (خود سیکھا ہوا، بغیر CS ڈگری کے) سے سافٹ ویئر انجینئر تک جانے کے لیے کئی مہینوں کا میرا اسٹڈی پلان ہے۔
شرط:
نوٹ کریں کہ یہ سافٹ ویئر انجینئرنگ کے لیے مطالعہ کا منصوبہ ہے، ویب ڈویلپمنٹ کے لیے نہیں۔ بڑی سافٹ ویئر کمپنیاں جیسے گوگل، ایمیزون، فیس بک اور مائیکروسافٹ سافٹ ویئر انجینئرنگ کو ویب ڈویلپمنٹ سے مختلف سمجھتے ہیں۔ مثال کے طور پر، ایمیزون کے پاس فرنٹ اینڈ انجینئرز (FEE) اور سافٹ ویئر ڈویلپمنٹ انجینئرز (SDE)ہیں۔ یہ 2 الگ الگ کردارہیں اوران کےلیے الگ الگ انٹرویوز ہیں۔ کیونکہ ہر ایک کی اپنی ضروریات ہیں۔ ان کمپنیوں کو سافٹ ویئر ڈویلپمنٹ / انجینئرنگ کےلے کمپیوٹر سائنس کا علم درکار ہوتا ہے۔
یونیورسٹی کے کمپیوٹر سائنس پروگرام میں سیکھنے کے لیے بہت کچھ ہے، لیکن انٹرویو کے لیے صرف 75% جاننا ہی کافی ہے، اس لیے میں یہاں صرف اتنا ہی احاطہ کرتا ہوں۔ مکمل خود سیکھے جانے والے سی-ایس پروگرام کے لیے، میرے اسٹڈی پلان کے وسائل کامران احمد کے کمپیوٹر سائنس روڈ میپ میں شامل کیے گئے ہیں: https://roadmap.sh/computer-science
---------------- ذیل کی چیزیں اختیاری ہیں ----------------
اگر آپ کسی بڑی کمپنی میں سافٹ ویئر انجینئر کے طور پر کام کرنا چاہتے ہیں تو یہ وہ چیزیں ہیں جو آپ کو جاننا ہوں گی۔
اگر آپ میری طرح کمپیوٹر سائنس میں ڈگری حاصل کرنے سے محروم رہ گئے تو اس سے آپ کی زندگی کے چار سال بچ جائیں گے۔
جب میں نے یہ پروجیکٹ شروع کیا تھا، مجھےہیپ ، بگ-O یا ٹریز جیسا کچھ معلوم نہیں تھا،نہ ہی یہ معلوم تھا کہ گراف کے ساتھ کام کیسے کرتےہیں. اگر مجھے سورٹنگ الگورتھم کو کوڈ کرنا ہوتا تو میں آپ کو بتا سکتا ہوں کہ یہ میے لیے بہت مشکل کام تھا۔ ہر ڈیٹا سٹرکچر جو میں نے کبھی استعمال کیا تھا مجھے نہیں معلوم تھا کہ وہ کیسے کام کرتاہے۔ مجھے کبھی بھی میموری کو سنبھالنے کی ضرورت نہیں تھی جب تک کہ میں جس پروسس کو چلا رہا ہوں اسے "میموری آؤٹ" کا ایرر نہیں ملتا تھا۔ میں نے اپنی زندگی میں چند کثیر جہتی اریزاورہزاروں ایسوسی ایٹیو ارےکا استعمال کیا، لیکن میں نے کبھی بھی شروع سے ڈیٹا سٹرکچرز نہیں بنائے۔
یہ ایک طویل منصوبہ ہے۔ اس میں آپ کو مہینے لگ سکتے ہیں۔ اگر آپ پہلے ہی اس میں سے بہت کچھ سے واقف ہیں تو اس میں آپ کو بہت کم وقت لگے گا۔
نیچے دی گئی ہر چیز ایک خاکہ ہے، اور آپ کو اشیاء کو اوپر سے نیچے تک ترتیب سے نمٹنا چاہیے۔
میں GitHub کا خصوصی مارک ڈاؤن ورژن استعمال کر رہا ہوں، جس میں پیش رفت کو ٹریک کرنے کے لیے ٹاسک کی فہرست شامل ہے۔
اس صفحہ پر، اوپر کے قریب کوڈ(Code) بٹن پر کلک کریں، پھر "زپ ڈاؤن لوڈ کریں(Download Zip)" پر کلک کریں۔ فائل کو ان زپ کریں اور آپ ٹیکسٹ فائلوں کے ساتھ کام کر سکتے ہیں۔
اگر آپ ایک کوڈ ایڈیٹر میں کھول رہے ہیں جو مارک ڈاؤن کو سمجھتا ہے، تو آپ کو ہر چیز اچھی طرح سے فارمیٹ کی ہوئی نظر آئے گی۔
ایک نئی برانچ بنائیں تاکہ آپ اس طرح کے آئٹمز کو چیک کر سکیں، صرف بریکٹ میں ایک x لگائیں: [x]
۱. گٹ ہب (GitHub) ریپو https://github.com/jwasham/coding-interview-university
کوفورک بٹن پر کلک کرکے فورک کریں۔

۲. اپنی لوکل ریپو پر کلون کریں:
```
git clone git@github.com:<your_github_username>/coding-interview-university.git
cd coding-interview-university
git checkout -b progress
git remote add jwasham https://github.com/jwasham/coding-interview-university
git fetch --all
```
۳. اپنی تبدیلیاں مکمل کرنے کے بعد تمام خانوں کو X کے ساتھ نشان زد کریں:
```
git add .
git commit -m "Marked x"
git rebase jwasham/main
git push --set-upstream origin progress
git push --force
```
کچھ ویڈیوز صرف Coursera یا EdX کلاس میں داخلہ لے کر دستیاب ہیں۔ یہ MOOCs کہلاتے ہیں۔ بعض اوقات کلاسز سیشن میں نہیں ہوتیں اس لیے آپ کو چند ماہ انتظار کرنا پڑتا ہے، اس لیے آپ کو رسائی نہیں ہوتی۔
آن لائن کورس کے وسائل کو مفت اور ہمیشہ دستیاب عوامی ذرائع سے تبدیل کرنا بہت اچھا ہوگا، جیسے یوٹیوب ویڈیوز (ترجیحی طور پر یونیورسٹی کے لیکچرز)، تاکہ آپ لوگ کسی بھی وقت ان کا مطالعہ کر سکیں، بجاے کہ صرف اس وقت کے جب ایک مخصوص آن لائن کورس سیشن میں ہو۔
آپ جو کوڈنگ انٹرویوز کرتے ہیں اس کے لیے آپ کو پروگرامنگ لینگویج کا انتخاب کرنا ہوگا، لیکن آپ کو ایک ایسی زبان بھی تلاش کرنے کی ضرورت ہوگی جسے آپ کمپیوٹر سائنس کے تصورات کا مطالعہ کرنے کے لیے استعمال کر سکیں۔
ترجیحی طور پر زبان ایک ہی ہونی چاہیے، تانکہ آپ کو صرف ایک میں مہارت حاصل کرنے کی ضرورت ہو۔
جب میں نے مطالعہ کا منصوبہ بنایا تو میں نے اس کے لیے 2 زبانیں استعمال کیں: C اور Python
یہ میری ترجیح ہے۔ تم وہی کرو جو تمہیں پسند ہو۔
ہو سکتا ہے آپ کو اس کی ضرورت نہ ہو، لیکن نئی زبان سیکھنے کے لیے یہاں کچھ سائٹیں ہیں:
آپ انٹرویو کا کوڈنگ حصہ کرنے کے لیے ایسی زبان استعمال کر سکتے ہیں جس میں آپ کو آسانی ہو، لیکن بڑی کمپنیوں کے لیے یہ بہترین انتخاب ہیں:
آپ مندرجہ ذیل کو بھی استعمال کرسکتے ہیں لیکن پہلے پڑھ سکتے ہیں۔ انتباہات ہو سکتے ہیں:
یہاں ایک مضمون ہے جو میں نے انٹرویو کے لیے زبان کے انتخاب کے بارے میں لکھا تھا: کوڈنگ انٹرویو کے لیے ایک زبان چنیں. یہ اصل مضمون ہے جس پر میری پوسٹ مبنی تھی: انٹرویوز کے لیے پروگرامنگ لینگویج کا انتخاب
آپ کو زبان میں بہت مہارت اور علم رکھنے کی ضرورت ہے۔
انتخاب کے بارے میں مزید پڑھیں:
زبان سے متعلق وسائل یہاں دیکھیں
یہ کتاب کمپیوٹر سائنس کے لیے آپ کی بنیاد بنائے گی۔
صرف ایک کا انتخاب کریں، ایسی زبان میں جس میں آپ کو مہارت حاصل ہو۔ آپ کو بہت زیادہ پڑھنا اور کوڈنگ کرنا ہوگی۔
تمھارا انتخاب:
تمھارا انتخاب::
آپ کو ان میں سے بہت زیادہ خریدنے کی ضرورت نہیں ہے۔ ایمانداری سے "کریکنگ دی کوڈنگ انٹرویو(Cracking the Coding Interview)" شاید کافی ہے، لیکن میں نے خود کو مزید مشق دینے کے لیے بہت کچھ خریدا۔ لیکن میں ہمیشہ بہت زیادہ کرتا ہوں۔
میں نے یہ دونوں خریدے ہیں۔ انہوں نے مجھے کافی مشق دی۔
ایک کا انتخاب کرو:
یہ فہرست کئی مہینوں میں بڑھی، اور ہاں، یہ ہاتھ سے نکل گئی۔
یہ کچھ غلطیاں ہیں جو میں نے کی تھی۔ تو آپ کو ایک بہتر تجربہ ملے گا۔ اور آپ مہینوں کا وقت بچائیں گے۔
میں نے گھنٹوں کی ویڈیوز دیکھی اور کافی نوٹ لیے، اور مہینوں بعد مجھے بہت کچھ یاد نہیں تھا۔ میں نے 3 دن گزارے، اپنے نوٹس پڑھے اور فلیش کارڈز بنائے، تاکہ میں جائزہ لے سکوں۔ مجھے اس سارے علم کی ضرورت نہیں تھی۔
براہ کرم، پڑھیں تاکہ آپ میری غلطی نہ کریں:
کمپیوٹر سائنس کا علم برقرار رکھنا.
اس مسئلے کو حل کرنے کے لیے، میں نے ایک چھوٹی سی فلیش کارڈز سائٹ بنائی جہاں میں 2 اقسام کے فلیش کارڈز شامل کر سکتا ہوں: جنرل اور کوڈ۔ ہر کارڈ کی فارمیٹنگ مختلف ہوتی ہے۔ میں نے ایک موبائل مسابقتی ویب سائٹ بنائی ہے، تاکہ میں اپنے فون یا ٹیبلیٹ پر جہاں بھی ہوں، جائزہ لے سکوں۔
اپنےلیے مفت میں بنائیں:
میں اپنے فلیش کارڈز استعمال کرنے کا مشورہ نہیں دیتا۔ یہ بہت زیادہ ہیں اور ان میں سے زیادہ تر چیزیں ایسی ہیں جن کی آپ کو ضرورت نہیں ہے۔
لیکن اگر آپ میری بات نہیں سننا چاہتے، تو آپ یہاں جائیں:
ذہن میں رکھیں کہ میں اوور بورڈ گیا اور میرے جو کارڈز ہیں ان میں اسمبلی لینگویج اور پائیتھون کی چھوٹی معلومات سے لے کر مشین لرننگ اور اعدادوشمار تک ہر چیز کا احاطہ کیا گیا ہے۔ جو کے ضرورت سے بہت زیادہ ہے۔
فلیش کارڈز پر نوٹ: پہلی بار جب آپ پہچانیں گے کہ آپ کو جواب معلوم ہے تو اسے معلوم کے طور پر نشان زد نہ کریں۔ایک ہی کارڈ دیکھیں اور اس کا کئی بار صحیح جواب دیں اس سے پہلے کہ آپ واقعی اسے نشان زدہ کریں۔ تکرار اس علم کو آپ کا دماغ کی مزید گہرائی میں اتار دے گی۔
میری فلیش کارڈ سائٹ کو استعمال کرنے کا ایک متبادل ہے Anki، جو مجھے متعدد بار تجویز کیا گیا ہے۔ یہ آپ کو یاد رکھنے میں مدد کے لیے تکرار کا نظام استعمال کرتا ہے۔ یہ صارف دوست ہے، تمام پلیٹ فارمز پر دستیاب ہے اور اس میں کلاؤڈ سنک سسٹم ہے۔ ای-اہ-ایس (iOS) پر اس کی قیمت $25 ہے لیکن دوسرے پلیٹ فارمز پر مفت ہے۔
انکی (Anki)فارمیٹ میں میرا فلیش کارڈ ڈیٹا بیس: https://ankiweb.net/shared/info/25173560 (شکریہ @xiewenya).
کچھ طلباء نے سفید جگہ کے ساتھ فارمیٹنگ کے مسائل کا ذکر کیا ہے جنہیں درج ذیل کام کرکے حل کیا جا سکتا ہے: ڈیک کھولیں، کارڈ میں ترمیم کریں، کارڈز پر کلک کریں، "اسٹائلنگ" ریڈیو بٹن کو منتخب کریں، کارڈ کی کلاس میں ";white-space: pre" ممبر کو شامل کریں۔
یہ بہت اہم ہے.
جب آپ ڈیٹا سٹرکچر اور الگورتھم سیکھ رہے ہوں تو انٹرویو کے سوالات کو کوڈنگ کرنا شروع کریں۔
آپ جو سیکھ رہے ہیں اسے مسائل کو حل کرنے کے لیے لاگو کرنے کی ضرورت ہے، ورنہ آپ بھول جائیں گے۔ میں نے یہ غلطی کی۔
ایک بار جب آپ نے کوئی موضوع سیکھ لیا، اور اس میں کسی حد تک مہارت محسوس کریں، مثال کے طور پر، لنکڈلسٹ:
جب آپ یہ سب چیزیں سیکھ رہے ہوں تو سوالات کرتے رہیں، اس کے بعد نہیں۔
آپ کو علم کی وجہ سے نوکری پر نہیں رکھا جا رہا ہے، بلکہ آپ کو اس لیے رکھا گیا ہے کہ آپ علم کو کیسے استعمال کرتے ہیں۔
ذیل میں اس کے لیے بہت سے وسائل موجود ہیں۔ کام جاری رکھیں۔
بہت سارے خلفشار ہیں جن میں قیمتی وقت لگ سکتا ہے۔ توجہ اور ارتکاز مشکل ہے۔ کچھ میوزک آن کریں۔ دھن کے بغیر اور آپ اچھی طرح توجہ مرکوز کر سکیں گے۔
یہ مروجہ ٹیکنالوجیز ہیں لیکن اس اسٹڈی پلان کا حصہ نہیں ہیں:
یہ کورس بہت سارے مضامین پر مشتمل ہے۔ ہر ایک میں شاید آپ کو کچھ دن لگیں گے، یا شاید ایک ہفتہ یا اس سے بھی زیادہ۔ یہ آپ کے شیڈول پر منحصر ہے۔
ہر روز، فہرست سے اگلا مضمون لیں، اس موضوع کے بارے میں کچھ ویڈیوز دیکھیں، اور پھر اس ڈیٹا سٹرکچر یا الگورتھم کا، اس زبان میں جو آپ نے اس کورس کے لیے منتخب کی ہے ،کاایک کوڈ لکھیں۔
آپ میرا کوڈ یہاں دیکھ سکتے ہیں:
آپ کو ہر الگورتھم کو حفظ کرنے کی ضرورت نہیں ہے۔ آپ کو صرف اتنا سمجھنے کی ضرورت ہے کہ آپ اپنا کوڈ لکھ سکیں۔
ابھی کیوں؟ میں انٹرویو کے لیے تیار نہیں ہوں۔
آپ کو پروگرامنگ کی مشقیں کرنے کی کیوں ضرورت ہے:
یہ انٹرویو میں سوال حل کرنے کے طریقہ کار، اور بات چیت کے طریقے کا ایک بہترین تعارف ہے۔ آپ کو یہ پروگرامنگ انٹرویو کی کتابوں سے بھی ملے گا، لیکن مجھے یہ شاندار معلوم ہوا: الگورتھم ڈیزائن کینوس (Algorithm design canvas)
وائٹ بورڈ یا کاغذ پر کوڈ لکھیں، کمپیوٹر پر نہیں۔ کچھ نمونے کے جوابات کے ساتھ ٹیسٹ کریں۔ پھر اسے ٹائپ کریں اور کمپیوٹر پر اس کی جانچ کریں۔
اگر آپ کے پاس گھر میں وائٹ بورڈ نہیں ہے تو آرٹ اسٹور سے ایک بڑا ڈرائنگ پیڈ لیں۔ آپ صوفے پر بیٹھ کر مشق کر سکتے ہیں۔ یہ میرا "صوفہ وائٹ بورڈ" ہے۔ میں نے صرف دکھانے کے لیے تصویر میں قلم شامل کیا۔ اگر آپ قلم استعمال کرتے ہیں، تو آپ چاہیں گے کہ آپ اسے مٹابھی سکیں۔ کیونکہ یہ جلدی گندا ہو جاتا ہے. میں پنسل اور صافی کا استعمال کرتا ہوں۔
کوڈنگ سوال کی مشق پروگرامنگ کے مسائل کے جوابات کو یاد کرنے کے بارے میں نہیں ہے۔
اپنی اہم کوڈنگ انٹرویو کی کتابوں کو مت بھولنا یہاں.
سوالات حل کرنا:
کوڈنگ انٹرویو سوال کی ویڈیوز:
چیلنج/پریکٹس سائٹس:
باتیں کافی ہیں، آئیے اب سیکھتے ہیں!
لیکن سیکھتے وقت اوپر سے کوڈنگ سوالات کرنا نہ بھولیں!
یہ اس کے بارے میں کافی ہے.
جب آپ "کریکنگ دی کوڈنگ انٹرویو" سے گزرتے ہیں، تو اس پر ایک باب ہوتا ہے، اور آخر میں یہ دیکھنے کے لیے ایک کوئز ہوتا ہے کہ آپ مختلف الگورتھم کی رن ٹائم پیچیدگی کی شناخت کر سکتے ہیں یانہیں۔ یہ ایک زبردست جائزہ اور ٹیسٹ ہے۔
[ ] Videos:
[ ] Online Courses:
[ ] Implement with array using linear probing
[ ] Notes:
For heapsort, see Heap data structure above. Heap sort is great, but not stable
[ ] UC Berkeley:
[ ] Merge sort code:
[ ] Quick sort code:
[ ] Implement:
[ ] Not required, but I recommended them:
As a summary, here is a visual representation of 15 sorting algorithms. If you need more detail on this subject, see "Sorting" section in Additional Detail on Some Subjects
گراف کو کمپیوٹر سائنس میں بہت سے مسائل کی نمائندگی کرنے کے لیے استعمال کیا جا سکتا ہے، اس لیے یہ سیکشن لمبا ہے، جیسا کہ ٹریز اور ترتیب / سارٹنگ تھے۔
Notes:
[ ] MIT(videos):
[ ] Skiena Lectures - great intro:
[ ] Graphs (review and more):
Full Coursera Course:
I'll implement:
If you need more detail on this subject, see "String Matching" section in Additional Detail on Some Subjects.
اس سیکشن میں چھوٹی ویڈیوز ہوں گی جنہیں آپ زیادہ تر اہم تصورات کا جائزہ لینے کے لیے بہت تیزی سے دیکھ سکتے ہیں۔
اگر آپ اکثر ریفریشر چاہتے ہیں تو یہ اچھا ہے۔
Mock Interviews:
انٹرویو کے تقریباً 20 سوالات کے بارے میں سوچیں جو آپ کو نیچے دیے گئے آئٹمز کی لائنوں کے ساتھ ملیں گے۔ ہر ایک کے لیے کم از کم ایک جواب دیں۔ ایک کہانی رکھیں، نہ کہ صرف ڈیٹا، کسی ایسی چیز کے بارے میں جو آپ نے حاصل کی ہے۔
میرے کچھ (ہو سکتا ہے کہ میں پہلے سے ہی جوابات جانتا ہوں، لیکن ان کی رائے یا ٹیم کے نقطہ نظر کو سمجھنے کے لیے):
مبارک ہو!
سیکھتے رہیں۔
ابھی بھی بہت کچھ کرنا باقی ہے.
*****************************************************************************************************
*****************************************************************************************************
اس نقطہ کے نیچے ہر چیز اختیاری ہے۔ داخلہ سطح کے انٹرویو کے لیے اس کی ضرورت نہیں ہے۔ تاہم، ان کا مطالعہ کرنے سےآپ کمپیوٹر سائنس کے
مزید تصورات سے زیادہ روشناس ہوں گے،اور آپ کسی بھی سافٹ ویئر انجینئرنگ کے کام کے لیے بہتر طور پر تیار ہوں گے۔ آپ ایک اچھے سافٹ ویئر انجینئر بنیں گے۔
*****************************************************************************************************
*****************************************************************************************************
These are here so you can dive into a topic you find interesting.
اگر آپ کے پاس 4+ سال کا تجربہ ہے تو آپ سسٹم ڈیزائن کے سوالات کی توقع کر سکتے ہیں۔
میں نے انہیں شامل کیا تاکہ آپ کو ایک بہترین سافٹ ویئر انجینئر بننے میں مدد ملے، اور کچھ ٹیکنالوجیز اور الگورتھم سے آگاہی ہو، تاکہ آپ کے پاس ایک بڑا ٹول باکس ہو۔
AVL trees
Splay trees
Red/black trees
2-3 search trees
2-3-4 Trees (aka 2-4 trees)
N-ary (K-ary, M-ary) trees
B-Trees
میں نے ان کو پہلے سے پیش کیے گئے کچھ خیالات کو تقویت دینے کے لیے شامل کیا تھا لیکن میں انھیں اوپر شامل نہیں کرنا چاہتا تھا کیونکہ یہ کافی سے زیادہ ہے۔ کسی ایک موضوع پر اسے زیادہ کرنا آسان ہے۔
آپ اس صدی میں ملازمت حاصل کرنا چاہتے ہیں، کیا میں ٹھیک کہہ رہا ہوں؟
SOLID
Union-Find
More Dynamic Programming (videos)
Advanced Graph Processing (videos)
MIT Probability (mathy, and go slowly, which is good for mathy things) (videos):
String Matching
Sorting
NAND To Tetris: Build a Modern Computer from First Principles
Sit back and enjoy.
List of individual Dynamic Programming problems (each is short)
Excellent - MIT Calculus Revisited: Single Variable Calculus
Skiena lectures from Algorithm Design Manual - CSE373 2020 - Analysis of Algorithms (26 videos)
Carnegie Mellon - Computer Architecture Lectures (39 videos)
MIT 6.042J: Mathematics for Computer Science, Fall 2010 (25 videos)