问:
Are certifications worth it?
I am finishing my college degree in programming soon and I'm exploring the next steps to take to further my career. One option I've been considering is getting a certification or a series of certifications in the area of development I want to work in.

Are these certifications worth the time and money? Do employers place a lot of value in them?

答:
Well there is no definite co relation but it just helps you out in getting filtered from the tons of resume a recruiter gets. A certification implies that you have some knowledge about the framework and gives you a edge over others who are not exposed to that particular version.

Also it implies you took some effort to learn and this could be handy, for the company its better that a person knows something and might not necessarily have to train the resource in case of upcoming project.

Title: Are certifications worth it?


答:
In addition to the above, Microsoft certifications also allows you to become an instructor (in addition or instead of your development career). Being an MCT (Microsoft Certified Trainer) could provide you with more income (for part time work) and will let you interact with more people outside your team.

Certification is a good credential in case you plan to write a book or as mentioned before you want to provide training.

To obtain the certification you will have to know several part of the technology well, so the study will indeed benefit you.

ContentLicense: CC BY-SA 3.0

Title: Are certifications worth it?

Body:
I am finishing my college degree in programming soon and I'm exploring the next steps to take to further my career. One option I've been considering is getting a certification or a series of certifications in the area of development I want to work in.

Are these certifications worth the time and money? Do employers place a lot of value in them?


问:
Does project architecture have a strong relation to used libraries?
Programmers, when it comes to talk about popular patterns in enterprise applications, preach that you should code against interfaces to remove strong relations between components; doing this will aid in changing concrete types while minimizing changes in other areas of the application. The underlying assumption is that interfaces are all about abstractions. When it comes to real life it is almost impossible. Lets use an example:

Lets say you currently use an ORM framework in your application, which you abstracted by applying the repository pattern. Now, can you really change ORM framework seamlessly?

```<code>public interface IRepository<T>
{
    T GetById(int id);
    void Add(T entity);
    void Remove(T entity);
    void Update(T entity);
    IQueryable<T> Query(Expression<Func<T, bool>> filter);
}
</code>```

Theoretically, this implementation can be applied to the rest of the application, but many questions remain about the actual application of this pattern:

How does this pattern shield me from the internal process of libraries?

How does the abstraction deal with the variation in exceptions thrown by each library?

If I have selected an ORM which provides a caching mechanism internally and I later decide to switch to an alternative ORM with no such support, how does the pattern handle this?

So, from this, I believe that the project architecture is strongly influenced on the libraries that are used. Is there anything wrong with this? Am I assuming too much from this pattern?

答:
I would go a little further than the other commentators. ORMs are definitely not an abstract interface. There are dozens of dependencies and implementation specific behaviors. Small changes in the underlying model, or the underlying technologies ripple through to the application.

ORMs are a coders shortcut and provide OO coders with an interface that they are more comfortable with than raw *dbc. The resulting classes should not be thought of as interfaces.

In architectural terms an "interface" is an interface between logical components. In many cases a component consists of code and its underlying data model. You cannot separate a database and the code that maintains that database into two separate components, they are intimately linked. Any change to the data model will (and must) result in a change to the application code that maintains the model.


答: Libraries generally do not influence the architecture of the application. Frameworks, on the other hand, do. There is a large difference between libraries and frameworks. Libraries offer functionality that can be called on a as-needed base. Frameworks require your code to adhere to the concept of the framework, otherwise you will not really make use of the framework.</p>

Title: Does project architecture have a strong relation to used libraries?

Body:
Programmers, when it comes to talk about popular patterns in enterprise applications, preach that you should code against interfaces to remove strong relations between components; doing this will aid in changing concrete types while minimizing changes in other areas of the application. The underlying assumption is that interfaces are all about abstractions. When it comes to real life it is almost impossible. Lets use an example:

Lets say you currently use an ORM framework in your application, which you abstracted by applying the repository pattern. Now, can you really change ORM framework seamlessly?

```<code>public interface IRepository<T>
{
    T GetById(int id);
    void Add(T entity);
    void Remove(T entity);
    void Update(T entity);
    IQueryable<T> Query(Expression<Func<T, bool>> filter);
}
</code>```

Theoretically, this implementation can be applied to the rest of the application, but many questions remain about the actual application of this pattern:

How does this pattern shield me from the internal process of libraries?

How does the abstraction deal with the variation in exceptions thrown by each library?

If I have selected an ORM which provides a caching mechanism internally and I later decide to switch to an alternative ORM with no such support, how does the pattern handle this?

So, from this, I believe that the project architecture is strongly influenced on the libraries that are used. Is there anything wrong with this? Am I assuming too much from this pattern?


答:
Some companies are a Microsoft Certified Partner, which requires the company to employ a minimum number of certified employees (MCP). In that sense, it definitely can help.

Outside of that however, I would say that it doesn't really help. Putting work into OS projects can be much more beneficial to one's career, especially if said OS project takes off (or you become a regular committer to an already established project).

Title: Are certifications worth it?


问:
Best way to use source control for a project (1-3 people)
So my partner and I are working on a practice management system and at first we didn't use any version control, then I persuaded him to use git. At the moment our system is that we have three branches: develop, master and release. Our git repo is on an external server, which has Apache, MySQL, etc. We do our daily coding on the develop branch (commits) and then we we have done some testing to make sure it's (semi) bug-free we merge it into the master branch. If we want to do something radical we just make a branch of master, mess around and if it works, good, we merge it back in, if not, we delete the branch.

Finally when we go for our weekly release we merge to the release branch to make sure we have a copy of the project as it was when we released. Unfortunately we don't track all files in git as it slows down git too much (e.g. images, especially since this is on an old server with a single-core 1.4 GHz AMD Sempron), as a git status usually changes from around 3s to about 1 minute; or because we can't (mysql databases). For us the slowdown is not workable so we just leave them out, and this has never seemed to be a problem because we haven't deleted any images, but we may start to soon as we start to optimize. So when we checkout previous commits sometimes the files aren't there and so it is broken (a big problem is we can't use version control on the database (because we don't know how), so because the schema has changed it is also broken if we go back).

And that's pretty much our workflow.

So after my background, my question is: Do you think that there are any improvements we could make to the above?

And on a side note: Does any know a reliable and easy-medium difficulty (i.e. not too hard) way to track mysql databases in git?

答:
You can use mysqldump to track database state in git. Anything that your project uses (images and other binary data) should not be excluded (outside of compiled files, such as *.pyc). If system resources are an issue, look at using bitbucket as opposed to git. You can host an unlimited amount of private small projects for free (<= 5 developers I believe).

On another note, I rarely see anyone using branches anymore (that's soooo SVN ;)). Most people just work out of tip and tag it whenever they're happy with what they have.


问:
Is it a good idea to use width and height properties with the  tag?
I am new to HTML and Im working on a self made project and I have to use
 and < fieldset > tags in my html files. I need to set the width and height properties to the tables like

```<code><td width="100" height="200" > </td> <!-- something like that -->
</code>```

But Im afraid of these reason because as the Monitor size changes with the computers some have large screens and some have small screens like notebook pc's.
The table dimensions looks small for the big screen computers and big to the small screen computers.How do I manage them. How do I fit it to all types of screen sizes.

I mean when it goes to the right most part of the screen it jumps to the next line, if I use width property to the  tag?

and also using Padding like these is a bad idea ?

```<code>< span style="padding-left:100"> </span>
</code>```

It looks exactly what i want on my browser. Does it look same on all types of monitor sizes? or does it vary? Is there any standard way to follow it?

I love your answers but answer these original question too, does it matter to the monitor sizes using width and height properties in  tag ?

答:
A lot of sites are tailored for the lowest common denominator (well, perceived anyway). The lowest resolution that most present day monitors will go to is 1280x720. A lot of sites will be authored with a static with anywhere from 920 to 1000px wide as it doesn't look bad at higher resolutions (some will compensate with larger backgrounds to make it look a little prettier).

As for whether or not you should use width and height attributes directly in td tags, no, you shouldn't use them as the attributes are obsolete as of HTML5. Look at expressing layout using CSS.

Padding (such as padding-left) is not such a bad idea, but again, you'll want to look at putting that into an external style sheet and applying it to the specific element.

Really, I'd suggest taking a quick break from HTML learning and dip into CSS a bit and find out some of the recommended best practices there.

Title: Is it a good idea to use width and height properties with the < td > tag?


问:
How to sell a high SO reputation at an interview
A question with absolutely no relevance to myself:

How would a programmer with a stellar SO reputation (like 30k+) market his or herself to poential employers/investors who have never heard of SO?
In other words, how can one describe SO in a few sentences that will make a high reputation sound impressive at an interview?

答:
Is your reputation on StackOverflow going to help the company make money?

Is your reputation on StackOverflow something that will let the manager get projects done faster?

There are exactly two things that programming managers care about, and that's making the company money, and by extension, getting stuff done faster.  If your "skill" doesn't specifically support that, then it's not a skill, and nobody cares.

ContentLicense: CC BY-SA 2.5


答:
I suggest you to learn CSS. There are many resource available, this for example is a great site to start.

You should always use CSS to style your elements, possibly an external file containing all your rules.

The width and height attributes are now considered obsolete. You can obtain the same effect with a CSS rule. If you want to target only a particular table cell you can assign it a class like  for example:

```<code>#yourtable td.small {
  width:100px;
  height:200px;
}
</code>```

For the padding, you should specify a class like  and then create a CSS rule like this:

```<code>span.indented {
  padding-left:100px;
}
</code>```

Now all your padding with this class will have a padding left of 100px.

As for screen resolutions, if you want to make a fixed size layout, keep in mind that the lowest common horizontal resolution nowadays is 1024px, you want to remove some pixels because of scrollbars, lateral bars, etc. so a standard safe size is considered to be 960px.

The best way to target different types of screen resolutions (and devices) is by having a liquid layout, a layout which adapt automatically on various resolutions. You can obtain this by using percentage values for your elements instead of fixed units for example.

Body:
I am new to HTML and Im working on a self made project and I have to use
 and < fieldset > tags in my html files. I need to set the width and height properties to the tables like

```<code><td width="100" height="200" > </td> <!-- something like that -->
</code>```

But Im afraid of these reason because as the Monitor size changes with the computers some have large screens and some have small screens like notebook pc's.
The table dimensions looks small for the big screen computers and big to the small screen computers.How do I manage them. How do I fit it to all types of screen sizes.

I mean when it goes to the right most part of the screen it jumps to the next line, if I use width property to the  tag?

and also using Padding like these is a bad idea ?

```<code>< span style="padding-left:100"> </span>
</code>```

It looks exactly what i want on my browser. Does it look same on all types of monitor sizes? or does it vary? Is there any standard way to follow it?

I love your answers but answer these original question too, does it matter to the monitor sizes using width and height properties in  tag ?

Body:
I suggest you to learn CSS. There are many resource available, this for example is a great site to start.

You should always use CSS to style your elements, possibly an external file containing all your rules.

The width and height attributes are now considered obsolete. You can obtain the same effect with a CSS rule. If you want to target only a particular table cell you can assign it a class like <td class="small"> for example:

#yourtable td.small {
  width:100px;
  height:200px;
}

