Total Pageviews

Tuesday, February 4, 2014

50 general interview questions


Editors Picks

http://www.sqlservercurry.com/2013/11/sql-server-database-unit-testing-using_16.html


Wednesday, January 22, 2014

The core team -Project Management Foundations


Project Management Foundations - The Core Team

July 8, 2011 | Author: PM Hut | Filed under: Project Management for Beginners

Project Management Foundations - The Core Team
By Steve Hart
At the heart of most successful projects you will find an effective core team that is fully responsible for the day-to-day leadership of the project. This is not to be confused with the strategic level guidance that represents the key function of the project steering committee. The project manager is responsible for ensuring that the core team is effectively selected, on-boarded, and fully engaged throughout the project life cycle.

What Is the Purpose of the Core Team?

The practical answer is that the core team is responsible for monitoring the progress of each of the key deliverables and making decisions about course corrections should the project begin tracking behind schedule, over budget or if major scope changes occur.

What Are the Important Elements of a Good Core Team?

A good core team is comprised of the key stakeholders who are empowered to represent a segment of the overall project domain (the segment is generally defined based upon an organization or competency/function they represent). Representing this segment means that the core team member is responsible for providing knowledge from their area of expertise, and making/influencing decisions that impact this area of expertise. Several key factors influence the process of identifying the core team:
  • Diversity: Diversity is a key element of the core team, because it is critical that different perspectives about the project and the project deliverables are fairly represented on the core project leadership team. These perspectives should be represented from day one of the core team — many project managers are tempted to exclude groups from the core team until they are needed to perform specific project activities.
  • Inclusiveness vs. effectiveness: The core team is not the entire project team working on different project activities. Sizing the core team appropriately is critical to the successful management of the project. As the project manager you need to strike a balance between including the right people in the day-to-day management of the project, and creating a team that is too big to effectively make decisions. Based upon my experience the appropriate core team size is somewhere between 6-10 people.
  • Assessing the Organization: The type of organization you are working in significantly influences the manner in which the core team is formed (depicted in the chart below). In a functional organizational, it is generally the functional leads that represent their area/department on the core team. In a matrix and project organization, the core team is generally formed based upon the role of the people assigned to the project. The type of organization also impacts the project manager’s role and authority on the project (from limited in a functional organization, to full control in a project organization).
Project leadership in different organization types
Project leadership in different organization types

Procuring the Core Team Members

The factors described above represent key considerations when performing the following steps to select the core team:
  • Determine which roles should be included on the core team. I find the most effective method is to look for the roles on the RACI chart with the most significant R’s (Responsible).
  • Decide what project team members can fulfill these roles, If the team has not been formed, the question becomes what people in the organization can fulfill these roles.
  • Determine if the composition of the core team needs to be adjusted based upon disconnects between the roles on the core team and the names assigned to the team.
The following chart provides an example of assembling a core team, based upon ownership of the key project deliverables. Ownership does not necessarily represent the person that will complete or manage the deliverable, but rather the person that will be responsible for the deliverable. Responsible means that this is the role that will ensure that the quality, scope, timing and cost of the deliverable are satisfied based upon the expectations established in the baseline project plan. Key deliverables which do not have an explicit owner established on the core team generally represents a RED flag (project risk), because the project manager will likely be required to manage these deliverables outside of the project leadership team as a “one off” process.
Core team example
Core team example

You will find that multiple people may be required to fulfill specific roles, if one person cannot adequately represent the full scope of the deliverable on the core team. In addition, specific roles may be filled by consultants or third party partners.
Getting stakeholders, functional managers and other resource managers to agree to loan you the right resources for your core team can be a challenge. Having a solid project management plan with high level milestones and roles/responsibilities, Project Sponsor support for the initiative, and clear definition of the deliverables (in the form of a WBS) to reference during the discussion with the resource managers makes this process much easier. When assembling the core team it is important to interact with the potential core team members to understand how well they understand the project – and how they feel about the business case (benefits, scope, target dates). It is a bonus to obtain resources that are passionate about some aspect of the initiative (benefits to their organization, learning opportunities for them, team dynamics).

On-boarding the Core Team

Prior to the overall project kick-off, the core team is assembled for a planning meeting (or series of planning meetings, depending on the complexity of the project). The planning meeting helps level set the core team on project planning efforts that have been completed to date (prior to them joining the team), and launching the efforts to complete the remaining planning activities/deliverables. The Project Manager facilitates the discussion on project planning deliverables completed to-date (project charter, milestones/target dates, scope statement, RACI, and the Project Management Plan). Making sure everyone is clear about what their role on the project is one of the essential topics at this point in forming the core team.
The Core Team planning meeting is best structured in the following manner:
  • Goals and objectives
    • Communicate information about the project using project artifacts created to-date
    • Establish a common understanding of roles and responsibilities
    • Begin the process of completing the remaining planning deliverables
  • Activities / Discussion Topics
    • Icebreakers and introductions (particularly important for new projects, with a diverse cross-functional team)
    • Review of project deliverables (best to provide access to these deliverables in advance of the meeting, so this time is spent productively covering questions and open issues)
    • Establish core team priorities and begin working on the remaining planning deliverables

Core Team Best Practices

The following summarizes the best practices associated with selecting, procuring, and on-boarding your core project team:

  • Purposefully select the core team
    • The team’s diversity in terms of backgrounds, perspectives and talents significantly improves project outcomes.
    • Right-size the team to accomplish the task at hand – manage the day-to-day project operations. Make sure the team can adequately “own” the project deliverables, but is not too large to effectively manage team dynamics.
    • The core team should be formed in a manner that is consistent with the organization that is driving the project.
  • Work with the right people to procure the right team members
    • Clearly communicate with resource managers (about the project and resource needs).
    • Use the project sponsor appropriately to gain support of the initiative.
    • Obtain buy-in of the potential core team members (to understand their commitment to the initiative, and comfort with their role).
  • Make the effort to adequately on-board and ramp-up the core team
    • Spend time “forming” the team.
    • Clearly communicate the plans completed to-date. You want the core team to “own” the plans, even if they were not involved in making all of the decisions or creating all of the planning deliverables.
    • Focus on getting immediate traction on the work ahead. Quickly align the core team with the project priorities, and ownership of next steps.  

