答:
Given that the teams are new to version control, and many are using Windows, I'd recommend mercurial over git.

The conceptual model of version control used by git and mercurial are very similar, so once you've mastered one, it's easy to pick up the other (and for similar reasons, it is quite easy to convert a repository from one to the other). This means its not a big deal if you change your mind later.

In my opinion, mercurial is easier for new users to learn. It makes simple things easy, and dangerous ones hard. Git makes dangerous operations easy (easy to do, not necessarily easy to do correctly!).

The TortoiseHg interface for Winodows is very nice too, and is another argument in favour of using mercurial.


问:
Which DVCS (git or hg) is easier for programming students?
A bit of context: I'm in 3rd year of college. students are divided into teams of 4. Almost everyone will be working under windows (except a few like me who are on linux). As part of the school curriculum, we will soon start working on a project for a real client, but me and another team are wondering which way would be best for sharing our code with each other.

I've been working part-time for 3 years and have had plenty of experience using both git and mercurial on different projects, so I don't have any problems using one system or the other.  However, none of my teammates have ever used a version control system before. There's also another team who've tried using SVN but have had major problems and would prefer trying out something else, so they've asked for my opinion.

My thoughts : I've heard that mercurial + TortoiseHg has a better integration under windows, but I'm wondering if the concept of anonymous heads might confuse them even If I explain them. On the other hand, I find that git branches are easier for a beginner to understand (clear seperation of work for each programmer) but doesn't work as well under windows.

答:
Mercurial, without a doubt.

This is of course, subjective, and vaires from one person to another, but the general opinion is that Mercurial is easier to grok, expecially to someone new to VCS or someone coming from one of the old generation VCS's.

Points in hand:

Mercurial was developed with Windows in mind; Git was ported. No matter what anyone tried to tell me, Git is still a second rate citizen on Windows. Things have certanly improved over the past few years, but you still see a lot of bickering of why something works/or doesn't work on Windows as it did on *nix box. TortoiseHg works very nicely, and Visual Studio implementations are even easier to use without breaking your workflow.

If someone starts the discussion "Git is more powerful after you ...", then he's pretty much saying it all. For 95% of users Mercurial seems more intuitive. Starting from a lack of index, to its more intuitive options (option switches are coherent), to its local numbers for commits instead of SHA1 hashes (who ever thought SHA1 hashes are user friendly??!)

Mercurial's branches are no less powerful than Git's. Post describing some of the differences. Going back to some previous revision is as simple as "update old-revision". Starting from there; just do a new commit. Named branches are also available if one wishes to use them.

Now, I know that all these are details, and they can be learned and everything, but the thing is ... these things add up. And in the end, one seems simpler and more intuitive than another. And version control system should not be something one spends time learning - you're there to learn programming and then to programm; VCS is a tool.

Just to note; I use Git and Mercurial daily. Don't have trouble using either one of them. But when someone asks me for a recommendation, I always recommend Mercurial. Still remember, when it first came into my hands, it felt very intuitive. In my experience, Mercurial just produces less WTF/minute than Git.

ContentLicense: CC BY-SA 3.0


问:
Freelancer.com—Any opinions?
Has anyone ever tried Freelancer.com (former GetAFreelancer.com)? Does anyone have any opinions/feedback on the site?

I would like to start some projects as a freelancer but I would really like to get some opinions on the site to get started.

答:
My personal experience is that the online freelance sites are overly-filled with people with limited abilities flooding request in an attempt to be the lowest bidder. They rank above Monster.com on my list of "places where I should avoid in my job search."

That site, in particular, looks like it is going along with the "we don't want to pay for quality" model. The first two projects I clicked on said that they budgeted $8-15/hour for an iPhone or an Android app? Really? Because you can get more working at Lowes (and exercise to boot). You're much better off just doing open-source work (which is arguably better for a résumé anyway).

If you really need freelance work, find a user group in your area, network with people you know, and get a higher Stackoverflow score (all of these have provided me with good work in the past). If those don't work, help out with an open source project, it will pay off more in the end anyway.

Title: Freelancer.com—Any opinions?


答:
The site you have mentioned is a good site with lots of projects. The thing that is common to such sites are:

You have to bid cheap to win. Some projects are priced very very low.

You have to be really good.

You must pick a site with arbitration since customers (some time) nag about the product

You have to be very clear and waste good time communicating clearly with the user to make sure you are delivering what they want. This is all unpaid for in most cases.

The customer background may not be in software, so you have to do a complete job helping them all the way.

You need to read the requirements carefully before you bid, again you get nothing for the effort spent during bidding.

In many cases, you are not allowed to buy tools. Most are low budget projects

Your reputation is everything in such sites. So you will have to do double the effort to be considered by a prospect customer. Making up for lost reputation is very hard.

Did I say the competition is sometimes crazy? For one project it is not uncommon to find 10 bidders or more.

It is a lot of fun if you like to code, but it is not easy money.

Title: Freelancer.com—Any opinions?

Body:
Has anyone ever tried Freelancer.com (former GetAFreelancer.com)? Does anyone have any opinions/feedback on the site?

I would like to start some projects as a freelancer but I would really like to get some opinions on the site to get started.


问:
Why are parser generators used?
I saw some projects require BISON to generate C++ code. What is the advantage of having BISON/Yacc etc. generate C/C++ code instead of writing it yourself?</p>

答:
Two reasons:

Clarity: A parser generator can use a language (say, ABNF) that is geared towards the problem, that of describing a grammar. (Some languages arguably can get away with not needing a separate language: just build a DSL in the host language.)

Ease of use: You don't have to know how to write a parser yourself. Would you use a recursive descent parser? a pack-rat parser? etc. And do you care, if you just want to parse a SIP message?

ContentLicense: CC BY-SA 2.5

Title: Why are parser generators used?


问:
Is my description of the actor model right?
If I understood, the actor model is just like the object model, but with a few differences:

EVERY object spawns it's own separate thread and its not a problem even when you have thousands of objects.

Actors don't interact by calling functions and getting return values but instead by sending and receiving messages.

If you don't violate that model your app will be using concurrency to its full power without any risks of race conditions.

Everything you can do in OO you can do using actors but better, the problem being that everything we coded in the last years was OO based - but a transition is imminent.

So for instance, suppose I have to define 3d vector class/actor, create two instance and call a sum operation on them.

OBJECT ORIENTED:

```<code>class V3d {
   constructor V3d(x,y,z) //bla
   float x,y,z;
   function sum(V3d b)
   {
      return V3d(x+b.x,y+b.y,z+b.z);
   }
}

//using:
mySum = V3d(1,2,3).sum(V3d(3,2,1)) //creates 2 instances, sum, returns instantly
drawPoint(mySum) //uses the result
</code>```

ACTOR MODEL:

```<code>actor V3d
{
    constructor V3d(x,y,z) //bla
    float x,y,z;
    loop
    {
       receive 'sum',b:V3d :
           send(caller,'sumResult',V3d(x+b.x,y+b.y,z+b.z))
    }
 }

//using:
send(V3d(1,2,3),'sum',V3d(3,2,1)) //creates 2 instances, send to the first one a request to sum with the second one

loop
{
   receive 'sumResult',result:
      drawPoint(result) //receives result and draws it
}
</code>```

Is that it? Or am I completely wrong?

答:
Regarding 1: I have worked with single(ish) threaded Actor-modeled application, so it's quite possible to disregard the large thread number this suggests.  AFAIK, threads are not lightweight objects by any means, so it's probably not desirable to have one for each actor, depending on how many actors you are using.

Regarding 3: I'm pretty sure race conditions can happen in actor modeled systems simply due to programming logic?

Regarding 4: Define 'better'? My experience has been that asynchronous logic can be much more difficult to read than synchronous stuff.  e.g, in your example above, you don't know which operation is responsible for which result, so there is extra message tracking to do.  Once that is added in and other messages in and out are included in the logic, the intent of the code is spread across several send/receive functions.

Having said all of that, I am a big fan of actor model use for the upper layers of an application.  It can make decoupling easier, since adding dependencies is a bit harder than adding a function.  I also don't have much experience with higher level than Java languages, and other paradigms might support asynchronous-ness in a more fundamental way.


问:
A modern review of Java
I've been programming for a few years and I began in Java, and in my time I've found many different sources claiming Java to be an inferior language in some way or another. I'm well aware that each language has it's strengths and weaknesses, but a lot of things I've read about Java seem to be dated.

The most often cited reason for Java being inferior is that it is much slower than other natively compiled languages, like C++ for example. Many people criticize the game designer Notch (who developed Minecraft) for using Java because of its apparent lack in the performance department. I know Java was much slower back in the day, but there have been many improvements since, especially JIT compilation.

I would like to get some objective opinions of Java as a language today. So my question has 4 parts.

Performance.

a. How does Java's speed today compare to C++?

b. Would it be possible to create a modern AAA title using Java?

c. In what areas specifically is Java slower than C++, if at all? (i.e. Number-crunching, graphics, or just all around)

Is Java now considered a compiled language or interpreted language?

What are some major shortcomings of Java that have been addressed since the early days?

What are some major shortcomings of Java that have yet to be addressed?

Edit:

Just for clarification purposes I'm not making this Java vs C++, obviously on average c++ will be a little faster than Java. I simply need something to compare Java to in terms of maturity as a language at this point in time. Since c++ has been around forever I thought I would be a good point of comparison.

答:
Garbage collection is the big thing. Every so often, GC will lock out everything else for several hundred milliseconds (depending on the size of the heap), and do a major collection. This is fine if you do not have any timing constraints, but if being late means failure, this is a show stopper. You can spend the money for real time Java, and a real time OS, but you can simply use GCC and standard Linux and you will not have these problems.