For the padding, you should specify a class like <span class="indented"> and then create a CSS rule like this:

span.indented {
  padding-left:100px;
}

Now all your padding with this class will have a padding left of 100px.

As for screen resolutions, if you want to make a fixed size layout, keep in mind that the lowest common horizontal resolution nowadays is 1024px, you want to remove some pixels because of scrollbars, lateral bars, etc. so a standard safe size is considered to be 960px.

The best way to target different types of screen resolutions (and devices) is by having a liquid layout, a layout which adapt automatically on various resolutions. You can obtain this by using percentage values for your elements instead of fixed units for example.

ContentLicense: CC BY-SA 4.0


答: In a similar experience regarding database change tracking, we just handle structure of database. Using an ORM like NHibernate you can care about HBM mappings otherwise you can always maintain your database structure scripts.</p>

Title: Best way to use source control for a project (1-3 people)

Body:
So my partner and I are working on a practice management system and at first we didn't use any version control, then I persuaded him to use git. At the moment our system is that we have three branches: develop, master and release. Our git repo is on an external server, which has Apache, MySQL, etc. We do our daily coding on the develop branch (commits) and then we we have done some testing to make sure it's (semi) bug-free we merge it into the master branch. If we want to do something radical we just make a branch of master, mess around and if it works, good, we merge it back in, if not, we delete the branch.

Finally when we go for our weekly release we merge to the release branch to make sure we have a copy of the project as it was when we released. Unfortunately we don't track all files in git as it slows down git too much (e.g. images, especially since this is on an old server with a single-core 1.4 GHz AMD Sempron), as a git status usually changes from around 3s to about 1 minute; or because we can't (mysql databases). For us the slowdown is not workable so we just leave them out, and this has never seemed to be a problem because we haven't deleted any images, but we may start to soon as we start to optimize. So when we checkout previous commits sometimes the files aren't there and so it is broken (a big problem is we can't use version control on the database (because we don't know how), so because the schema has changed it is also broken if we go back).

And that's pretty much our workflow.

So after my background, my question is: Do you think that there are any improvements we could make to the above?

And on a side note: Does any know a reliable and easy-medium difficulty (i.e. not too hard) way to track mysql databases in git?


答:
There will be both kind of companies:

