Ask Slashdot: How Often Do You Switch Programming Languages?
An anonymous Slashdot reader writes:
I always see a lot of different opinions about programming languages, but how much choice do you really get to have over which language to use? If you want to develop for Android, then you're probably using Java...and if you're developing for iOS, then you've probably been using Swift or Objective-C. Even when looking for a job, all your most recent job experience is usually tied up in whatever language your current employer insisted on using. (Unless people are routinely getting hired to work on projects in an entirely different language than the one that they're using now...)
Maybe the question I really want to ask is how often do you really get to choose your programming languages... Does it happen when you're swayed by the available development environment or intrigued by the community's stellar reputation, or that buzz of excitement that keeps building up around one particular language? Or are programming languages just something that you eventually just fall into by default?
Leave your answers in the comments. How often do you switch programming languages?
Maybe the question I really want to ask is how often do you really get to choose your programming languages... Does it happen when you're swayed by the available development environment or intrigued by the community's stellar reputation, or that buzz of excitement that keeps building up around one particular language? Or are programming languages just something that you eventually just fall into by default?
Leave your answers in the comments. How often do you switch programming languages?
But then, I only fry firmware-burgers, so 'C' and assembler are it...unless you wanna count all the assembler flavors, then it would be 2 or 3 times a day...
(T)he (O)ld (M)an
I've been using C/C++ for almost everything for 15 years now.
I guess it generally comes with job switching and many times, it involved learning a new language
I switch when the job requirements suit a particular language or another. Right tool for the right job, right??? Right???
Small embedded ARM processors: C
Mid-sized embedded Linux: C++
Bloaty multi-core GUI with printer drivers, etc. running on Windows: C#
Cloudy web servery type stuff: Javascript
And, all of these can be found in a single shipping product. Go Team Silo Go! Hope it sticks when you toss it over the wall!
...about every 2 hours, on the current job.
Having said that, I speak over 60 programming languages (to varying levels of fluency) at last count, and I do the Pragmatic Programmers thing of doing another one every year. I may not be the best person to ask.
sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
Or at least it's the project that determines the language.
I use half a dozen different languages every day. You can double that if you look over the past year. There are a lot of factors that go into choosing a programming language and "what's new and cool" rarely is one of them.
The two biggest factors are 'what is the execution environment?' and 'what are the interface requirements?' Basically, 'who is going to run it' and 'what does it have to talk to?' (and they are closely related)
Next comes 'what are the related/currently existing projects already written in?' It's rare that you want to rebuild the whole thing. (Although sometimes that's exactly what you want to do.)
After that, I'll look at the available libraries and tools, but for the most part everything worth using is adequate in those areas.
Finally, if it makes it that far, I'll pick something I'm familiar with, just the make the whole project faster and less work.
Overall, it's been quite a few years since the 'language' of the project was something I even worried about. "When in Rome, do as the Romans do."
--Welcome to the Realm of the Hawke--
There's no point in changing language often. You stick to one and master it. I have a coworker who handles most legacy apps, it doubles the time taken to make fixes because he's in the wrong context.
I'd say 5 years is a good run for a language, you can return to it in a day later on. Sure you can do a quick hack in a non-mastered language, but your style aint stable and 3 months down the line it'll be spaghetti.
ID: the nose did not occur naturally, how would we wear glasses otherwise? (apologies to Voltaire)
I'm using Ruby for portable code, and plain C for Android-only. There are lots of options. The world is full of plenty.
I do still end up writing a few lines of glue in Java, though.
... it keeps things interesting.
Besides, I hate Bob in QA and it gives him conniptions trying to read it.
...I basically have three areas I write in.
There are the short and sweet (I mean, we all intend them to be short and sweet, no matter how unwieldy they get) system administration scripts. Those are basically always bash, although after I write them I always go "Damn, I keep meaning to try execline and forgetting it exists!"
There's frontend Web dev. Javascript rules the day here, until WebAssembly finally gets... assembled.
Then there's "everything else", which for the first ten years I wrote code meant Perl. I also flirted with Ruby and Haskell, didn't like Python much, despise PHP and used it anyway when debugging the seemingly-endless string of PHP webapps out there, and somehow convinced myself C/C++/C# were too hard for me to learn.
Then I discovered Rust, and now it's basically my favourite language for anything. Rust has actually made me seriously consider moving from administration and support to development (if anyone local was hiring entry-level Rust developers, anyway!). Will I consider other languages in the future? Probably. But I'm going to consider Rust first.
I still do some 8080/Z80 programming for my collection of CPM / TRS-80 machines. Also a little 6809/68HC11 for some embedded controller boards we made 20 years ago.
I even wrote a printer driver for a Heathkit 6800 system , had to enter all the hex codes in by hand via the keypad,
at least I had an assembler that generated the hex for me.
Managed to even squeeze a 256 step sine/square/random signal generator at 100Hz into an 8MHz 8051 derivative, had to count clock cycles on that one.
Ahh the good old days.
Comment removed based on user account deletion
In the last two months, I've used three different programming languages, maybe more.
The disturbing thing about the question is that it seems to assume you can only program at work. If so, I feel sad for you......you've never caught the enjoyment of programming.
"First they came for the slanderers and i said nothing."
One thing I do not miss (besides being woken up by the pager) is having my knowledge obsoleted and being forced to learn new things. Oh, but you're supposed to never stop learning, stay young, blah blah blah. Bullshit, that's a bunch of pro-corporate propaganda. Now, I learn something...it sticks. 5 years later, I still know the thing. In fact, after 5 years I'm probably quite good at it. I will stay quite good at it until it changes (slowly or not at all) or I die. Sure, new laws and regulations come along every so often and they must be mastered, but it is nothing like IT. I like this way much better than becoming an expert and then having to start all over at square 1.
Shutting down free speech with violence isn't fighting fascism. It IS fascism!
I use MongoDB because it's webscale. I also pipe data to dev/null because it's fast as hell.
But seriously, for web stuff, php/javascript and for Windows server work, believe it or not, VB.NET, because that's what the code I've got to work with was written in.
I just bought a used book from Amazon, "Writing Compilers and Interpreters: An Applied Approach," by Ronald Mak (1991 edition), to write an interpreter and compiler in an ancient dialect of C written for DOS-based C compilers, and the target language is probably an equally ancient dialect of Pascal. The 1991 edition supposedly has working C code, whereas later editions has C++ code that doesn't translate into a modern dialect. After this, I'm going to write a BASIC interpreter and compiler.
Bash shell - miscellaneous scripts
Perl - glue programs/scripts
Java - webapp
Javascript - webapp frontend
Obj-C - iOS app
PL/SQL - database triggers
I've been doing C/C++ for decades.
I've picked up some Java, Python.
Can do C# when it's the front end (I'm not a GUI guy).
Of course shell script is always useful.
I have switched computer languages many times. Some times for good, some times just for a project, but often I find a "better" language, only to find that it has many dead ends or other problems. My present primary language is actually two: Python and C++. With these two there isn't much I can't do. Where one is weak the other is strong.
.net is solidly in the trash, perl is solidly in my past, and very happily Objective-C is in the dumpster and I set it on fire.
That said, there are some situations where another language is called for. Javascript is pretty much the defacto browser language. Thus I would never try Python or C++ in the browser as that would just be horrible. But I don't really see Javascript as a great a language outside the browser as some people claim. Then there are scripting languages. I use Lua where I give users the ability to extend my programs through scripts because Lua is wonderfully tied into C++ through some awesome language extensions, they are tight and small. So would I say that I switch programming language when I jump to Lua or Javascript?
That all said, some languages are pretty much dead to me. Java is solidly in the trash,
I think that an interesting question would be more, "What language(s) do you presently use, what languages are your last 5 years of code largely in, and what languages are presently on your list of languages you are interested in exploring?"
I've been a developer on some pretty damn big projects. The kind of projects used by Fortune 500 companies -- everything from end-user facing applications all the down to low-level infrastructure projects.
If there's one thing I've noticed about all of these large projects over the years, it's that there is rarely ever only one programming language in use. Web apps will use Javascript on the front end and one or more language son the back-end. Large scale C/C++ apps will have a variety of scripts surrounding them. Every project needs an installer, some form of scripting for the build processes, deployment, automated QA, and (frequently) database management. There may even be a mobile app attached to the project. I've had to switch between C/C++, Bash scripting, Java (with JNI), SQL, and REXX, all in the same project.
The point being, if you work on a large enough project, and aren't a junior developer, you're probably switching between a bunch of different languages already. Those languages are probably fairly stable (i.e: you probably won't see too often where you change a massive project from Java to C#), although I've certainly introduced new languages and processes to big projects to make "dumb" processes smarter. The ability to do that, however, often comes when you get to a point in your career where you can specify and/or contribute to significant architectural changes.
I've also been fortunate enough to work at a few places where you can spend 10% of your time working on personal interest projects. If you're fortunate enough to be in such an organization, this is a great time to try out new languages that interest you. If not, find (or start) a project in the interesting language of your choice, and work on it in your own time. If you make it Open Source, and put it on GitHub or the like, you can include it as experience on a resume.
Yaz
I switch between languages several times a day, sometimes I use two at once, doesn't everybody who codes? I have a method for understanding the capabilities of a language by implementing some design patterns when I learn a new one, which is pretty fun to do. I have no shame, I am a geek!
Sometimes the features of one language teach you something new that you can apply to other languages. Learning is addictive, it's why I love programming.
Is it just me or does anyone else get the feeling that these odd questions are being asked by recruiters trying to figure out how technologists work?
My ism, it's full of beliefs.
Well, I switched from FORTRAN77 to C in 1981. Switched from C to C++ in 1990. Still using C++. Clients hire me to do C++. The right guy for the job I always say. For fun these days I have also been doing some Arduino stuff. Kinda refreshing. Reminds me of the old days..
Grandpa, Mom says you need to get off the computer.
How do you mean "switch". At my work we have a main dev language and a couple in-house languages that are used to generate code. I also use emacs as my main programming environment, so I write a little bit of elisp weekly, probably. Or do you mean how often do I abandon a language and move to a new one forever? In that case, not once in 15 years.
Xamarin
Obviously one I'm not familiar with, but had you not said it was a programming language I would have bet heavily on it being a psych med.
How often is it that you have a brand new system, in which you get to choose your language? Unless you are independently wealthy, or part of a funded started (indirectly independently wealthy, partially) the answer is probably not very often. Whenever someone has a brand new, completely open, technological problem, they have a green field.
This is not very common, at least for me. I have a BS + MS in computer science, worked for three years as an employee in two companies, and now own my own small software company (with two guys I pay to write code for me) and have been in business for myself for four years. I charge enough money to pay my people, and my bills, through revenue. That means, by definition, that my customers have to be able to pay. I live in a poor state, without a tidal wave of venture capital. Almost everyone here has a legacy system, which is generating them money, which they can use to pay us. Those systems come with constraints.
There have been three times in my 10+ years of experience creating software during which I was able to 100% choose everything technology related for a project. Once was part of a barely funded start up. The other was part of a successful business that contracted with my company to greatly expand their eCommerce, completely scrapping their existing system and letting me choose everything. The third is ongoing - a customer described their problem in a high level, and nothing existed to solve it. For the third example, I am bound by (light) constraints regarding the other system we are interfacing with, and it has to be web-based. Otherwise, my more than full time experience, has been as a maintenance programmer, or as a manager over a team of maintenance programmers. This guy is way more eloquent than I am about the subject, and way smarter + more successful. Think about what the very successful people have to say about these kind of things.
I think different people, in different states, have different approaches. The most poorly organized organizations, and ventures, had very few constraints. They didn't have to answer to anyone about their technological choices, and typically had money to "build something." Sometimes that results in beautiful leaps forward, for humanity as a whole. I think most of the time it doesn't. Maintenance programming means you are maintaining something useful, for someone that is interested in paying you. You'll also learn new skills, and new languages / technologies / tools, just out of necessity, rather than being freely chosen, with no constraints.
Given the set of products we have, from a single provider, I have to switch between: python, javascript, vendor specific language, java, bash, perl, xslt, power shell and sql on an almost daily basis. I rarely end a day dealing with a single language. Unfortunately, no C/C++ at my working place.
Achille Talon
Hop!
I am doing infrastructure for a well known, yet not public SF company. I've had days where I had to write code in 5 languages, going from interpreted languages with almost no type support, to Scala's type battleship. This raises problems for learning: I learned Scala somewhere else, doing nothing but Scala for months. When you can dive deep into a language, it's easy to remember it, and then bring back the knowledge on command. But without a deep dive, it's really hard to learn a language, especially when you deal with a bunch of similar ones. I never have to do much Ruby, or much Python, so they never stick in my head, and the lack of a compiler means I often write terrible, broken things. Maybe if I only wrote ruby for 3 months, then only python for 3 months, then maybe they would stick, but that's not now infrastructure work goes.
C does what I need it to do. Only thing I'd switch to is probably assembly, since that would make the code run faster.
Be seeing you...
You should almost never have the mentality of "I don't use such-and-such-a-language", whether it's because you don't like semicolons, hate whitespace requirements, or some other bullshit reason (come at me, I know you're out there :P). That doesn't mean you can't prefer one or the other, or even gripe about it to your co-workers; just don't let it get in your way.
If you've done enough programming and know at least 1-2 languages fluently, you should be able to pick up another very quickly (less than a week). Often, at a particular company or on a particular project, you don't get a choice. If you do, the requirements of the project will force you to choose between 2 or 3. If you happen to be in a situation where you have absolute control and get the final say on what language to use, then you should choose the one that is best for the job.
But when I say "best for the job", I don't necessarily mean in some theoretical, push-your-glasses-up-your-nose sense. I mean what will allow you to do the best you can to achieve the requirements of the task at hand. If the task at hand is to teach yourself something, choose a language you're less familiar with. If it's to meet the requirements of a client in a reasonable amount of time, choose a language you are more familiar with. If the application is computation heavy and speed is a requirement, choose a more efficient language. If you are not the sole developer, choose a language that your co-workers would be more comfortable with using.
Often (read: always), more than one of these factors will be relevant. It's up to you, individually or as part of a team, to weigh them and determine the best choice. That is what it means to be an expert.
Simply put, you should switch languages whenever you deem it necessary to do so. To know when it's necessary, you have to expose yourself to a lot of different languages.
Only crack the nuts that crack. You don't put the ones that don't crack in the sack.
I bet I have used languages with the same frequency as this kind of question comes up on /. -- current favourite is alpasisp+++^21
Seriously, it's all just syntax, convention, and architecture, so I don't bother to track. Off the top of my head, I'm up to 30+ "languages" in 30+ years. Throw in media (yes, starting with punch cards), then it gets worse.
I think a more relevant question is how often does one advance their architecture, paradigms, and most importantly debugging skills. Anyone can write a program that compiles and does something. Building something that is understandable, useful, usable, and maintainable, now that's a discussion.
OK, this breaks down into two domains:
If you are programming for a personal, or one person project, you have -some- choice, depending upon the target platform.
If you are joining a pro shop, the decisions have already been made. You either know the language and paradigm, or you convinced someone in your interview process that you could come up to speed in an acceptable amount if time.
I honestly fail to understand these debates.... logic is...... logic, once you understand it, the programming language is just a tool to express it.
And on that note, shitty, faulty code, that does not parse input properly AND handle exceptions is the root cause of almost all of the security problems we deal with, and it does not matter in what language the shitty code was written.
Oh, and NEVER try to invent your own crypto, unless you have a PhD, and THEN get it peer reviewed. But that is algorithmic, not programmatic...... and almost certainly not language specific.
Red
I dont switch. I start to use programming languages when is see it fit and stop to use them when I see it fit. It is not a 'Everything in one language' thing. Depending on the project, languages switch positions.
1987-1990: Basic
1988-today: Assembler
1989-1993: Pascal
1990-today: C/C++
1995-2010: perl
1996-today: octave/matlab
1999-2005: Autolisp
2000-today: Java
2002-today: Python
1995-today: bash
2007-2011: tcl/tk
Then again, I also work with small targets (couple of ten kB RAM, couple of hundred kB Flash).
Oh, and I switch to Matlab script occasionally, when determining what the small devices should actually do.
Can anyone explain why some people have such an irrational hatred of Ruby?
There are some really bad languages out there (Ruby isn't one of them) but none seems to garner quite the same mindless abuse.
I do compilers, low level OS stuff, debuggers, code analysis tools, so I'm always having to switch languages or keep up with other languages. When I have more of a choice my current preferences are a mixture of C++14, Perl and Assembly ( especially PowerPC ). Modern C++ is a pretty nice language and I consider it distinct from C++98 and earlier. I also have way too much fun playing with meta-programming when I can. And template meta-programming is always fun for adding another level. Wrote a binary object file parser once that was pretty much all default member initializers ( thanks C++14 ) and template meta programming. Why write a function when the compiler will do it for you, especially when you are writing another compiler.
I work at the real bottom of it. While other people think about "which OS (version) do I have to work on?", I sometimes don't even have a processor to work with.
I do FPGAs with VHDL, ARM CPUs in C and assembler, usually without any OS at all (think graphical UI on a machine with 2 kilobytes of RAM!), maybe with some library routines (not a full OS) for networking. Sometimes I have to work on the PC side of things, so I have a good part of my build chain (anything after the C and VHDL compilers to create update packages, etc), the communication libraries for my PC programmers, or simple tools in C and Perl, and sometimes BASH. And if it comes to worse, I do a bit of SQL, PHP, HTML, and even Lotus Script.
Switching between VHDL and C is so common, at the moment I have two VHDL and one C project open, and I work both - usually, while the VHDL synthesizes (10-15 minutes for one build), I write the test routines in C.
Used BASIC , FORTRAN and Pascal in school ('76 to' 82), used Tandem TAL, 6502, Z80 and 68000 assemblers, FORTH, C, C++, and Postscript at various jobs until I started using NeXTSTEP in 1989, used Obj-C from 1989 to the present, and I started using Swift when it came out two years ago.
So, Obj-C was my main language for around 27 years. I expect that Swift will be what I use from now until I stop coding altogether.
Along the way, I also had occasion to use Perl, various shells, and a tiny bit of Python and COBOL.
-jcr
The only title of honor that a tyrant can grant is "Enemy of the State."
When you have options, go for what you already (more or less) know. I have a fair amount of C/C++ experience, about 4 years of Objective-C on iOS, and a bit of C#. When the time came to start writing for Android, choosing Xamarin was a no-brainer.
If construction was anything like programming, an incorrectly fitted lock would bring down the entire building...
How do you do c++ scripts?
You use a package like ROOT which we use at CERN for data analysis. The original author had the idea that he would save physicists the time to learn a separate scripting language by using interpreted C++ as a scripting language. As you can imagine this did not work out very well. Firstly C++ has an appallingly bad syntax for scripting use and secondly there are many features they were unable to script like virtual functions.
The result that the scripting language was more of a C+/- which was badly documented and also very buggy. One of the worst ones I ever found ws actually using compiled code where adding a blank line i.e. just a new line character to the source code caused duplicate symbol errors due to using the C preprocessor to generate a symbol which only differed by the line number the macro was called on!
Debugging in general was also bizarre because the error messages you got rarely if ever pointed you to the problem and the memory management is also extremely unclear. The only thing which kept it somewhat usable was the development of the python interface...which of course completely undermined the original vision of scripted C++.
Unless you are in one of those 'multitasking' environments where everybody is feeling very busy but efficiency is crap, you can pretty much stick to the language that best suite the work you are doing.
The first is the implementation of the language. You start with Smalltalk, take out the bits of Smalltalk that are difficult to compile, and then end up with an implementation of a language that is slower than something like Squeak / Pharo, which are simple bytecode interpreters. That doesn't fill anyone with confidence in the language. I can understand Ruby not being faster than a JIT-compiled Smalltalk, but there's no excuse for it not having been faster than a reasonable Smalltalk bytecode interpreter from day one.
Then there's the community. The Ruby community spent a good decade taking 30-year-old ideas and claiming that Ruby had made them possible, that Ruby developers had invented them, and this is why Ruby is so awesome. Rails is a good example of this. ORMs have existed since the '80s. WebObjects was arguably[1] the first ever web app development framework and it included EOF, which did the same thing as Rails in Objective-C (later in Java) and has had an open source reimplementation since the late '90s (GNUstepWeb, later SOPE, the latter of which is used by [Scalable] OpenGroupware.org). Oh, and WebObjects had much better developer tools than Rails, supported multithreading long before Ruby was able to run multithreaded, and was an order of magnitude or so faster.
[1] There's some disagreement, related to announcement / beta / shipping dates, but it's either the first or second.
I am TheRaven on Soylent News
I always see a lot of different opinions about programming languages, but how much choice do you really get to have over which language to use? If you want to develop for Android, then you're probably using Java...and if you're developing for iOS, then you've probably been using Swift or Objective-C. Even when looking for a job, all your most recent job experience is usually tied up in whatever language your current employer insisted on using. (Unless people are routinely getting hired to work on projects in an entirely different language than the one that they're using now...)
Choice? Nowadays not a lot, I think; when I started way too long ago, you would choose a language that was accessible (in my case, one that I could find manuals for), then choose a job that required it. But back then you could get any number of jobs simply for being able to code. I started off with assembler, BASIC and FORTRAN in the 70es when programmers wrote in all upper case, added COBOL and PASCAL (still upper case languages back then) in the 80es, then C. I got into C++ in the 90es (because "The Future Has Arrived, And It Is Object Oriented"), and in the last decade or so I have used a much diverse range of languages - ksh and python for scripting, C, C++ and Java for application development, as well as whatever else was required on occasion. But C has been my main language for most of that time.
Maybe the question I really want to ask is how often do you really get to choose your programming languages... Does it happen when you're swayed by the available development environment or intrigued by the community's stellar reputation, or that buzz of excitement that keeps building up around one particular language? Or are programming languages just something that you eventually just fall into by default?
I think most developers really just code with whatever is used in their project, and will be able to change from one language to another with little difficulty. If I should make a guess, I would say that you start off early in your education by choosing the language that best suits your particular sphere of interest - GUI, back-end, kernel or whatever - but you will inevitably get infected by other languages over time. Personally, I have never paid much attention to what is popular or fashionable, but then I'm not a great follower of trends in general; I just use what seems best suitable. I suppose, when you build up your experience, you begin to notice that the differences between all those languages are fairly minimal - there's the old languages that seem to be made of cast iron and concrete, like COBOL and FORTRAN, there's a load of C style languages (including C++ etc), and then there are the "exotic" languages, if you will excuse my choice of words.
Most programming languages are the same imperative/OO thing, and after 5 or 6 you just don't care any more. If the project allows, do choose the best one for the job, even if mixing, but don't get too held up on this. As a previous poster said, the main programming language is... English.
Now switching platforms is another problem, and that can hurt a bit. Still, after a while the pain dulls.
I apologize for the lack of a signature.
I guess you are still working on that project.
If something is so important that you feel the need to post it on the internet... It probably isn't that important.
I looked at the syntax of Ruby once, immediatly hated it, and never looked at it again.
Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
DO YOU SWITCH SPANNERS
Being a software development consultant I get to work on various projects throughout the year. With every new project I tend to choose the language and tools that suit the project best.
And if you're working on Android, I would say it's worth taking a look at Kotlin instead of Java for your next project.
Pharo is not a simple bytecode interpreter anymore. Not even Squeak is, I believe. Nobody who has the option of using Coq/Spur is using the plain VM.
Ezekiel 23:20
I don't do ActionScript anymore (for Obvious reasons) and I've been doing more serious JavaScript lately (same reasons).
I moved into 'serious' PHP roughly 5 years back and will probably use it for another few years. I do various PLs on the side (C#, Python) but not as a mainstay.
I've been trying to pick up a truly compiled language (C++) for decades and now will probably finally do so. I generally like to pick up languages I expect to use until the day I die. That's why I only use FOSS PLs - ActionScript was a sole exception to that.
My 2 Eurocents.
We suffer more in our imagination than in reality. - Seneca
I said it!
Sent as ripples into the electromagnetic field. No single photon has been harmed in the process.
Full stack coding switching between Java, JavaScript. There's a lot of markup (HTML, XML) and SQL in there too.
and there is no switch statement, it is just called SELECT CASE...END SELECT, you insensitive clod!
I'm doing theoretical physics, and for the last couple of years, roughly half of my time has been comprised of numerical simulations. I'm free to choose the language I want for the programming part, since the main results that I'm paid to produce are not the simulation codes themselves, but the physical predictions they result in. (In practice, I started this project using Matlab, but it was too slow so I ended up rewriting it in Fortran 2008 for computation and Python for data visualization.)
Every time the C++ standards committee get together.
Ada is my first love, and it's been my primary language since 1985. Unfortunately, nobody has wanted systems built in Ada since the 1980s, so I've had to settle for Ada dialects such as PL/SQL and PL/pgSQL.I've had to code in the more modern languages as well, and given the contributions these languages make to project failures, I'm firmly of the opinion that if you want a large system built to last, build it in Ada.
I have never switching programming languages. But does they change themselves over time?
It's a stupid question. I never switch languages. I use several. Hell, by the time I finished highschool I was quite fluent in half a dozen. That was 19 years ago, extrapolate. I have favorites, not many, but usually I code in what's easier to do what I want to do, or in what is specifically requested. That's it. The question is still stupid.
I am putting myself to the fullest possible use, which is all I can think that any conscious entity can ever hope to do.
I'm a CIS adjunct, so it changes from semester to semester for me. This summer semester, I'm teaching advanced web design, so that includes JavaScript. Fall Semester will be web programming w/databases, so it will be either PHP w/MySQL or ASP.NET w/MS SQL--haven't decided yet, though I'd prefer PHP. Spring semester is usually an intro to programming course, and is either Java or Visual Basic, depending on where I'm teaching.I also used to teach Unix Shell Scripting & DOS batch files, but those courses were discontinued.
Taking guns away from the 99% gives the 1% 100% of the power.
Comment removed based on user account deletion
In my work, we deal with a wide variety (basically a large number of existing projects lead by other groups). So not only language, but style guidelines, processes, everything we adjust continuously to match whatever project we are working on at that moment.
I have been in other positions where you must not use anything but the one true process, language, and style guideline as set forth by the company standards.
In terms of when I *choose* for starting new, it's based on the available skills of the team I can put together. Despite all the 'oh language X is better than language Y', 99% of the time it doesn't really matter. You can do most things in any language, so it's most important to select whatever your team is most comfortable with. Yes, the potential performance and resource utilization may be better in some languages versus others, but most of the time with average teams, design choices will matter far more than runtime/compiler differences.
XML is like violence. If it doesn't solve the problem, use more.
It's not just all about languages of course since claiming to be a C++ programmer says squat of your ability to write a GUI. And writing a GUI for a desktop is different from one on a phone or on the web for that matter. So breadth of experience is important and feeds into the next thing. It also demonstrates to prospective employers that you are capable of learning new and can adapt your thinking. Even if you haven't learned tech X, you make have skills from tech Y which are transferable.
This is a somewhat silly question. Programming languages are tools and you use the right tool for the job. How often does a carpenter grab a different tool out of his toolbox? As often as he needs it. Your first paragraph gets to the point. If you're programming a particular target, then there's probably one or two tools best suited for it. Use that one!
Using the head of a screw drive to drive a nail might work, but why would someone do that when there's a hammer?
What is fluent? I haven't quite been programming for 300 years (only 40), but during that time I have certainly been fluent in at least eight languages. Some similar (Pascal/RatFor, C++/Java), others fairly different (Prolog, Lisp). The thing is, there are two aspects to fluency, and the second one is problematic:
- The syntax and semantics of the language. This is only difficult if you're learning a new paradigm. Once you know a particular paradigm, learning a new language in that paradigm is relatively easy.
- The built-in libraries, plus whatever external frameworks you need. This is essential knowledge, if you are going to be effective and productive on a particular project. At the same time, this is problematic, because there are zillions of frameworks, and they are continually changing.
I have always thought that job postings that require a particular language, or a particular framework, are stupid. A good programmer with a broad background can learn what they need in a few weeks (caveat: see the note above about new paradigms). A bad programmer, well, they're useless even if they have experience in some specific technology. Heck, this doesn't even make sense for entry-level positions: New programmers, fresh out of school, are going to require serious training and mentoring anyway, before you can trust them on business-critical systems.
Enjoy life! This is not a dress rehearsal.
BASIC, FORTRAN, PL/1, APL, COBOL, BCPL, C, ALGOL, Pascal, Various assembly languages (6502, S/370, PDP-11, VAX), C++, Java, Perl, PHP, C#...
And at that point, I do care: C# and Java are too confusingly alike-but-different to make a convenient fast switch. It's not just IT - I have the same problem with Dutch and German.
But maybe that's just because I'm getting old and/or my brain is now full.
Except in embedded systems and few webscale systems, performance is really not an issue in most software. What is needed is how easy it is for a human to program and extend it. The issues of 90s n before is not there now for most applications. Programming is getting a human thought/idea ..model it into a mathematical problem/model and from there the faster n easier the machine (language) can help, it's better. e.g you say you want a collection of data to be sorted, using some thing as key/ordering; and not care how the machine/language does it for you.
C may still be good for those embedded/performance critical; for rest I see language like python does the human-idea/algorithm to final-result much faster. It enables you to think in high level data structures/data manipulation and not worry about machine level issues. The higher you can abstract things, the faster and more easily you can extend the software. And s/w is an iterative task; you never know how the system is going to grow; so the easier it is to extend it's better.
Just resting: APL
In my sleep: C/C++, template metaprogramming
Intermediate: R
Passable: Perl, Python, shell
Long past: BASIC
At least once: Java, Pascal, OpenCL, Lua, VHDL, Snobol, Prolog, Forth, Lisp, TeX
Thoroughly evaluated: JavaScript
A few months back I looked at that list and decided I needed to add some tools more concurrency oriented, and something from the functional camp.
Learning rapidly: Elixir/Erlang/ELM, Go
My strategy in learning a language is to consume as much material as possible from the language designers, from during the language's actual design process.
YouTube makes my learning style ten times less difficult to arrange than it used to be. I keep a personal wiki, and I'm an extraordinarily efficient note-taker, so I care very little precisely what sticks in the first pass, so long as I manage to identify the language's motivating ideals and community norms.
2016 - MS .Net 4.0 .net Framework 2.0 (C#) .net Framework 1.1 (VB)
2015 - jsRender, jsViews
2014 - Raspbery Pi, jQuery UI
2013 - SVG, d3, RSS
2012 - jQuery, Ruby, nodeJS/node-webkit
2011 - Android
2010 - Arduino
2009 - Linux (Ubuntu), GTK+, SSH
2008 - Mono Framework 2.6 (C#)
2007 - MS T-SQL & Microsoft SQL Managment Studio
2006 - PHP, MySQL, AJAX
2005 - MS
2004 - Python, PBasic (microcontroller code)
2003 - RealBasic (Mac)
2002 - JavaScript, DHTML
2001 - MS
2000 - C++, Java, VBA
1999 - Linux (RedHat), bash
1998 - Visual Basic, HTML
1997 - PowerBasic
1996 - QBasic
1994 - GWBasic
...and I can still fondly remember:
10 color (int(rnd * 16)): print chr$(int(rnd*127)+127): $k = inkey$; if len($k)=0 goto 10
I wrote my own scripting language in Oracle PL/SQL (!) a couple of years back, and since then I write as much client-code I can in my own language.
Why? Because I can.
Sure, there's the odd project here and there where my clients, or the other "developers" they've hired, tries to force me to use some hocus-pocus-library - in Java/Python/PHP/Perl/you-name-it, which the project "absolute requires", but no one really understand why, or can tell me what it actually does. Essentially everything they try to force-feed me is a wrapper for some normal https-communication with XML/JSON parsing, or some fundamental economical/statistical calculation, but in 100 MB compiled code... I normally just rewrite the stuff I need in my own language, or in Oracle PL/SQL... I understand why I shouldn't "reinvent the wheel again", but I'm old-school, and my wheels turn faster than your wheels, and uses less memory, and has no known security holes, and are not dependent on yada-yada-yada, and... you get the idea.
I have seen so many "job openings" for people who knows about "programming language X" or "programming language Y" etc etc, and I fail to understand why the language-decision are being made by the guys hiring. Wouldn't it be better to let the actual developers choose? Hire problem-solvers, not syntax-gurus.
I have a set of tools, and I use the one I think is best for the job. Sometimes I will evaluate something new or less used, but only if I think it is still a good fit. People that have a default tool and use it for everything may "switch" after a time, but having a default tool that is not a good approach in the first place.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
Yes, I'm part of this thread, as a 65 year old. I first wrote a little FORTRAN program in 1966 to calculate Ï to run on an ICL mainframe that was part of the UK steel industry. Because computer time was so expensive, 'they' (management) wouldn't let it loop and loop.
On my list is Filetab: https://en.wikipedia.org/wiki/... as mad as Perl and, like Perl, very useful.
On y va, qui mal y pense!
At 35 I'm a subscriber to the 'switch every 10 years' philosophy.
.NET web stack. The two Linux/OSS/C++ companies are either tanking or have their employees giving very negative reviews and leaving. Five years later I'm making more now, but it was a big shift and I'm not sure I'm going to do it again.
Started in C++ in 2004. When I tried moving to Raleigh I found there were too many local C++ developers and too few C++ positions, so I took a pay cut to switch from Linux/OSS/C++ to
Think I might switch to R at some point if it gives me an edge on the age discrimination thing.
Basically I'm flying by the seat of my pants.
How Often Do You Switch Programming Languages?
This is the wrong focus. A more accurate (and interesting question) is how often do you switch stacks or architectures?
Embedded programming using, say, the Wind River toolchain can be quite distinct from doing Linux systems programming using the GNU tool chain. And these two are quite distinct from Windows systems programming using (duh) Windows toolchains. And these are all done (typically) in C. Similarly, C++ programming on Linux will be different from Windows programming, and more so when we start adding stacks and libraries like Qt when the objective is to use Qt's higher level capabilities instead of OS portability (which sometimes is not a bad thing.)
Same with Java. Right now I'm doing core Java, dealing directly with NIO, threading, etc, all outside the safety net of a container. For better or worse, our work does not use OSGI (and that would have been a very distinct type of work if such an architectural choice have been made.)
That is quite distinct from EE development. Working specifically to stay within a web container can be quite distinct from working on something *that exploits* every nook and cranny off an EE container. Then you can throw Spring (and/or OSGI) into the mix which can cut through every one of these dimensions in the Java world. And let's not get started when you move into a completely different paradigm (say vert.x)
In Javascript, this is even more radical since modern Javascript (for better or worse) has become some sort of meta-language that sits below a higher-level framework or architecture - be it jquery or dojo or extjs in the recent past, AngularJX, backbone, React and what now in our current times. Each of these poses a learning (and possibly architectural) challenge.
One sees the same with Python and Ruby to a lesser extend.
The .NET world provides more continuity in how things are build and a developer can, with relative ease, jump back and forth from C# to Managed C++.
And in the application space you have an additional dimension - application data storage. SQL or NoSQL. That will change how you design and code.
So the question that is more relevant is, how often do you change platforms and stacks. Because you could very well be using the same language for 6 years and have experienced a significant development and architectural shift.
I disagree - you can pretty much do anything with any general purpose programming language, that part is certainly true - but some things are vastly simpler to do using the "right tool for the right job." Only masochists would use Fortran or COBOL for writing a web service, and if you're talking about manipulating copious amounts of textual data, a scripting language like PERL will be a lot easier than C. Of course, if you're writing system scripts, you're not going to want to do it in COBOL. So cringe away - but there certainly are "right tools for the right job." I'm not implying only one language is good as solving problems in any particular domain, but that some languages are simply not suitable (in that it's a lot more work, and a lot more prone to problems) for certain domains of problems.
Stupid sexy Flanders.
For anything outside hardware control it depends on which language has the most relevant libraries in the problem domain, where the code you write is simply the glue. You don't want to spend time reinventing the wheel unless it's a hobby or an educational project. No need to switch unless you're changing problem domains.
I didnt see JOVIAL mentioned here yet. My first job out of school required me to program in JOVIAL. It went well...learned ADA, C, C++ after that... Wrote in a few others (took existing code and added functionality or fixed bugs) but not fluent. It feels like once I knew how to program the language didnt really matter. Sure it took a few days to spin up, and maybe a few weeks to get really good at a new language, but there is plenty of online stuff and usually someone else had been around longer then I and didn't mind teaching me a few tricks....in 2010 I switched over to Linux Admin full time. I enjoy it more the programming (after 20 years needed something new) but I could still pick up ADA, JOVIAL, C/C++ and be back in the grove within a few weeks...
#include bier;
does what I need it to do. Only thing I'd switch to is probably assembly, since that would make the code run faster.
This suffers under the misapprehension that you, as a human being, will be able to optimize for your processor (likely a pipelined architecture, perhaps with decades of inherited nits in it) better than your C compiler. You could be one of those handful of assembly gods for which that is true (or you could have a compiler with a freakishly shitty optimizer), but that's highly unlikely.
Of course there will be specific small cases where you might catch it doing something that can be improved, but in the general case assembly-level optimization these days is a problem best left to the compiler. This is why most C compilers have ignored low-level crap like the "register" keyword for years. ("Oh look! The human thinks he can optimize register allocation better than me. How adorable!")
About every 5 years I am picking up the latest languages that have survived the fashion-burnout because it's what Employers are looking for.
~ People that think they are better than anyone else for any reason are the cause of all the strife in the world.
I started with C in 1981, and used that (with a side-trip to Pascal) till about 1998, at which point I started tinkering with Perl. I have used Perl solidly since then, but just downloaded Go this week and started to tinker with that. So Go could be by next language. Who knows.
I routinely work on iOS (Swift, ObjC, some C), Android (Java, some C/C++), Xamarin (C#), Java Server, and .NET server. Lately we've been using Swift 3 server for some POCs. On the mobile side, you have very limited choices.
You can do native, which means Java on Android and Objective-C and Swift on iOS. You can do compile-to-native, which for me is C# on Xamarin, compiled to the native languages (C on iOS and C#Mono to JNI to Dalvik on Android) You can do Web-UI or Pseudo-UI with tools that work off Javascript such as Phonegap, Fiori, Titanium.UI, etc, but these generally lead to poor user experience.
On the server side, your choice is generally dictated by whatever the architect who designed it decided in the beginning (if you are lucky, this was you). Everyone comes in and wants to rewrite the ancient thing that sits on the backend, but it's often not worth it. I love J2EE but it's not what I'd recommend today for a new project. We're actively exploring Swift on the server, but it's not really production ready yet and won't be until the fall at least.
- Vincit qui patitur.
Once someone learns basic concepts, such as if..then..else, loops, pointers, and recursion for example, many programming language skills come down to syntax, libraries, and debugging. I jumped from programming COBOL for 15 years to C, C++, and Java without any issues, so I'd guess that someone who is a decent developer to begin with shouldn't have too much of a problem shifting gears to most other languages. I've also worked in a smattering of other languages (PL/I, FORTRAN) and far too many '3rd generation' tools. I even once modified code for a proprietary language I didn't even have a manual for.
Logic, pointer theory, and spatial relationships are probably the hardest things for anyone to understand. Those that can comprehend basic logic constructs and are able to 'see' code in their head can probably easily shift from language to language with ease. Those that struggle with any language probably will have a difficult time picking up new ones.
I think the biggest deterrent to learning new languages today isn't syntax or how the language works, it's the libraries and associated debugging skills. I had far more trouble learning C, C++, and Java libraries than I did learning the actual language. Modern IDEs make it a bit easier with predictive typing and on-screen syntax checking. But trying to figure out how to read a file or output to the screen can be extremely difficult in some languages because of all the possible options with all of the different libraries. Fortunately, anyone skilled in Google can usually find code examples rather quickly.
And then there is debugging, which I think is still an art. Many years (decades??) ago, I had a developer come to me with a persistent bug he couldn't fix. After he explained it to me, he started to show me the code. I stopped him, and told him to go look at a specific part of the program, he was missing a period. He thought I was pulling his leg, but left and came back shortly and asked how I knew what the problem was without even looking at the code. I remember saying to him 'Scott .. the only difference between you and me is I've already made that mistake several times'. Debugging, like libraries, in any language takes significant experience to get good at.
I rarely read replies, it's my opinion and if you thought about your opinion a little more, I'm OK with that.
My primary work product is a C/C++ manufacturing process-control application with bits of Lua and Perl embedded in it. Surrounding it are some web services, which I generally write in Python and Perl, with the front-ends obviously in Javascript.. There are some backend data-crunching services that process XML, and I've written those in Java.
A totally separate media-oriented project is a spitball of shell scripts, Perl, Javascript, and C, which I'm slowly replacing with Python, C++, Javascript, and Go. It's less a case of tossing the old code to replace it with something nifty and more the case of refactoring the code into a better-fitting implementation, now that we have a decade or so of use-cases to reflect upon.
I used to be a "C or GTFO" sort of guy until I realized how much time I was wasting by reimplementing hash tables and B-trees wherever I needed them. Python and Perl are decidedly Not Fast, but if they don't have to be fast, I can save a lot of stress and reduce the technical debt of code maintenance by writing the program in something where the problem domain fits better idiomatically. Sure, Java is annoying, but if you need to fan-out a couple hundred threads of data crunching, and your source data and results are in XML, the only thing that might fit better is C#.
I once read the suggestion to learn a new programming language every year. Do this. Get past "Hello, World," and at least solve toy problems. If you came from C, your whole world will change when you "get" map. If you came from Javascript, you'll have a whole new appreciation for the machine when you grok pointers. Try writing a piece of code in a functional style in a nonfunctional language (especially C) and discover how the language works against you and your resulting code is woefully inefficient.
Then, you'll be in a great position to embrace whatever tools you find and select the best one for the task at hand.
Pining for the days when The Glorious MEEPT!!! graced SlapDash with his wisdom.
I enjoy programming and have gotten to the point where I can pick up and start home projects on a whim. Normal workdays usually involve Python, maybe JavaScript and a heavier language, usually C/C++ or Java, now Scala. Of course build system DSLs are a plenty: make, cmake, autotools, pants, scons, etc. When I home I pick a personal project, with the language depending on the use case. Things that can possibly see the light of day get prototyped in Python. Experiments are usually Lisp or something new that helps solve the issue. Actual code I'm trying to release is Java for Android, C++ for performance, and Vala for home libraries which compiles to C.
For me learning the language is only about 15% of the cost. The rest are learning the tool chain, best practices, and above all the usage of the available libraries or class libraries. I'll be nearly any competent C programmer can switch to Java faster than they can make the transition from GtK to Swing.
MANMAN software On HP's MPE/iX 7.5
Tracy Johnson
Old fashioned text games hosted below:
http://empire.openmpe.com/
BT
I switch programming languages all the time: half the time I'm writing code in C#, the other half the time I'm writing code in javascript. I jump between them frequently, even in the same project! :p [/totally not what you meant]