What programming languages should a modern-day programmer have in his/her arsenal?
Answer by Joshua Levy:
For breadth of knowledge, a strong software engineer should have a basic level of comfort — that is, be able to write something nontrivial — in these languages:
- C for general familiarity with systems programming, and understanding how compilers, memory management, and the stack work.
- C++ because any programmer who works with C should also, as a practical matter, know C++, and the values and drawbacks of its features relative to C. Performance-sensitive or large-scale data processing (such as code at Google, Facebook, or most other serious tech companies) is still often best written in (a subset of) C++ . It also teaches some useful facts about messy topics like code generation (templates) and multiple inheritance.
- Python or Ruby for familiarity with mainstream, modern scripting languages. Dynamic typing, metaprogramming, rapid prototyping, and Web-oriented development are all easily learned with either of these languages. (Avoid debates on which is better [2,3]. They are both good to know, and more similar than they are different.)
- Java or C# for mainstream, modern, imperative, garbage-collected languages. Development in a higher-level, more modern language like these is not just popular, but stylistically different enough from C++ that you probably shouldn’t avoid learning it. Java especially can introduce you to heavyweight, enterprise-style development (for better and for worse [4,5]). They acquaint you with extensive sets of libraries that are good to know about, so you don’t waste time building things that already exist.
- Bash, at least at a basic level. This includes use of common Unix/Linux command-line tools like ls, grep, and sort. This is needed to be proficient in general problem-solving, debugging, and quick data processing on any Linux system. Without this, you may find yourself taking hours or more on something a hacker familiar with Bash could do in minutes [6,7].
- At least one or two other languages of a different family. It doesn’t matter if they are popular or esoteric, but you should have familiarity with functional languages (Lisp, Scheme, Clojure, etc.) and with type inference (ML, OCaml, Haskell, Scala), and ideally with more specialized languages (Prolog, Erlang, XSLT, etc.). Mathematical and statistical tools like Mathematica, Matlab, R, or Maple are also good. Some might say this isn’t important since industry doesn’t use these languages broadly, but it improves your understanding of programming enough that it can make a big difference in the long run.
You should also know one or two of the languages above at a deeper level. This would mean you have read and written a large amount of code in that language, know its subtleties, and have worked with or read the code of people who have expert-level proficiency in it. This also means knowing something of how the language internals work — at least look at code for the language’s compilers or interpreters, for its built-in libraries, and (if applicable) its native bytecode or assembly output .
Also, although these are not usually called programming languages, a good programmer should also know database/query languages, formatting languages, and data formats. Minimally: SQL, HTML, CSS, JSON, XML, and regular expressions.
A few other languages are important but less essential:
- Objective C and now Swift are required for developing on the iOS ecosystem, so for some people they are essential. If you’re building iPad or iPhone apps, you’ll learn them. If you’re doing most anything else, you won’t have any real reason to.
- PHP is still the most popular server-side Web development language. However, it’s not in the essential list above, simply because it’s not a good first language due to its poor design and shortcomings, and because once you know Python or Ruby, it is not too difficult to pick up.
- Perl has a venerable history and arguably is still the quickest tool for certain small tasks. It’s also fairly fast compared to Python/Ruby. However, it is a poor choice in most situations due to its age, poor readability, and dwindling mind-share.
Solid experience in all of this takes a while, but it’s one of those situations where being ahead keeps you ahead. Once you have breadth and depth, you’ll be stronger and more flexible than most professional programmers, which will help you find better and more challenging programming jobs, which will allow you to learn from the work and from others and keep improving your skills quickly.
 It’s a pretty awful language but we’re still stuck with it. See:
 Philosophically, there is a reason this is a good idea: Programming is about using abstractions. But great programmers (i) tend to use (or invent) effective abstractions and (ii) tend to know what details lie under the abstract layers. For example, see
Linux Mint cu dock de MAC (at Pascani)
Before the Big Bang there was nothing. What is nothing?
Answer by Vitaly Sikorsky:
The question itself assumes that there was nothing before the Big Bang. We don’t know that. In fact, there might be no such thing as absolute nothing whatsoever. Even the vacuum in the outer space is not empty. It has energy (vacuum energy/dark energy) and pairs of virtual particles spring into existence constantly from that “nothing”. So in our universe there is no such thing as absolute nothing. And a statement that there was nothing before the Big Bang is just an assumption. There are several approaches to this assumption is scientific community:
1. Our Universe is the only one, and it did come form nothing, because “nothing” is not really absolute nothing and it’s unstable, and in his book “A Universe from nothing: Why there’s something rather nothing” Lawrence Krauss quite convincingly argues how gravity alone is enough to give birth to a Universe like ours.
2. Multiverse (with many diverse approaches including string theory, cosmic inflation-based Multiverse, and many others). Our universe is just one of the many bubbles in the foam of others with different properties. And the assumption that there was absolutely nothing before the birth of our universe (the Big Bang) doesn’t apply.
Either way, nothing didn’t have to be created. It fact, there might have easily never been such thing as absolute nothing. However, there are ways to derive knowledge about the birth of our Universe (and what was before the Big Bang) from learning more about it. For example, if the predictions of inflation theory are correct (which is claimed to be confirmed by observation of influence of gravity waves on CMB photons in BICEP experiment), it implies that our Universe was born and is developing in a certain way, and that there are other universes. And none of those plausible scientific approaches need a wild assumption of somebody to have created nothing or anything at all.
What are the most learner-friendly resources for learning about algorithms?
Answer by Anonymous:
- Lafore, Data Structures and Algorithms in Java:
- Harris & Ross, Beginning Algorithms:
- Schaum’s Outline of Data Structures with C++:
- Sedgewick’s Algorithms in C:
- Dasgupta, Papadimitriou & Vazirani, Algorithms:
- Skiena, The Algorithm Design Manual:
- Heineman, Algorithms in a Nutshell:
- Knuth:(just kidding)
- Algorithm Design by Klienber, Tardos -
- Samet, Foundations of Multidimensional and Metric Data Structures, ISBN 0123694469 ,
- Bentley, Programming Pearls:
- 's Clever Algorithms in Ruby:
- Advanced CS Courses:
- Cracking the Coding Interview:by
- Archived Topcoder problems:
- Interview questions:
Which IDE is best for C on Linux Mint?
Answer by Clint Liddick:
A lot of love for the command line (vim etc.), but Kate and Geany are also great lightweight tools. Also, if you need something heavy duty (or are already comfortable with Eclipse) Eclipse with CDT (C development tools) also works great.
Try a bunch and see which you like best.
Such a catchy song!!
The Proclaimers - I’m Gonna Be (500 Miles)
What are some very sad facts of life?
Answer by Shane Kittelson:
That so many of us spend most of our lives crippled with fear of what other people think of us, when in reality, those other people aren’t making judgments on us, but rather, are worried about what we think of them…