Ones who don't care for certifications. Companies like FogCreek don't even believe in knowing specific languages. (Knowing may give you points but that's not the criteria.)

Ones who do care for certifications. These companies may believe in certificates or their clients may. Most likely, the company may give you additional points but it isn't their only or compulsory criteria as far as I know. On the other hand, if their clients want to deal only with a company which employes people with certain certificates then it can be a deal breaker.

What kind of companies are you interested in? On their jobs page do you see you certificates mentioned?

Opinion: Personally, all software companies that I tend to look at are more concerned about how good a programmer you are and many times also how good a computer science person (algorithms) you are. And that's how it should be. To me certificates only tell you how much a person could remember during the tests and not how well they think. Thinking is much higher on my list than memorization (if the latter is at all is on the list).

Title: Are certifications worth it?


问:
how to create a new "Custom Conditional Statement" in programming language
Is it possible to create a new "Custom Conditional Statement" in java.

Here i am planning to create a new custom component for the switch statement to give better performance.
The custom Switch control which i am planning to create will have only integer operators: example:

```<code>int i = SOMEVALUE;
Switch(i)
{
Case 1:
//Some Statement
Break;
Case 2:
//Some Statement
Break;
Case 3:
//Some Statement
Break;
....
....
....
Case 10000000:
//Some Statement
Break;
Default:
//Some Statement
Break;
}
</code>```

According to my knowledge the Switch condition will check in a particular order. If the actual value of the "i" variable is 9999999 then it has to check the case for 9999999 times but if we check it with some algorithms similar to binary search then its performance will be improved. Am I Right ??

If right then why don't we add this functionality to our programming language ?
So why don't we create a "Custom Conditional Statement" something like "OrderedIntegerSwitch statement" , in which the value passed inside that switch should be an integer.

答:
You're not really right. A switch statement is typically not implemented as a series of if/elseif, but with a jump table, therefore it already executes in constant time, not in linear time. (This is why many languages already constrain the argument to switch to a smaller integral type than theoretically possible.)

To be sure, no compiler will generate a jump table with 1000000 entries if you switch over something that large, but there are similar tricks to get O(1) performance even if the naive approach would use too much space. Modern compilers almost always use some of these. Therefore it's unlikely you would be able to beat your language implementor with a homebrew solution.


答:
I'd actually go so far as to say a "certification" could be a net negative on a resume applying to a software shop. At Microsoft, Google, Amazon, or startups run by folks from companies like those, there's definitely the attitude that if you need a certficate, then you can't really program, and if you actually can program, then you don't waste your time on certificates. Certificates are viewed as something a technician gets, not a "real" computer scientist or software engineer.

It doesn't really matter whether this is a good or valid or accurate view of those who get certifications. What matters is that this attitude does exist among your potential peers -- at least as those kinds of companies. If you want to work in software at a different kind if company, then YMMV.

Title: Are certifications worth it?


问:
Opposite term of indent
We say that we indent code. I'm writing a string builder which can add/remove tabs to indent code.

Sample:

```<code>builder.Add("<ul>");
builder.Indent();
builder.Add("<li></li>");
builder.Dedent(); // <-- what should this be named.
builder.Add("</ul>");
</code>```

What should I name the method?

答:
Don't you mean indent?

Intend means something completely different.

Otherwise, maybe Unindent?

On a side note:

Using tabs to indent code is bad (imho) - spaces are more portable.

I wouldn't have this API exposed to the client. The builder should be smart enough to know what to and what to not indent.

Title: Opposite term of indent


答:
Correct me if I'm wrong, but as far as I know the big difference between if..else statements and the switch ones, is that the first will check for each case one by one, until it finds the one that matches.

With a switch, followed by a break, you will instantly jump to the right case and end the statement afterwards.

I think what you say is true for the if..else statement, but not for the switch, which should be always faster with a large quantity of cases to check for.

Title: how to create a new "Custom Conditional Statement" in programming language

Body:
Is it possible to create a new "Custom Conditional Statement" in java.

Here i am planning to create a new custom component for the switch statement to give better performance.
The custom Switch control which i am planning to create will have only integer operators: example:

```<code>int i = SOMEVALUE;
Switch(i)
{
Case 1:
//Some Statement
Break;
Case 2:
//Some Statement
Break;
Case 3:
//Some Statement
Break;
....
....
....
Case 10000000:
//Some Statement
Break;
Default:
//Some Statement
Break;
}
</code>```

According to my knowledge the Switch condition will check in a particular order. If the actual value of the "i" variable is 9999999 then it has to check the case for 9999999 times but if we check it with some algorithms similar to binary search then its performance will be improved. Am I Right ??

If right then why don't we add this functionality to our programming language ?
So why don't we create a "Custom Conditional Statement" something like "OrderedIntegerSwitch statement" , in which the value passed inside that switch should be an integer.


答:
Besides the fact that compilers are already smart, do you really intend to type ten millions switch cases and their associated ten millions statements, and then hack a compiler for optimizing all of that?

You'd better put your efforts in changing your design. I can't imagine a real life situation where you need ten millions actions that are different enough not to be factorized.


问:
What happens at [platform] user groups?
I'm a .NET developer, but I've never been to a .NET user group meeting or anything like that.

I might have the opportunity soon to start attending one, but I'm wondering. What happens at user groups? I'm not looking necessarily for info specifically about .NET ones, but they are preferred.

What do you get out of it excluding the opportunity for networking?

答:
What happens at a user group meeting is whatever the user group organizers organize.  There is no rule.

Go and find out.  You have nothing to lose.

Title: What happens at [platform] user groups?


答:
```<code>Indent
Dedent
</code>```

To back up this, a quick google helps:
unindent has 290,000 hits while dedent has 1,920,000 hits, giving a rough indication that the latter one is more widely used. Although this should be used as argument very cautiously.

Dedent is also the standart terminology used in the python docs.

Title: Opposite term of indent

Body:
We say that we indent code. I'm writing a string builder which can add/remove tabs to indent code.

Sample:

```<code>builder.Add("<ul>");
builder.Indent();
builder.Add("<li></li>");
builder.Dedent(); // <-- what should this be named.
builder.Add("</ul>");
</code>```

What should I name the method?

Body:
Indent
Dedent

To back up this, a quick google helps:
unindent has 290,000 hits while dedent has 1,920,000 hits, giving a rough indication that the latter one is more widely used. Although this should be used as argument very cautiously.

Dedent is also the standart terminology used in the python docs.


答:
What about
SetIndentLevel(int level).

Removing an indent is then just setting the level to 0. Afaik there's no term for the opposite of this operation.

Title: Opposite term of indent


答:
Definition of Indent:

Start (a line of text) or position (a block of text, table, etc.) further from the margin than the main part of the text

There is not really an opposite of this, rather you are indenting the main text further than the specified line.

I think a better term would be RemoveIndent() or ReduceIndent()

Having said that, a google search for the term "opposite of indent" reveals the following term: Outdent. http://www.urbandictionary.com/define.php?term=indent This may also be suitable.

Title: Opposite term of indent


答:
I've seen the word "outdent", for example at Wikipedia Template:Outdent page

For outdenting a reply on a talk page when indention gets too deep. Indenting on talk pages is done using a colon character (:) to produce tabs; this template produces a connector bar and initial text to indicate an outdent, based on the number of colons used in the previous indent...

Title: Opposite term of indent


答:
The word "indent" doesn't actually mean "insert whitespace" - it means "adjust whitespace so that things line up". As such, indenting can mean both adding or removing tabs; just like there is no opposite to "walk", conceptually speaking there is no opposite to "indent". You can remove indentation, undo the indenting, or change the indentation level, each of which are operations that somehow revert or alter the effects of indenting, in different ways, but none of them is "the" opposite of indenting. The popular "dedent" and "unindent" are wrong the same way as "unwalk" or "defest". (BTW, this might make a good question for english.se)

In your case, I'd go with IncreaseIndentationLevel and DecreaseIndentationLevel.

Title: Opposite term of indent


答:
I'm not a recruiter, but so far I have an impression that certification courses give you piss poor overview on how to drag and drop items in IDE, at the same time stealing actual coding time and costing a whole lot of money.

The only good part from certification courses I noticed, was where instructor sidestepped and told about some gotchas he's experienced in his career. The actual content of courses was something along the lines of an online tutorial.

I don't do certifications anymore, seems like a total waste of time to me.

Title: Are certifications worth it?


答:
For the opposite of indent, I would use unindent. From Wiktionary:

unindent

Etymology

  un- + indent; Originated in the 1980s when computers made
  it trivial for anyone to move text around on a page.

  Verb

  unindent (third-person singular simple present unindents, present
  participle unindenting, simple past and past participle unindented)

  1. To
  remove the indentation; to move a block of text closer to the left
  margin.

  I had to unindent the first line of each paragraph so that my
  essay would fit onto one side of paper.

According to the Online Etymology Dictionary, indent comes from:

early 15c., indenten/endenten "to make notches; to give (something) a
  toothed or jagged appearance," also "to make a legal indenture," from
  O.Fr. endenter "to notch or dent, give a serrated edge to," from M.L.
  indentare "to furnish with teeth," from in- "into, in, on, upon" (see
  in- (2)) + L. dens (gen. dentis) "tooth" (see tooth). Related:
  Indented; indenting. The printing sense is first attested 1670s. The
  noun is first recorded 1590s, from the verb. An earlier noun sense of
  "a written agreement" (late 15c.) is described in Middle English
  Dictionary as "scribal abbrev. of endenture."

So indenting is like to putting a "notch" in the source code. To remove that notch, you undo the indent: unindent.

Title: Opposite term of indent


问:
Do the young minds need to learn the pointer concepts?
Why did the C master Dennis Ritchie introduce pointers in C? And why did the other programming languages like VB.NET or Java or C# eliminate them? I have found some points in Google, and I want to listen your comments too. Why are they eliminating pointer concepts in modern languages?

People say C is the basic language and pointers is the concept that makes C powerful and outstanding and makes C still to compete with more modern languages. Then why did they eliminate pointers in more modern languages?

Do you think knowledge of pointers is still important for new programmers? People are using VB.NET or Java these days, which supports more highly advanced features than C (and does not use any pointer concepts) and many people as I see now (my friends) choose these languages ignoring C as they support advanced features. I tell them to start with C. They say it's a waste to learn the concepts of pointers when you're doing the advanced things in VB.NET or Java which are not possible in C.

What do you think?

Updated:

The comments I read on Google are:

The earlier computers were too slow and not optimized.

Using pointers makes it possible to access an address directly and this saves time instead of making a copy of it in function calls.

Security is significantly worse using pointers, and that's why Java and C# did not include them.

These and some more what I found. I still need some valuable answers. That would be greatly appreciated.

答:
Absufreakinglutely YES! Everyone who programs needs to understand pointers and indirection.

Pointers are how a large amount of data access gets done in all languages. Pointers are a hardware feature of all microprocessors. High level languages like Java, VB & C# essentially wall off direct access to pointers from the users of the language with references. References refer to objects via the language's memory management scheme (could be a pointer with metadata or just a number for a the memory table, for example).

Understanding how pointers work is fundamental to understanding how computers actually work. Pointers are also more flexible and powerful than references.

For example, the reason why arrays start at index zero is because arrays are actually shorthand for pointer arithmetic. Without learning about how pointers work, many beginning programers don't quite get arrays.

```<code>int a, foo[10];
foo[2] = a;
</code>```

Line 2 in pointer arithmetic would be:

```<code>*(foo + sizeof(int) * 2) = a;
</code>```

Without understanding pointers, one cannot understand memory management, the stack, the heap or even arrays! Additionally, one needs to understand pointers and dereferencing to understand how functions and objects are passed.

TL:DR: Understanding pointers is fundamental to understanding to computers actually work.

Body:
Absufreakinglutely YES! Everyone who programs needs to understand pointers and indirection.

Pointers are how a large amount of data access gets done in all languages. Pointers are a hardware feature of all microprocessors. High level languages like Java, VB & C# essentially wall off direct access to pointers from the users of the language with references. References refer to objects via the language's memory management scheme (could be a pointer with metadata or just a number for a the memory table, for example).

Understanding how pointers work is fundamental to understanding how computers actually work. Pointers are also more flexible and powerful than references.

For example, the reason why arrays start at index zero is because arrays are actually shorthand for pointer arithmetic. Without learning about how pointers work, many beginning programers don't quite get arrays.

int a, foo[10];
foo[2] = a;

Line 2 in pointer arithmetic would be:

*(foo + sizeof(int) * 2) = a;

Without understanding pointers, one cannot understand memory management, the stack, the heap or even arrays! Additionally, one needs to understand pointers and dereferencing to understand how functions and objects are passed.

TL:DR: Understanding pointers is fundamental to understanding to computers actually work.


答:
First of all, presentational attributes have been deprecated in HTML for quite a while now; you should use the style attribute instead, or better yet, proper CSS. The internet is full of resources about these, so I'm not going to elaborate.

Then; with web layouts, you have to make a fundamental choice before you get started: Fixed or fluid? A fixed layout uses hard-coded sizes for most things, usually specified in px or em. By contrast, fluid layout describes a layout strategy and relies on the user agent to apply it.

Fixed layout

Pros:

Easier to make

Similar to print media design

Easier to support legacy browsers

Full control over placement of objects on page

Cons:

Only works well on a resolution similar to the one it was designed for

Hard to automatically adjust to dynamic content

Doesn't scale well (e.g. for mobile devices)

Doesn't play nice with window resizing

May break when used in unexpected situations (e.g. user has different fonts installed, different screen dpi configuration, etc.)

Fluid layout

Pros:

Scales well

Resolution independent

Automatically adjusts to dynamic content

Cons:

Harder to get right

Limited support for legacy browsers

Some things won't work at all

Also, note that you can tackle the screen resolution / window size / mobile devices problem with @media queries: you make individual stylesheets for different window sizes, and have the user agent select the right ones for you.


问:
How can programmers improve their UX skills?
As programmers we can solve very complex problems, but then, when we have to design a user interface we tend to fail on making them easy to use.

In small companies they can’t afford having designers and UX experts, programmers have to do almost everything in the software. But these interfaces are rarely intuitive (the classic example).

What is the problem? How can developers improve their skills in designing good user experiences?

答:
It's biological.

UI and all other design related tasks involve the right brain.

Programming task involve the left brain.

They have different purposes.

It's very rare to be good in both. At least at the same time.

UPDATE: I recently learn that there are others factors such as experience. In addition to some inherited factors, you develop mental capacities depending on how you are triggered in your childhood. For example, abused children are on average are more creative than the control group because they learn to disconnect from their awful reality in dreams.


答:
According to the JVM spec, a switch statement can be compiled to the bytecode instructions tableswitch or lookupswitch, depending on wether the cases of the switch are sparse.

tableswitch is O(1), while lookupswitch seems to be O(log n) (I guess it uses a binary search)

If you are curious about what instruction is chosen by your compiler for your piece of code, just decompile the bytecode and see if you find one instruction the other.


问:
I don't know C. And why should I learn it?
My first programming language was PHP (gasp).  After that I started working with JavaScript.  I've recently done work in C#.

I've never once looked at low or mid level languages like C.

The general consensus in the programming-community-at-large is that "a programmer who hasn't learned something like C, frankly, just can't handle programming concepts like pointers, data types, passing values by reference, etc."

I do not agree. I argue that:

Because high level languages are easily accessible, more "non-programmers" dive in and make a mess

In order to really get anything done in a high level language, one needs to understand the same similar concepts that most proponents of "learn-low-level-first" evangelize about.

Some people need to know C; those people have jobs that require them to write low to mid-level code. I'm sure C is awesome, and I'm sure there are a few bad programmers who know C.

Why the bias?  As a good, honest, hungry programmer, if I had to learn C (for some unforeseen reason), I would learn C.  Considering the multitude of languages out there, shouldn't good programmers focus on learning what advances us? Shouldn't we learn what interests us?  Should we not utilize our finite time moving forward?  Why do some programmers disagree with this?

I believe that striving for excellence in what you do is the fundamental deterministic trait between good programmers and bad ones.

Does anyone have any real world examples of how something written in a high level language—say Java, Pascal, PHP, or JavaScript—truly benefited from a prior knowledge of C? Examples would be most appreciated.

答:
C is the language that is used to write other languages. It allows you to get as intimate with the CPU and other hardware as you like.

If you don't know C, you don't know how other languages achieve the results they do.

Abstraction is an important concept, of course, and not everyone needs to know how their framework of choice is achieving the results it promises. You don't need to spend 20 years writing C, or indeed thinking about what happens to your vtables when you use multiple inheritance, in order to write good code.

Now, you can drive a car without understanding how a 4-stroke engine works or indeed without being able to use a stick shift (manual gear box).

However, if you understand what is going on under the hood you will, from time to time, be able to achieve exceptional results that someone without that knowledge will struggle to replicate.


答:
With distributed SCMs like git or mercurial (which is what bitbucket uses), branching is still possible but often unnecessary. What you do instead is (basic workflow):

Set up a repository in a location that is accessible for all developers (a network share, a server that people can ssh into, a third-party service like github or bitbucket). This will be your authoritative repository.

Clone this repository onto each developer's machine, and do whatever you have to to create a suitable development environment.

Work on your local copy; commit whenever you want to. Commits are local, so you won't hurt anyone. Be sure to pull from the central repo from time to time, so that your local copy doesn't go out of sync.

When you have something you think is ready for production, push from your local clone to the central repo.

On the central repo, whenever you have a version you want to mark as release candidate, tag it. This way, you can update any given clone to that exact version later on.

Since distributed SCMs allow unlimited clones to your repository, and each clone can serve as the master, you can build more complex workflows from this base. For example, you can have several central repositories: one for development, one for QA, one for production. You can use a dedicated clone just for a build server. You can use more than one clone locally; instead of branching, you just create another clone, and if it doesn't work out, you simply delete it.

Another nice benefit is that if the central repository breaks beyond repair, you'll still have several copies around; all you need to do is clone one developer's repo back to the central server and all is good (you do lose uncommitted changes on the central server though, but ideally, nobody should make changes there directly anyway, so the only thing left to do is for everyone to push their latest changes again).

Tracking databases is hard; normally, you want to track the structure, but not the data - data changes a lot, isn't really relevant for the code, and may contain sensitive information you better not make accessible that way. A common approach is to make a script that sets up the database in its current form, and maybe another that populates it with typical test data. Alternatively, you keep track of incremental change scripts - you'll have one script that creates the database as designed on day one, and then a bunch of scripts that, if applies in order, modify the database until you finally end up with the current state of things. Those are less reliable than tracking code changes though, and they require more manual work, so whatever you do, you want to have a good backup / restore plan for your production database.


答: Out is the opposite of in, everybody knows this. Why not use Indent() and Outdent()?

Title: Opposite term of indent


问:
Automatic programming: write code that writes code
After reading the book The Pragmatic Programmer, one of the arguments I found most interesting was "write code that writes code".

I tried searching over the net for some more explanations or articles about it, and while I found some good articles on the subject, I still haven't found any specific code implementation or good examples.

I feel it's still not a so common argument, something that lacks documentation or it's not embraced by so many people, and I would like to know more about it.

What do you think about the subject? Is it something that will really increase your productivity? What are some good resources on the subject, among books, blogs, slideshows, etc?

Some code examples would be greatly appreciated to allow me to better understand its implementation.

Here's the wiki page on the subject with various relevant programming techniques, like Meta Programming, Generative Programming and Code Generation.

答:
I have a PHP module which outputs a web page containing JavaScript code which generates HTML. That's three layers right there. Boy was that hard to read!

In a programming class, we had to write a program that would take a formula string from the user and parse it and display the value. The most impressive solver simply took the user input, wrapped it in main(){printf( "%d", ...);} and ran a script to compile, link, and run it. He didn't write a parser! Today you could do that in an SQL SELECT statement.

It's a tool you should play with, then store it away for some future day when it will be handy.


问:
Origin of "Readme"
When did people start writing Readme files?

It seems that pretty much all programs have this file, regardless of the format.

Is there any documented first use of this document?

答:
Found via this alt.folklore.computers thread:

I'm betting some document accompanying one of the PDP-8
    operating systems or software packages will probably be
    the oldest.

The oldest I found in the PDP-10 archives is the UCI LISP  "READ.ME"
  from the 4th DECUS library tape, with a timestamp of  27-Mar-1975:

http://pdp-10.trailing-edge.com/decuslib10-04/index.html

Unfortunately, many of the earlier mini OS's do not support a
  [unique] timestamp in the tape and/or disk directory structure,  so
  it's hard to tell when a document was really last edited.

Not only does the file have a 27 March 1975 timestamp, but it's handily signed and dated in the file itself:

```<code>                    UCI LISP

                    Random Notes

                    [...]

  Should  problems  arise  with   this   system,  please
  communicate  them  to  the  Department  of  Information and
  Computer Science at UCI;  they will be directed to whomever
  is currently managing the UCI LISP system.

            William J. Earl
            Department of Information and Computer Science
            University of California
            Irvine, California

            27 March 1975
</code>```

Edit: browsing around the PDP-10 Archives I found an earlier README.TXT from 27th November 1974, both timestamp and signed in the file:

[README.TXT is the DOC file for SPICE/SINC/SLIC]

This failsafe tape contains the circuit analysis programs:

```<code>    SPICE SINC and SLIC
</code>```

described in the Applications Software Bulletin Volume 4.

requirements:

SPICE requires FORTRAN-10 version 4 because of  its  use  of Right
  adjusted Holerith data.  Executes in about 47K.

[...]

it also includes this file, the FOROTS to go with the  SAVes and the
  source for SECOND.MAC, the timing routine.  SPICE is broken into three
  parts:  1SPICE.FOR, 2 and 3.

There  is  a  printed  document  to  describe  each  of  the programs.
  These  are  included  in  the DECUS packet.  The documentation and
  programs were origionally developed by the E.E.   department  of  the
  Univ.  of Calif.  at Berkley on a CDC 6400.  Except to convert the
  FORTRAN to the DECsystem-10 no  changes  have  been  made to the
  programs.  For the test data SLIC and  SINC  have  shown  a  slight
  variation  with respect to the 6400, SPICE shows no variation.

Good luck!              Ashley Grayson 27-NOV-74

[end of README.TXT]

http://pdp-10.trailing-edge.com/decus_20tap3_198111/01/decus/20-0079/readme.txt.html

Title: Origin of "Readme"

Body:
Found via this alt.folklore.computers thread:

I'm betting some document accompanying one of the PDP-8
    operating systems or software packages will probably be
    the oldest.

The oldest I found in the PDP-10 archives is the UCI LISP  "READ.ME"
  from the 4th DECUS library tape, with a timestamp of  27-Mar-1975:

http://pdp-10.trailing-edge.com/decuslib10-04/index.html

Unfortunately, many of the earlier mini OS's do not support a
  [unique] timestamp in the tape and/or disk directory structure,  so
  it's hard to tell when a document was really last edited.

Not only does the file have a 27 March 1975 timestamp, but it's handily signed and dated in the file itself:

                    UCI LISP

                    Random Notes

                    [...]

  Should  problems  arise  with   this   system,  please
  communicate  them  to  the  Department  of  Information and
  Computer Science at UCI;  they will be directed to whomever
  is currently managing the UCI LISP system.

            William J. Earl
            Department of Information and Computer Science
            University of California
            Irvine, California

            27 March 1975

Edit: browsing around the PDP-10 Archives I found an earlier README.TXT from 27th November 1974, both timestamp and signed in the file:

[README.TXT is the DOC file for SPICE/SINC/SLIC]

This failsafe tape contains the circuit analysis programs:

    SPICE SINC and SLIC

described in the Applications Software Bulletin Volume 4.

requirements:

SPICE requires FORTRAN-10 version 4 because of  its  use  of Right
  adjusted Holerith data.  Executes in about 47K.

[...]

it also includes this file, the FOROTS to go with the  SAVes and the
  source for SECOND.MAC, the timing routine.  SPICE is broken into three
  parts:  1SPICE.FOR, 2 and 3.

There  is  a  printed  document  to  describe  each  of  the programs.
  These  are  included  in  the DECUS packet.  The documentation and
  programs were origionally developed by the E.E.   department  of  the
  Univ.  of Calif.  at Berkley on a CDC 6400.  Except to convert the
  FORTRAN to the DECsystem-10 no  changes  have  been  made to the
  programs.  For the test data SLIC and  SINC  have  shown  a  slight
  variation  with respect to the 6400, SPICE shows no variation.

Good luck!              Ashley Grayson 27-NOV-74

[end of README.TXT]

http://pdp-10.trailing-edge.com/decus_20tap3_198111/01/decus/20-0079/readme.txt.html


答: Certifications are useful only if you actually learn something by getting them. It is the process that matters and not the paper. If you are planning to sit for a certification just because a company requires it, you should probably rethink if you really want to work for that company. Recruiters/employers who evaluate skills based purely on certifications have no idea about programming.</p>

Title: Are certifications worth it?


问:
Is it okay to have many Abstract classes in your application?
We initially wanted to implement a Strategy pattern with varying implementations of the methods in a commmon interface. These will get picked up at runtime based on user inputs.

As it's turned out, we're having Abstract classes implementing 3 - 5 common methods and only one method left for a varying implementation i.e. the Strategy.

Update: By many abstract classes I mean there are 6 different high level functionalities i.e. 6 packages , and each has it's Interface + AbstractImpl + (series of Actual Impl).

Is this a bad design in any way?

Any negative views in terms of later extensibility - I'm preparing for a code/design review with seniors.

答:
No, this is by no means a bad design. It's a template method pattern.

It's meant to encapsulate the varying behaviour of an algorithm step, which is probably the case in your scenario. Strategy and template method patterns make a strong combination in many cases. You probably have abstract strategies as a frame and the use the template method pattern for concrete strategies. That's pretty clean.

It's extensible and also you don't need to repeat code. When you need something entirely different, just use the strategy interface to create a new abstract or concrete strategy.


答:
No, it can be quite OK (depending on the details - it is hard to say more with this little knowledge about your concrete case). It is perfectly fine to unify common method implementations in an abstract base class.

Depending on how the single abstract method is used in your classes, this pattern might be a Template method rather than Strategy though. Namely, if it is called by some other, final method in the base class, rather than directly by the external world.

Title: Is it okay to have many Abstract classes in your application?

Body:
We initially wanted to implement a Strategy pattern with varying implementations of the methods in a commmon interface. These will get picked up at runtime based on user inputs.

As it's turned out, we're having Abstract classes implementing 3 - 5 common methods and only one method left for a varying implementation i.e. the Strategy.

Update: By many abstract classes I mean there are 6 different high level functionalities i.e. 6 packages , and each has it's Interface + AbstractImpl + (series of Actual Impl).

Is this a bad design in any way?

Any negative views in terms of later extensibility - I'm preparing for a code/design review with seniors.


答:
If the abstract classes are implimenting the same methods, with the same content then why have multiple abstract classes?

If they are implimenting the methods differently then I don't see a problem.

To improve extensibility use interfaces, then it is less of a problem if you then scrap the abstract class(es)


答:
I have developed neat meta-programming solutions with Prolog. Where the main application (in C++ say) translates an abstract definition of a problem into a Prolog application at runtime, which is then delegated to. Often writing equivalent functionality in C++ would take forever.

I think this scenario is an excellent case in favour of the code-writing-code argument.

Title: Automatic programming: write code that writes code

Body:
After reading the book The Pragmatic Programmer, one of the arguments I found most interesting was "write code that writes code".

I tried searching over the net for some more explanations or articles about it, and while I found some good articles on the subject, I still haven't found any specific code implementation or good examples.

I feel it's still not a so common argument, something that lacks documentation or it's not embraced by so many people, and I would like to know more about it.

What do you think about the subject? Is it something that will really increase your productivity? What are some good resources on the subject, among books, blogs, slideshows, etc?

Some code examples would be greatly appreciated to allow me to better understand its implementation.

Here's the wiki page on the subject with various relevant programming techniques, like Meta Programming, Generative Programming and Code Generation.


问:
Being stupid to get better productivity?
I've spent a lot of time reading different books about "good design", "design patterns", etc. I'm a big fan of the SOLID approach and every time I need to write a simple piece of code, I think about the future. So, if implementing a new feature or a bug fix requires just adding three lines of code like this:

if(xxx) {
    doSomething();
}
```

It doesn't mean I'll do it this way. If I feel like this piece of code is likely to become larger in the nearest future, I'll think of adding abstractions, moving this functionality somewhere else and so on. The goal I'm pursuing is keeping average complexity the same as it was before my changes.

I believe, that from the code standpoint, it's quite a good idea - my code is never long enough, and it's quite easy to understand the meanings for different entities, like classes, methods, and relations between classes and objects.

The problem is, it takes too much time, and I often feel like it would be better if I just implemented that feature "as is". It's just about "three lines of code" vs. "new interface + two classes to implement that interface".

From a product standpoint (when we're talking about the result), the things I do are quite senseless. I know that if we're going to work on the next version, having good code is really great. But on the other side, the time you've spent to make your code "good" may have been spent for implementing a couple of useful features.

I often feel very unsatisfied with my results - good code that only can do A is worse than bad code that can do A, B, C, and D.

Is this approach likely to result in a positive net gain for a software project, or is it a waste of time?

答:
good code that only can do A is worse than bad code that can do A, B, C, D.

This smells to me like speculative generality. Without knowing (or at least being reasonably sure) that your clients are gonna need features B, C and D, you are just unnecessarily overcomplicating your design. More complex code is harder to understand and maintain in the long run. The extra complexity is justified only by useful extra features. But we are typically very bad at predicting the future. Most of the features we think may be needed in the future will never ever be requested in real life.

So:

Good code that can only do A (but it is doing that one thing simply and cleanly) is BETTER than bad code that can do A, B, C, D (some of which might be needed sometime in the future).


答:
I suppose you could argue about how programmers and designers have different mindsets or different personalities, or argue about left-brain versus right-brain and creative versus logical, but really, there are three fundamental issues:

Programmers' work is their software.  They care about it; they devote their attention to it; they can get excited about it.  Users' work is something else; the software is only a tool to facilitate doing something else, and they want to spend as little time as possible paying attention to it so that they can instead focus about what they do care about.  As long as programmers misunderstand this, they're going to make the wrong tradeoffs in UI design.  (For more on this topic, see Joel Spolsky's "Controlling Your Environment Makes You Happy" or David S. Platt's "Fundamental Laws".)

Programmers know their software intimately.  They're comfortable with its detail and its complexity; they understand why it acts the way it does because they have a complete mental model of it.  Users don't have the occasion (or the interest; see point #1) to learn every detail, and it's impossible for them to have a complete mental model because they don't have access to or understand the source code.  (For more on the importance of mental models, you could perhaps read Donand Norman's The Design of Everyday Things; although it's not specific to computers, it's a good book on interface design.)

Programmers' tradeoffs are different than users.  A programmer can easily decide to leave a feature overly complex or only semi-automated or otherwise less than usable because for the programmer it's easier to deal with the lack of usability than it is to code it properly.  The user doesn't care (much) how much effort it takes the programmer to code it properly and would rather have it fully usable.

The third problem can be solved by having enough discipline to not take the easy way out.  I'm not sure that the first two problems are solvable; the closer you are to your work, the harder it is to see it the way an outsider does.  That's why usability testing - even simple, informal stuff like grabbing someone in the hall and sitting them in front of your app - is so important.

Title: How can programmers improve their UX skills?

Body:
As programmers we can solve very complex problems, but then, when we have to design a user interface we tend to fail on making them easy to use.

In small companies they can’t afford having designers and UX experts, programmers have to do almost everything in the software. But these interfaces are rarely intuitive (the classic example).

What is the problem? How can developers improve their skills in designing good user experiences?


答: Trying to predict what may be needed from code in the future often ends up being needless over-engineering (a habit I'm currently trying to shake). I would say just do the three lines. When the need arises (and not before), refactor. That way your code always does what it needs without being over complicated and evolves good structure naturally through refactoring.</p>

Title: Being stupid to get better productivity?

Body:
I've spent a lot of time reading different books about "good design", "design patterns", etc. I'm a big fan of the SOLID approach and every time I need to write a simple piece of code, I think about the future. So, if implementing a new feature or a bug fix requires just adding three lines of code like this:

if(xxx) {
    doSomething();
}
```

It doesn't mean I'll do it this way. If I feel like this piece of code is likely to become larger in the nearest future, I'll think of adding abstractions, moving this functionality somewhere else and so on. The goal I'm pursuing is keeping average complexity the same as it was before my changes.

I believe, that from the code standpoint, it's quite a good idea - my code is never long enough, and it's quite easy to understand the meanings for different entities, like classes, methods, and relations between classes and objects.

The problem is, it takes too much time, and I often feel like it would be better if I just implemented that feature "as is". It's just about "three lines of code" vs. "new interface + two classes to implement that interface".

From a product standpoint (when we're talking about the result), the things I do are quite senseless. I know that if we're going to work on the next version, having good code is really great. But on the other side, the time you've spent to make your code "good" may have been spent for implementing a couple of useful features.

I often feel very unsatisfied with my results - good code that only can do A is worse than bad code that can do A, B, C, and D.

Is this approach likely to result in a positive net gain for a software project, or is it a waste of time?


答:
very time I need to write a simple piece of code, I think about future

Maybe here is the problem.

At early stages, you have no idea of what would be the final product. Or if you have it, it's wrong. For sure. It's like a 14 years old boy who asked a few days ago on Programmers.SE if he must, for his future career, choose between web apps and I don't remember what else: it's pretty obvious that in a few years, the things he like will change, he will be interested by other domains, etc.

If, in order to write three lines of code, you create a new interface and two classes, you're over-engineering. You'll obtain a code which will be difficult to maintain and difficult to read, just because for every useful line of code, you have two lines of code you don't need. Not counting XML documentation, unit tests, etc.

Think about it: if I want to know how a feature is implemented in your code, would it be easier for me to read through twenty lines of code, or it would be faster and easier to have to open dozens of semi-empty classes and interfaces to figure out which one uses which, how are they related, etc.?

Remember: larger codebase means more maintenance. Do not write more code when you can avoid it.

Your approach is also harmful on other sides:

If you need to remove a feature, isn't it easier to figure out where a specific twenty lines method is used, than to waste your time to understand the dependencies between dozens of classes?

When debugging, isn't it easier to have a small stack trace, or do you prefer to read dozens of lines in order to figure out what is being called by what?

To conclude, it seems similar to premature optimization. You're trying to solve the problem without even being sure if there is a problem in a first place, and where it is. When working on version 1 of your product, implement features you need to implement right now; don't think about something you expect to implement in two years in version 14.


答:
good code that only can do A is worse than bad code that can do A, B,
  C, D.

1) Have a code which only do what is supposed to do.

If I feel like this piece of code is likely to become larger in the
  nearest future, I'll think of adding abstractions, moving this
  functionality somewhere else and so on.

2) If you plan your code to do A, B, C and D, the customer will ultimately ask you for E.