The Project Design Master Class -PMP

Overview

Much as you to design the software system, you must design the project: from accurately calculating the planned duration and cost, to devising several good execution options, scheduling resources, and even validating your plan, to ensure it is sensible and feasible. This requires understanding the inner dependencies between services and activities, the critical path of integration, the staff distribution and the risks involved. All of these challenges stem from your system design and addressing them properly is a hard core engineering task – designing the project. This design task requires both the project manager and the architect to work closely together to determine the best overall plan.
The Project Design Master Class will take you to a new level as project managers and architects. The class shares IDesign's original battle proven techniques and methodologies that so far have only been the privilege of IDesign's direct customers. You will master the core body of knowledge and skills required of modern software project design. IDesign will mentor you how to gain credibility and perfect communication with top management by providing real life, repeatable and workable options for the project - solutions that balance cost, schedule and risk. Practicing our techniques feels as if "the blinders are off", enabling you to mechanize most aspects of project design while relaying on the IDesign Method and making the most of other tools.
Assuming no prior knowledge, the class covers the essentials of the critical path method, a technique admirably suited for complex software systems and arguably, the only one that works. By modeling the project as a network you eliminate the bias and objectively calculate schedule and cost. You will understand the typical behavior of a project, how it is affected by limiting resource and schedule, and what recurring techniques and approaches to leverage as you cope with constraints.
With these basics in place, you will proceed to see the IDesign Method approach for project design, which enables you to determine the best overall plan across architecture, schedule, cost and risk. The IDesign Method for project design converges on the best and even optimal solution for the project while eliminating gambling, death marches, wishful thinking, and expensive trial and errors. Next the class discussed some advanced project design techniques such as the project time-cost curve, schedule acceleration with network compression and crashing, and IDesign's original risk quantifying techniques. Since there are several design solutions for every project, some more aggressive than others, you must objectively measure the risk of each option and evaluate the project design solutions in light of risk as well as cost and duration.
But no project plan survives unscathed the first day of execution – priorities, resources, deadlines, estimations and features will change, and you must constantly adapt the plan for the new reality. The class will show you IDesign's techniques for closing the loop by tracking both progress and effort across developers and services and containing the impact of changes, allowing you to constantly stay on schedule and on budget.
The class ends with a comprehensive case study and walks through its various permutations in determining the best plan that will keep the project on time all the time at the best risk and cost available. Moreover, the case study not only demonstrates end-to-end flow of project design across iterations, but it also demonstrates the thought process and rationale behind the decisions, our practical approach for using tools, how to integrate and compensate for their shortcomings and utilizing the IDesign templates.
While most training classes merely stack modules, focusing on a single topic at a time, the Project Design Master Class uses a spiral, and each iteration gains more insight across multiple topics, providing the motivation and objectives for next iteration, thus mimicking the natural learning process. Each such iteration incorporates hands-on labs to cement the concepts and practice the techniques. In the class you will also receive the IDesign's original tools, metrics, thumb rules, project design templates, and reference projects.
Don’t miss on this unique opportunity to learn and improve your project design skills with IDesign, and share our passion for excellence and project engineering, gain from our extensive experience of numerous projects design and profound insight on architecture, the process and its application.
While the class will open new horizons for you about project design and the possibilities, we recognize you often need to educate others even on the basics. You may find our project design call for action instrumental in getting support for transforming your environment.

Target Audience

Any project manager, architect, development manager or even aspiring senior developer wanting to grow their skill set would benefit greatly from the class. The class's specific objective is to train the project manager and the architect of the same solution to work together synergistically, so it is particularity suited for such a pair to attend together.

Duration

5 very challenging days.
Outline

Project Design Method Overview

  • The core team
  • Development plan
  • Product life cycle
  • Service life cycle
  • Estimations techniques
  • Services integration plan
  • Staffing distribution
  • Scheduling activities
  • Viability and risk
  • Figuring cost
  • Tracking progress and effort
  • Roles and responsibilities

Essential Concepts

  • Project as a network diagram
  • Node vs. arrow diagrams
  • Critical path pre-requisites
  • Identifying critical path
  • Calculating floats
  • Floats and scheduling
  • Proactive risk management

Project Compression

  • Time-Cost curve
  • Points on Time-Cost curve
  • Solutions and feasibility
  • Cost elements
  • Staffing and cost
  • Critical path compression
  • Activity crashing
  • Project crashing

Quantifying Risk

  • Risk curve
  • Risk and floats
  • Modeling risk
  • Criticality risk index
  • Activity Risk index
  • Exponential risk behavior
  • Risk decompression
  • Tracking risk

Project Design in Action

  • Architecture and dependencies
  • Complexity reduction
  • Adding activities
  • Fuzzy front end
  • Tools and network diagram
  • Working with/around MS-Project
  • Abstracting network diagram
  • Staffing requirements
  • Planning assumptions
  • Network and resources
  • Staffing distribution
  • Floats analysis
  • Infrastructure and dependencies
  • Design with limited resources
  • Design with sub-critical resources
  • Milestones identification
  • Project compression and crashing
  • Accelerating schedule
  • Team throughput analysis
  • Building and modeling Time Cost curve
  • Quantifying Risk
  • Risk decompression
  • Planning and risk

Project Design Mini-Clinic

  • Project walkthrough
  • Planning assumptions
  • Normal solution
  • SDP presentations and review 

Friday, October 11, 2013

practice interview questions 2

http://www.hanselman.com/blog/BuildingWebAppsWithASPNETJumpStart8HoursOfFREETrainingVideos.aspx

