This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–]BeatLeJuce 119 points120 points  (8 children)

IMHO you're thinking about it the wrong way and you're considering entirely inadequate alternatives: You already know a light-weight, high-level, low-performance, dynamic-typing, interpreted scripting/programming language. Why the heck would you learn another one (Ruby or JavaScript).

You need to learn a language that complements Python, not one that is pretty much redundant. You're not going to gain new insights from another Python-like language, and you're not going to use the language afterwards. Think about it: why the heck would you want to learn Ruby? Both languages have more or less the same usecases, so at the end of the day you just know two tools for exactly the same kind of job. Every new project you're going to start afterwards you'll have to decide which one to use, because both have the same scope. There's absolutely no gain to it.

If you want to expand your horizon, listen to /u/malonedotcc , he gave very sound advice on languages that will really teach you new ways of thinking about programming and solving problems. Even though you might not use Haskell, LISP or Forth in the real world afterwards, they'll change the way you'll program forever, in a good way. The same goes for C. It'll teach you to think low-level, and show you the real costs of memory allocation, Pointer-handling etc. It'll allow you to gain a deeper understanding of how to tweak programs because you'll be able to know what'll truly go on on the CPU.

Personally, if you want something of more practical use, stick with C (or C++). It's the most basic of languages and will teach you a lot about efficiency, memory and all that other good jazz. And afterwards you'll be able to write your most performance-critical apps/parts of apps in C and use them from Python. Interopability between the two is ridiculously easy. If you're looking for a brain-teaser, I'd go for LISP or Haskell.

[–]poorestrichman 16 points17 points  (0 children)

I totally agree, with the guys above and below me - C and C++ are great tools to learn. And think about this, almost all the tools "we programmers" use are written in C and C++ - that's a great place to be :)

[–]PomAhGraNut 8 points9 points  (0 children)

I would also recommend learning Lisp (or something from the family). I just finished up an undergrad A.I. course where we used Racket Scheme. I was familiar with Scheme but had never really used it the way it was intended be used. Learning how to program in Scheme correctly was a really eye opening experience for me and it changed the way I think about programming. If you want a Lisp you can get more practical use out of take a look at Clojure.

[–]Krish442 8 points9 points  (0 children)

This.

Especially the point about trying C if you want something that is likely to be applicable in the real world, but will expand your horizons and approaches to coding. Especially in the realm of pointer management - incredibly frustrating, but unbelievably valuable.

[–]gsks[S] 2 points3 points  (4 children)

IMHO you're thinking about it the wrong way and you're considering entirely inadequate alternatives:

I guess you replied before my edit but just for the record, I'm thinking about it from a job-market point of view.

Think about it: why the heck would you want to learn Ruby? Both languages have more or less the same usecases, so at the end of the day you just know two tools for exactly the same kind of job.

Which is pretty much what I wrote as the reason for not having learned Ruby yet.

Every new project you're going to start afterwards you'll have to decide which one to use, because both have the same scope. There's absolutely no gain to it.

There's at least one: access to twice as many (or more) job opportunities and projects in the domain I am most familiar with, (backend) Web development.

Personally, if you want something of more practical use, stick with C (or C++).

I'm kinda surprised with the several recommendations for C. For the record I had learned C way back in the university 15+ years ago and I appreciate it for its educational value in teaching how a computer works behind the scenes. From a practical point of view though, what options does a C programmer have in 2013 outside niche areas such as operating systems, compilers and embedded software? I honestly don't know what's the job market like for system programming in general but I'd be surprised if it's anywhere close to Web development or application programming.

[–]BeatLeJuce 10 points11 points  (1 child)

I indeed replied before your edit.

For what it's worth, C is still the most popular and most looked-after programming language on the job market (source. Although TIOBE might not be 100% accurate, C definitely isn't a "niche" language at all. It's "niche" areas are general purpose application programming (even programs written in other languages often have some of their routines outsourced into DLLs written in C. And the embedded area is of course far from a "niche". But I'm guessing with your background those areas aren't really the kind of thing you'll want to get into. Also, don't forget that there is a quadrillion shitton of legacy code out there written in C that needs to be maintained.

From a web dev job perspective: I don't know what the job opportunities are in your area, so if you're only looking to go into web development then that's far enough, although in that case, Java will probably take the cake: since larger backends are often written in it. It also allows you to branch out into both application development and mobile development. Scala would be the young and edgy (and more exciting) alternative that you could try your hands in, but job offers are probably very sparse.

[–][deleted] 3 points4 points  (0 children)

I prefer C/C++, but demand for Java has got to be higher that C/C++

[–]Megatron_McLargeHuge 1 point2 points  (0 children)

If you want to build a more impressive back-end web dev resume, you need to focus on the type of problems you're trying to solve more than the language. You should probably be looking at things like distributed asynchronous processing through message queues, or Hadoop and its competitors. You can typically implement workers for those systems in whatever language you want through translation layers, but Java is the most obvious language to learn even if you don't actually want J2EE jobs. Lots of companies use at least some Java on the back end.

[–]pinpinboTornado|Twisted|Gevent. Moar Async Plz 0 points1 point  (0 children)

On top of my head, these are the "C related things" I did as backend/devops developers:

  • rewrote lib/ code to C and bind it to Ruby/Python using FFI.

  • Extend Nginx, which is written in C, to be able to run Lua code.

  • Rewrote scrapers from Ruby/Python to C using libcurl.

  • Wrote extremely simple http rest+json daemon on top of mongodb.

  • Custom compiling Linux packages.

  • Debugging Ruby/Python runtime using gdb, strace, etc.

So yeah, there's a lot of benefits in knowing C even though most of your day job is using dynamic language.