Without the unpredictable random pauses, Java is probably fast enough for most things these days.  And if you spend months tweaking your GC settings and such, maybe, just maybe, you can get it to work long enough for teh customer to cut you a check.

Title: A modern review of Java


问:
Animated requirements analysis flows with PPT or other software?
I've seen people do neat little PowerPoint shows that show data flowing in and out of a system that they use to wow a customer.

Is this something you've done before? like show data in from source 1 and out to source 2?

I've used mockups and DFD's but never presented anything in motion and I wonder if that adds value or ethos.

答:
Data flowing into and out of a system are usually called Context Diagrams. I can't see that this is very attractive to customers but they are very good specially in projects where data integration is considered and ETL/DW projects.

You could also use DFDs to show the same information, however, DFDs are not common. They were very popular with batch systems.

The questions here is what do you want to show? If you are showing a process flow then use BPMN or UML Activity Diagrams. If you are showing integration then Context Diagrams or DFDs will do. If you want to show a work flow, then a UML Activity Diagrams or BPMN. There are other tools for showing other aspects of requirements too.

What you want to make sure of is to get feedback and communicate with customer. Some customers want text, most love simple pictures. You challenge is to communicate accurate information although there is no perfect tool.


问:
Need advice on which route I should take for porting app from Android to iOS
I have developed this android application  and I am looking to port it to iOS.

My questions are:

1) I am planning to finance the iOS development with the money earn't from the android sales which is about $200 at the moment. Would it be reasonable to get the project done for this amount even if it is outsourced to elance or odesk etc?

2) I have heard the code quality for outsourced iOS projects to be bad, I dont want any memory leaks and crashes because of overflows etc.

3) I currently dont have a full time job so I can technically do the project myself, however I dont have a apple pc or iPhone (dont really want to get them either).

I know C pretty well but I haven't really released a major C project that must be 100% stable. How many hours to learn iOs and do the port? And would it be worth my time taking into consideration that if I do enjoy it I may get into it fulltime.

4) What would the demand be like for someone that can do Android and iOS?

Thanks

答:
1. Can you get someone to write the iOS version of your app for $200-ish? No. Or, if you can, good luck with that. We don't know anything about how complex your app is, but most any app that people will be willing to pay even $0.99 for will require more than 20 hours of work (usually a lot more). That means that you'll be offering less than $10/hour. The going rate is significantly higher than that.

2. Is code quality poor when you outsource? That will naturally depend on who you're dealing with, but I don't think you get to be picky for < $10/hour.

3. Don't have or want a Mac, but is it worth developing myself? If you want to write an app that you'll submit to the App Store, getting a Mac will be your first order of business. Look at a Mac Mini, possibly used, if you want to save money. Learning iOS development will require an investment of time that's significantly greater than your investment in hardware. How long it'll take depends on you, what you already know, etc. In terms you can probably relate to, you're looking at an effort similar to that required to learn Android development.

4. Market for iOS and Android developers? Mobile development is definitely a hot industry right now, and people who can do both well are a rare commodity. There's a lot to know, though, and you're fooling yourself if you think you can jump in easily. In addition to being able to build apps, you'll also need to know something about building the infrastructure that drives the most useful apps.


问:
What are the development procedures on large web applications?
I am interested in learning of the different procedures and environments it takes to maintain a large application. For example, in my case I use a CentOS local server, where I develop my applications and I use a version control system on some applications, then I upload it to my host-gator account and launch it live.
It is a very simple procedure and at the moment that is the only one I know. I have only worked as a freelancer, so I would be interested in the procedures and environments of large tech companies.

What are the general do's and don'ts of development for large app? Best practices?

答:
First and foremost you need a layered architecture design for large applications.
This is going to help with maintenance the application, as well as making future changes much easier to handle for you and your development team.

Below is a basic three tired application example

The data layer manages the physical storage and retrieval of data

The business layer maintains business rules and logic

The presentation layer houses the user interface and related presentation code.

I would also decided what SDLC (Software Development Life Cycle) you are going to implement and stick with it.

Make sure you are consistent with documentation in the event a developer leaves. (The replacement will greatly appreciate this)

These are just some basic fundamentals.  I would do a search on Enterprise applications and best practices that are associated with developing and deploying them.

OwnerDisplayName: Rick Rhodes

OwnerDisplayName: jdross


答:
Microsoft's Patterns and Practices and Patterns of Enterprise Application Architecture by Martin Fowler would be my suggestions for starting points.

Something to consider is what are you meaning by large?  Would Google, Amazon.com, Facebook or Twitter be considered large or are they too super-sized for what you mean?

Title: What are the development procedures on large web applications?

Body:
I am interested in learning of the different procedures and environments it takes to maintain a large application. For example, in my case I use a CentOS local server, where I develop my applications and I use a version control system on some applications, then I upload it to my host-gator account and launch it live.
It is a very simple procedure and at the moment that is the only one I know. I have only worked as a freelancer, so I would be interested in the procedures and environments of large tech companies.

What are the general do's and don'ts of development for large app? Best practices?

OwnerDisplayName: JB King


答:
The short answer is no, it's not correct.

starts reasonably correct (each Actor at least potentially executes as an independent thread), but then largely goes off the rails. There's nothing about the model that makes lots of threads work well -- that's up to the implementation. At most, the ease of creating lots of threads puts pressure on the implementation to provide efficient threading. At least as far as the model cares, any resemblance between actors and objects is mostly coincidental. "Object" carries fairly specific implications about how you combine code and data. An actor will generally involve both code and data, but implies little about how they're combined (other than the fact that the only data visible to the outside world is messages).

The usual way of describing the interaction is as message sending, yes. I don't have a citation handy, but somebody proved quite a long time ago that mechanisms like C++ virtual functions are isomorphic to message sending (as virtual functions are normally implemented, you're using an offset into a vtable -- but if you sent an offset into a table of messages instead, the effect would be the same).

It's not quite that simple. If you can find a copy, Henry Baker (with somebody else whose name I don't remember right now) wrote a paper about the rules necessary for data consistency in the Actor model.

"Better" is highly subjective at best. Some problems are highly parallel in nature, and really do involve a large number of essentially autonomous entities, with minimal interaction that's primarily asynchronous. When that's the case, the actor model can work very well indeed. For other problems, that's really not the case. Some problems are almost entirely serial in nature. Others can be executed in parallel, but still require close synchronization between those actions (e.g., essentially a SIMD-like mode, where you execute one instruction at a time, but each instruction acts on on a large number of data items). It's certainly possible to solve both of these types of problems using the actor model -- but for such problems, it often involves a fair amount of extra work for little or no gain in return.

Title: Is my description of the actor model right?

Body:
If I understood, the actor model is just like the object model, but with a few differences:

EVERY object spawns it's own separate thread and its not a problem even when you have thousands of objects.

Actors don't interact by calling functions and getting return values but instead by sending and receiving messages.

If you don't violate that model your app will be using concurrency to its full power without any risks of race conditions.

Everything you can do in OO you can do using actors but better, the problem being that everything we coded in the last years was OO based - but a transition is imminent.

So for instance, suppose I have to define 3d vector class/actor, create two instance and call a sum operation on them.

OBJECT ORIENTED:

```<code>class V3d {
   constructor V3d(x,y,z) //bla
   float x,y,z;
   function sum(V3d b)
   {
      return V3d(x+b.x,y+b.y,z+b.z);
   }
}

//using:
mySum = V3d(1,2,3).sum(V3d(3,2,1)) //creates 2 instances, sum, returns instantly
drawPoint(mySum) //uses the result
</code>```

ACTOR MODEL:

```<code>actor V3d
{
    constructor V3d(x,y,z) //bla
    float x,y,z;
    loop
    {
       receive 'sum',b:V3d :
           send(caller,'sumResult',V3d(x+b.x,y+b.y,z+b.z))
    }
 }

//using:
send(V3d(1,2,3),'sum',V3d(3,2,1)) //creates 2 instances, send to the first one a request to sum with the second one

loop
{
   receive 'sumResult',result:
      drawPoint(result) //receives result and draws it
}
</code>```

Is that it? Or am I completely wrong?


问:
Should I get a Math bachelors and then go into Computer Science?
This is my first question. I love Mathematics; I love the logic and the problem solving. At the same time, I enjoy Computer Science and hope to go into Artificial Intelligence research after I get my Bachelors degree, i.e pursue a PhD in Computer Science. Are there any advantages of having a firm grasp of Mathematics to studying Computer Science? Also, would I be at a disadvantage in getting a Bachelors in Mathematics instead of Computer Science when applying for graduate school to study Computer Science, particularly at institutions with high quality research infrastructure, like MIT and Stanford? Also, in reference to the first question, could you please tell me the advantages of a solid grasp of Mathematics, if there are any?

Thank you.

答:
If your eventual goal is to study computer science, then I think you should study computer science in college.  Why not?

I'm not saying you shouldn't study math too, though.  Several of my friends are double majoring in math and computer science or majoring in computer science and minoring in math.  Rigorous computer science programs typically require you to take a large amount of math anyways, so many of the math requirements are knocked out.  Further, you should realize that many upper division computer science courses are very proof based and "mathy".

But certainly, someone who studied computer science in college is more prepared for a computer science PHD than someone who didn't.  Good computer science programs are very (very) difficult, and you'll be behind a lot of people who spent four years focused on these difficult concepts.