I do a LOT of interviewing here, and for a while we were hiring ASP.NET people.  Here's some of the questions that I asked them.  I came up with these questions because you'd "just know" this stuff if you spent time working on a REAL WORLD ASP.NET site - through design, development, debugging, production debugging, and deployment.
Do they suck? Did I miss any?  How do you think people did?
  • From constructor to destructor (taking into consideration Dispose() and the concept of non-deterministic finalization), what the are events fired as part of the ASP.NET System.Web.UI.Page lifecycle. Why are they important? What interesting things can you do at each?
  • What are ASHX files?  What are HttpHandlers?  Where can they be configured?
  • What is needed to configure a new extension for use in ASP.NET? For example, what if I wanted my system to serve ASPX files with a *.jsp extension?
  • What events fire when binding data to a data grid? What are they good for?
  • Explain how PostBacks work, on both the client-side and server-side. How do I chain my own JavaScript into the client side without losing PostBack functionality?
  • How does ViewState work and why is it either useful or evil?
  • What is the OO relationship between an ASPX page and its CS/VB code behind file in ASP.NET 1.1? in 2.0?
  • What happens from the point an HTTP request is received on a TCP/IP port up until the Page fires the On_Load event?
  • How does IIS communicate at runtime with ASP.NET?  Where is ASP.NET at runtime in IIS5? IIS6?
  • What is an assembly binding redirect? Where are the places an administrator or developer can affect how assembly binding policy is applied?
  • Compare and contrast LoadLibrary(), CoCreateInstance(), CreateObject() and Assembly.Load().

A while back, I posted a list of ASP.NET Interview QuestionsConventional wisdom was split, with about half the folks saying I was nuts and that it was a list of trivia. The others said basically "Ya, those are good. I'd probably have to look a few up." To me, that's the right response.
Certainly I wasn't trying to boil all of .NET Software Development down to a few simple "trivia" questions. However, I WAS trying to get folks thinking. I believe that really good ASP.NET (and for that matter, WinForms) is a little [read: lot] more than just draging a control onto a designer and hoping for the best. A good race driver knows his car - what it can do and what it can't.
So, here's another list...a greatly expanded list, for your consumption (with attribution). I wrote this on a plane last week on the way from Boise to Portland. I tried to take into consideration the concerns that my lists contain unreasonable trivia. I tried to make a list that was organized by section. If you've never down ASP.NET, you obviously won't know all the ASP.NET section. If you're an indenpendant consultant, you may never come upon some of these concepts. However, ever question here has come up more than once in the last 4 years of my time at Corillian. So, knowing groking these questions may not make you a good or bad developer, but it WILL save you time when problems arise. 
What Great .NET Developers Ought To Know
Everyone who writes code
  • Describe the difference between a Thread and a Process?
  • What is a Windows Service and how does its lifecycle differ from a "standard" EXE?
  • What is the maximum amount of memory any single process on Windows can address? Is this different than the maximum virtual memory for the system? How would this affect a system design?
  • What is the difference between an EXE and a DLL?
  • What is strong-typing versus weak-typing? Which is preferred? Why?
  • Corillian's product is a "Component Container." Name at least 3 component containers that ship now with the Windows Server Family.
  • What is a PID? How is it useful when troubleshooting a system?
  • How many processes can listen on a single TCP/IP port?
  • What is the GAC? What problem does it solve?
Mid-Level .NET Developer
  • Describe the difference between Interface-oriented, Object-oriented and Aspect-oriented programming.
  • Describe what an Interface is and how it’s different from a Class.
  • What is Reflection?
  • What is the difference between XML Web Services using ASMX and .NET Remoting using SOAP?
  • Are the type system represented by XmlSchema and the CLS isomorphic?
  • Conceptually, what is the difference between early-binding and late-binding?
  • Is using Assembly.Load a static reference or dynamic reference?
  • When would using Assembly.LoadFrom or Assembly.LoadFile be appropriate?
  • What is an Asssembly Qualified Name? Is it a filename? How is it different?
  • Is this valid? Assembly.Load("foo.dll");
  • How is a strongly-named assembly different from one that isn’t strongly-named?
  • Can DateTimes be null?
  • What is the JIT? What is NGEN? What are limitations and benefits of each?
  • How does the generational garbage collector in the .NET CLR manage object lifetime? What is non-deterministic finalization?
  • What is the difference between Finalize() and Dispose()?
  • How is the using() pattern useful? What is IDisposable? How does it support deterministic finalization?
  • What does this useful command line do? tasklist /m "mscor*"
  • What is the difference between in-proc and out-of-proc?
  • What technology enables out-of-proc communication in .NET?
  • When you’re running a component within ASP.NET, what process is it running within on Windows XP? Windows 2000? Windows 2003?
Senior Developers/Architects
  • What’s wrong with a line like this? DateTime.Parse(myString);
  • What are PDBs? Where must they be located for debugging to work?
  • What is cyclomatic complexity and why is it important?
  • Write a standard lock() plus “double check” to create a critical section around a variable access.
  • What is FullTrust? Do GAC’ed assemblies have FullTrust?
  • What benefit does your code receive if you decorate it with attributes demanding specific Security permissions?
  • What does this do? gacutil /l | find /i "Corillian"
  • What does this do? sn -t foo.dll
  • What ports must be open for DCOM over a firewall? What is the purpose of Port 135?
  • Contrast OOP and SOA. What are tenets of each?
  • How does the XmlSerializer work? What ACL permissions does a process using it require?
  • Why is catch(Exception) almost always a bad idea?
  • What is the difference between Debug.Write and Trace.Write? When should each be used?
  • What is the difference between a Debug and Release build? Is there a significant speed difference? Why or why not?
  • Does JITting occur per-assembly or per-method? How does this affect the working set?
  • Contrast the use of an abstract base class against an interface?
  • What is the difference between a.Equals(b) and a == b?
  • In the context of a comparison, what is object identity versus object equivalence?
  • How would one do a deep copy in .NET?
  • Explain current thinking around IClonable.
  • What is boxing?
  • Is string a value type or a reference type?
  • What is the significance of the "PropertySpecified" pattern used by the XmlSerializer? What problem does it attempt to solve?
  • Why are out parameters a bad idea in .NET? Are they?
  • Can attributes be placed on specific parameters to a method? Why is this useful?
C# Component Developers
  • Juxtapose the use of override with new. What is shadowing?
  • Explain the use of virtual, sealed, override, and abstract.
  • Explain the importance and use of each component of this string: Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d
  • Explain the differences between public, protected, private and internal.
  • What benefit do you get from using a Primary Interop Assembly (PIA)?
  • By what mechanism does NUnit know what methods to test?
  • What is the difference between: catch(Exception e){throw e;} and catch(Exception e){throw;}
  • What is the difference between typeof(foo) and myFoo.GetType()?
  • Explain what’s happening in the first constructor: public class c{ public c(string a) : this() {;}; public c() {;} } How is this construct useful?
  • What is this? Can this be used within a static method?
