להבין איך לתכנן תוכנה- j2ee(JavaWeb) ובכלל

YIM222

New member
להבין איך לתכנן תוכנה- j2ee(JavaWeb) ובכלל

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

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

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

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

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

ובפרט בתחום הWS שאני מנסה לעשות בJ2ee בטכנולוגיית rest אני מסתבך.


לדוגמא אביא כאן, אפליקצייה שאמורה לעשות כל מיני שינויים על רשימת מס' ובסוף להגריל מתוכה X מס' אקראיים.

אז כשעשיתי את זה בconsole זה עבד שיגעון. ראו את הקובץ TestGoralRound.java אבל כשבאתי לעשות את זה בWeb-service זה הסתבך לי כאילו כל פעם במתודה חדשה הוא לא ידע לשמור על הערך של האובייקט שנוצר . (ראו קובץ Test.java ) .

לבסוף הצלחתי לעשות את זה ע"י יצירת האובייקט בצורה סטטית . (Test2.java). גם ראיתי דוגמאות שעושים לזה Mapping וכאלה. אבל אני לא רוצה לעשות סתם כמו תוכי או במריחות וטלאים. אני רוצה להבין את העיקרון שלא אתקע בכל מצב חדש .

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

אשמח לתשובות ולהכוונה.

תודה ויום טוב.

קישור לקבצים :

https://drive.google.com/open?id=0BzCneWXCUTk6SGxNZUU4OHdNTjg
 

פרסאוס

New member
לזה הולכים לבי"ס או חורשים את הרשת.

אתה צריך שעורים של ממש במתולוגיה. זה לא משהו שתשובה נקודתית תפתור ועל כל תשובה שתקבל, יעלו לך 10 שאלות.
 

YIM222

New member
אוקיי אז איזה נושא צריך ללמוד ?

את הספר הראשי של design - pattern ?
 

YIM222

New member
תשובה לגמרי לא עניינית - תודה בכל מקרה

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

ראיתי הרבה בוגרי מדעמ"ח שלא מבינים בין ימינם לשמאלם.
 

BravoMan

Active member
זו תשובה מאוד עניינית!

הגישה שלך די מגעילה ומוציאה חשק לעזור לך!
באת לפורום ושאלת שאלה שמאוד קשה לך איתה.
קיבלת תשובה, ומיד פסלת אותה בלי לבדוק, בטענה שאתה בעצם יודע יותר טוב מה הדרך.
&nbsp
אז למה בכלל באת ושאלת???
&nbsp
היות ועוד אנשים קוראים בפורום הזה, ולהרבה מהם יכולה לעלות אותה שאלה בסיסית (בשבילך זה קצת מאוחר לא? כבר יש לך אתר, ואתה לוקח פרויקטים בתשלום), אני ארחיב על התשובה של פרסאוס:
&nbsp
התפקיד של מפתח תוכנה הוא לא "לכתוב קוד".
התפקיד הוא לתת מענה לצרכים ולפתור בעיות. זה דורש חשיבה מסוג מאוד מסוים.
&nbsp
השלבים באופן כללי הם כאלה:
1. לקבל את הדרישות ולהבין אותם.
2. לפרק את הדרישות לחלקים הכי בסיסיים שאפשר
3. לחשוב מה נותן מענה לכל חלק בסיסי של דרישה
4. לתכנן את המענה צעד צעד
5. לממש את המענה בעזרת הכלים שעומדים לרשות המפתח
&nbsp
יש אנשים שיודעים לעשות זאת אינטואיטיבית, וכל מה שהם צריכים זה להכיר את החלק המעשי: ללמוד את הכלים.
אנשים כאלה (שאינם רבים) מגיעים להיות מפתחים בלי תואר, ולעתים נדירות ללא השכלה פורמלית בתחום תוכנה בכלל, אבל הם לעולם לא ישאלו "איך מתכננים תוכנה?"
הם תמיד ישאלו "איך עושים פעולה X בעזרת כלי Y?" או לכל היותר "איזה כלי נחוץ כדי לבצע פעולה X?"
&nbsp
השאלה האחרונה גם היא בעייתית, כי אף פעם אין לה תשובה אחת, ולפעמים היא מובילה למלחמות דת