答: You might also consider, if your university offers it, an Applied Math program or degree. These often seem to provide a happy medium - a slightly more math-centric education, but exposure to many problems and research from other disciplines, including CS.</p>

Title: Should I get a Math bachelors and then go into Computer Science?

Body:
This is my first question. I love Mathematics; I love the logic and the problem solving. At the same time, I enjoy Computer Science and hope to go into Artificial Intelligence research after I get my Bachelors degree, i.e pursue a PhD in Computer Science. Are there any advantages of having a firm grasp of Mathematics to studying Computer Science? Also, would I be at a disadvantage in getting a Bachelors in Mathematics instead of Computer Science when applying for graduate school to study Computer Science, particularly at institutions with high quality research infrastructure, like MIT and Stanford? Also, in reference to the first question, could you please tell me the advantages of a solid grasp of Mathematics, if there are any?

Thank you.


答:
Should Competent Programmers be "Mathematically Inclined"? would be the Coding Horror blog entry about Math and programming that may be worth a read.

I hold a double Honor's Bachelor of Mathematics where Computer Science was one of my majors, for what it is worth.  Concrete Mathematics: A Foundation for Computer Science would be a book recommendation if you want how Math can tie into Computer Science topics.


问:
Costs of Switching to Java
I'm a C# dev and I have plans of starting to develop apps targeting Android, which of course means Java. I have heard good things about Mono for Android and the idea of reusing my skill set is appealing, however the licensing cost (for now) is a bit prohibitive to me. On the other hand, from what I can see, Java is very similar to C#, so I'm predicting that shifting my skills to it will be more or less easy (easier than shifting to Obj-C I guess).

Am I wrong in assuming that?

Are there any hidden costs I'm blind to?

答:
You should look a bit closer at MonoDroid or MonoTouch before you dive in and pay the fees.

Some people here seem to be spruiking it as a bit of a silver bullet, without telling you about the details.

One thing you'll want to look at is the fact that your user interface code and any code that controls the phone, will not be portable, only your "business rules" code will be. Have a look at the Xamarin FAQ

I have a MonoTouch or WindowsPhone 7 application, can I just rebuild it with Mono for Android and target Android?

Although you can write the user interface and phone controlling code in C#, you will still have to do this according to the platform specifics and so this code is not portable across platforms. This means you still have to learn the platform specifics for each platform whether it be through C# using MonoDroid, or the native Java calls for Android.

Here are a few things to consider:

C# syntax is almost identical to Java.

You will have to learn, and code for, the Android platform specifics (UI and phone control) whether you use C# through MonoDroid, or using the native Java API. Doing this through Java should not be a big jump for you because of the similarities in syntax with C#.

How much of your code can you decouple cleanly from your UI and phone control code, to pure 'business rules'? That is the code that will be portable across Mono projects and is where you will get your productivity benefits.

Although you'll have access to some of the advanced language features of C# that Java doesn't have, when developing for Android, you will still not be able to do more than you can with the native Java API.

In reference to the previous point you'll have to consider the possibility of the converse. That is the possibility that MonoDroid will not implement some of the native features of Android, or that there will be a delay between new Android releases and the implementation in MonoDroid, and how important those sorts of delays or missing implementation will be to you.

MonoDroid will add about 4.4MB to your application size. That is not such an issue for Android 2.2 and higher, because you can install apps to the memory card and the market share of Android 2.1 and below is getting smaller, (although I still have a 2.1 phone). 4.4MB + is not such a big deal over wi-fi, but could be slow over some phone networks.

Don't get me wrong, I'm not criticising Mono, MonoDroid or MonoTouch here, or saying don't go that route. I think they are brilliant projects and some people are obviously finding them useful. I felt compelled to answer though because there are some very one-sided opinions here that fail to point out a number of things you might want to consider.

Title: Costs of Switching to Java


答:
Not sure if you're talking about "how to get your app from development into production and what systems or platforms are involved? " From my experience there are at least three types of systems involved, there can be many more depending on the number of test stages and teams having to perform test on the app.

A local dev environment where the developer can build up and tear down the app as much as he likes

An integration test platform (preferably a virtual box) where your builds are deployed to so testers can see how the developed pieces are fitting together

An acceptance test platform which should be an exact copy of your production hardware, so you can perform tests on it as if it were a production environment

A production environment, this is the environment where nothing gets deployed to unless all previous steps have been signed off on. This guarantees that all parties involved are aware of the transition.

These are just the platforms, usualy there is also a script required for setting up the data-tier of your app, again this may be virtualised or deliverd on the real hardware. It can be as simple as creating a new database from scratch, copying a file or migrating existing data into a new shape.


问:
Has anyone ever claimed a warranty on an SSL certificate?
SSL certificates often advertise varying amounts of warranties or guarantees, for example $500,000 or $1m.

My question is, in the history of SSL, has anyone ever actually successfully claimed one of these warranties?  Has there ever been a case? If not, is it fair to assume they are just marketing gimmicks?

答:
No they should not be marketing gimmicks!

Certificates are not issued to just any one.

Companies that are trusted issuers, do research on someone requesting a certificate that he indeed is who he claims and that he has a legitimate business.

If for example you connect to a website that is fraud but has obtained a certificate from Verisign (mentioned as an example), I would expect that you can do many legal actions against the (both site and issuer).

SSL is based on trust which is a very thin concept when it comes to computer security.

If the trusted issuers are not doing their job good enough, then security goes down the drain.

Personally I don't know if there is any historic example on this (I hope there isn't any)


答:
The warranty is kind of misleading, actually, because it's not issued to the purchaser of the certificate -- it's issued to the users of the site. So say you give your credit card details to a website that's verified by a CA that offers a warranty and the (fraudulent) site takes money from you, then you can use the warranty to claim back the money you lost.

In reality, though, this almost never happens. It's extremely rare (though not entirely unheard of) for a CA to give out a certificate to a fraudulent entity. And when it does happen, it's pretty much then end of that CA -- all trust is lost and it cannot continue to conduct business. DigiNotar declared bankruptcy within a month of that scandal.

Note that it also don't cover "phishing" sites. So if you give your credit card details to "paypal.com.scammer.org" then, even though that domain might be verified by a CA, that's still your own fault. It would only be if a CA erroneously gave a certificate for "paypal.com" to someone who is not PayPal.

Title: Has anyone ever claimed a warranty on an SSL certificate?

Body:
SSL certificates often advertise varying amounts of warranties or guarantees, for example $500,000 or $1m.

My question is, in the history of SSL, has anyone ever actually successfully claimed one of these warranties?  Has there ever been a case? If not, is it fair to assume they are just marketing gimmicks?


问:
Can you learn functional programming in C?
As a result of the comment discussion here, I wonder whether you can learn Functional Programming in C? </p>

答:
I think that the tools you use influence your learning a lot. It's almost impossible to learn programming concepts for which the programming language you use does not provide the means to make use of. Sure, you can always learn a few things, but you cannot learn it properly.

But that is academic anyway, because, as Martinho says in his comment, even if you could learn functional programming, you should not try to do that, because there are languages where this is much easier.


问:
How good does a well-rounded programmer need to be with bit-wise operations?
I have been browsing some OpenJDK code recently and have found some intriguing pieces of code there that has to do with bit-wise operations. I even asked a question about it on StackOverflow.

Another example that illustrates the point:

```<code> 1141       public static int bitCount(int i) {
 1142           // HD, Figure 5-2
 1143           i = i - ((i >>> 1) & 0x55555555);
 1144           i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
 1145           i = (i + (i >>> 4)) & 0x0f0f0f0f;
 1146           i = i + (i >>> 8);
 1147           i = i + (i >>> 16);
 1148           return i & 0x3f;
 1149       }
</code>```

This code can be found in the Integer class.

I cannot help but feel stupid when I look at this. Did I miss a class or two in college or is this not something I am supposed to just get? I can do simple bit-wise operations (like ANDing, ORing, XORing, shifting), but come on, how does someone come up with a code like that above?

How good does a well-rounded programmer need to be with bit-wise operations?

On a side note... What worries me is that the person who answered my question on StackOverflow answered it in a matter of minutes. If he could do that, why did I just stare like deer in the headlights?

答:
I wouldn't say you need it unless the work you're doing is related to:

Audio processing

Video processing

Graphics

Networking (particularly where packet size is important)

Huge amounts of data

Storing permissions in unix style flags is also another use for it, if you have a particularly complex permissions model for your system, or really want to cram everything into a single byte, at the expense of readability.

Aside from those areas I would count it as a big plus if a developer/senior developer could demonstrate bit shifting, and using | & and ^ as it shows an interest in the profession which you could say leads to more stable and reliable code.

As far as not 'getting' the method on first sight, as mentioned you need an explanation of what it's doing and some background. I wouldn't say it's related to intelligence but how familiar you are with working with hexadecimal on a day-to-day basis and recognising problems certain patterns can solve.


答:
The same reason that you don't write your own hashmap, or smart pointer, or threading library.  Its much better use of your time to use something that is already written and debugged that do it yourself.  There will always be certain people and certain situations where the best option is to roll your own, but these are rare.  Probably more rare than most people accept.

For parsers in particular, it is fairly easy to write a parser that works most of the time.  It is tricky to write one that work correctly for all input, including malformed input, and is easy to modify.  Its also tempting to impose some strange syntax on the input to make it east to parse, at the expense of making it harder to create input files.

For C++, I've had good results with Boost::spirit.  Its a parser framework that, through the use of lots of template magic, lets you embed BNF directly into your C++ code.  It has a bit of a learning curve, but once you wrap your mind around it, it make it easy to construct parsers for complex languages.