Your code should do what is supposed to do, you shouldn't think now about future implementations, because you'll never end changing your code continuously, and more important you'll over-design your code. You should refactor your code as soon as you feel it needs it because of present features, not struggling to get it prepared for something that it's not yet gonna do, unless of course you planned it as part of the project architecture.

I suggest you to read a good book: The Pragmatic Programmer. It will open your mind and teach you what you should do and what you shouldn't do.

Also Code Complete is a great resource full of useful informations that every developer (not only programmer) should read.


答: Writing lots of code that will (probably) never be used is a very good way to get issued with a P45.  You do not have a crystal ball and have no idea as to the final direction that the development will take so spending time on these functions just costs money for no return.</p>


答:
Something that hasn't really been made clear in the answers is that certification is very helpful if you're not a good programmer.

Forget working for "Microsoft, Google, Amazon, or startups run by folks from companies like those": what if your ambitions are lower and you want to work in (just an example) the IT department of some big government agency?  They don't tend to hire good programmers, and most likely the people interviewing you won't have the first idea what a good programmer is. But the MSCP cert might help your resume stand out from the pile of uninspiring resumes from other talentless programmers.

Title: Are certifications worth it?


问:
Test-driven development and improving white box testing skills
I am an entry level Java Programmer straight out of school.
I have good knowledge and experience with J2SE.
Can anyone advise me on how to improve or tune my skills towards being a Java white box tester? Wide range of inputs are welcome.