ASP.NET (UI) Developers
  • Describe how a browser-based Form POST becomes a Server-Side event like Button1_OnClick.
  • What is a PostBack?
  • What is ViewState? How is it encoded? Is it encrypted? Who uses ViewState?
  • What is the <machinekey> element and what two ASP.NET technologies is it used for?
  • What three Session State providers are available in ASP.NET 1.1? What are the pros and cons of each?
  • What is Web Gardening? How would using it affect a design?
  • Given one ASP.NET application, how many application objects does it have on a single proc box? A dual? A dual with Web Gardening enabled? How would this affect a design?
  • Are threads reused in ASP.NET between reqeusts? Does every HttpRequest get its own thread? Should you use Thread Local storage with ASP.NET?
  • Is the [ThreadStatic] attribute useful in ASP.NET? Are there side effects? Good or bad?
  • Give an example of how using an HttpHandler could simplify an existing design that serves Check Images from an .aspx page.
  • What kinds of events can an HttpModule subscribe to? What influence can they have on an implementation? What can be done without recompiling the ASP.NET Application?
  • Describe ways to present an arbitrary endpoint (URL) and route requests to that endpoint to ASP.NET.
  • Explain how cookies work. Give an example of Cookie abuse.
  • Explain the importance of HttpRequest.ValidateInput()?
  • What kind of data is passed via HTTP Headers?
  • Juxtapose the HTTP verbs GET and POST. What is HEAD?
  • Name and describe at least a half dozen HTTP Status Codes and what they express to the requesting client.
  • How does if-not-modified-since work? How can it be programmatically implemented with ASP.NET?
    Explain <@OutputCache%> and the usage of VaryByParam, VaryByHeader.
  • How does VaryByCustom work?
  • How would one implement ASP.NET HTML output caching, caching outgoing versions of pages generated via all values of q= except where q=5 (as in http://localhost/page.aspx?q=5)?
Developers using XML
  • What is the purpose of XML Namespaces?
  • When is the DOM appropriate for use? When is it not? Are there size limitations?
  • What is the WS-I Basic Profile and why is it important?
  • Write a small XML document that uses a default namespace and a qualified (prefixed) namespace. Include elements from both namespace.
  • What is the one fundamental difference between Elements and Attributes?
  • What is the difference between Well-Formed XML and Valid XML?
  • How would you validate XML using .NET?
  • Why is this almost always a bad idea? When is it a good idea? myXmlDocument.SelectNodes("//mynode");
  • Describe the difference between pull-style parsers (XmlReader) and eventing-readers (Sax)
  • What is the difference between XPathDocument and XmlDocument? Describe situations where one should be used over the other.
  • What is the difference between an XML "Fragment" and an XML "Document."
  • What does it meant to say “the canonical” form of XML?
  • Why is the XML InfoSet specification different from the Xml DOM? What does the InfoSet attempt to solve?
  • Contrast DTDs versus XSDs. What are their similarities and differences? Which is preferred and why?
  • Does System.Xml support DTDs? How?
  • Can any XML Schema be represented as an object graph? Vice versa?

ABOUT SCOTT

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. I am a failed stand-up comic, a cornrower, and a book author.
facebook twitter  subscribe
About   Newsletter
Sponsored By
Hosting By
Dedicated Windows Server Hosting by ORCS Web


Monday, February 21, 2005 9:14:04 PM UTC
I have such a list of questions for Windows Forms, but I'm pleased if someone knows the answers to half of them. The problem is that the framework is so big, and there are so many related technologies, that it's just not possible to know it all. What each individual knows is heavily skewed by the real-world problems he or she has had to solve.

So, while such lists have value, an interviewer should not read too much into a person's lack of knowledge about one specific area. Heck, the reason I'm not working for Microsoft today is that a gearhead C++ guy didn't think I knew enough about the Windows API. (He asked a question about accessing an API function, and I told him I did that a couple of years back, wrapped it up in a VB function, and never thought about it again. That was evidently not the answer he wanted.)
Monday, February 21, 2005 9:36:19 PM UTC
The guy before me basicly answered my main question, but I was also wondering at what level would you consider a person who knew all the information for thier given classification?
Kris Gray
Monday, February 21, 2005 9:36:50 PM UTC
Geez, Scott. I guess I should quit now. This is depressing. ;)
Monday, February 21, 2005 9:48:41 PM UTC
I'd consider someone very senior if they knew all of these questions.
Monday, February 21, 2005 11:11:08 PM UTC
I'm looking forward to the followup post with the answers. :o)
Monday, February 21, 2005 11:55:47 PM UTC
My first take is, this is a much better list than the last one. (read: less trivialities.) It's reasonable stuff you should have encountered if you work in that area of the framework.
Tuesday, February 22, 2005 1:16:42 AM UTC
OK, if this list is what a real employer is looking for, why is it that the MS Certs require you to know almost none of these questions?
Tuesday, February 22, 2005 1:51:00 AM UTC
I would move "What is this? Can this be used within a static method?" to "Everyone who writes code". If you don't *get* objects, you can appear to write good code but sooner or later it will all fall on your head.

I'm still trying to decide if I'm going to ask any of these sorts of questions in the interviews I'll be starting soon for a senior ASP.NET dev. I know I'm going to ask candidates to write code. I think I will end up asking a few of these as well. As usual Scott, you rock and you're just-in-time, too!

Kate
Tuesday, February 22, 2005 5:06:19 AM UTC
Even though I don't know half the answers to these questions I think it's a pretty good list for .NET Interview questions. Let's face it, if someone gets all these correct then you'd probably want to hire them! ;-) I'm going to take this on board and work through the ones I don't know the answers to -- and learn something. Thanks for the list Scott. Nice one!
Tuesday, February 22, 2005 5:12:41 AM UTC
I think a great .NET developer should also know proper grammar (ref title of post). ;)