Title: Why are parser generators used?

Body: I saw some projects require BISON to generate C++ code. What is the advantage of having BISON/Yacc etc. generate C/C++ code instead of writing it yourself?</p>


答:
You shouldn't learn functional programming in C, but in a strict functional language (Haskell, Caml, Erlang, etc . . .).

If you are new to functional, you will never really get it with a non functional language. More likely, you will train yourself to do what you think is functional programming and learn things the wrong way. And it is always harder to « relearn » things the right way than learnt them the right way at first.

Anyway, I think doing functional in C is a good exercise for someone who already knows functional. Because that person will learn what's going on behind the hood - what the computer is really doing.

Title: Can you learn functional programming in C?

Body: As a result of the comment discussion here, I wonder whether you can learn Functional Programming in C? </p>


答:
C can be hacked to offer some functional concepts:

Closures via FFCALL,

Nested functions via a GCC extension

This StackOverflow question will tell you more. But although it seems possible to do functional programming (or a large subset of) in C, hacks and compiler extensions and whatever are not the best way to learn of a concept.

To actually learn functional programming your best bet is one of the prominent functional programming languages like Lisp and its dialects (Clojure, Scheme), Erlang, and Haskell. Any one of those are perfect tools that work within the functional programming mindset.  F# is also a good candidate if you have a .Net background, but it's a multi paradigm language, not strictly a functional programming language.

As tdammers notes in the comments:

Actually, LISP, clojure and scheme are also multi-paradigm; Haskell,
  while being pure and default-lazy, also allows for imperative
  programming while in a monadic context, and it has extensive support
  for concurrent processing. All of these have mechanisms that implement
  large parts of the wisdom gathered in the OOP world - encapsulation,
  inheritance, single-responsibility, composition, etc. It's not so much
  about whether a language ALLOWS other paradigms; it's about which
  paradigm forms a language's starting point.

To the best of my knowledge Lisp and its dialects and Erlang are better candidates than F# because they encourage functional programming over other paradigms, what tdammers beautifully states as a language's starting point. F# does encompass functional programming but does not encourage it over its other supported paradigms, imperative and oo programming.


答:
Obviously you can do functional programming in C. In theory, you can also learn functional programming principles in C, but the language doesn't make it easy.

I assume you have at least a bit of a background in OOP; if you do, you should be aware that OOP can be done in C, including polymorphism, getters/setters, visibility rules, etc. etc., but it's fairly painful to do so, and you need to know both OOP and C inside-out to pull it off. It's much the same with FP.

What you should be doing is first learn a functional programming language (most of them have surprisingly simple syntax rules; it's not the syntax that makes them hard to learn), and then let your newly-acquired wisdom influence the way you write C.

As per request, a few things you can learn from FP and then apply in, say, C, C++ or Java:

Avoid state, especially shared mutable state

Appreciate pure functions

Appreciate lazy evaluation

Being able to model in terms of verbs rather than nouns

Being able to approach problems recursively as well as iteratively

Using higher-order functions

Thinking of functions as just another kind of value, that you can pass around and combine with other values

Using first-class functions as an alternative for object-based polymorphism


答:
You cannot learn all aspects of functional programming in C. But surely you can start functional style programming with any imperative language. These starting bits are- "How to keep things pure while programming." And it can be done C also. Check this blog post for details-

http://www.johndcook.com/blog/2011/07/24/get-started-functional-programming/


问:
What is the difference between "good" designers and "great" designers?
While reading this wikipedia article, Brookes has told that there is a difference between "good" designers and "great" designers.  What is the difference between them? How can I decide if a designer is good or great?</p>

答:
After The Mythical Man Month came out, Fred Brooks released another collection of essays under the title The Design of Design. There's a lot of information in this book about how to design, the design process and methodologies, what makes a good design, methods of collaboration in designing. There are also case studies that range from designing a beach hours to the IBM Operating System/360.

A few passages stand out as being especially relevant to your question:

A chief service of a designer is helping clients discover what they want designed.

There's also an entire essay devoted to where great designers come from. This mentions teaching design in addition to performing prescribed experiments or tasks, co-op programs to provide real-world, practical experience as part of education, managing them to prevent distractions or managers who do things that stifle creativity, and continued study of things considered to be good designs or good practice.

As @Caleb notes in the comments, The Design of Design was published in 2010. No Silver Bullet was written in 1986, and The Mythical Man Month was published in 1975, updated in 1982, and republished with extra essays in 1995 (which is when the No Silver Bullet and commentary on it was added to the book). So there is almost a quarter century between the essay you are referring to and the release of the book that contains the essays that I'm citing.

It should also be noted that The Design of Design, as far as I can tell, doesn't identify the date of writing of any of the individual essays, although some do cite works as late as 2008 and 2009 as resources/references. I'd have to do further research to find out when "What's Wrong With This Model?" and "Where Do Great Designers Come From?" were written.


答: Great designers can make 2 + 2 = 5. They change the art of the possible.</p>

Title: What is the difference between "good" designers and "great" designers?

Body: While reading this wikipedia article, Brookes has told that there is a difference between "good" designers and "great" designers.  What is the difference between them? How can I decide if a designer is good or great?</p>


问:
Is COBOL still worth learning?
Does learning COBOL still make sense?</p>

答:
I can tell you how I "learned" it:

I was employed to work with it, having no clue what it was about, and had no difficulties learning it overnight.

So, if you need it you can learn it. No need to overload yourself with useless knowledge.
There is nothing interesting in it or its engagements unless you have real practical need for it.

The generic answer: learn coding principles, not their specific implementations (like languages, etc.)

Title: Is COBOL still worth learning?


问:
Is "truthiness" a legitimate programming term?
SO has quite a few questions using the word "truthiness" to mean the truth value of an expression, when evaluated as a boolean, regardless of its original type. It's very useful in dynamic languages.

So my question is, is this a real term, and if so were we using it before Stephen Colbert made it popular? Or did we just adopt it afterward? In that case, what is the correct term with the definition I gave above?

答:
It's a term that is known and acceptable within certain circles (for example JavaScript Boolean comparisons). As such, it is a "real" term. By virtue of being used it becomes legitimate.

All such terms come from somewhere - they don't pop into the world fully formed and with an established meanings (for example - software bugs didn't have the meaning they have now when electronic computers just started existing).

Whether it is academically accepted - that's a different matter. As far as I know there is no formal term for this fuzzy meaning of boolean values..


问:
When I should I use message passing over shared memory?
I know a little about how to use message passing and shared memory, but I still don't know when to choose one or another.

Can you tell me about their traits (not the implementation)?

答:
The quick summary:

Shared memory parallelism (e.g., OpenMP) is strictly more powerful than message passing (e.g., MPI) as you can simulate message passing with a shared memory system but not vice versa. However, it's also much more difficult to scale up the shared memory model (it needs very elaborate and expensive hardware once you go to more than one system board) and it is also much more difficult to analyze due to the number of possible interactions. The message passing model is considerably simpler to understand — you just have a stream of messages coming in that you want to process — and it maps much more nicely to what is actually possible with networks so it obviously can scale up massively.


答:
From the point of view of how you actually design systems with them, they are in some sense mathematical duals, as this adage by Joe Armstrong, one of the original designers of Erlang, nicely demonstrates:

With shared memory, you communicate by sharing data, with messaging, you share data by communicating.

Title: When I should I use message passing over shared memory?

Body:
I know a little about how to use message passing and shared memory, but I still don't know when to choose one or another.

Can you tell me about their traits (not the implementation)?


答: Truthiness has been a word long before Stephen Colbert has used it. I could swear I've seen it in logic/AI papers, and in some physics papers, too, but can't seem to find a reference to one that predates Stephen Colbert's show.</p>

Title: Is "truthiness" a legitimate programming term?

Body:
SO has quite a few questions using the word "truthiness" to mean the truth value of an expression, when evaluated as a boolean, regardless of its original type. It's very useful in dynamic languages.

So my question is, is this a real term, and if so were we using it before Stephen Colbert made it popular? Or did we just adopt it afterward? In that case, what is the correct term with the definition I gave above?


问:
'Recommended' file length and line widths
When it comes to line length, Google's Closure Linter, Prettier, etc recommend not exceeding 80 characters per line.

Can anyone recommend the max number of lines per file?

I think most would consider a file with 100 pages of code, or 1000 lines to be too large