גם לשאלה "איך עושים X?" יש לרוב יותר מתשובה אחת, ולא בכל הנסיבות אותה תשובה תהיה הטובה ביותר.
&nbsp
תואר ראשון במדעי המחשב מלמד את החשיבה הנחוצה לפתרון בעיות בעזרת כלי פיתוח, אבל התואר אינו עושה זאת במכה.
יש סיבה טובה למה לוקח 3 שנים להשלים אותו.
&nbsp
הקורסים הכי קריטיים למתכנתים נחשבים "מבני נתונים" ו-"אלגוריתמים", אבל גם הקורסים הרבים במתמטיקה שנכללים בתואר חשובים.
אומנם נהוג לחשוב שאין להם קשר ישיר לתכנות, ורוב האנשים לא ישתמשו במה שנלמד שם אחרי התואר, אבל רוכשים בהם הרגל מאוד חשוב: לנסח בצורה פורמלית בעיות, ולמצוא ולנסח בצורה פורמלית בעזרת שפה קבוע פתרון.
&nbsp
כך שאם אינך יכול לענות בעצמך אינטואיטיבית לשאלה "איך מתכננים תוכנה?", אתה צריך ללכת וללמוד תואר מדמ"ח.
&nbsp
אין שום ספר או אתר קסום שמכיל את התשובה לשאלה הזו.
כי אין תשובה לשאלה הזו. יש דרכי חשיבה ואוסף הרגלים שמלמדים אותך איך להגיע לפתרון, אבל היות ו-"תוכנה" זה מונח רחב מאוד שהקצוות שלו רחוקים אחד מהשני כמו כוכבים בשמיים (לפעמים תרתי משמע), מי שמחפש קיצור דרך או תשובה אחידה, לא יגיע לשום מקום.
&nbsp
בעוד שיש דברים מסוימים שמשותפים למשחק על טלפון ולתוכנה שמפעילה את הרובוט של NASA על מאדים, כתיבת התוכנות האלה שונה מאוד אחת מהשנייה, ודורשת גם הרבה כישורים שונים ומציבה אתגרים שונים.
&nbsp
כמובן, מכללות ואוניברסיטאות אינם "מכונות לייצור מתכנתים".
הם מנסים להעביר את הידע (בעיקר התאורטי), דרכי חשיבה, והרגלים.
&nbsp
אבל, זה תלוי בכל סטודנט כאדם ייחודי, איך ואם הוא יצליח לקלוט, ומה הוא יוכל לעשות עם מה שקלט.
לכן, בהחלט קיימים אנשים שסיימו תואר ולא יודעים לתכנת, הן כי תואר לא באמת מלמד "לתכנת" והן כי להם זה לא מתאים מסיבות כאלה ואחרות.
זה בסדר וזה לגיטימי - לא כל מקצוע מתאים לכל אדם.
ופיתוח תוכנה הוא מקצוע יצירתי, כך שמי שאינו אוהב אותו, יתקשה איתו מאוד.
&nbsp
כל זה לא אומר שתואר מיותר.
נכון - אין ידע סודי ששמור באקדמיה. כל הידע המעשי זמין בחוץ.
גם הידע התאורטי - אבל כאן יש בעיה: ללא מסגרת, קשה עד בלטי אפשרי לדעת איזה ידע תאורטי חסר לך, ולא כל אחד מצליח להבין תאוריה (שלא תמיד ניתן לתרגם למעשי ולבחון מול העיניים) ללא הנחיה אנושית.
&nbsp
בניגוד לידע מעשי שם בהינתן תיאור טוב ומדויק של בעיה נקודתית קל למצוא הוראות לפתרון, הידע התאורטי שנחוץ כדי בכלל להבין מה הבעיה, קשה לאיתור בעזרת חיפוש ב-google.
&nbsp
לפעמים לוקח שנים להבין שלא ידענו משהו מאוד בסיסי וחשוב וכמה נזק החוסר הזה גרם לנו.
ואת זה אני כותב לך מניסיון אישי בתור מי שעובד 12 שנה בפיתוח תוכנה ללא תואר!
&nbsp
אז לכל מי שמוצא את עצמו שאול את השאלה: "איך מתכננים תוכנה באופן כללי?" התשובה שלי היא כזו:
א) תוודא שאתה רוצה לתכנן תוכנות לא רק בגלל ששמעת שיש בזה הרבה כסף, אלא כי זה מעניין אותך ויש לך משיכה לתחום.
&nbsp
ב) לך ותעשה תואר ראשון במדעי המחשב, זה יענה על השאלה שלך.
&nbsp
ובהצלחה!
 

YIM222

New member
השאלה לא הייתה איך מתכנתים תוכנה

וחוץ מזה לא אכנס לויכוח איתך אם תואר הוא חובה או לא (הרי אתה בעצמך העדת שאתה ללא תואר), וחוץ מזה אני מכיר טובה לכל מי שעונה, גם אם התשובה שלו נשמעת שמונעת מאג'נדה של, "אל תבוא לתכנת ללא תואר".