And what is Test Driven Development?

答: Junit is one of the best unit testing framework for the Java programming language. Its an open source framework to write and run repeatable tests.</p>

OwnerDisplayName: Swagatika


答:
I have encountered this problem many times in my career - the trick is to first be aware that it is a problem, and acknowledge it. Once you've done that, it's easier to stop making overly complex interfaces.

The user interface is also a part of software engineering, but perhaps for many software engineers not as much interesting. However, there are many interesting challenges related to this, and they can probably be as interesting as more technical challenges, in my experience.

Usability, user experience design (UX), human-computer interaction (HCI) - it's not magical, and it is a part of the software development process.

My tip is to:

acknowledge your limitations

ask and listen to people who claim to know about these things

when unsure, google it and look for authorative answers

By following these simple principles over the years, I have actually accumulated useful information on how to build user interfaces, how people interact with software, and how they think when they're using it. I am by no means an expert, but I probably know a little bit more than your average programmer.

Tl;dr: KISS


答:
Anecdote time:

I've had two developers work for me who leaned towards over-engineering in this manner.

For one of them, this basically ground his productivity to a halt, especially when starting up a new project. Most especially if the project was, by its nature, fairly simple. Ultimately a piece of software that works now is what we need. This got so bad that I had to let him go.

The other developer who was prone to over-engineering made up for it by being extremely productive. As such, despite all the extraneous code, he still delivered faster than most. However, now that he's moved on, I often find myself irritated at the amount of extra work that is needed in order to add functionality as you have to modify (entirely unnecessary) abstraction layers etc.

