Ask Slashdot: What Language Should a Former Coder Dig Into?
An anonymous reader writes "I was a consultant for nearly 20 years and I got into projects where I had to work with a huge variety of software, operating systems, hardware, programming languages, and other assorted technologies. After retiring from that I have spent the last 10 years in a completely different sector. Now I find myself wanting to really focus on coding for personal reasons. You can imagine how out-of-touch I am since I never really was more than a hack to begin with. I can learn syntax and basics in a weekend, question is, what Language should I become native to? Never liked anything 'lower-level' than C, and I don't have the funds to 'buy' my development environment....help me Slashdot, you're my only hope."
n/t
en.wikipedia.org/wiki/Brainfuck
-- Senior Software Engineer, Attorney appearance services, locallawyerapp.com.
"...help me Slashdot, you're my only hope."
You're screwed.
Don't worry, I can't think of many languages that for which you need to 'buy' a development environment.
Want to do frontend stuff? JavaScript, etc... Your dev environment is a good JS debugger in a browser.
C/C++: Do those in Linux for best ease of use (compiler and debugger come with the OS)
Java: Eclipse, or IntelliJ's open source edition?
I think even C# can be developed with a free editor...
Forgive me for sounding rude, but to give you advice about what languages to get into, without giving even a hint what you're trying to create, is ridiculous.
Languages have evolved around their purpose. No purpose, no advice.
It's clean, elegant. Has consistent, well thought out syntax, is easy to debug (PHP Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM) and is secure by default.
If this is for your own, personal use, I can only recommend that you take a week or two (or a month, if you like) and try out as many new and interesting languages as you can, then decide for yourself which of them you liked best. There's literally dozens of languages people will recommend, and very few of them are going to be "wrong".
Best all-around: Python
Best for enterprise work: Java
Best for OS dev, e.g. device drivers: C
Best for system programming above OS, e.g. database internals: C++
Best for game programming: C++
Best for financial apps: C#
Best social networking startup interview: Ruby
Best for web dev: JavaScript
Best for bioinformatics: R, SAS
C and Java are the leading languages by a lot of measures right now. C will easily get you a job, you'll get back into it easily because you already know it, but you'll have to learn how to write code without leaking. Java is a fine language, but the number of enterprise libraries you have to learn can feel overwhelming. C# can get you a job if you want live in Microsoft world, and it's designed to be easy to pick up.
Really I'd say focus on what you want to do, then learn what language is popular in that area. Embedded? Learn C. Enterprise code? Learn Java. Games? C++. If you want to do general scripting, learn Python. If you want to write web apps, focus on Javascript, and learn a bit of Java/Python/PHP/Ruby (choose your favorite, Ruby is fun) to figure out the server side. Choose one database (oracle/MySQL/Postresql) to start out with, the knowledge will transfer to the others. Figure out what you want first, then choose a language that will support it.
"First they came for the slanderers and i said nothing."
I'm pretty much in the same boat as you, trying to revive a career that I once had but spent the last 15 years removed from coding. I looked around a lot and asked a bunch of people stuff. I have chosen Ruby because it looks like it's strong, gaining popularity, and has a big demand in jobs right now. It seems everybody and their brother already knows Python and the PHP framework, so you'll get a lot of 'be one of us' posts, but I recommend you figure out your goal, besides just personal hobby stuff which you can do in any language. Looking for employ-ability? You might find what I did, that Ruby, then Ruby on Rails will be a good fit.
in a completely different sector
OP said he [she?] has been in a completely different sector. Who knows what the technology is like there?
--
Python, Ruby, Perl and their ilk are very useful for throw-away scripts, and even small applications. But beware if you're thinking of using any dynamic language for anything beyond a small application, especially if there'll be more than one or two developers working on it at any given time.
When working on larger projects, especially involving many developers, any time saved due to the capabilities of dynamic languages will be lost debugging problems that the compiler would've caught when using Java, C#, or C++.
Some people (especially Rubyists) will claim that these kind of bugs won't happen. They will, and they can be costly. This cost increases significantly as the program size increases, and as the team size increases.
Automated unit tests aren't the answer, either. You'll soon find that 90% or more of your unit tests are merely implementing checks that the Java compiler, for example, would've taken care of automatically. Again, like the debugging problem, this isn't an effective use of time.
You and your team may see some initial time savings when switching to a dynamic language, but there's a significant long-term cost that you need to consider, too. Something that would've taken an hour in Java may only take 15 minutes in Ruby, and another 15 minutes writing unit tests. But you'll find yourself spending well over 30 minutes debugging a problem involving this code at some points, usually due to a completely unrelated change. Meanwhile, a similar issue with equivalent Java code would've been caught by the Java compiler on the developer's system, well before the code ever was committed to whatever source control system the team is using.
And like I warned earlier, there will be people who claim that such problems "won't happen in practice". Chances are that these people have only worked on some small Ruby on Rails websites alone, or maybe with one other person. Had they worked even for a week with a 300 developer team, or even with a 10 developer team, all working on the same code base, they'd soon realize that such problems happen much more frequently when using dynamic languages than when using more static languages.
Wealth of books out there, it's fairly easy, and the "Express Edition" is free (and comes with a free Visual Studio). It looks good on a CV, makes you more attractive to the opposite sex, guaranteed to put hair on a billiard ball ... sorry, but you get the idea. Python's fine, but most fun is had in C#. YMMV, of course.
"The greatest lesson in life is to know that even fools are right sometimes" - Winston Churchill
You say you can learn the syntax and basics of a language in a weekend. You're probably right. What you can't learn in a weekend is the standard API that comes with each language, defining all the standard objects and methods you'll want to use. That's probably the biggest change in the last 10 years. What you want to look for in a language is one that makes it easy to do stuff. What you want to look for in an API is good, usable documentation.
Javascript, for one, is a pretty bad language with hardly any standard API (aside from the browser's DOM). Fortunately, there are free add-ons, like jQuery, that add both language features and an API.
Java was one of the first languages with a large standard API. It has nice documentation, but the language is barely better than C/C++. An ecosystem has developed around Java bytecode, however: languages like JRuby and JPython can run like Java and interface with Java code. There's also "groovy", a "modern" language built entirely around Java bytecode.
The major competing bytecode standard is .NET, from Microsoft. They offer free-with-certain-restrictions .NET compilers for C/C++, C#, Visual Basic, and more. All of them can use the .NET API which is documented on the MSDN site. I never found the documentation quite as nice as Java's; but it's usable. Again, other languages have been made to run .NET bytecode: IronRuby and IronPython.
Python and Ruby outside the bytecode versions have their own APIs. If you liked Perl and like object-oriented programming you'll love Ruby.
Finally, if you find you can't stand all this object-oriented programming, try PHP. It's used widely for making dynamic web sites, and has a nice, large API with documentation; but it rarely uses user-defined objects.
(T>t && O(n)--) == sqrt(666)
Programming isn't important. You "pay people to do that" - usually some minimal fee in the Philippines or Malaysia or India. The language to learn is chinese because this century belongs to them.
Shoes for Industry. Shoes for the Dead.
If you're doing it for personal stuff and don't have the constraints of the corporate world - Clojure. It's the cutting edge. It's way ahead of anything else out there today.
Pragmatic Programmers published "Seven Languages in Seven Weeks" last year. I liked the book and would recommend it for any one who wanted a taste of today's interesting languages. Over the past year, I've seen that some readers were disappointed at the language choices and some didn't like the way the author, Bruce A. Tate, selected a movie characters as shorthand descriptions for the languages' feels.
The languages: Ruby, IO, Prolog, Scala, Erlang, Clojure, and Haskell. As for development and runtime environments, these can be had and installed at no cost.
If I was asked to name the one language that is widely used, has immediate practicality, and the runtime is already installed on your computer, I'd pick javascript, which runs in the browser. Get a browser that has a console for reviewing javascript errors. The java part of its name is deceptive. It is quite different than java, but the 90s Netscape folks figured that that imprecision would help adoption. I'm not one to rue days, but that one could a candidate.
You didn't mention what languages you were familiar with from your consulting days. One question to be asked is whether you want to look at a language that is familiar but advanced the the ones you did work with or would you prefer to explore the other streams of language design. If you wish to write personal application and utilities, there is likely to be a language tied to your platform. For Windows, it's C#. For OS X, Objective-C. For Linux, you will have to pick a gui framework and its language.
If you don't work for a company that forces you to develop in language xyz then you should pick the language that fits your needs...not pick a language and then start writing away. Yes...most languages can be bent upside down and backwards to do almost anything. That's ignoring the point though.
You're completely free to choose. Most of us don't have that luxury. Study carefully what you want to do and pick the best language for that task. Do not ask a large group of tech heads what language they love best. All we are going to do is preach up and down what we use the most. I use J2EE at work and PHP at home. For old school applications that actually exist on the freaken computer they are being used on...I honestly like QT but I'd love to have another chance to try python as a long time ago I did some work with tcl/tk.
Regardless of what you pick someone is going to have a problem with your choice. In fact if you're looking forward to years of development chances are the language you choose may not be the language of choice for new projects when you finally get around to finishing it off.
Pick the right language for the job...don't pick the most popular language out there unless you're looking to be employed again in the field.
I agree with Python, and be sure to check out ActiveStates's Komodo Edit as your development environment.
The best diplomat I know is a fully activated phaser bank.
-- Scotty.
Because they don't want to say "I'm a noobie, what should I code in?"
If he was a seasoned programmer, he would have included little tidbits like what he intended to do, and what his experience was.
Web page? PHP.
High load gaming? a flavor of C.
3d gaming without reinventing the engine? Whatever that engine needs.
Phone apps? Java.
Simplify how his Linux machine boots? Bash.
Some new hardware that he just invented? Probably assembly.
"Hello World"? Any language he'd like.
I started real development with Perl. I've mostly moved away from it, but there are still a few things that I need the Perl modules to do, that are difficult to find good interfaces anywhere else.
Serious? Seriousness is well above my pay grade.
I've found that Qt wraps most for the craziness that is C++, it's a very nice toolkit for for "personal project" size. Don't know what the commercial market is and don't care, but for hobbyist work I find it great. Of course if you want to be part of the "cool kids" you'd probably go with Java so you can program for Android, mobile is all the rage these days but I don't feel I need it for my projects. And that's really the question, what kind of apps are you looking to make? Desktop apps? Mobile apps? Web apps? Scripting? Simulations? There's still no one language to rule them all because they all do better at certain things.
Live today, because you never know what tomorrow brings
As I noted in my post I never was a seasoned programmer, I was a total hack, aw hell you guys prolly don't even know what a hack is, you probably think I had an area of expertise too. I HACKED SHIT TOGETHER and got PAID! I learned whatever I needed to know to accomplish what others couldn't. I probably forgot more about the languages I've used than most 'experts' know of any single language. I couldn't possibly have listed all the languages and technologies I have done work with. But here's a sample.... BASIC, C, Pascal, Ada, COBOL, Perl, CGI, vbscript/asp, scripting (*ux shells mostly), VB, most recently PHP. I am only interested in general purpose work, utilities, hell I don't even know yet exactly where I will go with this. I was hoping for some informed guidance and expert advice but maybe slashdot isn't what it used to be...
"Evil man makes you kill me...evil man makes me kill you..even tho..we're just families apart.."
As I noted in my post I never was a seasoned programmer, I was a total hack, aw hell you guys prolly don't even know what a hack is, you probably think I had an area of expertise too. I HACKED SHIT TOGETHER and got PAID! I learned whatever I needed to know to accomplish what others couldn't. I probably forgot more about the languages I've used than most 'experts' know of any single language.
It will come back. Start with some of the languages you worked with already. Which brings me to the rest of your post:
I couldn't possibly have listed all the languages and technologies I have done work with. But here's a sample.... BASIC, C, Pascal, Ada, COBOL, Perl, CGI, vbscript/asp, scripting (*ux shells mostly), VB, most recently PHP. I am only interested in general purpose work, utilities, hell I don't even know yet exactly where I will go with this.
That's actually a pretty respectable list, although I don't know how deep your experience goes with each. In any case, if I were you, I'd start with a project in mind, and then choose one of your past languages that fits it best. From there, your experience will grow.
If it weren't for deadlines, nothing would be late.
General programming for personal uses or your own company: Object Pascal with Free Pascal (and Lazarus).
http://freepascal.org/
http://lazarus.freepascal.org/
You say you want to "code for personal reasons", which I take to mean because you find programming enjoyable and want to write programs for fun.
Then I would absolutely recommend Lisp and Smalltalk. For Lisp, you can get started with Lisp In A Box and Peter Siebels' "Practical Common Lisp". For Smalltalk, try Squeak accompanied by Squeak by Example. It's all free.
No, you are probably not going to get a job writing in either of these languages, but learning them may indeed help you get a job, as they are both conceptually deep, and their influences are broader than many realize: JavaScript borrows heavily from Lisp, and Ruby and Objective C from Smalltalk. Even Python and Perl have some Lisp concepts in them. In fact it seems that every new dynamic language to come out in the last twenty years owes something to these two languages. They are like the Greek and Latin of programming languages.
lol we know what a hack is, we don't know what you want.
Tell us what you want, and maybe someone will tell you how to get there. If you just want to hack together utilities, BASH is the way to go. But on the other hand, if you want to hack a graphics engine onto a neural network, you might want to hack in C++. But if you want to make simple GUI utilities, try C# (on Windows, QT anywhere else).
See? The answer changes drastically based on the question. If you didn't ask a good question, you won't get a good answer.
"First they came for the slanderers and i said nothing."
By leveraging Node.js you can write web services and client-side presentation with standard html and javascript. Can't think of another language that allows you to write a server and client with the same language with as much ease
You'd be surprised at how many languages allow you to write both client and server with the same language in a very convenient fashion, provided that you don't stick to the notion that the client must run in a browser.
If this is for a hobby, and you want to keep challenged, buy an FPGA development board (e.g. a Digilent Basys2 or a Papilio One) and learn a HDL. It will cost a little bit of money ($60) but you will get months of play time out of it.
Once you've programmed in 10 or so languages they are pretty generic, but the jump from programming to Hardware Designing is a complete mindfsck, but one you grok it it is very satisfying. Everything happening in parallel in hard real time....
Build your own 'soft' CPUs, invent the next big thing!
Okay, I almost feel like you are some evil pointy-haired-boss pretending to be an engineer so that you can try to speak as "one of us" and convince us to commoditize ourselves out of existence. Like somehow you think that programming is hard only because engineers are stupid and haven't bothered to make it easy, and you think that posing as a coder on Slashdot and whining about it will get us off our asses.
I'll skip the long drawn-out explanation for how ridiculous you are and just state that what you are asking for is not possible, the Turing Machine isn't just some paradigm that we can toss out the window because you don't like it, and that the industry is already churning out too many retards that only know how to do their job by screwing together buzzword frameworks without you helping us along.
Decide exactly what you want to do first, then decide on the most appropriate language to do it.
Having a problem to solve will help with two things - motivation when learning gets tough, and deciding on a language. There is no one true language which is best for everything. If you want to produce utilities for Linux or mac os, ruby, python, or even bash would be your best bet, though it does depend what for - for processing excel data I'd use csv export and ruby, for scripting adobe programs JavaScript, etc, etc. If you're on windows, perhaps consider their powershell thing and .net.
Also, don't ask slashdot for advice :) nowadays it's entertaining, but unlikely to be useful. Maybe things were different back in the day, but nowadays this site is infra digg.
brainphysicalexpressionofsexualattraction
From scarped cliff or quarried stone she cries "A thousand types are gone, I care for nothing, no not one."
Maybe it's time for them to gracefully retire and let a new generation have a turn at reinventing the wheel.
There, Fixed That For You
If my comment didn't sound as good in your head as it did in mine, then I guess we all know who's to blame
If you're looking to learn something new and general purpose, Python has a combination of decent docs (you can start with http://www.python.org/doc/ , http://pleac.sourceforge.net/pleac_python/ , and http://www.lightbird.net/py-by-example/ ), good libraries (see http://pypi.python.org/pypi and https://github.com/languages/Python/most_watched ) and all-around flexibility (all the regular system stuff, lots of microframeworks for web, scientific computing tools, 2d+3d graphics).
You may want to take a look at IPython ( http://ipython.org/ ), Reinteract ( http://fishsoup.net/software/reinteract/ ), and DreamPie ( http://dreampie.sourceforge.net/ ) for some interactive shells/interpreters to play around with. I use vim for programming, but there are a number of IDEs. Of the ones I've tried, I thought IEP offered the most interesting tools: http://code.google.com/p/iep/
Probably the fastest/easiest way to learn (and learn if you like) Python is to go through Zed Shaw's book/exercises: http://learnpythonthehardway.org/
There's a lot of other stuff on the Python wiki: http://wiki.python.org/moin/BeginnersGuide/Programmers
Slashdot definitely isn't what it used to be. For programming questions you may want to look at Stack Overflow or Quora. For general nerdly news, I find Hacker News, Techmeme, and The Verge tends to cover my bases better these days.
there's stuff like http://www.webtoolkit.eu/wt if you want to write both server and clients in one go.
world was created 5 seconds before this post as it is.
Your COSA thing seems to be describing exactly what every DSP language has already been doing since the dawn of time (take a look at SynthEdit, Max/MSP, SynthMaker for some very visual examples).
DSP languages are fantastic for parallel execution tasks such as... well... DSP. They absolutely suck at procedural tasks or complex flow control.
Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
in addition to being inherently sequential, timing is not an inherent part of the model
"inherently sequential" solves the timing problem. There are no concurrent operations in a Turing machine, and hence, no concurrency problem. The Turing model wasn't intended nor is it used to model parallel computing. Nor was it intended to be a viable computational language. It is merely a theoretical approach for putting bounds on how long it takes programs to do tasks.
The computer industry is facing a major problem known as the parallel programming crisis.
Nonsense. The problems of parallel computing have been solved in a number of ways and those ways work just fine.
The real difference between a Turing machine and a real computing machine is memory. A Turing machine has access to an infinite amount of memory. That's the way it breaks in the real world.
But who am I kidding?
Yourself. You demonstrate a profound ignorance of what the Turing computational model is used for. It's not intended in itself to be a model of parallel computing. There are variations that are, and which work successfully as such.
A second way that you're deluding yourself is in dismissing Turing machines on the basis of typical crackpot arguments. The Turing machine isn't "worshipped" in the CS community because Turing is a God, but because it is, to our knowledge, computationally equivalent (aside from the infinite memory issue) to any classical physics computing machine that we can construct in the real world. Come up with a better machine first.