答:
There is no such thing, and if there was, it would be highly dependent on what language you were using (doing the same thing in assembler versus C# or Java for instance).

For the higher level languages, you can see this SO discussion. For Java/C#, 10-20 lines per method is what Bob Martin recommends as a maximum. There is no discussion regarding files, as it is not relevant and depends on what the class is supposed to do.

In regards to the 80 characters per line limit - this is a throwback to the days of punch cards. Having said that, when lines grow too long, readability suffers.

ContentLicense: CC BY-SA 4.0


答:
Line length should be such that you do not have to scroll screen to see whole line. That depends on monitor size and resolution.

Methods and functions are best if can fit one screen.

Files shouldn't be too long. The best are short files, where it is easy to understand the class, and the implementation.

Once I worked on a project that had a 10 klines file. It was like reading a very complex book. Do I need to tell how many problems that implementation caused?

Title: 'Recommended' file length and line widths

Body:
When it comes to line length, Google's Closure Linter, Prettier, etc recommend not exceeding 80 characters per line.

Can anyone recommend the max number of lines per file?

I think most would consider a file with 100 pages of code, or 1000 lines to be too large


问:
How to trim emails for just the body, when using email as input to an external system?
When an application allows emails to be sent to it to either reply to comments or add todos, trimming those emails for just the relevant text becomes a problem, since there are many different standards.  Many times you'll end up seeing things like this:

Hey Joe, good to hear from you.  Let me know when you'll be back in town.

  Posted by Bob, 30 minutes ago

I'll be back on the 13th.

--

  Sincerely,

  Joseph R. Roberts

  Senior Partner

This communication is confidential and is property of Whatever Law Firm.

  Posted by Joe, 10 seconds ago

Signatures are probably the most difficult to get rid of, and quoted text the easiest.  I imagine any comprehensive strategy for trimming will be multi-facted, and ideally, learning.   I think a good system should:

Remove quoted body

Remove quote headers ("On 15 October, Joe wrote:")

Remove signatures

Preserve anything that was typed manually.

What steps would a system need to take to accomplish this, and what pitfalls should it be aware of?

This answer is a good example of a useful answer to a similar question

答:
Properly formatted signatures are easy to identify by the '-- ' (dash dash space) line which precedes them.  Good luck finding many.  Although netiquette requires signatures to be no more than three lines many organizations have standards signatures and disclaimers which far exceed this.

Properly formatted quoted text will begin with one ore more '>' characters.  This assumes that you have a plain text copy of the body to extract data from.

HTML formatted messages may have CSS styling which will help do what you want.


答: I try to keep classes and methods short, but don't worry so much about line length.  In these days of wide screens and long identifiers, I think eighty characters is far too few.  It takes some work to break statements so they are easily read, and with an eighty character limit, it happens quite frequently.  I think about 120 or 130 columns per line is more reasonable.</p>


答:
File and line lengths are measurements of secondary effects of complexity and as such are highly variable. What you should aim for is code without unnecessary complexity, not a certain maximum line count.

Long files tend to indicate that methods, subroutines or classes are overly complex (doing too many things, not sufficiently factored, etc)

Long lines tend to indicate that expressions are overly complex.

They are smells that indicate a potential code issue, not well defined target metrics.


问:
Algorithm refresher. Why is heapsort an insort algorithm?
I can not see why the heapsort is considered an inplace sorting algorithm.

I mean an extra data structure populated with the elements of the array to be sorted i.e. a heap, is used to assist in the extraction of the min value and the sorting process.

So may be I am misunderstanding the definition of inplace here?

But insertion sort for example it is obvious that it is inplace algorith, i.e. no extra memory needed for the elements.

So why is it considered inplace?

答:
In computer science, an in-place algorithm (or in Latin in situ) is an algorithm which transforms input using a data structure with a small, constant amount of extra storage space. The input is usually overwritten by the output as the algorithm executes. An algorithm which is not in-place is sometimes called not-in-place or out-of-place.

Wikipedia - In-place algorithm


答:
It is considered in place because it's space requirements are negligible (constant or none at all if you're using bitwise operations to swap items). MergeSort, for example, is not in place because the input set is not modified in each iteration of the search example.

The best way to illustrate the differences between in-place algorithms and out-of-place algorithms is probably to look at the following C/C++ string reversal code that does it in place (from K&R):

```<code>void reverse(char s[])
{
      int c, i, j;

      for (i = 0, j = strlen(s)-1; i < j; i++, j--) {
         c = s[i];
         s[i] = s[j];
         s[j] = c;
      }
}
</code>```

If you were, for example, reading the input string from the end and placing the characters in another buffer, it would be an out-of place string reversal algorithm.

Title: Algorithm refresher. Why is heapsort an insort algorithm?

Body:
I can not see why the heapsort is considered an inplace sorting algorithm.

I mean an extra data structure populated with the elements of the array to be sorted i.e. a heap, is used to assist in the extraction of the min value and the sorting process.

So may be I am misunderstanding the definition of inplace here?

But insertion sort for example it is obvious that it is inplace algorith, i.e. no extra memory needed for the elements.

So why is it considered inplace?

Body:
It is considered in place because it's space requirements are negligible (constant or none at all if you're using bitwise operations to swap items). MergeSort, for example, is not in place because the input set is not modified in each iteration of the search example.

The best way to illustrate the differences between in-place algorithms and out-of-place algorithms is probably to look at the following C/C++ string reversal code that does it in place (from K&R):

void reverse(char s[])
{
      int c, i, j;

      for (i = 0, j = strlen(s)-1; i < j; i++, j--) {
         c = s[i];
         s[i] = s[j];
         s[j] = c;
      }
}

If you were, for example, reading the input string from the end and placing the characters in another buffer, it would be an out-of place string reversal algorithm.


问:
Is the "Software Project Survival Guide" methodology compatible with Agile ones?
I'm considering re-reading Steve McConnell's excellent "Software Project Survival Guide" and perhaps applying it verbatim to my next project. However, one thought struck me: the book was written in 1998, before Scrum and other agile methodologies became popular.

Are the teachings of this book still relevant in light of the newer methodologies? Or are they compatible? If the latter, do you have any experience of agile projects run according to McConnell's book(s)?

答:
In general, yes, the tips in the book are applicable to any software project. In the "Preliminary Survival Briefing" section of the book, Steve McConnell writes:

The plan described in the following chapters has been crafted to
  address the most common weaknesses that software projects face. It is
  loosely based on the "key process areas" identified by the Software
  Engineering Institute (SEI) in Level 2 of the SEI Capability Maturity
  Model. The SEI has identified these key processes as the critical
  factors that enable organizations to meet their schedule, budget,
  quality, and other targets. About 85 percent of all organizations
  before below Level 2, and this plan will support dramatic improvements
  in those organizations. The SEI has defined the key process areas of
  Level 2 as follows:

Project planning

Requirements management

Project tracking and oversight

Configuration management

Quality assurance

Subcontract management

This book addresses all of these areas except subcontract management.

The Capability Maturity Model Integration (CMMI) has superseded the Capability Maturity Model, and with CMMI comes process areas for integrated product development teams, additional requirements engineering and risk management activities, which further enable achieving agile development within the CMMI framework. However, that doesn't mean that adhering to the CMM prevents agile methods.

You specifically mention staged software delivery and that it appears to be counter to the methods used in Extreme Programming and Scrum. In an iteration or sprint, you actually do go through each stage - requirements gathering and prioritization, estimation, work breakdown, design, implementation, testing, and release. In more traditional agile methodologies, those are extremely short iterations of 2 weeks, while in the spiral model, they could be 6 months or longer. The differences are how much you can do in a particular iteration and how you plan and budget that work.


答:
I mean an extra data structure populated with the elements of the array to be sorted i.e. a heap, is used to assist in the extraction of the min value and the sorting process.

No. The array is transformed to conform to the heap constraint without using more than O(1) extra memory. (In fact all you need is extra memory sufficient to hold one element of the array, for swap purposes, plus a boolean or two and a loop variable or two).

Ok, on a technicality it may be that heapsort is usually explained as using a separate heap, but it's perfectly possible to implement it in-place.


问:
How to handle "X" data sets as input
I participated in a coding competition today, and I found that almost all of the command line input our programs needed to receive would start with an integer representing the amount of data sets to follow.  There were 6 different problems, and they all started this way.

For example, one sample problem had:
"Input to this problem will begin with a line containing a single integer N (1 <= N <= 100) indicating the number of data sets.  Each data set consists of the following components:

A line containing a single integer W that specifies the number of wormholes

A series of W lines containing....

etc.
"

Pretty much all the competition problems had this format, with the first integer representing the amount of data sets to follow.

My initial reaction (and the way I tried to solve the problem) was just using a vector of size N, where each element represented a data set.  Trouble is, there are a whole bunch of things in these data sets.  Using this approach often left me with a vector of vector of vectors (maybe an exaggeration but you get the idea) which was very hard to manage.

Another idea was looping through the entire program N times, but this doesn't always seem that applicable.

I realize this is a vague question, but that's because I'm looking for a general solution to this type of problem.  What is the best approach to handling this type of input?

答:
I don't think there's another option other than the ones you mentioned. You either:

a) iterate through all the the data sets and work on them as they come up

or

b) store everything (in some suitable data structure, like an array, hash table, tree, etc) and work on it later.

Title: How to handle "X" data sets as input


答:
If, as you say, one really needed an extra structure to build the heap then heapsort would indeed NOT be an inplace sorting algorithm.

However, this is not the case. You can build the heap on the very same array you wanna sort, and after that you apply the heapsort algorithm, so it sorts inplace.


答:
If you want to know what Fred Brooks was saying in No Silver Bullet you should read the paper itself and not a Wikipedia article about the paper. Brooks isn't specific as to the the precise difference but he nevertheless makes it clear that the distinction will be pretty easy to spot:

The differences are not minor--they are rather like the differences
  between Salieri and Mozart. Study after study shows that the very best
  designers produce structures that are faster, smaller, simpler,
  cleaner, and produced with less effort... The differences between
  the great and the average approach an order of magnitude.


答:
You may be missing the fundamental understanding that an array can be used to specify the layout of a tree.

Suppose you have a binary tree, and an interior node is at index i of the array. Then the array index of the parent and children of that node can be found by:

```<code>Parent(i) = floor(i/2)
Left child(i) = 2i
Right child(i) = 2i + 1
</code>```

See:

http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/Sorting/heapSort.htm

Since the heap can be kept and organised entirely in an array, then heapsort can run in-place by moving elements around inside the input array. Indeed, the heap is built and manipulated using the original input array.

Body:
You may be missing the fundamental understanding that an array can be used to specify the layout of a tree.

