tag:blogger.com,1999:blog-10492569119506318702024-03-14T10:46:28.318-07:00Young WritingYounghttp://www.blogger.com/profile/10626572289205085284noreply@blogger.comBlogger10125tag:blogger.com,1999:blog-1049256911950631870.post-67692771623394290682010-03-23T23:16:00.000-07:002010-03-23T23:18:22.020-07:00I have a new blog.<span class="Apple-style-span" style="font-family:verdana;">Please find me at </span><a href="http://www.youngwriting.net/blog/"><span class="Apple-style-span" style="font-family:verdana;">http://www.youngwriting.net/blog</span></a><span class="Apple-style-span" style="font-family:verdana;"> !</span><div><span class="Apple-style-span" style="font-family:verdana;"><a href="http://www.youngwriting.net/blog/"></a><br /></span><div><br /></div></div>Younghttp://www.blogger.com/profile/10626572289205085284noreply@blogger.com0tag:blogger.com,1999:blog-1049256911950631870.post-1631584910290323092009-11-20T00:31:00.000-08:002009-12-20T17:59:41.237-08:00What you should know Whenever you see STL containers or string.<span style="font-size:100%;"> We all know that stl is great. It has fantastic daily-used data structures, algorithms and string. We've learned that we should use it instead of array or char*. Yeah, it enables us to avoid reinventing the wheel! and save lots of lots of time.<br /><br />So what's the problem?<br /><br /></span><div style="text-align: center;"><span style="font-weight: bold; color: rgb(255, 255, 0);font-size:130%;" >It's allocating memory.</span><br /></div><span style="font-weight: bold;font-size:130%;" ><br /><span style="font-size:100%;"> </span></span><span style="font-size:100%;">It does NOT mean stl sucks because it needs heap memory. </span>There is no problem as long as we know what we're doing. It's allocating memory when you use them and this could be an issue when you find your program is not fast enough and the reason for that is memory fragmentation, you know enough memory space but fragmented as hell.<br /><br />For example, [BAD one, never do this.]<br /><br />void Render()<br />{<br /> string fps = string("FPS : ") + GetFPS();<br /> DrawText(fps);<br />}<br /><br />Now, I'm sure you see the problem. It will create countless small temporary memories and definitely affect overall memory usage. I know some of you use your own "new/delete" or "malloc/free" but that doesn't make big difference since it's going to make your memory pool fragmented and you need time for de-fragmenting to find enough space.<br /><br />So what should we do?<br /><br />Well, here are my own tips.<br /><br /><span style="color: rgb(255, 255, 0);">1. Try to reuse stl objects as much as possible.</span><br />- Put them into a class as member variables.<br />- "static" can be one solution if you are free from threads.<br />- Always "reserve" their space in advance to avoid unnecessary allocations.<br /><br /><span style="color: rgb(255, 255, 0);">2. For temporary local objects, try to use "stack" objects, not heap ones.</span><br />- Use array if you know the maximum size.<br />- Try boost::array if you really don't like to see brackets.<br />- stl::string is too tempting but for temporary strings, char[] can be much more efficient.<br /><br />That's it.<br /><br />I think this is my last post for 2009. I was reading my old postings last night and I really like them. lol. I sometimes learn many things from what I've written. In 2010 (oh wow! cannot believe I will live in 2010!), hope I will be a slightly better programmer than now.<br /><br />Merry Christmas and Happy New Year!Younghttp://www.blogger.com/profile/10626572289205085284noreply@blogger.com1tag:blogger.com,1999:blog-1049256911950631870.post-85080735406427018922009-10-25T19:48:00.000-07:002009-10-25T21:41:57.908-07:00Updates are tempting, but are they safe? (about KB971090)<span style="font-family:verdana;">Last week, I had a task for fixing a bug related to a library from outside my company. </span><br /><br /><span style="font-family:verdana;">First of all, I found that we were using its functions in a wrong way so I made some changes to correct it. Of course, the way I fixed it is from a document of the library. It resolved the issue and worked well in my machine. But, it turned out that a few machines had another problem with my changes. </span><br /><br /><span style="font-family:verdana;">Luckily, we have source code of the library so I was able to look into it to find my mistake. However, I realized that they made a wrong assumption about some values and it caused the problem. Since I had the source code, I fixed the wrong assumption, compiled it and produced one dll file for our project. It was working just fine on my test machine as well as my own pc. Yeap, I have two machines and three monitors at work. :) </span><br /><br /><span style="font-family:verdana;">Anyway, the happy moment didn't last long though. Our build machine reported that it failed to test its final build with my newly produced dll. Our game couldn't even start with it but just showed a very simple system error dialog with a strange hexadecimal address.</span><br /><br /><span style="font-family:verdana;">From my programming experience, I know that this kind of problems could take forever if I just try to solve it by myself. I quickly noticed that I needed someone. Someone knows our project very well and understands my task. Yeah, I asked my lead programmer to help me. </span><br /><br /><span style="font-family:verdana;">We agreed that the changes I made is the proper way to do my task. The problem was why the dll working in my pc didn't work in our build machine. We found that the dll didn't work on his machine either. He was for sure that my machine had something different and it produced the dll having incorrect dependency for the other machines. So, what is it?</span><br /><br /><span style="font-family:verdana;">It took almost four hours us to find the reason. It was not because my machine is using 64 bits Windows and the build machine is using 32 bits one. It was not because of the project setting for the library. It was not even because I used their static version of project to produce dll. (Another good example why naming is so important. They named the project "static something" but it actually created a dll, "dynamic" linked library.) </span><br /><br /><span style="font-family:verdana;">When my lead and I almost gave up, I found that my Visual Studio 2005 had all the latest updates and the one in build machine didn't. It's just my habit that I runs "Windows Updates" or "Microsoft Updates" every day when I have a short break. This habit had never made any problems until this one happened. </span><br /><br /><span style="font-family:verdana;">It turned out that one of the security updates for VS2005, </span><span style="font-weight: bold; color: rgb(255, 255, 0);font-family:verdana;" >KB971090</span><span style="font-family:verdana;">, made the problem. </span><span style="font-family:verdana;">From google, I found that dlls compiled with the security update (KB971090) are not compatible with exe files compiled without it, if the machine which runs the exe doesn't have the update. To solve this problem, I simply uninstalled it instead of following </span><a style="font-family: verdana;" href="http://tedwvc.wordpress.com/2009/08/10/avoiding-problems-with-vc2005-sp1-security-update-kb971090/">the long solution</a><span style="font-family:verdana;"> which you might want to take if you have the same problem. I should mention that you need to check </span><span style="color: rgb(255, 255, 0);font-family:verdana;" >"View installed updates"</span><span style="font-family:verdana;"> in control panel to uninstall it. Yeah, it sucks.</span><br /><br /><span style="font-family:verdana;">Okay, here is what I've learned.</span><br /><br /><span style="color: rgb(255, 255, 0);font-family:verdana;" >Keep the exactly same build environment with the other programmers including a build machine. Don't blindly get all updates without checking them. </span>Younghttp://www.blogger.com/profile/10626572289205085284noreply@blogger.com0tag:blogger.com,1999:blog-1049256911950631870.post-69692488951689725152009-10-11T16:27:00.000-07:002009-10-12T01:36:14.240-07:00What are you assuming?<span style="font-family:verdana;">Last week, I was reading src code and found that it used zero as an initial value for a handle.</span><br /><br /><span style="font-family:verdana;">MY_HANDLE handle = 0;</span><br /><br /><span style="font-family:verdana;">But, it also used INVALID_HANDLE for the same purporse.</span><br /><pre style="font-family: verdana;">class A<br />{<br />public:<br /> A() : m_handle(INVALID_HANDLE) {}<br /><br />private:<br /> MY_HANDLE m_handle;<br />};<br /></pre><span style="font-family:verdana;">Well, I thought that INVALID_HANDLE was zero. However, it turned out that it's not. INVALID_HANDLE was defined with some weird value. Anyway, the exact value is not important. The importatnt thing is how I know what should be an initial value for MY_HANDLE?</span><br /><br /><span style="font-family:verdana;">Suprisingly, I'm told that some code use INVALID_HANDLE as a VALID value and there is a legitimate situation that a handle of an object is INVALID_HANDLE. Wow. Okay, so the real invalid value which is supposed to be used as an initial value is zero, not INVALID_HANDLE.</span><br /><br /><span style="font-family:verdana;">Yeah, I know this kind of things always happens in real world as we always see this comment;"Fix me!". But, before we fix this, I'd like to ask this question.</span><br /><br /><span style="color: rgb(255, 255, 0);font-family:verdana;" >How can we communicate with other programmers who will work with the code we write in future?</span><span style="font-family:verdana;"> More specifically</span><span style="color: rgb(255, 255, 0);font-family:verdana;" >, how can we show our assumption in the code?</span><span style="font-family:verdana;"> Or, </span><span style="color: rgb(255, 255, 0);font-family:verdana;" >do we even need to do it? why?</span><br /><br /><span style="font-family:verdana;">Why?</span><br /><br /><span style="color: rgb(255, 255, 0);font-family:verdana;" >Because we are all different humans. </span><span style="font-family:verdana;">All of us have an unique appearance, personality and assumption. It's perfectly fine with having your own assumption like your own habits. But, there is no guarantee that your assumption makes sense to others. That's why we should say it very loudly whenever we assume something.</span><br /><br /><span style="font-family:verdana;">How?</span><br /><br /><span style="font-family:verdana;">First of all, </span><span style="color: rgb(255, 255, 0);font-family:verdana;" >name it correctly</span><span style="font-family:verdana;">. If it is a function returning a size of array, name it "GetSizeOfArray()". If it's a value containing your grade, name it "myGrade". If it's a constant value for an invalid handle, name it "INVALID_HANDLE" and </span><span style="color: rgb(255, 255, 0);font-family:verdana;" >use it as it is called</span><span style="font-family:verdana;">. You can follow your "common" sense but don't hesitate to spend enough time naming something.</span><br /><br /><span style="font-family:verdana;">Second, use assertion whenever you can. It can correct your assumption quickly if it is wrong, it is crystal clear for other programmers and you can turn it off easily so that it doesn't cost anything in your retail build. Yeah, it's cheap (almost free) but powerful enough to save your project.</span><br /><br /><span style="font-family:verdana;">One thing I should mention about assersion is that</span><span style="color: rgb(255, 255, 0);font-family:verdana;" > you should not mix assertions with error handling</span><span style="font-family:verdana;">. If there is an error and you need to handle it, just handle it without writing asserion.</span><br /><span style="font-family:verdana;">See the below code.</span><br /><pre style="font-family: verdana;">assert(pRect != NULL);<br />if(pRect != NULL)<br /> pRect->Draw();<br /></pre><span style="font-family:verdana;">The code says two things at the same time and they conflict with each other. It says "<span class="blsp-spelling-error" id="SPELLING_ERROR_0">pRect</span> must not be NULL." and "Call Draw() if <span class="blsp-spelling-error" id="SPELLING_ERROR_1">pRect</span> is not NULL". The latter one implicitly assumes that <span class="blsp-spelling-error" id="SPELLING_ERROR_2">pRect</span> might be NULL but the assertion says that <span class="blsp-spelling-error" id="SPELLING_ERROR_3">pRect</span> should never be NULL.</span><br /><br /><span style="font-family:verdana;">As Scott Meyers said that a female is either pregnant or she's not (in Effective C++), you should choose only one of them. Is it a part of program flow? or should it never happen? It's not possible to be partially pregnant.</span>Younghttp://www.blogger.com/profile/10626572289205085284noreply@blogger.com0tag:blogger.com,1999:blog-1049256911950631870.post-64254624488519438992009-09-23T22:29:00.000-07:002009-10-03T15:16:26.862-07:00Why small mistakes are disastrous?I made a stupid mistake. very stupid one!<br /><pre>if(!IsOK())<br /> OkDoIt();<br />else<br /> NoWait();<br /></pre>Do you see the problem?<br />Yes, only one character ruined the whole process.<br /><br />It should be like this:<br /><pre>if(IsOK()) <span style="color: rgb(51, 204, 0);">// if(</span><span style="color: rgb(51, 204, 0);font-size:130%;" ><span style="font-weight: bold;">!</span></span><span style="color: rgb(51, 204, 0);">IsOK</span><span style="color: rgb(51, 204, 0);">())</span><br /> OkDoIt();<br />else<br /> NoWait();<br /></pre>If the function containing this problem is rarely called, it's a time bomb inside a briefcase. Even after you recognize something is wrong, it's very hard to find this kind of mistakes because it's such a small one like off-by-one error. <span style="color: rgb(255, 255, 0);">almost invisible</span>. That's why small mistakes can be much more disastrous than big ones which are obviously more visible.<br /><br />Since code like the above is usually written very quickly and unconsciously without thinking, if you don't have right habits, you will make a mistake. It brings me the idea I loved but, apparently, forgot.<br /><span style="font-weight: bold; color: rgb(255, 255, 0);"></span><blockquote><span style="font-weight: bold; color: rgb(255, 255, 0);"> Good programmers have good programming habits.</span></blockquote>I will never use ! in if statement. ever.<br /><br />One more thing to remember.<br /><blockquote><span style="font-weight: bold; color: rgb(255, 255, 0);">Test every changes you made.Every single line.</span><br /></blockquote> Of course, I tested my changes before I checked in it. However, there were many changes and I just quickly checked a normal flow without checking all the changes I made. I was focusing on bigger and more complicated changes. I should have kept my changes small and checked in them more frequently.<br /><br />Anyway, it's absolutely my fault and I will never forget it.<br /><span style="color: rgb(255, 255, 0);"><blockquote> <span style="font-weight: bold;">I really don't think anything I do is a mistake. It could be if I didn't learn from it.</span><br /><div style="text-align: right;"><span style="font-weight: bold;">- Fiona Apple</span></div></blockquote></span><span style="color: rgb(255, 255, 0);"></span>Younghttp://www.blogger.com/profile/10626572289205085284noreply@blogger.com1tag:blogger.com,1999:blog-1049256911950631870.post-35321654557565486882009-09-03T20:45:00.000-07:002009-09-13T23:20:39.842-07:00Did you know you can change wingdi.h ?I was having a weird problem with compiling <span class="blsp-spelling-error" id="SPELLING_ERROR_0">src</span> files for a few days.<br /><br />I couldn't remember when it started but the compiler kept saying it could not find "ERROR" identifier. "ERROR" is supposed to be in <span class="blsp-spelling-error" id="SPELLING_ERROR_1">wingdi</span>.h like this.<br /><br />#define ERROR 0<br /><br />So I checked my <span class="blsp-spelling-error" id="SPELLING_ERROR_2">wingdi</span>.h file and it was like it.<br /><br />#define LOG 0<br /><br />It didn't take too much time to realize that <span class="blsp-spelling-error" id="SPELLING_ERROR_3">wingdi</span>.h was modified recently and all the other header files in the same folder had not been changed at all ever since the visual studio was installed.<br /><br />I thought it was because I installed some other <span class="blsp-spelling-error" id="SPELLING_ERROR_4">SDK</span> or programs and I tried to figure out what made this situation. I had never imagined that I changed it. But, yes, I DID IT. OOPS!<br /><br />I did "replace all" ERROR with LOG for my own project and <span class="blsp-spelling-error" id="SPELLING_ERROR_5">wingdi</span>.h was open at that moment. Visual Studio <span class="blsp-spelling-corrected" id="SPELLING_ERROR_6">modified</span> it and did not say <span class="blsp-spelling-error" id="SPELLING_ERROR_7">anything</span> when I saved and compiled it. There was no single error because I did not use ERROR in that project.<br /><br />First of all, <span style="color: rgb(255, 204, 0);"><span class="blsp-spelling-error" id="SPELLING_ERROR_8">wingdi</span>.h is NOT read-only</span> so if you <span class="blsp-spelling-corrected" id="SPELLING_ERROR_9">accidentally</span> modify and save it, you won't see any <span class="blsp-spelling-error" id="SPELLING_ERROR_10">warnning</span> dialogs. Second, <span style="color: rgb(255, 204, 0);">Visual Studio applies "replace all" for all opened files</span> which are not in your solution even though you choose "Entire solution". Like the below picture.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5AMcuXXDLPUQMw56NiYR-E47EX5-QhjsovqQnpZ8houEVS7rbYAmNUfoozmpFFjOdjQLyM3gcHGSfY0xPD4TNK6KrQ39Bpydt29hu1FSRrLFDR_QeMNSnzZNne7KXx6HUEWNDEuF61BU/s1600-h/erro_log.bmp"><img style="cursor: pointer; width: 400px; height: 237px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5AMcuXXDLPUQMw56NiYR-E47EX5-QhjsovqQnpZ8houEVS7rbYAmNUfoozmpFFjOdjQLyM3gcHGSfY0xPD4TNK6KrQ39Bpydt29hu1FSRrLFDR_QeMNSnzZNne7KXx6HUEWNDEuF61BU/s400/erro_log.bmp" alt="" id="BLOGGER_PHOTO_ID_5377461036418688322" border="0" /></a></div><br />So be careful otherwise you could waste hours even days like someone. =+=Younghttp://www.blogger.com/profile/10626572289205085284noreply@blogger.com0tag:blogger.com,1999:blog-1049256911950631870.post-9921199664121262962009-08-24T23:20:00.000-07:002009-09-13T23:20:13.161-07:00Games for Windows Live.Okay, I'm not going to tell you how bad it is since there are many articles about it. If you have nerver heard about its notorious features, check it out.<br /><br /><a href="http://www.bit-tech.net/columns/2009/01/31/this-was-meant-to-be-a-fallout-3-dlc-review/1">This was meant to be a Fallout 3 DLC review.</a> or<br /><a href="http://www.rockpapershotgun.com/2009/01/27/fallout-3-new-content-adventures-in-gfwl/">Fallout 3 New Content, Adventures In GFWL</a><br /><br />From those articles, I can easily imagine that user expereicens from GFWL are horrilbe, shameful and pity.<br /><br />Actually, as a developer, I was okay with GFWL until I needed to deal with bugs from its newly updated 3.0 version. It's okay since debugging is just one of daily tasks we are doing.<br /><br />However, I'd like to remember the lesson I learned from this experience.<br /><blockquote style="color: rgb(255, 255, 51);"><span style="font-size:100%;">Don't use an outside technology if its provider just distributes a new version and forces users to use it wihtout telling a single word to partner developers. </span></blockquote>That's it.Younghttp://www.blogger.com/profile/10626572289205085284noreply@blogger.com0tag:blogger.com,1999:blog-1049256911950631870.post-2795641063747526412009-08-16T02:29:00.000-07:002009-10-12T12:45:50.752-07:00Network Programming with IOCP and Thread Pool - Intro<span style="font-family:trebuchet ms;">These days, I'm playing with network programming with IOCP and Thread Pool just for pure fun. :) After several days of reading MSDN, articles and writing experimental codes, I've realized that there are pretty big changes I need to catch up.</span><br /><br /><span style="font-family:trebuchet ms;"> If you still use IOCP with GetQueuedCompletionStatus() and your custom threads (like me before), you might want to follow this series of postings I will update. I will provide sample code to clarify the right way to use them.<br /><br />Also, I will benchmark techniques to each other so that hopefully I can give you some guidelines about When we need to use Which technique, or, at least, help you to avoid making the same mistakes I would make while I write this series.</span><br /><br /><span style="font-family:trebuchet ms;"> First of all, let's see how many ways we can choose for using IOCP.</span><br /><br /><span style="font-family:trebuchet ms;"> If we use custom threads to get I/O completion notification,<br /><br /><span style="color: rgb(255, 204, 0);">1. CreateIoCompletionPort() and GetQueuedCompletionStatus()</span></span><br /><span style="color: rgb(255, 204, 0);font-family:trebuchet ms;" >- Windows 2000 (Pro, Server) or later.<br /><br />2. CreateIoCompletionPort() and GetQueuedCompletionStatusEx()<br />- Windows Vista and Server 2008 or later.</span><br /><br /><br /><span style="font-family:trebuchet ms;">If we use Windows Thread Pool to get I/O completion notification,<br /><br /><span style="color: rgb(255, 204, 0);">3. BindIoCompletionCallback()</span></span><br /><span style="color: rgb(255, 204, 0);font-family:trebuchet ms;" > - Windows 2000 (Pro, Server) or later.<br /><br />4. CreateThreadpoolIo(), StartThreadpoolIo() and etc</span><br /><span style="color: rgb(255, 204, 0);font-family:trebuchet ms;" >- Windows Vista and Server 2008 or later.</span><br /><br /><span style="font-family:trebuchet ms;"> There also some APIs related to Thread Pool like QueueUserWorkItem(). Unfortunately but in a good way, Thread Pool system has been completely re-written for Windows Vista and we need to use those new and richer APIs to maximize our server performance.<br /><br />If it's not confusing enough, I can tell you that there are also special socket functions which are Microsoft-specific extensions to the Windows Sockets specification. For example, ConnectEx(), AcceptEx() and etc. These functions are to fully utilize IOCP power for all IO operations including receive (read) and send (write).<br /><br />Yes, it's gonna be a long journey but it must be fun! So excited! LOL<br /><br /><br /></span>Younghttp://www.blogger.com/profile/10626572289205085284noreply@blogger.com5tag:blogger.com,1999:blog-1049256911950631870.post-49897852632902771852009-06-11T12:06:00.000-07:002009-09-03T21:24:16.648-07:00Getting into the Game Industry.<span style="font-family:verdana;"><br />There are many articles saying how hard getting into the video game industry is for recent grads. I thought it was not my case since I already worked for over 4 years in Korea as a game programmer.<br /><br />I know most of Korean game companies are "nobody" here in America but I was lucky to have work experience at a company which is <span class="blsp-spelling-corrected" id="SPELLING_ERROR_0">globally</span> famous for its <span class="blsp-spelling-error" id="SPELLING_ERROR_1">microtransaction</span> model. Also, I was confident of my programming skills by seeing the other students in my graduate school. All those things made me think like "It shouldn't be a problem to get a job from one of my favorite game companies in America even before I graduate".</span><br /><br /><span style="font-family:verdana;"> Well, it turned out that I was not an exception. It took me over one year to get an offer from one of the game companies I want to work for. I applied for over 40</span><span style="font-weight: bold;font-family:verdana;" > </span><span style="font-family:verdana;">programmer postions, had about 12 phone interviews, took 8 programming tests and had 1 <span class="blsp-spelling-error" id="SPELLING_ERROR_2">onsite</span> interview. Finally, I got 2 full time offers and accepted one from Canada, today morning. I'm not going to write all the details about how I got the offers but I'd like to tell you a few things which might be helpful.</span><br /><br /><span style="font-family:verdana;"><br /></span><div style="text-align: left;"><span style="color: rgb(255, 204, 0);font-family:verdana;" >1. Have a Long Term Plan</span><br /><br /><span style="font-family:verdana;"> You should have a long term plan. a very long one. It is mainly because of a global recession in these days. I just saw the news that Crystal Dynamics (one of companies I applied to) is </span><a style="font-family: verdana;" href="http://www.gamasutra.com/php-bin/news_index.php?story=23989">reducing 25 more staffers</a><span style="font-family:verdana;">. In a bad economy, this kind of news is not <span class="blsp-spelling-corrected" id="SPELLING_ERROR_3">surprising</span> at all. I was very lucky since I was in a school while I was looking for a job. Getting a job would take much (very much) longer time than your <span class="blsp-spelling-corrected" id="SPELLING_ERROR_4">estimation</span>.</span><br /></div><span style="font-family:verdana;"><br />Find a part time job or volunteer positions. If you are an <span class="blsp-spelling-corrected" id="SPELLING_ERROR_5">international</span> student like me, you should do work to keep your OPT status. Do some independent projects by yourself or with your friends. Some of my friends are planning to start a <span class="blsp-spelling-error" id="SPELLING_ERROR_7">startup</span> for developing IPhone games. You can also consider about attending an education program. The bottom line is that it's important to have a clear answer to the question : "So, what have you been up to after you graduate?"</span><br /><br /><span style="font-family:verdana;"><span style="color: rgb(255, 204, 0);">2. Keep Practicing & Studying</span><br /><br />Most questions</span><span style="font-family:verdana;"> </span><span style="font-family:verdana;">asked during </span><span style="font-family:verdana;">a phone or an <span class="blsp-spelling-error" id="SPELLING_ERROR_8">onsite</span> interview are NOT random. You can easily google them, prepare <span class="blsp-spelling-corrected" id="SPELLING_ERROR_9">answers</span> and <span class="blsp-spelling-corrected" id="SPELLING_ERROR_10">practice</span> by yourself. I found <a href="http://gamecareerguide.com/features/739/game_job_interview_questions_and_.php">one great article</a> in <span class="blsp-spelling-error" id="SPELLING_ERROR_11">Gamasutra</span> and it was very helpful for the <span class="blsp-spelling-error" id="SPELLING_ERROR_12">onsite</span> interview I had. If you were a programmer, you also need to check <a href="http://www.joelonsoftware.com/articles/fog0000000073.html">this article</a> from Joel. Surprisingly, two interviewers actually asked the question </span><span style="font-family:verdana;">from the article</span><span style="font-family:verdana;">: "How many gas stations are in Los Angeles?". Prepare for it.<br /><br />Don't forget to study basic things of your field. For programmers, some <span class="blsp-spelling-corrected" id="SPELLING_ERROR_13">academic</span> <span class="blsp-spelling-corrected" id="SPELLING_ERROR_14">questions</span> (yes, </span><span style="font-family:verdana;">Computer Science) </span><span style="font-family:verdana;">are very popular even they are not <span class="blsp-spelling-corrected" id="SPELLING_ERROR_15">directly</span> related to how good your programming skills are. Math problems are also frequently asked if you are <span class="blsp-spelling-corrected" id="SPELLING_ERROR_16">applying</span> for a <span class="blsp-spelling-error" id="SPELLING_ERROR_17">gameplay</span> or graphics programmer. I had to solve two math problems on a white board in front of interviewers. <a href="http://www.amazon.com/Essential-Mathematics-Interactive-Applications-Second/dp/0123742978/ref=pd_lpo_k2_dp_k2a_1_txt?pf_rd_p=304485601&pf_rd_s=lpo-top-stripe-2&pf_rd_t=201&pf_rd_i=155860863X&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=11B3WNFCC3XWP0BT3158">This book</a> was very useful for me to study math for game programming.</span><br /><br /><span style="font-family:verdana;"><span style="color: rgb(255, 204, 0);">3. Never Stop Applying.</span><br /><br />You don't need to rush but you shouldn't stop applying. Make a list of companies you'd like to work for and keep updating it. Check <a href="http://www.gamasutra.com/jobs/">Gamasutra</a> and <a href="http://www.creativeheads.net/">CreativeHeads</a> everyday and ask your <span class="blsp-spelling-corrected" id="SPELLING_ERROR_18">friends</span> about open <span class="blsp-spelling-corrected" id="SPELLING_ERROR_19">positions</span> at their work place. That's how I found over 40 <span class="blsp-spelling-corrected" id="SPELLING_ERROR_20">positions</span>.<br /><br />Don't wait for a result of the interview you already had. Instead you <span class="blsp-spelling-corrected" id="SPELLING_ERROR_21">should</span> search more positions and apply for them. Don't stop until you actually sign on an offer letter. One of the companies told me that I passed all the tests & interviews and they were willing to hire me. But they just kept <span class="blsp-spelling-corrected" id="SPELLING_ERROR_22">delaying</span> giving me an official offer letter. Don't think you're hired before you really are.<br /><br /></span> <span style="font-family:verdana;">That's all. It was a long and hard time but all of <span class="blsp-spelling-corrected" id="SPELLING_ERROR_23">difficulties</span> I've faced improved me a lot. Don't give up. Never stop.<br /><br /></span>Younghttp://www.blogger.com/profile/10626572289205085284noreply@blogger.com0tag:blogger.com,1999:blog-1049256911950631870.post-17842524976018196552009-05-31T16:49:00.001-07:002009-06-11T23:53:55.764-07:00A call to action.<span style="font-family:verdana;"><br />There was one time when I was hooked by all kinds of Software Development Methodology books. I was looking for "answers" to escape my stressful daily life as a programmer in Korea. Ironically (and obviously), the answer I found and liked was</span><br /><div style="text-align: center; font-family: verdana;"><br /><a href="http://en.wikipedia.org/wiki/No_Silver_Bullet">"No silver bullet" - Fred Brooks</a><br /></div><br /><span style="font-family:verdana;"> Well, it's very easy to misread the line so please check the full article. By the way, the important thing was not the answer I found. I got it from the book </span><a style="font-family: verdana;" href="http://www.stevemcconnell.com/psd.htm">"Professional Software Development" - Steve McConnell</a><span style="font-family:verdana;"> and there was the other article whose title was</span><br /><br /><div style="text-align: center; font-family: verdana;"><a href="http://www.stevemcconnell.com/psd/11-programmerwriting.htm">"Programmer Writing"</a><br /></div><br /><span style="font-family:verdana;"> Simply, it blew my mind. I had <span class="blsp-spelling-corrected" id="SPELLING_ERROR_0">never</span> thought about that I was one of those who were supposed to write "answers" which I had been searching for. This drove me to start <a href="http://blog.naver.com/ryanii">my <span class="blsp-spelling-corrected" id="SPELLING_ERROR_2">Korean</span> blog</a>. It's not very often updated but it seems some of articles helped other programmers and myself as well.</span><br /><br /><span style="font-family:verdana;"> I've been thinking of starting my <span class="blsp-spelling-corrected" id="SPELLING_ERROR_3">English</span> blog since I came over here in the U.S. Finally, I have a bit long break time to do my personal stuff. This is my first post and I will try to fill this blog with articles "braced by labor and invention". Yes, I'm the programmer writing. Are you? :)<br /><br /></span>Younghttp://www.blogger.com/profile/10626572289205085284noreply@blogger.com0