So the moral is, over-engineering will eat up extra time that could be better spent on doing useful things. And not just your own time, but also of those who have to work with your code.

So don't.

You want your code to be as simple as possible (and no simpler). Handling 'maybes' isn't making things any simpler, if you guess wrong you will have made the code more complex with no real gain to show for it.


答:
I normally don't like to quote Wikipedia but the information on this article seems safe enough...

http://en.wikipedia.org/wiki/Test-driven_development

Essentially in lay terms it is a Test-First approach to software development were unit tests are designed and written to use cases first, then hard development occurs afterwards to help make those unit tests pass.

Title: Test-driven development and improving white box testing skills

Body:
I am an entry level Java Programmer straight out of school.
I have good knowledge and experience with J2SE.
Can anyone advise me on how to improve or tune my skills towards being a Java white box tester? Wide range of inputs are welcome.

And what is Test Driven Development?


答:
Test Driven Development (TDD) and it's extended cousins, Acceptance TDD (ATDD) and Behaviour Driven Development (BDD) are useful techniques to learn as a tester in the Java ecosystem.  I'll focus on TDD as you're looking for white box testing.

What is TDD? - At it's heart it's the practice of writing a failing test (red), making that test pass by writing an implementation (green) and then re-factoring. The Wikipedia Article is a sufficient place to start to find out further information.  But the topic is vast, I recommend reading some of the well-known books in this space such as Test Driven Development by Example and Working effectively with legacy code.  I'll also throw in a shameless plug for the TDD chapter in The Well-Grounded Java Developer

In the Java ecosystem, this means you want to learn:

The JUnit library and/or the TestNG library.

A mocking library such as Mockito or JMock

A load testing tool to attack the code - JMeter

The concept of Dependency Injection (a form of Inversion of Control)

And then practice, practice, practice, practice.  Good Java white box testers are very rare, the best have written tests against a wide range of code bases.

HTH's get you started!


问:
Work experience instead of education?
I wanted to name this topic as "Education vs. Experience", but this topic already exists. I've read that discussion and though what I'd like to ask is related with that topic, the question is quite different.

I've started learning programming about 12 years ago. For the last 4 years I'm working as developer in software outsourcing (located in Russia). I'm thinking about leaving Russia and moving somewhere else like Australia (doesn't matter basically). I have a number of examples illustrating the general ability and success stories, but still there's a difference between all these people and my case.

I have quite a good technical experience - primary areas are C++ and .NET. I have already participated in 7 projects based on different technologies/platforms (Windows, Linux, Android, Qt, .NET, etc). So, I believe, I'm capable of working as a software developer. Let's just take it - "from technical standpoint, this guy is absolutely OK".

The only problem is, I don't have any education. So, here's the question:

In most cases, may I read words like "BS in CS, equivalent, or better" as "N years of experience"?

Update:
Is there a sense in getting certificates like MCSD (for .NET)? I know there's a separate topic for this question, but still asking for the case when there's no education but there are certificates and experience.

答: Different employers will vary in the way they regard experience versus qualifications. Some will take experience over qualifications, and those are the ones you want to work for anyway.  I have no formal programming education, although I do have a science degree, and I've been working in software engineering for 15 years now.  Last time I was hired it was in a fairly senior position, based on all that experience.</p>

Title: Work experience instead of education?


答:
Formal education does matter if you don't have any experience (i.e. someone who is fresh out of uni only has a tertiary education degree to build himself up). So, in your case, four 4 years experience will be seen as great professional experience! You should have no trouble finding employment.

However, an exception that comes to mind is that some companies like Google require you to have a degree in computer science or something equivalent. I believe these are in the minority though and can afford to do so because of the sheer number of applicants they have to sift through.

Title: Work experience instead of education?

Body:
I wanted to name this topic as "Education vs. Experience", but this topic already exists. I've read that discussion and though what I'd like to ask is related with that topic, the question is quite different.

I've started learning programming about 12 years ago. For the last 4 years I'm working as developer in software outsourcing (located in Russia). I'm thinking about leaving Russia and moving somewhere else like Australia (doesn't matter basically). I have a number of examples illustrating the general ability and success stories, but still there's a difference between all these people and my case.

I have quite a good technical experience - primary areas are C++ and .NET. I have already participated in 7 projects based on different technologies/platforms (Windows, Linux, Android, Qt, .NET, etc). So, I believe, I'm capable of working as a software developer. Let's just take it - "from technical standpoint, this guy is absolutely OK".

The only problem is, I don't have any education. So, here's the question:

In most cases, may I read words like "BS in CS, equivalent, or better" as "N years of experience"?

Update:
Is there a sense in getting certificates like MCSD (for .NET)? I know there's a separate topic for this question, but still asking for the case when there's no education but there are certificates and experience.


问:
Are certifications worth it?
I am finishing my college degree in programming soon and I'm exploring the next steps to take to further my career. One option I've been considering is getting a certification or a series of certifications in the area of development I want to work in.

Are these certifications worth the time and money? Do employers place a lot of value in them?

答:
Having a certificate is no guarantee that you're a good / great programmer, but it is a good indicator that you're at least up to a certain level (after all, it is possible to fail these tests...).