These lists are a nice way to gauge technical experience, but they lack any way to discover if a developer is truly a great developer. A truly great developer knows how to work well in a team. You ever have a developer who knew the answer to all these questions but would trash talk and degrade anyone who didn't (I've met one)? A truly great developer understands that construction is only a small portion of a project lifecycle.
Tuesday, February 22, 2005 6:38:40 AM UTC
I think haacked is right!

Perhaps you'll meet someone who never had any opportunity to work at great projects and could never prove he could be a great developer. Those people might be(come) great developers, but until then they just were great at home. At home, you can do great things, that are totally worthless for the business. They might've created great software, which isn't divided into layers, etc, etc. I hope you get my point, I cannot express myself currently that good in English ;)

I still think it's a great list though. Peolpe who DO know these questions, can be considered great developers. You'll still have to figure out if they're great for your company and/or team. But when hiring them, you can start with a good salary. The other can prove himself later on and earn his big paycheck then.
Tuesday, February 22, 2005 8:05:57 AM UTC
Ya, I know the title is all goofed now, but if I change the title, the permalink will change. :(
Tuesday, February 22, 2005 8:45:19 AM UTC
I can see that changing in the next version of Dasblog. :)
Tuesday, February 22, 2005 8:50:25 AM UTC
You can indeed Tim...I suspect I'll have to include a LIST of permalinks (a journal) for each title. Had I noticed it earlier it wouldn't have been a big deal.
Tuesday, February 22, 2005 9:49:02 AM UTC
Very complete list, and quite challenging !
I would move some question into another category, though.
For example:

Into "Everyone who writes code" category:

What is the difference between Dispose() and Finalize()
What is boxing ?
Is string a value or a reference type ?
Explain the use of virtual, sealed, abstract, override.
Explain the difference between public, private, protected and internal modifiers.
What is this ? Can it be used within static methods ?

Into "Mid-level developer":

What does this do? gacutil /l | find /i "Corillian"
Why is catch(Exception) almost always a bad idea?
Explain what’s happening in the first constructor: public class c{ public c(string a) : this() {;}; public c() {;} } How is this construct useful?

Into "Senior developer":
When would using Assembly.LoadFrom or Assembly.LoadFile be appropriate?

Moreover, I think some questions cannot be easily assigned to one of the developer-level categories.
For example, you can ask:

What is the difference between OOP and SOA ?
-- or --
Contrast the use of an abstract base class against an interface.

to all kind of developers, and the answer you'll get will be very different according to the developer's knowledge.

I personally think that a senior developer will prove its deep knowledge of the .NET technology if he can provide a good answer to the two questions above, rather than if he knows what sn- t foo.dll does :-)

However, thanks for the good list, I'm going to study/review a few topics after I relized I could not provide a good answer to some of your questions !

Claudio


Tuesday, February 22, 2005 3:02:09 PM UTC
Scott,
The list is interesting, but I don't agree with your levels.
For example, "Can DateTimes be null?" or "Is string a value type or a reference type?" are things EVERYONE should know, because they are important to write code from day 0.

Also, I've been working for 3 years in .NET and never heard of Corillian. And, while I know what PIDs are, I don't think everybody needs them.

There are a lot of examples, but I think these ones are representative enough.
Diego Mijelshon
Tuesday, February 22, 2005 3:26:14 PM UTC
Getting to the point here - Okay so, if someone does know all the answers, how much $ can he ask for?
Tuesday, February 22, 2005 3:35:53 PM UTC
The list is challenging for sure. However I think that the mode of
thinking in using such lists lets talent slip through the cracks.
Einstein said to never memorize anything you can look up, so knowing
what gacutil /l | find /i "Corillian" does would, for me, start with
gacutil /?. I would guess that it would list all of Corillian's
assemblies in the gac, but I've never used gacutil before. Granted
I'm not a "great" .Net developer, just one learning to hopefully be
great one day.

Often times in the NFL quarter backs change teams and/or have to work
with new offensive cooridinators who have totally different offenses
than what the quarterback knows. If they brought in the quarterback
for an interview and started quizzing him on plays from their playbook
that he hadn't seen before, he could end looking terrible. However,
does he have the fundamental skills required by an NFL quarterback?
If so then he can probably quickly learn the new offense and be a
great player for the team.

Having said all of that, I'm going to learn everything on the list ;)
Jamin Guy
Tuesday, February 22, 2005 4:01:52 PM UTC
Haacked: " A truly great developer understands that construction is only a small portion of a project lifecycle."

Hard to overemphasize this point. One question I always ask in interviews goes something like this: "You've been told by the project sponser that the project absolutely has to be done in two months - commitments to major clients have been made, etc. etc. You know that's impossible, and that a minimum of six months will be needed. What do you do?"

There are several reasonable answers to this, depending on circumstances. But the tone and quality of the answer will tell you a lot about this person's understanding of the software development process.

Or if I were choosing between:

A) a young, motivated developer who can't answer the list very well, but has a great attitude and seems to have a good potential to learn

B) a whiz kid who knows all the answers but has the people skills of a snapping turtle and can give you a thousand reasons why everything that's ever gone wrong in his projects are "somebody else's fault"

I'm picking A every time.
Tuesday, February 22, 2005 5:50:01 PM UTC
> Getting to the point here - Okay so, if someone does know all the answers, how much $ can he ask for?

It's more like "how many years until all the developers in India memorize this list"?

What you should be asking is, "can I come up with a list like this?" Being able to answer all the questions is a red herring-- it won't save your job. People with the ability to *CREATE* the lists are the ones who will keep their jobs.
Tuesday, February 22, 2005 5:51:40 PM UTC
Billy, there are many correct answers to your question such as...

#1 I tell the project sponsor "No Problem!" and then quit the day before it's due to be delivered to QA."

#2 I tell the project sponsor "No problem. I've fortunately have the ability to bend space and time to conform to your warped sense of reality."

#3 I tell the sponsor to perform an anatomically impossible act and start verbally abusing the sales team.

#4 From that day forth, I would only speak in a long dead language like Aramaic and point fingers at my coworkers.

Be sure to give one of these answers in your next interview.
Tuesday, February 22, 2005 6:03:21 PM UTC
Haacked, interestingly enough, I recommended answer #1 in my first book when I discussed dysfunctional development environments. It's certainly true that sometimes circumstances put you in a situation in which you cannot succeed. And leaving is an honorable way out (presuming you are not breaking other existing commitments by doing so).

