Available languages

Useful links
Читать на русском

Friday, April 16, 2010

Selection of the weapon or a comparison of different programming languages.

The purpose of this article: To shed some light and to summarize all the discussions about programming languages. It touches more sphere of sport programming. But I try to make the remarks more and more clear and right from time to time during my evolution and evolution of programming languages. Today is the 18th of April 2010.

Pro: very simple and strict language – easy for beginners – it’s easy to write and debug code.
Contra: no standard libraries (in comparison with C++ and Java ones).

Pro: STL (standard templates’ library) – many standard data types and algorithms. Great “freedom” – you can write the same things in many ways. Good performance of compiled sources. C++ is widely supported nowadays.
Contra: No BigInteger and BigDecimal (which are available in Java and C# libraries). Chance of different errors, which are caused by incomprehension between compiler and coder. You can find many discussions about them, but it’s not the problem of the language. But because of this great freedom it can be sometimes difficult to read the code or to debug it.

Pro: more strict syntax than in C++ – it’s easier to read the code – fast and easy debugging. Notifications about errors and unused code. Plenty of libraries. Garbage collector. New features in the latest version of java (eg.: variations of cycle for).
Contra: Slower performance of programs(3 or 4 times slower than C or C++), longer (uniformly long) source code, but coding (typing of code) is fast because of auto-completion.
Opinion of Petr: I think Java/C# (I don't see much difference between them except speed) are best suited for programming contests, since it's so much harder to make a mistake and so much easier to find and fix a mistake in a Java program than in a C/C++ program.
Much more strict type checking (implicit casts from long long to int and from int to bool??), out-of-range checking, code flow checking (allowing to read from uninitialized variables? why would a language allow that?), fantastic IDE which finds a lot of other mistakes for you, fantastically convenient debugging, more explicit syntax (a language with less power actually leads you to writing more readable programs), more explicit error messages (and the errors are always reproducible!) - to name a few advantages, but I've probably missed some more.
I think that writing correct programs and fixing them quickly when they're not correct far outweigh the disadvantages mentioned above (slower execution, longer programs). Even a 2x slowdown is almost never important in programming competitions, while a WA always is :) And I believe that most of the time at a programming contest is spent in thinking (including the thinking you do _while_ writing code), not in writing code, so the length of the program (or the typing speed, for that matter) is irrelevant.
And I believe the availability of various libraries is also not that important. So if I were to choose between C++ and Pascal, I'd choose Pascal because of the same argument (much more strict checking of everything).

Pro: Faster than Java. The latest version of C# default libraries includes classes and algorithms for long arithmetic as well as in Java, but in C# you can use them as basic types (in Python it’s also so): c=a+b, etc. Linq.
Contra: The latest version of .NET is still not available at most of programming competitions.

VB (object-oriented and event-driven, procedural, component-based)

Difference from C#: Programming language is Visual Basic and not C#.
Opinion of alliumnsk: VB.NET is just C# with syntax inherited from VB to ease porting of VB apps. So there is no reason to even think about VB.NET.

Opinion of _ph_:
Pro: Python – language of wide function. Man can write almost all types of programs in Python, except real-time programs. Python is unofficial language #3 in Google.
Python is well right for solving of easy-medium tasks thanks to short syntax and built-in means:
·         built-in long arithmetic (integer and decimal as well)
·         built-in list (aka vector<>), set, dict, tuple (aka struct)
·         regular expressions (re)
·         function sorted() for any sequences
·         nice string operations
·         nice constructers of lists
·         functions sum(), max(), min() wich can work with lists etc.
Contra: From point of programming competitions:
·         slow performance of programs (6x slower than С++) and especially slow input-output (you can’t read 10^6 of numbers in 1 sec without special tricks)
·         not enough good IDEs (I know only one good - PyDev for Eclipse)

PHP and other languages.
I don’t see any sense to use them at competitions. If I’m wrong – tell me.

Conclusion:
It is best to learn and practice as much languages as possible, to collect the knowledge, to know the nuances, but it’s not so easy and isn’t always possible. We are humans and we can’t change our nature, but we can try to make it better. Each language has its own pros and contras and you can choose one of them to solve different problems more efficient.
You must decide for yourself what you prefer: freedom and flexibility or simplicity of coding-reading-debugging-maintaining; what speed do you need and so on.
I hope this tutorial helped you to understand and systematize all these languages for yourself.

Additional and used information:
Links:

Lisp as an Alternative to Java: http://norvig.com/java-lisp.html

Choosing the weapon discussion: http://codeforces.ru/blog/entry/254
C# - why is it not mono? : http://codeforces.ru/blog/entry/229
A bit about C# and Linq: http://codeforces.ru/blog/entry/245
Definitions:

Pascal: http://en.wikipedia.org/wiki/Pascal_(programming_language)

C++: http://en.wikipedia.org/wiki/C%2B%2B

Java: http://en.wikipedia.org/wiki/Java_(programming_language)

C#: http://en.wikipedia.org/wiki/C_Sharp_(programming_language)

Visual Basic: http://en.wikipedia.org/wiki/Visual_Basic

Python: http://en.wikipedia.org/wiki/Python_(programming_language)

 

Tags: java, c++, vb, c#, pascal, python, the best language, programming languages.

 

Thanks to: MikeMirzayanov, Petr, alliumnsk, OSt, dAFTc0d3r, _ph_, Peteris, ktuan, SkidanovAlex, Nerevar, dev_il, valergrad and to everybody who has taken part in discussion.

Saturday, April 3, 2010

Top Coder schedule - Google Calendar

I deleted my calendar because I've found a better solution.
Darnley wrote a script wich parse Top Coder's schedule and export it into Google calendar. Now script works correctly. I hope it wont change. :)
Thanks, Darnley.
More...
I made a Google Calendar of schedule of Top Coder.
You can use it and even make better, if you want.

Useful links for programmers

Here I will collect useful, in my opinion, and interesting links for programmers: links to educational resources, competition sites, online contests, literature and advices on training, blogs of other programmers, archives and solves of problems.
More...

Friday, April 2, 2010

Mass printing... How to print locked pdf file.

Sometimes we have a problem: we have a pdf file with restricted printing. E.g.: we have made this file, have pushed the restrictions, but we've forgotten the password...
What can we do if we need to print it?
I use linux, now - almost the latest ubuntu (9.04). But the number of version is not the matter.
So. I have an option, how to solve our problem:
 

pdftoppm copy.pdf copy.ppm //each sheet of the pdf file will be saved in separate ppm file
convert *.ppm one.pdf //people guess that it works fine to unite many images in one pdf file, but I don't know exactly. If it works than it will use very much operative memory.  
for file in *.ppm; do ppmtojpeg $file > ${file/.ppm/.jpg}; rm $file; done //we want to convert all ppm files to jpg files
ls -d *.ppm | sed 's/\(.*\).ppm$/mv "&" "\1.jpg"/' | sh //we need to change the extensions of the files
convert *.jpg > one.pdf //you can also try it to unite your images in one pdf but I give no guarantees it works.
 
Really you can stop, when you have ppm files, if you can print them correctly/if you can store them, because they are much larger than such of jpg.
So you can print your locked pdf files.
I've done it on my laptop under Linux Mint 7 (Ubuntu 9.04).
Function convert comes in package ImageMagick.