ראשי> תכנות> קבלת החלטות בתהליכי פיתוח
Shahaf
Avatar
מנותק\ת

מנהל ראשי
הודעות: 342

 
02/06/2017 00:50:46

לאחרונה התחלתי לעבוד על הגירסה הבאה של רד-בורד וחשבתי שיכול להיות נחמד לכתוב פה על השלבים בפיתוח.

אתחיל בהיסטוריה - מה היה עד היום ומה הסיבות שהובילו לכל מהלך:
מי מכם שמכיר את רד-בורד יודע שהאתר קיים משנת 2001. הוא התחיל במערכות מוכנות, ובהמשך עבר למערכות שאני בניתי ב-Classic ASP. הסיבה לבניית המערכות בזמנו הייתה אבטחת מידע - המערכות המוכנות היו נפרצות על ימין ועל שמאל ולכן החלטתי לבנות מערכת שהקוד שלה סגור ויהיה יותר קשה לפרוץ אותה.
לצערי גם המערכות שלי נפרצו, מה שהביא אותי לפתח עוד ועוד גרסאות, כשבכל אחת למדתי מטעויות הקודמת ושיפרתי את האבטחה.
כל זה עד למערכת היציבה האחרונה שהחזיקה מעמד כמה שנים טובות.
לפני כ-3 שנים החלטתי לבנות את המערכת מחדש וקיבלנו את המערכת הנוכחית שבנוייה ב-ASP.NET MVC.
הסיבות לבנייה המחודשת היו ראשית הרצון שלי ללמוד טכנולוגיות חדשות (בזמנו המערכת מ-classic asp ל-dotnet mvc היה שינוי אסטרונומי) ושנית המערכת הקודמת שהייתה מאוד איטית ולכן במערכת הנוכחית שמתי דגש מיוחד על מהירות - עשיתי הרבה מבחני ביצוע, השתמשתי בספריות הכי קלות ומהירות (למשל dapper עבור גישה לבסיס הנתונים, simple injector עבור הזרקת תלויות), הקטנתי את כל קוד ה-javascript עם bundling&minification וכו.
במקביל באותה תקופה שחררו את ווינדוס 8 וכולם עשו עיצוב בסגנון של ריבועים, אז נסיתי לעשות משהו כזה וחשבתי שיצא לי יפה. אמנם התייעצתי עם כמה אנשים אבל בסוף כנראה שדעת הרוב עדיין נגד וקיבלתי הרבה ביקורות שליליות על העיצוב.

וחזרה להווה - מה הסיבה עכשיו? למה בכלל לעבוד על הגירסה הבאה:
כמו במערכת היציבה הנוכחית ב-3 השנים האחרונות שהפיתוח שלה נבע משתי סיבות עיקריות, כך גם הפעם יש שתיים כאלה:
הסיבה הראשונה היא אותה סיבה שהייתה בפעם הקודמת - הרצון ללמוד טכנולוגיות חדשות. העולם התקדם מאז שכל שפות צד השרת עברו לעבוד בצורה של mvc, היום בעזרת פריימוורקים של צד לקוח (angular, ember, react וכו) אתר זה כבר לא אתר אלא אפליקציית ווב. הדפים כבר לא מרונדרים במלואם בצד השרת, אלא המון לוגיקה עברה לצד הלקוח, צד השרת מעביר אליו מידע גולמי וצד הלקוח אחראי לנתח את המידע הזה ולבנות ממנו קומפוננטות html שמוצגות באתר.
בנוסף, לא יודע אם שמעתם אבל מיקרוסופט הוציאה גירסה חדשה של dotnet (כתבתי שני פוסטים שונים בנושא פה בפורום תכנות אתם מוזמנים לקרוא) שאפשר לעבוד איתה על מערכות שהן לא ווינדוס (linux, osx), עם תוצאות מדהימות במבחני הביצוע. מה שהופך גם את פיתוח צד השרת לשונה, מעניין ומאתגר.

הסיבה השנייה, אם בפעם הקודמת היה נסיון לשפר את הפער מהמערכת שלפניה שהיה האיטיות - הפעם אנסה לשפר את הפער מהמערכת הנוכחית שהוא העיצוב. אני רוצה לשים דגש על עיצוב מזמין וחוויית משתמש טובה שביחד יגרמו למשתמשים לרצות לבוא לאתר, לקרוא ולהגיב.

ועכשיו קצת לתהליך הפיתוח עצמו:
התחלתי בעיצוב -