But some don't have as many options as others, and some may not be ready to write off an otherwise good position for one impossible demand. While we may gain some satisfaction using the flip answers #2 and #3 among ourselves, we have to face the fact that those outside the process simply lack the perspective to understand the limitations of software development. So attempts at education, while not succeeding as often as I'd like, are not totally pointless.

But I think we're probably close together in general concept, and here's a test to see. About three years ago, I ran across a book in a bookstore entitled "How to Survive a Death March Project". I started to pick it up, thinking, "I might get some interesting tips out of this." Then I came to my senses and put it down, realizing that I am NEVER going to allow myself to be involved in such a project again. Life's too short for such nonsense. In that in line with your thinking?
Tuesday, February 22, 2005 6:56:26 PM UTC
One of the headings: C# Component (HI, TP) Developers needs to be unbulleted so it pulls out like the ASP heading...
Chris Kinsman
Tuesday, February 22, 2005 8:09:25 PM UTC
Will you be posting the answers for those of us less fortunate of having the knowledge to complete your list?
phuturekrewhotmail.com (Aaron)
Tuesday, February 22, 2005 9:36:46 PM UTC
Scott (and everyone else), I want to thank you for reminding me that I still have TONS to learn! I've cancelled digital cable at my house and brought all my computer books upstairs. I've got a stack as tall as I am to read!
http://www.devcow.com/weblogs/PermaLink,guid,bf5f8170-969d-4e73-b2d2-86139ae8efed.aspx
Tuesday, February 22, 2005 11:42:04 PM UTC
I didn't expect this, but this fellow posted a bunch of the answers!
http://www.ayende.com/Blog/PermaLink,guid,b6e3e8ce-4a6e-4cf0-af70-d360be9e8c76.aspx
Wednesday, February 23, 2005 11:14:02 AM UTC
I don't see what all the flak is (especially when you did this last time). They seem like standard questions fo rme in knowledge of the areas.
Wednesday, February 23, 2005 3:52:42 PM UTC
I agree with several of the voices on this thread that you can't judge an applicant's competancy simply by her ability to answer a set of fact based questions any more than you can judge a person's intelligence by her ability to win on "Jeopardy!". Simply put, an individual's knowledge of facts is only one aspect of her ability to solve problems, it does not address the more important factors that go into making a good employee in general like:

1. How does she solve problems (as opposed to how does she regurgitate facts)?
2. How does she interact with others?
3. How does she deal with adverse situations?
4. How well does she communicate?
5. How well does she perform under pressure?
etc.

There are numerous factors that outweigh an individual's ability to memorize. Of course, knowing the answers to a set of questinos is useful since it *could* indicate experience in the topic area, but it is by no means a gauranteed method of finding a well rounded developer.
Wednesday, February 23, 2005 4:26:08 PM UTC
Hmm, the only three I couldn't answer are the ones listed below, and I'm talking about detailed insightful answers. In the XML, I couldn't provide the same level of insights but I gave reasonable answers.

* Can attributes be placed on specific parameters to a method? Why is this useful?

* What is cyclomatic complexity and why is it important?

* What does this do? gacutil /l | find /i "Corillian"

------------------

I have a question of my own that I've asked many sr. developers and friends and coworkers and architects but thus far, I haven't recieved the correct answer. If you look this up or try it out before you answer than you've cheated < giggles >.

In C#, what is the difference between passing an object by ref and by value? (Yes, there is an important difference, a difference that has caused days of debugging because of pre-disposed assumptions we have about it).

... No cheating. Whats the answer? ... Scott? Anyone? I'll post the answer in my next post.

Shawn B.
Wednesday, February 23, 2005 4:34:40 PM UTC
Okay,

First, Charles Chen sums up my sentiments quite well. I like to measure technical ability but teamwork is very important. Sometimes I have to compromise because good developers with a good attitude are very difficult to find, but for higher level positions its a requirement and there is no compromise.

I recently went to a new company (2 months ago) to be an archict and the Software Direct I reported to started when I started, but he had a very demeaning attitude and lots of micromanagement. When confronted about being micromanaged, he said if I don't like it I can leave. Well, I left and returned to my previous company (which I started at yesterday). He's been programming for 30 years. I've been doing it for only 15 (8 professionally, I don't could C-64/Apple IIe hacking professional).

When I interview, I put much less emphasis on what they know than I do on how they present themselves and how they solve problems and interact with other members of the team. Of course, I've not hired people before because I couldn't guage how they were technically because there is a certain minimum competance I expect. I don't want cowboys that will come in and do things their way or no way and re-write all the code because its not what they are used ito.

Anyway... the answer to my question above:

In C#, if you pass an object byval and set it to null, you are setting a copy of the pointer to null and not the object itself (being passed in). If you pass as ref, then set it to null in the function, then you are setting the actual pointer to null and everything else that points to it. In both cases your are passing a pointer into the function, but in one case you are passing the pointer itself, or a copy of the pointer. I don't think this is the same behavior in VB.NET but I haven't tested it.
Shawn B.
Wednesday, February 23, 2005 4:46:29 PM UTC
Not to nit pick Shawn, but they are "References" not "Pointers." They refer-to rather than point-to. I personally don't like hearing C# programmers use the term "pointer" in an interview (outside the unsafe context), and if they do, I want to better understand what they are thinking.

The question you asked is a mid-level to everyone-should-know question. VB.NET has similar semantics.
Scott Hanselman
Wednesday, February 23, 2005 4:53:15 PM UTC
This list is bullshit.

For starters, if someone did actually know the answers I WOULD NOT hire them. They would probably be a total wet noodle book worm with no interpersonal skills and creativity.

Also, there is nothing that would relate to real-world problem.

Also, most companies would not hire such a person that knew all the answers. He/she would probably want more money than what the job paid. He/she should work for MSFT or just write arcane books.

Oh, and BTW, most of these questions are trival information to make the author sound smart.
Ed
Wednesday, February 23, 2005 5:08:26 PM UTC
Good stuff Ed. Nice to not leave your email address, full name, or website. It adds credibility.

