3 ms·
Alternative answer: anything else you see being used. Learning a bit of JS means I can now make interactive reports that run anywhere. Learning some HTML and
by IanCal 10y ago
Alternative answer: anything else you see being used.
Learning a bit of JS means I can now make interactive reports that run anywhere.
Learning some HTML and CSS means I can throw together an OK website.
Learning some ruby and rails means I can now make certain types of websites really bloody quickly.
Learning some erlang meant I solved an annoying problem very quickly because it was just a set of message queues.
Learning some haskell wasn't all that useful directly, but was interesting. Not everything has to be some huge productive benefit for me.
Learning some GPU coding stuff back in the day let me build what I think might have been the fastest 'deep learning' thing at the time (certainly I was able to train in minutes what was taking Hinton days) and let me perform experiments remarkably faster.
Learning R recently has opened up a lot more avenues for analysis for me.
Learning some shell scripting has had obvious benefits on a daily basis.
---
I wouldn't argue for not learning other things too, but learning new languages can help because it can give you access to a huge toolkit not currently available to you. If you do sciency stuff or data analysis and you don't know any python, you're missing out on a wide range of very advanced tools that can make your life easier. Similarly with statistics and R, and I'm sure a whole host of other similar things are true for other languages.
- dx034 10y agoWhile I generally agree with your statement, I would avoid learning too many languages as a beginner. I use 2-3 languages regularly which is fine. As long as I start using others at the same time my productivity drops significantly as I have to think more about syntax and names. I think as a beginner it's great to learn a language in each domain (e.g. HTML, JS, SQL, Erlang). That way you always have a language to solve a task at hand, but don't confuse them. You also avoid spending too much time thinking about which language to choose for a specific task, when it mostly doesn't matter anyway.
- rrmm 10y agoFor me I think the threshold I'd suggest is learning enough different languages (from multiple paradigms and domains) and familiarity with enough frameworks to have confidence that when you require a language in a particular domain, you know that you'll be able to get up to speed quickly. In general it pays to know one or two languages deep down to the bare metal as it gives you a basis to reason about other languages. I would also suggest learning a language without garbage collection: It builds character, or at least the discipline to figure out a consistent practice that ensures every resource has one allocation and one and only one de-allocation. This discipline (of thinking about data flow through your program) will pay dividends as you organize your code even in gc'ed languages. While you're at it, learning how GC works (at least at a high-level) is useful as depending on the particular GC used in the language at hand you can either be working with it or against it. Learn your way around basic data structures: Most languages have a significant standard library, and much of the library is usually concerned with data structures. Knowing basic classes of data structures is the important thing here. Lots of stdlibs have hashes, heaps, linked-lists, or arrays even if they call them different things but the important skill is being able to look at the language docs and find the one that meets your requirement (fast look up time, stable ordering, fast sorting, etc) or be able to build a hybrid combination that combines the requirements you do have. Make sure you know how to use your tools including at least one debugger, a version control system, etc. I've found it pays to create toy projects in my spare time to gain familiarity with various new software and hardware. I have been surprised how often something I've just been playing with comes up. Someone will randomly ask, "can you set up a website with a CMS and customization," or "I need a hardware timer to sync these two instruments during an experiment." And I have at least a basis to begin to come at those projects even though they weren't things I had been initially employed to do.
- qznc 10y agoGood idea. Another advantage is for communication. There might be frontend programmers (HTML, CSS, Javascript, templates) and backend programmers (Java, C++, SQL). No matter in which camp you are, you have to talk to the other one. It helps, if you know something about their job. Playing with their tools a little is a good way to learn that.