I haven't done any development on Windows for almost 10 years, so I don't have an opinion on Nugets. Git seems more popular than SVN, but SVN is simpler to use. Jenkins is very widely used by Java developers, especially, but works with other languages. At least for Java, it builds on the command-line approach of Maven (a build tool), since it essentially runs commands like "mvn compile" "mvn test" in sequence and reports the result -- exactly as a developer would, either by typing them or pressing a button in the IDE.

Version control, a development environment, dependency management and a build server are all sensible parts of continuous integration (i.e. having automatic builds of the software which run the tests, to avoid introducing new bugs and mean the software is usually in a state where it can be demonstrated to the boss, or released). "Continuous Integration" (book [1]) is a good general guide, which helped me explain what the benefit of these tools would be to a reluctant team in a previous job.

-

I have sat near to developers using Windows, and I think the typical Linux (especially) "command line first" approach has significant benefits for any developer. Some one-off problems can be solved very quickly, and the solution is usually repeatable and can be automated.

Last week's issue was ~10000 identifiers, of which about 10 were known to cause an error in our REST API. The logging wasn't sufficient, but it was easy to make the read-only API call with every identifier:

I began with a single identifier:

curl -Ss http://api.example.org/get/1234

(retrieves the content of the URL)

Then made the test:

curl -Ss http://api.example.org/get/1234 | grep SUCCESS || echo "Problem with record 1234"

(finds any line containing "SUCCESS", returns true if found, false otherwise)

Then saw that I could read my identifiers (in reality, they were output from another command rather than read from a file):

for i in $( cat identifiers ) ; do
echo $i
done

Then tied it all together:

for i in $( cat identifiers ) ; do
curl -Ss http://api.example.org/get/$i | grep SUCCESS || echo "Problem with record $i"
done

Of course, this could be done in many languages (even Excel), but it's hard to beat shell script for development speed, and with the bug fixed we don't need to run this check again.

Last month, it was which of 100,000 ZIP archives contains invalid TSV data (wrong number of columns, should be 50)

for i in *.zip; do
unzip -p $i output.tsv | tr -d -c $'\t\n' | awk '{ print length }' | grep -v '^50$' && echo "$i corrupt"
done

(i.e. unpack only output.tsv, discard everything that isn't a tab or newline, print each line's length, then look for lines that aren't "50" and report.)

It's not the tool for everything: I wouldn't try and process XML, and CSV files with quoted commas would be better handled with a proper library, but hopefully that's an idea of some strengths.

For the specific task I mentioned (finding the bad commit), semi-pseudocode is

for c in $( svn print-out-last-10-commit-identifiers-from [repository] ); do
svn checkout --revision $c [repository] $c
cd $c
mvn compile test || break
done

[1] https://books.google.dk/books/about/Continuous_Integration.h...