Suppose you have a binary tree, and an interior node is at index i of the array. Then the array index of the parent and children of that node can be found by:

Parent(i) = floor(i/2)
Left child(i) = 2i
Right child(i) = 2i + 1

See:

http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/Sorting/heapSort.htm

Since the heap can be kept and organised entirely in an array, then heapsort can run in-place by moving elements around inside the input array. Indeed, the heap is built and manipulated using the original input array.


答:
A file should be short enough that you can find any function or method without scrolling back and forth multiple times hunting for it, or having to remember a search string.   The metric I use is the amount of time I spend looking for code within a file versus reading it.  If that becomes noticeable, it's time to repartition the file or class.

A good size for a basic code block is short enough, both in width and height, that you can project the guts of it during a group code review, and have it all fit without the font being so small that the guy in the back of the conference room can't read it.  This size also helps if you are ever called to explain some code when all you have with you is a mobile device or tablet.


答:
80 characters!

I remember that I used to see source code files for billing programs about 80 pages and more when I did COBOL. Of course, I can't see that this is near common practice but 80 chars is equally ridiculous.

From a class size view, if you try to apply this suggestion on a typical Customer class that has about 80 properties and 20 methods or so, you will have to break the class into several other ones and make the code very messy indeed.


答:
There are still plenty of legacy system out there written in COBOL. Whether you want to maintain them or port them to other programming languages, it is still worth learning COBOL.

No matter what it is, some knowledge in multiple programming languages will be a plus because the knowledge you have allows you to choose a programming language or approach for different project needs. You can use your knowledge in programming languages to construct better, cleaner and more efficient codes and to avoid pitfalls.

Title: Is COBOL still worth learning?

Body: Does learning COBOL still make sense?</p>


问:
Is there any well known project to VBify C and make C as RAD language?
I have two questions:

Question #1: Is there any well known project to VBify  C? VBify here means to make it as easy as in VB.NET and to make C well supported in IDE just like VB.NET, i.e. with following features: word completion, function's argument description and everything just as with VB.NET development using Visual Studio.

Question #2: Is there any well known effort to make C as RAD (Rapid Application Development) language?

答:
Perhaps you are looking for Visual C++ 2010 Express?

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express

This allows you to do C++ programming, so you "just" need to stay within plain C.


答:
For your first question, any good C IDE should provide that functionality for, at the very least, standard C. I haven't done C programming in a while, doing mostly C++ and Java development, but I would look at IDEs such as NetBeans or Eclipse with the necessary plugins to support C development. Wikipedia also lists a number of other C and C++ IDEs.

As for your second question, language has nothing to do with Rapid Application Development. RAD is a process methodology that emphasizes rapid prototyping over up-front planning and design.  Although not explicitly about Rapid Application Development, Steve McConnell wrote a book about achieving shorter schedules and higher quality products - Rapid Development: Taming Wild Software Schedules. There is one section where RAD is explicitly mentioned, and it's described as "a collection of practices" that "doesn't apply to any kind of unique software".

Title: Is there any well known project to VBify C and make C as RAD language?

Body:
I have two questions:

Question #1: Is there any well known project to VBify  C? VBify here means to make it as easy as in VB.NET and to make C well supported in IDE just like VB.NET, i.e. with following features: word completion, function's argument description and everything just as with VB.NET development using Visual Studio.

Question #2: Is there any well known effort to make C as RAD (Rapid Application Development) language?


答: Have a look at Embarcadero's C++ Builder.  It takes the powerful, easy-to-use Delphi IDE and standard libraries, including the VCL, (the Delphi Visual Control Library, the widget set every other widget set wants to be like when it grows up,) and makes them available to C and C++.</p>


问:
Is it unethical to track app usage through REST API calls?
I am building an app that communicates with my website with ASIHTTPRequest to a PHP-based REST API on the server side.

Naturally, in my app I have different endpoints on the server side, and usually return JSON data.

Is it unethical to log counters on how many times each endpoint was hit?

I'd like to capture how the app was used capturing what endpoint was hit, the user agent, time of day, possibly their IP (to group visits etc).

Should I ask permission to do this?

答:
The only questionable piece of data that you are tracking is IP address. The rest is pretty generic. Any site implementing Google Analytics is tracking pretty much the same thing...without warning.

If you do want to track IP address (or anything else that could make the user personally identifiable), though, you should get permission before doing so.

OwnerDisplayName: barfoon

OwnerDisplayName: Justin Niessner


答:
It should be in your terms and conditions, but you should not have to inform the user.  Technically this is the same as traditional HTTP server log files and running statistics against them.

I would however make sure that it's not possible to identify an individual user from the data as that may violate local or international privacy laws.  They could opt in for that if they wish.

Title: Is it unethical to track app usage through REST API calls?

Body:
I am building an app that communicates with my website with ASIHTTPRequest to a PHP-based REST API on the server side.

Naturally, in my app I have different endpoints on the server side, and usually return JSON data.

Is it unethical to log counters on how many times each endpoint was hit?

I'd like to capture how the app was used capturing what endpoint was hit, the user agent, time of day, possibly their IP (to group visits etc).

Should I ask permission to do this?

OwnerDisplayName: Chris Smith


问:
Why aren't VM languages compiled just once?
(First of all, I should make clear that compilers and virtual machines (aka) are a completely unknown field for me)

As I understand it, every time a Java/C#/... application is run, a VM is invoked and translates intermediate code (bytecode, CIL, etc) to machine instructions.

But why can't this operation done only once - at install time?

答:
It can and often is, at least with .NET applications. See Native Image Generator

a tool that improves the performance of managed applications. Ngen.exe creates native images, which are files containing compiled processor-specific machine code, and installs them into the native image cache on the local computer. The runtime can use native images from the cache instead of using the just-in-time (JIT) compiler to compile the original assembly...


答: Because this prevents them from using many features. For example, how can the JIT generate new generic instantiations from DLLs loaded at run-time? Those DLLs don't exist at install-time.</p>

Title: Why aren't VM languages compiled just once?

Body:
(First of all, I should make clear that compilers and virtual machines (aka) are a completely unknown field for me)

As I understand it, every time a Java/C#/... application is run, a VM is invoked and translates intermediate code (bytecode, CIL, etc) to machine instructions.

But why can't this operation done only once - at install time?


答:
Nothing wrong with server-side tracking of access to your own site. Just don't spy on what the client might be doing that doesn't concern your site.

There's nothing questionable about logging IP addresses either. They can't be resolved to an individual without aid from law enforcement (or some other way to get their ISP to comply). In fact, they are essential if you're ever hit by an exploit and want to file charges.


问:
Choosing the right programmer among a class of undergrads
I am a CS undergrad but I landed a programming job last year and I like it a lot. We are currently 3 programmer in the development section of the company and we have to work with pretty much anything were asked to do. We deal with many different languages and learn them as needed for some quick jobs etc etc.

We want to hire a 4th programmer and I'm asked to suggest some students in my class, a year younger, since I failed a class. I don't really know any of these guys except my teammates which I wouldn't suggest. We don't really want to interview them all so I thought we could make a little challenge to help us choose who to interview. We're in need of someone who understand the business even though they're new to it, and likes to learn new stuff and code. Any idea on a programming challenge or a kind of letter saying why we should take them?

TL;DR: We need a new undergrad programmer, we want the best to come to us without interviewing them all. Any challenge or test you could suggest?

答: The candidate who has written a real program useable by others is the one you want.</p>


问:
Using stock images in open source project
I have started an open source project and would very much like to have a cute and catchy icon to label the project with.  My dilemma is that I have little to no experience designing vector graphics for use in such a project.  To compensate I thought I might purchase a graphic from one of the stock photo service (shutterstock, etc.).

My project produces HTML documentation from Gherkin language files and my intention was to use this icon on the footer of each page for an "output produced by ..." kinda thing.

My question is what implications would it have on my licensed software if I were to use this graphic in it.  I am releasing the software under the Apache v2 license.

答:
If you take a look at Shutterstock's licence comparison table you notice that they pose some limitations on incorporating images into software in their Standard licence:

Incorporated into software as a background image or splash screen:

Standard -- Image may not be reproduced more than 250,000
  times

Enhanced -- no limitation on reproductions

But they deny any use of their images as a trademark, service mark, logo, or other indication of origin (look for the Uses Prohibited by Both Licenses table). It seems that although if you purchase the Enhanced licence there is no limitation on using the image in your software, you can't actually use it in your "output produced by ..." kinda thing, as this probably falls into the service mark or indication of origin category.

So before you look for any incompatibility with the Apache licence, you should probably make sure that your use of the image is valid. Every stock photos service have their own licences or licence schemes, so your best bet is to contact them directly. My best guess is that if your use of the image is 100% valid, there is no incompatibility with most open source licences.

If not, you can always release your software under the Apache Licence and its copyrighted assets that are not part of the software under different licences.


问:
What are questions to test a programmers knowledge of SQL?
What are questions to test a programmers knowledge of SQL? What is the answer to the question? And what would a lack of an correct answer mean in terms of time likely to understand the concept(s) related to the question?

GOOGLED: sql challenge

答:
I only generally sit on interviews for data specialists, so my questions tend to be hard. But one thing I would require of anyone who will be writing SQL is knowledge of joins and when to use a left join vs. an inner join. Anyone who doesn't understand that has no business querying a database in any way shape or form.

Another thing I would do is make sure they understand how to do a GROUP BY and use Aggregate functions.

And the differnce between UNION and UNION ALL has eliminated a lot of poor candidates at my job.


