در این سری از پستها، خلاصهای فصل به فصل از کتاب ‘Software Engineering for Data Scientists’ نوشتهی Catherine Nelson را به اشتراک میگذارم.
پیشگفتار
علم داده به مهارت های کدنویسی متکی است؛ چه درحال ساخت سیستم های یادگیریماشین باشید، چه درحال کاوش دادهها (Data Exploration)، مصورسازی توزیع دادهها (Visualizing Distributions) یا انجام تحلیلهای آماری (Statistical Analysis). مهارتهای کدنویسی برای نوشتن کدهای نگهداشتپذیر(Maintainable) و موفق(Successful) ضروری هستند. حتی خارج از تیم های توسعهی نرمافزار، کدهای مقاوم(Robust) و قابل بازتولید(Reproducible)، استفادهی دیگر دانشمندان داده از کد شما و حتی استفادهی خود شما را پس از گذشت مدت زمانی، راحت میکند.
در ابتدا، نویسنده داستانی از پیشینهی خود نقل میکند:
در ابتدا، من ارزش مهندسی خوب را درک نمیکردم. اوایل کارم در حوزه علم داده، به تیمی پیوستم که تنها دانشمند داده آن بودم. همتیمیهایم مهندسان نرمافزار و طراحان بودند و نگران بودم که بدون وجود دانشمندان داده دیگر، نتوانم مهارتهایم را افزایش دهم. نگرانیام را با یکی از همکاران توسعهدهنده در میان گذاشتم. او گفت: “اما یادگیری نوشتن کد بهتر به شما اجازه میدهد فعالیت علم داده بیشتری انجام دهید.” این نظر در ذهنم ماند و از آن زمان به بعد، بهبود مهارتهای مهندسی نرمافزار برای من بسیار مفید بوده است. این مهارتها به من کمک کردهاند کدی بنویسم که برای همکارانم قابل استفادهتر باشد و حتی پس از گذشت ماهها، تغییر آن آسان باشد.
هدف کتاب
هدف نویسنده از این کتاب، راهنمایی خوانندگان در نوشتن کدهای بهتر علم داده و پوشش بهترین روشها برای وظایفی مانند تست، مدیریت خطا و لاگگیری است. این کتاب نوشتن کدهای نگهداشتپذیر و مقاوم که به خوبی با کدهای بزرگتر ادغام میشوند را توضیح میدهد.
با وجود افزایش استفاده از هوش مصنوعی مولد (مانند ChatGPT)، نویسنده معتقد است که درک اصول کدنویسی همچنان ضروری است. ارزیابی کدهای تولید شده توسط هوش مصنوعی و انجام انتخابهای آگاهانه مهارتهای مهمی هستند که این کتاب قصد دارد توسعه دهد.
این کتاب برای چه کسانی مفید است؟
این کتاب برای دانشمندان داده طراحی شده است، اما برای تحلیلگران داده(Data Analyst)، مهندسان یادگیری ماشین(Machine Learning Engineer) و مهندسان داده(Data Engineer) نیز ارزشمند است. اصول کلیدی مهندسی نرمافزار(Software Engineer) را با مثالهایی که برای دانشمندان داده مناسب است، توضیح میدهد. این کتاب برای تازهواردان به علم داده قابل استفاده است و مهارتهای عملی مهندسی نرمافزار را که اغلب در دورههای مقدماتی نادیده گرفته میشوند، پوشش میدهد. همچنین برای افرادی که خودآموز هستند یا از زمینههای دیگر به این حوزه آمده اند، مفید است. دانشمندان داده با تجربه نیز هنگام همکاری با توسعهدهندگان نرمافزار از آن بهرهمند خواهند شد. این کتاب فرض میکند که خواننده با اصول علم داده و مهارتهای پایهای برنامه نویسی پایتون، از جمله ماژولهایی مانند NumPy، Matplotlib، pandas و scikit-learn آشنا است. این کتاب برای توسعهدهندگان نرمافزار که به دنبال یادگیری مهارتهای علم داده و یادگیری ماشین هستند، مناسب نیست.
مهندسی نرم افزار در مقابل علم داده
تفاوت بین ذهنیتهای علم داده و مهندسی نرمافزار در رویکردها و اهداف آنها نهفته است. دانشمندان داده معمولاً بر اکتشاف، کشف و آزمون فرضیه تمرکز میکنند و نتایج پروژه در ابتدا نامشخص است. در مقابل، مهندسی نرمافزار بر برنامهریزی، طراحی و ساخت با نتیجهای مشخص تأکید دارد و استانداردسازی و خودکارسازی را در اولویت قرار میدهد. دانشمندان داده میتوانند با پذیرش جنبههایی از ذهنیت مهندسی، کیفیت برنامهنویسی خود را بهبود بخشند، موضوعی که به تفصیل در فصل ۱ بررسی شده است.
در ادامه این کتاب
این کتاب با تمرکز بر بهبود مهارتهای برنامهنویسی، از شیوههای نوشتن توابع منفرد(Individual Functions) شروع میکند و به تدریج به مباحث پیشرفتهتری مانند کاربرپسند کردن کد، تکنیکهای استقرار(Deployment) و بهترین شیوههای همکاری در محیطهای نرمافزاری میپردازد. در ۱۴ فصل، نویسنده به جنبههای مختلف نوشتن و نگهداری کد علم داده میپردازد، از اصول نوشتن کد ساده(Simple) و کارآمد(Efficient) گرفته تا تحلیل عملکرد(Performance analysis)، استفاده مؤثر(Effectively) از ساختارهای داده(Data Structures)، برنامهنویسی شیءگرا(Objected Oriented Programming) و تابعی(Functional Programming)، مدیریت خطاها، قالببندی(Formatting) و تست کد، طراحی و بازسازی(Refactoring)، مستندسازی(Documentation)، اشتراکگذاری کد، استفاده از APIها، خودکارسازی و استقرار، امنیت و روشهای کار در تیمهای نرمافزاری. این کتاب به عنوان یک راهنمای جامع برای برنامهنویسان علم داده طراحی شده است تا مهارتهای خود را بهبود بخشند و کدهای با کیفیتتری بنویسند.