עבדתי במשך שבועיים על דף הנחיתה והתייעצתי עם מספר אנשים לגבי כל האלמנטים השונים בו.
בהתחלה נסיתי לא להמציא את הגלגל מחדש וחיפשתי טמפלטים מוכנים של bootstrap, אבל לצערי יש פער לא קטן בבוטסטרפ בכל הנוגע לאתרים שמיושרים לימין (rtl - right to left), כך שבסוף החלטתי לבנות את כל העיצוב ב-css בעצמי. זה הצריך יותר עבודה אבל מצד שני איפשר הרבה יותר גמישות.
קיבלתי הצעות והערות רבות עבור עיצוב האתר והייתי פתוח וקשוב לשינויים. החל בבחירת פלטת הצבעים, וכלה במיקום התפריטים ועיגול הפינות בתיבות השונות.

לאחר כשבועיים, כשהבנתי שאני יכול להמשיך עוד חודשים לעצב בלי להתקדם לשום מקום, החלטתי שהגיע הזמן להלחם את המלחמה הבאה ולעבור לפיתוח צד הלקוח -

בדרך כלל אני מתחיל לכתוב את המערכות שלי מהתשתית, כלומר מצד השרת. הפעם בהנתן הדגש על העיצוב החלטתי להתחיל בצד הלקוח.
לאחר התנסות עם angular במסגרת פרוייקט אישי קודם שעשיתי בחצי שנה האחרונה לא היה לי ספק שזה הפריימוורק שאבחר בו, ומיד התחלתי לפרק את העיצוב שעשיתי לקומפוננטות וליצור אתר מתפקד.

ההתרשמות מאנגולר מאוד טובה, בגירסה 4 מרגישים את השיפור בביצועים, ובכלל במעבר בין angular js (גירסה 1) ל-angular (גירסה 2 ומעלה) רואים את ההבדל הזה בצורה קיצונית.
צורת העבודה עם components (המקבילה העכשווית ל-directives בגירסאות הקודמות) מקלה מאוד על חלוקת הקוד והשימוש החוזר בו, ומחזור החיים (life cycle) של הקומפוננטה הוא בעל הגיון וניכר שתורם למניעת טעינה חוזרת של חלקים בקומפוננטה שלא לצורך ובכך מביא לשיפור בביצועים.
הפיתוח עם typescript יוצר הרבה סרבול בדמות קבצי ביניים (קוד ה-ts מרונדר לקוד javascript כדי שהדפדפנים יוכלו לפענח אותו), אבל לצד זאת הוא יוצר גם הרבה סדר, קוד נקי, משתנים מוגדרים (strongly typed), ובעצם מקל על העבודה.

לצערי אני עובד (כמפתח תוכנה בחברת הייטק) מדי יום עד שעות מאוחרות ולכן לא מספיק להתקדם ולבצע עבודה משמעותית באתר, ובעיקר מדי כמה ימים אני מוצא לעצמי זמן לעבוד על עוד חלק קטן בפיתוח.
בינתיים העבודה על צד הלקוח מתקדמת יפה אבל לאט ורחוקה מלהיות גמורה.
אני עוד מתלבט אם לסיים חצי עבודה - את כל החלק של תצוגת המידע (הצגת הודעות), ואז להשלים את צד השרת שלו, ורק לאחר מכן לעבור לחלק של הכתיבה (הרשמה, כתיבת הודעות וכו). או שאולי לסיים את כל עבודת הפיתוח של צד הלקוח ורק לאחר מכן לעבור לצד השרת.
אבחר מה לעשות בהמשך ואעדכן.

לסיום משהו שחשבתי לציין -
אם אשקיע במערכת מושלמת אני יכול להמשיך לעבוד עליה גם עוד שנה ולא לשחרר שום דבר לאוויר העולם, ולכן במהלך הפיתוח אם אראה שיש דברים שאפשר לוותר עליהם כנראה שאעשה זאת.
בתור התחלה החלטתי החלטה מושכלת לא לכתוב בדיקות (Unit, Integration) לקוד.
בנוסף החלטתי לפחות בשלב זה לא לשלב אלמנטים של זמן אמת באתר (במערכת הנוכחית אם מישהו יכתוב הודעה בזמן שאתם גולשים באתר ההודעה תתווסף לעמוד בו אתם גולשים בזמן אמת).

אחזור לפה לעדכן בהתקדמות, ברשמים מהטכנולוגיות, בצמתים ובהחלטות. ובינתיים שיהיה בהצלחה!


Signature
yoni
Avatar
מנותק\ת

משתמש רגיל
הודעות: 4

 
02/06/2017 09:20:43

שיהיה בהצלחה!

Zohar
Avatar
מנותק\ת

משתמש רגיל
הודעות: 49

 
02/06/2017 10:57:13

מעניין, ואפילו מובן גם למי שלא יודע תכנות :)


Signature
yaakov
Avatar
מנותק\ת

משתמש רגיל
הודעות: 1

 
15/01/2018 12:54:44

שיהיה בהצלחה
מחכים...

חובה להתחבר כדי לכתוב באתר