问:
iPad app architecture with very large files
I am working on an iPad app.  It needs to contain some very large files.  I could put them into the app, but they would push it well over 20MB, which means that it would not be downloadable over the air -- only via iTunes.

Is there a way around this without too much pain for me?  I don't have a server or anything like that.

答:
You have two choices, you either embed the resources in the application and it grows large, or you don't embed them and have to serve them at runtime.

Serving them at runtime means your user will have to sit and wait a second time (after installation) to use the app, you'll need to deal with partial downloads as they inevitably close your app since it doesn't work right away, and you'll need a place to host the data.

Embedding them means it can't be downloaded over 3G, so users will need to be near Wi-Fi to download it.

Embedding them is the way to go.  20MB is nothing over Wi-Fi, and if someone can't be bothered to wait and hop on Wi-Fi to download your app, they probably weren't too enthused about it in the first place.

This isn't even considering the fact that you say it's an iPad app, the majority of which do not have 3G connections anyway.


问:
What is the difference between syntax and grammar?
I understand the difference between syntax and semantics -

Syntax: how the symbols are combined to form a valid expression or statement.

Semantics: the meaning of those symbols that form an expression or statement.

But what is the grammar? For example: sometimes I hear people say that some construct is "grammatically incorrect but syntactically it is correct". What does it mean?

答:
A grammar is a set of rules to define a language.  Rather, the grammar describes the syntax and semantics.
  A language might have two different grammars:

Syntax grammar (a set of rules that describes the ordering of symbols in the language)

Semantics grammar (a set of rules describing the valid semantic placement and use of those symbols)

For example, a part of the grammar in C might look something like:

```<code>if statement -> if_keyword "(" expression ")" if_block
if_keyword -> "if"
logical_statement -> some other stuff here...
</code>```

Meaning:

```<code>an if statement is made of an if keyword followed by a parenthesis followed by an expression followed by a parenthesis followed by an if block
an if keyword is ....
</code>```

Take a look at this way of defining a grammar.  If you're really curious about grammars, take a look at GNU Bison, which is basically a tool for describing the grammar of a language.

The "grammatically incorrect but syntactically correct" doesn't make too much sense.  Maybe they're referring to a grammar that describes the semantics of a language.  It would certainly make more sense to just say "not semantically correct" though.

Body:
A grammar is a set of rules to define a language.  Rather, the grammar describes the syntax and semantics.
  A language might have two different grammars:

Syntax grammar (a set of rules that describes the ordering of symbols in the language)

Semantics grammar (a set of rules describing the valid semantic placement and use of those symbols)

For example, a part of the grammar in C might look something like:

if statement -> if_keyword "(" expression ")" if_block
if_keyword -> "if"
logical_statement -> some other stuff here...

Meaning:

an if statement is made of an if keyword followed by a parenthesis followed by an expression followed by a parenthesis followed by an if block
an if keyword is ....

Take a look at this way of defining a grammar.  If you're really curious about grammars, take a look at GNU Bison, which is basically a tool for describing the grammar of a language.

The "grammatically incorrect but syntactically correct" doesn't make too much sense.  Maybe they're referring to a grammar that describes the semantics of a language.  It would certainly make more sense to just say "not semantically correct" though.


答: If you prefer to ask more open questions: Ask general questions about the DATE, DATETIME... data types. Ask about differences between different vendor implementations / products. Talk  about command line tools, bulk loaders, pretty printers... maybe you can learn a new trick during the interview.</p>

Body:
What are questions to test a programmers knowledge of SQL? What is the answer to the question? And what would a lack of an correct answer mean in terms of time likely to understand the concept(s) related to the question?

GOOGLED: sql challenge


答:
Syntax just refers to how you express ideas, independent of the underlying ideas themselves.

A grammar is a set of (mostly syntactical) rules about how you form valid statements in a particular language, and the "type" of a statement, based on which rules were used to form that statement.

For example, C++ and Java have similar syntax in many respects, but completely separate grammars. Somebody who can read code in one can probably read code in the other with only minimal difficulty. But being able to read code reasonably well doesn't mean they can write it anywhere close to as well. For example, a C++ programmer might try to use a typedef, not realizing that Java has neither typedef nor anything even roughly equivalent (so in that respect, their syntax is completely different).

Title: What is the difference between syntax and grammar?

Body:
I understand the difference between syntax and semantics -

Syntax: how the symbols are combined to form a valid expression or statement.

Semantics: the meaning of those symbols that form an expression or statement.

But what is the grammar? For example: sometimes I hear people say that some construct is "grammatically incorrect but syntactically it is correct". What does it mean?


问:
How much data should be required in a request to a webservice?
When recieving data from clients how much data that you provided to them should you require back from them?

For example when clients order a product from a webservice should they just need to provide a product code? The other alternative would be to require the product code product name and product price ect.

I have alway built webservices the former way with the minimum of data returned back to me, however I have just been consuming another web service that requires the vast majority of the data returned back to them. What are the advantages of the second way?

答:
Web service messages should be chunky, not chatty. Message-oriented, not call-oriented.

A request or command message should contain, at a bare minimum, enough information to:

Validate the caller (authentication/authorization).

Validate the transaction (for example, an update request in an optimistic concurrency environment might require the original version number)

Execute the transaction (identifiers, search parameters, etc.)

In addition, there will usually be several parameters/elements that you will want to have as optional but not required:

Lists of sub-requests, with a client-supplied correlation ID. For any given operation, don't require the client to make requests one by one; instead, allow them to cram it all into a single message, and make sure you repeat their correlation IDs in the response.  This is critically important in high-latency environments. (Correlation IDs should of course be optional, like the list itself).

The data type (for REST especially) - allow clients to specify XML, JSON, etc.

Control over the size and shape of the response message, especially if the response will be very large and/or contain many elements. At a minimum, provide a way to throttle the maximum number of results. Sorting and paging options are better. Some services - for example Salesforce - also provide a "query ID" that can be used to quickly retrieve pages of a result.

If it's likely to make a difference in performance, you might also consider allowing clients to indicate the level of nesting and/or which relationships to load, using a sensible default (generally all or none).

A return address (for one-way messages).

Timeouts, error-handling strategies, log settings, or anything else that might be of particular importance for a long-running transaction. (Again, use sensible defaults, and validate the inputs!)

Some services will supply clients with an area to just stuff in whatever user data they want, either as a string or as an XML element. Think of this as the "memo" line on a cheque. It's especially useful in one-way messaging scenarios.

I can't emphasize strongly enough that this second list of options needs to be optional and only used for messages that actually benefit from it. You don't want to confuse clients with a bewildering array of seemingly pointless options.

Finally, try to keep information that is common to all messages (especially credentials) in the headers, not the body.  If you have information that's common to many messages but not necessarily all (sorting/paging being one common example), then considering abstracting it into its own data type (parameter object). That way the client can reuse the same settings over and over again if it wants to.

Please don't require all sorts of checks and balances like names that have to match IDs, or session IDs, or checksums, or control totals, or whatever.  You have to trust your clients with the privileges they've been given. If you don't trust them to send correct data (according to their own requirements) then you have a business problem to solve, not a technical one.


问:
What is an inconsistent state?
I've been trying to experiment with coded user interface testing (CUITS) lately and I get the following error whenever I try to create one.

The following package failed to load: C:\Users[File Path Goes
  Here]\Microsoft.VisualStudio.TestTools.UITest.Extension.IE.dll. Coded
  UI Test is now in an inconsistent state. Remove this package and
  restart Visual Studio to work with Coded UI Test.

I have a question on Stack Overflow about the error, which seems to have no solution, but that made me wonder, what exactly is an inconsistent state?  I have never encountered this error before and I have not seen a good explanation of what it means.

答:
If you look at the Transaction processing entry in Wikipedia, you will encounter the following quote:

Transaction processing guards against hardware and software errors that might leave a transaction partially completed, with the system left in an unknown, inconsistent state.

Imagine a system being in state A, and performing operation O should send him to B. However, something wrong happens during execution of O. Now, imagine the operation consisted in computing 1+1 and that we didn't care about the result, we could argue that no matter what happen, state A = state B.
But imagine that operation O consisted in writing to a file. The IO component did not return any message after the request to write to the file. Did it crash ? Did it crash before the file was created, or during the write phase, or right before the end, or even after the file was written when it attempted to show you a message box saying "I've done it"? The system could be at A (no file written) or B (file written, and ok) but it can't tell. It is in an unknown state to him, a state that it does not recognize, an inconsistent state.

I hope that my explanation is good :-)

Also, one guy seems to have found the solution to the problem, but he can only guess on what exactly is the reason.

My .2$: Visual Studio could not load the package, but it thought it was loaded, as such, its internal "state" of the the solution/project is no longer "ok" (which was the case), but "right now, I can't tell if we're ok or not".

Title: What is an inconsistent state?


问:
Why are parser generators used?
I saw some projects require BISON to generate C++ code. What is the advantage of having BISON/Yacc etc. generate C/C++ code instead of writing it yourself?</p>

答:
The most important thing about BISON and YACC is that they generate a state machine which would parse exactly your grammar. This is for speed reason, since complexity of generated code is not O(n) with n = number of rules as it would be in most first-attempt implementations.

The state machine approach causes the number of states spawned to be very high  and thus it would be very error prone to write that code. Manteinance of that code would also be an hell (where hell = I would quit the job if someone suggested me to do that).

Bison and Yacc make you concentrate on the grammar instead of its implementation.

Title: Why are parser generators used?


答:
The difference is fuzzy and not worth worrying about too much.