Any relevant qualification can only be a good thing (I'd question any company that discards your CV for having a certain qualification).

Recruiters need ways of filtering (sometimes hundreds of) CV's for developer positions, sometimes they'll use:

Experience. Being employed as a programmer for n years is no guarantee of quality. Most people have worked with a guy who's been doing it for donkey's years, but can't.

A degree. Being a graduate is no guarantee either. In my last job, I had to pass a language-agnostic programming aptitude test that included recognising patterns, algorithm efficiency etc etc. I did quite well (I got the job), but another applicant (with a 1st class honours degree from Cambridge) scored just 6%.

Certification. In my last interview, I was asked if I was a SCJP (for a Java development role). I wasn't (and still aren't), but if the choice came between two developers of apparently equal ability - the only difference being one had the certificate, I'd be surprised if they didn't get the job.

Showing prior work would be great, but who's to say you wrote it (and not a colleague) or that you came up with the solution and not just the code. ...and how long it took you.

Ability / aptitude tests are also great, but how many employers have the time to test, let alone mark hundreds of papers (assuming they want to know more than what a multiple-choice quiz would tell them)?

Nowadays, you need to tick as many boxes as possible. Many employers may not need all your skills (or may not know they need them) - but the more things you can do and, more importantly, the more things you have evidence of, the greater your employment potential.

Title: Are certifications worth it?


答:
Loki, I myself don't have any kind of degree, but I don't think that you can generally substitute "BS in CS" with "N years of experience".

I have applied for jobs that required a degree in the past and I have been hired (and I am talking about companies which are known to have rather strict policies). If you think you can compete with people who have a degree, don't hold back. Apply for a job that sounds good to you, regardless of the requirements on the ad.

As from now, I second @Andrew McGregor:

How much a degree is valued depends on the employer. I've heard stories of people who got neglected because they didn't have the best possible grade on their degree. I think the industry also matters a lot. Some jobs are quite hard compared to standard crud enterprise software/forms over data stuff, you'll need solid maths and algorithm skills to work on them and thus people with degree are preferred.

Title: Work experience instead of education?


答:
I personally think that with 7 years of experience you should at least obtain some interviews, provided that you organize your CV in order to show first your experience and below that, the fact that you do not have any education degree/diploma. There is no need to lie, but just avoid putting in big bold characters "I don't have any degree!!" :-)

Also, if you can put references of your project (websites, application names) that's even better.

I happened to have had a discussion on this subject with my HR director very recently and he told me this is what they put on nearly all job offers but what really counts is how the potential candidate's experience matches what the job is about.
I also remember that three years ago on my latest successful job interview there was no question at all on education, everything was about the latest project I did because some similar work was involved in the new job.

There is an interesting article covering that subject here.

Edit: regarding the certifications, it depends on the job you want and the workplace. For example, in Europe, it really does not mean much. However - as I already wrote in an answer regarding the purpose of certifications - if you want to be certified then the process of reading books and studying is useful in learning new tricks and having a more in-depth knowledge of the technologies. This is very useful in "technical" interviews.

Edit2: I agree with Andrew McGregor's answer, and I really thinks it varies for every workplace.

Title: Work experience instead of education?


答:
Once upon a time it was possible to find great talent in the work force that had acquired no collegiate degree because they had spent all their time acquiring actual demonstrable experience. Often this was not based on employment experience, but through other means. At that point, there was this unquantifiable status that was "equivalent of a 4 year degree".

As time goes on, the price of entry in almost any job in the corporate world is a 4 year degree of some kind, even if it's art history. Once the tech bubble burst, the job market was flooded with under employed people who all had the equivalence of a 4 year degree but also had some kind of 4 year degree as well.

If you see a job posting that says BS in CS for a major corporate opportunity, you're very unlikely even to be considered because the human resources department will immediately see you don't have the actual degree and they don't have a metric for what qualifies for a 4 year equivalency. If you see a job posting that is made by a recruiter or a headhunter, your chances go up because they can help bypass that human resources element and help you target your cv to a specific job for a specific client. You'll still be up against some heavy competition but if your cv is packed full of experience and technical yumminess then you may stand a chance.

As for certificaitons, they look great on resumes, but they don't really mean anything. Some employers will require that you have them, most will not. All of the companies I've worked for have largely disregarded these kinds of certifications. The only certifications I've run across that have had real impact on job consideration are the CISSP and related security certifications.

Title: Work experience instead of education?


答:
The answer is highly dependent on the local customs, so the question where you want to move to is important. My answer applies to the situation in Germany.

First the direct answer to your question:

Yes. equivalent, or better can be read as N years of experience.

Now for some background:

As a general rule, a degree matters a lot. People are very much focused on things they can see written on paper.

The specific situation in the IT sector is a little different. I have a degree in Process Engineering, and I acquired all my IT related skills through learning by doing, but never had trouble finding a job in IT. So a CS degree or similar is not always necessary. On the other hand, the fact that I do have a technical degree has been noted and taken into account when I applied for a job. So for the IT sector I would say that the general rule is: Any degree is better than no degree.

If you have no degree, try certifications instead. Any Blablabla Professional Developer certificate will help you find a job. As I said above, if you have it written on paper, it counts.

But this is all in order to pass the review by Human Resources. Once you are past that and start dealing with the department that wants to hire someone, job experience becomes more important (they still like to see degrees and certificates, though).

Title: Work experience instead of education?


答: I've seen Dedent in Fowler's book on DSLs.

Title: Opposite term of indent


答:
I have zero education (did not finish high school) and while education question popped out in interviews, I never had any problem to find work. In fact, at a certain point, education become less important as experience is what employers are looking for at the first place.

Of course I did few things to increase my chances to get interviews:

I put professional experience section first, ordered by date descending. Education was listed at the end on the last page of the CV, but I later completely removed the section since it was irrelevant and most employers did not ask a single question about them.

I put an emphasis on my ability to solve problems. Rather than explain the purpose of the project (which most job seekers does), I explained briefly the challenges and how I contributed to solve them.

I made my resume easy to read, without picture of me, and with a generic title. For example .NET developer will get you more interviews than Senior .NET Developer or .NET Architect. The reason is that the first leave the judgment to the guy that select the CV while the latter put you in a category that may not be suitable for him.

Create a CV per role. If you can coach, manage and develop, having a resume that will highlight every ability will be weaker than a targeted CV.

Your CV should be improved all the time. When the interviewer ask you if you have questions, ask questions about his company and all the recommended stuff but after that, ask them how they think you could improve your resume. It's how completed my "resumé" knowledge I gathered by experimenting.

Title: Work experience instead of education?


问:
Is there a reason for initial overconfidence of scientists and engineers working on artificial intelligence in the 1960s?
I just started an AI & Data Mining class, and the book. AI Application Programming, starts off with an overview of the history of AI. The first chapter deals with the history of AI from the 1940s to present. One particular statement stuck out at me:

[In the 60s] AI engineers overpromised and underdelivered...

What was the reason for the overconfidence? Was it because of mathematical prediction models showing that a breakthrough was around the corner, or due to the ever-increasing hardware capability to take advantage of?

答:
Another reason may be that mastering a computer / writing computer programs gives us little control freaks a feeling of omnipotence - in fact, one creates little universes, albeit closed ones.

This plus the lack of philosophical/epistemological education and naive trust in simple explanations like "Intelligence is nothing but ...." can lead to hubris.


答:
I often say that coding is like the light side/dark side of the Force - the "light" side requires more effort but yields greater results.  The "dark" side is quick and easy and gives greater benefits immediately but corrupts you down the road.  Once you start down the dark path, forever will it dominate your destiny.

I run into this all the time, at every job I've ever had, it's like a curse I cannot escape.  The company culture is always the path of the dark side, and quick hacks/fixes to push out new features, and my pleas and cries of refactoring and writing code properly falls on deaf ears, if it doesn't lead to my termination for "trying to change things" (no joke I have had that happen a handful of times, because I wanted to introduce design patterns and move away from quick hacks).

The sad truth is that often the stupid/dark side way is the way you have to tread, you just have to make sure to tread lightly.  I've slowly and sadly realized that programmers who understand the right way to write software, i.e. following SOLID, using design patterns, obeying SoC, etc. are much less common than the clueless hacks who will write an if statement to fix a bug, and when more bugs arise just add onto that statement instead of ever thinking "Maybe there's a better way of doing this" and refactoring the code to be properly extensible.


答: FWIW Google Docs and MS Word uses "Increase Indent" and "Decrease Indent".  I forget which editor (maybe it was TinyMCE, been working with that lately) but I know I once saw "Indent" and "Outdent"</p>

Title: Opposite term of indent


答:
It can be very hard to get somewhere when you don't know where you're going.

If we had some sort of reasonable explanation of what intelligence is and how it works, maybe we'd have a shot at effectively mimicking it. The Turing test is fascinating and useful, but is probably not sufficient to help us model true intelligence. For all we know, a "model" of intelligence might not be sufficient for true intelligence either.

Title: Is there a reason for initial overconfidence of scientists and engineers working on artificial intelligence in the 1960s?

Body:
I just started an AI & Data Mining class, and the book. AI Application Programming, starts off with an overview of the history of AI. The first chapter deals with the history of AI from the 1940s to present. One particular statement stuck out at me:

[In the 60s] AI engineers overpromised and underdelivered...

What was the reason for the overconfidence? Was it because of mathematical prediction models showing that a breakthrough was around the corner, or due to the ever-increasing hardware capability to take advantage of?


问:
Which .NET REST approach/technology/tool should I use?
I am implementing a RESTful web service and several client applications that are mostly in Silverlight. I am finding a litany of options for developing both the server-side and client-side of the API but am not sure which is the best approach. I'm concerned about stability as well as a platform that will continue to exist a few months from now.