I'm glad the list makes me sound smart. It wasn't the intent, but a nice side effect according to you.

Thanks also for indicating the triviality of the list - I look forward to your follow-up posting of the answers.
Wednesday, February 23, 2005 5:26:43 PM UTC
Scott,

While I'll agree, the question isn't very advanced, but I've asked more people than I can count (I've guestimate) 50 or so over the last year and not one person has correctly answered the question. You didn't even answer it. And the terminology "pointer" I'll concurr is incorrect, old habbits die hard. Nonetheless, most people answer the question (in fact, I've even seen it in an MCSD study guide in the past this way too) that when you pass an object it passes a reference to the object (which is correct). But it never makes the distinction that if you pass an object as ref and set it to null in the method that you are actually setting the object to null everywhere (even outside the method) and if you pass it by value then you are only setting the local copy to null.

While everyone should know it, I've yet to encounter someone who has answered it correctly. You might be the exception (not being synical here) but everyone in person I've asked (which isn't many I'll admit) hasn't gotten it (even some prominant people in the community).
Shawn B.
Wednesday, February 23, 2005 5:33:48 PM UTC
Scott, I think this is a good list, much improved over the previous. It is thought provoking. No matter how much you *I* think you *I* know I found myself second-guessing when my answers were correct. I looked at the list just now of answers in the link provided, I have more detailed explainations perhaps I'll post. It is a fun excercise anyway, I like guaging my readiness. Anyway, thanks for posting these and the others.

Concerning Ed., I'm glad to know you wouldn't hire me because I probably wouldn't want to work for you (or someone with the attitude your project in your post). I could answer them and I guarantee I'm not being paid anymore than I'm worth but I won't accept a Jr. developers wage, either... I'm well beyond Jr. and can demonstrate very quickly.

I don't view these questions as a end-all-be-all for determining anything in an interview. But just because someone can answer them doesn't mean they have no interpersonal skills. When I interview, I dig deeper into the personality and teamwork skills than I do technical, unless they are applying for a technical position (Architect?). I expect people to know there stuff, I guage that by a mix of questions (like these posted) and problem solving and hands on troubleshooting.
Shawn B.
Wednesday, February 23, 2005 7:06:12 PM UTC
All,

While I disagree with the idea of this kind of list, I don't think that Scott is using this as his only criteria during an interview. At least I hope not. The big problem I have with these types of lists is that they are just facts devoid of context and don't provide any insight into a persons thought process (how hippie-esque of me to want insight into someones thought process).

I don't think it's nit-picky to correct someone who says "pointers" instead of "references" wrt .NET variables. ESPECIALLY if that someone had plastered ".NET Expert" on their resume as it's sitting in front of me. It's like calling your wife "my girlfriend". Although the two titles are similar, there is a WORLD of difference between the two. :)
Thursday, February 24, 2005 4:36:10 PM UTC
Unfortunately, someone who can answer all of these questions correctly would quite possibly be a terrible hire. You can't tell the difference between someone who knows all the answers to these questions because they've paid their dues in the trenches versus someone who has a great memory and has read a couple of C#/.NET books.

For a truly useful hiring guide, check out http://www.joelonsoftware.com/articles/fog0000000073.html

I also disagree with the basic premise that a great .NET developer ought to know these things. I'd rather have a problem solver than a Jeopardy! champ on my team any day.
James Osbone
Thursday, February 24, 2005 10:24:25 PM UTC
> I also disagree with the basic premise that a great .NET developer ought to know these things. I'd rather have a problem solver than a Jeopardy! champ on my team any day.

You guys miss the point (and you didn't see Scott's PREVIOUS list, which was FAR more Jeopardy-like, but I digress).

I don't think Scott is saying that every .NET developer should know the answer to *all* these questions.

A .NET developer working in these areas should have run into the topics covered by these questions, enough to at least understand the question and provide a reasonable response. That implies that they're thinking about what they are doing and asking "why does it work this way?" and "what other ways could I do this?"-- and that's much more useful. Those are the people you want to hire.

I talk more about this here:
http://www.codinghorror.com/blog/archives/000220.html
Thursday, February 24, 2005 11:32:40 PM UTC
What you don't get out of these questions are any of the intangibles. I have worked with people who could answer all of those questions who have the attention span of a gnat. So they run around with large egos doing what I think is the most fun (and hence often easiest because it is fun) 60-75% of development but leave the last part of actually *finishing* a software product to others (which I think is 95% of the work).

Ring a bell?
jack
Friday, February 25, 2005 4:52:55 PM UTC
I think it is possible for people to know the answers to all these questions especially if they are a consultant who at one point or another has been confronted with the need to know these answers. I'm sure Scott knows the answers as he wrote the questions. I know I was able to answer all but 3 of the questions but that is because I spend every waking hour of my life in a never ending quest to know more more more more and how and why things work.

The kinds of people who are likely to know the answer to more of these questions that the average joe are likely to be the kinds of people who have to constantly know how things work at a deep level, people who don't just do it because its a job, but rather a passion. I can't speak for everyone on that so don't take it as an over-generalization. I realize good people can be swamped.

I guess my point is that I wouldn't be scared if someone knew all the answers. But really, what is more important than anyone who can answer the questions, is how well they work on a team, their attitude, and how they approach problem solving (especially complicated problems). However, whether they read the answers in a book or learned it by experience, is somewhat minor. Some of what I know I read in books and trade magazines and online. Much of what I know I learned by experience. At some point, what I've learned will connect with what I'm actually doing. In many cases, what I've learned by reading but not doing, I've been able to assist other people in their problem solving.

What's important is that they understand conceptually (with regards to answering a list of questions) and not by fact-memorization otherwise indeed, the knowledge would be mostly useless.