מי אני שאפסול תשובות אבל תשובה לא ענינית שמשאירה אותך באוויר היא לא ענינית וזה מה שאמרתי לדעתי.

השאלה שלי היא איך לתכנן נכון את התוכנה. ונכון ייתכן שאין לזה תשובה חד משמעית, גם ייתכן שלימודי תואר נותנים הרבה כלים לזה.

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

הרי לימודי תואר הם אסופה של קורסים, אז סה"כ אפשר להפנות אותי לאותם קורסים שנותנים את הכלים לזה.

גם אני בטוח שאחרי לימודים ארוכים של 3-4 שנים לא הכל נמצא בראש באותה עשירית שניה ותמיד צריך להתרענן.

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

זה שאין לי יכולת ללמוד תואר לא אומר שאני לא יכול לדעת את זה.

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

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

תודה
 

BravoMan

Active member
מה עם כותרת השרשור?

קודם כל, לא אני, ולא פרסאוס לא כתבנו לך "אם אין לך תואר אין לך מה לנסות להבין" או שום דבר דומה.
&nbsp
לא נראה שהבנת את מה שבאתי להסביר:
השאלה ששאלת אינה נקודתית כלל וכלל! היא בדיוק ההפך - היא הכי כללית שאפשר!
&nbsp
ולכן, אין שום אפשרות להפנות אותך לקורס ספציפי, או לספר ספציפי, או לאתר ספציפי שילמד אותך את הנושא נקודתית.
&nbsp
כי דברים כאלה פשוט לא קיימים!
&nbsp
כל תוכנה שתעבוד עליה, יהיו לך שיקולים אחרים איך לתכנן ולבנות אותה.
לא תהיה לך אף פעם תשובה ל-"התכנון הנכון" - כי זו לא שאלה במבחן שיש לה תשובה ידועה מראש.
&nbsp
בכל מצב תצטרך לקבל החלטות, לעשות וויתורים ופשרות בגלל אילוצים שונים, ולבסוף מה שיקבע אם בחרת נכון או לא זה איך התוכנה שלך מתפקדת בזמן אמת, כמה קשה לשפר ולתחזק אותה, והאם המשתמשים מרוצים.
&nbsp
תתפלא כמה מוצרים ידועים ומוכרים התחילו את דרכם כניסיונות, ללא "תוכנית על", המשיכו כאוסף של "תלאים" ואולי אפילו היום הם אוסף של תלאים שנכתבו ע"י אנשים שונים ממדינות שונות שבכלל לא מכירים אחד את השני!
&nbsp
diff ו-patch (תלאי) הם בין הכלים הכי חשובים שעל המתכנת להכיר!

