אני לא עובד בצורה סטנדרטית

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

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

רוב האנשים מגיעים לעבודה, עובדים עובדים עובדים, לוקחים איזו הפסקה למתוח רגליים/לסיגרייה/לרענן את כוס הקפה, לוקחים חצי שעה עד שעה לצהריים ואז עובדים עובדים עובדים, עם אולי עוד הפסקה קצרה בדרך, עד שהם עוזבים את המשרד ויוצאים הביתה. אני לא עובד ככה. אולי זה משהו פנימי, אולי זה סיבולת שסיגלתי לעצמי אבל אני כמעט ולא לוקח הפסקות. אני הולך לשירותים, אני לוקח תנומה אחת בשביל השינה הפוליפאזית בזמן העבודה (15 דקות, לא יותר), אני מותח את הרגליים לדקה או שתיים מדי פעם – בדרך כלל תוך כדי שאני פותח דיון על איזה נושא טכני כזה או אחר, ולוקח כ-15-20 לארוחת צהריים – בערך כמה זמן שאני צריך בשביל לסיים קערה של אורז. כל שאר הזמן אני עובד. וכשאני אומר כל שאר הזמן אז אני מתכוון לזה שיום העבודה הרגיל שלי הוא מינימום תשע ויכול להגיע עד 11 או 12 שעות. וכולל את הפעמים שאני צריך מנוחה מנטלית אז אני עוצר לקרוא פריט חדשות או שניים, RescueTime טוען שאני רוב הזמן ב-70% ל-80% יעיל.

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

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

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

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

תודה על ההקשבה,

