This forum is in permanent archive mode. Our new active community can be found here.

Programming query

edited December 2011 in Technology
I thought about messaging few select people about this but it may be applicable to more people than I'm aware of so I just thought I'd throw up a thread.

What programming language do you think is "the best" (yes, I know its subjective) to learn? I ask because I am presently unemployed and have been trying to learn things to make me more employable.

My previous programming experience is basically nil. I took 2 C++ classes in college roughly a decade ago. My one friend who is an IT professional scoffed at learning python and instead suggested trying to learn HTML5 since (in his estimation) there aren't*(edit) many people who know a whole lot about that just yet. Any input is appreciated!
Post edited by Dromaro on

Comments

  • What do you want to do?
  • Python.

    An IT professional who scoffs at Python deserves himself to be scoffed at, says this senior IT professional.
  • edited December 2011
    @Andrew - I'm really open to anything at this point. I figure I'll learn one language first and develop a taste from there. I'm sure that doesn't help much. Coding, when I took the classes back in college, came fairly naturally to me but I *hated* doing it. At this point, I'm willing to bite the bullet to learn such a valuable skill. I mean, if there is a chance I may dislike what I'm doing going in, I might as well have myself completely into the pile of proverbial elephant poo.

    @Rym - Ok, he didn't scoff so much as upsell HTML5 FAR more than python. Like to the point of basically saying, "Python? Whatever. Here is why you should learn HTML5."
    Post edited by Dromaro on
  • We do a lot of work with Java.
  • Java is pretty much the teaching language of choice as far as I can tell. At least it was for me when I was taught programming on Java both in high school and the introductory university courses. (As an aside, those university courses are no longer mandatory but are being awarded when you go to a similar high school like I did. That change of course occurred a year after I started studying at the university).
  • What's your goal? To learn programming or learn industry skills to get a job?
  • Ultimately, to get a job. I know this is likely a year + operation but I'm willing to put in the time.
  • edited December 2011
    Don't learn a language. Learn to program. You are basically asking "Hey, what car is the best to learn to drive?" You learn to drive, then you can drive any car. Same with programming.

    Also, you are already going in the wrong direction. You came to a forum to ask a question that has been asked about 10 billion times on the Internet. The number one thing in being a technology professional is asking Google everything first. Then if Google somehow fails to answer the question, ask one of the Stackexchange sites, such as Stack Overflow. Even then, don't actually ask the question unless it hasn't been asked already. Programming is perhaps the single most well documented thing on the entire Internets. It's an extremely rare occasion when you actually have to ask a human being for any programming related knowledge.
    Post edited by Apreche on
  • I've also done that, Scott, but I also value the opinion of the people here as well. Notice I've also talked to people in person about this. I'm getting info from multiple sources. ;-)

    And how does one learn to program with a language being involved? I see the point you're driving at but it seems to preclude what I'm asking.
  • I've also done that, Scott, but I also value the opinion of the people here as well. Notice I've also talked to people in person about this. I'm getting info from multiple sources. ;-)

    And how does one learn to program with a language being involved? I see the point you're driving at but it seems to preclude what I'm asking.
    Too much preparing, not enough doing. Just start programming right this instant.

    http://bennesvig.com/2011/12/05/youve-probably-read-enough/
  • What you did by linking me to an article saying what you did in a more drawn out form? Saw it.
  • This is one of those threads where I read the first post and instantly know exactly how the rest of the thread will play out.

    "Oh, someone's asking which programming language to learn. Someone will say Python, someone might say Java, someone will ask what they're trying to do, and Scott will definitely say 'Doesn't matter, just learn to program.'"

    Never change, forum.
  • I knew that to, I just played my part.

    Scott, you should make a blog titled "why you're doing it wrong."
  • I knew that to, I just played my part.

    Scott, you should make a blog titled "why you're doing it wrong."
    I can fit the entire blog inside of one sentence.

    If you are wasting your time reading this you are doing it wrong.
  • I'm going to bump what Andrew and Scott said. There are a lot of different aspects to programming. For me, here is a rough list of my priorities.

    Logic, in all its forms.

    Problem Solving. Potentially including algorithm or systems design.

    Math. Never underestimate the importance of it.

    Knowledge of Technology. This includes hardware, software, and the languages you use.



    With regards to the initial question, picking a language is like picking a tool from a list of tools. Rym mentioned Python so I'll go there. Python is a great tool (for me at least) for getting a solution to a fixed problem relatively quickly. But I don't personally use it to build websites, crunch incredible amounts of data (where speed is a concern), and for various other projects. You can do all of those things with python, but for various reasons I keep other tools at-the-ready for the job.

    There are programmers that live an entire lifetime with one language and do so fairly well though - I'm just recommending what I think is the best practice coming at the topic. There are people that have lived their entire life in Basic, or Perl. Both valid tools for certain jobs, but I feel better equipped than them if I was suddenly unemployed.
  • I'm going to bump what Andrew and Scott said. There are a lot of different aspects to programming. For me, here is a rough list of my priorities.

    Logic, in all its forms.

    Problem Solving. Potentially including algorithm or systems design.

    Math. Never underestimate the importance of it.

    Knowledge of Technology. This includes hardware, software, and the languages you use.
    I'm downloading it now. Logic, I'm pretty strong in. Problem Solving? Meh. Slightly above average, I'd say? Math? I was a BOSS when I was younger but I haven't had to do anything more complex than basic Algebra in about 13 years so that would be a lot of learning. Knoweldge of tech? The REAL area of learning for me. I have no dobt I could get up to speed quickly, though. I am a geek after all. :-p

    As it turns out, a former coworker of mine at Blizzard got a job with a firm in LA county and they are totally teaching her how to code. She said she basically had no experience before landing there and they are helping her learn Python. If I could get basic skills while I apply there, maybe this could work!
  • edited December 2011
    I'll have to agree with Scott to an extent. Learn to program first and start with a language that's easy to pick up. Python is one of the best choices as a beginner's programming language in that it's easy to pick up, covers most of the concepts you'd need to know as a programmer, and is eminently useful for many programming tasks to boot. However, if all you know is Python or Python-like languages (such as Ruby), I don't think you've fully learned how to program mostly because Python doesn't cover every situation that may come up in programming, depending on the type of programming you do. After mastering the fundamentals in Python, I think you should probably learn some C and C++ get familiar with systems programming with static typing and without automatic memory management (and without objects in the case of C). A little bit of assembly wouldn't hurt, though it doesn't have to be x86 assembly -- there are good simulators for MIPS, 68k, and other assemblies out there that are less bizarre than x86 while still good for teaching the fundamentals of assembly programming. Once you have these skills down, you can pretty much hack away at any language without too much difficulty to get up to speed.

    As far as what language is best, it all depends on what you're doing. I work in C and C++, but I'm a systems software programmer who also does some kernel hacking and you need something lower-level like C and C++ to do that along with some occasional assembly to help with debugging. However, I use Python for a lot of my general purpose scripting (such as when writing tests that would be a pain to implement in bash). I've also done a bit of Java when dealing with some GUI stuff here. The problem you're trying to solve often dictates which language is "best" -- there is no one right language for everything.

    Thing is, I learned how to program purely in C and C++ and was able to self-teach Python and Java as needed because I already knew how to program.

    Oh, and HTML5 is not a programming language. It's a markup language. Totally different beast (although you can do programming using HTML5 in JavaScript, but that's not HTML5 itself).
    Post edited by Dragonmaster Lou on
  • edited December 2011
    Ooooh, Haskell. Hmm, that is one programming paradigm I have yet to learn but I've been meaning to just to improve my general skill set -- functional programming. It's not really used much in industry (unless you count writing Emacs modules), but I hear it's just a good mental exercise for programmers that can make them better in their languages of choice.
    Post edited by Dragonmaster Lou on
  • PROGRAMMING, ZBGURESHPXRE DO YOU SPEAK IT?
    http://programming-motherfucker.com/
  • PROGRAMMING, ZBGURESHPXRE DO YOU SPEAK IT?
    http://programming-motherfucker.com/
    Graphic on the left covers up parts of the text. Fail.

  • PROGRAMMING, ZBGURESHPXRE DO YOU SPEAK IT?
    http://programming-motherfucker.com/
    Can I take exception to the fact that they view the drive towards working software as an excuse for "tons of pointless tests"?

    Tests aren't pointless. Even if you think they are, they're not.

    Here's an article by a Google engineer who put a minor error in a mergesort algorithm into the JDK back around 1997, that wasn't caught until 2006. But if they had tested the edge cases (Edge case in this case being a list at least 2^31 items long) they would have found the error.

    Silly example, I know, but testing is important.
  • PROGRAMMING, ZBGURESHPXRE DO YOU SPEAK IT?
    http://programming-motherfucker.com/
    Can I take exception to the fact that they view the drive towards working software as an excuse for "tons of pointless tests"?

    Tests aren't pointless. Even if you think they are, they're not.

    Here's an article by a Google engineer who put a minor error in a mergesort algorithm into the JDK back around 1997, that wasn't caught until 2006. But if they had tested the edge cases (Edge case in this case being a list at least 2^31 items long) they would have found the error.

    Silly example, I know, but testing is important.
    I wouldn't say tests are pointless but I have seen patches with obvious bugs committed because all the tests passed.
  • Testing is important, but it should only be a small part of proper software engineering. I happen to be a fan of quick and dirty code reviews as well before committing patches (though not all companies do it). The way I see it, having someone else familiar with the code take a quick look at it before you commit your changes should, hopefully, prevent really stupid, obvious bugs from slipping through the cracks.

    No methodology is perfect, but there are many ways you can try to minimize bugs leaking out.
  • I only like automated testing depending on the kind of software you are writing.

    Let's say you are writing a controller for a joystick controlled robot arm. That's perfect for testing. The inputs and outputs are very simple and precise. It is trivial to automatically generate tons of tests.

    If you are writing a web application I personally feel that testing is a waste of time. Some people out there do advocate testing web applications, but they are crazy. The input to a web application is a complicated object, an HTTP Request. The output is another complex object, an HTTP response. Even writing just one test is a ton of work that can not be easily automated.

    Also, web applications interact with so many outside services that you have to mock them all up. It's like ok, we only want to test our code, not the database. So we'll make a fake database that way our tests are only testing our code. Then when you run the code for real it doesn't work because the real database is not the same as the fake one! On top of that you have to not only test the HTTP response, but the HTML/CSS/JS in every major browser.

    My rule of thumb is that if it takes more work to create an automated test than to have a human test by hand, then don't even bother with the automated testing unless you are so rich you can pay someone to do it all on their own. This is why video games just have armies of lowly paid human testers. For someone to write an automated test for a serious video game would take someone of a very high skill level a great deal of time. That person has the skills to make the game, so why waste them on testing?
  • While I agree with Scott for the most part, it's not as hard to make web application tests as you might think. We use them all the time at my company, and we really only have two testers. Yes, we do not test for a lot of edge cases, but it is still important to have some level of regression testing so that if we make changes, it does not screw up some other part of the application that we don't use regularly.

    To that end, the Selenium plugin for Firefox is amazing.
  • While I agree with Scott for the most part, it's not as hard to make web application tests as you might think. We use them all the time at my company, and we really only have two testers. Yes, we do not test for a lot of edge cases, but it is still important to have some level of regression testing so that if we make changes, it does not screw up some other part of the application that we don't use regularly.

    To that end, the Selenium plugin for Firefox is amazing.
    Selenium only tests from a very high level. It visits URLs, fills out forms, then looks at the results. With high level testing like that you might find out, for example, that a particular form is broken. That's nice. If you can get that done, it's very good to have.

    Even so, it isn't the kind of testing that test driven development people are advocating. They want you to test every component of your entire stack individually. You have to have a test for every class, method, etc. in your entire application on server and client side.

    Most of my job has functions that look like the following:

    def profile_page(http_request, profile_user, visiting_user):
    return http_response


    That is a function that takes three incredibly complex objects as its parameters and returns a very complex object as the response. A test for that requires entering so much data I don't even know how these guys do it.
  • Yeah, the stuff Scott works on would make automated testing pretty difficult. Compare that to the code I work on, where the automated tests can be summarized thusly:
    1. Start a backup application and backup to the appliance running the code your testing. Alternately, used "canned" backup data from the same application, depending on the test
    2. Make sure none of the code on the appliance crashes
    3. Make sure the deduplication ratios are what you expect
    This is an oversimplification, but you get the idea. It's something that's easy enough to script and automate. Even with this, because of all the various interactions, etc., TDD is a bit tricky. We do have some unit tests written for certain parts of the code (and even have programs that generate fake backup data that looks like the output from real enterprise backup applications), but it's pretty much impossible to do proper TDD with all the different variables (not in the code sense) we have.
  • Even so, it isn't the kind of testing that test driven development people are advocating. They want you to test every component of your entire stack individually. You have to have a test for every class, method, etc. in your entire application on server and client side.
    Yeah, to hell with that.
Sign In or Register to comment.