(לא, זו רק חצי בדיחה, אתה באמת צריך לדעת איך לעבוד עם אלה, אם אתה רוצה להתעסק בפרויקטים רציניים)
&nbsp
אז כל הכבוד לך שיש לך בטחון עצמי ויכולת ללמוד, וכו' וכו'.
&nbsp
אבל כל מה שכתבת בהודעה פשוט לא רלוונטי, כי לא ניתן לענות לבקשתך בצורה יותר טובה מאשר להמליץ לך על התוכנית היחידה שמוכרת לנו שנותנת באופן מסודר (פחות או יותר) כלים שיעזרו לך להתמודד.
&nbsp
תואר הוא לא סתם "סופה של קורסים" - זו תוכנית כוללת שבנו אותה למטרה מסוימת. היא נועדה שתצרוך אותה בצורתה המלאה אם אתה רוצה את התוצאה לשמה היא נוצרה.
&nbsp
אתה גם טועה אם אתה חושב שניתן "לזקק" מהתואר קורס או כמה קורסים בודדים שיעזרו לך ספציפית במה ששאלת.
&nbsp
כמובן, לא אמרתי בשום מקום שתואר הוא חובה.
&nbsp
אבל קח למשל design patterns - אתה לא הבנת מה זה, ולכן אתה מתקשה עם זה.
design patterns הם לא סדרת הוראות "איך לתכנן תוכנה" - הם אוסף של מה שנחשב ל-best practice - הדרך הטובה ביותר, לפתור בעיות נקודתיות מוכרות שחוזרות על עצמן הרבה במקצוע התכנות.
&nbsp
אחד מהכללים הבסיסיים ביותר בתכנות הוא לא להמציא מחדש את הגלגל (אלא אם החלטת שזה בדיוק מה שאתה רוצה לעשות כי יש לך רעיון לגלגל טוב יותר).
אם מישהו כבר פתר את הבעיה, ויש דרך בדוקה לפתור אותה - תשתמש במה שיש!
&nbsp
ספריות תוכנה נותנות לך קוד מוכן.
design patterns נותנות לך תבניות לעצב את הקוד שלך, למשימה ספציפית.
&nbsp
ו-OOP הוא בכלל דרך אחת, לא בהכרח הטובה ביותר או המתאימה ביותר לכל מצב, לארגן קוד ונתונים שהקוד משתמש בהם.
גם אם תלמד OOP על בוריו, זה לא יכוון אותך איך לעצב את כלל התוכנית שאתה בונה.
&nbsp
עוד טעות שעשית היית לומר שאתה פוחד להתעמק במקור כלשהו ואז לגלות שהוא לא רלוונטי.
כי הכל רלוונטי - אתה צריך ללמוד כל מה שיש לך זמן ומקור ללמוד אותו, ולברור אחר כך, כשתגיע להשתמש במה שלמדת. או שלא.
&nbsp
יש בתכנות הרבה נושאים (נקודתיים ומוגדרים היטב) שעליהם יש מחלוקות קשות מה "יותר טוב", "יותר נכון", "יותר מהיר" וכו'.
&nbsp
לא מזמן, בפורום 308 השכן הביאו כתבה עם סקר שמראה שמתכנתים שמשתמשים ברווחים במקום בטאבים כדי ליישר קוד מרוויחים יותר.
&nbsp
בקיצור - אני חוזר על מה שכתבתי קודם: התשובה "תלמד תואר" היא עניינית ורלוונטית.
אם ללמוד תואר לא מתאים לך, תצטרך להמציא בעצמך דרך להתמודד עם הבעיה.
&nbsp
אתה יכול לנסות ללמוד חומר של קורסים מסוימים מהתואר.
אני לא יודע אם זה יעזור לך, ורק אתה יכול לדעת אם יש לך את היכולת להתמודד עם החומר הזה לבד.
&nbsp
בכל מקרה, בהצלחה!
 

YIM222

New member
תודה ותודה (על הבהצלחה ועל המידע)

אני תמיד אומר לבחורות שבהצלח"ה זה ר"ת

"בי היית צריכה להאמין. חבל, הפסדת. "

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

nitzan82

New member
כמה שטויות בהודעה אחת פשוט לא יאומן

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

BravoMan

Active member
תודה על תשובתך המועילה והמנומקת!

כולנו למדנו ממנה כיצד בדיוק כל אחד יכול להיות מתכנת, וכעת המכללות הרבות בארץ יפשטו את הרגל.
&nbsp
 

הפרבולה

New member
מתחילים עם הפונקציה main ומשם ממשיכים

ככה:

public static void main(String [ ] args)
{
// TODO: put here the main code of the application
}
 

YIM222

New member
Web Services לא עובדים עם Main . לפחות לא מהדוגמאות שראיתי

 

הפרבולה

New member
אני מניח שיש נקודת התחלה כלשהיא בתוכנה של Web Services

אז צריך להתחיל משם.
 

YIM222

New member
כן, בררתי את העניין

אני אולי לא בקי במונחים בהבנה העמוקה של כל מה שקשור בזה, אבל ב RestWS זה עובד בצורה ששום דבר לא נשמר בserver רק הכל עובר לצד הClient לכן, צריך לעשות איזה מקום בclients שמקבל חזרה את האובייקט ושומר אותו במצב ושולח אותו.

זה כנראה הסיבה שראיתי בדוגמאות שהן שומרות את האובייקט שחוזר בתוך hashMap ששומר את מצב האובייקט. כמו שמפורט כאן...


https://stackoverflow.com/questions...ss-how-do-you-manage-sessions/3105337#3105337


תודה על העזרה.
 

selalerer

New member
לא ברור בכלל למה אתה קורא web service.

זאת כנראה הנקודה שממנה אתה צריך להתחיל.
מה אתה רוצה לבנות?
מה זה יעשה?
איך זה יתפקד?

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

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

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

YIM222

New member
RestFul web service בשילוב עם JAVA

עשיתי עם זה כבר אפליקציה וזה הטכנולוגיה המצויה היום לעשות אפליקציות web עם Java .

אני מנסה לקחת אובייקט , שמבצע מס' פעולות על רשימה , וליישם את זה באפליקצייה.

מה שאני עושה בקובץ TestGoralRound אני רוצה ליישם באפליקציית web .

ויש לי בעיה כי אני לא יודע איפה ליצור את האובייקט .

https://drive.google.com/drive/u/1/folders/0BzCneWXCUTk6SGxNZUU4OHdNTjg
 
למעלה