{"id":257,"date":"2009-08-20T21:10:54","date_gmt":"2009-08-21T02:10:54","guid":{"rendered":"http:\/\/24.183.55.167:8101\/wordpress\/?p=257"},"modified":"2012-08-14T20:53:27","modified_gmt":"2012-08-15T01:53:27","slug":"interviewing-a-software-engineer-developer-programmer","status":"publish","type":"post","link":"https:\/\/icesquare.com\/wordpress\/interviewing-a-software-engineer-developer-programmer\/","title":{"rendered":"Interviewing a software engineer \/ developer \/ programmer"},"content":{"rendered":"<p>I am going to have a face-to-face interview with a candidate of a PHP programmer position this afternoon. I was told to prepare some technical questions for the interview.<\/p>\n<p>If a candidate earns an face-to-face interview opportunity, that means his resume should have a very good match to the position requirement. However, people can put anything on their resumes, there is no way to tell whether the information on the resume is true or not (and referencees guarantee will give you good feedback on the candidates). That&#8217;s why a face-to-face interview is really important.<\/p>\n<p>I will have around 30 minutes to 1 hour to interview a candidate, how can I get the most information from him to help myself making this decision?<\/p>\n<p>After googling on the web, I found tons of information about how to interviewing a programmer, but most of them are related to <strong>really technical<\/strong> questions, such as &#8220;How do you solve this math puzzle?&#8221;, or &#8220;What&#8217;s the meaning of double-dollar variable in PHP?&#8221; etc. I think these questions are not <strong>efficient and effective<\/strong> enough to judge the skill of the candidates. Personally, I don&#8217;t like these types of questions at all because I think it does not help to judge a realistic performance of a person. I prefer some more realistic questions.<\/p>\n<p>So, I end up designing a test by myself. It is nothing more than a simple html form (e.g., a form to update users&#8217; contact information). The candidate will be asked to implement the functions to update the records. I think this is pretty closed to what I do in my work, i.e., Create, View, Update and Delete record.<\/p>\n<p>Well, this question sounds pretty simple, and I think there are plenty of hidden traps. Here are what I expect in the codes:<\/p>\n<ul>\n<li>Core function, i.e., Updating the record &#8211; 40%<\/li>\n<li>Validating the inputs(e.g., don&#8217;t store a negative number into age column, make sure the ID exists etc) &#8211; 10%<\/li>\n<li>Performance (e.g., Update the record only if the records have been changed by the users.) &#8211; 10%<\/li>\n<li>Handling simultaneous update (e.g., lock the record before update) &#8211; 10%<\/li>\n<li>Security (e.g., storing the configuration out of the web server scope, prevent online attack etc) &#8211; 10%<\/li>\n<li>Development time(e.g., spending 2 hours ends up with very few features is not acceptable) &#8211; 10%<\/li>\n<li>Think outside the box(e.g., Suggesting to use Ruby on Rails to shorten the development time, using jQuery for client-side validations etc.) &#8211; 10%<\/li>\n<\/ul>\n<p>I believe that if a person can do great in a simple task, he will do great in a complex task. Unfortunately, it is not easy to look for a good programmer.<\/p>\n<p><strong>Updates<\/strong> (August 31, 2009):<\/p>\n<p>The answers I received from the candidates are pretty interesting and filled with tons of surprise. Some of the answers go beyond my imaginations. Here are few examples:<\/p>\n<ul>\n<li>One candidate sent me a package with all of the source codes. Unfortunately, none of the codes works. Apparently, he forgot the golden rule of software development: <strong>A software must work.<\/strong><\/li>\n<li>Another candidate sent me a package with tons of files. After I read the codes, I found that the codes were copied from other projects with very minor modifications. This kind of candidates should be avoided because cleaning up the code is a basic responsibility of a programmer.<\/li>\n<li>A candidate has spent a lot of efforts on defining the variables (More than 20 variables were defined in the configuration sections), but he only put one line of comment (and no code implementations) inside the validation function, i.e.,\n<pre>\/\/Validation goes here...<\/pre>\n<p>He would impress me if he included at least one validation example.<\/li>\n<li>One of the submitted answers is even more interesting (and ridiculous). It was created via some PHP-MySQL wizard websites. Although the result works fine (of course!), he does not receive any credit because his programming skills could not be proven.<\/li>\n<\/ul>\n<p>So far, the best answer scores <strong>60%<\/strong>. I don&#8217;t think this is an exciting result. If you found this useful, please let me know, thanks!<\/p>\n<p>&#8211;Derrick<\/p>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I am going to have a face-to-face interview with a candidate of a PHP programmer position this afternoon. I was told to prepare some technical questions for the interview. If <a class=\"more-link\" href=\"https:\/\/icesquare.com\/wordpress\/interviewing-a-software-engineer-developer-programmer\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[44,141,52,6],"tags":[175,41,42,174],"class_list":["post-257","post","type-post","status-publish","format-standard","hentry","category-business","category-programming-problems","category-software-engineering","category-technology","tag-business","tag-insider","tag-interview","tag-life"],"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/p1sqzr-49","jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":110,"url":"https:\/\/icesquare.com\/wordpress\/tokyo-cabinet-is-31-times-faster-than-mysql\/","url_meta":{"origin":257,"position":0},"title":"Tokyo Cabinet is 31 times faster than MySQL!!!","author":"Derrick","date":"May 23, 2009","format":false,"excerpt":"Today I was comparing the performance of Tokyo Cabinet, MySQL and Memcached using PHP. The result of Tokyo Cabinet is really impressive! (Note that these results are generated from my computer. If you perform your own benchmarks, then you might find different results due to different system configurations. In fact,\u2026","rel":"","context":"In &quot;Programming Problems&quot;","block_context":{"text":"Programming Problems","link":"https:\/\/icesquare.com\/wordpress\/category\/programming-problems\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3125,"url":"https:\/\/icesquare.com\/wordpress\/freebsdthe-netsamba35-port-has-been-deleted-obsoleted-by-netsamba36\/","url_meta":{"origin":257,"position":1},"title":"[FreeBSD]The net\/samba35 port has been deleted: Obsoleted by net\/samba36","author":"Derrick","date":"February 11, 2013","format":false,"excerpt":"FreeBSD is designed for users who got lots of spare time. Every once a while, it will give you some troubles (or \"snacks\" in programmer language), which help you to burn some of your spare time. If you cannot handle these troubles, then FreeBSD is not for you. Although FreeBSD\u2026","rel":"","context":"In &quot;Computer Problems&quot;","block_context":{"text":"Computer Problems","link":"https:\/\/icesquare.com\/wordpress\/category\/technology\/computer-problems-computer-help-pc-support\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2840,"url":"https:\/\/icesquare.com\/wordpress\/freebsdthe-develpkg-config-port-moved-to-develpkgconf-reason-pkg-config-has-been-replace-by-pkgconf-pkgconf-0-8-5-conflicts-with-installed-packages-pkg-config-0-25_1\/","url_meta":{"origin":257,"position":2},"title":"[FreeBSD]The devel\/pkg-config port moved to devel\/pkgconf; Reason: pkg-config has been replace by pkgconf; pkgconf-0.8.5 conflicts with installed package(s): pkg-config-0.25_1","author":"Derrick","date":"July 31, 2012","format":false,"excerpt":"FreeBSD is designed for users who got lots of spare time. Every once a while, it will give you some troubles (or \"snacks\" in programmer language), which help you to burn some of your spare time. If you cannot handle those troubles, then FreeBSD is not for you. Although FreeBSD\u2026","rel":"","context":"In &quot;Computer Problems&quot;","block_context":{"text":"Computer Problems","link":"https:\/\/icesquare.com\/wordpress\/category\/technology\/computer-problems-computer-help-pc-support\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4980,"url":"https:\/\/icesquare.com\/wordpress\/wyzehow-to-control-a-lamp-socket-with-a-physical-button\/","url_meta":{"origin":257,"position":3},"title":"[Wyze]How to control a lamp socket with a physical button","author":"Derrick","date":"January 22, 2024","format":false,"excerpt":"I wanted to install a Wyze camera outside my house. The location do not have any standard 120V outlet, so I ended up connecting a Wyze v3 camera via a Wyze lamp socket. This solveed the power problem of my camera, but it created another problem. My light was either\u2026","rel":"","context":"In &quot;Technology&quot;","block_context":{"text":"Technology","link":"https:\/\/icesquare.com\/wordpress\/category\/technology\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/icesquare.com\/wordpress\/wp-content\/uploads\/2024\/01\/IMG_5179-225x300.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":98,"url":"https:\/\/icesquare.com\/wordpress\/thoughts-on-quality-assurance-on-software-testing\/","url_meta":{"origin":257,"position":4},"title":"Thoughts on Quality Assurance on Software Testing","author":"Derrick","date":"May 22, 2009","format":false,"excerpt":"Recently I developed several projects using Ruby on Rails.\u00a0 One of the cool features of it is the built-in test tools. With this amazing tool, I can test my web page such as data validation in few seconds by myself. It reminds me the time how a software was tested\u2026","rel":"","context":"In &quot;Technology&quot;","block_context":{"text":"Technology","link":"https:\/\/icesquare.com\/wordpress\/category\/technology\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":87,"url":"https:\/\/icesquare.com\/wordpress\/performance-benchmark-freebsd-vs-ubuntu-vs-os-x-which-one-is-better\/","url_meta":{"origin":257,"position":5},"title":"Performance Benchmark: FreeBSD vs Ubuntu vs OS X, which one is better?","author":"Derrick","date":"May 22, 2009","format":false,"excerpt":"If you cannot decide whether you should go with FreeBSD or Ubuntu (or Linux), check out this article: FreeBSD or Linux in 6 Simple Questions Recently I am working on building a web farm which is formed by three ancient time computers (The sum of their ages is older than\u2026","rel":"","context":"In &quot;FreeBSD&quot;","block_context":{"text":"FreeBSD","link":"https:\/\/icesquare.com\/wordpress\/category\/sever-problem\/freebsd\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/icesquare.com\/wordpress\/wp-json\/wp\/v2\/posts\/257","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/icesquare.com\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/icesquare.com\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/icesquare.com\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/icesquare.com\/wordpress\/wp-json\/wp\/v2\/comments?post=257"}],"version-history":[{"count":20,"href":"https:\/\/icesquare.com\/wordpress\/wp-json\/wp\/v2\/posts\/257\/revisions"}],"predecessor-version":[{"id":2936,"href":"https:\/\/icesquare.com\/wordpress\/wp-json\/wp\/v2\/posts\/257\/revisions\/2936"}],"wp:attachment":[{"href":"https:\/\/icesquare.com\/wordpress\/wp-json\/wp\/v2\/media?parent=257"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/icesquare.com\/wordpress\/wp-json\/wp\/v2\/categories?post=257"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/icesquare.com\/wordpress\/wp-json\/wp\/v2\/tags?post=257"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}