ערן ארבל, מתכנת (Unity C# Prestige Class) דרגה 14


Posted in Gaming, Life, Me, Practice, Programming, Role-Playing, Thinking Out Loud, Work by with comments disabled.

גם למתכנתים יש רגשות

אזהרה: התיאורים ברשומה הוגברו לטובת הדרמה. נא לא לקחת בצורה מילולית.

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

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

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

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

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


Posted in Life, Programming, Work by with comments disabled.

Selling Overhead

Is what this Gamasutra article called the recent trend in game development to sell “the things that usually end up on the game studio’s cutting room floor”. It’s talking about things like Early Access, selling the game while it’s being developed, and mostly about selling the “Prologue” to Metal Gear Solid V and selling access to Double Fine’s Amnesia Fortnight.

First of all, I don’t think it’s really surprising in this age where Publishers are mostly going the way of the dinosaurs and more developers retaking control of their creations and trying to hit the audience directly, saving money while still trying to make hiqh-quality (i.e. expensive) titles. The money has to come from somewhere.

The writer stresses the Double Fine and Metal Gear Solid V angle a lot, Double Fine selling access to their prototypes (things we usually couldn’t, and probably shouldn’t see) and Metal Gear Solid being split into (at least) two parts with the first one serving as “prologue” whose content might or might not later also appear in the full game, but I would like to point out two counter examples and say that, once again, when satisfaction is concerned, it’s all about expectations.

painting-analogy

The current customer expects that when she pays 60$ for a new game it will contain at least 10-20 hours of meaningful gameplay. Whether this is reasonable considering what we pay for movies, music, etc… is a different discussion – this is what we currently expect. In the days of the first StarCraft it was reasonable to sell a main game for 60$ and then an expansion with more missions and story for 30$. We then evolved the model of selling the main game for 60$ and tiny bundles of story/gameplay/extras for 5-15$ and lately we’ve also added alphafunding. Some of these models seem weird but, again, it’s all about expectations. And also honesty and transparency. (Here come the two examples).

  1. Decent Early Access Games/Developers – Look at Mojang, Vlambeer and all the others that decided to go the alphafunding/early access route but did it candidly. Mojang sold Minecraft from the very early (and sometimes broken versions) but they were honest about it. They said the game is in development, it might break, and you’re actually paying for the game’s development as it is being developed. The customers were promised that, they were promised that the game will be updated and improved and they won’t have to pay more despite the initial entry fee always increasing. And fucking hell, that model works for them. Vlambeer went with Steam Early Access for Nuclear Throne. They were upfront in saying that the game is in development, it will be cheaper after it’s done and there will be no sales or bundles until release. They said that this is only for those who want to support the developers during development. And they live-stream development and upload a new build every week. Which is awesome. They promised specific things and they deliver on what the customers expect from that.
  2. Stoic went a bit of a different route with The Banner Saga. They started from a Kickstarter campaign, raised funds and used those funds to start development. Roughly a year later, they released Factions, the Free-To-Play competitive version of the game featuring their beautiful art but mostly consisting of just the combat aspect of the game. They did that because they saw that development will take longer than previously expected and they wanted to put out something that people can play. But, mostly, they did that so they could get more help (than just backers) with fine tuning the combat aspect (the main game loop in The Banner Saga) and bring it to a mirror polish, thus making the final game better for everyone. But, they released it free to play. Meaning, you could play the “no-campaign” version of the game for free and if you wanted to, you could sink some money into it to fund development of the full game. They told gamers what to expect and they delivered on those promises, honestly and ethically. Then, another year later, you could buy the campaign-full, complete version of the game for a very competitive price of 25$.

Conclusion: I don’t think there is a right or wrong way to develop or sell your game. The only wrong thing is no fulfilling your customer’s expectation. Yes, sometimes those expectations are not up to you and you can roll with it or sit in the corner and cry. But, if you notice it, the only times gamers rise in uproar about how a game is sold/played/whatever is when it doesn’t fulfill expectations. I don’t know exactly how the Metal Gear Solid V thing is going to work but if Ground Zeros is selling for 30$ and The Phantom Pain will sell for 60$ and Ground Zeros won’t deliver at least half the satisfaction of The Phantom Pain and/or The Phantom Pain will actually contain some, half and especially most or all of the gameplay of Ground Zeros, you can definitely expect an uproar.

 


Posted in Gaming, IT, Practice, Programming, Thinking Out Loud by with comments disabled.

My Coding Conventions

When I run my own company or lead a brand new team, everyone will follow coding conventions. My Coding Conventions!

Here they are, to the best of my current knowledge and by probable order of importance.

  1. Every method will be documented! That includes purpose, parameters, proper usage, etc…
  2. Every property will be documented! Yes. Exactly the same.
  3. Every class will be documented! Especially about recommended uses and where it is suppose to go.
  4. Every public field which is not incredibly obvious will also be documented!
  5. Every conditional block will be an actual block, with parentheses. Even if it’s one line!
  6. Starting parentheses always get a new line! Exception: if it’s a conditional or property and it fits in one line.
  7. Every method shall appear in full before its first use. This makes the code more readable! Do It!
  8. Design for any part of the program should be ironed out ahead of time and with as much detail as reasonableness allows.
  9. To be continued… (Suggestion welcome)

Posted in IT, Practice, Programming, Thinking Out Loud by with 6 comments.

Fun With LINQ Expressions, Lambda Functions and Ternary Operators

At work, we work with Unity. Unity comes with its own IDE, MonoDevelop.

MonoDevelop sucks. I hate the way it looks. I hate the way it folds code. I hate the way it unfolds everything every time you save. I like the way it finds files and classes but that’s about the only thing I like about it. And I have to use it for debugging.

However, I don’t have to use it for actual coding. I use Visual Studio 2013 because we already have it and it’s a pretty good tool. It does lack some advanced capabilities and so I installed the ReSharper plugin which adds a lot of power to VS and makes it even much more useful.

What I like about ReSharper is that it suggested a lot of improvements to my code and actually taught me more about LINQ expssions and Lamda functions. I already knew and much liked Ternary operators. I think that all of them make code more lean and prettier and easier to read as it makes it more legible in actual English.

The C Trenary operator is “?”. You use it like this: “(condition) ? (variable if true) : (variable if false)”. Much easier than “if (condition) then return variable1 else return variable2”.

Lambda functions are a kind of anonymous function that is much easier and shorter to write. So, instead of writing “delegate(KeyValuePair<long, string> pair) { do something with pair }” and shoving all that into a callback, you just write “pair => do something with pair”. It doesn’t look like a big improvement but it is in the long run.

LINQ expssions are a sort of C# extensions that provide more functionality to a lot of data structures in a way that make them very generic and very easy to understand.

Which brings me to my example of how I used all of them together to get a very powerful operation done in what is, technically, a single line of code that is also easy to read. Code has been obfuscated to protect the innocent.

List<AClass> AClassList = AListOfStringListPairs.Select(stringListPair => stringListPair.Key != specificKey ? stringListPair.Value.First() : null).ToList();

In English, notice the translation isn’t difficult, I take a List of pairs, where each pair is a string and a list of classes, and filter out the heads of every list whose string fulfill my required predicate and put those into a new list which I can later use.

With out LINQ or Lambda, at least, this code would have been 3-4 times longer if not more. So I like this a lot. There is only one problem: Because of an unavoidable constraint of our development method, we can’t use some specific collection method which LINQ uses almost all of the time. So I can’t use most LINQ expssions. Which sucks.

But not as much as MonoDevelop.


Posted in Life, Practice, Programming, Thinking Out Loud, Work by with 2 comments.

Our Game is the First of the Unity Blog 2014 Global Game Jam Selection

See the post here.

Interesting Tidbits:

  1. There were 2292 Unity games in the 2014 Global Game Jam out of 4291 total (That’s more than 50%).
  2. The Unity blog decided to feature 4 games they found to be interesting (That’s less than 0.2%, of only the Unity games).
  3. Our game was number one on that list.
  4. Dropbox, where I hosted the web version of the game, is probably getting Slashdotted right now.
  5. If isn’t, it should be. I’ll go help with that. By posting to Slashdot.
  6. This game took ten people about 30 hours to make. From scratch. Including a few hours of sleep.
  7. At one point, seven of them occupied a table meant for one.
  8. This was me and Maayan’s first GGJ.
  9. I knew one and a half of the other people on the team. Maayan knew one.
  10. I would like to think that we had two major factors playing in our favour for recognition:
  1. We had a good strong team, covering well all the majour requirements, and each one contributed to the vision.
  2. We hit on a very good combination of interesting, challenging, good looking, well sounding, cute, competitive and overall fun gameplay.
  • This was and is incredibly awesome.

  • Posted in Gaming, Less Interesting News, Maayan, Programming by with comments disabled.

    The Results Are In!

    And you can see the awesome game we made at the Global Game Jam on my Projects page.

    The Global Game Jam Game page is right here.

    And thanks to everyone for a great time and great work.

    And our Music and Sound Designer is Alon Kaplan, starring as Sir Not-Appearing-in-this-Picture.


    Posted in Gaming, IT, Life, Maayan, Programming by with comments disabled.

    My Kind of Jam

    Global Game Jam.

    Don’t try to reach me until Saturday night.


    Posted in Gaming, IT, Life, Programming by with comments disabled.

    Not Everything Can Have a Title

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

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

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

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


    Posted in Gaming, Life, Programming, Work by with comments disabled.

    My First Day at Work

    Was yesterday. Get to know the people more and they’re all very cool people. I didn’t get a lot done but that’s how first days usually work. I still had a lot of fun and I’m still excited to go back. I already think my main issue with a new working environment – people who are fun to work with, accommodating and just all around pleasant – is covered.

    And today I’m already suppose to start contributing to the actual SCRUM goals. It’ll probably take me longer than expected for the task but it’s still taking something off their hands and clearing some schedule.

    I’ve just marked the categories for this post and it obviously goes under Life, Work but I’m still not over the fact that probably most of these posts will also go under Programming, Games.


    Posted in Life, Programming, Work by with comments disabled.