We started using the REST Starter Kit with .NET 3.5 but moved to the new WCF Web API when updating to .NET 4.0. All of their documentation indicates that WCF Web API is the replacement for the RSK. However, Web API is only in Preview 4 and does not include support for Silverlight or Windows Phone 7 clients (yet).

WCF Web API looks like a wrapper on top of the WCF WebHttp Services stuff provided in the System.ServiceModel.Web library which makes me think that maybe it would be simpler to just go with the built-in stuff but Web API does offer some nice features.

I am specifically tied-up trying to determine the best course for the client-side. My main requirement is that I need to support deserializing into my client-side objects quickly and easily. The Web API offers a nice client library but doesn't have a Silverlight version.

I'd like to use the latest approach and the toolset that is being actively developed and supported.

Is the REST Starter Kit really obsolete?

Has anyone had any success implementing the WCF Web API toolkit?

Is there merit to using either of these over the built-in WCF WebHttp Services features found in System.ServiceModel.Web?

Is there a single solution that works for any client (web, Silverlight, etc.)?

What suggestions do you have?

答:
I havent used the REST Starter Kit but as im currently writing a .net 4.0 WCF REST API im fairly sure it does still exist :)

I would recomend you have a look at odata. Its amazingly quick and simple to code and plays nicely with silverlight.


问:
Can you write a (dynamic) website using only XHTML and CSS?
I am more of a desktop developer that a web developer. Therefore I only know XHTML and CSS when it comes to the web (and C#, if that is in any way useful). I have a little experience with ASP.NET with C# but I am in no ways an expert in it.

Say I want to write a small website to give a preview to any new software I make. Is XHTML and CSS enough to make it? Will I need to learn some server-side language? (or web development framework?) If so any suggestions?

I don't want to create something as awesome as Facebook or Stack-overflow. Just a normal website, kind of like http://thenewboston.com.

答:
For websites to have dynamic generated content, you need a script on a server (written with a server-side language) which will fetch informations from a database, and generate the page dynamically based on the requested informations.

```<code>User request -> Server get data -> Server send data back
</code>```

One of the most common programming language used nowadays by beginners and freelancers is PHP, with the MySQL database, mainly because it's fast to learn, easy to implement, and it's available on almost any web server for free.

Latest technologies include AJAX, which uses asynchronous JavaScript requests to interrogate a server-side script, which will fetch the informations and send them back to your page. This for example will allow you to gather informations and update the page in real time, without the need to reload the document.

This is also the basis of modern social network websites and web applications.

With XHTML and CSS only you won't be able to create a dynamic website.

To explain further, you must understand that XHTML is a markup language. It does nothing by itself if not presenting a well formatted document.

CSS is a presentational document containing a set of rules to modify how your document will be displayed.

So you need one or more scripting languages to make your page reactive to the user inputs.

Lastly, it's worth mentioning that nowadays you could even be able to create a dynamic website concentrating only on the front-end, by utilizing CMS and scripts which will enable on your website the functionalities you need, with their own servers and server-side scripts.

I know there are many options available already, and probably it's possible to do what you need without knowing anything about server-side languages.

Body:
For websites to have dynamic generated content, you need a script on a server (written with a server-side language) which will fetch informations from a database, and generate the page dynamically based on the requested informations.

User request -> Server get data -> Server send data back

One of the most common programming language used nowadays by beginners and freelancers is PHP, with the MySQL database, mainly because it's fast to learn, easy to implement, and it's available on almost any web server for free.

Latest technologies include AJAX, which uses asynchronous JavaScript requests to interrogate a server-side script, which will fetch the informations and send them back to your page. This for example will allow you to gather informations and update the page in real time, without the need to reload the document.

This is also the basis of modern social network websites and web applications.

With XHTML and CSS only you won't be able to create a dynamic website.

To explain further, you must understand that XHTML is a markup language. It does nothing by itself if not presenting a well formatted document.

CSS is a presentational document containing a set of rules to modify how your document will be displayed.

So you need one or more scripting languages to make your page reactive to the user inputs.

Lastly, it's worth mentioning that nowadays you could even be able to create a dynamic website concentrating only on the front-end, by utilizing CMS and scripts which will enable on your website the functionalities you need, with their own servers and server-side scripts.

I know there are many options available already, and probably it's possible to do what you need without knowing anything about server-side languages.


问:
What is the point of the prototype method?
I am reading through Javascript: The Good Parts, and struggled to get my head around the section on prototypes.

After a little google, I came to the conclusion that it is to add properties to objects after the objects declaration.

Using this script gleamed from w3schools, I noticed that removing the line adding the prototype property had no effect. So what is the point?

```<code>//Prototyping

function employee(name,jobtitle,born)
{
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
}

var fred=new employee("Fred Flintstone","Caveman",1970);
employee.prototype.salary=null; //  <---  try removing this line
fred.salary=20000;
</code>```

document.write(fred.salary);

答:
That's not how the prototype works. The prototype is used in the prototype chain.

Whenever you try to get a property on an object it will check the object for that property name. If it does not exist it will look in the prototype.

Example:

```<code>var o = {
  "foo": "bar",
  "method": function() { ... }
};

var o2 = Object.create(o);
var o3 = Object.create(o);

console.log(o2.hasOwnProperty("foo")); // false
console.log(o2.foo); // "bar"
console.log(o2.__proto__ === o); // true
o.baz = "foobar";
console.log(o2.baz); // "foobar"
</code>```

So the point of the prototype is simply code re-use and inheritance.

Body:
That's not how the prototype works. The prototype is used in the prototype chain.

Whenever you try to get a property on an object it will check the object for that property name. If it does not exist it will look in the prototype.

Example:

var o = {
  "foo": "bar",
  "method": function() { ... }
};

var o2 = Object.create(o);
var o3 = Object.create(o);

console.log(o2.hasOwnProperty("foo")); // false
console.log(o2.foo); // "bar"
console.log(o2.__proto__ === o); // true
o.baz = "foobar";
console.log(o2.baz); // "foobar"

So the point of the prototype is simply code re-use and inheritance.


答:
When you did fred.salary=20000 you have added the salary attribute only to fred.
When using prototype, all employees you will create from then on will have the salary attribute.

Say you have 100 instances of employees, and you wanted to add a salary attribute to all of them. You could to it manually, iterate over each employee and add it. Or you could use prototype and set if for all of them.

Prototype is useful when you want to add functionality to something that already exists. Say you want to add a custom method to arrays. You would do something like:

```<code>Array.prototype.my_custom_method = function() {...}
</code>```

From there on, all the arrays you will create, will have that method available.

Title: What is the point of the prototype method?

Body:
I am reading through Javascript: The Good Parts, and struggled to get my head around the section on prototypes.

After a little google, I came to the conclusion that it is to add properties to objects after the objects declaration.

Using this script gleamed from w3schools, I noticed that removing the line adding the prototype property had no effect. So what is the point?

```<code>//Prototyping

function employee(name,jobtitle,born)
{
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
}

var fred=new employee("Fred Flintstone","Caveman",1970);
employee.prototype.salary=null; //  <---  try removing this line
fred.salary=20000;
</code>```

document.write(fred.salary);

Body:
When you did fred.salary=20000 you have added the salary attribute only to fred.
When using prototype, all employees you will create from then on will have the salary attribute.

Say you have 100 instances of employees, and you wanted to add a salary attribute to all of them. You could to it manually, iterate over each employee and add it. Or you could use prototype and set if for all of them.

Prototype is useful when you want to add functionality to something that already exists. Say you want to add a custom method to arrays. You would do something like:

Array.prototype.my_custom_method = function() {...}

From there on, all the arrays you will create, will have that method available.


答:
Being aware of what might happen (future) is NEVER bad.  Thinking about what might be a better way to do something is part of what makes you good at your job.  The harder part is determining whether the time spent:payoff ratio is justified.  We've all seen situations where people do the "easy if" to stop the immediate bleeding (and/or yelling), and that as those add up, you get confusing code.   Many of us also have experienced overdone abstraction that is a mystery once the original coder moves on, which also produces confusing code.

I would look at your situation and ask these questions:

Is this code stuff that is mission critical, and will it be
significantly more stable if I re-code? In surgery speak, is this
refactoring lifesaving, or is it merely elective and cosmetic?

Am I considering refactoring code that we're going to replace in 6
months?

Am I willing to take as much time to document the design and my
reasoning for future developers as I am to spend doing the
refactoring?

Regarding my elegant design for adding future features, is this in
code that users request changes to every week, or is this the first
time I've touched it this year?

There are times where YAGNI and KISS win the day, but there are days where a fundamental change will get you off the downward spiral to crappiness.  As long as you are realistic in your assessment of not only what you want, but what others will have to do to maintain your work, you'll be better able to determine which situation is which.   Oh, and don't forget to write down what you did, and why.  It'll save those who follow you, but also yourself when you have to come back later.


问:
How to release project under public domain?
I'm currently working on project, which is going to demonstrate how widgets can be done with Context Framework. I will also publish the source code.

In this case I want to give users as much freedom as possible, so that they can freely copy-paste, modify and also relicense whatever code they reuse.

So, how do I mention that in the project? Are the some ready-made licences etc. that are suitable for this?

答:
First of all, make sure that the license of Context Framework is not binding you.

If yes, then you need to comply to it and release on the same or compatible license.

If not, just add a comment on top of your source files that says something like /*the following code is released in public domain (where applicable) */. People will ignore it anyway.

OwnerDisplayName: Mchl