People will sometimes include context-sensitive constraints under the umbrella of syntactic correctness. The most common example is a type system. Another is Java's "no statements after return" rule. This simplifies formal discussion: the syntax yields a language (a set of sentences/expressions/programs) which is the domain of the semantics; anything else is "not a program", and the semantics need not bother with it.

In contrast, "grammar" typically refers to a method of describing context-free languages (attribute grammars notwithstanding).

The reason it's not worth worrying about much is that type systems are as often considered the "static semantics" of a language as they are a "syntactic discipline for correctness". And sometimes a language doesn't quite have a proper context-free grammar; C, for example, must feed information from the parser back into the lexer.

Pragmatically, anyone who relies on a distinction between "syntactic" and "grammatical" had better say so and explain what they mean.


问:
What is the actual problem with a prototype based design?
I feel like anything that can be developed using OO/functional languages can be generally made 'better' using a prototype based language, because they appaer to have the best of them all: high order functions, flexibility to simulate any OO structure, productivity (low verbosity) and scalability because of concurrency. But it seems like they are avoided for the creation of executable applications and of bigger projects in general. Why that?</p>

答:
They're slow as hell. How long do you think it takes a JavaScript VM to make an OO call, compared to C++? And you basically waste time inventing structures that other languages provide for you. And I hope you don't enjoy type safety, either.

I've done a lot of coding in Lua. Re-inventing the class wheel every time was not my idea of a good time. Now I work in C++ out of choice.

Flexibility is slow and unsafe.


答: I would usually define a class to represent each problem instance, then add a class constructor that accepts a FileReader or istream.  Actually, I solve problems like these in Perl, but the contest rules require Java or C++.</p>

Title: How to handle "X" data sets as input

Body:
I participated in a coding competition today, and I found that almost all of the command line input our programs needed to receive would start with an integer representing the amount of data sets to follow.  There were 6 different problems, and they all started this way.

For example, one sample problem had:
"Input to this problem will begin with a line containing a single integer N (1 <= N <= 100) indicating the number of data sets.  Each data set consists of the following components:

A line containing a single integer W that specifies the number of wormholes

A series of W lines containing....

etc.
"

Pretty much all the competition problems had this format, with the first integer representing the amount of data sets to follow.

My initial reaction (and the way I tried to solve the problem) was just using a vector of size N, where each element represented a data set.  Trouble is, there are a whole bunch of things in these data sets.  Using this approach often left me with a vector of vector of vectors (maybe an exaggeration but you get the idea) which was very hard to manage.

Another idea was looping through the entire program N times, but this doesn't always seem that applicable.

I realize this is a vague question, but that's because I'm looking for a general solution to this type of problem.  What is the best approach to handling this type of input?


答:
In the case of Java, the JVM can do optimizations that cross library boundaries.  For example you could inline a method from a library into your own client code.  This type of optimization could not be done at compile time, because the library may change before execution.  It is entirely possible that your libfoo-1.0 is replaced by libfoo-1.1 without a recompile.  If that happens, cross-library inlines done at compile time would become totally invalid.

By doing the optimization solely at runtime, there is no worry that the library changing under you will invalidate optimizations.


答:
You're looking for a roughly generalized solution... so try some generalization. I'd look at creating a class or custom collection to represent the common requirements/functionality.

Something like:

```<code>static void Main(string[] args)
{
    int itemCount = int.Parse(Console.ReadLine());
    var samples = new SampleData<Sample<int>, int>();
    samples.Read(Console.In, itemCount);
}

public class SampleData<T, K> : List<T>
    where T : Sample<K>, new()
{
    public void Read(TextReader reader, int count)
    {
        for (int i = 0; i < count; i++)
        {
            T sample = new T();
            sample.LoadData(reader.ReadLine());

            this.Add(sample);
        }
    }
}

public class Sample<T>
{
    public List<T> dataPoints { get; set; }

    public Sample()
    {
        this.dataPoints = new List<T>();
    }

    public void LoadData(string data)
    {
        /* parse data and add to dataPoints */
    }
}
</code>```

Title: How to handle "X" data sets as input

Body:
You're looking for a roughly generalized solution... so try some generalization. I'd look at creating a class or custom collection to represent the common requirements/functionality.

Something like:

static void Main(string[] args)
{
    int itemCount = int.Parse(Console.ReadLine());
    var samples = new SampleData<Sample<int>, int>();
    samples.Read(Console.In, itemCount);
}

public class SampleData<T, K> : List<T>
    where T : Sample<K>, new()
{
    public void Read(TextReader reader, int count)
    {
        for (int i = 0; i < count; i++)
        {
            T sample = new T();
            sample.LoadData(reader.ReadLine());

            this.Add(sample);
        }
    }
}

public class Sample<T>
{
    public List<T> dataPoints { get; set; }

    public Sample()
    {
        this.dataPoints = new List<T>();
    }

    public void LoadData(string data)
    {
        /* parse data and add to dataPoints */
    }
}


问:
How can I provide guidance on technology choices through user stories?
I'm a project manager for a team of firmware engineers making the transition to adopting Scrum and I'm moving to support the team in a Product Owner role. We've just gone through Scrum training and are beginning a month of coaching which is going to be invaluable. Coming from a technical background I can already see the challenge of shifting my point of view from the solution domain to focusing on business value. For me it's very tempting to think of "how" to solve a problem. But I like the concept of user stories and defining vertical slices of functionality that give value to the customer and letting the team determine the "how".

Forgive me if this is a naive question, but as the PO how can I provide guidance on specific technical direction through user stories? My concern is that in some cases without guidance the team may head down the wrong path on key technical decisions.

As a simplistic example I might have a user story:

As a clinician I want the device to record information about the patient's treatment so that I can determine if the patient's therapy has been effective.

Now say time to market is critical and I want to fork out for an off-the-shelf file system stack to save time, what conveys that to the team? They might go off and start writing their own stack from scratch.

Is this sort of guidance provided through:

Conversations during sprint planning and backlog grooming? But if so, is it my place as the PO to even be suggesting how to solve a problem.

Acceptance criteria? I don't really like this, I have a bad feeling about making acceptance criteria so prescriptive that they specify how to solve a problem.

Constraints?

Thanks in advance. I could (and will) ask our Scrum coach but I won't be able to do that before Monday and this question has been really bugging me :)

答:
My experience has been to have a technical lead who provides this direction through conversations and/or technical documentation (so No. 1 on your list).  This person will also be able to give the technical guidance needed for key decisions.  They will be able to recommend/monitor/reinforce best practices.  This is usually not the PO(Product Owner) as it requires having a different point of view.

I don't like the acceptance criteria/constraints approach being too formal (which also takes time and energy).  The whole point of Agile of course is not to be focusing on creating formal procedures but delivering stories and getting the code written for that.

OwnerDisplayName: Jono

OwnerDisplayName: Michael Durrant


答:
Is there an architect/tech lead which is part of the team that you can talk to?

Ultimately, I think technical ownership lies w/ the delivery team. As the PO, you can provide direction through your acceptance criteria, but rather than formulating your AC around the "how", talk about the "why" and what problems your hypothetical stack would solve (perhaps there are alternatives that also fulfill your AC).

You can always suggest technical direction to the team, but I would be careful and allow the team to choose what works best for them (this includes the architect/tech lead). If there are technical concerns, I would put those into your acceptance criteria. A key principle of Agile / Scrum is that teams work best when empowered and given the authority to make decision that affect them. I definitely recognize the need to guide direction (especially if you think the team is making a wrong long-term technical choice), but there is the trade off if the team disagrees and a resistance forms. If the team agrees, great-- just keep in mind the boundaries of the PO role and be careful of the "exception to the rule" becoming an "expectation".

Also, talk to your Scrum Master, he/she should be a resource for this sort of stuff.

Hope this helps, I kind of jotted this down quickly.

Title: How can I provide guidance on technology choices through user stories?

Body:
I'm a project manager for a team of firmware engineers making the transition to adopting Scrum and I'm moving to support the team in a Product Owner role. We've just gone through Scrum training and are beginning a month of coaching which is going to be invaluable. Coming from a technical background I can already see the challenge of shifting my point of view from the solution domain to focusing on business value. For me it's very tempting to think of "how" to solve a problem. But I like the concept of user stories and defining vertical slices of functionality that give value to the customer and letting the team determine the "how".

Forgive me if this is a naive question, but as the PO how can I provide guidance on specific technical direction through user stories? My concern is that in some cases without guidance the team may head down the wrong path on key technical decisions.

As a simplistic example I might have a user story:

As a clinician I want the device to record information about the patient's treatment so that I can determine if the patient's therapy has been effective.

Now say time to market is critical and I want to fork out for an off-the-shelf file system stack to save time, what conveys that to the team? They might go off and start writing their own stack from scratch.

Is this sort of guidance provided through:

Conversations during sprint planning and backlog grooming? But if so, is it my place as the PO to even be suggesting how to solve a problem.

Acceptance criteria? I don't really like this, I have a bad feeling about making acceptance criteria so prescriptive that they specify how to solve a problem.

Constraints?

Thanks in advance. I could (and will) ask our Scrum coach but I won't be able to do that before Monday and this question has been really bugging me :)

OwnerDisplayName: taofd


答:
You can't guide technology choices through user stories; they are deliberately agnostic on technology decisions. That's kind of the point--they speak only to functionality, not implementation.

Technology decisions should be made based on what the team already knows, what they want to know, what expertise is available, what's already in place, what interfaces with existing systems the easiest, etc.

Whoever is in charge of development should be guiding this, taking input from anybody that knows anything.

OwnerDisplayName: Dave Newton