But with all interviews questions, they shouldn't be the reason for hiring/not hiring, but only as a guide. There are so many more aspects to measure in a candidate than technical ability. I would even hire someone who couldn't answer most of these questions, if they were an otherwise motivated, good-attitide person, and want to achieve more than they can imagine. After all, that sounds a lot like me and I've accomplished some amazing things. And some of those things I accomplished while not being able to answer any of these questions. At some point we need to learn, and we are always learning because no one knows it all.
Shawn B.
Friday, February 25, 2005 5:04:56 PM UTC
Those who object to the questions are missing a point. Did Scott say that people who couldn't answer the questions would not be hired? Take for example the person who posted some answers to them... for one he wrote "What does this do? sn -t foo.dll
Does something to the strong name of the dll, probably show you the details of it, don't recall sn's CUI in my head. " This is a GREAT answer. It shows that you at least know what sn is for, and that backs up your claim that you're an enterprise .NET developer (well if you had no idea what sn was, or couldn't show me that you did, should I hire you?) If the person went on to say "I can fire up a dos box and go sn ? to see the options" then that shows me the person has actually used sn at least once (knows it runs at a command prompt) and knows how to look stuff up. That's actually different than someone who says they would Google for it.

Hire for attitude, train for skills... but the attitudes I want include "fast learner", "excited by our technologies", "knows where to look stuff up" and "remembers a lot of details." These questions serve as an opportunity to illustrate those attitudes.

Here's another example: during a code review of an ASP.NET system, you discover that a number of different pages are storing unrelated values in viewstate under the key "id". For example one page puts the customer is in viewstate("id"), another the employee id, and so on. What would you recommend be done?

How a candidate answers this will reveal technical experience as well as team dynamics and what kinds of process they like.
Friday, February 25, 2005 7:01:02 PM UTC
Heck, I don't even know what CUI stands for. Had to Google it.

<-- will never get hired by Scott H now. ;)
Saturday, February 26, 2005 5:46:34 AM UTC
Good questions, Scott. I totally agree with someone who posted a comment here that the people who can come up with the questions like these are the real skillful ones. That being said, I translated your questions for everyone into Japanese and answered them.

I picked two basic questions from your blog yesterday and asked them of an interviewee at my company. I asked him the difference between a process and a thread. He went, "Well, you know... there are so many classes in .NET Framework..." As you can tell by now, the guy didn't get the job. Of course, that's not the only reason why we didn't hire him, but I didn't like the fact that he didn't even attempt to answer the question. And it seems to be a very basic question to me if you have a B.S. degree in computer science, which his resume stated. (I have B.A. degree in education...)
Saturday, February 26, 2005 5:47:27 AM UTC
Good questions, Scott. I totally agree with someone who posted a comment here that the people who can come up with the questions like these are the real skillful ones. That being said, I translated your questions for everyone into Japanese and answered them.

I picked two basic questions from your blog yesterday and asked them of an interviewee at my company. I asked him the difference between a process and a thread. He went, "Well, you know... there are so many classes in .NET Framework..." As you can tell by now, the guy didn't get the job. Of course, that's not the only reason why we didn't hire him, but I didn't like the fact that he didn't even attempt to answer the question. And it seems to be a very basic question to me if you have a B.S. degree in computer science, which his resume stated. (I have B.A. degree in education...)
Saturday, February 26, 2005 5:48:51 AM UTC
Sorry for the duplicate messange and here is the URL where I translated your questions into Japanese.
http://www.vbaspcoder.com/PermaLink,guid,dc1d767c-f102-4747-aaa6-6e09c3bf98be.aspx
Tuesday, March 15, 2005 7:14:51 PM UTC
In my experience giving candidates strait quiz questions rarely finds good people. It only takes one or two of these questions to tell if someone lied on their CV asking many more is futile and tends to make candidates nervous and defensive.

You can usually teach people most of these technology skills anyway if they lack them, it is much harder to teach them general problem solving skills that stand the test of time.

Scott Berkun gives a different view of what to ask in this essay: http://www.scottberkun.com/essays/essay39.htm

Follow this and you are more likely to get at a candidates soft skills which are so important when building a team.
Friday, March 18, 2005 5:12:24 AM UTC
Billy, yes, that is inline with my thinking. That's why I'm independent now. ;)
Sunday, March 20, 2005 10:23:21 PM UTC
Way cool brain teasers.

Is there an answer key somewhere?
Saturday, April 02, 2005 10:06:56 AM UTC
This list confirms my expectations of .NET developers. It points to a culture where memorization of the minutia of a very poorly-designed API is considered a virtue, and elegance is simply unheard of.

Until your organization begins to select people on the basis of their ability to *invent*, and *imagine* a creative solution to an open-ended question, it will be more of the same old, same old.

Face it: "great .NET developer" is as much of an oxymoron as "Windows XP Security". Great developers don't tolerate the platform on which .NET runs.
J. Random Poster
Wednesday, April 20, 2005 7:27:32 AM UTC
OK, I give up... What is the difference between typeof(foo) and foo.GetType()?

Obviously typeof operates on types and .GetType() works for instances but is there anything else? Something more magical? I'm hoping typeof() is quicker because it *could* be evaluated at compile time or something?
Josh Twist
Tuesday, April 26, 2005 12:57:39 AM UTC
Lists like this are pointless and are of no value to ANYONE. You can create a million lists like this and still be no closer to the end... such is the complexity of the framework.

Understanding processes and architectures are key, not specific questions on xml libraries for eg.... because they are always in flux.
fuckmeupthegoatass
Sunday, July 17, 2005 7:15:34 PM UTC
Hi,

I have an interview next week. Can you please post some sample interview questions on .NET? I found a few sites below that have some questions, but need a few more samples to feel confident!

http://techinterviews.com

http://www.interviewboard.com

Thanks.

- Prashant
Prashant
Thursday, November 03, 2005 6:25:11 PM UTC
Why is it, for being more of a mid-level developer (4 years), I know more answers to Senior-level questions than the mid-level ones? :0
d
Friday, December 02, 2005 8:05:59 PM UTC
Hey thanks scott :)

i have an interview next week..
let me ask u these questions (to clear my mind :) )

which one of these will u prefer as an answere from an interviewee:
1> Textual answere
2> Practical answere
3> Mixture of both
4> or a confident bluff (not always, but at some instances)

what impresses u most in an interviewee?
attitude( &/or confidence) or knowledge level

How was ur first interview? ( ;) )

(well , i cant think of anymore questions right now, i will be asking as soon as they come ;) )

i think the questions framed are good and covers most of the knowledge level one expects from a s/w developer (at their specific levels)